Kimchi-devel
Threads by month
- ----- 2026 -----
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
August 2015
- 26 participants
- 91 discussions
I was looking at the following item in the backlog:
Guests Stats: Display memory utilization (use virt-df or virt-top or ...)
If I understood it right, the idea here is to show the -inner- memory
allocation of the guest. If you have a VM with 4Gb of RAM running an
Ubuntu, we want to know how much memory the Ubuntu OS and its processes
are using.
I've done an investigation and I haven't found any tool to accomplish
this. "virt-top", "virsh dommemstat" and the libvirt API retrieves the
information of the memory usage of the guest relative to the host. In
the example mentioned before, supposing that the host has 64Gb of RAM,
all these tools would show that the VM is using 12% of the host RAM.
They do not dive in the VM and shows the actual mem usage of the Ubuntu
and its processes running there.
Haven't found anything useful in other MLs and forums. The common answer
is 'run top in a terminal inside the VM', which of course does not suit
us. My question is: any thoughts about how we can implement this
feature? Because I am starting to think that, in the end, this kind of
info is strict to the guest OS and can't be polled from the outside.
Thanks!
5
5
Hi,
I'd need help to clarify which file has what license.
>From the COPYING file we can say that :
Files: *
License: LGPL-3.0
Files: ui/*
License: Apache-2.0
ui/spice-html5 and ui/libs are different
But we also have the following :
Files: contrib/*
Copyright: IBM, Corp. 2014-2015
License: LGPL-2.1+
Files: plugins/sample/i18n.py
Copyright: IBM, Corp. 2014
License: LGPL-2.1+
Files: plugins/sample/ui/*
Copyright: IBM, Corp. 2014
License: Apache-2.0
Files: src/kimchi/auth.py
src/kimchi/disks.py
src/kimchi/distroloader.py
src/kimchi/isoinfo.py
src/kimchi/mockmodel.py
src/kimchi/netinfo.py
src/kimchi/osinfo.py
src/kimchi/root.py
src/kimchi/utils.py
src/kimchi/vmtemplate.py
src/kimchi/vnc.py
Copyright: IBM, Corp. 2013-2015
License: LGPL-2.1+
Files: src/kimchi/basemodel.py
src/kimchi/imageinfo.py
src/kimchi/iscsi.py
Copyright: IBM, Corp. 2014
License: LGPL-2.1+
Files: src/kimchi/control/base.py
src/kimchi/control/debugreports.py
src/kimchi/control/host.py
src/kimchi/control/networks.py
src/kimchi/control/storagepools.py
src/kimchi/control/storagevolumes.py
src/kimchi/control/templates.py
src/kimchi/control/vms.py
Copyright: IBM, Corp. 2013-2015
License: LGPL-2.1+
Files: src/kimchi/control/cpuinfo.py
src/kimchi/control/peers.py
src/kimchi/control/storageservers.py
Copyright: IBM, Corp. 2014
License: LGPL-2.1+
Files: src/kimchi/control/vm/*
Copyright: IBM, Corp. 2014
License: LGPL-2.1+
Files: src/kimchi/control/vm/ifaces.py
src/kimchi/control/vm/storages.py
Copyright: IBM, Corp. 2014-2015
License: LGPL-2.1+
Files: src/kimchi/i18n.py
src/kimchi/kvmusertests.py
src/kimchi/proxy.py
src/kimchi/repositories.py
src/kimchi/swupdate.py
Copyright: IBM, Corp. 2014-2015
License: LGPL-2.1+
Files: src/kimchi/model/*
Copyright: IBM, Corp. 2014-2015
License: LGPL-2.1+
Files: src/kimchi/model/__init__.py
src/kimchi/model/groups.py
src/kimchi/model/hostdev.py
src/kimchi/model/interfaces.py
src/kimchi/model/libvirtconnection.py
src/kimchi/model/libvirtstoragepool.py
src/kimchi/model/plugins.py
src/kimchi/model/storageservers.py
src/kimchi/model/storagetargets.py
src/kimchi/model/tasks.py
src/kimchi/model/users.py
Copyright: IBM, Corp. 2014
License: LGPL-2.1+
Files: src/kimchi/model/featuretests.py
Copyright: IBM, Corp. 2013-2015
License: LGPL-2.1+
Files: src/kimchi/sslcert.py
Copyright: 2004-2005, OSAF. / IBM, Corp. 2013-2014
License: LGPL-2.1+
Files: src/kimchi/xmlutils/*
Copyright: IBM, Corp. 2014
License: LGPL-2.1+
Files: src/kimchi/xmlutils/cpu.py
Copyright: IBM, Corp. 2015
License: LGPL-2.1+
Files: src/kimchi/xmlutils/interface.py
Copyright: IBM, Corp. 2014-2015
License: LGPL-2.1+
Files: src/kimchi/yumparser.py
Copyright: IBM, Corp. 2015
License: LGPL-2.1+
Files: tests/*
Copyright: IBM, Corp. 2015
License: LGPL-2.1+
Files: tests/iso_gen.py
tests/test_mockmodel.py
tests/test_model.py
tests/test_osinfo.py
tests/test_rest.py
tests/test_server.py
tests/test_vmtemplate.py
tests/utils.py
Copyright: IBM, Corp. 2013-2015
License: LGPL-2.1+
Files: tests/test_authorization.py
Copyright: IBM, Corp. 2014-2015
License: LGPL-2.1+
Files: tests/test_exception.py
tests/test_networkxml.py
tests/test_plugin.py
Copyright: IBM, Corp. 2013-2014
License: LGPL-2.1+
Files: tests/test_rollbackcontext.py
Copyright: IBM, Corp. 2014
License: LGPL-2.1+
Files: ui/pages/*
Copyright: IBM, Corp. 2014-2015
License: LGPL-2.1+
Should these be LGPL-3 ?
Note : plugins/sample/ui/* is apache-2.0, maybe it's right because in a ui dir ?
Also, I just wanted to make sure, kimchi is LGPL-3 not LGPL-3+, right ?
Thanks,
Fred
2
2
Hi All,
first I want to clarify that the following proposal is targeting the 1.6
release and can wait till we have stabilized the new UI in 1.6.
But I guess that it will take some discussion to come up with a good
solution so I thought I'll start it now even knowing that I'll not be
able to participate in the discussion for the next 2 weeks since I'll be
travelling.
Problem statement:
- there is a set functionalities which are usefull/required in
kimchi and ginger, for example:
- logical volume management:
- required by kimchi to define a storage pool based on LVM
- required by ginger to manage the host owned logical
volumes
- networking: VLAN assignement, bridge management
- required by kimchi on virtual network management
- required by ginger outside/without virtualisation
Currently the functionalities mentioned above are part of the kimchi plugin.
Options to address this problem:
1. Implement the functionality in both plugins.
Pros: the current code in kimchi can stay unchanged
Cons: code dupplication, double maintanance
2. Share the source code modules
Pros: no code duplication
Cons: potential module duplication since the plugins are in
different repos
3. "Interfacing" between the plugins: one plugin implements the
functionality and is exposing an interface for other plugins
Pros: clean separation
Cons: dependency between plugins (but we have that anyhow
already between kimchi and gingercommon)
4. ???
My preffered Option would be 3. but potentially there are othere options
and aspect I may have missed.
5
5
Hi team,
I noticed that the new-ui design pattern for typography specifies Helvetica Neue family in four different styles. This font family is shipped with the latest versions of Mac OS X and iOS but it is not available for free on Windows and Linux distributions.
I believe this might conflict with Kimchi license. Even if we buy or rent a webfont license we can't distribute the TTF, EOT, WOFF and SVG files in our repositories. I think that we can't even use a webfont license in this case (pointing to a remote location or service like Adobe Typekit or MyFonts) because most font-licensing services are charging based on pre-paid pageviews.
Usually for web apps, mobile web apps and cloud based services we have to buy a server license to store the webfont files within our servers, but since Kimchi is an open-source project that anyone can check out and run, every kimchi instance would have to buy their own font license.
We can set Helvetica as the default font-family in the CSS and if the user doesn't have this font installed the browser will load the next available font (Arial or any other Sans-Serif) but since each font has different sizes, some elements may not fit in the screen exactly like they were seen in the mockups. Also, the UI specs recommends Helvetica Neue in 5 different styles (Light, Roman, Regular, Medium and Bold), most system fonts only have 3. We don't have something like "Arial Light" for instance.
My suggestion is that we replace Helvetica Neue for Open Sans because it covers all the style specifications and it is licensed under Apache 2.0. Any thoughts?
Thanks,
Samuel Guimarães
4
12
14 Sep '15
From: pappu <papsagar(a)in.ibm.com>
Signed-off-by: pappu <papsagar(a)in.ibm.com>
---
ui/css/theme-default/window.css | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/ui/css/theme-default/window.css b/ui/css/theme-default/window.css
index 5cb2790..f3924a3 100644
--- a/ui/css/theme-default/window.css
+++ b/ui/css/theme-default/window.css
@@ -78,7 +78,24 @@
overflow-x: hidden;
margin: 48px 0 56px;
}
-
+.window .close {
+ position: absolute;
+ width: 30px;
+ height: 30px;
+ top: 7px;
+ right: 7px;
+ -webkit-border-radius: 30px;
+ -moz-border-radius: 30px;
+ border-radius: 30px;
+ border: 2px solid #ccc;
+ color: #ccc;
+ font-size: 24px;
+ text-align: center;
+ line-height: 30px;
+ font-weight: bold;
+ background: #eee;
+ cursor: pointer;
+}
.window>header>.title,
.window>form>header>.title {
height: 48px;
--
2.1.0
3
3
The modules network and netinfo are specific to kimchi. This
patch moves them from wok to kimchi plugin and adapts the
respective imports.
Signed-off-by: Lucio Correia <luciojhc(a)linux.vnet.ibm.com>
---
plugins/kimchi/model/host.py | 2 +-
plugins/kimchi/model/interfaces.py | 2 +-
plugins/kimchi/model/networks.py | 4 ++--
{src/wok => plugins/kimchi}/netinfo.py | 0
{src/wok => plugins/kimchi}/network.py | 0
plugins/kimchi/tests/test_model.py | 2 +-
6 files changed, 5 insertions(+), 5 deletions(-)
rename {src/wok => plugins/kimchi}/netinfo.py (100%)
rename {src/wok => plugins/kimchi}/network.py (100%)
diff --git a/plugins/kimchi/model/host.py b/plugins/kimchi/model/host.py
index 3ff034c..8c891a1 100644
--- a/plugins/kimchi/model/host.py
+++ b/plugins/kimchi/model/host.py
@@ -25,7 +25,6 @@ import time
from cherrypy.process.plugins import BackgroundTask
from collections import defaultdict
-from wok import netinfo
from wok.basemodel import Singleton
from wok.exception import InvalidOperation, InvalidParameter
from wok.exception import NotFoundError, OperationFailed
@@ -34,6 +33,7 @@ from wok.xmlutils.utils import xpath_get_text
import hostdev
from .. import disks
+from .. import netinfo
from ..repositories import Repositories
from ..swupdate import SoftwareUpdate
from config import CapabilitiesModel
diff --git a/plugins/kimchi/model/interfaces.py b/plugins/kimchi/model/interfaces.py
index 81b379a..149afe3 100644
--- a/plugins/kimchi/model/interfaces.py
+++ b/plugins/kimchi/model/interfaces.py
@@ -17,9 +17,9 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-from wok import netinfo
from wok.exception import NotFoundError
+from .. import netinfo
from networks import NetworksModel
diff --git a/plugins/kimchi/model/networks.py b/plugins/kimchi/model/networks.py
index 57af9e7..621055e 100644
--- a/plugins/kimchi/model/networks.py
+++ b/plugins/kimchi/model/networks.py
@@ -23,8 +23,6 @@ import sys
import time
from xml.sax.saxutils import escape
-from wok import netinfo
-from wok import network as knetwork
from wok.config import PluginPaths
from wok.exception import InvalidOperation, InvalidParameter
from wok.exception import MissingParameter, NotFoundError, OperationFailed
@@ -32,6 +30,8 @@ from wok.rollbackcontext import RollbackContext
from wok.utils import run_command, wok_log
from wok.xmlutils.utils import xpath_get_text
+from .. import netinfo
+from .. import network as knetwork
from ..osinfo import defaults as tmpl_defaults
from ..xmlutils.network import create_vlan_tagged_bridge_xml
from ..xmlutils.network import to_network_xml
diff --git a/src/wok/netinfo.py b/plugins/kimchi/netinfo.py
similarity index 100%
rename from src/wok/netinfo.py
rename to plugins/kimchi/netinfo.py
diff --git a/src/wok/network.py b/plugins/kimchi/network.py
similarity index 100%
rename from src/wok/network.py
rename to plugins/kimchi/network.py
diff --git a/plugins/kimchi/tests/test_model.py b/plugins/kimchi/tests/test_model.py
index c70e4fb..027b3c2 100644
--- a/plugins/kimchi/tests/test_model.py
+++ b/plugins/kimchi/tests/test_model.py
@@ -28,7 +28,6 @@ import unittest
import uuid
import wok.objectstore
-from wok import netinfo
from wok.basemodel import Singleton
from wok.config import config
from wok.exception import InvalidOperation
@@ -36,6 +35,7 @@ from wok.exception import InvalidParameter, NotFoundError, OperationFailed
from wok.rollbackcontext import RollbackContext
from wok.utils import add_task
+from wok.plugins.kimchi import netinfo
from wok.plugins.kimchi.osinfo import get_template_default
from wok.plugins.kimchi.model import model
from wok.plugins.kimchi.model.libvirtconnection import LibvirtConnection
--
1.7.1
2
4
[PATCH 1/5] [WOK] Removing fontello references and unused CSS and old JS
by sguimaraes943@gmail.com 10 Sep '15
by sguimaraes943@gmail.com 10 Sep '15
10 Sep '15
From: samhenri <samuel.guimaraes(a)eldorado.org.br>
Signed-off-by: samhenri <samuel.guimaraes(a)eldorado.org.br>
---
.../ui/css/theme-default/jquery-ui.custom.css | 203 ----------------
plugins/kimchi/ui/css/theme-default/toolbar.css | 53 -----
ui/css/theme-default/topbar.css | 214 -----------------
ui/fontello/LICENSE.txt | 66 ------
ui/fontello/Makefile.am | 22 --
ui/fontello/css/Makefile.am | 20 --
ui/fontello/css/animation.css | 85 -------
ui/fontello/css/fontello.css | 261 ---------------------
ui/fontello/font/Makefile.am | 20 --
ui/fontello/font/fontello.eot | Bin 42700 -> 0 bytes
ui/fontello/font/fontello.svg | 220 -----------------
ui/fontello/font/fontello.ttf | Bin 42532 -> 0 bytes
ui/fontello/font/fontello.woff | Bin 24196 -> 0 bytes
ui/libs/jquery-1.10.0.min.js | 6 -
ui/libs/jquery-ui.min.js | 13 -
15 files changed, 1183 deletions(-)
delete mode 100644 plugins/kimchi/ui/css/theme-default/jquery-ui.custom.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/toolbar.css
delete mode 100644 ui/css/theme-default/topbar.css
delete mode 100644 ui/fontello/LICENSE.txt
delete mode 100644 ui/fontello/Makefile.am
delete mode 100644 ui/fontello/css/Makefile.am
delete mode 100644 ui/fontello/css/animation.css
delete mode 100644 ui/fontello/css/fontello.css
delete mode 100644 ui/fontello/font/Makefile.am
delete mode 100644 ui/fontello/font/fontello.eot
delete mode 100644 ui/fontello/font/fontello.svg
delete mode 100644 ui/fontello/font/fontello.ttf
delete mode 100644 ui/fontello/font/fontello.woff
delete mode 100644 ui/libs/jquery-1.10.0.min.js
delete mode 100644 ui/libs/jquery-ui.min.js
diff --git a/plugins/kimchi/ui/css/theme-default/jquery-ui.custom.css b/plugins/kimchi/ui/css/theme-default/jquery-ui.custom.css
deleted file mode 100644
index 56f7e06..0000000
--- a/plugins/kimchi/ui/css/theme-default/jquery-ui.custom.css
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-.ui-button-primary {
- border-radius: 8px 8px 8px 8px;
-}
-
-.ui-button-primary.ui-state-default {
- background: none repeat scroll 0 0 #0066FF;
- border: 0 none;
-}
-
-.ui-button-primary.ui-state-disabled {
- background-color: silver;
- opacity: 1;
-}
-
-.ui-button-primary.ui-state-hover {
- background: #0044DD;
-}
-
-.ui-button-primary .ui-button-text {
- padding: 10px 23px;
- font-size: 13px;
- color: #EEEEEE;
-}
-
-.ui-button-secondary {
- border: 1px solid #AAAAAA;
- border-radius: 5px 5px 5px 5px;
- cursor: pointer;
-}
-
-.ui-button-secondary.ui-state-default {
- background: linear-gradient(to bottom, #FFFFFF 0%, #E5E5E5 100%) repeat
- scroll 0 0 transparent;
- box-shadow: -2px -2px 2px #EAEAEA, 2px 2px 2px #FFFFFF, 3px 3px 3px white
- inset, -3px -3px 3px rgba(0, 0, 0, 0.25) inset;
-}
-
-.ui-button-secondary.ui-state-hover {
- background: linear-gradient(to bottom, #d5d5d5 0%, #eeeeee 100%);
- box-shadow: -2px -2px 2px #dadada, 2px 2px 2px #fff, 3px 3px 3px white
- inset, -3px -3px 3px rgba(0, 0, 0, .25) inset;
-}
-
-.ui-button-secondary .ui-button-text {
- font-size: 13px;
- color: #333333;
- text-overflow: ellipsis;
- text-shadow: -1px -1px 1px #AAAAAA, 1px 1px 1px #FFFFFF;
- white-space: nowrap;
-}
-
-.ui-button-secondary.ui-button-text-only .ui-button-text {
- padding: 12px 23px 13px 20px;
-}
-
-.ui-button-secondary.ui-button-text-icon-secondary .ui-button-text {
- padding: 12px 35px 13px 13px;
-}
-
-.ui-button-secondary .ui-button-icon-secondary {
- padding-right: 5px;
- width: 15px;
- height: 15px;
-}
-
-.ui-menu {
- background: linear-gradient(to bottom, #EEEEEE 0%, #CCCCCC 10px, #CCCCCC
- 96%, #A5A5A5 100%) repeat scroll 0 0 transparent;
- padding: 10px 10px 0;
- width: 250px;
-}
-
-.ui-menu .ui-menu-item a {
- background: linear-gradient(to bottom, #FFFFFF 0%, #E5E5E5 100%) repeat
- scroll 0 0 transparent;
- border: 1px solid #CCCCCC;
- border-radius: 5px 5px 5px 5px;
- box-shadow: -1px -1px 1px #CCCCCC, 1px 1px 1px #EEEEEE;
- display: block;
- font-size: 13px;
- line-height: 38px;
- margin-bottom: 10px;
- text-align: center;
- text-shadow: -1px -1px 1px #CCCCCC, 1px 1px 1px #FFFFFF;
- width: 96%;
-}
-
-.ui-menu .ui-menu-item a.ui-state-focus {
- background: linear-gradient(to bottom, #EEEEEE 0%, #D5D5D5 100%) repeat
- scroll 0 0 transparent;
- box-shadow: -1px -1px 1px #BBBBBB, 1px 1px 1px #DDDDDD;
- margin: 0px 0px 10px 0px;
-}
-
-.ui-menu .ui-menu-item a.red:not([disabled]) {
- background: linear-gradient(to bottom, #FF3019 0%, #CF0404 100%) repeat
- scroll 0 0 transparent;
- border: 1px solid #B10F14;
- color: #FFFFFF;
- text-shadow: -1px -1px 1px #9E0505, 1px 1px 1px #FC5D4C;
-}
-
-.ui-menu .ui-menu-item a.red:hover:not([disabled]) {
- background: linear-gradient(to bottom, #EF2009 0%, #BF0404 100%) repeat
- scroll 0 0 transparent;
-}
-
-.ui-menu .ui-state-disabled {
- opacity: 1;
-}
-
-.ui-menu .ui-state-disabled a {
- color: gray;
-}
-
-.ui-widget-overlay {
- background: url("../images/theme-default/bg-mask.png") repeat scroll
- 0 0 transparent;
- opacity: 1;
-}
-
-.ui-dialog {
- background: none;
- background-color: #EEEEEE;
- border: 2px solid #0F71B4;
- border-radius: 8px;
- padding: 0px;
-}
-
-.ui-dialog .ui-dialog-titlebar {
- border: none;
- border-bottom-left-radius: 0px;
- border-bottom-right-radius: 0px;
- background: none;
- padding: 13px 0px 13px 10px;
- box-shadow: 0 1px 3px rgba(0,0,0,0.15), 0 -1px 0 rgba(0,0,0,0.05) inset;
-}
-
-.ui-dialog .ui-dialog-title {
- font-size: 18px;
- color: #0066CC;
-}
-
-.ui-dialog .ui-dialog-titlebar-close {
- margin: 4px 0 0;
- background: none repeat scroll 0 0 #EEEEEE;
- border: 2px solid #CCCCCC;
- border-radius: 35px 35px 35px 35px;
- color: #CCCCCC;
- cursor: pointer;
- height: 35px;
- width: 35px;
- position: absolute;
- right: 7px;
- text-align: center;
- top: 5px;
-}
-
-.ui-dialog .ui-dialog-titlebar .ui-state-hover {
- border: 2px solid #444444;
- color: #444444;
-}
-
-.ui-dialog .ui-dialog-titlebar .ui-button-text {
- font-size: 24px;
- font-weight: bold;
- padding: 0px;
- text-indent: 0px;
-}
-
-.ui-dialog .ui-dialog-titlebar .ui-button-icon-primary {
- display: none;
-}
-
-.ui-dialog .ui-dialog-buttonpane {
- padding: 0px;
- background-color: transparent;
- border-width: 0;
- box-shadow: 0 -1px 1px rgba(0, 0, 0, 0.15);
-}
-
-.ui-dialog .ui-dialog-buttonpane button {
- cursor: pointer;
- margin: 0.5em 13px 0.5em 0;
-}
diff --git a/plugins/kimchi/ui/css/theme-default/toolbar.css b/plugins/kimchi/ui/css/theme-default/toolbar.css
deleted file mode 100644
index ea2a039..0000000
--- a/plugins/kimchi/ui/css/theme-default/toolbar.css
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* Generated at http://colorzilla.com/gradient-editor/ */
-.toolbar {
- position: relative;
- height: 48px;
- padding: 0 5px;
- overflow: hidden;
- background: #e5e5e5;
- background: -moz-linear-gradient(top, #e5e5e5 0%, #c4c4c4 100%);
- background: -webkit-gradient(linear, left top, left bottom,
- color-stop(0%, #e5e5e5), color-stop(100%, #c4c4c4));
- background: -webkit-linear-gradient(top, #e5e5e5 0%, #c4c4c4 100%);
- background: -o-linear-gradient(top, #e5e5e5 0%, #c4c4c4 100%);
- background: -ms-linear-gradient(top, #e5e5e5 0%, #c4c4c4 100%);
- background: linear-gradient(to bottom, #e5e5e5 0%, #c4c4c4 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e5e5e5',
- endColorstr='#c4c4c4', GradientType=0);
- border-bottom: 1px solid #aaa;
-}
-
-.toolbar .filters {
- float: left;
-}
-
-.toolbar .tools {
- float: right;
-}
-
-.toolbar .divide {
- display: inline-block;
- height: 42px;
- margin: 3px;
- vertical-align: top;
- border-left: 1px solid #999;
- border-right: 1px solid #eee;
-}
diff --git a/ui/css/theme-default/topbar.css b/ui/css/theme-default/topbar.css
deleted file mode 100644
index 4fce02c..0000000
--- a/ui/css/theme-default/topbar.css
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/* Generated at http://colorzilla.com/gradient-editor/ */
-.topbar {
- height: 52px;
- background: #4a4a4a; /* Old browsers */
- background: -moz-linear-gradient(top, #4a4a4a 0%,
- #272727 100%); /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom,
- color-stop(0%, #4a4a4a),
- color-stop(100%, #272727)); /* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #4a4a4a 0%,
- #272727 100%); /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #4a4a4a 0%,
- #272727 100%); /* Opera 11.10+ */
- background: -ms-linear-gradient(top, #4a4a4a 0%, #272727 100%); /* IE10+ */
- background: linear-gradient(to bottom, #4a4a4a 0%, #272727 100%); /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#4a4a4a',
- endColorstr='#272727', GradientType=0);
- border-top: 1px solid #6b6868;
- boder-bottom: 1px solid #151718;
- position: relative;
-}
-
-#logo {
- height: 48px;
- line-height: 48px;
- padding: 0 10px;
- font-size: 20px;
- font-weight: normal;
- color: #eee;
- text-shadow: -1px -1px 1px #000, 1px 1px 1px #555;
- vertical-align: top;
- max-width: 250px;
- overflow: hidden;
-}
-
-.nav-top {
- position: absolute;
- right: 0;
- top: 0;
- border-left: 1px solid #000;
- border-right: 1px solid #585858;
-}
-
-.nav-top>li {
- float: left;
- border-left: 1px solid #585858;
- border-right: 1px solid #000;
-}
-
-.nav-top .icon {
- display: block;
- position: relative;
- width: 58px;
- height: 48px;
-}
-
-.nav-top .icon .count {
- position: absolute;
- top: 3px;
- right: 3px;
- height: 16px;
- line-height: 17px;
- padding: 0 5px;
- -webkit-border-radius: 12px;
- -moz-border-radius: 12px;
- border-radius: 12px;
- font-size: 10px;
- color: #fff;
- text-align: center;
- background: #06C;
- text-shadow: none;
-}
-
-.icon.setting {
- background: url(../images/theme-default/icon-setting.png) no-repeat
- center center;
-}
-
-.icon.tool {
- background: url(../images/theme-default/icon-tool.png) no-repeat
- center center;
-}
-
-.icon.event {
- background: url(../images/theme-default/icon-event.png) no-repeat
- center center;
-}
-
-.icon.alert {
- background: url(../images/theme-default/icon-alert.png) no-repeat
- center center;
-}
-
-#user {
- color: white;
- cursor: pointer;
- display: block;
- position: relative;
- height: 52px;
- margin: 0 12px;
-}
-
-#user span {
- display: inline-block;
- margin-top: 16px;
-}
-
-#user:hover #user-name {
- border-bottom: 1px solid white;
-}
-
-#user.not-logged-in {
- display: none;
-}
-
-#user-icon {
- background: url("../images/theme-default/user-icon.png") no-repeat left top;
- height: 16px;
- width: 16px;
-}
-
-#user-name {
- height: 16px;
- line-height: 16px;
-}
-
-#user .arrow {
- border: 6px solid transparent;
- border-bottom: none;
- border-top-color: white;
- display: inline-block;
- width: 0;
-}
-
-#user .action-panel {
- top: 45px;
- color: black;
- padding: 12px 18px;
- white-space: nowrap;
- line-height: 12px;
- width: inherit;
-}
-
-.user-menu-item {
- color: black;
- font-size: 14px;
-}
-
-
-a#btn-logout:hover {
- text-decoration: underline;
-}
-
-@media ( max-width : 640px) {
- #logo {
- display: none;
- }
-}
-
-.peers {
- color: white;
- cursor: pointer;
- height: 52px;
- margin: 0 12px;
-}
-
-.peers span {
- margin-top: 25px;
-}
-
-.peers .arrow {
- border: 6px solid transparent;
- border-bottom: none;
- border-top-color: white;
- display: inline-block;
- width: 0;
-}
-
-.peers .dropdown {
- top: 45px;
- right: 110px;
- color: black;
- padding: 10px 15px;
- white-space: nowrap;
- line-height: 12px;
- width: inherit;
-}
-
-.peers .dropdown a {
- display: block;
- padding: 10px;
-}
-
-.hide-content {
- display: none!important;
-}
diff --git a/ui/fontello/LICENSE.txt b/ui/fontello/LICENSE.txt
deleted file mode 100644
index 0effddb..0000000
--- a/ui/fontello/LICENSE.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-Font license info
-
-
-## Font Awesome
-
- Copyright (C) 2012 by Dave Gandy
-
- Author: Dave Gandy
- License: SIL ()
- Homepage: http://fortawesome.github.com/Font-Awesome/
-
-
-## Entypo
-
- Copyright (C) 2012 by Daniel Bruce
-
- Author: Daniel Bruce
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://www.entypo.com
-
-
-## Elusive
-
- Copyright (C) 2013 by Aristeides Stathopoulos
-
- Author: Aristeides Stathopoulos
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://aristeides.com/
-
-
-## MFG Labs
-
- Copyright (C) 2012 by Daniel Bruce
-
- Author: MFG Labs
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://www.mfglabs.com/
-
-
-## Typicons
-
- (c) Stephen Hutchings 2012
-
- Author: Stephen Hutchings
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://typicons.com/
-
-
-## Zocial
-
- Copyright (C) 2012 by Sam Collins
-
- Author: Sam Collins
- License: MIT (http://opensource.org/licenses/mit-license.php)
- Homepage: http://zocial.smcllns.com/
-
-
-## Fontelico
-
- Copyright (C) 2012 by Fontello project
-
- Author: Crowdsourced, for Fontello project
- License: SIL (http://scripts.sil.org/OFL)
- Homepage: http://fontello.com
-
-
diff --git a/ui/fontello/Makefile.am b/ui/fontello/Makefile.am
deleted file mode 100644
index 0576ed2..0000000
--- a/ui/fontello/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-SUBDIRS = css font
-
-fontellodir = $(datadir)/wok/ui/fontello
-
-dist_fontello_DATA = LICENSE.txt
diff --git a/ui/fontello/css/Makefile.am b/ui/fontello/css/Makefile.am
deleted file mode 100644
index 50b5489..0000000
--- a/ui/fontello/css/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-cssdir = $(datadir)/wok/ui/fontello/css
-
-dist_css_DATA = $(wildcard *.css) $(NULL)
diff --git a/ui/fontello/css/animation.css b/ui/fontello/css/animation.css
deleted file mode 100644
index ac5a956..0000000
--- a/ui/fontello/css/animation.css
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- Animation example, for spinners
-*/
-.animate-spin {
- -moz-animation: spin 2s infinite linear;
- -o-animation: spin 2s infinite linear;
- -webkit-animation: spin 2s infinite linear;
- animation: spin 2s infinite linear;
- display: inline-block;
-}
-@-moz-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@-webkit-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@-o-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@-ms-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-@keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
diff --git a/ui/fontello/css/fontello.css b/ui/fontello/css/fontello.css
deleted file mode 100644
index d9df9ce..0000000
--- a/ui/fontello/css/fontello.css
+++ /dev/null
@@ -1,261 +0,0 @@
-@font-face {
- font-family: 'fontello';
- src: url('../font/fontello.eot?99320945');
- src: url('../font/fontello.eot?99320945#iefix') format('embedded-opentype'),
- url('../font/fontello.woff?99320945') format('woff'),
- url('../font/fontello.ttf?99320945') format('truetype'),
- url('../font/fontello.svg?99320945#fontello') format('svg');
- font-weight: normal;
- font-style: normal;
-}
-/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
-/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
-/*
-@media screen and (-webkit-min-device-pixel-ratio:0) {
- @font-face {
- font-family: 'fontello';
- src: url('../font/fontello.svg?99320945#fontello') format('svg');
- }
-}
-*/
-
- [class^="icon-"]:before, [class*=" icon-"]:before {
- font-family: "fontello";
- font-style: normal;
- font-weight: normal;
- speak: none;
-
- display: inline-block;
- text-decoration: inherit;
- width: 1em;
- margin-right: .2em;
- text-align: center;
- /* opacity: .8; */
-
- /* For safety - reset parent styles, that can break glyph codes*/
- font-variant: normal;
- text-transform: none;
-
- /* fix buttons height, for twitter bootstrap */
- line-height: 1em;
-
- /* Animation center compensation - margins should be symmetric */
- /* remove if not needed */
- margin-left: .2em;
-
- /* you can be more comfortable with increased icons size */
- /* font-size: 120%; */
-
- /* Uncomment for 3D effect */
- /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
-}
-
-.icon-user:before { content: '\e800'; } /* '' */
-.icon-help-circled:before { content: '\e801'; } /* '' */
-.icon-search:before { content: '\e802'; } /* '' */
-.icon-tag:before { content: '\e803'; } /* '' */
-.icon-dot-2:before { content: '\e804'; } /* '' */
-.icon-arrows-cw:before { content: '\e805'; } /* '' */
-.icon-print:before { content: '\e806'; } /* '' */
-.icon-cancel-circled:before { content: '\e807'; } /* '' */
-.icon-edit-alt:before { content: '\e808'; } /* '' */
-.icon-login:before { content: '\e809'; } /* '' */
-.icon-logout:before { content: '\e80a'; } /* '' */
-.icon-download:before { content: '\e80b'; } /* '' */
-.icon-th-large:before { content: '\e80c'; } /* '' */
-.icon-th:before { content: '\e80d'; } /* '' */
-.icon-th-list:before { content: '\e80e'; } /* '' */
-.icon-star:before { content: '\e80f'; } /* '' */
-.icon-star-empty:before { content: '\e810'; } /* '' */
-.icon-users:before { content: '\e811'; } /* '' */
-.icon-upload:before { content: '\e812'; } /* '' */
-.icon-circle-thin:before { content: '\e813'; } /* '' */
-.icon-dot-circled:before { content: '\e814'; } /* '' */
-.icon-ok:before { content: '\e815'; } /* '' */
-.icon-check-empty-1:before { content: '\e816'; } /* '' */
-.icon-clock-2:before { content: '\e817'; } /* '' */
-.icon-ok-squared:before { content: '\e818'; } /* '' */
-.icon-pin:before { content: '\e820'; } /* '' */
-.icon-eye:before { content: '\e821'; } /* '' */
-.icon-attach:before { content: '\e824'; } /* '' */
-.icon-unlink:before { content: '\e825'; } /* '' */
-.icon-link:before { content: '\e826'; } /* '' */
-.icon-home:before { content: '\e827'; } /* '' */
-.icon-info:before { content: '\e828'; } /* '' */
-.icon-info-circled:before { content: '\e829'; } /* '' */
-.icon-export:before { content: '\e82f'; } /* '' */
-.icon-export-alt:before { content: '\e830'; } /* '' */
-.icon-share:before { content: '\e831'; } /* '' */
-.icon-share-squared:before { content: '\e832'; } /* '' */
-.icon-retweet:before { content: '\e836'; } /* '' */
-.icon-attention-alt:before { content: '\e837'; } /* '' */
-.icon-attention:before { content: '\e838'; } /* '' */
-.icon-attention-circled:before { content: '\e839'; } /* '' */
-.icon-location:before { content: '\e83a'; } /* '' */
-.icon-trash:before { content: '\e83b'; } /* '' */
-.icon-doc:before { content: '\e83c'; } /* '' */
-.icon-docs:before { content: '\e83d'; } /* '' */
-.icon-doc-text:before { content: '\e83e'; } /* '' */
-.icon-doc-inv:before { content: '\e83f'; } /* '' */
-.icon-doc-text-inv:before { content: '\e840'; } /* '' */
-.icon-file-pdf:before { content: '\e841'; } /* '' */
-.icon-file-word:before { content: '\e842'; } /* '' */
-.icon-file-excel:before { content: '\e843'; } /* '' */
-.icon-file-powerpoint:before { content: '\e844'; } /* '' */
-.icon-file-image:before { content: '\e845'; } /* '' */
-.icon-cog:before { content: '\e84b'; } /* '' */
-.icon-cog-alt:before { content: '\e84c'; } /* '' */
-.icon-wrench:before { content: '\e84d'; } /* '' */
-.icon-calendar:before { content: '\e84e'; } /* '' */
-.icon-calendar-empty:before { content: '\e84f'; } /* '' */
-.icon-clock:before { content: '\e852'; } /* '' */
-.icon-block:before { content: '\e853'; } /* '' */
-.icon-zoom-in:before { content: '\e857'; } /* '' */
-.icon-zoom-out:before { content: '\e858'; } /* '' */
-.icon-down-circled2:before { content: '\e859'; } /* '' */
-.icon-up-circled2:before { content: '\e85a'; } /* '' */
-.icon-left-circled2:before { content: '\e85b'; } /* '' */
-.icon-right-circled2:before { content: '\e85c'; } /* '' */
-.icon-down-dir:before { content: '\e85d'; } /* '' */
-.icon-up-dir:before { content: '\e85e'; } /* '' */
-.icon-left-dir:before { content: '\e85f'; } /* '' */
-.icon-right-dir:before { content: '\e860'; } /* '' */
-.icon-down-open:before { content: '\e861'; } /* '' */
-.icon-left-open:before { content: '\e862'; } /* '' */
-.icon-right-open:before { content: '\e863'; } /* '' */
-.icon-up-open:before { content: '\e864'; } /* '' */
-.icon-angle-left:before { content: '\e865'; } /* '' */
-.icon-angle-right:before { content: '\e866'; } /* '' */
-.icon-angle-up:before { content: '\e867'; } /* '' */
-.icon-angle-down:before { content: '\e868'; } /* '' */
-.icon-angle-circled-left:before { content: '\e869'; } /* '' */
-.icon-angle-circled-right:before { content: '\e86a'; } /* '' */
-.icon-angle-circled-up:before { content: '\e86b'; } /* '' */
-.icon-angle-circled-down:before { content: '\e86c'; } /* '' */
-.icon-angle-double-left:before { content: '\e86d'; } /* '' */
-.icon-angle-double-right:before { content: '\e86e'; } /* '' */
-.icon-angle-double-up:before { content: '\e86f'; } /* '' */
-.icon-angle-double-down:before { content: '\e870'; } /* '' */
-.icon-down-big:before { content: '\e871'; } /* '' */
-.icon-left-big:before { content: '\e872'; } /* '' */
-.icon-right-big:before { content: '\e873'; } /* '' */
-.icon-up-big:before { content: '\e874'; } /* '' */
-.icon-left-circled:before { content: '\e875'; } /* '' */
-.icon-right-circled:before { content: '\e876'; } /* '' */
-.icon-up-circled:before { content: '\e877'; } /* '' */
-.icon-down-circled:before { content: '\e878'; } /* '' */
-.icon-cw:before { content: '\e879'; } /* '' */
-.icon-ccw:before { content: '\e87a'; } /* '' */
-.icon-level-up:before { content: '\e87c'; } /* '' */
-.icon-level-down:before { content: '\e87d'; } /* '' */
-.icon-shuffle:before { content: '\e87e'; } /* '' */
-.icon-exchange:before { content: '\e87f'; } /* '' */
-.icon-history:before { content: '\e880'; } /* '' */
-.icon-expand:before { content: '\e881'; } /* '' */
-.icon-collapse:before { content: '\e882'; } /* '' */
-.icon-expand-right:before { content: '\e883'; } /* '' */
-.icon-collapse-left:before { content: '\e884'; } /* '' */
-.icon-play:before { content: '\e885'; } /* '' */
-.icon-play-circled2:before { content: '\e886'; } /* '' */
-.icon-play-circled:before { content: '\e887'; } /* '' */
-.icon-stop:before { content: '\e888'; } /* '' */
-.icon-cloud:before { content: '\e889'; } /* '' */
-.icon-table:before { content: '\e88a'; } /* '' */
-.icon-off:before { content: '\e88b'; } /* '' */
-.icon-check:before { content: '\e88c'; } /* '' */
-.icon-asterisk:before { content: '\e88e'; } /* '' */
-.icon-chart-bar:before { content: '\e88f'; } /* '' */
-.icon-bug:before { content: '\e890'; } /* '' */
-.icon-certificate:before { content: '\e891'; } /* '' */
-.icon-tasks:before { content: '\e892'; } /* '' */
-.icon-sort-up:before { content: '\e893'; } /* '' */
-.icon-sort-down:before { content: '\e894'; } /* '' */
-.icon-sort:before { content: '\e895'; } /* '' */
-.icon-gauge:before { content: '\e896'; } /* '' */
-.icon-spinner:before { content: '\e897'; } /* '' */
-.icon-database:before { content: '\e898'; } /* '' */
-.icon-lifebuoy:before { content: '\e899'; } /* '' */
-.icon-cubes:before { content: '\e89a'; } /* '' */
-.icon-cube:before { content: '\e89b'; } /* '' */
-.icon-bullseye:before { content: '\e89c'; } /* '' */
-.icon-windows:before { content: '\e89d'; } /* '' */
-.icon-cancel-circled-1:before { content: '\e89e'; } /* '' */
-.icon-plus-1:before { content: '\e8a0'; } /* '' */
-.icon-plus-circled-1:before { content: '\e8a1'; } /* '' */
-.icon-minus-1:before { content: '\e8a3'; } /* '' */
-.icon-minus-circled-1:before { content: '\e8a4'; } /* '' */
-.icon-help-circled-1:before { content: '\e8a7'; } /* '' */
-.icon-heart-empty-1:before { content: '\e8aa'; } /* '' */
-.icon-mail-1:before { content: '\e8ab'; } /* '' */
-.icon-star-1:before { content: '\e8ac'; } /* '' */
-.icon-star-empty-1:before { content: '\e8ad'; } /* '' */
-.icon-link-1:before { content: '\e8ae'; } /* '' */
-.icon-attach-1:before { content: '\e8af'; } /* '' */
-.icon-eye-1:before { content: '\e8b2'; } /* '' */
-.icon-attention-1:before { content: '\e8b3'; } /* '' */
-.icon-doc-text-1:before { content: '\e8b4'; } /* '' */
-.icon-doc-text-inv-1:before { content: '\e8b5'; } /* '' */
-.icon-share-1:before { content: '\e8b7'; } /* '' */
-.icon-shareable:before { content: '\e8b8'; } /* '' */
-.icon-ccw-1:before { content: '\e8cc'; } /* '' */
-.icon-cw-1:before { content: '\e8cd'; } /* '' */
-.icon-arrows-ccw:before { content: '\e8ce'; } /* '' */
-.icon-play-1:before { content: '\e8cf'; } /* '' */
-.icon-pause:before { content: '\e8d0'; } /* '' */
-.icon-record:before { content: '\e8d1'; } /* '' */
-.icon-stop-1:before { content: '\e8d2'; } /* '' */
-.icon-switch:before { content: '\e8d3'; } /* '' */
-.icon-loop:before { content: '\e8d4'; } /* '' */
-.icon-cloud-1:before { content: '\e8d5'; } /* '' */
-.icon-certificate-outline:before { content: '\e8db'; } /* '' */
-.icon-certificate-1:before { content: '\e8dc'; } /* '' */
-.icon-windows-1:before { content: '\e8dd'; } /* '' */
-.icon-spin5:before { content: '\e8df'; } /* '' */
-.icon-spin2:before { content: '\e8e0'; } /* '' */
-.icon-picture:before { content: '\e8e4'; } /* '' */
-.icon-menu:before { content: '\e8e5'; } /* '' */
-.icon-sliders:before { content: '\e8e6'; } /* '' */
-.icon-list-alt:before { content: '\e8e7'; } /* '' */
-.icon-ajust:before { content: '\e8e8'; } /* '' */
-.icon-circle:before { content: '\e8e9'; } /* '' */
-.icon-circle-empty:before { content: '\e8ea'; } /* '' */
-.icon-circle-notch:before { content: '\e8ec'; } /* '' */
-.icon-fork:before { content: '\e8ed'; } /* '' */
-.icon-sitemap:before { content: '\e8ee'; } /* '' */
-.icon-stethoscope:before { content: '\e8ef'; } /* '' */
-.icon-shield:before { content: '\e8f0'; } /* '' */
-.icon-heart-1:before { content: '\e8f1'; } /* '' */
-.icon-search-1:before { content: '\e8f2'; } /* '' */
-.icon-menu-1:before { content: '\e8f3'; } /* '' */
-.icon-back:before { content: '\e8f6'; } /* '' */
-.icon-home-1:before { content: '\e8f7'; } /* '' */
-.icon-pencil-1:before { content: '\e8f8'; } /* '' */
-.icon-location-1:before { content: '\e8f9'; } /* '' */
-.icon-logout-1:before { content: '\e8fb'; } /* '' */
-.icon-login-1:before { content: '\e8fc'; } /* '' */
-.icon-publish:before { content: '\e8fd'; } /* '' */
-.icon-window:before { content: '\e8fe'; } /* '' */
-.icon-chart-pie:before { content: '\e8ff'; } /* '' */
-.icon-chart-line:before { content: '\e900'; } /* '' */
-.icon-chart-area:before { content: '\e901'; } /* '' */
-.icon-chart-bar-1:before { content: '\e902'; } /* '' */
-.icon-air:before { content: '\e905'; } /* '' */
-.icon-database-1:before { content: '\e906'; } /* '' */
-.icon-flow-cascade:before { content: '\e907'; } /* '' */
-.icon-flow-tree:before { content: '\e908'; } /* '' */
-.icon-flow-line:before { content: '\e909'; } /* '' */
-.icon-flow-branch:before { content: '\e90a'; } /* '' */
-.icon-flow-parallel-1:before { content: '\e90f'; } /* '' */
-.icon-dot:before { content: '\e910'; } /* '' */
-.icon-dot-3:before { content: '\e911'; } /* '' */
-.icon-cd:before { content: '\e912'; } /* '' */
-.icon-back-in-time:before { content: '\e913'; } /* '' */
-.icon-list:before { content: '\e914'; } /* '' */
-.icon-list-add:before { content: '\e915'; } /* '' */
-.icon-progress-0:before { content: '\e919'; } /* '' */
-.icon-pencil-2:before { content: '\e91d'; } /* '' */
-.icon-cog-2:before { content: '\e91f'; } /* '' */
-.icon-cog-circled:before { content: '\e920'; } /* '' */
-.icon-cogs:before { content: '\e921'; } /* '' */
-.icon-calendar-1:before { content: '\e924'; } /* '' */
-.icon-doc-new:before { content: '\e925'; } /* '' */
\ No newline at end of file
diff --git a/ui/fontello/font/Makefile.am b/ui/fontello/font/Makefile.am
deleted file mode 100644
index da9cb66..0000000
--- a/ui/fontello/font/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-fontdir = $(datadir)/wok/ui/fontello/font
-
-dist_font_DATA = $(wildcard fontello.*) $(NULL)
diff --git a/ui/fontello/font/fontello.eot b/ui/fontello/font/fontello.eot
deleted file mode 100644
index 4485477e781e2444c35c47b5b8944695fcb79af3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 42700
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
DzM+#I
diff --git a/ui/fontello/font/fontello.svg b/ui/fontello/font/fontello.svg
deleted file mode 100644
index 7efcd70..0000000
--- a/ui/fontello/font/fontello.svg
+++ /dev/null
@@ -1,220 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>Copyright (C) 2014 by original authors @ fontello.com</metadata>
-<defs>
-<font id="fontello" horiz-adv-x="1000" >
-<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
-<missing-glyph horiz-adv-x="1000" />
-<glyph glyph-name="user" unicode="" d="m786 66q0-67-41-106t-108-39h-488q-67 0-108 39t-41 106q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q5 0 24-12t41-27 60-27 75-12 74 12 61 27 41 27 24 12q34 0 62-11t48-30 34-45 24-55 15-60 8-61 2-58z m-179 498q0-88-63-151t-151-63-152 63-62 151 62 152 152 63 151-63 63-152z" horiz-adv-x="785.7" />
-<glyph glyph-name="help-circled" unicode="" d="m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="search" unicode="" d="m643 386q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-22-50t-50-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
-<glyph glyph-name="tag" unicode="" d="m250 600q0 30-21 51t-50 20-51-20-21-51 21-50 51-21 50 21 21 50z m595-321q0-30-20-51l-274-274q-22-21-51-21-30 0-50 21l-399 399q-21 21-36 57t-15 65v232q0 29 21 50t50 22h233q29 0 65-15t57-36l399-399q20-21 20-50z" horiz-adv-x="857.1" />
-<glyph glyph-name="dot-2" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 32-32 78 32 78 78 32z m350 0q46 0 78-32t32-78q0-44-33-77t-77-33q-46 0-78 32t-32 78 32 78 78 32z" horiz-adv-x="570" />
-<glyph glyph-name="arrows-cw" unicode="" d="m843 261q0-3 0-4-36-150-150-243t-267-93q-81 0-157 31t-136 88l-72-72q-11-11-25-11t-25 11-11 25v250q0 14 11 25t25 11h250q14 0 25-11t10-25-10-25l-77-77q40-37 90-57t105-20q74 0 139 37t104 99q6 10 29 66 5 13 17 13h107q8 0 13-6t5-12z m14 446v-250q0-14-10-25t-26-11h-250q-14 0-25 11t-10 25 10 25l77 77q-82 77-194 77-75 0-140-37t-104-99q-6-10-29-66-5-13-17-13h-111q-7 0-13 6t-5 12v4q36 150 151 243t268 93q81 0 158-31t137-88l72 72q11 11 25 11t26-11 10-25z" horiz-adv-x="857.1" />
-<glyph glyph-name="print" unicode="" d="m214-7h500v143h-500v-143z m0 357h500v214h-89q-22 0-38 16t-16 38v89h-357v-357z m643-36q0 15-10 25t-26 11-25-11-10-25 10-25 25-10 26 10 10 25z m72 0v-232q0-7-6-12t-12-6h-125v-89q0-22-16-38t-38-16h-536q-22 0-37 16t-16 38v89h-125q-7 0-13 6t-5 12v232q0 44 32 76t75 31h36v304q0 22 16 38t37 16h375q23 0 50-12t42-26l85-85q15-16 27-43t11-49v-143h35q45 0 76-31t32-76z" horiz-adv-x="928.6" />
-<glyph glyph-name="cancel-circled" unicode="" d="m641 224q0 14-10 25l-101 101 101 101q10 11 10 25 0 15-10 26l-51 50q-10 11-25 11-15 0-25-11l-101-101-101 101q-11 11-26 11-15 0-25-11l-50-50q-11-11-11-26 0-14 11-25l101-101-101-101q-11-11-11-25 0-15 11-26l50-50q10-11 25-11 15 0 26 11l101 101 101-101q10-11 25-11 15 0 25 11l51 50q10 11 10 26z m216 126q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="edit-alt" unicode="" d="m0-150l0 1000 646 0-164-164-318 0 0-672 672 0 0 319 164 164 0-647-1000 0z m363 363l0 118 6 0q39 2 72-30 39-39 39-88l-117 0z m51 176l367 367 125-125-367-367z m397 397l64 64 125-125-64-64z" horiz-adv-x="1000" />
-<glyph glyph-name="login" unicode="" d="m661 350q0-14-11-25l-303-304q-11-10-26-10t-25 10-10 25v161h-250q-15 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 10 25t25 10 26-10l303-304q11-10 11-25z m196 196v-392q0-67-47-114t-114-47h-178q-7 0-13 5t-5 13q0 2-1 11t0 15 2 13 5 11 12 3h178q37 0 63 27t27 63v392q0 37-27 63t-63 27h-174t-6 0-6 2-5 3-4 5-1 8q0 2-1 11t0 15 2 13 5 11 12 3h178q67 0 114-47t47-114z" horiz-adv-x="857.1" />
-<glyph glyph-name="logout" unicode="" d="m357 46q0-2 1-11t0-14-2-14-5-11-12-3h-178q-67 0-114 47t-47 114v392q0 67 47 114t114 47h178q8 0 13-5t5-13q0-2 1-11t0-15-2-13-5-11-12-3h-178q-37 0-63-27t-27-63v-392q0-37 27-63t63-27h174t6 0 7-2 4-3 4-5 1-8z m518 304q0-14-11-25l-303-304q-11-10-25-10t-25 10-11 25v161h-250q-14 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 11 25t25 10 25-10l303-304q11-10 11-25z" horiz-adv-x="928.6" />
-<glyph glyph-name="download" unicode="" d="m0 84v73q0 33 24 56t57 24 56-24 24-56v-73q0-17 12-29t30-13h531q18 0 30 13t12 29v73q0 33 24 56t56 24 57-24 24-56v-73q0-84-59-143t-144-60h-531q-84 0-144 60t-59 143z m155 359q0 33 24 57 23 23 56 23t57-23l105-106v344q0 33 24 57t56 23 57-23 24-57v-344l110 110q24 24 57 24t56-24q24-23 24-56t-24-57l-247-247q-24-25-57-25-32 0-56 25l-242 242q-24 24-24 57z" horiz-adv-x="937.5" />
-<glyph glyph-name="th-large" unicode="" d="m429 279v-215q0-29-22-50t-50-21h-286q-29 0-50 21t-21 50v215q0 29 21 50t50 21h286q29 0 50-21t22-50z m0 428v-214q0-29-22-50t-50-22h-286q-29 0-50 22t-21 50v214q0 29 21 50t50 22h286q29 0 50-22t22-50z m500-428v-215q0-29-22-50t-50-21h-286q-29 0-50 21t-21 50v215q0 29 21 50t50 21h286q29 0 50-21t22-50z m0 428v-214q0-29-22-50t-50-22h-286q-29 0-50 22t-21 50v214q0 29 21 50t50 22h286q29 0 50-22t22-50z" horiz-adv-x="928.6" />
-<glyph glyph-name="th" unicode="" d="m286 154v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q22 0 38-15t16-38z m0 285v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q22 0 38-16t16-38z m357-285v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q23 0 38-15t16-38z m-357 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q22 0 38-16t16-38z m357-286v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q23 0 38-16t16-38z m357-285v-108q0-22-16-37t-38-16h-178q-22 0-38 16t-16 37v108q0 22 16 38t38 15h178q23 0 38-15t16-38z m-357 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q23 0 38-16t16-38z m357-286v-107q0-22-16-38t-38-15h-178q-22 0-38 15t-16 38v107q0 23 16 38t38 16h178q23 0 38-16t16-38z m0 286v-107q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v107q0 22 16 38t38 16h178q23 0 38-16t16-38z" horiz-adv-x="1000" />
-<glyph glyph-name="th-list" unicode="" d="m286 154v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q22 0 38-15t16-38z m0 285v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q22 0 38-16t16-38z m714-285v-108q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37v108q0 22 16 38t38 15h535q23 0 38-15t16-38z m-714 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q22 0 38-16t16-38z m714-286v-107q0-22-16-38t-38-15h-535q-23 0-38 15t-16 38v107q0 23 16 38t38 16h535q23 0 38-16t16-38z m0 286v-107q0-22-16-38t-38-16h-535q-23 0-38 16t-16 38v107q0 22 16 38t38 16h535q23 0 38-16t16-38z" horiz-adv-x="1000" />
-<glyph glyph-name="star" unicode="" d="m929 489q0-12-15-27l-203-197 48-279q1-4 1-12 0-11-6-19t-17-9q-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
-<glyph glyph-name="star-empty" unicode="" d="m634 290l171 165-235 35-106 213-105-213-236-35 171-165-41-235 211 111 211-111z m295 199q0-12-15-27l-203-197 48-279q1-4 1-12 0-28-23-28-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
-<glyph glyph-name="users" unicode="" d="m331 350q-90-3-148-71h-75q-45 0-77 22t-31 66q0 197 69 197 4 0 25-11t54-24 66-12q38 0 75 13-3-21-3-37 0-78 45-143z m598-356q0-66-41-105t-108-39h-488q-68 0-108 39t-41 105q0 30 2 58t8 61 14 61 24 54 35 45 48 30 62 11q6 0 24-12t41-26 59-27 76-12 75 12 60 27 41 26 23 12q35 0 63-11t47-30 35-45 24-54 15-61 8-61 2-58z m-572 713q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m393-214q0-89-63-152t-151-62-152 62-63 152 63 151 152 63 151-63 63-151z m321-126q0-43-31-66t-77-22h-75q-57 68-147 71 45 65 45 143 0 16-3 37 37-13 74-13 33 0 67 12t54 24 24 11q69 0 69-197z m-71 340q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z" horiz-adv-x="1071.4" />
-<glyph glyph-name="upload" unicode="" d="m0 84v73q0 33 24 56t57 24 56-24 24-56v-73q0-17 12-29t30-13h531q18 0 30 13t12 29v73q0 33 24 56t56 24 57-24 24-56v-73q0-84-59-143t-144-60h-531q-84 0-143 59t-60 144z m155 407q0 33 24 57l247 247q23 23 57 23 33 0 56-23l243-242q23-24 23-57t-23-57q-24-23-57-23t-57 23l-105 105v-344q0-33-24-57t-56-24q-33 0-57 24t-24 57v344l-110-110q-24-23-57-23t-56 23-24 57z" horiz-adv-x="937.5" />
-<glyph glyph-name="circle-thin" unicode="" d="m429 707q-73 0-139-28t-114-76-76-114-29-139 29-139 76-113 114-77 139-28 138 28 114 77 76 113 29 139-29 139-76 114-114 76-138 28z m428-357q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="dot-circled" unicode="" d="m571 350q0-59-41-101t-101-42-101 42-42 101 42 101 101 42 101-42 41-101z m-142 304q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="ok" unicode="" d="m932 534q0-22-15-38l-404-404-76-76q-16-15-38-15t-38 15l-76 76-202 202q-15 16-15 38t15 38l76 76q16 16 38 16t38-16l164-165 366 367q16 16 38 16t38-16l76-76q15-16 15-38z" horiz-adv-x="1000" />
-<glyph glyph-name="check-empty-1" unicode="" d="m625 707h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v464q0 37-26 63t-63 26z m161-89v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
-<glyph glyph-name="clock-2" unicode="" d="m0 349q0 188 134 322t322 134 321-134 133-322-133-321-321-133-322 133-134 321z m119 0q0-140 99-238t238-99 238 99 99 238-99 238-238 99-238-99-99-238z m172-69l0 117 117 0 0 213 117 0 0-330-234 0z" horiz-adv-x="910" />
-<glyph glyph-name="ok-squared" unicode="" d="m382 125l343 343q10 10 10 25t-10 25l-57 57q-11 10-25 10t-25-10l-261-261-118 118q-10 11-25 11t-25-11l-57-57q-10-11-10-25t10-25l200-200q11-11 25-11t25 11z m475 493v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="pin" unicode="" d="m268 368v250q0 8-5 13t-13 5-13-5-5-13v-250q0-8 5-13t13-5 13 5 5 13z m375-197q0-14-11-25t-25-10h-239l-29-270q-1-7-6-11t-11-5h-1q-15 0-17 15l-43 271h-225q-15 0-25 10t-11 25q0 69 44 124t99 55v286q-29 0-50 21t-22 50 22 50 50 22h357q29 0 50-22t21-50-21-50-50-21v-286q55 0 99-55t44-124z" horiz-adv-x="642.9" />
-<glyph glyph-name="eye" unicode="" d="m929 314q-85 132-213 197 34-58 34-125 0-104-73-177t-177-73-177 73-73 177q0 67 34 125-128-65-213-197 75-114 187-182t242-68 242 68 187 182z m-402 215q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-12 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m473-215q0-19-11-38-78-129-210-206t-279-77-279 77-210 206q-11 19-11 38t11 39q78 128 210 205t279 78 279-78 210-205q11-20 11-39z" horiz-adv-x="1000" />
-<glyph glyph-name="attach" unicode="" d="m783 77q0-65-44-109t-109-44q-75 0-131 55l-434 434q-63 64-63 151 0 88 62 150t150 62q88 0 152-63l338-338q5-5 5-12 0-9-17-26t-26-17q-7 0-13 5l-338 339q-44 43-101 43-59 0-100-42t-40-101q0-58 42-101l433-433q35-35 81-35 36 0 59 23t24 59q0 46-36 81l-324 324q-14 14-33 14-16 0-27-11t-11-27q0-18 14-33l229-228q6-6 6-13 0-9-18-26t-26-17q-7 0-12 5l-229 229q-35 34-35 83 0 46 32 78t77 32q49 0 83-36l325-324q55-54 55-131z" horiz-adv-x="785.7" />
-<glyph glyph-name="unlink" unicode="" d="m245 141l-143-143q-5-5-13-5-6 0-13 5-5 5-5 13t5 13l143 142q6 5 13 5t13-5q5-5 5-12t-5-13z m94-23v-179q0-8-5-13t-13-5-12 5-5 13v179q0 8 5 13t12 5 13-5 5-13z m-125 125q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13 5 13 13 5h178q8 0 13-5t5-13z m706-72q0-67-48-113l-82-81q-46-47-113-47-68 0-114 48l-186 187q-12 11-24 31l134 10 152-153q15-15 38-15t38 15l82 81q15 16 15 37 0 23-15 38l-153 154 10 133q20-12 31-23l188-188q47-48 47-114z m-345 404l-133-10-152 153q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l153-153-10-134q-20 12-32 24l-187 187q-47 48-47 114 0 67 47 113l82 82q47 46 114 46 67 0 114-47l186-187q12-12 23-32z m354-46q0-8-5-13t-13-5h-179q-8 0-13 5t-5 13 5 12 13 5h179q8 0 13-5t5-12z m-304 303v-178q0-8-5-13t-13-5-13 5-5 13v178q0 8 5 13t13 5 13-5 5-13z m227-84l-143-143q-6-5-13-5t-12 5q-5 6-5 13t5 13l142 142q6 5 13 5t13-5q5-5 5-12t-5-13z" horiz-adv-x="928.6" />
-<glyph glyph-name="link" unicode="" d="m812 171q0 23-15 38l-116 116q-16 16-38 16-24 0-40-18 1-1 10-10t12-12 9-11 7-14 2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7-11 9-12 12-10 10q-19-17-19-40 0-23 16-38l115-116q15-15 38-15 22 0 38 15l82 81q15 16 15 37z m-392 394q0 22-15 38l-115 115q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l116-116q15-15 38-15 23 0 40 17-2 2-11 11t-12 12-8 10-7 14-2 16q0 22 15 38t38 15q9 0 16-2t14-7 10-8 12-12 11-11q18 17 18 41z m500-394q0-67-48-113l-82-81q-46-47-113-47-68 0-114 48l-115 115q-46 47-46 114 0 68 49 116l-49 49q-48-49-116-49-67 0-114 47l-116 116q-47 47-47 114t47 113l82 82q47 46 114 46 67 0 114-47l114-116q47-46 47-113 0-69-49-117l49-49q48 49 116 49 67 0 114-47l116-116q47-47 47-114z" horiz-adv-x="928.6" />
-<glyph glyph-name="home" unicode="" d="m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z" horiz-adv-x="928.6" />
-<glyph glyph-name="info" unicode="" d="m357 100v-71q0-15-10-25t-26-11h-285q-15 0-25 11t-11 25v71q0 15 11 25t25 11h35v214h-35q-15 0-25 11t-11 25v71q0 15 11 25t25 11h214q15 0 25-11t11-25v-321h35q15 0 26-11t10-25z m-71 643v-107q0-15-11-25t-25-11h-143q-14 0-25 11t-11 25v107q0 14 11 25t25 11h143q15 0 25-11t11-25z" horiz-adv-x="357.1" />
-<glyph glyph-name="info-circled" unicode="" d="m571 82v89q0 8-5 13t-12 5h-54v286q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h53v-179h-53q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h250q7 0 12 5t5 13z m-71 500v89q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h107q8 0 13 5t5 13z m357-232q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="export" unicode="" d="m786 298v-144q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h142q7 0 13-6t5-12q0-15-15-18-43-15-74-34-5-2-9-2h-62q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v119q0 11 10 16 16 7 30 21 9 9 20 4 12-5 12-16z m132 277l-214-214q-10-11-25-11-7 0-14 3-22 9-22 33v107h-89q-181 0-245-73-66-77-41-264 2-13-11-19-5-1-7-1-9 0-14 7-6 8-12 17t-22 38-28 56-21 64-10 68q0 27 2 50t8 51 15 49 27 45 38 42 52 34 70 27 89 17 110 6h89v107q0 24 22 33 7 3 14 3 14 0 25-11l214-214q11-11 11-25t-11-25z" horiz-adv-x="928.6" />
-<glyph glyph-name="export-alt" unicode="" d="m561 236l196 196q11 11 11 25t-11 25l-196 197q-17 17-39 7-22-9-22-32v-90q-66 0-121-11t-90-28-64-44-42-53-25-61-12-62-3-62q0-101 93-226 6-6 14-6 4 0 7 1 13 5 11 19-25 197 34 264 26 29 73 42t125 13v-89q0-24 22-33 7-3 14-3 14 0 25 11z m296 382v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="share" unicode="" d="m679 279q74 0 126-53t52-126-52-126-126-53-127 53-52 126q0 7 1 19l-201 100q-51-48-121-48-75 0-127 53t-52 126 52 126 127 53q70 0 121-48l201 100q-1 12-1 19 0 74 52 126t127 53 126-53 52-126-52-126-126-53q-71 0-122 48l-201-100q1-12 1-19t-1-19l201-100q51 48 122 48z" horiz-adv-x="857.1" />
-<glyph glyph-name="share-squared" unicode="" d="m714 183q0 49-35 84t-84 36q-46 0-80-33l-135 67q1 9 1 13t-1 13l135 67q34-33 80-33 50 0 84 36t35 84-35 84-84 35-84-35-35-84q0-4 1-13l-134-67q-35 32-81 32-49 0-84-35t-35-84 35-84 84-35q46 0 81 32l134-67q-1-9-1-13 0-49 35-84t84-35 84 35 35 84z m143 435v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="retweet" unicode="" d="m714 11q0-8-5-13t-13-5h-535q-5 0-8 1t-5 4-3 4-2 7 0 6v335h-107q-15 0-25 11t-11 25q0 13 8 23l179 214q11 12 27 12t28-12l178-214q9-10 9-23 0-15-11-25t-25-11h-107v-214h321q9 0 14-6l89-108q4-6 4-11z m357 232q0-14-8-23l-179-214q-11-13-27-13t-27 13l-179 214q-8 9-8 23 0 14 10 25t26 11h107v214h-322q-9 0-14 7l-89 107q-4 5-4 11 0 7 5 12t13 6h536q4 0 7-1t5-4 3-5 2-6 1-7v-334h107q14 0 25-11t10-25z" horiz-adv-x="1071.4" />
-<glyph glyph-name="attention-alt" unicode="" d="m286 154v-125q0-15-11-25t-25-11h-143q-14 0-25 11t-11 25v125q0 14 11 25t25 10h143q15 0 25-10t11-25z m16 589l-15-429q-1-14-12-25t-25-10h-143q-14 0-25 10t-12 25l-15 429q-1 14 9 25t25 11h179q14 0 25-11t9-25z" horiz-adv-x="357.1" />
-<glyph glyph-name="attention" unicode="" d="m571 83v106q0 8-5 13t-12 5h-108q-7 0-12-5t-5-13v-106q0-8 5-13t12-6h108q7 0 12 6t5 13z m-1 208l10 257q0 6-5 10-7 6-14 6h-122q-7 0-14-6-5-4-5-12l9-255q0-5 6-9t13-3h103q8 0 13 3t6 9z m-7 522l428-786q20-35-1-70-10-17-26-26t-35-10h-858q-18 0-35 10t-26 26q-21 35-1 70l429 786q9 17 26 27t36 10 36-10 27-27z" horiz-adv-x="1000" />
-<glyph glyph-name="attention-circled" unicode="" d="m429 779q116 0 215-58t156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58z m71-696v106q0 8-5 13t-12 5h-107q-8 0-13-5t-6-13v-106q0-8 6-13t13-6h107q7 0 12 6t5 13z m-1 192l10 346q0 7-6 10-5 5-13 5h-123q-8 0-13-5-6-3-6-10l10-346q0-6 5-10t14-4h103q8 0 13 4t6 10z" horiz-adv-x="857.1" />
-<glyph glyph-name="location" unicode="" d="m429 493q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m142 0q0-61-18-100l-203-432q-9-18-27-29t-37-11-38 11-26 29l-204 432q-18 39-18 100 0 118 84 202t202 84 202-84 83-202z" horiz-adv-x="571.4" />
-<glyph glyph-name="trash" unicode="" d="m286 439v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m143 0v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m142 0v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q7 0 12-5t5-13z m72-404v529h-500v-529q0-12 4-22t8-15 6-5h464q2 0 6 5t8 15 4 22z m-375 601h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q22 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
-<glyph glyph-name="doc" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z" horiz-adv-x="857.1" />
-<glyph glyph-name="docs" unicode="" d="m946 636q23 0 38-16t16-38v-678q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v160h-303q-23 0-38 16t-16 38v375q0 22 11 49t27 42l228 228q15 16 42 27t49 11h232q23 0 38-16t16-38v-183q38 23 71 23h232z m-303-119l-167-167h167v167z m-357 214l-167-167h167v167z m109-361l176 176v233h-214v-233q0-22-15-38t-38-15h-233v-357h286v143q0 22 11 49t27 42z m534-449v643h-215v-232q0-22-15-38t-38-15h-232v-358h500z" horiz-adv-x="1000" />
-<glyph glyph-name="doc-text" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-572 483q0 7 5 12t13 5h393q8 0 13-5t5-12v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36z m411-125q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z m0-143q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z" horiz-adv-x="857.1" />
-<glyph glyph-name="doc-inv" unicode="" d="m571 564v264q13-8 21-16l227-228q8-7 16-20h-264z m-71-18q0-22 16-38t38-15h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304z" horiz-adv-x="857.1" />
-<glyph glyph-name="doc-text-inv" unicode="" d="m819 584q8-7 16-20h-264v264q13-8 21-16z m-265-91h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304q0-22 16-38t38-15z m89-411v36q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v36q0 7-5 12t-13 5h-393q-8 0-13-5t-5-12v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v35q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-35q0-8 5-13t13-5h393q8 0 13 5t5 13z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-pdf" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-287 331q18-14 47-31 33 4 65 4 82 0 99-27 9-13 1-29 0-1-1-1l-1-2v0q-3-21-39-21-27 0-65 11t-72 29q-123-13-219-46-85-146-135-146-8 0-15 4l-14 6q0 1-3 3-6 6-4 20 5 23 32 51t73 54q8 5 13-3 1-1 1-2 29 47 60 110 38 76 58 146-13 46-17 89t4 71q6 22 23 22h12q13 0 20-8 10-12 5-38-1-3-2-4 0-2 0-5v-17q-1-68-8-107 31-91 82-133z m-322-229q30 13 77 88-29-22-49-47t-28-41z m223 513q-9-23-2-73 1 4 4 24 0 2 4 24 1 3 3 5-1 0-1 1t0 1-1 1q0 12-7 20 0-1 0-1v-2z m-70-368q76 30 159 45-1 0-7 5t-9 8q-43 37-71 98-15-48-47-110-16-31-25-46z m361 8q-14 14-78 14 42-16 69-16 8 0 10 1 0 0-1 1z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-word" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-656 500v-59h39l92-369h88l72 271q4 11 5 25 1 9 1 14h3l1-14q1-1 2-11t3-14l72-271h89l91 369h39v59h-167v-59h50l-55-245q-3-11-4-25l-1-12h-3l-1 12q-1 2-2 11t-3 14l-81 304h-63l-81-304q-1-5-2-13t-2-12l-2-12h-2l-2 12q-1 14-4 25l-55 245h50v59h-167z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-excel" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-547 131v-59h157v59h-42l58 90q3 4 5 9t5 8 2 2h1q0-2 2-6 2-2 3-4t3-4 4-5l60-90h-43v-59h163v59h-38l-107 152 108 158h38v59h-156v-59h41l-57-89q-2-4-6-9t-5-8l-1-1h-1q-1 2-3 5-3 6-9 13l-59 89h42v59h-162v-59h38l106-152-109-158h-38z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-powerpoint" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-554 131v-59h183v59h-52v93h76q43 0 66 9 37 12 59 48t23 82q0 45-21 78t-56 49q-27 10-72 10h-206v-59h52v-310h-52z m197 156h-66v150h67q29 0 46-10 31-19 31-64 0-50-34-67-18-9-44-9z" horiz-adv-x="857.1" />
-<glyph glyph-name="file-image" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-72 250v-178h-571v107l107 107 71-71 215 214z m-464 108q-45 0-76 31t-31 76 31 76 76 31 76-31 31-76-31-76-76-31z" horiz-adv-x="857.1" />
-<glyph glyph-name="cog" unicode="" d="m571 350q0 59-41 101t-101 42-101-42-42-101 42-101 101-42 101 42 41 101z m286 61v-124q0-7-4-13t-11-7l-104-16q-10-30-21-51 19-27 59-77 6-6 6-13t-5-13q-15-21-55-61t-53-39q-7 0-14 5l-77 60q-25-13-51-21-9-76-16-104-4-16-20-16h-124q-8 0-14 5t-6 12l-16 103q-27 9-50 21l-79-60q-6-5-14-5-8 0-14 6-70 64-92 94-4 5-4 13 0 6 5 12 8 12 28 37t30 40q-15 28-23 55l-102 15q-7 1-11 7t-5 13v124q0 7 5 13t10 7l104 16q8 25 22 51-23 32-60 77-6 7-6 14 0 5 5 12 15 20 55 60t53 40q7 0 15-5l77-60q24 13 50 21 9 76 17 104 3 15 20 15h124q7 0 13-4t7-12l15-103q28-9 50-21l80 60q5 5 13 5 7 0 14-5 72-67 92-95 4-5 4-13 0-6-4-12-9-12-29-38t-30-39q14-28 23-55l102-15q7-1 12-7t4-13z" horiz-adv-x="857.1" />
-<glyph glyph-name="cog-alt" unicode="" d="m500 350q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m429-286q0 29-22 51t-50 21-50-21-21-51q0-29 21-50t50-21 51 21 21 50z m0 572q0 29-22 50t-50 21-50-21-21-50q0-30 21-51t50-21 51 21 21 51z m-215-235v-103q0-6-4-11t-9-6l-86-14q-6-19-18-42 19-27 50-64 4-6 4-11 0-7-4-11-13-17-46-50t-44-33q-6 0-11 4l-64 50q-21-11-43-17-6-60-13-87-4-13-17-13h-104q-6 0-11 4t-5 10l-13 85q-19 6-42 18l-66-50q-4-4-11-4-6 0-12 4-80 75-80 90 0 5 4 10 5 8 23 30t26 34q-13 24-20 46l-85 13q-5 1-9 5t-4 11v103q0 6 4 11t9 6l86 14q7 19 18 42-19 27-50 64-4 6-4 11 0 7 4 11 12 17 46 50t44 33q6 0 12-4l64-50q19 10 43 18 6 60 13 86 3 13 16 13h104q6 0 11-4t6-10l13-85q19-6 41-17l66 49q5 4 11 4 7 0 12-4 81-75 81-90 0-5-4-10-7-9-24-30t-25-34q13-27 19-46l85-12q5-2 9-6t4-11z m357-298v-78q0-9-83-17-6-15-16-29 28-63 28-77 0-2-2-4-68-40-69-40-5 0-26 27t-29 37q-11-1-17-1t-17 1q-7-11-29-37t-25-27q-1 0-69 40-3 2-3 4 0 14 29 77-10 14-17 29-83 8-83 17v78q0 9 83 18 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 1 17 1t17-1q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-9 83-18z m0 572v-78q0-9-83-18-6-15-16-29 28-63 28-77 0-2-2-4-68-39-69-39-5 0-26 26t-29 38q-11-1-17-1t-17 1q-7-12-29-38t-25-26q-1 0-69 39-3 2-3 4 0 14 29 77-10 14-17 29-83 9-83 18v78q0 9 83 17 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 2 17 2t17-2q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-8 83-17z" horiz-adv-x="1071.4" />
-<glyph glyph-name="wrench" unicode="" d="m214 29q0 14-10 25t-25 10-26-10-10-25 10-26 26-10 25 10 10 26z m360 234l-381-381q-21-20-50-20-29 0-51 20l-59 61q-21 20-21 50 0 29 21 51l380 380q22-55 64-97t97-64z m353 243q0-22-12-59-27-75-92-122t-144-46q-104 0-177 73t-73 177 73 176 177 74q32 0 67-10t60-26q9-6 9-15t-9-16l-163-94v-125l108-60q2 2 44 27t75 45 40 20q8 0 13-5t4-14z" horiz-adv-x="928.6" />
-<glyph glyph-name="calendar" unicode="" d="m71-79h161v161h-161v-161z m197 0h178v161h-178v-161z m-197 197h161v178h-161v-178z m197 0h178v178h-178v-178z m-197 214h161v161h-161v-161z m411-411h179v161h-179v-161z m-214 411h178v161h-178v-161z m428-411h161v161h-161v-161z m-214 197h179v178h-179v-178z m-196 482v161q0 7-6 12t-12 6h-36q-7 0-12-6t-6-12v-161q0-7 6-13t12-5h36q7 0 12 5t6 13z m410-482h161v178h-161v-178z m-214 214h179v161h-179v-161z m214 0h161v161h-161v-161z m18 268v161q0 7-5 12t-13 6h-35q-8 0-13-6t-5-12v-161q0-7 5-13t13-5h35q8 0 13 5t5 13z m215 36v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50v715q0 29 21 50t50 21h72v54q0 36 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 36 27 63t63 26h35q37 0 63-26t27-63v-54h71q29 0 50-21t22-50z" horiz-adv-x="928.6" />
-<glyph glyph-name="calendar-empty" unicode="" d="m71-79h786v572h-786v-572z m215 679v161q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h36q8 0 13 5t5 13z m428 0v161q0 8-5 13t-13 5h-35q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h35q8 0 13 5t5 13z m215 36v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50v715q0 29 21 50t50 21h72v54q0 36 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 36 27 63t63 26h35q37 0 63-26t27-63v-54h71q29 0 50-21t22-50z" horiz-adv-x="928.6" />
-<glyph glyph-name="clock" unicode="" d="m500 546v-250q0-7-5-12t-13-5h-178q-8 0-13 5t-5 12v36q0 8 5 13t13 5h125v196q0 8 5 13t12 5h36q8 0 13-5t5-13z m232-196q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="block" unicode="" d="m732 352q0 90-48 164l-421-420q76-50 166-50 62 0 118 25t96 65 65 97 24 119z m-557-167l421 421q-75 50-167 50-83 0-153-40t-110-112-41-152q0-91 50-167z m682 167q0-88-34-168t-91-137-137-92-166-34-167 34-137 92-91 137-34 168 34 167 91 137 137 91 167 34 166-34 137-91 91-137 34-167z" horiz-adv-x="857.1" />
-<glyph glyph-name="zoom-in" unicode="" d="m571 404v-36q0-7-5-13t-12-5h-125v-125q0-7-6-13t-12-5h-36q-7 0-13 5t-5 13v125h-125q-7 0-12 5t-6 13v36q0 7 6 12t12 5h125v125q0 8 5 13t13 5h36q7 0 12-5t6-13v-125h125q7 0 12-5t5-12z m72-18q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-21-50t-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
-<glyph glyph-name="zoom-out" unicode="" d="m571 404v-36q0-7-5-13t-12-5h-322q-7 0-12 5t-6 13v36q0 7 6 12t12 5h322q7 0 12-5t5-12z m72-18q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-21-50t-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
-<glyph glyph-name="down-circled2" unicode="" d="m625 332q0-7-6-13l-178-178q-6-5-12-5t-13 5l-179 178q-8 9-4 20 5 11 17 11h107v196q0 8 5 13t13 5h107q8 0 13-5t5-13v-196h107q8 0 13-5t5-13z m-196 322q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="up-circled2" unicode="" d="m624 361q-5-11-17-11h-107v-196q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v196h-107q-8 0-13 5t-5 13q0 7 6 13l178 178q6 5 13 5t12-5l179-178q8-9 4-20z m-195 293q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="left-circled2" unicode="" d="m643 404v-108q0-7-5-12t-13-5h-196v-108q0-7-5-12t-13-5q-7 0-14 5l-178 178q-5 5-5 13t5 13l179 178q5 5 13 5 7 0 12-5t6-12v-108h196q7 0 13-5t5-12z m89-54q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="right-circled2" unicode="" d="m643 350q0-8-5-13l-179-178q-5-5-13-5-7 0-12 5t-5 12v108h-197q-7 0-12 5t-6 12v108q0 7 6 12t12 5h197v108q0 7 5 12t12 5q7 0 14-5l178-178q5-5 5-13z m89 0q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="down-dir" unicode="" d="m571 457q0-14-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 11-11 25t11 25 25 11h500q14 0 25-11t10-25z" horiz-adv-x="571.4" />
-<glyph glyph-name="up-dir" unicode="" d="m571 171q0-14-10-25t-25-10h-500q-15 0-25 10t-11 25 11 26l250 250q10 10 25 10t25-10l250-250q10-11 10-26z" horiz-adv-x="571.4" />
-<glyph glyph-name="left-dir" unicode="" d="m357 600v-500q0-14-10-25t-26-11-25 11l-250 250q-10 11-10 25t10 25l250 250q11 11 25 11t26-11 10-25z" horiz-adv-x="357.1" />
-<glyph glyph-name="right-dir" unicode="" d="m321 350q0-14-10-25l-250-250q-11-11-25-11t-25 11-11 25v500q0 15 11 25t25 11 25-11l250-250q10-10 10-25z" horiz-adv-x="357.1" />
-<glyph glyph-name="down-open" unicode="" d="m939 399l-414-413q-10-11-25-11t-25 11l-414 413q-11 11-11 26t11 25l92 92q11 11 26 11t25-11l296-296 296 296q11 11 25 11t26-11l92-92q11-11 11-25t-11-26z" horiz-adv-x="1000" />
-<glyph glyph-name="left-open" unicode="" d="m653 682l-296-296 296-297q11-10 11-25t-11-25l-92-93q-11-10-25-10t-25 10l-414 415q-11 10-11 25t11 25l414 414q10 10 25 10t25-10l92-93q11-10 11-25t-11-25z" horiz-adv-x="714.3" />
-<glyph glyph-name="right-open" unicode="" d="m618 361l-414-415q-11-10-25-10t-26 10l-92 93q-11 11-11 25t11 25l296 297-296 296q-11 11-11 25t11 25l92 93q11 10 26 10t25-10l414-414q10-11 10-25t-10-25z" horiz-adv-x="714.3" />
-<glyph glyph-name="up-open" unicode="" d="m939 107l-92-92q-11-10-26-10t-25 10l-296 297-296-297q-11-10-25-10t-26 10l-92 92q-11 11-11 26t11 25l414 414q11 10 25 10t25-10l414-414q11-11 11-25t-11-26z" horiz-adv-x="1000" />
-<glyph glyph-name="angle-left" unicode="" d="m350 546q0-7-6-12l-219-220 219-219q6-6 6-13t-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="357.1" />
-<glyph glyph-name="angle-right" unicode="" d="m332 314q0-7-6-13l-260-260q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l260-260q6-5 6-13z" horiz-adv-x="357.1" />
-<glyph glyph-name="angle-up" unicode="" d="m600 189q0-7-6-13l-28-27q-5-6-12-6t-13 6l-220 219-219-219q-5-6-13-6t-13 6l-27 27q-6 6-6 13t6 13l260 260q5 6 12 6t13-6l260-260q6-5 6-13z" horiz-adv-x="642.9" />
-<glyph glyph-name="angle-down" unicode="" d="m600 439q0-7-6-13l-260-260q-5-5-13-5t-12 5l-260 260q-6 6-6 13t6 13l27 28q6 6 13 6t13-6l219-219 220 219q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="642.9" />
-<glyph glyph-name="angle-circled-left" unicode="" d="m507 72l57 56q11 11 11 26t-11 25l-171 171 171 171q11 11 11 25t-11 25l-57 57q-10 11-25 11t-25-11l-253-253q-11-11-11-25t11-25l253-254q11-10 25-10t25 10z m350 278q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="angle-circled-right" unicode="" d="m400 72l253 253q11 11 11 25t-11 25l-253 253q-10 11-25 11t-25-11l-57-56q-11-11-11-26t11-25l171-171-171-171q-11-11-11-25t11-26l57-57q11-10 25-10t25 10z m457 278q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="angle-circled-up" unicode="" d="m650 214l57 57q11 11 11 25t-11 26l-253 253q-11 10-25 10t-26-10l-253-254q-10-10-10-25t10-25l57-57q11-10 25-10t25 10l172 172 171-172q11-10 25-10t25 10z m207 136q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="angle-circled-down" unicode="" d="m454 125l253 253q11 11 11 26t-11 25l-57 57q-10 10-25 10t-25-10l-171-172-172 172q-10 10-25 10t-25-10l-57-57q-10-11-10-25t10-26l253-253q11-10 26-10t25 10z m403 225q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="angle-double-left" unicode="" d="m350 82q0-7-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13z m214 0q0-7-5-13l-28-28q-6-5-13-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q6 6 13 6t13-6l28-28q5-5 5-13t-5-12l-220-220 220-219q5-6 5-13z" horiz-adv-x="571.4" />
-<glyph glyph-name="angle-double-right" unicode="" d="m332 314q0-7-6-13l-260-260q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l260-260q6-5 6-13z m214 0q0-7-5-13l-260-260q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13z" horiz-adv-x="571.4" />
-<glyph glyph-name="angle-double-up" unicode="" d="m600 118q0-7-6-13l-28-28q-5-5-12-5t-13 5l-220 219-219-219q-5-5-13-5t-13 5l-27 28q-6 6-6 13t6 13l260 260q5 5 12 5t13-5l260-260q6-6 6-13z m0 214q0-7-6-13l-28-28q-5-5-12-5t-13 5l-220 220-219-220q-5-5-13-5t-13 5l-27 28q-6 6-6 13t6 13l260 260q5 6 12 6t13-6l260-260q6-6 6-13z" horiz-adv-x="642.9" />
-<glyph glyph-name="angle-double-down" unicode="" d="m600 368q0-7-6-13l-260-260q-5-6-13-6t-12 6l-260 260q-6 6-6 13t6 13l27 28q6 5 13 5t13-5l219-220 220 220q5 5 13 5t12-5l28-28q6-6 6-13z m0 214q0-7-6-13l-260-260q-5-5-13-5t-12 5l-260 260q-6 6-6 13t6 13l27 28q6 5 13 5t13-5l219-220 220 220q5 5 13 5t12-5l28-28q6-6 6-13z" horiz-adv-x="642.9" />
-<glyph glyph-name="down-big" unicode="" d="m899 386q0-30-21-50l-363-364q-22-21-51-21-29 0-50 21l-363 364q-21 20-21 50 0 29 21 51l41 41q22 21 51 21 29 0 50-21l164-164v393q0 29 21 50t51 22h71q29 0 50-22t21-50v-393l164 164q21 21 51 21 29 0 50-21l42-42q21-21 21-50z" horiz-adv-x="928.6" />
-<glyph glyph-name="left-big" unicode="" d="m857 350v-71q0-30-18-51t-47-21h-393l164-164q21-20 21-50t-21-50l-42-43q-21-20-51-20-29 0-50 20l-364 364q-20 21-20 50 0 29 20 51l364 363q21 21 50 21 29 0 51-21l42-42q21-21 21-50t-21-51l-164-164h393q29 0 47-20t18-51z" horiz-adv-x="857.1" />
-<glyph glyph-name="right-big" unicode="" d="m821 314q0-30-20-50l-363-364q-22-20-51-20-29 0-50 20l-42 42q-22 21-22 51t22 51l163 163h-393q-29 0-47 21t-18 51v71q0 30 18 51t47 20h393l-163 164q-22 21-22 51t22 50l42 42q21 21 50 21 29 0 51-21l363-363q20-20 20-51z" horiz-adv-x="857.1" />
-<glyph glyph-name="up-big" unicode="" d="m899 308q0-28-21-50l-42-42q-21-21-50-21-30 0-51 21l-164 164v-393q0-29-20-47t-51-19h-71q-30 0-51 19t-21 47v393l-164-164q-20-21-50-21t-50 21l-42 42q-21 21-21 50 0 30 21 51l363 363q20 21 50 21 30 0 51-21l363-363q21-22 21-51z" horiz-adv-x="928.6" />
-<glyph glyph-name="left-circled" unicode="" d="m714 314v72q0 14-10 25t-25 10h-281l106 106q11 11 11 25t-11 25l-51 51q-10 10-25 10t-25-10l-202-202-51-51q-10-10-10-25t10-25l51-51 202-202q10-10 25-10t25 10l51 51q10 10 10 25t-10 25l-106 106h281q14 0 25 10t10 25z m143 36q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="right-circled" unicode="" d="m717 350q0 15-10 25l-51 51-202 202q-10 10-25 10t-25-10l-51-51q-10-10-10-25t10-25l106-106h-280q-15 0-26-10t-10-25v-72q0-14 10-25t26-10h280l-106-106q-10-10-10-25t10-25l51-51q10-10 25-10t25 10l202 202 51 51q10 10 10 25z m140 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="up-circled" unicode="" d="m717 351q0 15-11 25l-202 202-50 50q-10 11-25 11t-26-11l-50-50-202-202q-10-10-10-25t10-26l50-50q11-10 26-10t25 10l105 105v-280q0-14 11-25t25-11h71q15 0 25 11t11 25v280l105-105q11-11 26-11t25 11l50 50q11 11 11 26z m140-1q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="down-circled" unicode="" d="m717 349q0 16-11 26l-50 50q-10 10-25 10t-26-10l-105-105v280q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-280l-105 105q-11 11-25 11t-26-11l-50-50q-10-10-10-26t10-25l202-202 50-50q11-10 26-10t25 10l50 50 202 202q11 10 11 25z m140 1q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="cw" unicode="" d="m857 707v-250q0-14-10-25t-26-11h-250q-23 0-32 23-10 22 7 38l77 77q-82 77-194 77-58 0-111-23t-91-61-62-91-22-111 22-111 62-91 91-61 111-23q66 0 125 29t100 82q4 6 13 7 8 0 14-5l76-77q5-4 6-11t-5-13q-60-74-147-114t-182-41q-87 0-167 34t-136 92-92 137-34 166 34 166 92 137 136 92 167 34q82 0 158-31t137-88l72 72q16 18 39 8 22-9 22-33z" horiz-adv-x="857.1" />
-<glyph glyph-name="ccw" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z" horiz-adv-x="857.1" />
-<glyph glyph-name="level-up" unicode="" d="m568 514q-10-21-32-21h-107v-482q0-8-5-13t-13-5h-393q-12 0-16 10-5 11 2 19l89 108q5 6 14 6h179v357h-107q-23 0-33 21-9 20 5 37l179 215q10 12 27 12t28-12l178-215q15-17 5-37z" horiz-adv-x="571.4" />
-<glyph glyph-name="level-down" unicode="" d="m18 707h393q7 0 12-5t6-13v-482h107q22 0 32-20t-5-39l-178-214q-11-13-28-13t-27 13l-179 214q-14 17-5 39 10 20 33 20h107v357h-179q-8 0-14 6l-89 108q-7 7-2 19 5 10 16 10z" horiz-adv-x="571.4" />
-<glyph glyph-name="shuffle" unicode="" d="m372 582q-34-52-77-153-12 25-20 41t-23 35-28 32-36 19-45 8h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q139 0 229-125z m628-446q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107q-18 0-48 0t-45-1-41 1-39 3-36 6-35 10-32 16-33 22-31 30-31 39q33 52 76 152 12-25 20-40t23-36 28-31 35-20 46-8h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z m0 500q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-143q-27 0-49-8t-38-25-29-35-25-43q-18-34-43-95-16-37-28-62t-30-59-36-55-41-47-50-38-60-23-71-10h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q27 0 48 9t39 25 28 34 26 43q17 35 43 96 16 36 28 62t30 58 36 56 41 46 50 38 59 24 72 9h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
-<glyph glyph-name="exchange" unicode="" d="m1000 189v-107q0-7-5-12t-13-6h-768v-107q0-7-5-12t-13-6q-6 0-13 6l-178 178q-5 5-5 13 0 8 5 13l179 178q5 5 12 5 8 0 13-5t5-13v-107h768q7 0 13-5t5-13z m0 304q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-768q-7 0-13 6t-5 12v107q0 8 5 13t13 5h768v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
-<glyph glyph-name="history" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z m-357 161v-250q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13v35q0 8 5 13t13 5h125v197q0 8 5 13t12 5h36q8 0 13-5t5-13z" horiz-adv-x="857.1" />
-<glyph glyph-name="expand" unicode="" d="m639 473q10-19-3-36l-178-250q-11-16-29-16t-29 16l-179 250q-13 17-3 36 10 20 32 20h357q22 0 32-20z m75-391v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="collapse" unicode="" d="m639 227q-10-20-32-20h-357q-22 0-32 20-10 19 3 37l179 250q10 15 29 15t29-15l178-250q13-18 3-37z m75-145v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="expand-right" unicode="" d="m607 350q0-18-15-29l-250-179q-17-12-37-2-19 9-19 31v358q0 22 19 31 20 10 37-2l250-179q15-11 15-29z m107-268v536q0 8-5 13t-13 5h-535q-8 0-13-5t-5-13v-536q0-8 5-13t13-5h535q8 0 13 5t5 13z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="collapse-left" unicode="" d="m571 529v-358q0-14-10-25t-25-10q-11 0-21 6l-250 179q-15 11-15 29t15 29l250 179q10 6 21 6 14 0 25-10t10-25z m143-447v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
-<glyph glyph-name="play" unicode="" d="m772 333l-741-412q-13-7-22-2t-9 20v822q0 14 9 20t22-2l741-412q13-7 13-17t-13-17z" horiz-adv-x="785.7" />
-<glyph glyph-name="play-circled2" unicode="" d="m661 350q0-21-18-31l-304-178q-8-5-18-5-8 0-17 4-18 11-18 31v358q0 20 18 31 18 10 35-1l304-178q18-10 18-31z m71 0q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="play-circled" unicode="" d="m429 779q116 0 215-58t156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58z m214-460q18 10 18 31t-18 31l-304 178q-17 11-35 1-18-11-18-31v-358q0-20 18-31 9-4 17-4 10 0 18 5z" horiz-adv-x="857.1" />
-<glyph glyph-name="stop" unicode="" d="m857 743v-786q0-14-10-25t-26-11h-785q-15 0-25 11t-11 25v786q0 14 11 25t25 11h785q15 0 26-11t10-25z" horiz-adv-x="857.1" />
-<glyph glyph-name="cloud" unicode="" d="m1071 207q0-89-62-151t-152-63h-607q-103 0-177 73t-73 177q0 74 40 135t104 91q-1 15-1 24 0 118 84 202t202 84q88 0 159-50t105-128q39 35 93 35 59 0 101-42t42-101q0-42-23-77 72-17 119-75t46-134z" horiz-adv-x="1071.4" />
-<glyph glyph-name="table" unicode="" d="m286 82v107q0 8-5 13t-13 5h-179q-7 0-13-5t-5-13v-107q0-8 5-13t13-5h179q8 0 13 5t5 13z m0 214v108q0 7-5 12t-13 5h-179q-7 0-13-5t-5-12v-108q0-7 5-12t13-5h179q8 0 13 5t5 12z m285-214v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m-285 429v107q0 8-5 13t-13 5h-179q-7 0-13-5t-5-13v-107q0-8 5-13t13-5h179q8 0 13 5t5 13z m285-215v108q0 7-5 12t-12 5h-179q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h179q7 0 12 5t5 12z m286-214v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m-286 429v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m286-215v108q0 7-5 12t-13 5h-178q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h178q8 0 13 5t5 12z m0 215v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m72 178v-607q0-37-27-63t-63-26h-750q-36 0-63 26t-26 63v607q0 37 26 63t63 27h750q37 0 63-27t27-63z" horiz-adv-x="928.6" />
-<glyph glyph-name="off" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34-167 34-136 92-92 137-34 166q0 102 45 191t126 151q24 18 54 14t46-28q18-23 14-53t-28-47q-54-41-84-101t-30-127q0-58 22-111t62-91 91-61 111-23 110 23 92 61 61 91 22 111q0 68-30 127t-84 101q-24 18-28 47t14 53q17 24 47 28t53-14q81-61 126-151t45-191z m-357 429v-358q0-29-21-50t-50-21-51 21-21 50v358q0 29 21 50t51 21 50-21 21-50z" horiz-adv-x="857.1" />
-<glyph glyph-name="check" unicode="" d="m786 331v-177q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q35 0 65-14 9-4 10-13 2-10-5-16l-27-28q-6-5-13-5-2 0-5 1-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v141q0 8 5 13l36 35q6 6 13 6 3 0 7-2 11-4 11-16z m129 273l-455-454q-13-14-31-14t-32 14l-240 240q-14 13-14 31t14 32l61 62q14 13 32 13t32-13l147-147 361 361q13 13 31 13t32-13l62-61q13-14 13-32t-13-32z" horiz-adv-x="928.6" />
-<glyph glyph-name="asterisk" unicode="" d="m827 264q26-14 33-43t-7-55l-35-61q-15-26-44-33t-54 7l-149 85v-171q0-29-21-50t-50-22h-71q-29 0-51 22t-21 50v171l-148-85q-26-15-55-7t-43 33l-36 61q-14 26-7 55t34 43l148 86-148 86q-26 14-34 43t7 55l36 61q15 26 43 33t55-7l148-85v171q0 29 21 50t51 22h71q29 0 50-22t21-50v-171l149 85q26 15 54 7t44-33l35-62q15-25 7-54t-33-43l-148-86z" horiz-adv-x="928.6" />
-<glyph glyph-name="chart-bar" unicode="" d="m357 350v-286h-143v286h143z m214 286v-572h-142v572h142z m572-643v-72h-1143v858h71v-786h1072z m-357 500v-429h-143v429h143z m214 214v-643h-143v643h143z" horiz-adv-x="1142.9" />
-<glyph glyph-name="bug" unicode="" d="m911 314q0-14-11-25t-25-10h-125q0-96-37-162l116-117q10-11 10-25t-10-25q-10-11-25-11t-26 11l-110 110q-3-3-8-7t-24-16-36-21-46-16-54-7v500h-71v-500q-29 0-57 7t-49 19-36 22-25 18l-8 8-102-116q-11-12-27-12-13 0-24 9-11 10-11 25t8 26l113 127q-32 63-32 153h-125q-15 0-25 10t-11 25 11 25 25 11h125v164l-97 97q-11 10-11 25t11 25 25 10 25-10l97-97h471l96 97q11 10 25 10t26-10 10-25-10-25l-97-97v-164h125q15 0 25-11t11-25z m-268 322h-357q0 74 52 126t126 52 127-52 52-126z" horiz-adv-x="928.6" />
-<glyph glyph-name="certificate" unicode="" d="m768 350l77-75q17-16 11-39-7-23-29-29l-105-27 30-103q6-23-11-39-16-18-39-11l-104 30-27-105q-5-23-28-30-7-1-11-1-17 0-28 13l-75 77-76-77q-15-17-39-12-23 7-28 30l-27 105-104-30q-23-7-39 11-17 16-10 39l29 103-105 27q-22 6-29 29-6 23 11 39l77 75-77 75q-17 16-11 39 7 23 29 29l105 27-29 103q-7 23 10 39 16 18 39 11l104-29 27 104q5 23 28 29 23 7 39-11l76-77 75 77q16 17 39 11 23-6 28-29l27-104 104 29q23 7 39-11 17-16 11-39l-30-103 105-27q22-6 29-29 6-23-11-39z" horiz-adv-x="857.1" />
-<glyph glyph-name="tasks" unicode="" d="m571 64h358v72h-358v-72z m-214 286h572v71h-572v-71z m357 286h215v71h-215v-71z m286-465v-142q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v142q0 15 11 26t25 10h928q15 0 25-10t11-26z m0 286v-143q0-14-11-25t-25-10h-928q-15 0-25 10t-11 25v143q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 286v-143q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v143q0 14 11 25t25 11h928q15 0 25-11t11-25z" horiz-adv-x="1000" />
-<glyph glyph-name="sort-up" unicode="" d="m571 457q0-14-10-25t-25-11h-500q-15 0-25 11t-11 25 11 25l250 250q10 11 25 11t25-11l250-250q10-10 10-25z" horiz-adv-x="571.4" />
-<glyph glyph-name="sort-down" unicode="" d="m571 243q0-15-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 10-11 25t11 25 25 11h500q14 0 25-11t10-25z" horiz-adv-x="571.4" />
-<glyph glyph-name="sort" unicode="" d="m571 243q0-15-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 10-11 25t11 25 25 11h500q14 0 25-11t10-25z m0 214q0-14-10-25t-25-11h-500q-15 0-25 11t-11 25 11 25l250 250q10 11 25 11t25-11l250-250q10-10 10-25z" horiz-adv-x="571.4" />
-<glyph glyph-name="gauge" unicode="" d="m214 207q0 30-21 51t-50 21-51-21-21-51 21-50 51-21 50 21 21 50z m107 250q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m239-268l57 213q3 14-5 27t-21 16-27-3-17-22l-56-213q-33-3-60-25t-35-55q-11-43 11-81t66-50 81 11 50 66q9 33-4 65t-40 51z m369 18q0 30-21 51t-51 21-50-21-21-51 21-50 50-21 51 21 21 50z m-358 357q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m250-107q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m179-250q0-145-79-269-10-17-30-17h-782q-20 0-30 17-79 123-79 269 0 102 40 194t106 160 160 107 194 39 194-39 160-107 106-160 40-194z" horiz-adv-x="1000" />
-<glyph glyph-name="spinner" unicode="" d="m277 100q0-33-24-57t-57-23q-33 0-56 23t-24 57 24 57 56 23q33 0 57-23t24-57z m241-107q0-30-21-51t-51-21-50 21-21 51 21 50 50 21 51-21 21-50z m-339 357q0-37-27-63t-63-26-63 26-26 63 26 63 63 26 63-26 27-63z m580-250q0-26-18-44t-45-18-44 18-18 44 18 44 44 19 45-19 18-44z m-464 500q0-41-29-69t-70-29-69 29-29 69 29 69 69 29 70-29 29-69z m259 107q0-45-32-76t-76-31-75 31-32 76 32 76 75 31 76-31 32-76z m303-357q0-22-15-38t-38-16-38 16-16 38 16 38 38 16 38-16 15-38z m-116 250q0-18-13-32t-32-13-31 13-13 32 13 31 31 14 32-14 13-31z" horiz-adv-x="875" />
-<glyph glyph-name="database" unicode="" d="m429 421q132 0 247 24t181 71v-95q0-38-57-71t-157-52-214-20-215 20-156 52-58 71v95q66-47 181-71t248-24z m0-428q132 0 247 24t181 71v-95q0-39-57-72t-157-52-214-19-215 19-156 52-58 72v95q66-47 181-71t248-24z m0 214q132 0 247 24t181 71v-95q0-38-57-71t-157-52-214-20-215 20-156 52-58 71v95q66-47 181-71t248-24z m0 643q116 0 214-19t157-52 57-72v-71q0-39-57-72t-157-52-214-19-215 19-156 52-58 72v71q0 39 58 72t156 52 215 19z" horiz-adv-x="857.1" />
-<glyph glyph-name="lifebuoy" unicode="" d="m500 850q102 0 194-40t160-106 106-160 40-194-40-194-106-160-160-106-194-40-194 40-160 106-106 160-40 194 40 194 106 160 160 106 194 40z m0-71q-106 0-201-51l108-108q46 16 93 16t93-16l108 108q-95 51-201 51z m-378-630l108 108q-16 46-16 93t16 93l-108 108q-51-95-51-201t51-201z m378-228q106 0 201 51l-108 108q-46-16-93-16t-93 16l-108-108q95-51 201-51z m0 215q89 0 152 63t62 151-62 152-152 62-151-62-63-152 63-151 151-63z m270 121l108-108q51 95 51 201t-51 201l-108-108q16-46 16-93t-16-93z" horiz-adv-x="1000" />
-<glyph glyph-name="cubes" unicode="" d="m357-61l214 107v176l-214-92v-191z m-36 254l226 96-226 97-225-97z m608-254l214 107v176l-214-92v-191z m-36 254l225 96-225 97-226-97z m-250 163l214 92v149l-214-92v-149z m-36 212l246 105-246 106-246-106z m607-289v-233q0-20-10-37t-29-26l-250-125q-14-8-32-8t-32 8l-250 125q-3 1-4 2-1-1-4-2l-250-125q-14-8-32-8t-31 8l-250 125q-19 9-29 26t-11 37v233q0 21 12 39t32 26l242 104v223q0 22 12 39t31 27l250 107q13 6 28 6t28-6l250-107q20-9 32-27t12-39v-223l242-104q20-9 32-26t11-40z" horiz-adv-x="1285.7" />
-<glyph glyph-name="cube" unicode="" d="m500-59l357 195v355l-357-130v-420z m-36 483l390 141-390 142-389-142z m465 140v-428q0-20-10-37t-28-26l-393-214q-15-9-34-9t-34 9l-393 214q-17 10-27 26t-10 37v428q0 23 13 41t34 26l393 143q12 5 24 5t25-5l393-143q21-8 34-26t13-41z" horiz-adv-x="1000" />
-<glyph glyph-name="bullseye" unicode="" d="m571 350q0-59-41-101t-101-42-101 42-42 101 42 101 101 42 101-42 41-101z m72 0q0 89-63 152t-151 62-152-62-63-152 63-151 152-63 151 63 63 151z m71 0q0-118-83-202t-202-84-202 84-84 202 84 202 202 84 202-84 83-202z m72 0q0 73-29 139t-76 114-114 76-138 28-139-28-114-76-76-114-29-139 29-139 76-113 114-77 139-28 138 28 114 77 76 113 29 139z m71 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="windows" unicode="" d="m381 289v-364l-381 53v311h381z m0 414v-367h-381v315z m548-414v-439l-507 70v369h507z m0 490v-443h-507v373z" horiz-adv-x="928.6" />
-<glyph glyph-name="cancel-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m86-420l154 154-86 86-154-152-152 152-88-86 154-154-154-152 88-86 152 152 154-152 86 86z" horiz-adv-x="840" />
-<glyph glyph-name="plus-1" unicode="" d="m550 400q30 0 30-50t-30-50l-210 0 0-210q0-30-50-30t-50 30l0 210-210 0q-30 0-30 50t30 50l210 0 0 210q0 30 50 30t50-30l0-210 210 0z" horiz-adv-x="580" />
-<glyph glyph-name="plus-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m52-470l200 0 0 102-200 0 0 202-102 0 0-202-202 0 0-102 202 0 0-202 102 0 0 202z" horiz-adv-x="840" />
-<glyph glyph-name="minus-1" unicode="" d="m550 400q30 0 30-50t-30-50l-520 0q-30 0-30 50t30 50l520 0z" horiz-adv-x="580" />
-<glyph glyph-name="minus-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m252-368l-504 0 0-102 504 0 0 102z" horiz-adv-x="840" />
-<glyph glyph-name="help-circled-1" unicode="" d="m454 810q190 2 326-130t140-322q2-190-131-327t-323-141q-190-2-327 131t-139 323q-4 190 130 327t324 139z m-2-740q30 0 49 19t19 47q2 30-17 49t-49 19l-2 0q-28 0-47-18t-21-46q0-30 19-49t47-21l2 0z m166 328q26 34 26 78 0 78-54 116-52 38-134 38-64 0-104-26-68-42-72-146l0-4 110 0 0 4q0 26 16 54 16 24 54 24 40 0 52-20 16-20 16-44 0-18-16-40-8-12-20-20l-6-4q-6-4-16-11t-20-15-21-17-17-17q-14-20-18-78l0-8 108 0 0 4q0 12 4 28 6 20 28 36l28 18q46 34 56 50z" horiz-adv-x="920" />
-<glyph glyph-name="heart-empty-1" unicode="" d="m790 642q70-64 70-156t-70-156l-360-330-360 330q-70 64-70 156t70 156q64 58 152 58t150-58l58-52 56 52q64 58 152 58t152-58z m-54-260q42 40 42 104 0 66-38 100-38 38-102 38-52 0-104-48l-104-92-106 92q-48 48-102 48-64 0-104-38-38-36-38-100 0-66 44-104l306-286z" horiz-adv-x="860" />
-<glyph glyph-name="mail-1" unicode="" d="m30 586q-32 18-28 40 2 14 26 14l846 0q38 0 20-32-8-14-24-22-14-6-192-102t-182-98q-16-10-46-10-28 0-46 10-4 2-182 98t-192 102z m850-100q20 10 20-10l0-368q0-16-17-32t-33-16l-800 0q-16 0-33 16t-17 32l0 368q0 20 20 10l384-200q18-10 46-10t46 10z" horiz-adv-x="900" />
-<glyph glyph-name="star-1" unicode="" d="m440 790l120-336 320 0-262-196 94-348-272 208-272-208 94 348-262 196 320 0z" horiz-adv-x="880" />
-<glyph glyph-name="star-empty-1" unicode="" d="m880 454l-262-196 94-348-272 208-272-208 94 348-262 196 320 0 120 336 120-336 320 0z m-440-238l150-124-62 178 144 114-176-4-56 202-54-202-176 4 142-114-62-178z" horiz-adv-x="880" />
-<glyph glyph-name="link-1" unicode="" d="m294 116q14 14 34 14t36-14q32-34 0-70l-42-40q-56-56-132-56-78 0-134 56t-56 132q0 78 56 134l148 148q70 68 144 77t128-43q16-16 16-36t-16-36q-36-32-70 0-50 48-132-34l-148-146q-26-26-26-64t26-62q26-26 63-26t63 26z m450 574q56-56 56-132 0-78-56-134l-158-158q-74-72-150-72-62 0-112 50-14 14-14 34t14 36q14 14 35 14t35-14q50-48 122 24l158 156q28 28 28 64 0 38-28 62-24 26-56 31t-60-21l-50-50q-16-14-36-14t-34 14q-34 34 0 70l50 50q54 54 127 51t129-61z" horiz-adv-x="800" />
-<glyph glyph-name="attach-1" unicode="" d="m244-140q-102 0-170 72-72 70-74 166t84 190l496 496q80 80 174 54 44-12 79-47t47-79q26-96-54-176l-474-474q-40-40-88-46-48-4-80 28-30 24-27 74t47 92l332 334q24 26 50 0t0-50l-332-332q-44-44-20-70 12-8 24-6 24 4 46 26l474 474q50 50 34 108-16 60-76 76-54 14-108-36l-494-494q-66-76-64-143t52-117q50-48 117-50t141 62l496 494q24 24 50 0 26-22 0-48l-496-496q-82-82-186-82z" horiz-adv-x="939" />
-<glyph glyph-name="eye-1" unicode="" d="m500 630q92 0 177-25t141-62 99-77 63-71 20-45-20-44-63-71-99-78-141-62-177-25-177 25-141 62-99 78-63 71-20 44 20 45 63 71 99 77 141 62 177 25z m0-494q92 0 157 63t65 151q0 90-65 153t-157 63-157-63-65-153q0-88 65-151t157-63z m0 214q8-8 37-2t50 11 25-9q0-44-33-75t-79-31-78 31-32 75q0 46 32 77t78 31q14 0 10-23t-12-47 2-38z" horiz-adv-x="1000" />
-<glyph glyph-name="attention-1" unicode="" d="m957-24q10-16 0-34-10-16-30-16l-892 0q-18 0-28 16-13 18-2 34l446 782q8 18 30 18t30-18z m-420 50l0 100-110 0 0-100 110 0z m0 174l0 300-110 0 0-300 110 0z" horiz-adv-x="962" />
-<glyph glyph-name="doc-text-1" unicode="" d="m212 308l0 90 280 0 0-90-280 0z m388 492q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-500 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l500 0z m0-800l0 700-500 0 0-700 500 0z m-110 592l0-88-280 0 0 88 280 0z m0-392l0-88-280 0 0 88 280 0z" horiz-adv-x="700" />
-<glyph glyph-name="doc-text-inv-1" unicode="" d="m600 800q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-500 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l500 0z m-460-208l0-88 420 0 0 88-420 0z m420-480l0 88-420 0 0-88 420 0z m0 196l0 90-418 0 0-90 418 0z" horiz-adv-x="700" />
-<glyph glyph-name="share-1" unicode="" d="m650 200q62 0 106-43t44-107q0-62-44-106t-106-44-106 44-44 106q0 6 1 14t1 12l-260 156q-42-32-92-32-62 0-106 44t-44 106 44 106 106 44q54 0 92-30l260 156q0 4-1 12t-1 12q0 62 44 106t106 44 106-43 44-107q0-62-44-106t-106-44q-52 0-90 32l-262-156q2-8 2-26 0-16-2-24l262-156q36 30 90 30z" horiz-adv-x="800" />
-<glyph glyph-name="shareable" unicode="" d="m340 350q0 68 47 114t113 46 113-46 47-114q0-66-47-113t-113-47-113 47-47 113z m-114 60q-14-60-66-60l-160 0 0 120 118 0q40 124 145 202t237 78q164 0 284-116 16-18 16-43t-16-43q-18-16-43-16t-43 16q-78 82-198 82-100 0-176-62t-98-158z m614-60l160 0 0-120-118 0q-40-124-144-202t-238-78q-164 0-282 118-18 18-18 43t18 41q16 18 41 18t43-18q82-82 198-82 100 0 176 63t98 157q12 60 66 60z" horiz-adv-x="1000" />
-<glyph glyph-name="ccw-1" unicode="" d="m532 736q170 0 289-120t119-290-119-290-289-120q-142 0-252 88l70 74q84-60 182-60 126 0 216 90t90 218-90 218-216 90q-124 0-214-87t-92-211l142 0-184-204-184 204 124 0q2 166 122 283t286 117z" horiz-adv-x="940" />
-<glyph glyph-name="cw-1" unicode="" d="m408 760q168 0 287-116t123-282l122 0-184-206-184 206 144 0q-4 124-94 210t-214 86q-126 0-216-90t-90-218q0-126 90-216t216-90q104 0 182 60l70-76q-110-88-252-88-168 0-288 120t-120 290 120 290 288 120z" horiz-adv-x="940" />
-<glyph glyph-name="arrows-ccw" unicode="" d="m186 140l116 116 0-292-276 16 88 86q-116 122-114 290t120 288q100 100 240 116l4-102q-100-16-172-88-88-88-90-213t84-217z m332 598l276-16-88-86q116-122 114-290t-120-288q-96-98-240-118l-2 104q98 16 170 88 88 88 90 213t-84 217l-114-116z" horiz-adv-x="820" />
-<glyph glyph-name="play-1" unicode="" d="m486 376q14-10 14-26 0-14-14-24l-428-266q-24-16-41-6t-17 40l0 514q0 30 17 40t41-6z" horiz-adv-x="500" />
-<glyph glyph-name="pause" unicode="" d="m440 700q90 0 90-64l0-570q0-66-90-66t-90 66l0 570q0 64 90 64z m-350 0q90 0 90-64l0-570q0-66-90-66t-90 66l0 570q0 64 90 64z" horiz-adv-x="530" />
-<glyph glyph-name="record" unicode="" d="m350 700q146 0 248-102t102-248q0-144-102-247t-248-103-248 103-102 247q0 146 102 248t248 102z" horiz-adv-x="700" />
-<glyph glyph-name="stop-1" unicode="" d="m526 650q74 0 74-64l0-470q0-66-74-66l-450 0q-76 0-76 66l0 470q0 36 18 50t58 14l450 0z" horiz-adv-x="600" />
-<glyph glyph-name="switch" unicode="" d="m700 592l0-140-500 0 0-90-200 160 200 170 0-100 500 0z m300-420l-200-160 0 90-500 0 0 140 500 0 0 100z" horiz-adv-x="1000" />
-<glyph glyph-name="loop" unicode="" d="m800 540q42 0 71-29t29-71l0-290q0-40-29-70t-71-30l-700 0q-40 0-70 30t-30 70l0 290q0 42 30 71t70 29l250 0 0 110 200-180-200-180 0 110-210 0 0-210 620 0 0 210-150 0 0 140 190 0z" horiz-adv-x="900" />
-<glyph glyph-name="cloud-1" unicode="" d="m760 494q100 0 170-68t70-166-70-166-170-68l-578 0q-74 0-128 52t-54 124q0 74 53 126t129 52q2 0 10-1t10-1q-2 12-2 38 0 108 78 184t188 76q90 0 160-52t94-134q28 4 40 4z" horiz-adv-x="1000" />
-<glyph glyph-name="certificate-outline" unicode="" d="m1019 395q22-15 22-44t-22-43l-96-64 51-104q14-26-3-49t-41-26l-115-7-7-117q-3-25-25-40t-50-2l-104 51-65-96q-16-24-43-24-27 0-43 24l-64 96-104-51q-26-14-49 2t-26 40l-7 117-117 7q-25 3-40 25t-2 50l51 104-96 64q-24 16-24 43t24 44l96 64-51 104q-14 27 2 50t40 25l117 7 7 115q3 25 26 41t49 3l104-51 64 96q13 21 43 21t43-21l65-96 104 51q26 14 50-3t25-41l7-115 115-7q25-3 41-25t3-50l-51-104z m-210-156q-9 17-4 36t21 30l70 46-70 47q-36 26-17 66l37 75-83 5q-20 1-34 15t-15 34l-5 83-75-37q-40-19-66 17l-47 70-46-70q-26-36-66-17l-75 37-5-83q-1-20-15-34t-34-15l-84-5 38-75q9-18 3-36t-22-30l-69-47 69-46q16-11 22-30t-3-36l-38-75 84-5q20-1 33-15t15-34l6-84 75 38q10 5 22 5 29 0 44-23l46-70 47 69q11 16 30 22t36-3l75-38 5 84q1 20 15 34t34 15l82 5z" horiz-adv-x="1041" />
-<glyph glyph-name="certificate-1" unicode="" d="m863 449l115-78q12-8 12-21t-12-21l-115-78 61-123q7-14-1-25t-20-13l-139-10-9-138q-1-12-12-20t-25-2l-124 62-78-116q-7-11-21-11t-21 11l-78 116-123-62q-14-6-25 2t-13 20l-10 139-137 9q-13 1-22 13t-1 25l63 123-117 78q-11 7-11 21t11 21l117 78-63 124q-7 12 1 24t22 13l137 9 10 139q1 12 13 20t25 1l123-61 78 116q7 11 21 11t21-11l78-116 124 61q13 7 25-1t12-20l9-139 139-9q12-1 20-12t1-25z" horiz-adv-x="990" />
-<glyph glyph-name="windows-1" unicode="" d="m0-43l105 371q35 20 86 31t83 13l34 1q50 0 104-10 101-20 144-61l-104-370q-36 28-79 45t-69 21l-26 4q-34 3-65 3-16 0-42-1t-84-14-87-33z m126 477l105 371q35 20 86 32t84 12l33 1q51 0 104-10 101-20 144-61l-104-371q-36 28-79 46t-69 20l-26 4q-35 3-64 3-16 0-42-1t-84-13-88-33z m431-513l104 371q37-28 81-45t68-21l25-4q34-3 65-3 16 0 43 2t84 13 86 32l-104-371q-35-20-86-31t-84-12l-33-2q-51 0-104 10-101 20-145 61z m120 475l104 370q37-28 81-45t68-21l25-4q34-3 65-3 16 0 43 2t83 13 87 32l-104-370q-35-20-86-31t-85-13l-33-2q-52 0-103 11-101 19-145 61z" horiz-adv-x="1233" />
-<glyph glyph-name="spin5" unicode="" d="m462 850c-6 0-11-5-11-11l0-183 0 0c0-6 5-11 11-11l69 0c1 0 1 0 1 0 7 0 12 5 12 11l0 183 0 0c0 6-5 11-12 11l-69 0c0 0 0 0-1 0z m250-47c-4 1-8-2-10-5l-91-158 0 0c-4-6-2-13 4-16l60-35c0 0 0 0 0 0 6-3 13-1 16 4l91 158c3 6 2 13-4 16l-61 35c-1 1-3 1-5 1z m-428-2c-2 0-4-1-6-2l-61-35c-5-3-7-10-4-16l91-157c0 0 0 0 0 0 3-6 10-8 16-5l61 35c5 4 7 11 4 16l-91 157c0 1 0 1 0 1-2 4-6 6-10 6z m620-163c-2 0-4 0-6-1l-157-91c0 0 0 0 0 0-6-3-8-10-5-16l35-61c4-5 11-7 16-4l157 91c1 0 1 0 1 0 6 3 7 10 4 16l-35 61c-2 3-6 5-10 5z m-810-4c-5 0-9-2-11-6l-35-61c-3-5-1-12 4-15l158-92 0 0c6-3 13-1 16 5l35 60c0 0 0 0 0 0 3 6 1 13-4 16l-158 91c-2 1-4 2-5 2z m712-235l0 0c-6 0-11-5-11-11l0-69c0-1 0-1 0-1 0-7 5-12 11-12l183 0 0 0c6 0 11 5 11 12l0 69c0 0 0 0 0 1 0 6-5 11-11 11l-183 0z m-794-5l0 0c-7 0-12-5-12-12l0-69c0 0 0 0 0-1 0-6 5-11 12-11l182 0 0 0c6 0 11 5 11 11l0 69c0 1 0 1 0 1 0 7-5 12-11 12l-182 0z m772-153c-4 0-8-2-10-6l-34-60c-1 0-1 0-1 0-3-6-1-13 4-16l158-91c6-3 13-2 16 4l35 61c3 5 1 12-4 15l-158 91 0 0c-2 1-4 2-6 2z m-566-5c-1 0-3 0-5-1l-157-91c0 0-1 0-1 0-5-3-7-11-4-16l35-61c3-5 10-7 16-4l157 91c0 0 0 0 0 0 6 3 8 10 5 16l-35 61c-3 3-7 5-11 5z m468-121c-2 0-4 0-6-1l-61-35c-5-4-7-11-4-16l91-157c0-1 0-1 0-1 3-6 11-7 16-4l61 35c5 3 7 10 4 16l-91 157c0 0 0 0 0 0-2 4-6 6-10 6z m-367-3c-4 1-8-2-10-5l-91-158c-3-6-1-13 4-16l61-35c5-3 12-1 15 4l92 158 0 0c3 6 1 13-5 16l-60 34c0 1 0 1 0 1-2 1-4 1-6 1z m149-57c-7 0-12-5-12-11l0-183 0 0c0-6 5-11 12-11l69 0c0 0 0 0 1 0 6 0 11 5 11 11l0 183 0 0c0 6-5 11-11 11l-69 0c-1 0-1 0-1 0z" horiz-adv-x="1000" />
-<glyph glyph-name="spin2" unicode="" d="m46 144l0 0c0 0-1 0-1 0-8 18-15 37-21 55-6 19-11 38-15 58-19 99-8 203 35 298 3 6 10 8 15 5 1 0 2 0 2-1l0 0 80-59c5-3 6-9 4-14-5-12-9-25-12-38-4-12-7-26-9-39-11-67-3-137 23-201 2-5 0-10-4-13l0 0-80-56c-5-4-12-3-16 3-1 0-1 1-1 2l0 0z m120 574l0 0c0 1 0 1 0 1 15 13 30 25 46 37 16 11 33 22 51 31 89 50 192 72 297 60 6-1 10-6 10-13 0-1-1-1-1-2l0 0-31-94c-2-5-8-8-13-7-13 0-27 0-40 0-14-1-27-2-40-4-68-11-133-40-186-84-4-3-10-3-14 0l0 0-79 58c-5 3-6 11-2 16 0 0 1 1 2 1l0 0z m588 65l0 0c0 0 1 0 1 0 17-10 34-21 50-32 16-12 31-25 46-38 74-69 127-160 148-262 2-6-2-12-9-13-1 0-1 0-2 0l0 0-100 1c-5 0-10 4-11 9-3 13-8 26-12 38-5 12-10 25-17 36-31 61-78 113-137 150-5 3-6 8-5 13l0 0 31 92c2 6 9 9 15 7 1 0 2-1 2-1l0 0z m244-535l0 0c0 0 0 0 0 0-4-20-9-39-15-57-7-19-14-37-22-55-44-92-114-170-205-221-6-3-13-1-16 4 0 1-1 2-1 2l0 0-30 94c-2 6 1 12 6 14 11 7 22 15 32 23 11 9 21 18 30 27 49 48 84 109 101 176 2 5 6 8 11 8l0 0 98-1c6 0 11-5 11-11 0-1 0-2 0-3l0 0z m-438-395l0 0c0 0 0 0 0 0-20-2-40-3-60-3-20 0-40 1-59 4-102 12-198 54-276 125-5 4-5 11 0 16 0 0 1 1 1 1l0 0 81 58c5 3 12 2 16-2 10-8 20-16 32-23 11-7 22-14 34-20 62-31 131-45 200-41 6 0 10-3 12-8l0 0 29-92c2-6-1-12-7-14-1-1-2-1-3-1l0 0z" horiz-adv-x="1000" />
-<glyph glyph-name="picture" unicode="" d="m357 529q0-45-31-76t-76-32-76 32-31 76 31 75 76 32 76-32 31-75z m572-215v-250h-786v107l178 179 90-89 285 285z m53 393h-893q-7 0-12-5t-6-13v-678q0-8 6-13t12-5h893q7 0 13 5t5 13v678q0 7-5 13t-13 5z m89-18v-678q0-37-26-63t-63-27h-893q-36 0-63 27t-26 63v678q0 37 26 63t63 27h893q37 0 63-27t26-63z" horiz-adv-x="1071.4" />
-<glyph glyph-name="menu" unicode="" d="m857 100v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 25t25 11h785q15 0 26-11t10-25z m0 286v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25v72q0 14 11 25t25 10h785q15 0 26-10t10-25z m0 285v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 26t25 10h785q15 0 26-10t10-26z" horiz-adv-x="857.1" />
-<glyph glyph-name="sliders" unicode="" d="m196 64v-71h-196v71h196z m197 72q14 0 25-11t11-25v-143q0-14-11-25t-25-11h-143q-14 0-25 11t-11 25v143q0 15 11 25t25 11h143z m89 214v-71h-482v71h482z m-357 286v-72h-125v72h125z m732-572v-71h-411v71h411z m-536 643q15 0 26-10t10-26v-142q0-15-10-26t-26-10h-142q-15 0-26 10t-10 26v142q0 15 10 26t26 10h142z m358-286q14 0 25-10t10-25v-143q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v143q0 14 11 25t25 10h143z m178-71v-71h-125v71h125z m0 286v-72h-482v72h482z" horiz-adv-x="857.1" />
-<glyph glyph-name="list-alt" unicode="" d="m214 189v-35q0-8-5-13t-13-5h-35q-7 0-13 5t-5 13v35q0 8 5 13t13 5h35q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-5h-35q-7 0-13 5t-5 12v36q0 7 5 13t13 5h35q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-6h-35q-7 0-13 6t-5 12v36q0 7 5 13t13 5h35q8 0 13-5t5-13z m643-286v-35q0-8-5-13t-13-5h-535q-8 0-13 5t-5 13v35q0 8 5 13t13 5h535q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-5h-535q-8 0-13 5t-5 12v36q0 7 5 13t13 5h535q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-6h-535q-8 0-13 6t-5 12v36q0 7 5 13t13 5h535q8 0 13-5t5-13z m72-393v464q0 8-6 13t-12 5h-822q-7 0-12-5t-6-13v-464q0-7 6-12t12-6h822q7 0 12 6t6 12z m71 607v-607q0-37-26-63t-63-26h-822q-36 0-63 26t-26 63v607q0 37 26 63t63 27h822q37 0 63-27t26-63z" horiz-adv-x="1000" />
-<glyph glyph-name="ajust" unicode="" d="m429 46v608q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41z m428 304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="circle" unicode="" d="m857 350q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="circle-empty" unicode="" d="m429 654q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
-<glyph glyph-name="circle-notch" unicode="" d="m1000 350q0-102-40-194t-106-160-160-106-194-40-194 40-160 106-106 160-40 194q0 124 56 231t155 177 218 87v-145q-124-25-205-124t-81-226q0-73 28-139t77-114 113-76 139-28 139 28 114 76 76 114 28 139q0 128-81 226t-205 124v145q120-17 218-87t155-177 56-231z" horiz-adv-x="1000" />
-<glyph glyph-name="fork" unicode="" d="m161 29q0 22-16 38t-38 15-38-15-15-38 15-38 38-16 38 16 16 38z m0 642q0 23-16 38t-38 16-38-16-15-38 15-38 38-15 38 15 16 38z m357-71q0 22-16 38t-38 16-38-16-15-38 15-38 38-16 38 16 16 38z m53 0q0-29-14-54t-39-39q-1-160-126-231-38-21-114-45-71-22-94-39t-23-56v-15q24-14 39-39t14-53q0-45-31-76t-76-32-76 32-31 76q0 29 15 53t39 39v458q-25 14-39 39t-15 53q0 45 31 76t76 32 76-32 31-76q0-29-14-53t-39-39v-278q30 15 86 32 30 10 49 17t39 17 33 22 22 29 16 38 5 51q-25 14-39 39t-15 54q0 45 31 76t76 31 76-31 31-76z" horiz-adv-x="571.4" />
-<glyph glyph-name="sitemap" unicode="" d="m1000 154v-179q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q23 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q22 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107q0 29 21 51t51 21h285v107h-53q-23 0-38 15t-16 38v179q0 22 16 38t38 16h178q23 0 38-16t16-38v-179q0-22-16-38t-38-15h-53v-107h285q29 0 51-21t21-51v-107h53q23 0 38-15t16-38z" horiz-adv-x="1000" />
-<glyph glyph-name="stethoscope" unicode="" d="m714 457q0 15-10 25t-25 11-26-11-10-25 10-25 26-11 25 11 10 25z m72 0q0-34-20-62t-52-39v-220q0-89-73-152t-177-63-176 63-74 152v73q-91 12-153 72t-61 140v286q0 15 11 25t25 11q3 0 9-1 9 16 26 27t36 10q30 0 51-21t21-51-21-50-51-21q-18 0-36 10v-225q0-59 53-101t126-41 126 41 53 101v225q-18-10-36-10-30 0-51 21t-21 50 21 51 51 21q19 0 36-10t26-27q6 1 9 1 15 0 25-11t11-25v-286q0-80-61-140t-153-72v-73q0-59 52-101t126-42 126 42 53 101v220q-32 12-52 39t-20 62q0 45 32 76t76 31 75-31 32-76z" horiz-adv-x="785.7" />
-<glyph glyph-name="shield" unicode="" d="m607 314v357h-250v-634q67 35 119 76 131 103 131 201z m107 429v-429q0-48-18-95t-47-84-66-71-70-57-68-43-50-28-23-11q-7-4-15-4t-14 4q-9 4-24 11t-50 28-68 43-70 57-66 71-46 84-19 95v429q0 14 11 25t25 11h643q14 0 25-11t10-25z" horiz-adv-x="714.3" />
-<glyph glyph-name="heart-1" unicode="" d="m790 644q70-64 70-156t-70-158l-360-330-360 330q-70 66-70 158t70 156q62 58 151 58t153-58l56-52 58 52q62 58 150 58t152-58z" horiz-adv-x="860" />
-<glyph glyph-name="search-1" unicode="" d="m772 78q30-34 6-62l-46-46q-36-32-68 0l-190 190q-74-42-156-42-128 0-223 95t-95 223 90 219 218 91 224-95 96-223q0-88-46-162z m-678 358q0-88 68-156t156-68 151 63 63 153q0 88-68 155t-156 67-151-63-63-151z" horiz-adv-x="789" />
-<glyph glyph-name="menu-1" unicode="" d="m650 400q22 0 36-15t14-35-15-35-35-15l-600 0q-20 0-35 15t-15 35 14 35 36 15l600 0z m-600 100q-20 0-35 15t-15 35 14 35 36 15l600 0q22 0 36-15t14-35-15-35-35-15l-600 0z m600-300q22 0 36-15t14-35-15-35-35-15l-600 0q-20 0-35 15t-15 35 14 35 36 15l600 0z" horiz-adv-x="700" />
-<glyph glyph-name="back" unicode="" d="m750 540q40 0 70-29t30-71l0-290q0-40-30-70t-70-30l-690 0 0 140 650 0 0 210-500 0 0-110-210 180 210 180 0-110 540 0z" horiz-adv-x="850" />
-<glyph glyph-name="home-1" unicode="" d="m888 336q16-16 11-27t-27-11l-84 0 0-310q0-14-1-21t-8-13-23-6l-204 0 0 310-204 0 0-310-194 0q-28 0-35 10t-7 30l0 310-84 0q-22 0-27 11t11 27l400 402q16 16 38 16t38-16z" horiz-adv-x="900" />
-<glyph glyph-name="pencil-1" unicode="" d="m718 680q32-32 47-64t15-48l0-16-252-252-290-288-238-52 50 240 290 288 252 252q54 12 126-60z m-494-640l24 24q-2 44-52 94-22 22-45 35t-35 13l-14 2-22-24-18-80q28-16 46-34 24-24 36-48z" horiz-adv-x="780" />
-<glyph glyph-name="location-1" unicode="" d="m250 750q104 0 177-73t73-177q0-106-62-243t-126-223l-62-84q-10 12-27 35t-60 89-76 130-60 147-27 149q0 104 73 177t177 73z m0-388q56 0 96 40t40 96-40 95-96 39-95-39-39-95 39-96 95-40z" horiz-adv-x="500" />
-<glyph glyph-name="logout-1" unicode="" d="m502 0l0 100 98 0 0-100q0-40-29-70t-71-30l-400 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l400 0q42 0 71-29t29-71l0-150-98 0 0 150-402 0 0-700 402 0z m398 326l-198-196 0 120-450 0 0 150 450 0 0 120z" horiz-adv-x="900" />
-<glyph glyph-name="login-1" unicode="" d="m800 800q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-450 0q-40 0-69 30t-29 70l0 100 98 0 0-100 450 0 0 700-450 0 0-150-98 0 0 150q0 42 29 71t69 29l450 0z m-350-670l0 120-450 0 0 150 450 0 0 120 200-194z" horiz-adv-x="900" />
-<glyph glyph-name="publish" unicode="" d="m900 800q42 0 71-30t29-70l0-600q0-42-29-71t-71-29l-198 0 0 98 200 0 0 462-802 0 0-462 200 0 0-98-200 0q-40 0-70 29t-30 71l0 600q0 40 30 70t70 30l800 0z m-770-168q38 0 38 38 0 16-11 26t-27 10-27-11-11-25q0-16 11-27t27-11z m100 0q38 0 38 38 0 16-11 26t-27 10-27-11-11-25q0-16 11-27t27-11z m672 6l0 62-602 0 0-62 602 0z m-404-198l242-240-150 0 0-300-184 0 0 300-150 0z" horiz-adv-x="1000" />
-<glyph glyph-name="window" unicode="" d="m900 750q42 0 71-30t29-70l0-600q0-42-29-71t-71-29l-800 0q-40 0-70 29t-30 71l0 600q0 40 30 70t70 30l800 0z m-670-94q-16 0-27-11t-11-25q0-16 11-27t27-11q38 0 38 38 0 16-11 26t-27 10z m-138-36q0-16 11-27t27-11q38 0 38 38 0 16-11 26t-27 10-27-11-11-25z m810-570l0 460-802 0 0-460 802 0z m0 540l0 60-602 0 0-60 602 0z" horiz-adv-x="1000" />
-<glyph glyph-name="chart-pie" unicode="" d="m368 770l0-368-368 0q18 146 121 249t247 119z m106 0q156-20 261-139t105-279q0-174-123-298t-299-124q-160 0-278 105t-140 263l424 0q20 0 35 14t15 36l0 422z" horiz-adv-x="840" />
-<glyph glyph-name="chart-line" unicode="" d="m34 284q-42 10-32 56 10 42 54 32l98-24-52-80z m890-12q14 12 33 11t31-15q32-32-2-64l-252-226q-12-12-30-12-14 0-28 10l-286 220-54 14 50 80 36-8q12-4 16-8l264-204z m-490 220l-350-550q-12-22-38-22-12 0-24 8-16 10-20 29t6 33l374 588q8 16 28 20 18 6 36-6l246-156 226 326q10 16 28 19t34-9q38-24 12-62l-252-362q-24-36-62-12z" horiz-adv-x="1003" />
-<glyph glyph-name="chart-area" unicode="" d="m964 732q16 22 16-4l0-768-964 0q-12 0-15 7t5 17l230 288q20 22 40 2l74-66q10-8 21-7t17 11l158 238q16 26 38 4l112-104q20-20 38 4z" horiz-adv-x="980" />
-<glyph glyph-name="chart-bar-1" unicode="" d="m750 800q22 0 36-15t14-35l0-850-200 0 0 850q0 50 40 50l110 0z m-300-300q22 0 36-15t14-35l0-550-200 0 0 550q0 50 40 50l110 0z m-300-300q22 0 36-15t14-35l0-250-200 0 0 250q0 50 40 50l110 0z" horiz-adv-x="800" />
-<glyph glyph-name="air" unicode="" d="m85 534q-16-14-36-12t-34 18q-14 14-12 36t18 36q48 40 79 60t89 40 129 4 159-66 155-53 100 16 89 67q38 30 70-6 32-40-6-72-122-110-234-110-100 0-222 70-68 38-119 52t-93 0-65-29-67-51z m736-110q38 32 70-6 32-40-6-72-40-34-65-53t-72-38-97-19q-96 0-222 70-68 38-119 52t-93 0-65-29-67-51q-14-14-35-12t-35 18q-32 40 6 72 38 34 60 50t69 38 88 23 105-15 134-56q68-38 119-52t93 0 65 29 67 51z m0-256q38 32 70-6 14-14 12-36t-18-36q-40-34-65-53t-72-38-97-19q-96 0-222 70-68 38-119 52t-93 1-66-29-66-52q-14-14-35-12t-35 18q-32 40 6 72 38 34 60 50t69 38 88 23 105-15 134-56q68-38 119-52t93 0 65 29 67 51z" horiz-adv-x="905" />
-<glyph glyph-name="database-1" unicode="" d="m686 208q14 20 14-2l0-100q0-74-104-135t-246-61q-140 0-245 61t-105 135l0 100q0 8 4 10t10-8q32-52 125-86t211-34 211 34 125 86z m2 254q8 16 12 0l0-116q0-68-102-114t-248-46q-144 0-247 46t-103 114l0 116q0 20 14 0 30-46 124-75t212-29 212 29 126 75z m-338 328q144 0 247-39t103-93l0-64q0-58-103-99t-247-41-247 41-103 99l0 64q0 54 103 93t247 39z" horiz-adv-x="700" />
-<glyph glyph-name="flow-cascade" unicode="" d="m520 120q50 0 85-35t35-85-35-85-85-35q-80 0-110 74l-164 0q-88 0-131 54t-43 118l0 464q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-114q0-78 78-78l164 0q30 72 110 72 50 0 85-35t35-85-35-85-85-35q-80 0-110 74l-164 0q-42 0-78 16l0-194q0-78 78-78l164 0q30 72 110 72z m0 300q-28 0-49-20t-21-50q0-28 21-48t49-20 49 20 21 48q0 30-21 50t-49 20z m-470 280q0-28 21-48t49-20 49 20 21 48q0 30-21 50t-49 20-49-20-21-50z m470-768q28 0 49 20t21 48q0 30-21 50t-49 20-49-20-21-50q0-28 21-48t49-20z" horiz-adv-x="640" />
-<glyph glyph-name="flow-tree" unicode="" d="m868 112q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 114q0 78-76 78l-100 0q-44 0-78 12l0-204q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 204q-30-12-76-12l-100 0q-34 0-53-19t-22-33-3-26l0-114q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 114q0 64 43 118t131 54l100 0q76 0 76 52l0 140q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-140q0-52 78-52l100 0q86 0 129-54t43-118l0-114z m-678-112q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m212 700q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m138-700q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m280-68q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="940" />
-<glyph glyph-name="flow-line" unicode="" d="m168 162q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-378z m-116 488q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="240" />
-<glyph glyph-name="flow-branch" unicode="" d="m640 650q0-80-74-110-6-58-28-101t-61-69-68-38-75-26q-42-14-63-22t-47-24-38-40-16-60q70-30 70-110 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-204q40 30 138 60 58 18 84 29t51 41 29 76q-70 32-70 108 0 50 35 85t85 35 85-35 35-85z m-588 0q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z m400 600q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="640" />
-<glyph glyph-name="flow-parallel-1" unicode="" d="m240 650q0-76-72-110l0-378q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85z m-50-600q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m-70 532q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z m448-420q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-378z m-116 488q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="640" />
-<glyph glyph-name="dot" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z" horiz-adv-x="220" />
-<glyph glyph-name="dot-3" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z m350 0q46 0 78-32t32-78q0-44-33-77t-77-33-77 33-33 77q0 46 32 78t78 32z m350 0q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z" horiz-adv-x="920" />
-<glyph glyph-name="cd" unicode="" d="m460 810q190 0 325-135t135-325-135-325-325-135-325 135-135 325 135 325 325 135z m0-610q62 0 106 44t44 106q0 64-43 107t-107 43q-62 0-106-44t-44-106 44-106 106-44z" horiz-adv-x="920" />
-<glyph glyph-name="back-in-time" unicode="" d="m532 760q170 0 289-120t119-290-119-290-289-120q-138 0-252 88l70 76q82-60 182-60 126 0 216 90t90 216q0 128-90 218t-216 90q-124 0-213-86t-93-210l142 0-184-206-184 206 124 0q4 166 123 282t285 116z m-36-190l70 0 0-204 130-130-50-50-150 150 0 234z" horiz-adv-x="940" />
-<glyph glyph-name="list" unicode="" d="m100 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m0 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m0 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m200-100q-20 0-35 15t-15 35 15 35 35 15l350 0q22 0 36-15t14-35-15-35-35-15l-350 0z m350-100q22 0 36-15t14-35-15-35-35-15l-350 0q-20 0-35 15t-15 35 15 35 35 15l350 0z m0-200q22 0 36-15t14-35-15-35-35-15l-350 0q-20 0-35 15t-15 35 15 35 35 15l350 0z" horiz-adv-x="700" />
-<glyph glyph-name="list-add" unicode="" d="m350 400q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z m0-200q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z m620 200q30 0 30-50t-30-50l-170 0 0-170q0-30-50-30t-50 30l0 170-164 0q-30 0-30 50t30 50l164 0 0 170q0 30 50 30t50-30l0-170 170 0z m-620 200q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z" horiz-adv-x="1000" />
-<glyph glyph-name="progress-0" unicode="" d="m1000 450l0-250q0-42-29-71t-71-29l-800 0q-40 0-70 29t-30 71l0 300q0 40 30 70t70 30l800 0q42 0 71-30t29-70l0-50z m-100-250l0 300-800 0 0-300 800 0z" horiz-adv-x="1000" />
-<glyph glyph-name="pencil-2" unicode="" d="m0-143l68 343 274-273z m137 392l422 422 259-260-421-422z m531 494q2 39 31 69t69 31 66-26l131-130q25-26 24-66t-30-69-69-30-66 24l-131 131q-27 27-25 66z" horiz-adv-x="989" />
-<glyph glyph-name="cog-2" unicode="" d="m0 272l0 156 150 16q14 45 38 88l-96 117 109 109 117-95q41 23 88 37l16 150 156 0 16-150q45-14 88-37l117 95 109-109-96-117q24-43 38-88l150-16 0-156-150-16q-14-47-38-88l96-117-109-109-117 96q-43-24-88-38l-16-150-156 0-16 150q-47 14-88 38l-117-96-109 109 96 117q-24 41-38 88z m355 78q0-60 42-102t103-42 103 42 42 102-42 103-103 42-103-42-42-103z" horiz-adv-x="1000" />
-<glyph glyph-name="cog-circled" unicode="" d="m0 350q0 207 147 354t353 146 354-146 146-354-146-354-354-146-353 146-147 354z m195-47l92-10q8-29 22-52l-59-73 68-68 73 59q23-14 52-22l10-92 94 0 10 92q29 8 52 22l73-59 68 68-59 73q14 23 22 52l92 10 0 94-92 10q-8 29-22 52l59 73-68 68-73-59q-23 14-52 22l-10 92-94 0-10-92q-29-8-52-22l-73 59-68-68 59-73q-14-23-22-52l-92-10 0-94z m217 47q0 37 26 63t62 25 63-25 25-63-25-62-63-26-62 26-26 62z" horiz-adv-x="1000" />
-<glyph glyph-name="cogs" unicode="" d="m0 245l0 97 94 8q8 30 23 55l-60 74 68 69 74-61q26 16 55 23l8 94 97 0 10-94q29-7 55-23l74 61 68-69-60-74q16-25 23-55l94-8 0-97-94-10q-7-29-23-55l60-72-68-70-74 60q-26-15-55-23l-10-94-97 0-8 94q-29 8-55 23l-74-60-68 70 60 72q-15 26-23 55z m221 49q0-37 26-64t64-26 63 26 26 64-26 63-63 26-64-26-26-63z m318 238l8 72 70-2q8 22 20 39l-37 57 54 45 49-49q20 10 41 14l14 66 72-8-2-68q22-8 39-22l57 39 45-54-49-49q10-20 12-43l68-14-8-70-68 0q-8-20-22-37l39-59-56-45-47 49q-22-8-43-12l-14-66-70 6 0 70q-20 8-37 20l-59-37-45 54 49 49q-8 20-12 41z m31-446l6 51 49 0q6 16 14 28l-26 43 37 33 36-37q13 7 29 9l10 49 48-6 0-48q16-6 28-16l41 27 31-41-35-35q6-14 10-29l47-12-6-51-49 0q-4-15-14-27l28-43-40-33-35 37q-13-8-29-10l-10-49-49 6 0 51q-13 4-27 14l-41-28-31 41 35 35q-6 14-8 30z m118 14q-4-21 8-36t32-18 34 10 17 33-10 36-31 18l-6 0q-17 0-31-13t-13-30z m17 451q-4-27 14-49t45-24 48 15 23 45-14 47-44 25l-7 0q-26 0-44-17t-21-42z" horiz-adv-x="1000" />
-<glyph glyph-name="calendar-1" unicode="" d="m0-150l0 649 893 0 0-649-893 0z m0 705l0 221 109 0 0-141 200 0 0 141 275 0 0-141 199 0 0 141 110 0 0-221-893 0z m168 139l0 156 82 0 0-156-82 0z m59-619q0-112 123-112 47 0 84 32 39 31 39 80 0 68-78 90 48 15 64 48 12 28-2 73-27 62-107 62-51 0-86-26t-37-77l72 0q0 45 49 46 43 0 45-52 0-49-84-47l0-57q48 0 68-8 23-11 23-46 0-57-54-61-43 0-47 55l-72 0z m281 146q49 14 88 47l0-297 70 0 0 371-64 0q-38-37-94-58l0-63z m135 473l0 156 82 0 0-156-82 0z" horiz-adv-x="893" />
-<glyph glyph-name="doc-new" unicode="" d="m0-150l0 818 188 182 519 0 0-348-86 0 0 260-369 0 0-156-166 0 0-668 418 0 0-88-504 0z m373 207l0 162 209 0 0 207 160 0 0-207 207 0 0-162-207 0 0-207-160 0 0 207-209 0z" horiz-adv-x="949" />
-</font>
-</defs>
-</svg>
\ No newline at end of file
diff --git a/ui/fontello/font/fontello.ttf b/ui/fontello/font/fontello.ttf
deleted file mode 100644
index c1167906ee073765a9d01aead457c4b25c530735..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 42532
zcmdqKe|%KcnLj?~-kE#v+?mYW`E_TQOoqv1G800WB$LTZOhODHh8RMO0ck)Qkp@IS
zq>9KYP%GA=r9fHBT1s7MsrBWrDrog%t?gQLsioF+TkLM#uC?86XkF@dt!pW{eBRHw
zGsy&@+RyjDuaZ0Wo_p@O&w0*sp7Z=V&$Td%#p1HuW)UsRFI!lj>1glsqU3G-E&jxH
zS8v$+@i&Go7S?UC2(_Qsv@wQq{I|aj2X)nkYp&a|XU`H`w^%HW4cA<K;|7##xK7|#
zxn|wpta|wQy~ivT5#^r=tzLQcsI6c6y2Y|%2kz%qqd>XMHXYaB!*ycybsIMy{!g4)
zcKjO8^sc-96IUnSwmxF9?8N)n1J_->c>}x4xyfSr{7+CRw*KntRv!OKID+eU0pE`{
zTz})n<%tzPw^;TZwOH&U8*W&+;osJZpRriJ{vhh#YGGm@+heg=6yX-(Ih5=)f7zRs
zMkb&Ii%mr7dHx$*b;+oubIfwGS{ypN#<EmgWqAnI2zTax^c?*~%rch172S<ktW3dg
zhb3mQTA~)qSZJ(rY{pn-?2@s|#ukp<GPZN<zOjR2hsM4!_RX=U#-17b>Da%Gy*c*V
zvHuzS(@Ei^dNOcw+R2KOl_#suo<%#BG0RwNEHPF;mK&QtHZ=CJu`Oe}#_k{c8lHb>
z?C{vrW5>sSKKAcpzaD#g?7gu+pR}EH^XI3ZOwjWo7Caq%KlnevcY?nQo(%pb_#eSv
z2Y(fOEBI#c7r{4zKMx)Yen0p^@Vmk1gU<!O9sEDRr-Fxr-wZw$e59nW1jhfve@yy+
zc<BFskATk3J|X%<r)9dO#-coxjJpJ3*34?ZR8<*IHfK9*!Aw-hbO=qEs7>@s@ni>!
zGSNFU*9grWvO2xdWNW1@S=Zm!*ASQEEj1CpDm}UF@!PDMpV`zkcVJ*{w52Q85)TWZ
zXbAuGWVW@Vot+rohC0F)i+FY%@4rfPSlpJprQ4!DJ*RD^&moF{p*fqJ$>LH4^XqLa
zlk;WMtST-`)0y6s$#<}f9`H-Div<Jb{cP@H)*%M{E*4J<xE*EeT~%4DsQj?IV_D;l
zdG@kCt7NxDt6OUI@~U>mZ-u-OHR^Z1e#1*+$JR@?JooOi+lGpdsq9mYi_$l{)Vx(r
zmPfsTuv6<y`q8L2?$D%gq-N-*qZ>CK{Vg3p9>UqPXV-`a#WIUxsRTZ!IV2JIWPn|Y
zvJS?8!g?lE5s22P5cJDIUD$rl@qN}^KiSFRb*=vIj@~-BcXg-GzHZl{of}%jOTHUm
zw_meY*!S|i(oSQ4MQz}_mvpSz^VMDJTdiHI_AR(|^t%CK7M8Q$5f=cDilqYY4VK9?
zj=pTt#iBxv`DG@>Q!LG9vurNkl+lAsKV92eC)9K#g)98VDZR~ad@>NNtvFfH8(_Qr
z!f>=!NOmTq2IF6%0pnBvg@N9Rv5H!T%TMB!^iCXF*>SwngLjtMtrmJ`MkhMS<|>OP
z>(iZ`%Q`#R&U9zjQv4q8T-rqi{Aj}dgm@)jPgv%mor`NUE8)x^aAClcDH*L1*dPL3
za)bPuGPykdr)wW*07R0+*e9#vl8pc9GT+>RT6!>_%jn|##IL_}`MvGEj)<<iPP=r$
zzMy6_-*<aT3fi0)XqR6zONTbhHw&+qoh<R2FI~Q$9tts=$o4(kaZ#^>Kdwg{3#x1S
zI@FdjCwm4@Qo#cATCx@@5^AiVg(pA@4sc(mC19CtDeF`lqCU-G6)e_SGlP}Q^gp^d
zn^h8pxR~C-@<i2DIM4)4(cOG=HWzI2WOGfx=ydd74xn!**t>?4y}Lw@8DAE*`(s`~
zkA!-h($<(hKBh<6R`j8BW+E0~HwSa>E8HPgHLFA3ed0t+Ut-+s_6wnK$f|k9WR;-}
z6gs7`x=zL#^jOGsg_hHIchK-o%+G|S5o43CDYs*6s<ZVhpTi*;ce4~7B>!|K(?QQ%
z%z|{t<x8fb@M(4BN>y!Aqxf}1)r`Y|Uq?ob;unQY>d#81-<vMFTj40y!s*oO&zDX*
zD`<a>I3^BR>{#vnmJs1Nr2D;PDkD4xJe6{#r_z)6u;!**P!FV7(9ZHfS-A6%@q%#w
zq4DifsxsBZuHR~WfoYvvJNJoWhsKw)iw}+e4O_cOh@~1I=QjlvH~C!qlek1UiZ^uv
zC+!ixNv|}=FqTBK7_xj54m8j59+O7%sU$cQ3ljNyvdL6cJe$k`g@r<0_@cx3Cr8wO
z+U;kcG=J2=>K#W%<{rjK;y-~Y%HirP%O#$aR6!_~%pGAPE{E}|>USU1T_^DDK_YP!
zJY{U2JEAHMyHqACc#Q49(^f&T7D`5Fe1W?^iED-LTT*6U>Rd97uU~hA9A$K+8H7hO
zEfC~IfLfA0ejUAt3MN}IyKFL+LYLV}!Gw422;f)LBCrMU1xXMj>TE=(`Qti`DTKbJ
z1+UFzx3ZDBY{wMHjm;+HtnU0hB|1HO_Ac=uvB^?y$zn_z5+NEB0M)^CS|Ng!nVfkg
z(*(oZ@?~?G=?uNYgz^xh@PmrMoRbY*X%_MdK5wX@Gs8ArG5%kRHXo?(3SCQ=>qA}j
zq5lod3H>3o=+erxkePm|C&a>9;e631wwXO!Ssz@(hASI{x+>$r^&vd_ztg7uAw)cZ
z<C}Pb8!K+T<zk}M_Uz26h~FWCR#{=<6E<nO6MrLMId*aVq4yuHix_WJ)Yew8C|LEB
zi$6}ensO0*ogSeB+kJvR$B#zK`O6{B@_vk!^y4ziRhH{5pR(+>1Uvno+rH(-wV$|h
zQUBbwrkRO|&tbKLsHiW6$pP}wJ-7xr6()<>x6=F6S7PQgnTP`E`h4{XH`LyR>T}%T
zesQg!Yu;WorXLPQ8IHsNCr;VQiHl&=I52Uc$EMt2t0o^Tsf7khZj>~>e;v4TEU*sE
zM47afeu8W1^~R4%?g$CoiRpAOj{milm@@G&XbloB=JvT`<mq%>xo~n^q>nf*d@%x^
z3pDtFaVgx-7iiX8yi6Kq7r?XdGM1{7d;o-CFgl(u!Sp%zfX0%V|KBh<1xe6~&c2K_
zx)U0abfnzQNbYbmA7o1xtH+8)LU7)fqGL6f#B^rU#e?o2HZW(v`RCJR0Viwtp=&w|
zZF9t&TUjW^PCDH$8YiuaLu2wCcgSAVs<7aTZfC$&V+4anjg9kM^PP4}EqGP6N9HnO
zzMi>RP|gQ^1qiCZjm`^!aLdELTXXH(56}4Le>Mn~pn85-;$N@&=})V^{=4h1XNL=5
zMJ@mo(F@70)_Sa?9!tj325EdT<}~Q#<4YFJo7-_wbIdObpclqxaXyO`faNoJDd2}x
z%Lg3l0xb(2j8^|l)EXpl7m^_6re8|44neok6i%jc&Dj*Bcr1pQ)I^o}OIzp9>SUK#
zYr86w)uOPSl#K2{W_4;YXc<x>-8<MbZH6XSwIpMji;cguXwxG6V|Q^~;>las+>Z48
zi<Zt3tE(%!Ypj>dE8HIuyX)#+)WfVSpbZ#Tb`1=4K`Uv=CiPGxEa+NT6`+^2bVY>S
zZPef*<M&Ip3AcP}vvkKl&rGv!an67iC<}#H;dWu&r1d6KSa0fLA7Q-#RzN@`9oI9+
z1hlr&@SbPA*|b0OzrnfCjQO%Nrva-@`U1<%CiZqEDhL07g(-Ng@nB^`LnRwtA553X
zZW`AK!hVJ1a~5}r7$Y&8#`;~NEIoSZ9m`vU_GLSE-8s_QI&vplSt5}M-)~ud$KE?e
z+O64DTlQ~R-C+EEsR&l0$0?9><Iv-#PjlNP0eT$KKpH*QQ_wA=41+%P#X{TA<{@G6
z#>IOU?i>^r?Re<U#nypc?8=h2vk`M#{y4Pr(9R)#FkYSVe#~Q-JPrx>;_cEAkCo43
zQ|C!$O}v}P7Z16Om{zA5zjeF&@q37^$Fbin=(=Xa+-|1RrKWwIU9aJnnl)u4Utz6N
zo{IQPJXRJYAxIVwl9E9TDOZ{yQV<&yK4~;?d567Poy~3;nQJtVG{j!*S}uG)TU~N<
z$;6!zwwzmT&i<XaORVO4RS>ugc->BpOHUSjO2c2?uUm6k(kca;o0^+E%n7kWHQqCJ
z81LTv64PIL$@uL{kKA+<`}lLrX}pW#_n7+J&ZELH=07GJ{imCLYJ7|L>j`lQ`sIh_
zr94$R%_ouU$4tRqo)ql$4ACpeAtVh_=h!y(F;%_D5pfuQ-URvmB2_)+h_K&`%pE^T
zy%d6TN4BC0zk@0c2h~01VDFEQb)lDYgb@937}f~e0fWPmCSK^bb6yDD-_-mwInFXf
zE{vu`5*M(lc!;714zLpspmD02iht~8-Sztlrb^5$%={%p;o*Emt&lEfD@nY`53>!Y
z$s9n3@3?ek`~h;Yo4Nh&OV+b!Z7bxZmO5s<wcZ>9tewJE@WQyI31iTZD)+lNJttFS
zdEg6!BxC)~v20R~gAGPm4x$Rgdz)XDtg%EYna$_wm^Fwc<BHqjdtcofzwL_oZ!+tf
z#{bbAJ)@egbvIz0_!q~3@xJk|#`^;f#{g4Uk|_fY)_TXB*14<q?p-~%b<Q0(?AXCB
zMb*(uoG!tuHgs#peZEic-~VY}(tq22;l6EtZvQ*`r05nEOAd3uE?^Fj9S3SZv0x}7
z02=3UiIfsjLbAAmI8RC&Zb9<p(Br1)9-cG5#TdAF%j2DF$QIWm<FUGpL#&oPQI$@l
zS;BbE<<oT6e@F?p?LVqIXEnyzCHVz&hV$%j=Qp=pY&>Su;x@K$=AxTs8kf-{Rjk{k
z$KAh{Q2rnB#&jo|$YE~58p(C!A&h?zR5;smg=K|hz2z25pwoNvC)cgIYWVU?FPaex
z2i%IF%$k`ehRG+i?uS^93z81OTTD^W6zpt8Nj{Y~HBr)5p*ibJp43&7=x>2D(5gfN
zjcFMnG13&cVL&K(-5+<`Tu$3=$>mt0Y6??b&TXm!-G(287aE4rpG`mObl!QdJMA8F
zyT7FR9naMp-}ubEU?@YHhHK}y>+6T=@2r2;$*xnCBlIW^(9}5b{t8X2wq0od^Sf=T
zX4_>`T@}Sj>P@JPYJ+prm)AFZ+u>Kg<aS@K)w%b7#_4#jfeoo&((u+g?Mrt$o!@Tw
zOnN9?|7~X%Jp@o$O%YCY*>0P|B~jaCAwK)8c&~UV?7|mWmV(9yI%ZUctYmxRs=W-^
zY&zJtjM)aGRYAE2xdU|tm0!=~Q)vN105c)#!q8MuqO$oEC#fQeVd&zEpIGPKsHHVs
zbTT2PD=wE+_h~n}XK6!jW3&546IUDEX-`m8t<j*}<r0Hl_AbZnjp@e5hR@b-G_iO?
zec|fiAe!{*q9(ZkuvN9{p0s--p@;pwuH9(jWuqG{x?FaM-Bwi$dW>BhlQ-6XwxO{R
zP2Ncu+nC;AUU9zkzWBGoi{Q2y@TID-i}NM0!BkaqRe<=A#}3^d7AMRwJ4|{+P`Nx`
zWq=P-Fe(_}5xvmLcavVu=HUM=ahoj2He;Ky4UgKYtb&bw!Q0^5!A+63*aTK%{L!tm
z6DRx{c#~qh&k{3iOk`cg^Qb$+rdip5+kL}zL_NP+WpfqQC$<VaG|G8sZIw>CFITsU
zVtEr8l1!@vsM-T<NCcUawl$#*t@LZguej-<s*3**%vEl^S9k3uC4INsKRS=!pyLVM
zWnLKH)rFhZ^76H)hB-ZH(<OM?Kvyl9+IU!*u<2s4#B?hdc7e(X6R&uV$=6mQp9pQL
zoGVPY=4R^sX<3~&Y2ckAt_&@K%^^yaaB_qnRdxpF=INVLWCwG7KM1*ZhUH@z>&si6
ze5`?>iS--^lfl%vb<wncnDzv+L+U=6xGXn=$P$@Jz)RC&D%&BqG3X6g5s1Tz-l7Pw
z3kDtc%;`33$Ao;KYA$>5juWa|mh~l1b#_e?%4ECEDaArw$iLo1O=thAwk5hOyBsGR
ztaeX9k{Dr5$t}8l!h}3=v%@C4>?%`FI7EAB?WGI8T_(Z4VQ<a#O)pQk)HWnyx^r#F
zE}|W{s;KX#43OY<lg1f-E(4gxJq%3TW%bMcAl8d~E|rAYy(z%2&J_rR#-k3$QBPgh
z`kvNsNc^~@Sj947T3dKzfS_hgrINwhM<EQn=<x-Y>hWB*Cs(y{tHf-s7w1-lmjE<&
z*Hj?^GzIw%a4v<Pq8e-4G%nwn=H)zb8qhH<yum!VEJ(dh#Z$6QJV*FO-|E%(tYPd2
zO+E8hub$u2^aHkf-zs6vrSouxQWjjZcg>nhW#?!EP8vp?a^GrU-JW#}r!Ewh;wXug
zRe1^)4UOg(On7lQmCL5`z)lB)r9J2m%6vs7bOj+1=x|${BRL5#_cW&CpJnW`@pPtJ
z=w05+*qv4B#vT+`-N|}Z^z1H0)zghVta7ehvCpkURiQg$wa<;AQf#i>if7obr=p6}
zvb6!8l}gK8z?x6`O8hw>OV;Fp^MMpJQx$=!xsuMRCm1(aS92vv1E!=$2Il}V4B=%}
z89!-*917DOO?c%9bl$^u-L;m@vD=nd*-9#L98vt*TH|>tQ57L%<qv>0I22V7t&mhN
z)63NpPUi_V0yZM8lYZs0pC~IkVUOr1<h3>!Z3WRLD57x~%!K!cHGsE~y-azk9Hyiq
zZ!0h_GX3}<A9B->m@JrfCYhE8GCgrHa8tkgh)dtUl{2fYDDev&#zOjavqy`(>yMzb
z{{b&>1A`>@HP%%4o#*<a@XlPymrW5Llchk=ujf%BG98poVlrk5EWN-PnASR3<p-wP
zWce0Zw%MKXH40?ZNBjXb<~#F%H*SXt{ir>jj4xb6ED8tae4R1LDoIx5tW9B(pq)8Y
zRps$AzgATxdOd!~dnTVH`Q3>XJPlZDE2n9ag>){g#zo%gD=<~qJ;`cY3b)VnoUunY
zzH~!T-TDVrhEIe!<+bn(sFF>&Rk2B`Y6r-oqu}U*w`;t264ZZWOJ&h!6J_H8Nr7%e
zb5&>uTna4Y%2T>aA{vC03|SL1BJY<mTtJdY0w<*RM@>C_m-mPEL^3HK_dfXcgY3Ud
zm9K4f${6(Ox|cnkn!V{k@|=@h>j}|Ypow~{Fmo-}ke%YH{?7JX<IE}$iAZ(|%sdk7
ziWY2A(Eif34?Y6O@G!f=PuG-6rmC<&V-esDar*|QPGP+SBgBY9ro@3oRV6{=hQsd3
z(_N};mda|c;ZziXy(%b*ao6c`tL+KN%6_LRxdPkf%h@9-dmSv1bxP_{;QwjkyVN9`
zL&po88>50}{P#}3s``bMb8L*+7UGTLzfX5}r3D{{<l}(|i~2vV0&QI0TLXP>$l|kv
zEmfeG%JP8UEfc-a95*$*R6)ZF!plS=jgLB=YOeH%O`0AJj(fSmj=ihr+<mXv<ZntZ
zjiJO?C~VWRq490}uDAt1x|V!RlfNmSd0c3Z22Y-OfMBp;>`Y(Hbm&#pm|^V}cc-&C
zTVIo?s*D9?8xb!glmal|L=d#NYnPEo6%6E>+^mVoO~E|GFp|bRm7pT#DO`xA8JAlN
zjep``{Mwz<3C3jQyl;HN`0_Wtaoyu501%7nLh|)!a7@?&>*7)l`28^*I%LlMYfX>o
zPX}-Q2HX0L7al)(5>lh_<=uMD7!bCP(ZzoBh3K#ppG}~{g+zya-L2Vl(nK!N;YUC&
zoDpR1hp*d|Ic$^XB%n2&d;KAU0WxHFamu+FwDjfTS!pSF^M{TY`xWsnPQ^<m3A=>G
z`CK<~An~~#bTe*a@{qa}w1F>TPI1eDNmoK!ner>lf+v9J`blbfUdY0`rTkhh^8&l$
zNBCfHDw?1fqFZ`LjitrXOElBno~=tn{7y*4z%d*=9z7^deH;8##QiXLxrhl2lMm=G
zUW-kD?)@?)IR(7f^_YY}<x~VtqS!1KdgU_ehVc)jJuqH{i*}XC3edveC5kxxyDDms
z4yGPlN=r*&d0lV$8_R8^2XDP~)Aj3DeEiCRyh&5ggFgyQ0VgCAL2#`i0X3O|_(~>a
zEL+6B$P-F_^fXQ}wNOuz1Cp%6u;OAqDG2)j?#5@cR5m5z1iXM+uqCTVy7>?SWRG|&
zDq}+)yTX{5DDRKoy8McaBD+LMu;tQ<ja5uf`pXnW@;J+66|9TN(~bX*)>qWLZkHLv
z1o$`Qp8kbQvd@gTV;WoT>Z~nSgpWY8^IaZmd6~w9fbK1;+-sGXAi07qVJxGp{^I_g
z^x}xFIKx=1yHi&h|6Mj8)~){zW~_ce7s;#YRE*C@-8Q9qc0<Q>*`;yQqUmFv<eit3
z-!7Ff$AkQKA7zdQntV+@puD*W^c}=Gw6Z{xjF^V1RGPuKC7S18yG_j>g5b8)vf*AU
zkPFAK(7WWy)Hg6Dh0Dt?z8oD9;3F3EnU8?6ciW8J%<XX5Z7$}w8vo5c+1B<)hs)`N
zKbAEZua+rRr_<&5W1H!}ETvP9huPJC6&~^d^gG`n$W8vJFr5Jf%~dIQ%Lx}QNNH6m
zjsRQ+<qyHagI}p_6*0naYg>i(nO{q;U6(vC<01h=%|uaZtNm(n&2=A+f$eQ=ORbQ|
z1j%X@m$tRtdtX}{q*syIBzXy47S^rF@y}bjhzGT{WD0#J9`q4tfcL$b;+F&niE#He
zdGb}b#$1GY`60bM_;j{^X0W=B)mD|ydL{dXuDKPS>2dEz>fguh&fY7#G_}om`M^Ha
zH!I_T3%9r)Pxh-8D>C|3KeP6)>sNK4vN<2j+e~kd|HFDBY#)Dd?Y!5Gw`O&8EbZv{
z@E)8#ymsxp6Z5F@(hk7QWlZRUDrC&nkTEZhO~{ytqRHgQ_yJ3ltOub5LN@^S0`D?|
zgPI}Q!LElR?6Y8mpf=1t2oX?<@`XZD*@-!FZGx6E`2K>_7?cUph$fsCETYJ(Rfn%e
zvbhJ#WO>1~uwAxlTNI~O9=uG_q#oUBQ)*PVvI@p#)wWu31*^@v%7ReXu85v3WDbbv
zgEqI^>$h6lT=rEEy$ddn&2(3b2Ff#%O9~7!TYH((AJJ6#8oRUICUr(_F3Fj3N6Ot0
z*?HY*;n*zMDf<V_s%}N$Rc&)4sJehxG-a0?;On~-`18Vtb*trR%m0w<^5zR)zw;AK
z(*l}9;=aD3&~BqhGUz$ba;OM?oE!yGl;D__mJi|>_KzZpNs#$a6hk1TVIv&F5Q`z>
z6N9%MPeHlDu%Ste5?aIf-~vrT2oL6iXxyAf7$?LQOg@Wsi=MsUqZr!KXW6?2zu}|g
z4nU9`cMIV6XNqmH<n&FqTFbf|lC3kKOR}|WwWOB$f?d`!Y0zp*C}r{$HU$-B2UT=-
ztCG~|3rVs_6<L{2@3NKIF1Lm}N|}V3Y~?~pjR@V$7N~GI9dexre`AFzFI*_A6=GIn
z)>_5mi3F{}Tp?mdaiMmt!fRVUP}!+ECu<j}=vNhp^qUSRh_D2Qw%XbsT?1fTzF>K^
z<g|LatQm*YUS6h1SAdwT*7<ImO{sH+bci$ZxiwX#J<Mx58qJ!~Kv}uZDJaH|2keU5
zbul7HYs#w`b7WbKAmG}q*az%(t&HwO?O8-K)dX3JZk1_vp$YfQr&4swndNs}ZaW@Q
zCLcnh6Avj|m)RuV&vi^c*L|l?^MYid%j9{?Bj~f*4Cl$_K}*#p7a*GkXoaS6fW{o!
z=LtXb0B>AlYmDuIR=o{@j$8Ca>|SU2?U#}FCDt>|ZvWakp>}?yTdhE7l{e=1pEkDp
z{j>dTI@^+8^ly6g{1LYI)jfh=lf3fC)^=gqEWZj10_g__#f5-YhJV8iy(@^hHXXWG
z6QW()5dCwR<wi?YXKeYx`Q07utu64p)x=}bNSMOcG?!CVB*Y535i5x0k^WL8zYr4m
zb@7+1r!ay*iZjg-#d3NMF@*dc1=EtLf@0E&#!WI(@&K9&JYk*%DZ+5x!GkXzKKx?w
z$i95!$ce*;*&_!Jo;Y&ks8fO<3-co#zs!qH96abX<yjJHU$2XtIYn-_-fVTEI(s6Q
zsDia~UPbL?2M-=h96o$Fad7<T!P9g|9A*s%d1D8`>{KI(dj}7$Eh(xSZ>FY%A6C@n
z5^z9N=L$cySPM+q%*3+~xSdC`SvEC2=#~p{mYz!L|D??sv~kY$N5Y5bJ#*^yNj-=?
z@=<y#w68r#a{koAU+U1L{oD^56xnrVR!<LUWP>V(I1wx5!^U-D3LPbvJ}Zs5q~K@n
z_1VfbxUr$TA1J!lZ!Ow-5a}$$VMgaQjsnW#3-4Ye4DR~sE;!=vURYu!7ZDrsIBW+R
zBEP)cb`T3XRV(+0!i@-xpaYJKWK|q2+F$K=32Bkyn}s(Tj4S(>c5E2TjK9XdK7Scp
z{7iVG`-b};`Raxqp=;xPk0037$(AqeGnQpCgEw5uzMdJ}GkE2d!}s5S+nWwNxqowq
z)VGe?4hROCPi1(2o#hhXWp;gSiu)A^FDcUkK=HENVo{1ABIn>=jKPMXZYvS96M?ft
z)>|>oIKf5lM09p-`+1|Y?=hbO<tpY=TWP$vs?$C+YMX3$#Xh;A+cu(4Gs<-{{+;)U
z%paJOWE=QU_>Jc|<gDwX!pyt);b2bEBY9{E#&k_I<RU-egu8E&8o@;1T)IH0$0w!3
zl2bmS*qv*+=LVL>qZf|)=$EC#HXAI=M4HM`m9<_l{^R^G`Xqu820V}lS^juzZqXxo
zAs9CxD7*+9z;)S<DF1k27_W5{fODI$vhZI8W4v4=znBRipd>Au0|-l3fo4BAwT113
z4Yv&B9I?4oc2sr_UtoH(dtiRXKigrOhCdjh)!7%G<HfxgAz0=z80Y#Kh)bOuXA^%!
zkDT|A+klAjd;oI5UgY%nqUr*qOD+W9h*E%y4CN-I%7q{->~Rv>*?(b|m~=!n<9r}7
za=h_r0+ah`c$ZEiSf9NM+x`z+ILAK(|6{FSwC_l0V?QvTFT_ZsDkohcLYv=hI1wN3
zJdNm;)9S<IABZ|mt7x|Hes&G~D`j}UL!>w(ETxmf##Z`cc3wFW5{3;Y{2m2x%soqN
z4q{3OcE=>_WTEbW_grUl2zJ^~a2g5#0ZyGTVKIGR|0#Y;n1Og5^qpXb-<gMZkR*ec
zcGIULK5VQ2=*9|%V;Ms2Sq-akM4ZbUY`5_Vhl70uWy>56<7X&F1-?h@?DvFw#kss)
zw@mE{W;8T~j+icO-7kE8;t>b6&F;fXmN|rnjGq~=<MiXI%Kjd|D93r!g!g;G#$vlg
zc!|RE_5ztxREn?$%@KeO_`ZKu0Qx?aU29y8mN1rV2KB&!7f?kLkHABZ2`?W*(&q>n
zym3MXIb0v6?gP4?6<WWK+PcrNb{Qa@0hj^32`+E8Fg_!~<z@_7F&30dizb>2s9+<~
z&wnmSq)!=VB#Bw!l#fV4T(-UOb7*N1n~hoViv!M!G}B*fcQQ83oa@j+`S4-*`_Ud6
zjYx&|;p>NSqgAG2TLex1{0;Lqt_$r7!|W%MF>ggL9?(&O31OJS`o_<}1IjtP9Jueu
z60WEx<ppSYvnC$U?r(Uz&PjNQ8VJ<suo%+hN4t1Jvl0@h2|!1PU{9L>b0kdk1=DU~
zF9}5mDo;(H=5vrQkNcV@c9WQ4Ciw~X7475t^F<EF!w(~d4CFQLaE#M9j+6*7y)76>
zREQwTjNdgd!od>p<$Uih@pDhzzcTgRd+3FDZxIA~_YX?nP0*lD5d<ef;V$%UlIN7C
zuy%g%-Gyy4r4pQQx7i!#xEX2p2s-$$C2u}~kUF|&5Ok{g$Rq0B(k_?ux%gf)zHb86
z6Twh=1|r+!wz-$k9YXcPkC-iwJEH6>B`@BJg2Edq1Q0O%uJpyQ&0w&zoZe@mzwt0^
z^cZK->^Zk8auh^6>%sGuVuqbFyNFIt@Ht>kIglIX*&A=zhGaS^nQ)pFvrs;7DYqNp
z5TAf874{Hp=0=ut=OcFK6<Er}h=u&iv-E@waB-M^{&RD#f-PKN>MG}-&?er7g->AK
z5#9>0oqtX@bG-5R@DHEq=biqWIEqT3r5^m47Xqyu)x^P2NW;m;bXeF}fUPj5#eIcS
z`9gDHx8c;%3vi3`vycshB4Sk&;|zcR95KSFh2}c*W07J=qgWSx=i^u8(}Xw`pnX1I
zT;leC@kPBAhd^Kkeh<|~p_m>Dv;}Ih*)r-k?tv9x9n||7fxsblm${MV=0gG81|BFD
zWe4_u{THID@jeI101(}(DnGbVV2~iWi%Sv}hWU6~z_`cnXX{{Ts5RS8u#tJu+C%<!
z|IES-ww7MhsvoK;zN;DUqP~SE`)1NA)B{olgO!uyDK`6g-)eRJYsSqLi9`jv>uWmR
z)~d6$e%4C8^ZRQ9?SZeM*U?&bDA0~e-~u59yl+p4+lBu$-^cq_pfvL1L9ya7>m?)y
zT-E|{hiax5x`DRvqIMhtEF0n7Bsf?y!tUZIY@=H=07O?4YeEIz3z4eiYXU41Nx5=@
zQB8y%BJvPEyeUlbWr%D4xyIq3t%YEQ#HyQAbq$;5(sz~cEY{i!L2eCrHSSU+)TKw(
z_?xEit_gUed=A#c!<;{qggnBTNE^!Xl@r??rvmh&2^fqq1o9z_FSN#d*SNZ~6rvIL
zBoJ;6oeBH6>MjMT1V=@fyywD1s|TE&um-@gbDrIoKXRPGPRlbY_FYERYt7KTYjK)!
zOo8Ysw|d6Gt7cU7T4RjD{#fW*?9+6(rhs%Fn8LJ{7ehnM?TrYOD_LS7IZPS2AMxFv
z6Tn2Ac;^|wbY?0{AJ<d@hJ|?4jxk2is4+YGaz@pr0L9K4g;=%*%#|6Hg?UMeAKx8}
z-3KC>zDU%@o<A}sr?C%$)GP$?iA%5zIOy{%7~0UfroX{jvuH&}*QOa(kJN7yr1r<I
z`q=#&daa$C@4a&9-r2p{EaCgux;RT)upr&PX5*UvbZaw0*cMn_Qr{r!-gw_*_igOP
zmSL~2IHxF1rx9?~nRD1BkdcCONFCll*iXc?0NY(q=b9=hS<?|hMB8b^C9sz)UjA6S
z73nHG))|}TwyqvTSbP7v>ql!AAc~GQjMjO2+xHKB?7od%Yy`*dp-Ux~b%BjZ&8-Ch
zYpNG$v#{4P<n#7k)BzBQr8Cg`pM);>QNn;tmk4J7pkN)ukhLMQg79Ywd@ZUD-PpL<
zX_uGS>_^rHeXb*F+;P|~2mu4}mH}m*#8%GmyzX?q?kTqagwTckrPRK|g7$r6%b<X=
zg4#wt7Q6#2CFf;#L1kPE-Q%z$t{y=gV{q*eMOq@O!uRpoXpN5o#XP#7t(4ZuJk}Jv
z`1{!7)(NXr-ttN4tk(_B2%2&FlAJ;mCZIR1Wf{|0!IfAEE+1PemycTEcSH;l)&vh{
zbNsGLfbYO1U<a&F@_2`khsC(VHt_`87@z4^qT#e|8hkz{yu#JqhG;aLDoclI!iloV
znNBSlt_$tvN-)2@ySy$Ic6z62p@ervFxQndpDwRW_%%;B;!Gscxy~B%0ih?ma)y=+
zI|Xi$7=KYg6HaNZfFL|o)%B!5J31{|>-P(=q(F~mZx<?P@x-+F?CMN+pdPklGtYrH
zmY7yGyCdA$PzQ&)`2dX(?VbI;cv5(RTcDJuW>t9j9&fB^awQ!mwc855oE0&J)ra<`
zH&Fl%UslHuA!vckx@ehz-P_4{r^o3`RYVKN!*?jQjQ(IV;bsYCE!5Nk=;)rJ7NIl!
zeCFKgflSoZTxZH_f5rSEU!ZCIDKQEDm6OUiFvXhsk>^++-*5tR_=_-M0oN3BZ^qkF
z%w8SY`zoh-?A*puoDgKj@DT^4m4>!jW6AqK6zQkbvcryq<4BobXDjt9C^VB}SO_8r
ztu%m?{fp0YTGLK@QpQRl#4R%8wCUd|M5l(1UH~?Q!9G>ZodpFh5d3i1bmPmqzwC&b
zR1cTUxiD<M@~6C~-R{%gLw^~v^W!a~nRp{|<UxLz#e_Es_dzt9PT@Wuz}r=BU?Sx?
z?FJtkKS_4Q4`OV@>p0@{>1>tma~^RRZwVo)H$H}=5Sxm$$?-JzbE{ADm?Uni2NNZ~
zGw1POcON>WFg!U_LWk;r>~dkO2_9oVWErqijKAbJG9Q9Gl2;!RJ)#djDCvk?u)}bS
zaWjc^yu8foEffBuj4d!mWz{X_TnK_0l_z3MDL;z~o~s(rYc)CAOq-x=gFa`rW4n+g
z@QYsKRmE%fCOoXcJMV%<z<_$#W_9@4Du2LnSPfjz0BFjKX3T3C{2=6&c)VFjyeqb^
zrK*!e0T6`pQ({}$pcmkH5`af34Q4g6YOQ+M5%3%P{SGTkD+M`tDf;cEb*pISGowIF
zdprpYXMWG664B$<h5tNrisU8HOOeE|GoJmEmExAm@w|(k$6hR%I3`pPihCuogAQ<1
zW7A6gmZjqduepZ}cCrUI4eyGla&3!(y(2$fvW4wk-FHjWZQu0Z=s?w?w%RJsM!=_1
z`#iTuF^|CH{`<eTOzYGS{O#wq-%5M%7tW_W_&g?71rP<l7fG-rEn;a*l3%QNZ9B&=
zMuPZXx__bi#iTvw-Y>qdc)#d(LqZI5Um;>?k8nn2?tChqGPuMGC93hOk~*a~C=j=}
z(aCsg@`2Lw$r`=6#JHC`6NOXN*~yGQzkm_ijN1M&Rw2Ibs_dzW(;t7-+rOB2<k|6q
z*a2ECTt(YGiaHO)+|=+r7n!=U;+h75l;|S|7d53e!j?kHy#$Xo;={068m2HZHYW*N
zq*ii2+WJ0m>E)qz&8viR?RA5zHjge!itV|OQq>;3e5vte3Sg*huQ8V_h<zVhb+`j{
zgYBLfo99B*O+!9x?cP-DZEaAzv!7(Wlw=6`BUa(a<81!K{p@MJpP-}hgL`8tGXM-c
znD)RB@8#)1z<V*)STQKJ$v0s}AvvLFrk>aj!(Oe5+C{lsk_EBMS+X(KmO$Ku)$wWL
zqOyeR9hYmiE8+TEb}cSC%GmrTCN{yitUj1Hm^iTu=JSfJN)oKhX0*Co@9_F%^k5lU
zD9r6q%*|%Z&6Ja5Ug`jC_$P4(5@WtumJk+1X@!7!O3*T$oaAIfsDSa4f?E;#BDRHH
zt}1uyv@h0H%&Vwl_k>#kpsW0zd%~JK;ch9vhuamt7;e$3+}gBznBr;;&&D%XJj_iB
z4_|@O*?4I2;`7|-n1&me>OA)B3G2;(m*NP@EFRck5ToVux?K*t&B`nkd*-R~@V`K%
z2it*hRZS%;ce9ndgqQz(*F52eINi-gjJMF&==f2geSB-Lxb(~^q!C)k9z8L>RoISq
zk-YVNakrSZ%z+<WdFqm`jLPj}aIaFXD(>n)7-tn)2eFd<3FyK&C*gFZJ-JPYuHw=l
zw0EAaiQHJMlGE#M-L<uPqY7`zdc~HEw@#Z^(Nc>!yUL-J>B=W#*q9-N%C=tZfCJ=e
z_WE+<Ua~4zqty7L@nzb?(~4zpdDl&FkvP`N){qy@5qMZaenr{n^hF(?x_GHS>Su?p
zMmjI`>Z|c0_3A@9%VGx*;gOyF^Vvtm5%{p@V%#$U8h6YyvO>yG2q-*^)DT&s_(M7t
z20z8gAeo0k#&t(N{`nkj^aA0_qGf@nOusfNd9>i_a$8WgdK~ln-JzhZe05Os$Q9S>
zWu67RPK9jNNo)P{wX}I(iqd^Hf&!`hnxN*Dqt^yyR)!~Ra`4)y?A3zTluK!C{$!1c
z)xk0^Dma6yD<<yqcyu%0hZ%2D4hu#b#dPHxYNiJ@GnRz%eIV;p3V+pz3*iKhRf+UX
z$eBDx3gk|HP5Y~h`DcnwXt>T+8T(IwdXBP{ufL8Mde@od<{EfE|GD5*XYYx5ug@DF
z+r_KxBFhNl+j9JF>@0-yL*qYuuOW>U_tU`+#r=FFvzVdr6I++g_0z%8#~o+z^+C`k
zndhhQ69y-JZACk3VPDfZe!~B8!}W$oK|iKl>MT9a-%t6}rg_YLM+IA0p$+Uh2E!`>
zX{zgSsw1)V4aZ7hmAOtZ1|6C5s8MV~Gcq&|T6~>af7k4mZ2ipSbX{{`+b9oiLhzk{
zWO&HbhnbuU=5t6b$CEW7C=W|V68qB3TeRWEtTS<fpf~_bA#@!AEDI+J8Q`u%7C37<
z*YLZGL@gW<TPkykqi(pb%pPWov2+M^EotN4LY?;tzu&w}^`H5JU%hPbj^~a&cgNt5
zqqV#$(+el>{L~eeoZ3&ty2_dTq4dnk&gx>7PZv%uEByZA3tK#%TlcPdX2-z5j%R4D
zDv)m|CmeDD04KCt#l*@yiihu+)85jA(2saU$WL*Kh=+%8l@`Eof?!azRD!y&PSO@E
zIw_R65a*erSg=Au3iB48!Z^Ybgogsi#UW%m8~(f4>xXl_IU&=Z5qc82xRA`$80pp_
zWXTx77NO4J4xwvNH=7krM}>H8d{a0X5+d>FXk`OScc;^zFLw7*tp0u3tntfmB9To9
zHSCQU)I__`(q+cK8taknr!E%zwKpP!YIG@Hh-tbKGJ*?M<~r<)M@&=mtYoDQ$(7>G
zVaGy>8i4{=qs(Vs!Gpsu^XJ^8jB(t*Ls6~({Lwpp({;nKU%$Lw?E1}TE_A-}=qACe
zwDBnWdPDtH$*!bO+fj2>eS@(Gm#MB~vMYtF6I1R9+fh2tyh%S8O9^(lHR5m47tJya
z9x#eA=6tE8xqfDKe0tdLQ7p7iCKDB10#+4dag5V;act*AbS~}h^fT-;hq58-=o=yq
z1id;4F&|qz*}I^ce(R#!zIXI{w=J^v?|5d_nyc2ON7C!AG9v3VZCw+4v{<mFnAL@S
zVqH_yI!zoZ&~D*p9?I~*_}%97KQX>z7Q9}_XL-}QtA0Xlqfazv*I2)cK9$Dyb<v#7
zM@wV(FlTL$CQ|v7%nHA$;x&Ygf(?uukXU+(VaQ;{rmh`jd=I(IR-QPKc<ZfSigWP$
z%U`|~!q0o}y(eDb_nn5waat5a{Fa^e`B}*Shmh}dS+wl5KlBHGh|OO6__B+aUwyUl
z)xyc#WnWx&@wIE#7@JP|<MyqJvXwD9+T;F{frPU9-}Sh<R+84*6M=tUZI1`JU4Y`Q
zO!;FvbilBS!V+N@uvL3(sadRy#8R#eR;L+H5mJrOvq4;am#s9uoM3kvw-~pIi~U|?
z9!$E8n?3$;0J(ERW$dm%xb6Gw6SrUd`CYr1u?P^Iu-i|lNL%<wFrn<W*>)=l;M+D~
zmpA#rOzZ-J4Afkonr`v{l7WizI#|ehnV&3xZI#Tw9pV%dbTRWxPa%QOr4O8XKzQi4
z5A`7Z&8{8GFhP;@=Jpl2OQ)Fa3mX%Q#B>FACBFUOgPSOQPDzrS1ygL(#TZ2shon_v
zK9@P|3dwIYpCPX?>_43N-D+%S_!AErHuh)yRT}p+vpl;G84BBsea59d?33)b#wF|~
zQ)YWs>=gy@N<Y>rELEmXtZPy%spS}GFC_<Mgh=Pvp~v2P&p7nnd(66j@&0><_wOIR
zcmHBhFw2&`XDr*l_}+VQhmOEI)=|8mTeuCetI`pT+lMoL@^@il5E2+tAW)`)3CU>m
zwb9q;!1kEGbn!vhd}UK%qb)F$P9e|~XqtfStz*Ylz5Md35~ynF`sGP@kT+QdJObI1
zS;mhwE!#vejK3d^0)SC2#};wo1Wp`gZc?lV1)Nj{Dkt8@9x@d6e#z_htfFp<XV0A7
zBkmXLfL9%{y6V&Ua_o^Idl=L>FL<<I0q1SbaSd69q0Wc=FNlGJB#AvO2v0Y|(P@(7
z-$W^<HhbxLhNLR*8Fv_`B<6fBngsMh1jopO;Wa~@HQm<rnl|9nG{vc_YQO<w{yM9q
zN77=gfLt;BF_mp$-tlNM5=|!XC$Qdl-9Uf1cD2<Sj)eUFkXLsqZdt)5EPpGu@MwO`
z8>ivqom+;S)3nDKd4K$Nu76^u1cl{r7by-tFj#bk@_SO3{6Qw_Jw3*~#=Si~osW04
zwsbzO)+Upk+3e~y4X{`z>sUs(z4Mt)<6Eo`Kdr6VY^(7?&F#o=wQN~KGI4v-c#B>w
zoHc;lJ)kL)c95&qS4R03e2}nVvLi9Pz!hyd+LVgHB^y)F25U|<W)(u>K+>yduEXEb
zTD{*oEOz_j+L<@CxS!qTZSe|y$hQ%5Dbn&4s=8wNi0U`?XffEkH~7_K+yu*I!w19-
zqK;Tr>4=rnkgw9_tH!@d_RMD1X`CK0-Z9=8F;25iQ8ykxY8-m?RkrM?NzcV+eSqEV
zz@9YFL*eOiCI?e_%(fJ^E^R1nX7lFF`#SbK-jaKKR|k8k*dQA;9zV6^@D0|NU$)+G
z*c_X)uZS_>53mlmqy4tHnU9l5iLgSd77PIxD(ELDz=n)GLY;6%+BdYUpbqlNLTRPi
zq{8HMWG1Kq3Tj*SZ)mxv=boIVCE}T(d&1eiFnhbD<-WfDj*Kf(>&o=r7m0*ABN?s6
z6_00fdpEjV@kC9_hW#z~bbGTJHPSG&H{72I3#(f8x7^p8an(d!4ZQ~<eW9=#&QSGC
zPNFd;U))CV8F4xHdC7$1U>r~(^aDB*6fS7n(5rBXQ{>FRRt}bfKMWU9p-}qns_tIv
zV)oA9NL`OJJZL0qmdBz}9qSKe!^V?!AtyE{uz$_O+H*O>+hrZSvyZ()x3r<1y*=L>
z!GmFEPu+5QP>qE~YuP|J8^VKOMX=I?n>1I(@b=%i!rIABh0^pOt#zQyF<}!pDal>x
z(=~}{0kyEFUi7=fcv{SMh?w^fs)7Ezj^V&M1Kc-dTv+gyJ+xtQP0ivB4?R;nS+?x<
z+n>4p_GL<It+fkjkJBzi6E<b~20J3{Lw%V{-%xv`W3UgfY&*OS|4t}Q)m29uozloY
zL44@+*>8#eh`dftp5In|+Us$ZA(;Z!U)_}Ffw4@`2S%EQUM_w|_507<;Z@5V?0Kb5
z39nzjKBUDpuO_;@-tolf=wqzT_zAZw91xxpW9W5pX9CvLipaE3z>m;MvMczSD+4|X
zoS2x0xhB3&VZRr{-%nU*U2SV?t>LU`hmDC+65nZzu@L^UOP8{@TWiO=>5lMRZR?pg
zh3Ce*g~8!rWApH^8Mkk~zqm63Ya+edgCquA#+~}!Al~NzJk|IUh9}=z!wwnC@HZmH
zN?-RX-V+-hKDu-%a7g;#0WpTYrZDGu97VO6KLoN?Gu#{I00yBvp@8mSKG`tMY&qfX
zj^W`g!-8?9HiNT{ToSttQ83(*O&X`M$x=!jTf7aIl4d;+!;R<xt7h#OMp^8D5?2l&
z6q3tOuYj&jVJ)e!P;6~gR8#qW6~u3tkfh+HYHlK*FQ4CJO^Zvmra%>?!N%m~>j^oq
zb8OMb9V7U6gDZRgrkdC8IJ8;QyczGn=FxkFL6p3D=b=qrua@x+Z5+K<ce0W0Wy|gy
z8QIppdCP%~sHkZ}TMpoSlQ*Mzy+hkZ+KJ8xM~{e)2ybGSN|7(pdWn})h7+WlgKe)#
zP60&0|In#Z5A9mtvuMS(C!ak1q_FFmXSN9M2yeb)Jo3(PU;C5H^5kP%jvs&Ew}p0(
zqTTm-yIyn6Mk)%ll!oaUj+zXTrC<ags@(hFDeEoIJhR7&MxWfadZ1_ht_R<FM|gki
zfmdGH^2n3MlkNS(@32Mh5WHAN&K?zWXqR*(<e6~Wi5DXhqB@`Sf};e<hRSTRPX1hY
zdplT4es-hr_V7mQrqP|&(cWPz`zrI(<?=nk3S2I}VdqBU4Q=r)Y;g0awo2<AKFv<!
z(s+FH3jb=lT(;4aiP*csUhYr9=4J4IPzp1hP(k(^m&;fbipN82GXgq{_cT~>g{Z%n
zOAvs2vGz{Mna(npVR5W-mBkbG%+e=~GfSTop6eWcsjEw9?JWM9?-!oqZIq4^m-R;W
z9zSlpas0UO+;QU<ue`$I#|!m`g}cE&ChFsTSXfC`ZxUR6eMU!rqDHv8)2Qw0VkZ*F
z48+$u&I_M}WeNH0pDI&qW?rPqKq?<#ax-Nw7oIbm$Bv1yW0Z_s7~Hw^{)a}5W%n=L
zIcmOFyaVqg-@nI{9j8obNRL4oTnkCio5dK-Xp>u<K6dOiVck9<0><(S&RF8Lt?QqB
za{X(s?JUTom`jIX2Zc<^<0<%zg`j}$1Sh;J!uz8;caDxf-?wf}zh5}8e(BCogq_-P
zbjRwws|9Cx-My=aAeVDlak14Su7Xy26Z*M!L7MXW@MV?kgF+z_EExrp^-#GB(ST$Z
zgw>!B4NF!*q_=bnrnQjU4(W-)A8l+ljg4e##u`YE(JoWdq(~`K#Xsx%@+Mb2bfYZR
zMOM$za$4u=a9Wganief<S{@4FW-N4*ET+S&JImV3=By4kF!{!5v9hKc?5ft&lkin9
z^hcO&eoeSO9j=*gV-f$Nq}{1qa*5`&Cl~p{f;3-sR=Cskj--d*9%7$!x4O>%8o<!0
z<vg9M%hQ7Sn&p8&34m{Sl8$tJ;XMnheTfnXya{K0y7-bsNn5a|00O`x+9F<az4!}p
z0dOuIsrS$v;^A|D6~Y5NkVm}gMyK<}*|O&R95S-GwhYJ-dEi#;)Kl*&^C}nL<Z#?{
zv8=i7Qdy|%R(^9!S;+o5rzW$17*N8BS@&+ICUtCdI5vWhQ$rJVogv06&!(FbZ$Tfp
zPG|im*Z_Q3RobwZ59?R|?3NkPX{rtDSHMT33T7S@DSsZgxr>!UdTYv0En_~S25>=a
z;1Y>W!0gLm+dH@H+NxDCh-E8hu1+ithvU<=?8d86R$1B9TqvumKpFeO>gwUpG~CbK
zP_epjzki}^!*rCzE3-{2XR;gpy1-Qb3}aU$j-Bs9nEe1{Azt+PNJ2nSX#BVAMt;|-
z2aL}n+CV_I87sSCqHGr$5gdqfa*|Di=iw)xWFxHXi!3WGn=GHTe97{N<vW%iSt>fi
z-+%te#}4iP!j9W+Ucc(&SM+zcWoE>td2ALZ2mopmWhiRQ<(situ^~tT?sV4BNFpup
zXCo`g<aM@@mozle7eRpM#)&%Qp1By$@q$LQ>Tg85Xte?D+Nhv`UW5X)k)mefg+_AZ
z^q~T*xuuPmZ}vAvF`#I*0k1ZJ({sE4?O?H?MjNPE+G@#OLDqZq66U~0*h~H-S+BI&
z+f@n2*@AJoD9%=_S4t`!MPa2Ve#LIBlI>q%c3YKr=EsUyB?#90RH@3U+$RbzQA<zL
z;Y>X>_boaV1|(~o;XZ0nWpVr;1@S8oO@t~*rRHqx74tQs-OAr%+zlwK%51A$SZ1}i
zi+ed}$PP(hibI80;63$BD!dzQBacL(L4r^E8Y_Se;B8i^*cf^y{BEMVXw!yX7n*jk
zFG+>2<JDJUpWu~(%0Z$w{)X|67vPpe^WA3m<BVN22^R4U8)V^YVM`pwir<E8eK#WC
zJY?2SZ@zxTqMmFrtU_kZH&(%r2IT^hc?O>?ph!RDJSF`p6>s)6W*aflNQnwi36ea~
zeKNiwrFC^<6Vwy@(~&9^`U?Gn62)8cH8wP&D%DP9k)#4`&_Ap=NT`Z?(6`LmT*ZkZ
zH#SHJ2KO{`dL@@9CP2*|lttMgDh|IW4<gaYX1$?&?%!RevguZPO~BW5RgElPW@Vxv
z^s{h--qNoLj#Y|ibE(0eI$4-5C^q3;$>*$GjeX_#u#4h}l~p&DiOLF<8GX_AiUm8{
zWO>LgyDPo*E3<a7LPR>XJ&}BL{@?Z5Agi|7?B0~WX;p(_Ymp!>bueF*D>>aRID`=-
z%@CEDl~!vjD2B~(SNXG_S%4%MOz~HH()|&evJ78BVdE#G`SMFXnX)Rvh-!6&%Mwd7
zcvLlR5Uuu$n`L{ORdVX~U_exskrrWo2L-tXC?A*^tpGk*m%#p9RpPd6*ru^?!&DDJ
zARlDa1s^iS?;vXsPpr%%CyFrwE6p?zLi?FhhnK=a8a=a}$2E!c%@g(VZ1tJ#+^;Wg
zt<DObS+LSC?(8&-(`%0`VHF1vShJM;`oaUU(>K19r(hHwFkSOpPXCj*6yNqJ#`DZf
zU~@agyG+Ta3D=ki^KH>pMy@luCNPVxv~%J^5C~inEi(10B(Em?U=#}M=K;a+kQFm-
zqKN39zPo_<F~B#ev(Z;1=E7Tx?=D=@J*TrHpH5EdaQN;*K2X&RWruQ06~o{zCRF=S
zPQM~@TT)*jfm1kN5Job(CO<guiw*UBsCV=zy9<6RGaKlb5#72~Tw<);%43|lKTqQu
z?h5`q7n`$ns}b#-H?JgtC_6E49*g$&jvt*j4<D`3%*W_xyj6UTQuWO<tC@bF4}Qad
zzB2(o(3Tt5;Tsb?z6FDXX+?cCJ4qd(z0u7j*H~KkwdvqTN69md`($9E5K+(@zhAtj
zL8a$uQ0YEh7vsx{F%A@8M)iyFD<`leoQRO8bvo}UZQh&=JiE|&uTwhnvPslAZ07|@
zzig6pt~&djiM&yt#TI4k-KH1PDc_BcbK_q>w8r)9Rhk1v1CIn;IVC`4GA3Ux*pqoq
zuWAq9)H`Kk)}!XeSb>!o$kW1dz6F*wlvuzi&e;6U7wI5K@rmWWWXqAbq@)2hQt}{Z
zei9xh{72C9U>+d({QP^2SplZ=q>&ePU2tzM$)l^qlaNO%0bd!{>0s=k)W%@(fhnOl
z%?QaJE4Yj{yma%HuePkXZQpI9S>dZ&HXpr#jT9YHE4G~2>G{I6mp)bS3|xBK(eM{M
zJ5SI&CfV_Ep$+*=O@GD!$&M{`A-~%x3y>YnBo^f7Eqpi(`B%)WD{yL%i4@Ba7#}v<
zgLi_~^Bycc0F^S6%N{I!Hd>2_sUC!5QHV4|gu*Yorf`yvOk-P<{qxcxe3)!$M>I4o
zLcft|(UxekChT<yW<iC{pSLE2eL?Q$v?Ah}yDRmIjO+e+fsh_gxm}qEG1{3G4Q}>w
z$p!N4d+>#=P`ozk%2dGJY0Caj@b8jb0bF<S*to(p<<qPQ_8m-3grsqP#d%PntjNO(
zWi%%zH~X89APoTKDgQ*4I9B*VOSAE-W-RK(?~BkSePqQ<71&%0FWZ#ctOCJ2DA|96
zYT>}vu8jsSaDl2*Zq`QE!r((O)s&->#&-ZT8+A|p4jhdl`bQiVatAGJnIH)nFgzi}
z4TAGJ@TE4giJ*(<7c@mPCnD~^0EB0_l}dQIki4X?CPw*3uG|9sN0jVwA6(B-uNMhz
zy<R%?#qE-aD2rQ`t-fb9i`Bq&&3<5h15EI{<1LOimTcR$<WlG6K^8?drs+InO#NjW
z(m~ArrAjemeh(Tq-WuHOyc8a=wl|zPd{7L-$@S+agdbvkm$*NnLPLgF%ukpiVXFd%
zbaCINjWPfdj}@*uJvY03ZKAcWt0(H#q>#I(tFJXK=q_P9cz-KfIeur=jB5n9v9MvJ
zuRC3%$ySG4Ti4UOyuO&H74sFgiDkm`Sf{~HxDDVO|HY)YqT_I9OKZpD!X2H@bdhtS
ztKgg{!2W_57k<m53=mIB`2?}nlduRem>Z>H6r+hRVwomi(Hae<6S3#}hHiTvX0Gq0
zjnIzAx8dJFJd%#Zp09nLS-$oBZNq&J4e!`?_|9$I_6H<ACk(@06okh^eL51-oL1AO
zOqNEhAHYmAKLS4}!8Z*i%7wf2NYp?6pg$VX=}#D@>&Y^<Ct4H5zftqY_=)*jw37_M
z{-Oa#?kV<{X4r1XiX)sN^UC;uaJS)n?X{x8W#?;TY#|gg_`r^fJK&EX8%{{!wk}Ld
z3@YOz3=B2X4iRpF7B_3EzDRIs$B(}daV^qSjqO23cQ&Z$#>+03ljV$;vB@o`YizGp
zw1=JjndlVW0d9!5V@oi7e+-<hg2_zIL%c=^0C-td3YoVcXbZ2zqGya>oXW8HnVhjS
zBxLk7Hrab4-jGvxFxIJQXN)(q@37bz=Xgt~E~DeilY^Q!gpY5*?{)SS7^zOdUKqr?
zd~Uvu_<(D{&C*s(sR^_G>D7C;batrm#a+3*t6K&KHw+92r}n;PoLaodnZDz;2f9}8
zHMUUchC$x$0r3vlmV?+ehq*qj%!WQxHX~IwA6#x_!@yRsD&$cu7|z&xD`4H)z^z+*
zYFk$r>&4hhMhAOgbhKzNZ>`<8Z@ioJ9NoNcbAeV%-%}AX*TG5i{A^_B#+U9OuYsOm
zy2t-P)2?Q8)U>W(FBlywT5Cq>Eil;?t!<;D!gKrf)wYhWz<XXW;|&jhKU05V$ca7+
zQL50f8q<^%E`pbmuibnp8LZ*8hK-v0=%5N^-~lylx`h+6)+5Oum_e0z2buU@I(Ft4
z$Bt1Sqe(rc>l^t|czpbUm;SKtnSEjm^!OkU!d@{lK#?$9)Ba#m^XpOFJW3rMFTG>@
zgyAE+Cak7i-3|Jwf*oci!8)U+I#C%xI;Ij>X`1no2u{EUpKX%~F!yNyQWL~8ZxVR7
zYxpKiQr}O9m@d|y`GpuCe?T~8!e>G@VuF>>IB?_7u;WHnh_rKiI?<cygSNt3tULuv
zv6&mS5+Vh11%f!h|DohGvkk@`?<=Pdy!PJX_rI+(Om$H(_UwH{^Pjr^vG-rQFG3+{
z@B_V%96V<bzessd8^A|u%fVY|uL1c^@%_bW3LFOKg2ld?zI_q2(T52NemANCixf0l
z5qfZ~s@AQ@BGNzUjK$A5y|7uomCGcs+h4)=V!rAOJDnO*$8J*mUhjKvsR?XCIulB=
zh?=fdLxWbQ;EKiGa;k5*1{JIIID26HUv))Ix`ciW+TQ`zqe;$C(%6^4ydz)W&%~dA
zhfv-MXpkTucy>u@_5mhtLcvd7JgS{(cS_1{{Qf>wm+sT_4Suiih8`ZbxKu3O{w_sO
zPlff>{t(yGOn;6kKdDb6*(ZGb<eMkbtny@=pw~>C(9}bSz$ra)tmgTNgBXkY&paj$
zWxzE3<Nu2IE;>1VIs;t){_NZ0mxVV#RXKc<M1A_QiyLByy#lT!igWD{5QRrUpcFI;
z{^VjdxH4&162E|@IF;-WX=@))j%pCt&U^0)ttMjC8ag)adi>5VeAg<Lyk*1aE#0dY
zrG+PxoynTaNM`vqx~y~6x?=rxBSW|K@XKV(Wz{BbH`GqOjm6X&t#j4X)Wk-mWJ5Gj
z6I<Vtj6|Y)V*{~xGRe;q)IwLRPKedetv6yxSDnke8IGNEljslh`~dugI@XgIxPtn0
zs<K??@etKHlFVYJnnbw)eK``}cmYt5$zf0?YY30IUNwI6nj*!Xef!zCVkJ+7EBf5q
z&l#`mdF2)3%~xJ|)vu5C-EvFcsA5&K-Q6ssX&d3g>fY%0r(0Xurh!~%>(EeZXKny+
zku1GKxJ}IR$g*~1hJq|TXLf6@ex_!HEX^H#7#Gf?O!poZ^nkyOCk~`ph+B}kaP1@3
zK<hlxq?yY-U^f|>pk#V_GK0}W!;5=+Mtgb(4n+qGCAA5<h}71$)Ycj<I=0lZ6Xx}1
z)a_f>$zF~3Q|<ov4FmLepZ3B)FRQC*t-(JQiqKEZnYYYq^a)0C>@j}?eVS|O2mOs8
z!#VicC$3sHyzsKVp1c)2xSE80@U$$HU1&q8z~nUv&ZHnrmT+}=HrEv}EzIuYgsT<Q
zSEPbBdrFa|90|5!&&5&R;r`LOI6sM|N8?F}pDrFA?dK;0ql*`hFRg8<scEVG3I1?)
zw|Rxm(N)cc_y8eb00?j%FP<NFCL_)pidQ#uuFLK$;%R4gUFTa-ju+u)CVs|~<~1*D
z#qM~MCZDyugV-k@A||Rqla&==&_3pAexmc9i9t_I^s?Bw2RZosu+fCO+l2S4MX1;<
zMUd7P!04G6CQf_Lg7$=o_*Br|+>2XtP4!`oeAvi4DAK?4023fCk~d*PrtAXxi-1iM
z-fewS-9T%)wl*8G_7LfDXlquqW;6VH{K+YRvq#Jh2zL)gTNh_TE|(T-NSMSr5TESL
z@o3bmx2I#AE~oYkYc3~DGf$}5KNG(fA@A*c3u4OW&FyT@))KPu4LdMJzw9};i#$;%
z^-G-S)45eZh#wr1cgzk_FEb_$^_V?kZ(L}wguDCW#+~Pk*!ZRb`81flF_xWE0kiSk
zA?137<qiH#>w>S8<U=0cQT&WGeZIPDX(#bR5a7Lq?_Y;OdlPHW#50ik%!emVimlMc
zu!p<&N3r?Gu?wx5Z5Q5P%B*|wji%aj{l%OIYZQNG&R2H)dFC?yfXJ{vFxT@u`e0bB
zEfyeB%r$=B@V3PWPvG)u(H~EKbL_I1h!+GS<i37twBYLxHU)xm%Jlf(eM8UCD0%!3
zTgl^ZJ#~A}?U{YT``qo{-wyx$BU@g1<$<y1kE58-!-IiJbRYU!!#tuNP)|cm!c>Gn
zKY79vStlX5Ug$hnq96sRenD}vm7I_Iqfvi`)Fd1}aE5OxBffv6s6QEBoxC>BkD0pD
z)SrT4Rro2~L*K}EOtC_yUN;l_&oTEK>T05-+|k@GfvXh8>hlCpnroD)2$}#IKcQZ*
zIs(=_7w?Tm9~wOrjUIvoKUrMV|B675K19{%FbOJ+c>z}XLbmdh*W)<%8%Ly?2SiBo
z;#g~~DFKu2FnZ=q_5wZ?PhZC)shA{h1P@VjSff4(A8tQdm%xA3rxDQtgFkq0z{f<p
z*n#ZcQ0n1Q>t@~`u?LuFTnPtx>tJ~MG=41K%|2%Qo^`PYj5Eek;SZ^Hq5SsnV5=}~
zd$~#brav(SX&2uf$6g`mRi0*qc0js?=Z!os_>MRHeF0d+K&6NrgkvU!aO-3$Z?aSu
z+vf@`zwV|P_1Xb#*36r(TOM-lGmB=<LQ(w;Ui70yw=BXxR;YAUkSYbQy6&dZN`>cU
z)Q_|;TC{nwz~jZZKWZW7X9K>XhHqUpCB4|k1~{{z5F{YAkRXoWTR_=FK`HqZAg3JE
z2+M`Lu?mnQIv0=!=~L7$A&Kw*9bh$9<4t3k@z!^jDXzBeOM?~ah*}Z6w7bovEIUup
zzhrxJ*7RT<8~HIy3dS#t5#tvEOWyyNo|$N-9&VC`fwa_W^80T=_miMWHCTo%w^=@C
z*+=vBZ+Gvw<K|CX)>e-}z<iwz#rz`<LI)xyq-u;;p+3f|FlaJ-Z|0z-;4<ZdCg$Nk
zH3v5s_zU&&*zAH&E<tdUe3Pdmio3nLFI=HqtyYBly4y8*WJK0@k$Sbli`>emve?d%
z>uq73N{`~K&Ncc2u3ka+Tr{gu6}pvf#g%HQ*8{E|zo%_hqhhU=8YLxMohZ}P2F*ER
zdX;3Yml~~Vq^1f*jb$z>5-zcZY9dnDD|sSbYa&-`jYZ^e;*VD=(P@2`%r*g;eM#T6
zD2J`Lr`@fL5V$?P;fl6u>@gW=u(tfL2#2+c!vWZW6L54%MR1M5Ce1msvRW1zr3OhY
zpHby<JDc28q@bt?u%Sqs7KlpWni#zLhs*1%@s=d^m4F|^N57TtTcD^r+G*6q`SHbV
z7gYv48pWeye4(CspxYyi8MavbR^w0fBTx$w&WNPKr@$!Da8nj$OMfbWcm}NGSUO;b
z#`mQp*+<p4p4oogG3NWn_2V;#g16RJrv`vOSNUL5kI>sVQ&`mC59VfC|EV$6)0u4f
z?9e{puJN0NfB3i0<G+9V+<^n*U)&Iz-q@|XD`8pAHqBz$#{b*d)d#n69rs&&6X2Ic
zOO^y#J_@2fh&z&?DT$&fnFdJFwq%ErWf_na8^^<efC%Cc;2=uwWa>Chs<4XFI!@}k
zuB*C9>ol%=pg$_RZtJ>f>bh=i>kqfnN&H8qlgUhHJe`c&>10}^zkPRrNPRRjq4aL|
z?c29+ci+Cf4;=73dqa`fUf-T4J9{tvGu8Um(lgIKE6!&py|2QicH9^9=K~%-pW(-z
zdT}3!ry(fYcd-?CPJw45Z+e2qE`99}>G>~yc>ewO&wtZ9{Mw~&k?-06&86Re{(b)M
zJUhd+K+glCFFf2e{-09B`x8!iAG~&ocYXmpbP{)n$ME(?9#ygD5!3m-7VnXtpOlXK
z`3nArz7L(ZphTN<xX6;c_;D0(2Iag1Jy?1x>w>4*{vDT(`*GnuD84~JZeu<!O}S4v
zb<blfXl@_wM~2JKv}RvGmM7X+4(c9k_t4VQrLE+@7A|yJF;<JGNn0^qa||Ab$8C=7
zc^6}&usuyW+am0_PXAW>N}E>V*XbvGc0JpgbL94I*~WF(9^WY!XBy<NEzKfi&x7u^
zaYP7Ov;Upoodj(K^gfOH36#fCDsGVhzl*|pzKuR_I>pO$roHHv5%}v<w5@S@(r!D;
z0-ulV`55p+m(DbfA=by$v4y*J5d%C1`iePW-S8V|tOM4YqbJ_`;c<n|?pQ*vJ3;$*
z6kIF_UBBY$^(gAlS^5vufpd|502<rQ1#Ln;kIUtUE^O96kNT_V!+#Uf3(~*gX>pQX
z@^pJ<J<oV0Z_azcx5@X3|55)Nfk5Edz$f^GG#7j__-^o0Xd-kj^y9XPwoBo2;U7i%
zBagL9?MK_6Z2w8eOvl-dkMR)Yc;|n0jdnfPEo0Nx@7?g!n)Pd*>XCX*^!(4-6Kh{u
zH@og#Z1Q*PrnlCwS)W_~+J?Y}^oG+Lp5E}<hL1LSHV$k&zVXW&mp6VK4M%rJt>|*}
zlTH1bPH+1D%{SgWd-F3lf3P{Ud1CX~%@=RkbW8r0Wm%Gk<ZQ2}cc%BkmcW*yTh4F!
zX{<Yzj-89W82iE2H~PB!9_hQdEwt^_wjXalw7s<b-1fJ39NO{T&f%TU_OIzb+W$)b
zkK*0&p?Er8ia!zmnKGt4qCBm<qbllI^`d%dVE=$M@XBCdaCq>c!Dj|94F2ojPlq~(
z28NCgJ(d_xJU6`U*7V5m$k~y9*)_8}ynAH#k=>8)esj;*o)<^AjGh>MbaZ+2lfB)0
zC-$D&`~2RI#=>LSv6sd^x^4Kj6StikUpGEG{@%XqzVrLL_n+PW-2M;t|Lpdm+n>Ar
z(}~R!_fDL@BXq}qCufuAFh_h(by4~hpVaW52c;YD?MTu{1Q9O&)<_?>^5ia1oVzeW
zUft#59(><tpNo4zpLB5_@Ix-{$7cvfT|5B#!!91iGvPTGkKmm5B(7Y^hc_vtlhU_c
zoFweF>f#;=FMqkX7j)IdeZcp*xL;aF_qccfblt_n(lM&JctqMpf1ffdXR5`yf+g=r
z?UaXy5+m~L8QBD>Sk_9iR<{afwI)x<d9!R8rII<In+r|+h%r|$Y1L-636B}oTG1@a
ziGiUeY1$|oRn0PTEWLJWZrHN&a=vOV$Ol}xa;0jXG<0jAU|E&1!NF!v9uE(hOsRtH
zrm9jAt|~~DB;&^^Qh4|;OT)MjOyDB`85=X7!O?WNirAn^lS-gycx~1~FK(%!K7o=)
ztqiIGjuP+zNyl;FD*6#{%%Oh?QmR+AUMb}mxOt4CkS;^70cdw6*EG1wf>RS3<e-nE
zdkwE6&cPxJ|MEi1s?bW74hV^t^_AfdZaWD%I=BafS1eG+q(S_<a?GZEh$@b7{tG+c
zsw2J@hwZJrgrBD%?9GY|zuWMpTm(B~cHl8`7j@GOw1#@<Mp}!nB;Q2qX#;J<o1>e=
zC;qpPOue*)Vzia|aI3H#zwf*gJ9EcLAr&vN;q639&@lGM8=+nJrr91E#Y=Q!*gbC?
zA1U)2sS|Vu@@0x9X^IZeG~G#e(cN^A4$(byFMWn)=rA3j`{*d$Psiv1N>hf8(}Q$^
zK1&bL!;~eBW=W?U8I-3vDo~M5(ma)Dfy!i31z%09QjILC(<xfS&h%&K5&9K8gZMnQ
zjsI18l)gZZ(HH4)`VxJaevQu3S7?cTozBr$=?VH8{RaIeJxO1ur|28>P5Lc*ntq#}
zq2Iwx(eKi8^m}xkejl&x{{elAzKwgzKcW}tJM_o&U3!uJgkGXQC7T+wOfS<b^eVkZ
ze?}MRb$WyToZh6rpueQQqPOU;>23NO`X2o)eV_i0-oab1@6tced-RX=PxL;0Kp)aY
zU%h5j+Y3giqUyz}UNUllnxR$og4fdK{5jK7hugGj)m*Hp`l7#5EtaiLT`TKGsmUKQ
zaz#tkN|wK5VzCEsH0xF<XD*gYrj`p?1r=+1&hS`;AmhcF<*Qj*HOvRqSg2TM{H#PR
zP_J-@h@*#U6^i8uE8yzoG3Pt<f}zhlebhuyFPW$fhs}Al_PM%NHFDlcvFtU@7y-?)
zG`$e0mrKR+yiXho=7QlXmh)yiADU7F#_5V#wZaY%X4DE0)gg{exxuPoEgFW^0l7xm
zLQ-PRwpQ(i7S@y-f^Hf!`mL%~D|mCJ?n9};FS=?Or>!6(#qz24CV?xVe6eJxm0Z3}
zAd6--7Z#Xt8XoU*TFphHS}`#ZPE&C~n=`z+ITu7>wE~M(qpTM~x>hpEIjxHMauC<q
z!fpOpc3$ui(_Fy7AptRM9XxGK8-^qGR#Xgkl#G09E`~cru5U4l*;aGKD&~+uNH7Cw
zbNCn&lFf=yZWE1+g`HMLgXkzoT6qpGV3vr33Z9UI*DGNMVPR_=)C~{OrDrusbnRYE
zt5>e*$D(d%O0CbjgS$*QQ&5DUu2oF+%IZ!m#&N@Jan7+Hh-*JE_6$J#N;h^m_PZ8@
zFMAt7ad{d%`l46Y7a{W$Rvld6Aj}f173%qX$p|4n3Q*4o7O=d`>KP7et(*(#W~roA
zYDT+LSH*xGO{(yjuTs*^bnu}yo$V`YSgdBnkD#gN{FVm)c+Gs?FIHkmt64_1SetLd
z=v7Od)vDgv`dmaes#Y;y!~!tTr8Zv+*09E)dYgc(xsNgboK}a<HLO~k)<ZcB^0k@~
zDi!m_Y~4KL*Xy%J&Bw>kY`s*fVQB{!i)9F?b+67sY9df6)oW^^Q-EerB!UaYGLyR;
z*rIo?OnGXeqkyDmH8V?KK`WLZQDmq@`{hIh8s`!`E^!i!n(#v<H4(YI{uANWf=+a{
zP^@hvEGMTV+5}`*`Z2F+!pDbjGt26WumqEl@K-eC#X!~2kp`fPSz(nHi<VySl}xk3
z`LCW+6Fn>3tzr#BL!)CQEz#!s3^Li*yToxgSSjjOy=wRtjB-6#D;0A{!ti~~$>!S0
zdd&(r4r_OS<DX`wY_cYKvpOHF6)j^yt3(hExX!ETSjmA}p=gwHLC3L)kaJdn1w0yT
zp4IgE0Ow>l6YF1RhliU<6Ex>E0;h?y3Sb2*u~;hv99!Ios}zl}6MJm6iz0n%kyb>i
z39nYHhMU2qCff5Qb5Yf`ny%%HHc_#vhKsS7h@j0@ahfZ13B00JwNeSIFM&jEiPPe(
z9zEC2Mj(BvRuShG_MGd!TrP~u(7CEntEodx^M?JLpob%TbmPzmycTZd=Y%*Zl#NAk
zEk)wjft<Su_u|Ty6xo*UPfulJ`QQbq^YB4CaNqH?JrcEdWU_gA>Hf6s>C;{h;kH26
zW3$oTUR%o8QYtpNj5~u=HmTaA*m5?n+8#yD$@W__wr|_<<sB4GP3cod9!&SfdZSBe
z*`Aq6_u3PgsBDiiHk!%E4Tnj~**idTYqCAW?L*A@)=XN45=)wFhiB4RP-JckGq#(t
z-Pve1lgUJFif1x0TbfB5nT%?C6?saweSI1f@~39fwm+7%1F<C3&)AezZJ!c@UUIJC
zpH0f#;tbA5Tgp!9wzt0*^pw0LFF|%=$lnLE4yUs-QSC@39m}9~;=VMRqHL5qvTFMk
zJD7?u<5E_*CV*-z8H0;sNzL}m=55k3zU}W<?I3=)21-U!`URgf3l^w3k<Bnmc2X!A
zQkH`eDK(Ys?`=7|O<C>yup@=yP$312v+~qZOyh|Vo|2;MO<Rsa$)=XJw=bqmIzvRR
z)7{>RUg+F1ZDpr+j+t0;ITH3xrF)~X-b{b5YIi6Nk7vrxX_KnmslWhPw%b#8vt2-9
z$&B5>wIir?pr+bg5YsJOBEthZ)V4cQS$Qcd+nsQlYIiFKkER>G++=2}-C@K|tM(1b
z!Nci;_c_F9FX%mjzD8+CU8(!ijjpbgO<L0KigS=6bd!yCK6Kz<(>lzAw{Irh;K+ru
zl1rFg9=5+XhHgzf>a=qg#6GuXV97M}pUz?uS54J*Ca{4=pfR`@(X@XVd#Z|P=uxDG
z<e55}w!30UdCHC;D8rbyY*Nl*_*c8JWp1aGOfF>`YXWh*8jo&)n{I?{J#p1ut2Bt=
zI{2C4O-jSdaJ|y-G2Eau{0uiLjR3=_(g-r#q%=YdZ&n&@3^yy1-4XvK6uAY8Y=!_C
ziZJYjA`G`c5r#1+!f-1TVb}*n7;b|i47WoOhC84L!<~veF5<jjf&JZCIfY5c@}y~i
z_D&9}xMKIm?S3p51(7<9kh<o2iD{!T&Q<>}2jWGw)z%!)I$P<t@yk`h%L6ODvbt$d
zk#`9_hrmNqS1(s&forP8bZOlyBGpdrkBv6)Gl{Sy0lT5-HM?XHwc4m^4=V#VjjQ&p
zzlaqPrh|P1Qz5PElLzE!UYT&=T}w;Tv1w$2G;%g_9+vB^yfG-o--Q&i4$+VQg2ir2
z#f_zbm@JPkLDufe&GLXF!}dWYxMVxai+SR3`el#om7_0vws|*ZlAPc|NR=25BgPJ3
zX<-&uuM;e4iaVLylgj2|wl}5akYhY4EebrF!NR<<j|P>Hbz=v#(P#`K9DrQ_Vid@`
z#vo9HGocTw8@~4=kdU{p&;$}SbnX*M;E2-*r?AUoAxieJ4`ht)-{$%tHV)T}3bGx-
z>XqdKv1uNRXKSx;85`hwR63d-kjHW2V~t%Rgk5%dpbxdX(9}A$IumtuaAjle%s@xg
z9&<HFHK!)a=iVz#Y)<8EN=zPLuN^?v9nTCj@LCNP-gt|Q*}P2N*CGq<X4h3b`xSdv
zyxFo!=<SNVJHCV%;$T_Aa=dC_Ov`{B$M_S%T^xW-?{aX(uqp<yNE{vSK(auBZbfR-
z-d`Mw)7J`&Unct4Z=6@gW24dD74zMjadk|xGn!6KvHiX5c~;T2qh<0WOkV3OPMpfI
z4toad1lHozb?66>Yw5-wdl)>^iai2wCwpxQew7d4oYnNxT?&VzeJ9*{w}KzSxdX^S
zAjHTaWtjx!9w35pFY_eP^cm)1WQKVdIm|qa9ATdQK<;B6MvgKMBlj~8BgdF$0>}f*
z!$_KW7|AdXBgdI11>`~IVdMn!F!EXEVdNp^xgE&E%)>~Qc^J`{hml#u-qUik&K3JM
zkaGeX2WE(P0(l=QdBq-WanEr@a2Eu|+(m&g>q*7l+hU#PieN1Xj9C{1#;j$<9&53h
zToJ4lfidgn1jejY1z)T1G_Q=3aXVz#-mNpI`BbAyxX6Cz2rfYA2_$9bvbxfc{7GCe
z^gA%L3cilBN1LFym{*!?Y^Ae@aj|$d-SFln8{4?{M(9yIo1ZwV<BAC^xF*gtr1t&`
P^z$#-zOUl!Fe&{XToHil
diff --git a/ui/fontello/font/fontello.woff b/ui/fontello/font/fontello.woff
deleted file mode 100644
index e0007cf3c54b81e62aeaeec8976b8feb2e5a21c0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 24196
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
G0002s37CTb
diff --git a/ui/libs/jquery-1.10.0.min.js b/ui/libs/jquery-1.10.0.min.js
deleted file mode 100644
index 01c6881..0000000
--- a/ui/libs/jquery-1.10.0.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*! jQuery v1.10.0 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
-//@ sourceMappingURL=jquery-1.10.0.min.map
-*/
-(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.0",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=lt(),k=lt(),E=lt(),S=!1,A=function(){return 0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=bt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+xt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return At(e.replace(z,"$1"),t,n,i)}function st(e){return K.test(e+"")}function lt(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function ut(e){return e[b]=!0,e}function ct(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function pt(e,t,n){e=e.split("|");var r,i=e.length,a=n?null:t;while(i--)(r=o.attrHandle[e[i]])&&r!==t||(o.attrHandle[e[i]]=a)}function ft(e,t){var n=e.getAttributeNode(t);return n&&n.specified?n.value:e[t]===!0?t.toLowerCase():null}function dt(e,t){return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}function ht(e){return"input"===e.nodeName.toLowerCase()?e.defaultValue:t}function gt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function mt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function yt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function vt(e){return ut(function(t){return t=+t,ut(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),r.attributes=ct(function(e){return e.innerHTML="<a href='#'></a>",pt("type|href|height|width",dt,"#"===e.firstChild.getAttribute("href")),pt(B,ft,null==e.getAttribute("disabled")),e.className="i",!e.getAttribute("className")}),r.input=ct(function(e){return e.innerHTML="<input>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}),pt("value",ht,r.attributes&&r.input),r.getElementsByTagName=ct(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ct(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ct(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=st(n.querySelectorAll))&&(ct(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ct(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=st(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ct(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=st(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},r.sortDetached=ct(function(e){return 1&e.compareDocumentPosition(n.createElement("div"))}),A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return gt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?gt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:ut,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=bt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?ut(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ut(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?ut(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ut(function(e){return function(t){return at(e,t).length>0}}),contains:ut(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:ut(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:vt(function(){return[0]}),last:vt(function(e,t){return[t-1]}),eq:vt(function(e,t,n){return[0>n?n+t:n]}),even:vt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:vt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:vt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:vt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=mt(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=yt(n);function bt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function xt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function wt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function Tt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function Ct(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function Nt(e,t,n,r,i,o){return r&&!r[b]&&(r=Nt(r)),i&&!i[b]&&(i=Nt(i,o)),ut(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||St(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:Ct(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=Ct(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=Ct(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function kt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=wt(function(e){return e===t},s,!0),p=wt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[wt(Tt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return Nt(l>1&&Tt(f),l>1&&xt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&kt(e.slice(l,r)),i>r&&kt(e=e.slice(r)),i>r&&xt(e))}f.push(n)}return Tt(f)}function Et(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=Ct(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?ut(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=bt(e)),n=t.length;while(n--)o=kt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Et(i,r))}return o};function St(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function At(e,t,n,i){var a,s,u,c,p,f=bt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&xt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}o.pseudos.nth=o.pseudos.eq;function jt(){}jt.prototype=o.filters=o.pseudos,o.setFilters=new jt,r.sortStable=b.split("").sort(A).join("")===b,p(),[0,0].sort(A),r.detectDuplicates=S,x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!l||i&&!u||(n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;
-if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=x(this),l=t,u=e.match(T)||[];while(o=u[a++])l=r?l:!s.hasClass(o),s[l?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},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(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={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>"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})
-}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.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(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,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":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(n.unit=o,n.start=+a||+r||0,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);a.finish=function(){t.stop(!0)},(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
diff --git a/ui/libs/jquery-ui.min.js b/ui/libs/jquery-ui.min.js
deleted file mode 100644
index 17eab79..0000000
--- a/ui/libs/jquery-ui.min.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*! jQuery UI - v1.11.2 - 2014-10-16
-* http://jqueryui.com
-* Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js
-* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-
-(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap='#"+a+"']")[0],!!o&&i(o)):!1):(/input|select|textarea|button|object/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css("position"),("absolute"===t||"relative"===t||"fixed"===t)&&(i=parseInt(e.css("zIndex"),10),!isNaN(i)&&0!==i))return i;e=e.parent()}return 0}function n(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},e.extend(this._defaults,this.regional[""]),this.regional.en=e.extend(!0,{},this.regional[""]),this.regional["en-US"]=e.extend(!0,{},this.regional.en),this.dpDiv=a(e("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(i,"mouseout",function(){e(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",o)}function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent()[0]:v.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).addClass("ui-datepicker-next-hover"))}function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function h(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.2",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var l=0,u=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=u.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a="string"==typeof n,o=u.call(arguments,1),r=this;return n=!a&&o.length?e.widget.extend.apply(null,[n].concat(o)):n,a?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(r=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+n+"'")}):this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))}),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=l++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var d=!1;e(document).mouseup(function(){d=!1}),e.widget("ui.mouse",{version:"1.11.2",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!d){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),d=!0,!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button)return this._mouseUp(t);if(!t.which)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),d=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),a=s.children()[0];return e("body").append(s),t=a.offsetWidth,s.css("overflow","scroll"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.width<t.element[0].scrollWidth,a="scroll"===s||"auto"===s&&t.height<t.element[0].scrollHeight;return{width:a?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s||n?i.width():i.outerWidth(),height:s||n?i.height():i.outerHeight()}}},e.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=e.extend({},n);var p,m,g,v,y,b,_=e(n.of),x=e.position.getWithinInfo(n.within),w=e.position.getScrollInfo(x),k=(n.collision||"flip").split(" "),T={};return b=s(_),_[0].preventDefault&&(n.at="left top"),m=b.width,g=b.height,v=b.offset,y=e.extend({},v),e.each(["my","at"],function(){var e,t,i=(n[this]||"").split(" ");1===i.length&&(i=l.test(i[0])?i.concat(["center"]):u.test(i[0])?["center"].concat(i):["center","center"]),i[0]=l.test(i[0])?i[0]:"center",i[1]=u.test(i[1])?i[1]:"center",e=d.exec(i[0]),t=d.exec(i[1]),T[this]=[e?e[0]:0,t?t[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===k.length&&(k[1]=k[0]),"right"===n.at[0]?y.left+=m:"center"===n.at[0]&&(y.left+=m/2),"bottom"===n.at[1]?y.top+=g:"center"===n.at[1]&&(y.top+=g/2),p=t(T.at,m,g),y.left+=p[0],y.top+=p[1],this.each(function(){var s,l,u=e(this),d=u.outerWidth(),c=u.outerHeight(),f=i(this,"marginLeft"),b=i(this,"marginTop"),D=d+f+i(this,"marginRight")+w.width,S=c+b+i(this,"marginBottom")+w.height,M=e.extend({},y),C=t(T.my,u.outerWidth(),u.outerHeight());"right"===n.my[0]?M.left-=d:"center"===n.my[0]&&(M.left-=d/2),"bottom"===n.my[1]?M.top-=c:"center"===n.my[1]&&(M.top-=c/2),M.left+=C[0],M.top+=C[1],a||(M.left=h(M.left),M.top=h(M.top)),s={marginLeft:f,marginTop:b},e.each(["left","top"],function(t,i){e.ui.position[k[t]]&&e.ui.position[k[t]][i](M,{targetWidth:m,targetHeight:g,elemWidth:d,elemHeight:c,collisionPosition:s,collisionWidth:D,collisionHeight:S,offset:[p[0]+C[0],p[1]+C[1]],my:n.my,at:n.at,within:x,elem:u})}),n.using&&(l=function(e){var t=v.left-M.left,i=t+m-d,s=v.top-M.top,a=s+g-c,h={target:{element:_,left:v.left,top:v.top,width:m,height:g},element:{element:u,left:M.left,top:M.top,width:d,height:c},horizontal:0>i?"left":t>0?"right":"center",vertical:0>a?"top":s>0?"bottom":"middle"};d>m&&m>r(t+i)&&(h.horizontal="center"),c>g&&g>r(s+a)&&(h.vertical="middle"),h.important=o(r(t),r(i))>o(r(s),r(a))?"horizontal":"vertical",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c="top"===t.my[1],p=c?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,e.top+p+f+m>u&&(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,e.top+p+f+m>d&&(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName("body")[0],h=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText="position: absolute; left: 10.7432222px;",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()}(),e.ui.position,e.widget("ui.accordion",{version:"1.11.2",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("<span>").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&(this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr("tabIndex",-1),e(a).attr("tabIndex",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var e=this.headers,t=this.panels;this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.panels=this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide(),t&&(this._off(e.not(this.headers)),this._off(t.not(this.panels)))},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=e(this),i=t.uniqueId().attr("id"),s=t.next(),n=s.uniqueId().attr("id");t.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(t=n.height(),this.element.siblings(":visible").each(function(){var i=e(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({"aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true",tabIndex:0,"aria-expanded":"true"})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.length&&(!t.length||e.index()<t.index()),l=this.options.animate||{},u=h&&l.down||l,d=function(){o._toggleComplete(i)};return"number"==typeof u&&(a=u),"string"==typeof u&&(n=u),n=n||u.easing||l.easing,a=a||u.duration||l.duration,t.length?e.length?(s=e.show().outerHeight(),t.animate(this.hideProps,{duration:a,easing:n,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(this.showProps,{duration:a,easing:n,complete:d,step:function(e,i){i.now=Math.round(e),"height"!==i.prop?r+=i.now:"content"!==o.options.heightStyle&&(i.now=Math.round(s-t.outerHeight()-r),r=0)}}),void 0):t.animate(this.hideProps,a,n,d):e.animate(this.showProps,a,n,d)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger("activate",null,e)}}),e.widget("ui.menu",{version:"1.11.2",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&e(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){if(!this.previousFilter){var i=e(t.currentTarget);i.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i)
-}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){var i,s,n,a,o=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,s=this.previousFilter||"",n=String.fromCharCode(t.keyCode),a=!1,clearTimeout(this.filterTimer),n===s?a=!0:n=s+n,i=this._filterMenuItems(n),i=a&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(t.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(t,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),i=t.parent(),s=e("<span>").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(".ui-menu-item").each(function(){var t=e(this);s._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||e(t.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,i)},_filterMenuItems:function(t){var i=t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(e.trim(e(this).text()))})}}),e.widget("ui.autocomplete",{version:"1.11.2",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&e.trim(s).length&&(this.liveRegion.children().hide(),e("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e("<span>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),i=this.menu.element.is(":visible"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;(!t||t&&!i&&!s)&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):this._trigger("search",t)!==!1?this._search(e):void 0},_search:function(e){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var t=++this.requestIndex;return e.proxy(function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},this)},__response:function(e){e&&(e=this._normalize(e)),this._trigger("response",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger("open")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",e))},_change:function(e){this.previous!==this._value()&&this._trigger("change",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return"string"==typeof t?{label:t,value:t}:e.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var s=this;e.each(i,function(e,i){s._renderItemData(t,i)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-autocomplete-item",t)},_renderItem:function(t,i){return e("<li>").text(i.label).appendTo(t)},_move:function(e,t){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[e](t),void 0):(this.search(null,t),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e("<div>").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete;var c,p="ui-button ui-widget ui-state-default ui-corner-all",f="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",m=function(){var t=e(this);setTimeout(function(){t.find(":ui-button").button("refresh")},1)},g=function(t){var i=t.name,s=t.form,n=e([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?e(s).find("[name='"+i+"'][type=radio]"):e("[name='"+i+"'][type=radio]",t.ownerDocument).filter(function(){return!this.form})),n};e.widget("ui.button",{version:"1.11.2",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,m),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var t=this,i=this.options,s="checkbox"===this.type||"radio"===this.type,n=s?"":"ui-state-active";null===i.label&&(i.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(p).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){i.disabled||this===c&&e(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){i.disabled||e(this).removeClass(n)}).bind("click"+this.eventNamespace,function(e){i.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}),this._on({focus:function(){this.buttonElement.addClass("ui-state-focus")},blur:function(){this.buttonElement.removeClass("ui-state-focus")}}),s&&this.element.bind("change"+this.eventNamespace,function(){t.refresh()}),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return i.disabled?!1:void 0}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(i.disabled)return!1;e(this).addClass("ui-state-active"),t.buttonElement.attr("aria-pressed","true");var s=t.element[0];g(s).not(s).map(function(){return e(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return i.disabled?!1:(e(this).addClass("ui-state-active"),c=this,t.document.one("mouseup",function(){c=null}),void 0)}).bind("mouseup"+this.eventNamespace,function(){return i.disabled?!1:(e(this).removeClass("ui-state-active"),void 0)}).bind("keydown"+this.eventNamespace,function(t){return i.disabled?!1:((t.keyCode===e.ui.keyCode.SPACE||t.keyCode===e.ui.keyCode.ENTER)&&e(this).addClass("ui-state-active"),void 0)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){e(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(t){t.keyCode===e.ui.keyCode.SPACE&&e(this).click()})),this._setOption("disabled",i.disabled),this._resetButton()},_determineButtonType:function(){var e,t,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(e=this.element.parents().last(),t="label[for='"+this.element.attr("id")+"']",this.buttonElement=e.find(t),this.buttonElement.length||(e=e.length?e.siblings():this.element.siblings(),this.buttonElement=e.filter(t),this.buttonElement.length||(this.buttonElement=e.find(t))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(p+" ui-state-active "+f).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(e,t){return this._super(e,t),"disabled"===e?(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),t&&("checkbox"===this.type||"radio"===this.type?this.buttonElement.removeClass("ui-state-focus"):this.buttonElement.removeClass("ui-state-focus ui-state-active")),void 0):(this._resetButton(),void 0)},refresh:function(){var t=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOption("disabled",t),"radio"===this.type?g(this.element[0]).each(function(){e(this).is(":checked")?e(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):e(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),void 0;var t=this.buttonElement.removeClass(f),i=e("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(t.empty()).text(),s=this.options.icons,n=s.primary&&s.secondary,a=[];s.primary||s.secondary?(this.options.text&&a.push("ui-button-text-icon"+(n?"s":s.primary?"-primary":"-secondary")),s.primary&&t.prepend("<span class='ui-button-icon-primary ui-icon "+s.primary+"'></span>"),s.secondary&&t.append("<span class='ui-button-icon-secondary ui-icon "+s.secondary+"'></span>"),this.options.text||(a.push(n?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||t.attr("title",e.trim(i)))):a.push("ui-button-text-only"),t.addClass(a.join(" "))}}),e.widget("ui.buttonset",{version:"1.11.2",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(e,t){"disabled"===e&&this.buttons.button("option",e,t),this._super(e,t)},refresh:function(){var t="rtl"===this.element.css("direction"),i=this.element.find(this.options.items),s=i.filter(":ui-button");i.not(":ui-button").button(),s.button("refresh"),this.buttons=i.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(t?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(t?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}}),e.ui.button,e.extend(e.ui,{datepicker:{version:"1.11.2"}});var v;e.extend(n.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return r(this._defaults,e||{}),this},_attachDatepicker:function(t,i){var s,n,a;s=t.nodeName.toLowerCase(),n="div"===s||"span"===s,t.id||(this.uuid+=1,t.id="dp"+this.uuid),a=this._newInst(e(t),n),a.settings=e.extend({},i||{}),"input"===s?this._connectDatepicker(t,a):n&&this._inlineDatepicker(t,a)},_newInst:function(t,i){var s=t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?a(e("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(t,i){var s=e(t);i.append=e([]),i.trigger=e([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),e.data(t,"datepicker",i),i.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,i){var s,n,a,o=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),o&&(i.append=e("<span class='"+this._appendClass+"'>"+o+"</span>"),t[r?"before":"after"](i.append)),t.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&t.focus(this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),a=this._get(i,"buttonImage"),i.trigger=e(this._get(i,"buttonImageOnly")?e("<img/>").addClass(this._triggerClass).attr({src:a,alt:n,title:n}):e("<button type='button'></button>").addClass(this._triggerClass).html(a?e("<img/>").attr({src:a,alt:n,title:n}):n)),t[r?"before":"after"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t,i,s,n,a=new Date(2009,11,20),o=this._get(e,"dateFormat");o.match(/[DM]/)&&(t=function(e){for(i=0,s=0,n=0;e.length>n;n++)e[n].length>i&&(i=e[n].length,s=n);return s},a.setMonth(t(this._get(e,o.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(t(this._get(e,o.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),e.input.attr("size",this._formatDate(e,a).length)}},_inlineDatepicker:function(t,i){var s=e(t);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),e.data(t,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css("display","block"))},_dialogDatepicker:function(t,i,s,n,a){var o,h,l,u,d,c=this._dialogInst;return c||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=e("<input type='text' id='"+o+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),e("body").append(this._dialogInput),c=this._dialogInst=this._newInst(this._dialogInput,!1),c.settings={},e.data(this._dialogInput[0],"datepicker",c)),r(c.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(c,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+u,l/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),c.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],"datepicker",c),this},_destroyDatepicker:function(t){var i,s=e(t),n=e.data(t,"datepicker");s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty())},_enableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,i,s){var n,a,o,h,l=this._getInst(t);return 2===arguments.length&&"string"==typeof i?"defaults"===i?e.extend({},e.datepicker._defaults):l?"all"===i?e.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),a=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),r(l.settings,n),null!==o&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,o)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(e(t),l),this._autoSize(l),this._setDate(l,a),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,s,n,a=e.datepicker._getInst(t.target),o=!0,r=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),o=!1;break;case 13:return n=e("td."+e.datepicker._dayOverClass+":not(."+e.datepicker._currentClass+")",a.dpDiv),n[0]&&e.datepicker._selectDay(t.target,a.selectedMonth,a.selectedYear,n[0]),i=e.datepicker._get(a,"onSelect"),i?(s=e.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?1:-1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,"D"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?-1:1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,"D"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var i,s,n=e.datepicker._getInst(t.target);return e.datepicker._get(n,"constrainInput")?(i=e.datepicker._possibleChars(e.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0
-},_doKeyUp:function(t){var i,s=e.datepicker._getInst(t.target);if(s.input.val()!==s.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,e.datepicker._getFormatConfig(s)),i&&(e.datepicker._setDateFromField(s),e.datepicker._updateAlternate(s),e.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(t){if(t=t.target||t,"input"!==t.nodeName.toLowerCase()&&(t=e("input",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,n,a,o,h,l,u;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),n=e.datepicker._get(i,"beforeShow"),a=n?n.apply(t,[t,i]):{},a!==!1&&(r(i.settings,a),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=""),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),o=!1,e(t).parents().each(function(){return o|="fixed"===e(this).css("position"),!o}),h={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),e.datepicker._updateDatepicker(i),h=e.datepicker._checkOffset(i,h,o),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?"static":o?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),i.inline||(l=e.datepicker._get(i,"showAnim"),u=e.datepicker._get(i,"duration"),i.dpDiv.css("z-index",s(e(t))+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[l]?i.dpDiv.show(l,e.datepicker._get(i,"showOptions"),u):i.dpDiv[l||"show"](l?u:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,v=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var i,s=this._getNumberOfMonths(t),n=s[1],a=17,r=t.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&t.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),t.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")},_checkOffset:function(t,i,s){var n=t.dpDiv.outerWidth(),a=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:e(document).scrollTop());return i.left-=this._get(t,"isRTL")?n-o:0,i.left-=s&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=s&&i.top===t.input.offset().top+r?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+r):0),i},_findPos:function(t){for(var i,s=this._getInst(t),n=this._get(s,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[n?"previousSibling":"nextSibling"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,s,n,a,o=this._curInst;!o||t&&o!==e.data(t,"datepicker")||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),e.blockUI&&(e.unblockUI(),e("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),s=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents("#"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest("."+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==s)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,s){var n=e(t),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(t){var i,s=e(t),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(t,i,s){var n=e(t),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(t,i,s,n){var a,o=e(t);e(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||(a=this._getInst(o[0]),a.selectedDay=a.currentDay=e("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(t,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,"")},_selectDate:function(t,i){var s,n=e(t),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,s,n,a=this._get(t,"altField");a&&(i=this._get(t,"altFormat")||this._get(t,"dateFormat"),s=this._getDate(t),n=this.formatDate(i,s,this._getFormatConfig(t)),e(a).each(function(){e(this).val(n)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,""]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(t,i,s){if(null==t||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,a,o,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),d=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,c=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,b=!1,_=function(e){var i=t.length>n+1&&t.charAt(n+1)===e;return i&&n++,i},x=function(e){var t=_(e),s="@"===e?14:"!"===e?20:"y"===e&&t?4:"o"===e?3:2,n="y"===e?s:1,a=RegExp("^\\d{"+n+","+s+"}"),o=i.substring(h).match(a);if(!o)throw"Missing number at position "+h;return h+=o[0].length,parseInt(o[0],10)},w=function(t,s,n){var a=-1,o=e.map(_(t)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,t){var s=t[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(a=t[0],h+=s.length,!1):void 0}),-1!==a)return a+1;throw"Unknown name at position "+h},k=function(){if(i.charAt(h)!==t.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;t.length>n;n++)if(b)"'"!==t.charAt(n)||_("'")?k():b=!1;else switch(t.charAt(n)){case"d":v=x("d");break;case"D":w("D",d,c);break;case"o":y=x("o");break;case"m":g=x("m");break;case"M":g=w("M",p,f);break;case"y":m=x("y");break;case"@":r=new Date(x("@")),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"!":r=new Date((x("!")-this._ticksTo1970)/1e4),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"'":_("'")?k():b=!0;break;default:k()}if(i.length>h&&(o=i.substr(h),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),y>-1)for(g=1,v=y;;){if(a=this._getDaysInMonth(m,g-1),a>=v)break;g++,v-=a}if(r=this._daylightSavingAdjust(new Date(m,g-1,v)),r.getFullYear()!==m||r.getMonth()+1!==g||r.getDate()!==v)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,o=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>s+1&&e.charAt(s+1)===t;return i&&s++,i},l=function(e,t,i){var s=""+t;if(h(e))for(;i>s.length;)s="0"+s;return s},u=function(e,t,i,s){return h(e)?s[t]:i[t]},d="",c=!1;if(t)for(s=0;e.length>s;s++)if(c)"'"!==e.charAt(s)||h("'")?d+=e.charAt(s):c=!1;else switch(e.charAt(s)){case"d":d+=l("d",t.getDate(),2);break;case"D":d+=u("D",t.getDay(),n,a);break;case"o":d+=l("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":d+=l("m",t.getMonth()+1,2);break;case"M":d+=u("M",t.getMonth(),o,r);break;case"y":d+=h("y")?t.getFullYear():(10>t.getYear()%100?"0":"")+t.getYear()%100;break;case"@":d+=t.getTime();break;case"!":d+=1e4*t.getTime()+this._ticksTo1970;break;case"'":h("'")?d+="'":c=!0;break;default:d+=e.charAt(s)}return d},_possibleChars:function(e){var t,i="",s=!1,n=function(i){var s=e.length>t+1&&e.charAt(t+1)===i;return s&&t++,s};for(t=0;e.length>t;t++)if(s)"'"!==e.charAt(t)||n("'")?i+=e.charAt(t):s=!1;else switch(e.charAt(t)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,t){return void 0!==e.settings[t]?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,"dateFormat"),s=e.lastVal=e.input?e.input.val():null,n=this._getDefaultDate(e),a=n,o=this._getFormatConfig(e);try{a=this.parseDate(i,s,o)||n}catch(r){s=t?"":s}e.selectedDay=a.getDate(),e.drawMonth=e.selectedMonth=a.getMonth(),e.drawYear=e.selectedYear=a.getFullYear(),e.currentDay=s?a.getDate():0,e.currentMonth=s?a.getMonth():0,e.currentYear=s?a.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,"defaultDate"),new Date))},_determineDate:function(t,i,s){var n=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},a=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,"dateFormat"),i,e.datepicker._getFormatConfig(t))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,a=n.getFullYear(),o=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o));break;case"y":case"Y":a+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o))}l=h.exec(i)}return new Date(a,o,r)},o=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return o=o&&"Invalid Date"==""+o?s:o,o&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var s=!t,n=e.selectedMonth,a=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),n===e.selectedMonth&&a===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(s?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&""===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,"stepMonths"),s="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){e.datepicker._adjustDate(s,-i,"M")},next:function(){e.datepicker._adjustDate(s,+i,"M")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(s)},selectDay:function(){return e.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return e.datepicker._selectMonthYear(s,this,"Y"),!1}};e(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t,i,s,n,a,o,r,h,l,u,d,c,p,f,m,g,v,y,b,_,x,w,k,T,D,S,M,C,N,A,P,I,z,H,F,E,O,j,W,L=new Date,R=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(e,"isRTL"),B=this._get(e,"showButtonPanel"),J=this._get(e,"hideIfNoPrevNext"),q=this._get(e,"navigationAsDateFormat"),K=this._getNumberOfMonths(e),V=this._get(e,"showCurrentAtPos"),U=this._get(e,"stepMonths"),Q=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),X=this._getMinMaxDate(e,"min"),$=this._getMinMaxDate(e,"max"),Z=e.drawMonth-V,et=e.drawYear;if(0>Z&&(Z+=12,et--),$)for(t=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-K[0]*K[1]+1,$.getDate())),t=X&&X>t?X:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,"prevText"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-U,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,-1,et,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":J?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(e,"nextText"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z+U,1)),this._getFormatConfig(e)):n,a=this._canAdjustMonth(e,1,et,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":J?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",o=this._get(e,"currentText"),r=this._get(e,"gotoCurrent")&&e.currentDay?G:R,o=q?this.formatDate(o,r,this._getFormatConfig(e)):o,h=e.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(e,"closeText")+"</button>",l=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(e,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+o+"</button>":"")+(Y?"":h)+"</div>":"",u=parseInt(this._get(e,"firstDay"),10),u=isNaN(u)?0:u,d=this._get(e,"showWeek"),c=this._get(e,"dayNames"),p=this._get(e,"dayNamesMin"),f=this._get(e,"monthNames"),m=this._get(e,"monthNamesShort"),g=this._get(e,"beforeShowDay"),v=this._get(e,"showOtherMonths"),y=this._get(e,"selectOtherMonths"),b=this._getDefaultDate(e),_="",w=0;K[0]>w;w++){for(k="",this.maxRows=4,T=0;K[1]>T;T++){if(D=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),S=" ui-corner-all",M="",Q){if(M+="<div class='ui-datepicker-group",K[1]>1)switch(T){case 0:M+=" ui-datepicker-group-first",S=" ui-corner-"+(Y?"right":"left");break;case K[1]-1:M+=" ui-datepicker-group-last",S=" ui-corner-"+(Y?"left":"right");break;default:M+=" ui-datepicker-group-middle",S=""}M+="'>"}for(M+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+S+"'>"+(/all|left/.test(S)&&0===w?Y?a:s:"")+(/all|right/.test(S)&&0===w?Y?s:a:"")+this._generateMonthYearHeader(e,Z,et,X,$,w>0||T>0,f,m)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",C=d?"<th class='ui-datepicker-week-col'>"+this._get(e,"weekHeader")+"</th>":"",x=0;7>x;x++)N=(x+u)%7,C+="<th scope='col'"+((x+u+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+c[N]+"'>"+p[N]+"</span></th>";for(M+=C+"</tr></thead><tbody>",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),P=(this._getFirstDayOfMonth(et,Z)-u+7)%7,I=Math.ceil((P+A)/7),z=Q?this.maxRows>I?this.maxRows:I:I,this.maxRows=z,H=this._daylightSavingAdjust(new Date(et,Z,1-P)),F=0;z>F;F++){for(M+="<tr>",E=d?"<td class='ui-datepicker-week-col'>"+this._get(e,"calculateWeek")(H)+"</td>":"",x=0;7>x;x++)O=g?g.apply(e.input?e.input[0]:null,[H]):[!0,""],j=H.getMonth()!==Z,W=j&&!y||!O[0]||X&&X>H||$&&H>$,E+="<td class='"+((x+u+6)%7>=5?" ui-datepicker-week-end":"")+(j?" ui-datepicker-other-month":"")+(H.getTime()===D.getTime()&&Z===e.selectedMonth&&e._keyEvent||b.getTime()===H.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(W?" "+this._unselectableClass+" ui-state-disabled":"")+(j&&!v?"":" "+O[1]+(H.getTime()===G.getTime()?" "+this._currentClass:"")+(H.getTime()===R.getTime()?" ui-datepicker-today":""))+"'"+(j&&!v||!O[2]?"":" title='"+O[2].replace(/'/g,"'")+"'")+(W?"":" data-handler='selectDay' data-event='click' data-month='"+H.getMonth()+"' data-year='"+H.getFullYear()+"'")+">"+(j&&!v?" ":W?"<span class='ui-state-default'>"+H.getDate()+"</span>":"<a class='ui-state-default"+(H.getTime()===R.getTime()?" ui-state-highlight":"")+(H.getTime()===G.getTime()?" ui-state-active":"")+(j?" ui-priority-secondary":"")+"' href='#'>"+H.getDate()+"</a>")+"</td>",H.setDate(H.getDate()+1),H=this._daylightSavingAdjust(H);M+=E+"</tr>"}Z++,Z>11&&(Z=0,et++),M+="</tbody></table>"+(Q?"</div>"+(K[0]>0&&T===K[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,"changeMonth"),v=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",_="";if(a||!g)_+="<span class='ui-datepicker-month'>"+o[t]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",u=0;12>u;u++)(!h||u>=s.getMonth())&&(!l||n.getMonth()>=u)&&(_+="<option value='"+u+"'"+(u===t?" selected='selected'":"")+">"+r[u]+"</option>");_+="</select>"}if(y||(b+=_+(!a&&g&&v?"":" ")),!e.yearshtml)if(e.yearshtml="",a||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(d=this._get(e,"yearRange").split(":"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";m>=f;f++)e.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";e.yearshtml+="</select>",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,"yearSuffix"),y&&(b+=(!a&&g&&v?"":" ")+_),b+="</div>"},_adjustInstDate:function(e,t,i){var s=e.drawYear+("Y"===i?t:0),n=e.drawMonth+("M"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+("D"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,"min"),a=this._getMinMaxDate(e,"max"),o=null,r=null,h=this._get(e,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(o+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t="string"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?"object"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e("#"+e.datepicker._mainDivId).length&&e("body").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.11.2",e.datepicker,e.widget("ui.draggable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),"handle"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.options;return this._blurActiveElement(t),this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=e(this);return e("<div>").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var i=this.document[0];if(this.handleElement.is(t.target))try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(s){}},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===e(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._normalizeRightBottom(),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(e){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:e.pageX-this.offset.left,top:e.pageY-this.offset.top}},_mouseDrag:function(t,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.handleElement.removeClass("ui-draggable-handle")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper),n=s?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css("left"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options,a=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)
-},_convertPositionTo:function(e,t){t||(t=this.position);var i="absolute"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),e.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),e.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),"y"===o.axis&&(h=this.originalPageX),"x"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){"y"!==this.options.axis&&"auto"!==this.helper.css("right")&&(this.helper.width(this.helper.width()),this.helper.css("right","auto")),"x"!==this.options.axis&&"auto"!==this.helper.css("bottom")&&(this.helper.height(this.helper.height()),this.helper.css("bottom","auto"))},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i,s){var n=e.extend({},i,{item:s.element});s.sortables=[],e(s.options.connectToSortable).each(function(){var i=e(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",t,n))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,e.each(s.sortables,function(){var e=this;e.isOver?(e.isOver=0,s.cancelHelperRemoval=!0,e.cancelHelperRemoval=!1,e._storedCSS={position:e.placeholder.css("position"),top:e.placeholder.css("top"),left:e.placeholder.css("left")},e._mouseStop(t),e.options.helper=e.options._helper):(e.cancelHelperRemoval=!0,e._trigger("deactivate",t,n))})},drag:function(t,i,s){e.each(s.sortables,function(){var n=!1,a=this;a.positionAbs=s.positionAbs,a.helperProportions=s.helperProportions,a.offset.click=s.offset.click,a._intersectsWith(a.containerCache)&&(n=!0,e.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==a&&this._intersectsWith(this.containerCache)&&e.contains(a.element[0],this.element[0])&&(n=!1),n})),n?(a.isOver||(a.isOver=1,a.currentItem=i.helper.appendTo(a.element).data("ui-sortable-item",!0),a.options._helper=a.options.helper,a.options.helper=function(){return i.helper[0]},t.target=a.currentItem[0],a._mouseCapture(t,!0),a._mouseStart(t,!0,!0),a.offset.click.top=s.offset.click.top,a.offset.click.left=s.offset.click.left,a.offset.parent.left-=s.offset.parent.left-a.offset.parent.left,a.offset.parent.top-=s.offset.parent.top-a.offset.parent.top,s._trigger("toSortable",t),s.dropped=a.element,e.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,a.fromOutside=s),a.currentItem&&(a._mouseDrag(t),i.position=a.position)):a.isOver&&(a.isOver=0,a.cancelHelperRemoval=!0,a.options._revert=a.options.revert,a.options.revert=!1,a._trigger("out",t,a._uiHash(a)),a._mouseStop(t,!0),a.options.revert=a.options._revert,a.options.helper=a.options._helper,a.placeholder&&a.placeholder.remove(),s._refreshOffsets(t),i.position=s._generatePosition(t,!0),s._trigger("fromSortable",t),s.dropped=!1,e.each(s.sortables,function(){this.refreshPositions()}))})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,i,s){var n=e("body"),a=s.options;n.css("cursor")&&(a._cursor=n.css("cursor")),n.css("cursor",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e("body").css("cursor",n._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("opacity")&&(a._opacity=n.css("opacity")),n.css("opacity",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css("opacity",n._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.scrollParentNotHidden[0],r=s.document[0];o!==r&&"HTML"!==o.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY<n.scrollSensitivity?o.scrollTop=a=o.scrollTop+n.scrollSpeed:t.pageY-s.overflowOffset.top<n.scrollSensitivity&&(o.scrollTop=a=o.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+o.offsetWidth-t.pageX<n.scrollSensitivity?o.scrollLeft=a=o.scrollLeft+n.scrollSpeed:t.pageX-s.overflowOffset.left<n.scrollSensitivity&&(o.scrollLeft=a=o.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(t.pageY-e(r).scrollTop()<n.scrollSensitivity?a=e(r).scrollTop(e(r).scrollTop()-n.scrollSpeed):e(window).height()-(t.pageY-e(r).scrollTop())<n.scrollSensitivity&&(a=e(r).scrollTop(e(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(t.pageX-e(r).scrollLeft()<n.scrollSensitivity?a=e(r).scrollLeft(e(r).scrollLeft()-n.scrollSpeed):e(window).width()-(t.pageX-e(r).scrollLeft())<n.scrollSensitivity&&(a=e(r).scrollLeft(e(r).scrollLeft()+n.scrollSpeed)))),a!==!1&&e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(s,t)}}),e.ui.plugin.add("draggable","snap",{start:function(t,i,s){var n=s.options;s.snapElements=[],e(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var t=e(this),i=t.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:i.top,left:i.left})})},drag:function(t,i,s){var n,a,o,r,h,l,u,d,c,p,f=s.options,m=f.snapTolerance,g=i.offset.left,v=g+s.helperProportions.width,y=i.offset.top,b=y+s.helperProportions.height;for(c=s.snapElements.length-1;c>=0;c--)h=s.snapElements[c].left-s.margins.left,l=h+s.snapElements[c].width,u=s.snapElements[c].top-s.margins.top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||a||o||r,"outer"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d-s.helperProportions.height,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add("draggable","stack",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});o.length&&(n=parseInt(e(o[0]).css("zIndex"),10)||0,e(o).each(function(t){e(this).css("zIndex",n+t)}),this.css("zIndex",n+o.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("zIndex")&&(a._zIndex=n.css("zIndex")),n.css("zIndex",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css("zIndex",n._zIndex)}}),e.ui.draggable,e.widget("ui.resizable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=this.element.children(this.handles[i]).first().show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===n?this.axis+"-resize":n),o.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var i,s,n=this.originalMousePosition,a=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,h=this._change[a];return this._updatePrevProperties(),h?(i=h.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var e={};return this.position.top!==this.prevPosition.top&&(e.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(e.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(e.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(e.height=this.size.height+"px"),this.helper.css(e),e},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===s&&(e.left=t.left+(i.width-e.width),e.top=null),"nw"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidth<e.width,n=this._isNumber(e.height)&&t.maxHeight&&t.maxHeight<e.height,a=this._isNumber(e.width)&&t.minWidth&&t.minWidth>e.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_getPaddingPlusBorderDimensions:function(e){for(var t=0,i=[],s=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],n=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];4>t;t++)i[t]=parseInt(s[t],10)||0,i[t]+=parseInt(n[t],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e,t=0,i=this.helper||this.element;this._proportionallyResizeElements.length>t;t++)e=this._proportionallyResizeElements[t],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(e)),e.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable("instance"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e(["Top","Right","Left","Bottom"]).each(function(e,s){i[e]=h._num(t.css("padding"+s))}),h.containerOffset=t.offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,"left")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t){var i,s,n,a,o=e(this).resizable("instance"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,d={top:0,left:0},c=o.containerElement,p=!0;c[0]!==document&&/static/.test(c.css("position"))&&(d=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-d.left),u&&(o.size.height=o.size.width/o.aspectRatio,p=!1),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,p=!1),o.position.top=o._helper?h.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),i=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-d.left:o.offset.left-h.left)),s=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-d.top:o.offset.top-h.top)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio,p=!1)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio,p=!1)),p||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=e(this).resizable("instance"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).resizable("instance"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t,i=e(this).resizable("instance"),s=i.options,n=i.size,a=i.originalSize,o=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,u=h[1]||1,d=Math.round((n.width-a.width)/l)*l,c=Math.round((n.height-a.height)/u)*u,p=a.width+d,f=a.height+c,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>p,y=s.minHeight&&s.minHeight>f;s.grid=h,v&&(p+=l),y&&(f+=u),m&&(p-=l),g&&(f-=u),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=o.top-c):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=o.left-d):((0>=f-u||0>=p-l)&&(t=i._getPaddingPlusBorderDimensions(this)),f-u>0?(i.size.height=f,i.position.top=o.top-c):(f=u-t.height,i.size.height=f,i.position.top=o.top+a.height-f),p-l>0?(i.size.width=p,i.position.left=o.left-d):(p=u-t.height,i.size.width=p,i.position.left=o.left+a.width-p))}}),e.ui.resizable,e.widget("ui.dialog",{version:"1.11.2",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css("top",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger("beforeClose",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{i=this.document[0].activeElement,i&&"body"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger("close",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+e(this).css("z-index")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",a+1),s=!0),s&&!i&&this._trigger("focus",t),s},open:function(){var t=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var e=this._focusedElement;e||(e=this.element.find("[autofocus]")),e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0;
-if(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("<button type='button'></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html(" "),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e("<button></button>",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){e(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,t(n))},drag:function(e,s){i._trigger("drag",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(o>=0?"+":"")+o+" "+"top"+(r>=0?"+":"")+r,of:i.window},e(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,t(n))},resize:function(e,s){i._trigger("resize",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},e(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,t(a))}}).css("position",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=e(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data("ui-dialog-instances");return e||(e=[],this.document.data("ui-dialog-instances",e)),e},_minHeight:function(){var e=this.options;return"auto"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;"dialogClass"===e&&n.removeClass(this.options.dialogClass).addClass(t),"disabled"!==e&&(this._super(e,t),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:""+t}),"draggable"===e&&(i=n.is(":data(ui-draggable)"),i&&!t&&n.draggable("destroy"),!i&&t&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(s=n.is(":data(ui-resizable)"),s&&!t&&n.resizable("destroy"),s&&"string"==typeof t&&n.resizable("option","handles",t),s||t===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):"none","auto"===s.height?this.element.css({minHeight:t,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("<div>").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(".ui-dialog").length?!0:!!e(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data("ui-dialog-overlays")-1;e?this.document.data("ui-dialog-overlays",e):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}}),e.widget("ui.droppable",{version:"1.11.2",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){if("accept"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if("scope"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=e(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,n){if(!i.offset)return!1;var a=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,r=a+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+i.proportions().width,c=u+i.proportions().height;switch(s){case"fit":return a>=l&&d>=r&&o>=u&&c>=h;case"intersect":return a+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case"pointer":return e(n.pageY,u,i.proportions().height)&&e(n.pageX,l,i.proportions().width);case"touch":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(a>=l&&d>=a||r>=l&&d>=r||l>a&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e(this).droppable("instance").options.scope===n}),a.length&&(s=e(a[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable;var y="ui-effects-",b=e;e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?("0,0,0,0"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},d={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e("<p>")[0],f=e.each;p.style.cssText="background-color:rgba(1,1,1,.5)",c.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c="array"),"string"===c?this.parse(s(n)||a._default):"array"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):"object"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if("alpha"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d="array"===r||"object"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d["object"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h="alpha"===t?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===o?u:("function"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(" ");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r="";if("transparent"!==n&&("string"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?t.parentNode:t;(""===r||"transparent"===r)&&o&&o.style;)try{r=e.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f(["Top","Right","Bottom","Left"],function(i,s){t["border"+s+"Color"]=e}),t}},a=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(b),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,i){e.fx.step[i]=function(e){("none"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(b.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+"Class"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return"boolean"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:"number"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:"object"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:"1.11.2",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(y+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(y+t[s]),void 0===i&&(i=""),e.css(t[s],i))},setMode:function(e,t){return"toggle"===t&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=e[0]/t.height}switch(e[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},s=e("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),"static"===t.css("position")?(s.css({position:"relative"}),t.css({position:"relative"})):(e.extend(i,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||"fx",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||"boolean"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each(["em","px","%","pt"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing["easeIn"+t]=i,e.easing["easeOut"+t]=function(e){return 1-i(1-e)},e.easing["easeInOut"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(o,t.mode||"hide"),d=t.direction||"up",c=r.test(d),p=c?"height":"width",f=c?"top":"left",m=h.test(d),g={},v="show"===u;o.parent().is(".ui-effects-wrapper")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?"bottom":"right",0).css(c?"top":"left","auto").css({position:"absolute"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){"hide"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"effect"),l="hide"===h,u="show"===h,d=t.direction||"up",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v="up"===d||"down"===d?"top":"left",y="up"===d||"left"===d,b=o.queue(),_=b.length;for((u||l)&&r.push("opacity"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o["top"===v?"outerHeight":"outerWidth"]()/3),u&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"hide"),l="show"===h,u=t.direction||"vertical",d="vertical"===u,c=d?"height":"width",p=d?"top":"left",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","opacity","height","width"],o=e.effects.setMode(n,t.mode||"hide"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h?"pos":"neg",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===u?-s:s),d[l]=(r?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*y}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=["position","top","bottom","left","right","height","width"],r=e.effects.setMode(a,t.mode||"hide"),h="show"===r,l="hide"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?["width","height"]:["height","width"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=["backgroundImage","backgroundColor","opacity"],a=e.effects.setMode(s,t.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],d=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],c=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),f=t.restore||"effect"!==p,m=t.scale||"both",g=t.origin||["middle","center"],v=o.css("position"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===t.mode&&"show"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||("show"===p?b:s),o.to=t.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(d=d.concat(["marginTop","marginBottom"]).concat(u),c=c.concat(["marginLeft","marginRight"]),l=r.concat(d).concat(c),o.find("*[width]").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};
-f&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),e.effects.restore(o,y),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||"effect"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===a?0:100),r=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=t.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"hide"),a="hide"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"effect"),r=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","width","height"],o=e.effects.setMode(n,t.mode||"show"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a="fixed"===n.css("position"),o=e("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})},e.widget("ui.progressbar",{version:"1.11.2",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),e.widget("ui.selectable",e.ui.mouse,{version:"1.11.2",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}}),e.widget("ui.selectmenu",{version:"1.11.2",defaultElement:"<select>",options:{appendTo:null,disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this.options.disabled&&this.disable()},_drawButton:function(){var t=this,i=this.element.attr("tabindex");this.label=e("label[for='"+this.ids.element+"']").attr("for",this.ids.button),this._on(this.label,{click:function(e){this.button.focus(),e.preventDefault()}}),this.element.hide(),this.button=e("<span>",{"class":"ui-selectmenu-button ui-widget ui-state-default ui-corner-all",tabindex:i||this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true"}).insertAfter(this.element),e("<span>",{"class":"ui-icon "+this.options.icons.button}).prependTo(this.button),this.buttonText=e("<span>",{"class":"ui-selectmenu-text"}).appendTo(this.button),this._setText(this.buttonText,this.element.find("option:selected").text()),this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){t.menuItems||t._refreshMenu()}),this._hoverable(this.button),this._focusable(this.button)},_drawMenu:function(){var t=this;this.menu=e("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=e("<div>",{"class":"ui-selectmenu-menu ui-front"}).append(this.menu).appendTo(this._appendTo()),this.menuInstance=this.menu.menu({role:"listbox",select:function(e,i){e.preventDefault(),t._setSelection(),t._select(i.item.data("ui-selectmenu-item"),e)},focus:function(e,i){var s=i.item.data("ui-selectmenu-item");null!=t.focusIndex&&s.index!==t.focusIndex&&(t._trigger("focus",e,{item:s}),t.isOpen||t._select(s,e)),t.focusIndex=s.index,t.button.attr("aria-activedescendant",t.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this._setText(this.buttonText,this._getSelectedItem().text()),this.options.width||this._resizeButton()},_refreshMenu:function(){this.menu.empty();var e,t=this.element.find("option");t.length&&(this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup"),e=this._getSelectedItem(),this.menuInstance.focus(null,e),this._setAria(e.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(e){this.options.disabled||(this.menuItems?(this.menu.find(".ui-state-focus").removeClass("ui-state-focus"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",e))},_position:function(){this.menuWrap.position(e.extend({of:this.button},this.options.position))},close:function(e){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",e))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(t,i){var s=this,n="";e.each(i,function(i,a){a.optgroup!==n&&(e("<li>",{"class":"ui-selectmenu-optgroup ui-menu-divider"+(a.element.parent("optgroup").prop("disabled")?" ui-state-disabled":""),text:a.optgroup}).appendTo(t),n=a.optgroup),s._renderItemData(t,a)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-selectmenu-item",t)},_renderItem:function(t,i){var s=e("<li>");return i.disabled&&s.addClass("ui-state-disabled"),this._setText(s,i.label),s.appendTo(t)},_setText:function(e,t){t?e.text(t):e.html(" ")},_move:function(e,t){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex):(i=this.menuItems.eq(this.element[0].selectedIndex),n+=":not(.ui-state-disabled)"),s="first"===e||"last"===e?i["first"===e?"prevAll":"nextAll"](n).eq(-1):i[e+"All"](n).eq(0),s.length&&this.menuInstance.focus(t,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(e){this[this.isOpen?"close":"open"](e)},_setSelection:function(){var e;this.range&&(window.getSelection?(e=window.getSelection(),e.removeAllRanges(),e.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(t){this.isOpen&&(e(t.target).closest(".ui-selectmenu-menu, #"+this.ids.button).length||this.close(t))}},_buttonEvents:{mousedown:function(){var e;window.getSelection?(e=window.getSelection(),e.rangeCount&&(this.range=e.getRangeAt(0))):this.range=document.selection.createRange()},click:function(e){this._setSelection(),this._toggle(e)},keydown:function(t){var i=!0;switch(t.keyCode){case e.ui.keyCode.TAB:case e.ui.keyCode.ESCAPE:this.close(t),i=!1;break;case e.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case e.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case e.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case e.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case e.ui.keyCode.LEFT:this._move("prev",t);break;case e.ui.keyCode.RIGHT:this._move("next",t);break;case e.ui.keyCode.HOME:case e.ui.keyCode.PAGE_UP:this._move("first",t);break;case e.ui.keyCode.END:case e.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),i=!1}i&&t.preventDefault()}},_selectFocusedItem:function(e){var t=this.menuItems.eq(this.focusIndex);t.hasClass("ui-state-disabled")||this._select(t.data("ui-selectmenu-item"),e)},_select:function(e,t){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=e.index,this._setText(this.buttonText,e.label),this._setAria(e),this._trigger("select",t,{item:e}),e.index!==i&&this._trigger("change",t,{item:e}),this.close(t)},_setAria:function(e){var t=this.menuItems.eq(e.index).attr("id");this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(e,t){"icons"===e&&this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(t.button),this._super(e,t),"appendTo"===e&&this.menuWrap.appendTo(this._appendTo()),"disabled"===e&&(this.menuInstance.option("disabled",t),this.button.toggleClass("ui-state-disabled",t).attr("aria-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)),"width"===e&&this._resizeButton()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_toggleAttr:function(){this.button.toggleClass("ui-corner-top",this.isOpen).toggleClass("ui-corner-all",!this.isOpen).attr("aria-expanded",this.isOpen),this.menuWrap.toggleClass("ui-selectmenu-open",this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var e=this.options.width;e||(e=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(e)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop("disabled")}},_parseOptions:function(t){var i=[];t.each(function(t,s){var n=e(s),a=n.parent("optgroup");i.push({element:n,index:t,value:n.attr("value"),label:n.text(),optgroup:a.attr("label")||"",disabled:a.prop("disabled")||n.prop("disabled")})}),this.items=i},_destroy:function(){this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.label.attr("for",this.ids.element)}}),e.widget("ui.slider",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),t=n.length;i>t;t++)o.push(a);this.handles=n.add(e(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(t){e(this).data("ui-slider-handle-index",t)})},_createRange:function(){var t=this.options,i="";t.range?(t.range===!0&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:e.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=e("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===t.range||"max"===t.range?" ui-slider-range-"+t.range:""))):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,a,o,r,h,l,u=this,d=this.options;return d.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));(n>i||n===i&&(t===u._lastChangedValue||u.values(t)===d.min))&&(n=i,a=e(this),o=t)}),r=this._start(t,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!e(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-a.width()/2,top:t.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,i,s,n,a;return"horizontal"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("start",e,i)},_slide:function(e,t,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(n=this.values(),n[t]=i,a=this._trigger("slide",e,{handle:this.handles[t],value:i,values:n}),s=this.values(t?0:1),a!==!1&&this.values(t,i))):i!==this.value()&&(a=this._trigger("slide",e,{handle:this.handles[t],value:i}),a!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("stop",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._lastChangedValue=t,this._trigger("change",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(t,i){var s,n,a;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),void 0;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(t,i){var s,n=0;switch("range"===t&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),e.isArray(this.options.values)&&(n=this.options.values.length),"disabled"===t&&this.element.toggleClass("ui-state-disabled",!!i),this._super(t,i),t){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue(),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var e=(this.options.max-this._valueMin())%this.options.step;this.max=this.options.max-e},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshValue:function(){var t,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",e(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-t+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-t+"%"},{queue:!1,duration:r.animate}))),t=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(t){var i,s,n,a,o=e(t.target).data("ui-slider-handle-index");switch(t.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(t.target).addClass("ui-state-active"),i=this._start(t,o),i===!1))return}switch(a=this.options.step,s=n=this.options.values&&this.options.values.length?this.values(o):this.value(),t.keyCode){case e.ui.keyCode.HOME:n=this._valueMin();break;case e.ui.keyCode.END:n=this._valueMax();break;case e.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+a);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-a)}this._slide(t,o,n)},keyup:function(t){var i=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass("ui-state-active"))}}}),e.widget("ui.sortable",e.ui.mouse,{version:"1.11.2",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===e.axis||this._isFloating(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+"-item")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+"-item")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=e("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));
-return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<o.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-e(document).scrollTop()<o.scrollSensitivity?r=e(document).scrollTop(e(document).scrollTop()-o.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<o.scrollSensitivity&&(r=e(document).scrollTop(e(document).scrollTop()+o.scrollSpeed)),t.pageX-e(document).scrollLeft()<o.scrollSensitivity?r=e(document).scrollLeft(e(document).scrollLeft()-o.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<o.scrollSensitivity&&(r=e(document).scrollLeft(e(document).scrollLeft()+o.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d="x"===this.options.axis||s+l>r&&h>s+l,c="y"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();return s?this.floating?a&&"right"===a||"down"===n?2:1:n&&("down"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&t||"up"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[],h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?t.currentItem.children().each(function(){e("<td> </td>",t.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(n)}):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?"up":"down"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,e("document"===n.containment?document:window).width()-this.helperProportions.width-this.margins.left,(e("document"===n.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&n.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||n.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(n.push(function(e){this._trigger("remove",e,this._uiHash())}),n.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)t||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!t){for(s=0;n.length>s;s++)n[s].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}}),e.widget("ui.spinner",{version:"1.11.2",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>▲</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>▼</span>"+"</a>"},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget("ui.tabs",{version:"1.11.2",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]
-}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("<div>").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.success(function(e){setTimeout(function(){o.html(e),s._trigger("load",i,r)},1)}).complete(function(e,t){setTimeout(function(){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),e.widget("ui.tooltip",{version:"1.11.2",options:{content:function(){var t=e(this).attr("title")||"";return e("<a>").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))},_removeDescribedBy:function(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t.element)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s.element[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){e.data("ui-tooltip-open")&&n._delay(function(){t&&(t.type=a),this._open(t,e,i)})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){u.of=e,o.is(":hidden")||o.position(u)}var a,o,r,h,l,u=e.extend({},this.options.position);if(s){if(a=this._find(i))return a.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(t&&"mouseover"===t.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),o=a.tooltip,this._addDescribedBy(i,o.attr("id")),o.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),s.clone?(l=s.clone(),l.removeAttr("id").find("[id]").removeAttr("id")):l=s,e("<div>").html(l).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):o.position(e.extend({of:i},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){o.is(":visible")&&(n(u.of),clearInterval(h))},e.fx.interval)),this._trigger("open",t,{tooltip:o}),r={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}},i[0]!==this.element[0]&&(r.remove=function(){this._removeTooltip(o)}),t&&"mouseover"!==t.type||(r.mouseleave="close"),t&&"focusin"!==t.type||(r.focusout="close"),this._on(!0,i,r)}},close:function(t){var i,s=this,n=e(t?t.currentTarget:this.element),a=this._find(n);a&&(i=a.tooltip,a.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),a.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(e(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,i){e(i.element).attr("title",i.title),delete s.parents[t]}),a.closing=!0,this._trigger("close",t,{tooltip:i}),a.hiding||(a.closing=!1)))},_tooltip:function(t){var i=e("<div>").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),s=i.uniqueId().attr("id");return e("<div>").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]={element:t,tooltip:i}},_find:function(e){var t=e.data("ui-tooltip-id");return t?this.tooltips[t]:null},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur"),a=s.element;n.target=n.currentTarget=a[0],t.close(n,!0),e("#"+i).remove(),a.data("ui-tooltip-title")&&(a.attr("title")||a.attr("title",a.data("ui-tooltip-title")),a.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}})});
\ No newline at end of file
--
1.9.3
5
11
09 Sep '15
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
Patch set that fixes worng information about Fedora 21 remote ISO and
adds a new option to Fedora 22.
Paulo Vital (2):
Change the version number of remote Fedora image.
Add Fedora 22 information as remote ISO option
src/distros.d/fedora.json | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
--
2.4.3
3
5
From: Paulo Vital <pvital(a)linux.vnet.ibm.com>
Fixed formattation of Run section to a better understand of firewall and SELinux
commands input.
Signed-off-by: Paulo Vital <pvital(a)linux.vnet.ibm.com>
---
docs/README.md | 30 ++++++++++++++++--------------
1 file changed, 16 insertions(+), 14 deletions(-)
diff --git a/docs/README.md b/docs/README.md
index 1b31ccf..b128510 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -25,32 +25,34 @@ Run
If you cannot access Wok, take a look at these 2 points:
-1. Firewall
+1. Firewall:
Wok uses by default the ports 8000, 8001 and 64667. To allow incoming connections:
For system using firewalld, do:
- sudo firewall-cmd --add-port=8000/tcp --permanent
- sudo firewall-cmd --add-port=8001/tcp --permanent
- sudo firewall-cmd --add-port=64667/tcp --permanent
- sudo firewall-cmd --reload
+
+ $ sudo firewall-cmd --add-port=8000/tcp --permanent
+ $ sudo firewall-cmd --add-port=8001/tcp --permanent
+ $ sudo firewall-cmd --add-port=64667/tcp --permanent
+ $ sudo firewall-cmd --reload
For openSUSE systems, do:
- sudo /sbin/SuSEfirewall2 open EXT TCP 8000
- sudo /sbin/SuSEfirewall2 open EXT TCP 8001
- sudo /sbin/SuSEfirewall2 open EXT TCP 64667
+
+ $ sudo /sbin/SuSEfirewall2 open EXT TCP 8000
+ $ sudo /sbin/SuSEfirewall2 open EXT TCP 8001
+ $ sudo /sbin/SuSEfirewall2 open EXT TCP 64667
For system using iptables, do:
- sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
- sudo iptables -A INPUT -p tcp --dport 8001 -j ACCEPT
- sudo iptables -A INPUT -p tcp --dport 64667 -j ACCEPT
- Don't forget to correctly save the rules.
+ $ sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
+ $ sudo iptables -A INPUT -p tcp --dport 8001 -j ACCEPT
+ $ sudo iptables -A INPUT -p tcp --dport 64667 -j ACCEPT
+ Don't forget to correctly save the rules.
-2. SELinux
+2. SELinux:
Allow httpd_t context for Wok web server:
- semanage permissive -a httpd_t
+ $ sudo semanage permissive -a httpd_t
Participating
--
2.4.3
2
1
The debugreports and screenshots generated were being saved to
/var/lib/wok instead of /var/lib/kimchi, due to absence of
plugin-specific state_dir config. This patch adds it.
Now, when the plugin is installed, those files are saved to
/var/lib/<plugin_name>, and, when running from source, to
plugins/<plugin_name>/data.
That also affects Ginger, which backups are now saved to
/var/lib/ginger/ginger_backups.
Signed-off-by: Lucio Correia <luciojhc(a)linux.vnet.ibm.com>
---
src/wok/config.py.in | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/src/wok/config.py.in b/src/wok/config.py.in
index 5ffa936..08da028 100644
--- a/src/wok/config.py.in
+++ b/src/wok/config.py.in
@@ -88,10 +88,13 @@ class PluginPaths(Paths):
self.plugin_dir = os.path.join('plugins', name)
if self.installed:
+ self.state_dir = '@localstatedir@/lib/%s' % name
self.conf_dir = '@sysconfdir@/wok/plugins.d'
self.src_dir = os.path.join('@wokdir@', self.plugin_dir)
self.mo_dir = '@prefix@/share/locale'
else:
+ self.state_dir = self.add_prefix(os.path.join(self.plugin_dir,
+ 'data'))
self.conf_dir = self.add_prefix(self.plugin_dir)
self.src_dir = self.add_prefix(self.plugin_dir)
self.mo_dir = self.add_prefix(os.path.join(self.plugin_dir, 'mo'))
--
1.7.1
3
2
Lucio Correia (3):
Fix makefile to ignore Kimchi plugin
Fix unnecessary/duplicated imports
Fix PEP8 errors
Makefile.am | 2 +-
plugins/kimchi/config.py.in | 1 -
plugins/kimchi/mockmodel.py | 19 +-
plugins/kimchi/model/config.py | 2 +-
plugins/kimchi/model/cpuinfo.py | 2 +-
plugins/kimchi/model/debugreports.py | 2 +-
plugins/kimchi/model/diskutils.py | 4 +-
plugins/kimchi/model/hostdev.py | 4 +-
plugins/kimchi/model/libvirtconnection.py | 12 +-
plugins/kimchi/model/networks.py | 3 +-
plugins/kimchi/model/peers.py | 4 +-
plugins/kimchi/model/storagepools.py | 13 +-
plugins/kimchi/model/storagevolumes.py | 9 +-
plugins/kimchi/model/vms.py | 32 ++-
plugins/kimchi/model/vmstorages.py | 6 +-
plugins/kimchi/osinfo.py | 1 -
plugins/kimchi/root.py | 1 -
plugins/kimchi/screenshot.py | 2 +-
plugins/kimchi/tests/test_authorization.py | 36 ++-
plugins/kimchi/tests/test_config.py.in | 8 +-
plugins/kimchi/tests/test_exception.py | 26 ++-
plugins/kimchi/tests/test_host.py | 30 ++-
plugins/kimchi/tests/test_mock_network.py | 4 +-
plugins/kimchi/tests/test_mock_storagepool.py | 12 +-
plugins/kimchi/tests/test_mock_storagevolume.py | 8 +-
plugins/kimchi/tests/test_mockmodel.py | 6 +-
plugins/kimchi/tests/test_model.py | 24 +-
plugins/kimchi/tests/test_model_network.py | 8 +-
plugins/kimchi/tests/test_model_storagepool.py | 20 +-
plugins/kimchi/tests/test_model_storagevolume.py | 18 +-
plugins/kimchi/tests/test_plugin.py | 1 -
plugins/kimchi/tests/test_rest.py | 318 ++++++++++++++-------
plugins/kimchi/tests/test_template.py | 61 +++--
plugins/kimchi/tests/utils.py | 8 +-
plugins/kimchi/utils.py | 1 -
src/wok/cachebust.py | 2 +-
src/wok/server.py | 11 +-
src/wok/utils.py | 6 +-
38 files changed, 466 insertions(+), 261 deletions(-)
3
5
These changes are already included in "[PATCH V3 00/34] Split code into Wok
server and Kimchi plugin" and don't need to be reviewed again.
This patchset is just to make the upstream branch "wok" identical to
"[PATCH V3 00/34] Split code into Wok server and Kimchi plugin".
Signed-off-by: Lucio Correia <luciojhc(a)linux.vnet.ibm.com>
Lucio Correia (6):
Move back some basic UI files to wok
Renamed some moved-back kimchi-named files to wok
Unduplicate some UI files
Update makefiles to reflect UI changes
Replace kimchi by wok calls to reflect UI changes
Create an icon.css with kimchi plugin specific layout
plugins/kimchi/configure.ac | 4 -
plugins/kimchi/ui/Makefile.am | 2 +-
plugins/kimchi/ui/css/theme-default/button.css | 524 --------------------
plugins/kimchi/ui/css/theme-default/icon.css | 106 ++++
plugins/kimchi/ui/css/theme-default/message.css | 135 -----
plugins/kimchi/ui/css/theme-default/popover.css | 124 -----
plugins/kimchi/ui/images/theme-default/bg-mask.png | Bin 2899 -> 0 bytes
.../ui/images/theme-default/folder-arrow-down.png | Bin 2956 -> 0 bytes
.../kimchi/ui/images/theme-default/logo-white.png | Bin 9879 -> 0 bytes
plugins/kimchi/ui/js/Makefile.am | 4 +-
.../ui/js/src/kimchi.guest_storage_add.main.js | 4 +-
plugins/kimchi/ui/js/src/kimchi.host.js | 14 +-
.../kimchi/ui/js/src/kimchi.template_edit_main.js | 4 +-
plugins/kimchi/ui/libs/Makefile.am | 22 -
plugins/kimchi/ui/libs/themes/Makefile.am | 18 -
plugins/kimchi/ui/libs/themes/base/Makefile.am | 22 -
.../kimchi/ui/libs/themes/base/images/Makefile.am | 20 -
.../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 457 -> 0 bytes
.../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 351 -> 0 bytes
.../base/images/ui-bg_flat_10_000000_40x100.png | Bin 244 -> 0 bytes
.../base/images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 301 -> 0 bytes
.../base/images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 387 -> 0 bytes
.../images/ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 5854 -> 0 bytes
.../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 317 -> 0 bytes
.../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 367 -> 0 bytes
.../themes/base/images/ui-icons_228ef1_256x240.png | Bin 4599 -> 0 bytes
.../themes/base/images/ui-icons_ef8c08_256x240.png | Bin 4599 -> 0 bytes
.../themes/base/images/ui-icons_ffd27a_256x240.png | Bin 4599 -> 0 bytes
.../themes/base/images/ui-icons_ffffff_256x240.png | Bin 6468 -> 0 bytes
plugins/kimchi/ui/pages/error.html.tmpl | 69 ---
ui/css/theme-default/button.css | 85 ----
.../ui => ui}/css/theme-default/circleGauge.css | 0
.../kimchi/ui => ui}/css/theme-default/form.css | 0
.../kimchi/ui => ui}/css/theme-default/grid.css | 2 +-
.../css/theme-default/jquery-ui.custom.css | 0
.../ui => ui}/css/theme-default/line-chart.css | 0
.../ui => ui}/css/theme-default/tile-check.css | 0
.../kimchi/ui => ui}/css/theme-default/toolbar.css | 0
.../ui => ui}/images/theme-default/alert.png | Bin 3537 -> 3537 bytes
ui/images/theme-default/arrow-down.png | Bin 0 -> 537 bytes
.../ui => ui}/images/theme-default/check-green.png | Bin 3501 -> 3501 bytes
.../ui => ui}/images/theme-default/check-grey.png | Bin 3535 -> 3535 bytes
.../images/theme-default/folder-arrow-right.png | Bin 2958 -> 2958 bytes
.../ui => ui}/images/theme-default/icon-alert.png | Bin 3545 -> 3545 bytes
.../ui => ui}/images/theme-default/icon-event.png | Bin 3791 -> 3791 bytes
.../images/theme-default/icon-setting.png | Bin 3664 -> 3664 bytes
.../ui => ui}/images/theme-default/icon-tool.png | Bin 4466 -> 4466 bytes
.../ui => ui}/images/theme-default/thumb-guest.png | Bin 3896 -> 3896 bytes
.../ui => ui}/images/theme-default/thumb-host.png | Bin 5069 -> 5069 bytes
.../images/theme-default/wok-loading.gif | Bin 6181 -> 6181 bytes
.../js/src/kimchi.form.js => ui/js/src/wok.form.js | 0
.../js/src/kimchi.grid.js => ui/js/src/wok.grid.js | 10 +-
.../js/src/wok.line-chart.js | 4 +-
.../kimchi.select.js => ui/js/src/wok.select.js | 2 +-
.../kimchi/ui => ui}/js/widgets/circleGauge.js | 4 +-
.../base/images/ui-bg_glass_65_ffffff_1x400.png | Bin 246 -> 246 bytes
.../themes/base/images/ui-icons_222222_256x240.png | Bin 7006 -> 7006 bytes
57 files changed, 131 insertions(+), 1048 deletions(-)
delete mode 100644 plugins/kimchi/ui/css/theme-default/button.css
create mode 100644 plugins/kimchi/ui/css/theme-default/icon.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/message.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/popover.css
delete mode 100644 plugins/kimchi/ui/images/theme-default/bg-mask.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/folder-arrow-down.png
delete mode 100644 plugins/kimchi/ui/images/theme-default/logo-white.png
delete mode 100644 plugins/kimchi/ui/libs/Makefile.am
delete mode 100644 plugins/kimchi/ui/libs/themes/Makefile.am
delete mode 100644 plugins/kimchi/ui/libs/themes/base/Makefile.am
delete mode 100644 plugins/kimchi/ui/libs/themes/base/images/Makefile.am
delete mode 100644 plugins/kimchi/ui/libs/themes/base/images/ui-bg_diagonals-thick_18_b81900_40x40.png
delete mode 100644 plugins/kimchi/ui/libs/themes/base/images/ui-bg_diagonals-thick_20_666666_40x40.png
delete mode 100644 plugins/kimchi/ui/libs/themes/base/images/ui-bg_flat_10_000000_40x100.png
delete mode 100644 plugins/kimchi/ui/libs/themes/base/images/ui-bg_glass_100_f6f6f6_1x400.png
delete mode 100644 plugins/kimchi/ui/libs/themes/base/images/ui-bg_glass_100_fdf5ce_1x400.png
delete mode 100644 plugins/kimchi/ui/libs/themes/base/images/ui-bg_gloss-wave_35_f6a828_500x100.png
delete mode 100644 plugins/kimchi/ui/libs/themes/base/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
delete mode 100644 plugins/kimchi/ui/libs/themes/base/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
delete mode 100644 plugins/kimchi/ui/libs/themes/base/images/ui-icons_228ef1_256x240.png
delete mode 100644 plugins/kimchi/ui/libs/themes/base/images/ui-icons_ef8c08_256x240.png
delete mode 100644 plugins/kimchi/ui/libs/themes/base/images/ui-icons_ffd27a_256x240.png
delete mode 100644 plugins/kimchi/ui/libs/themes/base/images/ui-icons_ffffff_256x240.png
delete mode 100644 plugins/kimchi/ui/pages/error.html.tmpl
rename {plugins/kimchi/ui => ui}/css/theme-default/circleGauge.css (100%)
rename {plugins/kimchi/ui => ui}/css/theme-default/form.css (100%)
rename {plugins/kimchi/ui => ui}/css/theme-default/grid.css (98%)
rename {plugins/kimchi/ui => ui}/css/theme-default/jquery-ui.custom.css (100%)
rename {plugins/kimchi/ui => ui}/css/theme-default/line-chart.css (100%)
rename {plugins/kimchi/ui => ui}/css/theme-default/tile-check.css (100%)
rename {plugins/kimchi/ui => ui}/css/theme-default/toolbar.css (100%)
rename {plugins/kimchi/ui => ui}/images/theme-default/alert.png (100%)
create mode 100644 ui/images/theme-default/arrow-down.png
rename {plugins/kimchi/ui => ui}/images/theme-default/check-green.png (100%)
rename {plugins/kimchi/ui => ui}/images/theme-default/check-grey.png (100%)
rename {plugins/kimchi/ui => ui}/images/theme-default/folder-arrow-right.png (100%)
rename {plugins/kimchi/ui => ui}/images/theme-default/icon-alert.png (100%)
rename {plugins/kimchi/ui => ui}/images/theme-default/icon-event.png (100%)
rename {plugins/kimchi/ui => ui}/images/theme-default/icon-setting.png (100%)
rename {plugins/kimchi/ui => ui}/images/theme-default/icon-tool.png (100%)
rename {plugins/kimchi/ui => ui}/images/theme-default/thumb-guest.png (100%)
rename {plugins/kimchi/ui => ui}/images/theme-default/thumb-host.png (100%)
rename plugins/kimchi/ui/images/theme-default/kimchi-loading.gif => ui/images/theme-default/wok-loading.gif (100%)
rename plugins/kimchi/ui/js/src/kimchi.form.js => ui/js/src/wok.form.js (100%)
rename plugins/kimchi/ui/js/src/kimchi.grid.js => ui/js/src/wok.grid.js (98%)
rename plugins/kimchi/ui/js/src/kimchi.line-chart.js => ui/js/src/wok.line-chart.js (98%)
rename plugins/kimchi/ui/js/src/kimchi.select.js => ui/js/src/wok.select.js (97%)
rename {plugins/kimchi/ui => ui}/js/widgets/circleGauge.js (97%)
rename {plugins/kimchi/ui => ui}/libs/themes/base/images/ui-bg_glass_65_ffffff_1x400.png (100%)
rename {plugins/kimchi/ui => ui}/libs/themes/base/images/ui-icons_222222_256x240.png (100%)
3
8
This patchset refactors part of the code related to updating VM CPUs.
I am aware of two tests which are failing with this patchset. They'll be worked
on before the final version.
Crístian Deives (4):
Use locks to prevent concurrent updates to VMs
Update VCPU by using libvirt function
Set max VCPU count to the max supported value
Check if the VM update params are valid for the current state
src/kimchi/i18n.py | 3 ++-
src/kimchi/mockmodel.py | 48 ++++++++++++++------------------------
src/kimchi/model/vms.py | 62 ++++++++++++++++++++++++++++++++++++++-----------
tests/test_rest.py | 3 ++-
4 files changed, 71 insertions(+), 45 deletions(-)
--
2.4.3
3
6
[PATCH] Disallow storage format changes in UI for templates based on image file
by Jose Ricardo Ziviani 08 Sep '15
by Jose Ricardo Ziviani 08 Sep '15
08 Sep '15
- Only support qcow2 for VMs created by a template based on an existing
image file. This commit sets the template format type to qcow2 and
disables changes on it for such scenario.
Signed-off-by: Jose Ricardo Ziviani <joserz(a)linux.vnet.ibm.com>
---
ui/js/src/kimchi.template_edit_main.js | 37 +++++++++++++++++++++++++---------
1 file changed, 28 insertions(+), 9 deletions(-)
diff --git a/ui/js/src/kimchi.template_edit_main.js b/ui/js/src/kimchi.template_edit_main.js
index 21f5575..141e451 100644
--- a/ui/js/src/kimchi.template_edit_main.js
+++ b/ui/js/src/kimchi.template_edit_main.js
@@ -58,6 +58,14 @@ kimchi.template_edit_main = function() {
kimchi.select('template-edit-graphics-list', spiceOpt);
}
};
+ var isImageBasedTemplate = function() {
+ if (template["vm-image"] &&
+ typeof template["vm-image"] == "string" &&
+ template["vm-image"].substr(template["vm-image"].length - 4) == ".img") {
+ return true;
+ }
+ return false;
+ }
enableSpice();
var initStorage = function(result) {
var scsipools = {};
@@ -88,10 +96,16 @@ kimchi.template_edit_main = function() {
$('#selectStorageName').append(storageOptions);
// Set disk format
- $('#diskFormat').val(storageData.storageDiskFormat);
- $('#diskFormat').on('change', function() {
- $('.template-storage-disk-format').val($(this).val());
- });
+ if (isImageBasedTemplate()) {
+ $('#diskFormat').val('qcow2');
+ $('#diskFormat').prop('disabled', 'disabled');
+ }
+ else {
+ $('#diskFormat').val(storageData.storageDiskFormat);
+ $('#diskFormat').on('change', function() {
+ $('.template-storage-disk-format').val($(this).val());
+ });
+ }
$('#selectStorageName').change(function() {
var selectedItem = $(this).parent().parent();
@@ -106,16 +120,21 @@ kimchi.template_edit_main = function() {
kimchi.getStoragePoolVolume(tempStorageName, tempName[tempName.length-1], function(info) {
volSize = info.capacity / Math.pow(1024, 3);
$('.template-storage-disk', selectedItem).attr('readonly', true).val(volSize);
- $('#diskFormat').val('raw');
- $('#diskFormat').prop('disabled', true).change();
+ if (!isImageBasedTemplate()) {
+ $('#diskFormat').val('raw');
+ $('#diskFormat').prop('disabled', true).change();
+ }
});
} else if (tempType === 'logical') {
$('.template-storage-disk', selectedItem).attr('readonly', false);
- $('#diskFormat').val('raw');
- $('#diskFormat').prop('disabled', true).change();
+ if (!isImageBasedTemplate()) {
+ $('#diskFormat').val('raw');
+ $('#diskFormat').prop('disabled', true).change();
+ }
} else {
$('.template-storage-disk', selectedItem).attr('readonly', false);
- if ($('#diskFormat').prop('disabled') == true) {
+ if ($('#diskFormat').prop('disabled') == true &&
+ !isImageBasedTemplate()) {
$('#diskFormat').val('qcow2');
$('#diskFormat').prop('disabled', false).change();
}
--
1.9.1
2
2
[PATCH v2] Issues #682/#684/#685: Change some code errors when start, shutdown or poweroff vms
by Ramon Medeiros 08 Sep '15
by Ramon Medeiros 08 Sep '15
08 Sep '15
Changes:
v2:
Fix pep8 issues
When trying to start a running vm, shutoff or poweroff a shutdown vm,
the retrieved error was 500 (Internal Server Error). A better error
would be 400 (Invalid Request).
Signed-off-by: Ramon Medeiros <ramonn(a)linux.vnet.ibm.com>
---
src/kimchi/model/vms.py | 24 ++++++++++++++++++------
1 file changed, 18 insertions(+), 6 deletions(-)
diff --git a/src/kimchi/model/vms.py b/src/kimchi/model/vms.py
index 106e9bc..9dfd9fe 100644
--- a/src/kimchi/model/vms.py
+++ b/src/kimchi/model/vms.py
@@ -1105,24 +1105,36 @@ class VMModel(object):
try:
dom.create()
except libvirt.libvirtError as e:
- raise OperationFailed("KCHVM0019E",
- {'name': name, 'err': e.get_error_message()})
+ # vm already running: return error 403
+ error_params = {'name': name, 'err': e.get_error_message()}
+ if DOM_STATE_MAP[dom.info()[0]] == "running":
+ raise InvalidOperation("KCHVM0019E", error_params)
+ else:
+ raise OperationFailed("KCHVM0019E", error_params)
def poweroff(self, name):
dom = self.get_vm(name, self.conn)
try:
dom.destroy()
except libvirt.libvirtError as e:
- raise OperationFailed("KCHVM0020E",
- {'name': name, 'err': e.get_error_message()})
+ # vm already powered off: return error 403
+ error_params = {'name': name, 'err': e.get_error_message()}
+ if DOM_STATE_MAP[dom.info()[0]] == "shutoff":
+ raise InvalidOperation("KCHVM0020E", error_params)
+ else:
+ raise OperationFailed("KCHVM0020E", error_params)
def shutdown(self, name):
dom = self.get_vm(name, self.conn)
try:
dom.shutdown()
except libvirt.libvirtError as e:
- raise OperationFailed("KCHVM0029E",
- {'name': name, 'err': e.get_error_message()})
+ # vm already powered off: return error 403
+ error_params = {'name': name, 'err': e.get_error_message()}
+ if DOM_STATE_MAP[dom.info()[0]] == "shutoff":
+ raise InvalidOperation("KCHVM0029E", error_params)
+ else:
+ raise OperationFailed("KCHVM0029E", error_params)
def reset(self, name):
dom = self.get_vm(name, self.conn)
--
2.1.0
2
2
[PATCH 0/2] Issues #682/#684/#685: Change some code errors when start, shutdown or poweroff vms
by Ramon Medeiros 08 Sep '15
by Ramon Medeiros 08 Sep '15
08 Sep '15
Changes:
v3:
Added tests
v2:
Fixed pep8 issues
Ramon Medeiros (2):
Issues #682/#684/#685: Change some code errors when start, shutdown or
poweroff vms
Add unity tests for start/shutdown/poweroff response commands
src/kimchi/i18n.py | 4 ++++
src/kimchi/model/vms.py | 20 ++++++++++++++++++++
tests/test_rest.py | 12 ++++++++++++
3 files changed, 36 insertions(+)
--
2.1.0
3
5
[PATCH 0/2 v4] Issues #682/#684/#685: Change some code errors when start, shutdown or poweroff vms
by Ramon Medeiros 08 Sep '15
by Ramon Medeiros 08 Sep '15
08 Sep '15
Changes:
v4:
Fixed typo
v3:
Added tests
v2:
Fixed pep8 issues
Ramon Medeiros (2):
Issues #682/#684/#685: Change some code errors when start, shutdown or
poweroff vms
Add unity tests for start/shutdown/poweroff response commands
src/kimchi/i18n.py | 4 ++++
src/kimchi/model/vms.py | 20 ++++++++++++++++++++
tests/test_rest.py | 16 ++++++++++++++++
3 files changed, 40 insertions(+)
--
2.1.0
2
4
[PATCH v2] Disallow storage format changes in UI for templates based on image file
by Jose Ricardo Ziviani 04 Sep '15
by Jose Ricardo Ziviani 04 Sep '15
04 Sep '15
- Only support qcow2 for VMs created by a template based on an existing
image file. This commit sets the template format type to qcow2 and
disables changes on it for such scenario.
Signed-off-by: Jose Ricardo Ziviani <joserz(a)linux.vnet.ibm.com>
---
ui/js/src/kimchi.template_edit_main.js | 35 +++++++++++++++++++++++++---------
1 file changed, 26 insertions(+), 9 deletions(-)
diff --git a/ui/js/src/kimchi.template_edit_main.js b/ui/js/src/kimchi.template_edit_main.js
index 21f5575..5b2fa75 100644
--- a/ui/js/src/kimchi.template_edit_main.js
+++ b/ui/js/src/kimchi.template_edit_main.js
@@ -58,6 +58,12 @@ kimchi.template_edit_main = function() {
kimchi.select('template-edit-graphics-list', spiceOpt);
}
};
+ var isImageBasedTemplate = function() {
+ if (template["vm-image"] && typeof template["vm-image"] == "string") {
+ return true;
+ }
+ return false;
+ }
enableSpice();
var initStorage = function(result) {
var scsipools = {};
@@ -88,10 +94,16 @@ kimchi.template_edit_main = function() {
$('#selectStorageName').append(storageOptions);
// Set disk format
- $('#diskFormat').val(storageData.storageDiskFormat);
- $('#diskFormat').on('change', function() {
- $('.template-storage-disk-format').val($(this).val());
- });
+ if (isImageBasedTemplate()) {
+ $('#diskFormat').val('qcow2');
+ $('#diskFormat').prop('disabled', 'disabled');
+ }
+ else {
+ $('#diskFormat').val(storageData.storageDiskFormat);
+ $('#diskFormat').on('change', function() {
+ $('.template-storage-disk-format').val($(this).val());
+ });
+ }
$('#selectStorageName').change(function() {
var selectedItem = $(this).parent().parent();
@@ -106,16 +118,21 @@ kimchi.template_edit_main = function() {
kimchi.getStoragePoolVolume(tempStorageName, tempName[tempName.length-1], function(info) {
volSize = info.capacity / Math.pow(1024, 3);
$('.template-storage-disk', selectedItem).attr('readonly', true).val(volSize);
- $('#diskFormat').val('raw');
- $('#diskFormat').prop('disabled', true).change();
+ if (!isImageBasedTemplate()) {
+ $('#diskFormat').val('raw');
+ $('#diskFormat').prop('disabled', true).change();
+ }
});
} else if (tempType === 'logical') {
$('.template-storage-disk', selectedItem).attr('readonly', false);
- $('#diskFormat').val('raw');
- $('#diskFormat').prop('disabled', true).change();
+ if (!isImageBasedTemplate()) {
+ $('#diskFormat').val('raw');
+ $('#diskFormat').prop('disabled', true).change();
+ }
} else {
$('.template-storage-disk', selectedItem).attr('readonly', false);
- if ($('#diskFormat').prop('disabled') == true) {
+ if ($('#diskFormat').prop('disabled') == true &&
+ !isImageBasedTemplate()) {
$('#diskFormat').val('qcow2');
$('#diskFormat').prop('disabled', false).change();
}
--
1.9.1
3
2
Changes:
v2:
Correct Issue number on title
Verify vlan name size before adding it. If name greater than 15
characters, display an error.
Signed-off-by: Ramon Medeiros <ramonn(a)linux.vnet.ibm.com>
---
src/kimchi/i18n.py | 1 +
src/kimchi/model/networks.py | 3 +++
2 files changed, 4 insertions(+)
diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
index 862df7f..2f9c8d2 100644
--- a/src/kimchi/i18n.py
+++ b/src/kimchi/i18n.py
@@ -257,6 +257,7 @@ messages = {
"KCHNET0020E": _("Failed to activate interface %(iface)s: %(err)s."),
"KCHNET0021E": _("Failed to activate interface %(iface)s. Please check the physical link status."),
"KCHNET0022E": _("Failed to start network %(name)s. Details: %(err)s"),
+ "KCHNET0023E": _("Interface name %(name)s exceeds kernel limit of 15 characters"),
"KCHDR0001E": _("Debug report %(name)s does not exist"),
"KCHDR0002E": _("Debug report tool not found in system"),
diff --git a/src/kimchi/model/networks.py b/src/kimchi/model/networks.py
index 275e12b..03737d1 100644
--- a/src/kimchi/model/networks.py
+++ b/src/kimchi/model/networks.py
@@ -216,6 +216,9 @@ class NetworksModel(object):
if br_name in bridges:
raise InvalidOperation("KCHNET0010E", {'iface': br_name})
+ if len(br_name) > 15:
+ raise InvalidOperation("KCHNET0023E", {'name': br_name})
+
with RollbackContext() as rollback:
try:
vlan_tagged_br = conn.interfaceDefineXML(br_xml, 0)
--
2.1.0
2
1
Verify vlan name size before adding it. If name greater than 15
characters, display an error.
Signed-off-by: Ramon Medeiros <ramonn(a)linux.vnet.ibm.com>
The size limit of vlan name is defined in kernel headers:
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/ht…
---
src/kimchi/i18n.py | 1 +
src/kimchi/model/networks.py | 3 +++
2 files changed, 4 insertions(+)
diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
index 862df7f..2f9c8d2 100644
--- a/src/kimchi/i18n.py
+++ b/src/kimchi/i18n.py
@@ -257,6 +257,7 @@ messages = {
"KCHNET0020E": _("Failed to activate interface %(iface)s: %(err)s."),
"KCHNET0021E": _("Failed to activate interface %(iface)s. Please check the physical link status."),
"KCHNET0022E": _("Failed to start network %(name)s. Details: %(err)s"),
+ "KCHNET0023E": _("Interface name %(name)s exceeds kernel limit of 15 characters"),
"KCHDR0001E": _("Debug report %(name)s does not exist"),
"KCHDR0002E": _("Debug report tool not found in system"),
diff --git a/src/kimchi/model/networks.py b/src/kimchi/model/networks.py
index 275e12b..03737d1 100644
--- a/src/kimchi/model/networks.py
+++ b/src/kimchi/model/networks.py
@@ -216,6 +216,9 @@ class NetworksModel(object):
if br_name in bridges:
raise InvalidOperation("KCHNET0010E", {'iface': br_name})
+ if len(br_name) > 15:
+ raise InvalidOperation("KCHNET0023E", {'name': br_name})
+
with RollbackContext() as rollback:
try:
vlan_tagged_br = conn.interfaceDefineXML(br_xml, 0)
--
2.1.0
3
2
31 Aug '15
From: Chandra Shekhar Reddy Potula <chandra(a)linux.vnet.ibm.com>
Signed-off-by: Chandra Shekhar Reddy Potula <chandra(a)linux.vnet.ibm.com>
---
plugins/gingerbase/control/debugreports.py | 61 ++
plugins/gingerbase/disks.py | 196 +++++
plugins/gingerbase/model/debugreports.py | 213 +++++
plugins/gingerbase/repositories.py | 529 +++++++++++++
plugins/gingerbase/swupdate.py | 263 +++++++
plugins/gingerbase/tests/test_host.py | 200 +++++
plugins/gingerbase/ui/css/theme-default/host.css | 287 +++++++
.../gingerbase/ui/css/theme-default/report-add.css | 37 +
.../ui/css/theme-default/report-rename.css | 39 +
.../ui/css/theme-default/repository-add.css | 42 +
.../ui/css/theme-default/repository-edit.css | 88 +++
plugins/gingerbase/ui/js/src/gingerbase.host.js | 858 +++++++++++++++++++++
.../ui/js/src/gingerbase.report_add_main.js | 72 ++
.../ui/js/src/gingerbase.report_rename_main.js | 66 ++
.../ui/js/src/gingerbase.repository_add_main.js | 96 +++
.../ui/js/src/gingerbase.repository_edit_main.js | 74 ++
plugins/gingerbase/ui/pages/help/de_DE/host.dita | 49 ++
plugins/gingerbase/ui/pages/help/en_US/host.dita | 70 ++
plugins/gingerbase/ui/pages/help/es_ES/host.dita | 49 ++
plugins/gingerbase/ui/pages/help/fr_FR/host.dita | 68 ++
plugins/gingerbase/ui/pages/help/it_IT/host.dita | 51 ++
plugins/gingerbase/ui/pages/help/ja_JP/host.dita | 70 ++
plugins/gingerbase/ui/pages/help/ko_KR/host.dita | 47 ++
plugins/gingerbase/ui/pages/help/pt_BR/host.dita | 74 ++
plugins/gingerbase/ui/pages/help/ru_RU/host.dita | 48 ++
plugins/gingerbase/ui/pages/help/zh_CN/host.dita | 45 ++
plugins/gingerbase/ui/pages/help/zh_TW/host.dita | 50 ++
plugins/gingerbase/ui/pages/host.html.tmpl | 177 +++++
plugins/gingerbase/ui/pages/report-add.html.tmpl | 56 ++
.../gingerbase/ui/pages/report-rename.html.tmpl | 56 ++
.../gingerbase/ui/pages/repository-add.html.tmpl | 113 +++
.../gingerbase/ui/pages/repository-edit.html.tmpl | 117 +++
plugins/gingerbase/yumparser.py | 283 +++++++
plugins/kimchi/API.json | 134 ----
plugins/kimchi/Makefile.am | 3 +-
plugins/kimchi/config.py.in | 4 -
plugins/kimchi/control/debugreports.py | 61 --
plugins/kimchi/control/host.py | 96 ---
plugins/kimchi/disks.py | 196 -----
plugins/kimchi/docs/README.md | 6 +-
plugins/kimchi/i18n.py | 50 --
plugins/kimchi/kimchi.conf | 7 -
plugins/kimchi/mockmodel.py | 21 -
plugins/kimchi/model/config.py | 21 -
plugins/kimchi/model/debugreports.py | 213 -----
plugins/kimchi/model/host.py | 320 --------
plugins/kimchi/repositories.py | 529 -------------
plugins/kimchi/root.py | 1 -
plugins/kimchi/swupdate.py | 263 -------
plugins/kimchi/tests/test_authorization.py | 6 -
plugins/kimchi/tests/test_config.py.in | 8 -
plugins/kimchi/tests/test_host.py | 200 -----
plugins/kimchi/tests/test_model.py | 237 ------
plugins/kimchi/tests/test_rest.py | 47 --
plugins/kimchi/ui/config/tab-ext.xml | 7 -
plugins/kimchi/ui/css/theme-default/host.css | 287 -------
plugins/kimchi/ui/css/theme-default/report-add.css | 37 -
.../kimchi/ui/css/theme-default/report-rename.css | 39 -
.../kimchi/ui/css/theme-default/repository-add.css | 42 -
.../ui/css/theme-default/repository-edit.css | 88 ---
plugins/kimchi/ui/js/src/kimchi.api.js | 250 ------
plugins/kimchi/ui/js/src/kimchi.host.js | 858 ---------------------
plugins/kimchi/ui/js/src/kimchi.report_add_main.js | 72 --
.../kimchi/ui/js/src/kimchi.report_rename_main.js | 66 --
.../kimchi/ui/js/src/kimchi.repository_add_main.js | 96 ---
.../ui/js/src/kimchi.repository_edit_main.js | 74 --
plugins/kimchi/ui/pages/help/de_DE/host.dita | 49 --
plugins/kimchi/ui/pages/help/en_US/host.dita | 70 --
plugins/kimchi/ui/pages/help/es_ES/host.dita | 49 --
plugins/kimchi/ui/pages/help/fr_FR/host.dita | 68 --
plugins/kimchi/ui/pages/help/it_IT/host.dita | 51 --
plugins/kimchi/ui/pages/help/ja_JP/host.dita | 70 --
plugins/kimchi/ui/pages/help/ko_KR/host.dita | 47 --
plugins/kimchi/ui/pages/help/pt_BR/host.dita | 74 --
plugins/kimchi/ui/pages/help/ru_RU/host.dita | 48 --
plugins/kimchi/ui/pages/help/zh_CN/host.dita | 45 --
plugins/kimchi/ui/pages/help/zh_TW/host.dita | 50 --
plugins/kimchi/ui/pages/host.html.tmpl | 177 -----
plugins/kimchi/ui/pages/i18n.json.tmpl | 43 --
plugins/kimchi/ui/pages/report-add.html.tmpl | 56 --
plugins/kimchi/ui/pages/report-rename.html.tmpl | 56 --
plugins/kimchi/ui/pages/repository-add.html.tmpl | 113 ---
plugins/kimchi/ui/pages/repository-edit.html.tmpl | 117 ---
plugins/kimchi/yumparser.py | 283 -------
84 files changed, 4548 insertions(+), 5801 deletions(-)
create mode 100644 plugins/gingerbase/control/debugreports.py
create mode 100644 plugins/gingerbase/disks.py
create mode 100644 plugins/gingerbase/model/debugreports.py
create mode 100644 plugins/gingerbase/repositories.py
create mode 100644 plugins/gingerbase/swupdate.py
create mode 100644 plugins/gingerbase/tests/test_host.py
create mode 100644 plugins/gingerbase/ui/css/theme-default/host.css
create mode 100644 plugins/gingerbase/ui/css/theme-default/report-add.css
create mode 100644 plugins/gingerbase/ui/css/theme-default/report-rename.css
create mode 100644 plugins/gingerbase/ui/css/theme-default/repository-add.css
create mode 100644 plugins/gingerbase/ui/css/theme-default/repository-edit.css
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.host.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.report_add_main.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.report_rename_main.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.repository_add_main.js
create mode 100644 plugins/gingerbase/ui/js/src/gingerbase.repository_edit_main.js
create mode 100644 plugins/gingerbase/ui/pages/help/de_DE/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/en_US/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/es_ES/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/fr_FR/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/it_IT/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/ja_JP/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/ko_KR/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/pt_BR/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/ru_RU/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/zh_CN/host.dita
create mode 100644 plugins/gingerbase/ui/pages/help/zh_TW/host.dita
create mode 100644 plugins/gingerbase/ui/pages/host.html.tmpl
create mode 100644 plugins/gingerbase/ui/pages/report-add.html.tmpl
create mode 100644 plugins/gingerbase/ui/pages/report-rename.html.tmpl
create mode 100644 plugins/gingerbase/ui/pages/repository-add.html.tmpl
create mode 100644 plugins/gingerbase/ui/pages/repository-edit.html.tmpl
create mode 100644 plugins/gingerbase/yumparser.py
delete mode 100644 plugins/kimchi/control/debugreports.py
delete mode 100644 plugins/kimchi/disks.py
delete mode 100644 plugins/kimchi/model/debugreports.py
delete mode 100644 plugins/kimchi/repositories.py
delete mode 100644 plugins/kimchi/swupdate.py
delete mode 100644 plugins/kimchi/tests/test_host.py
delete mode 100644 plugins/kimchi/ui/css/theme-default/host.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/report-add.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/report-rename.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/repository-add.css
delete mode 100644 plugins/kimchi/ui/css/theme-default/repository-edit.css
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.host.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.report_add_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.report_rename_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.repository_add_main.js
delete mode 100644 plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js
delete mode 100644 plugins/kimchi/ui/pages/help/de_DE/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/en_US/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/es_ES/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/fr_FR/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/it_IT/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ja_JP/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ko_KR/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/pt_BR/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/ru_RU/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_CN/host.dita
delete mode 100644 plugins/kimchi/ui/pages/help/zh_TW/host.dita
delete mode 100644 plugins/kimchi/ui/pages/host.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/report-add.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/report-rename.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/repository-add.html.tmpl
delete mode 100644 plugins/kimchi/ui/pages/repository-edit.html.tmpl
delete mode 100644 plugins/kimchi/yumparser.py
diff --git a/plugins/gingerbase/control/debugreports.py b/plugins/gingerbase/control/debugreports.py
new file mode 100644
index 0000000..b5a3072
--- /dev/null
+++ b/plugins/gingerbase/control/debugreports.py
@@ -0,0 +1,61 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+from wok.control.base import AsyncCollection, Resource
+from wok.control.utils import internal_redirect
+from wok.control.utils import UrlSubNode
+
+
+@UrlSubNode('debugreports', True)
+class DebugReports(AsyncCollection):
+ def __init__(self, model):
+ super(DebugReports, self).__init__(model)
+ self.resource = DebugReport
+ self.role_key = 'host'
+ self.admin_methods = ['GET', 'POST']
+
+ def _get_resources(self, filter_params):
+ res_list = super(DebugReports, self)._get_resources(filter_params)
+ return sorted(res_list, key=lambda x: x.data['time'], reverse=True)
+
+
+class DebugReport(Resource):
+ def __init__(self, model, ident):
+ super(DebugReport, self).__init__(model, ident)
+ self.role_key = 'host'
+ self.admin_methods = ['GET', 'PUT', 'POST']
+ self.uri_fmt = '/debugreports/%s'
+ self.content = DebugReportContent(model, ident)
+
+ @property
+ def data(self):
+ return {'name': self.ident,
+ 'uri': self.info['uri'],
+ 'time': self.info['ctime']}
+
+
+class DebugReportContent(Resource):
+ def __init__(self, model, ident):
+ super(DebugReportContent, self).__init__(model, ident)
+ self.role_key = 'host'
+ self.admin_methods = ['GET']
+
+ def get(self):
+ self.lookup()
+ raise internal_redirect(self.info['uri'])
diff --git a/plugins/gingerbase/disks.py b/plugins/gingerbase/disks.py
new file mode 100644
index 0000000..eb40e3a
--- /dev/null
+++ b/plugins/gingerbase/disks.py
@@ -0,0 +1,196 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2013-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import os.path
+import re
+import subprocess
+from parted import Device as PDevice
+from parted import Disk as PDisk
+
+from wok.exception import OperationFailed
+from wok.utils import wok_log
+
+
+def _get_dev_node_path(maj_min):
+ """ Returns device node path given the device number 'major:min' """
+
+ dm_name = "/sys/dev/block/%s/dm/name" % maj_min
+ if os.path.exists(dm_name):
+ with open(dm_name) as dm_f:
+ content = dm_f.read().rstrip('\n')
+ return "/dev/mapper/" + content
+
+ uevent = "/sys/dev/block/%s/uevent" % maj_min
+ with open(uevent) as ueventf:
+ content = ueventf.read()
+
+ data = dict(re.findall(r'(\S+)=(".*?"|\S+)', content.replace("\n", " ")))
+
+ return "/dev/%s" % data["DEVNAME"]
+
+
+def _get_lsblk_devs(keys, devs=[]):
+ lsblk = subprocess.Popen(
+ ["lsblk", "-Pbo"] + [','.join(keys)] + devs,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out, err = lsblk.communicate()
+ if lsblk.returncode != 0:
+ raise OperationFailed("KCHDISKS0001E", {'err': err})
+
+ return _parse_lsblk_output(out, keys)
+
+
+def _get_dev_major_min(name):
+ maj_min = None
+
+ keys = ["NAME", "MAJ:MIN"]
+ dev_list = _get_lsblk_devs(keys)
+
+ for dev in dev_list:
+ if dev['name'].split()[0] == name:
+ maj_min = dev['maj:min']
+ break
+ else:
+ raise OperationFailed("KCHDISKS0002E", {'device': name})
+
+ return maj_min
+
+
+def _is_dev_leaf(devNodePath):
+ try:
+ # By default, lsblk prints a device information followed by children
+ # device information
+ childrenCount = len(
+ _get_lsblk_devs(["NAME"], [devNodePath])) - 1
+ except OperationFailed as e:
+ # lsblk is known to fail on multipath devices
+ # Assume these devices contain children
+ wok_log.error(
+ "Error getting device info for %s: %s", devNodePath, e)
+ return False
+
+ return childrenCount == 0
+
+
+def _is_dev_extended_partition(devType, devNodePath):
+ if devType != 'part':
+ return False
+ diskPath = devNodePath.rstrip('0123456789')
+ device = PDevice(diskPath)
+ try:
+ extended_part = PDisk(device).getExtendedPartition()
+ except NotImplementedError as e:
+ wok_log.warning(
+ "Error getting extended partition info for dev %s type %s: %s",
+ devNodePath, devType, e.message)
+ # Treate disk with unsupported partiton table as if it does not
+ # contain extended partitions.
+ return False
+ if extended_part and extended_part.path == devNodePath:
+ return True
+ return False
+
+
+def _parse_lsblk_output(output, keys):
+ # output is on format key="value",
+ # where key can be NAME, TYPE, FSTYPE, SIZE, MOUNTPOINT, etc
+ lines = output.rstrip("\n").split("\n")
+ r = []
+ for line in lines:
+ d = {}
+ for key in keys:
+ expression = r"%s=\".*?\"" % key
+ match = re.search(expression, line)
+ field = match.group()
+ k, v = field.split('=', 1)
+ d[k.lower()] = v[1:-1]
+ r.append(d)
+ return r
+
+
+def _get_vgname(devNodePath):
+ """ Return volume group name of a physical volume. If the device node path
+ is not a physical volume, return empty string. """
+ pvs = subprocess.Popen(
+ ["pvs", "--unbuffered", "--nameprefixes", "--noheadings",
+ "-o", "vg_name", devNodePath],
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ out, err = pvs.communicate()
+ if pvs.returncode != 0:
+ return ""
+
+ return re.findall(r"LVM2_VG_NAME='([^\']*)'", out)[0]
+
+
+def _is_available(name, devtype, fstype, mountpoint, majmin):
+ devNodePath = _get_dev_node_path(majmin)
+ # Only list unmounted and unformated and leaf and (partition or disk)
+ # leaf means a partition, a disk has no partition, or a disk not held
+ # by any multipath device. Physical volume belongs to no volume group
+ # is also listed. Extended partitions should not be listed.
+ if (devtype in ['part', 'disk', 'mpath'] and
+ fstype in ['', 'LVM2_member'] and
+ mountpoint == "" and
+ _get_vgname(devNodePath) == "" and
+ _is_dev_leaf(devNodePath) and
+ not _is_dev_extended_partition(devtype, devNodePath)):
+ return True
+ return False
+
+
+def get_partitions_names(check=False):
+ names = set()
+ keys = ["NAME", "TYPE", "FSTYPE", "MOUNTPOINT", "MAJ:MIN"]
+ # output is on format key="value",
+ # where key can be NAME, TYPE, FSTYPE, MOUNTPOINT
+ for dev in _get_lsblk_devs(keys):
+ # split()[0] to avoid the second part of the name, after the
+ # whiteline
+ name = dev['name'].split()[0]
+ if check and not _is_available(name, dev['type'], dev['fstype'],
+ dev['mountpoint'], dev['maj:min']):
+ continue
+ names.add(name)
+
+ return list(names)
+
+
+def get_partition_details(name):
+ majmin = _get_dev_major_min(name)
+ dev_path = _get_dev_node_path(majmin)
+
+ keys = ["TYPE", "FSTYPE", "SIZE", "MOUNTPOINT"]
+ try:
+ dev = _get_lsblk_devs(keys, [dev_path])[0]
+ except OperationFailed as e:
+ wok_log.error(
+ "Error getting partition info for %s: %s", name, e)
+ return {}
+
+ dev['available'] = _is_available(name, dev['type'], dev['fstype'],
+ dev['mountpoint'], majmin)
+ if dev['mountpoint']:
+ # Sometimes the mountpoint comes with [SWAP] or other
+ # info which is not an actual mount point. Filtering it
+ regexp = re.compile(r"\[.*\]")
+ if regexp.search(dev['mountpoint']) is not None:
+ dev['mountpoint'] = ''
+ dev['path'] = dev_path
+ dev['name'] = name
+ return dev
diff --git a/plugins/gingerbase/model/debugreports.py b/plugins/gingerbase/model/debugreports.py
new file mode 100644
index 0000000..d20eb12
--- /dev/null
+++ b/plugins/gingerbase/model/debugreports.py
@@ -0,0 +1,213 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import fnmatch
+import glob
+import logging
+import os
+import shutil
+import subprocess
+import time
+
+from wok.exception import InvalidParameter, NotFoundError, OperationFailed
+from wok.exception import WokException
+from wok.utils import add_task, wok_log
+from wok.utils import run_command
+
+from .. import config
+from tasks import TaskModel
+
+
+class DebugReportsModel(object):
+ def __init__(self, **kargs):
+ self.objstore = kargs['objstore']
+ self.task = TaskModel(**kargs)
+
+ def create(self, params):
+ ident = params.get('name').strip()
+ # Generate a name with time and millisec precision, if necessary
+ if ident is None or ident == "":
+ ident = 'report-' + str(int(time.time() * 1000))
+ else:
+ if ident in self.get_list():
+ raise InvalidParameter("KCHDR0008E", {"name": ident})
+ taskid = self._gen_debugreport_file(ident)
+ return self.task.lookup(taskid)
+
+ def get_list(self):
+ path = config.get_debugreports_path()
+ file_pattern = os.path.join(path, '*.*')
+ file_lists = glob.glob(file_pattern)
+ file_lists = [os.path.split(file)[1] for file in file_lists]
+ name_lists = [file.split('.', 1)[0] for file in file_lists]
+
+ return name_lists
+
+ def _gen_debugreport_file(self, name):
+ gen_cmd = self.get_system_report_tool()
+
+ if gen_cmd is not None:
+ return add_task('/plugins/kimchi/debugreports/%s' % name, gen_cmd,
+ self.objstore, name)
+
+ raise OperationFailed("KCHDR0002E")
+
+ @staticmethod
+ def sosreport_generate(cb, name):
+ def log_error(e):
+ log = logging.getLogger('Model')
+ log.warning('Exception in generating debug file: %s', e)
+
+ try:
+ command = ['sosreport', '--batch', '--name=%s' % name]
+ output, error, retcode = run_command(command)
+
+ if retcode != 0:
+ raise OperationFailed("KCHDR0003E", {'name': name,
+ 'err': retcode})
+
+ # SOSREPORT might create file in /tmp or /var/tmp
+ # FIXME: The right way should be passing the tar.xz file directory
+ # though the parameter '--tmp-dir', but it is failing in Fedora 20
+ patterns = ['/tmp/sosreport-%s-*', '/var/tmp/sosreport-%s-*']
+ reports = []
+ reportFile = None
+ for p in patterns:
+ reports = reports + [f for f in glob.glob(p % name)]
+ for f in reports:
+ if not fnmatch.fnmatch(f, '*.md5'):
+ reportFile = f
+ break
+ # Some error in sosreport happened
+ if reportFile is None:
+ wok_log.error('Debug report file not found. See sosreport '
+ 'output for detail:\n%s', output)
+ fname = (patterns[0] % name).split('/')[-1]
+ raise OperationFailed('KCHDR0004E', {'name': fname})
+
+ md5_report_file = reportFile + '.md5'
+ report_file_extension = '.' + reportFile.split('.', 1)[1]
+ path = config.get_debugreports_path()
+ target = os.path.join(path, name + report_file_extension)
+ # Moving report
+ msg = 'Moving debug report file "%s" to "%s"' % (reportFile,
+ target)
+ wok_log.info(msg)
+ shutil.move(reportFile, target)
+ # Deleting md5
+ msg = 'Deleting report md5 file: "%s"' % (md5_report_file)
+ wok_log.info(msg)
+ with open(md5_report_file) as f:
+ md5 = f.read().strip()
+ wok_log.info('Md5 file content: "%s"', md5)
+ os.remove(md5_report_file)
+ cb('OK', True)
+ return
+
+ except WokException as e:
+ log_error(e)
+ raise
+
+ except OSError as e:
+ log_error(e)
+ raise
+
+ except Exception, e:
+ # No need to call cb to update the task status here.
+ # The task object will catch the exception raised here
+ # and update the task status there
+ log_error(e)
+ raise OperationFailed("KCHDR0005E", {'name': name, 'err': e})
+
+ @staticmethod
+ def get_system_report_tool():
+ # Please add new possible debug report command here
+ # and implement the report generating function
+ # based on the new report command
+ report_tools = ({'cmd': 'sosreport --help',
+ 'fn': DebugReportsModel.sosreport_generate},)
+
+ # check if the command can be found by shell one by one
+ for helper_tool in report_tools:
+ try:
+ retcode = subprocess.call(helper_tool['cmd'], shell=True,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ if retcode == 0:
+ return helper_tool['fn']
+ except Exception, e:
+ wok_log.info('Exception running command: %s', e)
+
+ return None
+
+
+class DebugReportModel(object):
+ def __init__(self, **kargs):
+ pass
+
+ def lookup(self, name):
+ path = config.get_debugreports_path()
+ file_pattern = os.path.join(path, name)
+ file_pattern = file_pattern + '.*'
+ try:
+ file_target = glob.glob(file_pattern)[0]
+ except IndexError:
+ raise NotFoundError("KCHDR0001E", {'name': name})
+
+ ctime = os.stat(file_target).st_mtime
+ ctime = time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime(ctime))
+ file_target = os.path.split(file_target)[-1]
+ file_target = os.path.join("plugins/kimchi/data/debugreports",
+ file_target)
+ return {'uri': file_target,
+ 'ctime': ctime}
+
+ def update(self, name, params):
+ path = config.get_debugreports_path()
+ file_pattern = os.path.join(path, name + '.*')
+ try:
+ file_source = glob.glob(file_pattern)[0]
+ except IndexError:
+ raise NotFoundError("KCHDR0001E", {'name': name})
+
+ file_target = file_source.replace(name, params['name'])
+ if os.path.isfile(file_target):
+ raise InvalidParameter('KCHDR0008E', {'name': params['name']})
+
+ shutil.move(file_source, file_target)
+ wok_log.info('%s renamed to %s' % (file_source, file_target))
+ return params['name']
+
+ def delete(self, name):
+ path = config.get_debugreports_path()
+ file_pattern = os.path.join(path, name + '.*')
+ try:
+ file_target = glob.glob(file_pattern)[0]
+ except IndexError:
+ raise NotFoundError("KCHDR0001E", {'name': name})
+
+ os.remove(file_target)
+
+
+class DebugReportContentModel(object):
+ def __init__(self, **kargs):
+ self._debugreport = DebugReportModel()
+
+ def lookup(self, name):
+ return self._debugreport.lookup(name)
diff --git a/plugins/gingerbase/repositories.py b/plugins/gingerbase/repositories.py
new file mode 100644
index 0000000..9caabc4
--- /dev/null
+++ b/plugins/gingerbase/repositories.py
@@ -0,0 +1,529 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import copy
+import os
+import time
+import urlparse
+from ConfigParser import ConfigParser
+
+from wok.basemodel import Singleton
+from wok.exception import InvalidOperation, InvalidParameter
+from wok.exception import OperationFailed, NotFoundError, MissingParameter
+from wok.utils import validate_repo_url
+
+from config import kimchiLock
+from yumparser import get_yum_repositories, write_repo_to_file
+
+
+class Repositories(object):
+ __metaclass__ = Singleton
+
+ """
+ Class to represent and operate with repositories information.
+ """
+ def __init__(self):
+ try:
+ __import__('yum')
+ self._pkg_mnger = YumRepo()
+ except ImportError:
+ try:
+ __import__('apt_pkg')
+ self._pkg_mnger = AptRepo()
+ except ImportError:
+ raise InvalidOperation('KCHREPOS0014E')
+
+ def addRepository(self, params):
+ """
+ Add and enable a new repository
+ """
+ config = params.get('config', {})
+ extra_keys = list(
+ set(config.keys()).difference(set(self._pkg_mnger.CONFIG_ENTRY)))
+ if len(extra_keys) > 0:
+ raise InvalidParameter("KCHREPOS0028E",
+ {'items': ",".join(extra_keys)})
+
+ return self._pkg_mnger.addRepo(params)
+
+ def getRepositories(self):
+ """
+ Return a dictionary with all Kimchi's repositories. Each element uses
+ the format {<repo_id>: {repo}}, where repo is a dictionary in the
+ repositories.Repositories() format.
+ """
+ return self._pkg_mnger.getRepositoriesList()
+
+ def getRepository(self, repo_id):
+ """
+ Return a dictionary with all info from a given repository ID.
+ """
+ info = self._pkg_mnger.getRepo(repo_id)
+ info['repo_id'] = repo_id
+ return info
+
+ def enableRepository(self, repo_id):
+ """
+ Enable a repository.
+ """
+ return self._pkg_mnger.toggleRepo(repo_id, True)
+
+ def disableRepository(self, repo_id):
+ """
+ Disable a given repository.
+ """
+ return self._pkg_mnger.toggleRepo(repo_id, False)
+
+ def updateRepository(self, repo_id, params):
+ """
+ Update the information of a given repository.
+ The input is the repo_id of the repository to be updated and a dict
+ with the information to be updated.
+ """
+ return self._pkg_mnger.updateRepo(repo_id, params)
+
+ def removeRepository(self, repo_id):
+ """
+ Remove a given repository
+ """
+ return self._pkg_mnger.removeRepo(repo_id)
+
+
+class YumRepo(object):
+ """
+ Class to represent and operate with YUM repositories.
+ It's loaded only on those systems listed at YUM_DISTROS and loads necessary
+ modules in runtime.
+ """
+ TYPE = 'yum'
+ DEFAULT_CONF_DIR = "/etc/yum.repos.d"
+ CONFIG_ENTRY = ('repo_name', 'mirrorlist', 'metalink')
+
+ def __init__(self):
+ self._confdir = self.DEFAULT_CONF_DIR
+
+ def _get_repos(self, errcode):
+ try:
+ kimchiLock.acquire()
+ repos = get_yum_repositories()
+ except Exception, e:
+ kimchiLock.release()
+ raise OperationFailed(errcode, {'err': str(e)})
+ finally:
+ kimchiLock.release()
+
+ return repos
+
+ def getRepositoriesList(self):
+ """
+ Return a list of repositories IDs
+ """
+ repos = self._get_repos('KCHREPOS0024E')
+ return repos.keys()
+
+ def getRepo(self, repo_id):
+ """
+ Return a dictionary in the repositories.Repositories() of the given
+ repository ID format with the information of a YumRepository object.
+ """
+ repos = self._get_repos('KCHREPOS0025E')
+
+ if repo_id not in repos.keys():
+ raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
+
+ entry = repos.get(repo_id)
+
+ info = {}
+ info['enabled'] = entry.enabled
+ info['baseurl'] = entry.baseurl or ''
+ info['config'] = {}
+ info['config']['repo_name'] = entry.name or ''
+ info['config']['gpgcheck'] = entry.gpgcheck
+ info['config']['gpgkey'] = entry.gpgkey or ''
+ info['config']['mirrorlist'] = entry.mirrorlist or ''
+ info['config']['metalink'] = entry.metalink or ''
+ return info
+
+ def addRepo(self, params):
+ """
+ Add a given repository to YumBase
+ """
+ # At least one base url, or one mirror, must be given.
+ baseurl = params.get('baseurl', '')
+
+ config = params.get('config', {})
+ mirrorlist = config.get('mirrorlist', '')
+ metalink = config.get('metalink', '')
+ if not baseurl and not mirrorlist and not metalink:
+ raise MissingParameter("KCHREPOS0013E")
+
+ if baseurl:
+ validate_repo_url(baseurl)
+
+ if mirrorlist:
+ validate_repo_url(mirrorlist)
+
+ if metalink:
+ validate_repo_url(metalink)
+
+ if mirrorlist and metalink:
+ raise InvalidOperation('KCHREPOS0030E')
+
+ repo_id = params.get('repo_id', None)
+ if repo_id is None:
+ repo_id = "kimchi_repo_%s" % str(int(time.time() * 1000))
+
+ repos = self._get_repos('KCHREPOS0026E')
+ if repo_id in repos.keys():
+ raise InvalidOperation("KCHREPOS0022E", {'repo_id': repo_id})
+
+ repo_name = config.get('repo_name', repo_id)
+ repo = {'baseurl': baseurl, 'mirrorlist': mirrorlist,
+ 'name': repo_name, 'gpgcheck': 1,
+ 'gpgkey': [], 'enabled': 1, 'metalink': metalink}
+
+ # write a repo file in the system with repo{} information.
+ parser = ConfigParser()
+ parser.add_section(repo_id)
+
+ for key, value in repo.iteritems():
+ if value:
+ parser.set(repo_id, key, value)
+
+ repofile = os.path.join(self._confdir, repo_id + '.repo')
+ try:
+ with open(repofile, 'w') as fd:
+ parser.write(fd)
+ except:
+ raise OperationFailed("KCHREPOS0018E",
+ {'repo_file': repofile})
+
+ return repo_id
+
+ def toggleRepo(self, repo_id, enable):
+ repos = self._get_repos('KCHREPOS0011E')
+ if repo_id not in repos.keys():
+ raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
+
+ entry = repos.get(repo_id)
+ if enable and entry.enabled:
+ raise InvalidOperation("KCHREPOS0015E", {'repo_id': repo_id})
+
+ if not enable and not entry.enabled:
+ raise InvalidOperation("KCHREPOS0016E", {'repo_id': repo_id})
+
+ kimchiLock.acquire()
+ try:
+ if enable:
+ entry.enable()
+ else:
+ entry.disable()
+
+ write_repo_to_file(entry)
+ except:
+ if enable:
+ raise OperationFailed("KCHREPOS0020E", {'repo_id': repo_id})
+
+ raise OperationFailed("KCHREPOS0021E", {'repo_id': repo_id})
+ finally:
+ kimchiLock.release()
+
+ return repo_id
+
+ def updateRepo(self, repo_id, params):
+ """
+ Update a given repository in repositories.Repositories() format
+ """
+ repos = self._get_repos('KCHREPOS0011E')
+ if repo_id not in repos.keys():
+ raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
+
+ entry = repos.get(repo_id)
+
+ baseurl = params.get('baseurl', None)
+ config = params.get('config', {})
+ mirrorlist = config.get('mirrorlist', None)
+ metalink = config.get('metalink', None)
+
+ if baseurl is not None and len(baseurl.strip()) == 0:
+ baseurl = None
+
+ if mirrorlist is not None and len(mirrorlist.strip()) == 0:
+ mirrorlist = None
+
+ if metalink is not None and len(metalink.strip()) == 0:
+ metalink = None
+
+ if baseurl is None and mirrorlist is None and metalink is None:
+ raise MissingParameter("KCHREPOS0013E")
+
+ if baseurl is not None:
+ validate_repo_url(baseurl)
+ entry.baseurl = baseurl
+
+ if mirrorlist is not None:
+ validate_repo_url(mirrorlist)
+ entry.mirrorlist = mirrorlist
+
+ if metalink is not None:
+ validate_repo_url(metalink)
+ entry.metalink = metalink
+
+ if mirrorlist and metalink:
+ raise InvalidOperation('KCHREPOS0030E')
+
+ entry.id = params.get('repo_id', repo_id)
+ entry.name = config.get('repo_name', entry.name)
+ entry.gpgcheck = config.get('gpgcheck', entry.gpgcheck)
+ entry.gpgkey = config.get('gpgkey', entry.gpgkey)
+ kimchiLock.acquire()
+ write_repo_to_file(entry)
+ kimchiLock.release()
+ return repo_id
+
+ def removeRepo(self, repo_id):
+ """
+ Remove a given repository
+ """
+ repos = self._get_repos('KCHREPOS0027E')
+ if repo_id not in repos.keys():
+ raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
+
+ entry = repos.get(repo_id)
+ parser = ConfigParser()
+ with open(entry.repofile) as fd:
+ parser.readfp(fd)
+
+ if len(parser.sections()) == 1:
+ os.remove(entry.repofile)
+ return
+
+ parser.remove_section(repo_id)
+ with open(entry.repofile, "w") as fd:
+ parser.write(fd)
+
+
+class AptRepo(object):
+ """
+ Class to represent and operate with YUM repositories.
+ It's loaded only on those systems listed at YUM_DISTROS and loads necessary
+ modules in runtime.
+ """
+ TYPE = 'deb'
+ KIMCHI_LIST = "kimchi-source.list"
+ CONFIG_ENTRY = ('dist', 'comps')
+
+ def __init__(self):
+ getattr(__import__('apt_pkg'), 'init_config')()
+ getattr(__import__('apt_pkg'), 'init_system')()
+ config = getattr(__import__('apt_pkg'), 'config')
+ self.pkg_lock = getattr(__import__('apt_pkg'), 'SystemLock')
+ module = __import__('aptsources.sourceslist', globals(), locals(),
+ ['SourcesList'], -1)
+
+ self._sourceparts_path = '/%s%s' % (
+ config.get('Dir::Etc'), config.get('Dir::Etc::sourceparts'))
+ self._sourceslist = getattr(module, 'SourcesList')
+ self.filename = os.path.join(self._sourceparts_path, self.KIMCHI_LIST)
+ if not os.path.exists(self.filename):
+ with open(self.filename, 'w') as fd:
+ fd.write("# This file is managed by Kimchi and it must not "
+ "be modified manually\n")
+
+ def _get_repos(self):
+ try:
+ with self.pkg_lock():
+ repos = self._sourceslist()
+ repos.refresh()
+ except Exception, e:
+ kimchiLock.release()
+ raise OperationFailed('KCHREPOS0025E', {'err': e.message})
+
+ return repos
+
+ def _get_repo_id(self, repo):
+ data = urlparse.urlparse(repo.uri)
+ name = data.hostname or data.path
+ return '%s-%s-%s' % (name, repo.dist, "-".join(repo.comps))
+
+ def _get_source_entry(self, repo_id):
+ kimchiLock.acquire()
+ repos = self._get_repos()
+ kimchiLock.release()
+
+ for r in repos:
+ # Ignore deb-src repositories
+ if r.type != 'deb':
+ continue
+
+ if self._get_repo_id(r) != repo_id:
+ continue
+
+ return r
+
+ return None
+
+ def getRepositoriesList(self):
+ """
+ Return a list of repositories IDs
+
+ APT repositories there aren't the concept about repository ID, so for
+ internal control, the repository ID will be built as described in
+ _get_repo_id()
+ """
+ kimchiLock.acquire()
+ repos = self._get_repos()
+ kimchiLock.release()
+
+ res = []
+ for r in repos:
+ # Ignore deb-src repositories
+ if r.type != 'deb':
+ continue
+
+ res.append(self._get_repo_id(r))
+
+ return res
+
+ def getRepo(self, repo_id):
+ """
+ Return a dictionary in the repositories.Repositories() format of the
+ given repository ID with the information of a SourceEntry object.
+ """
+ r = self._get_source_entry(repo_id)
+ if r is None:
+ raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
+
+ info = {'enabled': not r.disabled,
+ 'baseurl': r.uri,
+ 'config': {'dist': r.dist,
+ 'comps': r.comps}}
+ return info
+
+ def addRepo(self, params):
+ """
+ Add a new APT repository based on <params>
+ """
+ # To create a APT repository the dist is a required parameter
+ # (in addition to baseurl, verified on controller through API.json)
+ config = params.get('config', None)
+ if config is None:
+ raise MissingParameter("KCHREPOS0019E")
+
+ if 'dist' not in config.keys():
+ raise MissingParameter("KCHREPOS0019E")
+
+ uri = params['baseurl']
+ dist = config['dist']
+ comps = config.get('comps', [])
+
+ validate_repo_url(uri)
+
+ kimchiLock.acquire()
+ try:
+ repos = self._get_repos()
+ source_entry = repos.add('deb', uri, dist, comps,
+ file=self.filename)
+ with self.pkg_lock():
+ repos.save()
+ except Exception as e:
+ kimchiLock.release()
+ raise OperationFailed("KCHREPOS0026E", {'err': e.message})
+ kimchiLock.release()
+ return self._get_repo_id(source_entry)
+
+ def toggleRepo(self, repo_id, enable):
+ """
+ Enable a given repository
+ """
+ r = self._get_source_entry(repo_id)
+ if r is None:
+ raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
+
+ if enable and not r.disabled:
+ raise InvalidOperation("KCHREPOS0015E", {'repo_id': repo_id})
+
+ if not enable and r.disabled:
+ raise InvalidOperation("KCHREPOS0016E", {'repo_id': repo_id})
+
+ if enable:
+ line = 'deb'
+ else:
+ line = '#deb'
+
+ kimchiLock.acquire()
+ try:
+ repos = self._get_repos()
+ with self.pkg_lock():
+ repos.remove(r)
+ repos.add(line, r.uri, r.dist, r.comps, file=self.filename)
+ repos.save()
+ except:
+ kimchiLock.release()
+ if enable:
+ raise OperationFailed("KCHREPOS0020E", {'repo_id': repo_id})
+
+ raise OperationFailed("KCHREPOS0021E", {'repo_id': repo_id})
+ finally:
+ kimchiLock.release()
+
+ return repo_id
+
+ def updateRepo(self, repo_id, params):
+ """
+ Update a given repository in repositories.Repositories() format
+ """
+ old_info = self.getRepo(repo_id)
+ updated_info = copy.deepcopy(old_info)
+ updated_info['baseurl'] = params.get(
+ 'baseurl', updated_info['baseurl'])
+
+ if 'config' in params.keys():
+ config = params['config']
+ updated_info['config']['dist'] = config.get(
+ 'dist', old_info['config']['dist'])
+ updated_info['config']['comps'] = config.get(
+ 'comps', old_info['config']['comps'])
+
+ self.removeRepo(repo_id)
+ try:
+ return self.addRepo(updated_info)
+ except:
+ self.addRepo(old_info)
+ raise
+
+ def removeRepo(self, repo_id):
+ """
+ Remove a given repository
+ """
+ r = self._get_source_entry(repo_id)
+ if r is None:
+ raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
+
+ kimchiLock.acquire()
+ try:
+ repos = self._get_repos()
+ with self.pkg_lock():
+ repos.remove(r)
+ repos.save()
+ except:
+ kimchiLock.release()
+ raise OperationFailed("KCHREPOS0017E", {'repo_id': repo_id})
+ finally:
+ kimchiLock.release()
diff --git a/plugins/gingerbase/swupdate.py b/plugins/gingerbase/swupdate.py
new file mode 100644
index 0000000..84b927f
--- /dev/null
+++ b/plugins/gingerbase/swupdate.py
@@ -0,0 +1,263 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2014-2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import subprocess
+import time
+
+from wok.basemodel import Singleton
+from wok.exception import NotFoundError, OperationFailed
+from wok.utils import run_command, wok_log
+
+from config import kimchiLock
+from yumparser import get_yum_packages_list_update
+
+
+class SoftwareUpdate(object):
+ __metaclass__ = Singleton
+
+ """
+ Class to represent and operate with OS software update.
+ """
+ def __init__(self):
+ # This stores all packages to be updated for Kimchi perspective. It's a
+ # dictionary of dictionaries, in the format {'package_name': package},
+ # where:
+ # package = {'package_name': <string>, 'version': <string>,
+ # 'arch': <string>, 'repository': <string>
+ # }
+ self._packages = {}
+
+ # This stores the number of packages to update
+ self._num2update = 0
+
+ # Get the distro of host machine and creates an object related to
+ # correct package management system
+ try:
+ __import__('yum')
+ wok_log.info("Loading YumUpdate features.")
+ self._pkg_mnger = YumUpdate()
+ except ImportError:
+ try:
+ __import__('apt')
+ wok_log.info("Loading AptUpdate features.")
+ self._pkg_mnger = AptUpdate()
+ except ImportError:
+ zypper_help = ["zypper", "--help"]
+ (stdout, stderr, returncode) = run_command(zypper_help)
+ if returncode == 0:
+ wok_log.info("Loading ZypperUpdate features.")
+ self._pkg_mnger = ZypperUpdate()
+ else:
+ raise Exception("There is no compatible package manager "
+ "for this system.")
+
+ def _scanUpdates(self):
+ """
+ Update self._packages with packages to be updated.
+ """
+ self._packages = {}
+ self._num2update = 0
+
+ # Call system pkg_mnger to get the packages as list of dictionaries.
+ for pkg in self._pkg_mnger.getPackagesList():
+
+ # Check if already exist a package in self._packages
+ pkg_id = pkg.get('package_name')
+ if pkg_id in self._packages.keys():
+ # package already listed to update. do nothing
+ continue
+
+ # Update the self._packages and self._num2update
+ self._packages[pkg_id] = pkg
+ self._num2update = self._num2update + 1
+
+ def getUpdates(self):
+ """
+ Return the self._packages.
+ """
+ self._scanUpdates()
+ return self._packages
+
+ def getUpdate(self, name):
+ """
+ Return a dictionary with all info from a given package name.
+ """
+ if name not in self._packages.keys():
+ raise NotFoundError('KCHPKGUPD0002E', {'name': name})
+
+ return self._packages[name]
+
+ def getNumOfUpdates(self):
+ """
+ Return the number of packages to be updated.
+ """
+ self._scanUpdates()
+ return self._num2update
+
+ def doUpdate(self, cb, params):
+ """
+ Execute the update
+ """
+ # reset messages
+ cb('')
+
+ cmd = self._pkg_mnger.update_cmd
+ proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ msgs = []
+ while proc.poll() is None:
+ msgs.append(proc.stdout.readline())
+ cb(''.join(msgs))
+ time.sleep(0.5)
+
+ # read the final output lines
+ msgs.extend(proc.stdout.readlines())
+
+ retcode = proc.poll()
+ if retcode == 0:
+ return cb(''.join(msgs), True)
+
+ msgs.extend(proc.stderr.readlines())
+ return cb(''.join(msgs), False)
+
+
+class YumUpdate(object):
+ """
+ Class to represent and operate with YUM software update system.
+ It's loaded only on those systems listed at YUM_DISTROS and loads necessary
+ modules in runtime.
+ """
+ def __init__(self):
+ self._pkgs = {}
+ self.update_cmd = ["yum", "-y", "update"]
+
+ def _refreshUpdateList(self):
+ """
+ Update the list of packages to be updated in the system.
+ """
+ try:
+ kimchiLock.acquire()
+ self._pkgs = get_yum_packages_list_update()
+ except Exception, e:
+ raise OperationFailed('KCHPKGUPD0003E', {'err': str(e)})
+ finally:
+ kimchiLock.release()
+
+ def getPackagesList(self):
+ """
+ Return a list of package's dictionaries. Each dictionary contains the
+ information about a package, in the format:
+ package = {'package_name': <string>, 'version': <string>,
+ 'arch': <string>, 'repository': <string>}
+ """
+ self._refreshUpdateList()
+ pkg_list = []
+ for pkg in self._pkgs:
+ package = {'package_name': pkg.name, 'version': pkg.version,
+ 'arch': pkg.arch, 'repository': pkg.ui_from_repo}
+ pkg_list.append(package)
+ return pkg_list
+
+
+class AptUpdate(object):
+ """
+ Class to represent and operate with APT software update system.
+ It's loaded only on those systems listed at APT_DISTROS and loads necessary
+ modules in runtime.
+ """
+ def __init__(self):
+ self._pkgs = {}
+ self.pkg_lock = getattr(__import__('apt_pkg'), 'SystemLock')
+ self.update_cmd = ['apt-get', 'upgrade', '-y']
+
+ def _refreshUpdateList(self):
+ """
+ Update the list of packages to be updated in the system.
+ """
+ apt_cache = getattr(__import__('apt'), 'Cache')()
+ try:
+ with self.pkg_lock():
+ apt_cache.update()
+ apt_cache.upgrade()
+ self._pkgs = apt_cache.get_changes()
+ except Exception, e:
+ kimchiLock.release()
+ raise OperationFailed('KCHPKGUPD0003E', {'err': e.message})
+
+ def getPackagesList(self):
+ """
+ Return a list of package's dictionaries. Each dictionary contains the
+ information about a package, in the format
+ package = {'package_name': <string>, 'version': <string>,
+ 'arch': <string>, 'repository': <string>}
+ """
+ kimchiLock.acquire()
+ self._refreshUpdateList()
+ kimchiLock.release()
+ pkg_list = []
+ for pkg in self._pkgs:
+ package = {'package_name': pkg.shortname,
+ 'version': pkg.candidate.version,
+ 'arch': pkg._pkg.architecture,
+ 'repository': pkg.candidate.origins[0].label}
+ pkg_list.append(package)
+
+ return pkg_list
+
+
+class ZypperUpdate(object):
+ """
+ Class to represent and operate with Zypper software update system.
+ It's loaded only on those systems listed at ZYPPER_DISTROS and loads
+ necessary modules in runtime.
+ """
+ def __init__(self):
+ self._pkgs = {}
+ self.update_cmd = ["zypper", "--non-interactive", "update",
+ "--auto-agree-with-licenses"]
+
+ def _refreshUpdateList(self):
+ """
+ Update the list of packages to be updated in the system.
+ """
+ self._pkgs = []
+ cmd = ["zypper", "list-updates"]
+ (stdout, stderr, returncode) = run_command(cmd)
+
+ if len(stderr) > 0:
+ raise OperationFailed('KCHPKGUPD0003E', {'err': stderr})
+
+ for line in stdout.split('\n'):
+ if line.find('v |') >= 0:
+ info = line.split(' | ')
+ package = {'package_name': info[2], 'version': info[4],
+ 'arch': info[5], 'repository': info[1]}
+ self._pkgs.append(package)
+
+ def getPackagesList(self):
+ """
+ Return a list of package's dictionaries. Each dictionary contains the
+ information about a package, in the format
+ package = {'package_name': <string>, 'version': <string>,
+ 'arch': <string>, 'repository': <string>}
+ """
+ kimchiLock.acquire()
+ self._refreshUpdateList()
+ kimchiLock.release()
+ return self._pkgs
diff --git a/plugins/gingerbase/tests/test_host.py b/plugins/gingerbase/tests/test_host.py
new file mode 100644
index 0000000..e2aa196
--- /dev/null
+++ b/plugins/gingerbase/tests/test_host.py
@@ -0,0 +1,200 @@
+# -*- coding: utf-8 -*-
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import json
+import os
+import platform
+import psutil
+import tempfile
+import time
+import unittest
+from functools import partial
+
+from wok.plugins.kimchi.mockmodel import MockModel
+
+from utils import get_free_port, patch_auth, request, run_server, wait_task
+
+
+test_server = None
+model = None
+host = None
+ssl_port = None
+tmpfile = None
+
+
+def setUpModule():
+ global test_server, model, host, ssl_port, tmpfile
+
+ patch_auth()
+ tmpfile = tempfile.mktemp()
+ model = MockModel(tmpfile)
+ host = '127.0.0.1'
+ port = get_free_port('http')
+ ssl_port = get_free_port('https')
+ cherrypy_port = get_free_port('cherrypy_port')
+ test_server = run_server(host, port, ssl_port, test_mode=True,
+ cherrypy_port=cherrypy_port, model=model)
+
+
+def tearDownModule():
+ test_server.stop()
+ os.unlink(tmpfile)
+
+
+class HostTests(unittest.TestCase):
+ def setUp(self):
+ self.request = partial(request, host, ssl_port)
+
+ def test_hostinfo(self):
+ resp = self.request('/plugins/kimchi/host').read()
+ info = json.loads(resp)
+ keys = ['os_distro', 'os_version', 'os_codename', 'cpu_model',
+ 'memory', 'cpus']
+ self.assertEquals(sorted(keys), sorted(info.keys()))
+
+ distro, version, codename = platform.linux_distribution()
+ self.assertEquals(distro, info['os_distro'])
+ self.assertEquals(version, info['os_version'])
+ self.assertEquals(unicode(codename, "utf-8"), info['os_codename'])
+ self.assertEquals(psutil.TOTAL_PHYMEM, info['memory'])
+
+ def test_hoststats(self):
+ time.sleep(1)
+ stats_keys = ['cpu_utilization', 'memory', 'disk_read_rate',
+ 'disk_write_rate', 'net_recv_rate', 'net_sent_rate']
+ resp = self.request('/plugins/kimchi/host/stats').read()
+ stats = json.loads(resp)
+ self.assertEquals(sorted(stats_keys), sorted(stats.keys()))
+
+ cpu_utilization = stats['cpu_utilization']
+ self.assertIsInstance(cpu_utilization, float)
+ self.assertGreaterEqual(cpu_utilization, 0.0)
+ self.assertTrue(cpu_utilization <= 100.0)
+
+ memory_stats = stats['memory']
+ self.assertIn('total', memory_stats)
+ self.assertIn('free', memory_stats)
+ self.assertIn('cached', memory_stats)
+ self.assertIn('buffers', memory_stats)
+ self.assertIn('avail', memory_stats)
+
+ resp = self.request('/plugins/kimchi/host/stats/history').read()
+ history = json.loads(resp)
+ self.assertEquals(sorted(stats_keys), sorted(history.keys()))
+
+ def test_host_actions(self):
+ def _task_lookup(taskid):
+ return json.loads(self.request('/plugins/kimchi/tasks/%s' %
+ taskid).read())
+
+ resp = self.request('/plugins/kimchi/host/shutdown', '{}', 'POST')
+ self.assertEquals(200, resp.status)
+ resp = self.request('/plugins/kimchi/host/reboot', '{}', 'POST')
+ self.assertEquals(200, resp.status)
+
+ # Test system update
+ resp = self.request('/plugins/kimchi/host/packagesupdate', None, 'GET')
+ pkgs = json.loads(resp.read())
+ self.assertEquals(3, len(pkgs))
+
+ pkg_keys = ['package_name', 'repository', 'arch', 'version']
+ for p in pkgs:
+ name = p['package_name']
+ resp = self.request('/plugins/kimchi/host/packagesupdate/' + name,
+ None, 'GET')
+ info = json.loads(resp.read())
+ self.assertEquals(sorted(pkg_keys), sorted(info.keys()))
+
+ resp = self.request('/plugins/kimchi/host/swupdate', '{}', 'POST')
+ task = json.loads(resp.read())
+ task_params = [u'id', u'message', u'status', u'target_uri']
+ self.assertEquals(sorted(task_params), sorted(task.keys()))
+
+ resp = self.request('/plugins/kimchi/tasks/' + task[u'id'], None, 'GET')
+ task_info = json.loads(resp.read())
+ self.assertEquals(task_info['status'], 'running')
+ wait_task(_task_lookup, task_info['id'])
+ resp = self.request('/plugins/kimchi/tasks/' + task[u'id'], None, 'GET')
+ task_info = json.loads(resp.read())
+ self.assertEquals(task_info['status'], 'finished')
+ self.assertIn(u'All packages updated', task_info['message'])
+ pkgs = model.packagesupdate_get_list()
+ self.assertEquals(0, len(pkgs))
+
+ def test_host_partitions(self):
+ resp = self.request('/plugins/kimchi/host/partitions')
+ self.assertEquals(200, resp.status)
+ partitions = json.loads(resp.read())
+
+ keys = ['name', 'path', 'type', 'fstype', 'size', 'mountpoint',
+ 'available']
+ for item in partitions:
+ resp = self.request('/plugins/kimchi/host/partitions/%s' %
+ item['name'])
+ info = json.loads(resp.read())
+ self.assertEquals(sorted(info.keys()), sorted(keys))
+
+ def test_host_devices(self):
+ def asset_devices_type(devices, dev_type):
+ for dev in devices:
+ self.assertEquals(dev['device_type'], dev_type)
+
+ resp = self.request('/plugins/kimchi/host/devices?_cap=scsi_host')
+ nodedevs = json.loads(resp.read())
+ # Mockmodel brings 3 preconfigured scsi fc_host
+ self.assertEquals(3, len(nodedevs))
+
+ nodedev = json.loads(self.request(
+ '/plugins/kimchi/host/devices/scsi_host2').read())
+ # Mockmodel generates random wwpn and wwnn
+ self.assertEquals('scsi_host2', nodedev['name'])
+ self.assertEquals('fc_host', nodedev['adapter']['type'])
+ self.assertEquals(16, len(nodedev['adapter']['wwpn']))
+ self.assertEquals(16, len(nodedev['adapter']['wwnn']))
+
+ devs = json.loads(self.request('/plugins/kimchi/host/devices').read())
+ dev_names = [dev['name'] for dev in devs]
+ for dev_type in ('pci', 'usb_device', 'scsi'):
+ resp = self.request('/plugins/kimchi/host/devices?_cap=%s' %
+ dev_type)
+ devsByType = json.loads(resp.read())
+ names = [dev['name'] for dev in devsByType]
+ self.assertTrue(set(names) <= set(dev_names))
+ asset_devices_type(devsByType, dev_type)
+
+ resp = self.request('/plugins/kimchi/host/devices?_passthrough=true')
+ passthru_devs = [dev['name'] for dev in json.loads(resp.read())]
+ self.assertTrue(set(passthru_devs) <= set(dev_names))
+
+ for dev_type in ('pci', 'usb_device', 'scsi'):
+ resp = self.request(
+ '/plugins/kimchi/host/devices?_cap=%s&_passthrough=true' %
+ dev_type)
+ filteredDevs = json.loads(resp.read())
+ filteredNames = [dev['name'] for dev in filteredDevs]
+ self.assertTrue(set(filteredNames) <= set(dev_names))
+ asset_devices_type(filteredDevs, dev_type)
+
+ for dev in passthru_devs:
+ resp = self.request(
+ '/plugins/kimchi/host/devices?_passthrough_affected_by=%s' %
+ dev)
+ affected_devs = [dev['name'] for dev in json.loads(resp.read())]
+ self.assertTrue(set(affected_devs) <= set(dev_names))
diff --git a/plugins/gingerbase/ui/css/theme-default/host.css b/plugins/gingerbase/ui/css/theme-default/host.css
new file mode 100644
index 0000000..a0cccb1
--- /dev/null
+++ b/plugins/gingerbase/ui/css/theme-default/host.css
@@ -0,0 +1,287 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2013-2014
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+.host-panel {
+ font-size: 12px;
+ margin-bottom: 100px;
+}
+
+.host-panel .logo-container, .host-panel .info-container,
+.host-panel .section-label, .host-panel .section-value {
+ display: inline-block;
+ vertical-align: top;
+}
+
+.host-panel .section-label {
+ display: inline-block;
+ margin-right: 1em;
+ vertical-align: top;
+}
+
+.host-panel .logo {
+ background: url("plugins/kimchi/images/icon-vm.png") no-repeat left top;
+ height: 128px;
+ width: 128px;
+}
+
+.host-panel .hostname {
+ text-decoration: underline;
+}
+
+.host-panel .action-panel {
+ margin-top: 2em;
+ padding-left: 10px;
+}
+
+.host-panel .button-icon {
+ background: url("../images/theme-default/host-icon-sprite.png") no-repeat
+ left top;
+ display: inline-block;
+ height: 12px;
+ width: 12px;
+}
+
+.host-panel .action-icon-stop {
+ background-position: -14px 0;
+}
+
+.host-panel .action-icon-restart {
+ background-position: -28px 0;
+}
+
+.host-panel .action-icon-download {
+ background-position: -42px 0;
+}
+
+.host-panel .action-icon-connect {
+ background-position: -56px 0;
+}
+
+.host-panel .action-icon-add {
+ background-position: -70px 0;
+}
+
+.host-panel .action-icon-edit {
+ background-position: -84px 0;
+}
+
+.host-panel .action-icon-remove {
+ background-position: -98px 0;
+}
+
+.host-panel button:disabled .action-icon-start {
+ background-position: 0 -14px;
+}
+
+.host-panel button:disabled .action-icon-stop {
+ background-position: -14px -14px;
+}
+
+.host-panel button:disabled .action-icon-restart {
+ background-position: -28px -14px;
+}
+
+.host-panel button:disabled .action-icon-download {
+ background-position: -42px -14px;
+}
+
+.host-panel button:disabled .action-icon-connect {
+ background-position: -56px -14px;
+}
+
+.host-panel button:disabled .action-icon-add {
+ background-position: -70px -14px;
+}
+
+.host-panel button:disabled .action-icon-edit {
+ background-position: -84px -14px;
+}
+
+.host-panel button:disabled .action-icon-remove {
+ background-position: -98px -14px;
+}
+
+.host-panel .info-container {
+ padding-top: 16px;
+ width: 890px;
+}
+
+.host-panel .section-header {
+ background: #EEE;
+ border-radius: 5px;
+ cursor: pointer;
+ line-height: 2em;
+ margin: 1em 0 1em;
+ padding-left: 6px;
+}
+
+.host-panel .section-header:hover {
+ background: #06f;
+ color: white;
+}
+
+.host-panel .section-content {
+ padding-left: 1em;
+}
+
+.host-panel .section-header .arrow {
+ border-color: transparent;
+ border-style: solid;
+ display: inline-block;
+ margin-right: 6px;
+ width: 0;
+}
+
+.host-panel .section-header[aria-expanded="true"] .arrow {
+ border-top-color: black;
+ border-width: 8px 4px 0;
+ border-bottom: none;
+}
+
+.host-panel .section-header[aria-expanded="true"]:hover .arrow {
+ border-top-color: white;
+}
+
+.host-panel .section-header[aria-expanded="false"] .arrow {
+ border-left-color: black;
+ border-right: none;
+ border-width: 4px 0 4px 8px;
+}
+
+.host-panel .section-header[aria-expanded="false"]:hover .arrow {
+ border-left-color: white;
+}
+
+.host-panel .section-row {
+ line-height: 1.6em;
+ margin-bottom: 1em;
+}
+
+.host-panel .section-label {
+ width: 100px;
+}
+
+#frequency-textbox {
+ width: 20px;
+}
+
+#container-chart-cpu,
+#container-chart-memory,
+#container-chart-disk-io,
+#container-chart-network-io {
+ border: 1px solid white;
+ box-shadow: 2px 2px 2px gray, 2px -2px 2px gray, -2px -2px 2px gray, -2px
+ 2px 2px gray;
+ height: 100px;
+ width: 500px;
+}
+
+#container-chart-disk-io .disk-write,
+#container-chart-network-io .network-sent {
+ stroke: #f80;
+}
+
+/* Debug Report */
+.cell-text-wrapper {
+ margin-left: 10px;
+}
+
+.host-panel #available-reports-grid {
+ border-color: #ddd;
+ height: 400px;
+ width: 850px;
+}
+
+.host-panel select#available-reports-list {
+ width: 300px;
+}
+
+.host-panel select#available-reports-list option {
+ margin: .2em 1em;
+}
+
+.debug-report-name,
+.debug-report-time {
+ width: 424px;
+}
+
+#id-debug-img {
+ background: url(../images/theme-default/kimchi-loading15x15.gif) 12px
+ center no-repeat;
+ padding-left: 23px;
+}
+
+/* End of Debug Report */
+
+/* Software Updates */
+.host-panel #software-updates-grid {
+ border-color: #ddd;
+ height: 300px;
+ width: 850px;
+}
+
+.software-update-name,
+.software-update-repos {
+ width: 224px;
+}
+
+.software-update-version,
+.software-update-arch {
+ width: 200px;
+}
+
+.host-panel #software-updates-progress-textarea {
+ border: 1px solid #ddd;
+ box-sizing: border-box;
+ height: 100px;
+ padding: .2em .5em;
+ resize: vertical;
+ width: 852px;
+}
+/* End of Software Updates */
+
+/* Repository */
+.host-panel #repositories-grid {
+ border-color: #ddd;
+ height: 200px;
+ width: 850px;
+}
+
+.host-panel #repositories-grid .repository-id {
+ width: 120px;
+}
+
+.host-panel #repositories-grid .repository-name {
+ width: 640px;
+}
+
+.host-panel #repositories-grid .repository-enabled {
+ width: 88px;
+}
+
+.host-panel #repositories-grid .repository-baseurl.deb {
+ width: 400px;
+}
+
+.host-panel #repositories-grid .repository-enabled.deb {
+ width: 100px;
+}
+
+.host-panel #repositories-grid .repository-gpgcheck.deb {
+ width: 150px;
+}
+/* End of Repository */
diff --git a/plugins/gingerbase/ui/css/theme-default/report-add.css b/plugins/gingerbase/ui/css/theme-default/report-add.css
new file mode 100644
index 0000000..8020182
--- /dev/null
+++ b/plugins/gingerbase/ui/css/theme-default/report-add.css
@@ -0,0 +1,37 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2013-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#report-add-window {
+ height: 300px;
+ width: 400px;
+}
+
+#report-add-window .field {
+ font-size: 12px;
+}
+
+#report-name-textbox {
+ margin: 0;
+ width: 100%;
+}
+
+.info-add-debug-report {
+ font-size: 12px;
+ color: #999999;
+ font-weight: lighter;
+ font-family: 'Helvetica Neue', Helvetica, Arial;
+}
\ No newline at end of file
diff --git a/plugins/gingerbase/ui/css/theme-default/report-rename.css b/plugins/gingerbase/ui/css/theme-default/report-rename.css
new file mode 100644
index 0000000..2fb2698
--- /dev/null
+++ b/plugins/gingerbase/ui/css/theme-default/report-rename.css
@@ -0,0 +1,39 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2014-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#report-rename-window {
+ height: 300px;
+ width: 400px;
+}
+
+#report-rename-window .field {
+ font-size: 12px;
+}
+
+#report-name-textbox {
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ margin: 0;
+ width: 100%;
+}
+
+.info-debug-report-rename {
+ font-size: 12px;
+ color: #999999;
+ font-weight: lighter;
+ font-family: 'Helvetica Neue', Helvetica, Arial;
+}
diff --git a/plugins/gingerbase/ui/css/theme-default/repository-add.css b/plugins/gingerbase/ui/css/theme-default/repository-add.css
new file mode 100644
index 0000000..4344569
--- /dev/null
+++ b/plugins/gingerbase/ui/css/theme-default/repository-add.css
@@ -0,0 +1,42 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2014-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#repository-add-window {
+ height: 500px;
+ width: 1000px;
+}
+
+#repository-add-window span.required {
+ color: red;
+ padding-left: 5px;
+ vertical-align: top;
+}
+
+#repository-add-window .textbox-wrapper input[type="text"] {
+ box-sizing: border-box;
+ width: 100%;
+}
+
+#repository-add-window .textbox-wrapper label {
+ vertical-align: middle;
+}
+
+#isMirrorLabel {
+ font-size: 14px;
+ font-weight: lighter;
+ font-family: 'Helvetica Neue', Helvetica, Arial;
+}
\ No newline at end of file
diff --git a/plugins/gingerbase/ui/css/theme-default/repository-edit.css b/plugins/gingerbase/ui/css/theme-default/repository-edit.css
new file mode 100644
index 0000000..383a7fe
--- /dev/null
+++ b/plugins/gingerbase/ui/css/theme-default/repository-edit.css
@@ -0,0 +1,88 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2014-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+.yum div#repository-edit-window {
+ height: 680px;
+ width: 1000px;
+}
+
+.deb div#repository-edit-window {
+ height: 480px;
+ width: 1000px;
+}
+
+
+.repository-edit-fieldset {
+ float: left;
+ padding: 0 30px;
+ width: 95%;
+}
+
+.repository-edit-wrapper-label, .repository-edit-wrapper-controls {
+ display: inline-block;
+ height: 30px;
+ line-height: 30px;
+ font-size: 14px;
+ vertical-align: top;
+}
+
+.repository-edit-wrapper-label {
+ margin-top: 10px;
+ width: 150px;
+}
+
+.repository-edit-wrapper-controls label {
+ vertical-align: middle;
+}
+
+.repository-edit-wrapper-controls {
+ width: 100%;
+}
+
+.repository-edit-wrapper-controls input[type="text"] {
+ font-size: 16px;
+ height: 30px;
+ line-height: 30px;
+ padding: 0 10px;
+ width: 100%;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border: 1px solid #CCCCCC;
+}
+
+
+.repository-edit-wrapper-controls input[type="text"][readonly] {
+ color: #bbb;
+ background-color: #fafafa;
+}
+
+
+.repository-edit-wrapper-controls input[type="text"][disabled] {
+ color: #bbb;
+ background-color: #fafafa;
+ cursor: not-allowed;
+}
+
+
+.deb .yum{
+ display: none;
+}
+
+
+.yum .deb{
+ display: none;
+}
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.host.js b/plugins/gingerbase/ui/js/src/gingerbase.host.js
new file mode 100644
index 0000000..ab02333
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.host.js
@@ -0,0 +1,858 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2013-2014
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.host={};
+
+kimchi.host_main = function() {
+ var expand = function(header, toExpand) {
+ var controlledNode = $(header).attr('aria-controls');
+ $('#' + controlledNode)[toExpand ? 'removeClass' : 'addClass']('hidden');
+ $(header).attr('aria-expanded', toExpand ? 'true' : 'false');
+ };
+
+ var repositoriesGrid = null;
+ var initRepositoriesGrid = function(repo_type) {
+ var gridFields=[];
+ if (repo_type == "yum") {
+ gridFields=[{
+ name: 'repo_id',
+ label: i18n['KCHREPO6004M'],
+ 'class': 'repository-id'
+ }, {
+ name: 'config[repo_name]',
+ label: i18n['KCHREPO6005M'],
+ 'class': 'repository-name'
+ }, {
+ name: 'enabled',
+ label: i18n['KCHREPO6009M'],
+ 'class': 'repository-enabled'
+ }];
+ }
+ else if (repo_type == "deb") {
+ gridFields=[{
+ name: 'baseurl',
+ label: i18n['KCHREPO6006M'],
+ makeTitle: true,
+ 'class': 'repository-baseurl deb'
+ }, {
+ name: 'enabled',
+ label: i18n['KCHREPO6009M'],
+ 'class': 'repository-enabled deb'
+ }, {
+ name: 'config[dist]',
+ label: "dist",
+ 'class': 'repository-gpgcheck deb'
+ }, {
+ name: 'config[comps]',
+ label: "comps",
+ 'class': 'repository-gpgcheck deb'
+ }];
+ }
+ else {
+ gridFields=[{
+ name: 'repo_id',
+ label: i18n['KCHREPO6004M'],
+ 'class': 'repository-id'
+ }, {
+ name: 'enabled',
+ label: i18n['KCHREPO6009M'],
+ 'class': 'repository-enabled'
+ }, {
+ name: 'baseurl',
+ label: i18n['KCHREPO6006M'],
+ makeTitle: true,
+ 'class': 'repository-baseurl'
+ }];
+ }
+ repositoriesGrid = new kimchi.widget.Grid({
+ container: 'repositories-grid-container',
+ id: 'repositories-grid',
+ title: i18n['KCHREPO6003M'],
+ toolbarButtons: [{
+ id: 'repositories-grid-add-button',
+ label: i18n['KCHREPO6012M'],
+ onClick: function(event) {
+ wok.window.open({url:'plugins/kimchi/repository-add.html',
+ class: repo_type});
+ }
+ }, {
+ id: 'repositories-grid-enable-button',
+ label: i18n['KCHREPO6016M'],
+ disabled: true,
+ onClick: function(event) {
+ var repository = repositoriesGrid.getSelected();
+ if(!repository) {
+ return;
+ }
+ var name = repository['repo_id'];
+ var enable = !repository['enabled'];
+ $(this).prop('disabled', true);
+ kimchi.enableRepository(name, enable, function() {
+ wok.topic('kimchi/repositoryUpdated').publish();
+ });
+ }
+ }, {
+ id: 'repositories-grid-edit-button',
+ label: i18n['KCHREPO6013M'],
+ disabled: true,
+ onClick: function(event) {
+ var repository = repositoriesGrid.getSelected();
+ if(!repository) {
+ return;
+ }
+ kimchi.selectedRepository = repository['repo_id'];
+ wok.window.open({url:'plugins/kimchi/repository-edit.html',
+ class: repo_type});
+ }
+ }, {
+ id: 'repositories-grid-remove-button',
+ label: i18n['KCHREPO6014M'],
+ disabled: true,
+ onClick: function(event) {
+ var repository = repositoriesGrid.getSelected();
+ if(!repository) {
+ return;
+ }
+
+ var settings = {
+ title : i18n['KCHREPO6001M'],
+ content : i18n['KCHREPO6002M'],
+ confirm : i18n['KCHAPI6004M'],
+ cancel : i18n['KCHAPI6003M']
+ };
+
+ wok.confirm(settings, function() {
+ kimchi.deleteRepository(
+ repository['repo_id'],
+ function(result) {
+ wok.topic('kimchi/repositoryDeleted').publish(result);
+ }, function(error) {
+ }
+ );
+ });
+ }
+ }],
+ onRowSelected: function(row) {
+ var repository = repositoriesGrid.getSelected();
+ if(!repository) {
+ return;
+ }
+ $('#repositories-grid-remove-button').prop('disabled', false);
+ $('#repositories-grid-edit-button').prop('disabled', false);
+ var enabled = repository['enabled'];
+ $('#repositories-grid-enable-button')
+ .text(i18n[enabled ? 'KCHREPO6017M' : 'KCHREPO6016M'])
+ .prop('disabled', false);
+ },
+ frozenFields: [],
+ fields: gridFields,
+ data: listRepositories
+ });
+ };
+
+ var listRepositories = function(gridCallback) {
+ kimchi.listRepositories(function(repositories) {
+ if($.isFunction(gridCallback)) {
+ gridCallback(repositories);
+ }
+ else {
+ if(repositoriesGrid) {
+ repositoriesGrid.setData(repositories);
+ }
+ else {
+ initRepositoriesGrid();
+ repositoriesGrid.setData(repositories);
+ }
+ }
+ },
+ function(error) {
+ var message = error && error['responseJSON'] && error['responseJSON']['reason'];
+
+ if($.isFunction(gridCallback)) {
+ gridCallback([]);
+ }
+ repositoriesGrid &&
+ repositoriesGrid.showMessage(message || i18n['KCHUPD6008M']);
+ });
+
+ $('#repositories-grid-remove-button').prop('disabled', true);
+ $('#repositories-grid-edit-button').prop('disabled', true);
+ $('#repositories-grid-enable-button').prop('disabled', true);
+ };
+
+ var softwareUpdatesGridID = 'software-updates-grid';
+ var softwareUpdatesGrid = null;
+ var progressAreaID = 'software-updates-progress-textarea';
+ var reloadProgressArea = function(result) {
+ var progressArea = $('#' + progressAreaID)[0];
+ $(progressArea).text(result['message']);
+ var scrollTop = $(progressArea).prop('scrollHeight');
+ $(progressArea).prop('scrollTop', scrollTop);
+ };
+
+ var initSoftwareUpdatesGrid = function(softwareUpdates) {
+ softwareUpdatesGrid = new kimchi.widget.Grid({
+ container: 'software-updates-grid-container',
+ id: softwareUpdatesGridID,
+ title: i18n['KCHUPD6001M'],
+ rowSelection: 'disabled',
+ toolbarButtons: [{
+ id: softwareUpdatesGridID + '-update-button',
+ label: i18n['KCHUPD6006M'],
+ disabled: true,
+ onClick: function(event) {
+ var updateButton = $(this);
+ var progressArea = $('#' + progressAreaID)[0];
+ $('#software-updates-progress-container').removeClass('hidden');
+ $(progressArea).text('');
+ !wok.isElementInViewport(progressArea) &&
+ progressArea.scrollIntoView();
+ $(updateButton).text(i18n['KCHUPD6007M']).prop('disabled', true);
+
+ kimchi.updateSoftware(function(result) {
+ reloadProgressArea(result);
+ $(updateButton).text(i18n['KCHUPD6006M']).prop('disabled', false);
+ wok.topic('kimchi/softwareUpdated').publish({
+ result: result
+ });
+ }, function(error) {
+ var message = error && error['responseJSON'] && error['responseJSON']['reason'];
+ wok.message.error(message || i18n['KCHUPD6009M']);
+ $(updateButton).text(i18n['KCHUPD6006M']).prop('disabled', false);
+ }, reloadProgressArea);
+ }
+ }],
+ frozenFields: [],
+ fields: [{
+ name: 'package_name',
+ label: i18n['KCHUPD6002M'],
+ 'class': 'software-update-name'
+ }, {
+ name: 'version',
+ label: i18n['KCHUPD6003M'],
+ 'class': 'software-update-version'
+ }, {
+ name: 'arch',
+ label: i18n['KCHUPD6004M'],
+ 'class': 'software-update-arch'
+ }, {
+ name: 'repository',
+ label: i18n['KCHUPD6005M'],
+ 'class': 'software-update-repos'
+ }],
+ data: listSoftwareUpdates
+ });
+ };
+
+ var listSoftwareUpdates = function(gridCallback) {
+ kimchi.listSoftwareUpdates(function(softwareUpdates) {
+ if($.isFunction(gridCallback)) {
+ gridCallback(softwareUpdates);
+ }
+ else {
+ if(softwareUpdatesGrid) {
+ softwareUpdatesGrid.setData(softwareUpdates);
+ }
+ else {
+ initSoftwareUpdatesGrid(softwareUpdates);
+ }
+ }
+
+ var updateButton = $('#' + softwareUpdatesGridID + '-update-button');
+ $(updateButton).prop('disabled', softwareUpdates.length === 0);
+ }, function(error) {
+ var message = error && error['responseJSON'] && error['responseJSON']['reason'];
+ if($.isFunction(gridCallback)) {
+ gridCallback([]);
+ }
+ softwareUpdatesGrid &&
+ softwareUpdatesGrid.showMessage(message || i18n['KCHUPD6008M']);
+ });
+ };
+
+ var reportGridID = 'available-reports-grid';
+ var reportGrid = null;
+ var enableReportButtons = function(toEnable) {
+ var buttonID = '#{grid}-{btn}-button';
+ $.each(['rename', 'remove', 'download'], function(i, n) {
+ $(wok.substitute(buttonID, {
+ grid: reportGridID,
+ btn: n
+ })).prop('disabled', !toEnable);
+ });
+ };
+ var initReportGrid = function(reports) {
+ reportGrid = new kimchi.widget.Grid({
+ container: 'available-reports-grid-container',
+ id: reportGridID,
+ title: i18n['KCHDR6002M'],
+ toolbarButtons: [{
+ id: reportGridID + '-generate-button',
+ label: i18n['KCHDR6006M'],
+ onClick: function(event) {
+ wok.window.open('plugins/kimchi/report-add.html');
+ }
+ }, {
+ id: reportGridID + '-rename-button',
+ label: i18n['KCHDR6008M'],
+ disabled: true,
+ onClick: function(event) {
+ var report = reportGrid.getSelected();
+ if(!report) {
+ return;
+ }
+
+ kimchi.selectedReport = report['name'];
+ wok.window.open('plugins/kimchi/report-rename.html');
+ }
+ }, {
+ id: reportGridID + '-remove-button',
+ label: i18n['KCHDR6009M'],
+ disabled: true,
+ onClick: function(event) {
+ var report = reportGrid.getSelected();
+ if(!report) {
+ return;
+ }
+
+ var settings = {
+ title : i18n['KCHAPI6004M'],
+ content : i18n['KCHDR6001M'],
+ confirm : i18n['KCHAPI6002M'],
+ cancel : i18n['KCHAPI6003M']
+ };
+
+ wok.confirm(settings, function() {
+ kimchi.deleteReport({
+ name: report['name']
+ }, function(result) {
+ listDebugReports();
+ }, function(error) {
+ wok.message.error(error.responseJSON.reason);
+ });
+ });
+ }
+ }, {
+ id: reportGridID + '-download-button',
+ label: i18n['KCHDR6010M'],
+ disabled: true,
+ onClick: function(event) {
+ var report = reportGrid.getSelected();
+ if(!report) {
+ return;
+ }
+
+ kimchi.downloadReport({
+ file: report['uri']
+ });
+ }
+ }],
+ onRowSelected: function(row) {
+ var report = reportGrid.getSelected();
+ // Only enable report buttons if the selected line is not a
+ // pending report
+ if (report['time'] == i18n['KCHDR6007M']) {
+ var gridElement = $('#'+ reportGridID);
+ var row = $('tr:contains(' + report['name'] + ')', gridElement);
+ enableReportButtons(false);
+ row.attr('class', '');
+ }
+ else {
+ enableReportButtons(true);
+ }
+ },
+ frozenFields: [],
+ fields: [{
+ name: 'name',
+ label: i18n['KCHDR6003M'],
+ 'class': 'debug-report-name'
+ }, {
+ name: 'time',
+ label: i18n['KCHDR6005M'],
+ 'class': 'debug-report-time'
+ }],
+ data: reports
+ });
+ };
+
+ var getPendingReports = function() {
+ var reports = []
+ var filter = 'status=running&target_uri=' + encodeURIComponent('^/plugins/kimchi/debugreports/*')
+
+ kimchi.getTasksByFilter(filter, function(tasks) {
+ for(var i = 0; i < tasks.length; i++) {
+ reportName = tasks[i].target_uri.replace(/^\/plugins\/kimchi\/debugreports\//, '') || i18n['KCHDR6012M'];
+ reports.push({'name': reportName, 'time': i18n['KCHDR6007M']})
+
+ if(kimchi.trackingTasks.indexOf(tasks[i].id) >= 0) {
+ continue;
+ }
+
+ kimchi.trackTask(tasks[i].id, function(result) {
+ wok.topic('kimchi/debugReportAdded').publish();
+ }, function(result) {
+ // Error message from Async Task status
+ if (result['message']) {
+ var errText = result['message'];
+ }
+ // Error message from standard kimchi exception
+ else {
+ var errText = result['responseJSON']['reason'];
+ }
+ result && wok.message.error(errText);
+ wok.topic('kimchi/debugReportAdded').publish();
+ }, null);
+ }
+ }, null, true);
+
+ return reports;
+ };
+
+ var listDebugReports = function() {
+ kimchi.listReports(function(reports) {
+ pendingReports = getPendingReports();
+ allReports = pendingReports.concat(reports);
+ $('#debug-report-section').removeClass('hidden');
+
+ // Row selection will be cleared so disable buttons here
+ enableReportButtons(false);
+
+ if(reportGrid) {
+ reportGrid.setData(allReports);
+ }
+ else {
+ initReportGrid(allReports);
+ }
+
+ // Set id-debug-img to pending reports
+ // It will display a loading icon
+ var gridElement = $('#' + reportGridID);
+ $.each($('td:contains(' + i18n['KCHDR6007M'] + ')', gridElement), function(index, row) {
+ $(row).parent().addClass('no-hover');
+ $(row).attr('id', 'id-debug-img');
+ });
+ }, function(error) {
+ if(error['status'] == 403) {
+ $('#debug-report-section').addClass('hidden');
+ return;
+ }
+ $('#debug-report-section').removeClass('hidden');
+ });
+ };
+
+ var shutdownButtonID = '#host-button-shutdown';
+ var restartButtonID = '#host-button-restart';
+ var shutdownHost = function(params) {
+ var settings = {
+ title : i18n['KCHAPI6004M'],
+ content : i18n['KCHHOST6008M'],
+ confirm : i18n['KCHAPI6002M'],
+ cancel : i18n['KCHAPI6003M']
+ };
+
+ wok.confirm(settings, function() {
+ kimchi.shutdown(params);
+ $(shutdownButtonID).prop('disabled', true);
+ $(restartButtonID).prop('disabled', true);
+ // Check if there is any VM is running.
+ kimchi.listVMs(function(vms) {
+ for(var i = 0; i < vms.length; i++) {
+ if(vms[i]['state'] === 'running') {
+ wok.message.error.code('KCHHOST6001E');
+ $(shutdownButtonID).prop('disabled', false);
+ $(restartButtonID).prop('disabled', false);
+ return;
+ }
+ }
+
+ });
+ }, function() {
+ });
+ };
+
+ var initPage = function() {
+ $('#host-info-container .section-header').each(function(i, header) {
+ $('<span class="arrow"></span>').prependTo(header);
+ var toExpand = $(header).attr('aria-expanded') !== 'false';
+ expand(header, toExpand);
+ });
+
+ $('#host-info-container').on('click', '.section-header', function(event) {
+ var toExpand = $(this).attr('aria-expanded') === 'false';
+ expand(this, toExpand);
+ });
+
+ $('#host-button-shutdown').on('click', function(event) {
+ shutdownHost(null);
+ });
+
+ $('#host-button-restart').on('click', function(event) {
+ shutdownHost({
+ reboot: true
+ });
+ });
+
+ var setupUI = function() {
+ if (kimchi.capabilities == undefined) {
+ setTimeout(setupUI, 2000);
+ return;
+ }
+
+ if((kimchi.capabilities['repo_mngt_tool']) && (kimchi.capabilities['repo_mngt_tool']!="None")) {
+ initRepositoriesGrid(kimchi.capabilities['repo_mngt_tool']);
+ $('#repositories-section').switchClass('hidden', kimchi.capabilities['repo_mngt_tool']);
+ wok.topic('kimchi/repositoryAdded')
+ .subscribe(listRepositories);
+ wok.topic('kimchi/repositoryUpdated')
+ .subscribe(listRepositories);
+ wok.topic('kimchi/repositoryDeleted')
+ .subscribe(listRepositories);
+ }
+
+ if(kimchi.capabilities['update_tool']) {
+ $('#software-update-section').removeClass('hidden');
+ initSoftwareUpdatesGrid();
+ wok.topic('kimchi/softwareUpdated')
+ .subscribe(listSoftwareUpdates);
+ $('#software-updates-progress-container').accordion({
+ collapsible: true
+ });
+ }
+
+ if(kimchi.capabilities['system_report_tool']) {
+ listDebugReports();
+ wok.topic('kimchi/debugReportAdded')
+ .subscribe(listDebugReports);
+ wok.topic('kimchi/debugReportRenamed')
+ .subscribe(listDebugReports);
+ }
+ };
+ setupUI();
+ };
+
+ kimchi.getHost(function(data) {
+ var htmlTmpl = $('#host-tmpl').html();
+ data['logo'] = data['logo'] || '';
+ data['memory'] = wok.formatMeasurement(data['memory'], {
+ fixed: 2
+ });
+ var templated = wok.substitute(htmlTmpl, data);
+ $('#host-content-container').html(templated);
+
+ initPage();
+ initTracker();
+ });
+
+ var StatsMgr = function() {
+ var statsArray = {
+ cpu: {
+ u: {
+ type: 'percent',
+ legend: i18n['KCHHOST6002M'],
+ points: []
+ }
+ },
+ memory: {
+ u: {
+ type: 'value',
+ base: 2,
+ fixed: 2,
+ legend: i18n['KCHHOST6003M'],
+ points: []
+ }
+ },
+ diskIO: {
+ r: {
+ type: 'value',
+ base: 2,
+ fixed: 2,
+ unit: 'B/s',
+ legend: i18n['KCHHOST6004M'],
+ points: []
+ },
+ w: {
+ type: 'value',
+ base: 2,
+ fixed: 2,
+ unit: 'B/s',
+ legend: i18n['KCHHOST6005M'],
+ 'class': 'disk-write',
+ points: []
+ }
+ },
+ networkIO: {
+ r: {
+ type: 'value',
+ base: 2,
+ fixed: 2,
+ unit: 'B/s',
+ legend: i18n['KCHHOST6006M'],
+ points: []
+ },
+ s: {
+ type: 'value',
+ base: 2,
+ fixed: 2,
+ unit: 'B/s',
+ legend: i18n['KCHHOST6007M'],
+ 'class': 'network-sent',
+ points: []
+ }
+ }
+ };
+ var SIZE = 20;
+ var cursor = SIZE;
+
+ var add = function(stats) {
+ for(var key in stats) {
+ var item = stats[key];
+ for(var metrics in item) {
+ var value = item[metrics]['v'];
+ var max = item[metrics]['max'];
+ var unifiedMetrics = statsArray[key][metrics];
+ var ps = unifiedMetrics['points'];
+ if(!Array.isArray(value)){
+ ps.push(value);
+ if(ps.length > SIZE + 1) {
+ ps.shift();
+ }
+ }
+ else{
+ ps=ps.concat(value);
+ ps.splice(0, ps.length-SIZE-1);
+ unifiedMetrics['points']=ps;
+ }
+ if(max !== undefined) {
+ unifiedMetrics['max'] = max;
+ }
+ else {
+ if(unifiedMetrics['type'] !== 'value') {
+ continue;
+ }
+ max = -Infinity;
+ $.each(ps, function(i, value) {
+ if(value > max) {
+ max = value;
+ }
+ });
+ if(max === 0) {
+ ++max;
+ }
+ max *= 1.1;
+ unifiedMetrics['max'] = max;
+ }
+ }
+ }
+ cursor++;
+ };
+
+ var get = function(which) {
+ var stats = statsArray[which];
+ var lines = [];
+ for(var k in stats) {
+ var obj = stats[k];
+ var line = {
+ type: obj['type'],
+ base: obj['base'],
+ unit: obj['unit'],
+ fixed: obj['fixed'],
+ legend: obj['legend']
+ };
+ if(obj['max']) {
+ line['max'] = obj['max'];
+ }
+ if(obj['class']) {
+ line['class'] = obj['class'];
+ }
+ var ps = obj['points'];
+ var numStats = ps.length;
+ var unifiedPoints = [];
+ $.each(ps, function(i, value) {
+ unifiedPoints.push({
+ x: cursor - numStats + i,
+ y: value
+ });
+ });
+ line['points'] = unifiedPoints;
+ lines.push(line);
+ }
+ return lines;
+ };
+
+ return {
+ add: add,
+ get: get
+ };
+ };
+
+ var Tracker = function(charts) {
+ var charts = charts;
+ var timer = null;
+ var statsPool = new StatsMgr();
+ var setCharts = function(newCharts) {
+ charts = newCharts;
+ for(var key in charts) {
+ var chart = charts[key];
+ chart.updateUI(statsPool.get(key));
+ }
+ };
+
+ var self = this;
+
+ var UnifyStats = function(stats) {
+ var result= {
+ cpu: {
+ u: {
+ v: stats['cpu_utilization']
+ }
+ },
+ memory: {
+ u: {
+ }
+ },
+ diskIO: {
+ r: {
+ v: stats['disk_read_rate']
+ },
+ w: {
+ v: stats['disk_write_rate']
+ }
+ },
+ networkIO: {
+ r: {
+ v: stats['net_recv_rate']
+ },
+ s: {
+ v: stats['net_sent_rate']
+ }
+ }
+ };
+ if(Array.isArray(stats['memory'])){
+ result.memory.u['v']=[];
+ result.memory.u['max']=-Infinity;
+ for(var i=0;i<stats['memory'].length;i++){
+ result.memory.u['v'].push(stats['memory'][i]['avail']);
+ result.memory.u['max']=Math.max(result.memory.u['max'],stats['memory'][i]['total']);
+ }
+ }
+ else {
+ result.memory.u['v']=stats['memory']['avail'],
+ result.memory.u['max']=stats['memory']['total']
+ }
+ return(result);
+ };
+
+
+ var statsCallback = function(stats) {
+ var unifiedStats = UnifyStats(stats);
+ statsPool.add(unifiedStats);
+ for(var key in charts) {
+ var chart = charts[key];
+ chart.updateUI(statsPool.get(key));
+ }
+ timer = setTimeout(function() {
+ continueTrack();
+ }, 1000);
+ };
+
+ var track = function() {
+ kimchi.getHostStatsHistory(statsCallback,
+ function() {
+ continueTrack();
+ });
+ };
+
+ var continueTrack = function() {
+ kimchi.getHostStats(statsCallback,
+ function() {
+ continueTrack();
+ });
+ };
+
+ var destroy = function() {
+ timer && clearTimeout(timer);
+ timer = null;
+ };
+
+ return {
+ setCharts: setCharts,
+ start: track,
+ stop: destroy
+ };
+ };
+
+ var initTracker = function() {
+ // TODO: Extend tabs with onUnload event to unregister timers.
+ if(kimchi.hostTimer) {
+ kimchi.hostTimer.stop();
+ delete kimchi.hostTimer;
+ }
+
+ var trackedCharts = {
+ cpu: new kimchi.widget.LineChart({
+ id: 'chart-cpu',
+ node: 'container-chart-cpu',
+ type: 'percent'
+ }),
+ memory: new kimchi.widget.LineChart({
+ id: 'chart-memory',
+ node: 'container-chart-memory',
+ type: 'value'
+ }),
+ diskIO: new kimchi.widget.LineChart({
+ id: 'chart-disk-io',
+ node: 'container-chart-disk-io',
+ type: 'value'
+ }),
+ networkIO: new kimchi.widget.LineChart({
+ id: 'chart-network-io',
+ node: 'container-chart-network-io',
+ type: 'value'
+ })
+ };
+
+ if(kimchi.hostTimer) {
+ kimchi.hostTimer.setCharts(trackedCharts);
+ }
+ else {
+ kimchi.hostTimer = new Tracker(trackedCharts);
+ kimchi.hostTimer.start();
+ }
+ };
+
+ $('#host-root-container').on('remove', function() {
+ if(kimchi.hostTimer) {
+ kimchi.hostTimer.stop();
+ delete kimchi.hostTimer;
+ }
+
+ repositoriesGrid && repositoriesGrid.destroy();
+ wok.topic('kimchi/repositoryAdded')
+ .unsubscribe(listRepositories);
+ wok.topic('kimchi/repositoryUpdated')
+ .unsubscribe(listRepositories);
+ wok.topic('kimchi/repositoryDeleted')
+ .unsubscribe(listRepositories);
+
+ softwareUpdatesGrid && softwareUpdatesGrid.destroy();
+ wok.topic('kimchi/softwareUpdated').unsubscribe(listSoftwareUpdates);
+
+ reportGrid && reportGrid.destroy();
+ wok.topic('kimchi/debugReportAdded').unsubscribe(listDebugReports);
+ wok.topic('kimchi/debugReportRenamed').unsubscribe(listDebugReports);
+ });
+};
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.report_add_main.js b/plugins/gingerbase/ui/js/src/gingerbase.report_add_main.js
new file mode 100644
index 0000000..5f098d3
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.report_add_main.js
@@ -0,0 +1,72 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2013-2014
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.report_add_main = function() {
+ var reportGridID = 'available-reports-grid';
+ var addReportForm = $('#form-report-add');
+ var submitButton = $('#button-report-add');
+ var nameTextbox = $('input[name="name"]', addReportForm);
+ nameTextbox.select();
+
+ var submitForm = function(event) {
+ if(submitButton.prop('disabled')) {
+ return false;
+ }
+ var reportName = nameTextbox.val();
+ var validator = RegExp("^[_A-Za-z0-9-]*$");
+ if (!validator.test(reportName)) {
+ wok.message.error.code('KCHDR6011M');
+ return false;
+ }
+ var formData = addReportForm.serializeObject();
+ var taskAccepted = false;
+ var onTaskAccepted = function() {
+ if(taskAccepted) {
+ return;
+ }
+ taskAccepted = true;
+ wok.window.close();
+ wok.topic('kimchi/debugReportAdded').publish();
+ };
+
+ kimchi.createReport(formData, function(result) {
+ onTaskAccepted();
+ wok.topic('kimchi/debugReportAdded').publish();
+ }, function(result) {
+ // Error message from Async Task status
+ if (result['message']) {
+ var errText = result['message'];
+ }
+ // Error message from standard kimchi exception
+ else {
+ var errText = result['responseJSON']['reason'];
+ }
+ result && wok.message.error(errText);
+
+ taskAccepted &&
+ $('.grid-body-view table tr:first-child',
+ '#' + reportGridID).remove();
+ submitButton.prop('disabled', false);
+ nameTextbox.select();
+ }, onTaskAccepted);
+
+ event.preventDefault();
+ };
+
+ addReportForm.on('submit', submitForm);
+ submitButton.on('click', submitForm);
+};
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.report_rename_main.js b/plugins/gingerbase/ui/js/src/gingerbase.report_rename_main.js
new file mode 100644
index 0000000..1bdb8d9
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.report_rename_main.js
@@ -0,0 +1,66 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2014
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.report_rename_main = function() {
+ var renameReportForm = $('#form-report-rename');
+ var submitButton = $('#button-report-rename');
+ var nameTextbox = $('input[name="name"]', renameReportForm);
+ var submitForm = function(event) {
+ if(submitButton.prop('disabled')) {
+ return false;
+ }
+ var reportName = nameTextbox.val();
+
+ // if the user hasn't changed the report's name,
+ // nothing should be done.
+ if (reportName == kimchi.selectedReport) {
+ wok.message.error.code('KCHDR6013M');
+ return false;
+ }
+
+ var validator = RegExp("^[A-Za-z0-9-]*$");
+ if (!validator.test(reportName)) {
+ wok.message.error.code('KCHDR6011M');
+ return false;
+ }
+ var formData = renameReportForm.serializeObject();
+ submitButton.prop('disabled', true);
+ nameTextbox.prop('disabled', true);
+ kimchi.renameReport(kimchi.selectedReport, formData, function(result) {
+ submitButton.prop('disabled', false);
+ nameTextbox.prop('disabled', false);
+ wok.window.close();
+ wok.topic('kimchi/debugReportRenamed').publish({
+ result: result
+ });
+ }, function(result) {
+ var errText = result &&
+ result['responseJSON'] &&
+ result['responseJSON']['reason'];
+ wok.message.error(errText);
+ submitButton.prop('disabled', false);
+ nameTextbox.prop('disabled', false).focus();
+ });
+
+ event.preventDefault();
+ };
+
+ renameReportForm.on('submit', submitForm);
+ submitButton.on('click', submitForm);
+
+ nameTextbox.val(kimchi.selectedReport).select();
+};
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.repository_add_main.js b/plugins/gingerbase/ui/js/src/gingerbase.repository_add_main.js
new file mode 100644
index 0000000..656306b
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.repository_add_main.js
@@ -0,0 +1,96 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2014
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.repository_add_main = function() {
+
+ var addForm = $('#form-repository-add');
+ var addButton = $('#button-repository-add');
+
+ var validateField = function(event) {
+ var valid=($(this).val()!=='');
+ $(addButton).prop('disabled', !valid);
+ return(valid);
+ };
+
+ var validateForm = function(event) {
+ var valid=false;
+ addForm.find('input.required').each( function() {
+ valid=($(this).val()!=='');
+ return(!valid);
+ });
+ return(valid);
+ }
+
+ addForm.find('input.required').on('input propertychange', validateField);
+
+ var weedObject = function(obj) {
+ for (var key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ if((typeof(obj[key])==="object") && !Array.isArray(obj[key])) {
+ weedObject(obj[key]);
+ }
+ else if(obj[key] == '') {
+ delete obj[key];
+ }
+ }
+ }
+ }
+
+ var addRepository = function(event) {
+ var valid = validateForm();
+ if(!valid) {
+ return false;
+ }
+
+ var formData = $(addForm).serializeObject();
+
+ if (formData && formData.isMirror!=undefined) {
+ formData.isMirror=(String(formData.isMirror).toLowerCase() === 'true');
+ }
+ if(formData.isMirror) {
+ if(formData.config==undefined) {
+ formData.config=new Object();
+ }
+ formData.config.mirrorlist=formData.baseurl;
+ delete formData.baseurl;
+ delete formData.isMirror;
+ }
+ weedObject(formData);
+ if(formData.config && formData.config.comps) {
+ formData.config.comps=formData.config.comps.split(/[,\s]/);
+ for(var i=0; i>formData.config.comps.length; i++) {
+ formData.config.comps[i]=formData.config.comps[i].trim();
+ }
+ for (var j=formData.config.comps.indexOf(""); j!=-1; j=formData.config.comps.indexOf("")) {
+ formData.config.comps.splice(j, 1);
+ }
+ }
+
+ kimchi.createRepository(formData, function() {
+ wok.topic('kimchi/repositoryAdded').publish();
+ wok.window.close();
+ }, function(jqXHR, textStatus, errorThrown) {
+ var reason = jqXHR &&
+ jqXHR['responseJSON'] &&
+ jqXHR['responseJSON']['reason'];
+ wok.message.error(reason);
+ });
+ return false;
+ };
+
+ $(addForm).on('submit', addRepository);
+};
diff --git a/plugins/gingerbase/ui/js/src/gingerbase.repository_edit_main.js b/plugins/gingerbase/ui/js/src/gingerbase.repository_edit_main.js
new file mode 100644
index 0000000..5bfc51e
--- /dev/null
+++ b/plugins/gingerbase/ui/js/src/gingerbase.repository_edit_main.js
@@ -0,0 +1,74 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2014
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+kimchi.repository_edit_main = function() {
+
+ var editForm = $('#form-repository-edit');
+
+ var saveButton = $('#repository-edit-button-save');
+
+ if(kimchi.capabilities['repo_mngt_tool']=="yum") {
+ editForm.find('input.deb').prop('disabled', true);
+ }
+ else if(kimchi.capabilities['repo_mngt_tool']=="deb") {
+ editForm.find('input.yum').prop('disabled', true);
+ }
+
+ kimchi.retrieveRepository(kimchi.selectedRepository, function(repository) {
+ editForm.fillWithObject(repository);
+
+ $('input', editForm).on('input propertychange', function(event) {
+ if($(this).val() !== '') {
+ $(saveButton).prop('disabled', false);
+ }
+ });
+ });
+
+
+ var editRepository = function(event) {
+ var formData = $(editForm).serializeObject();
+
+ if (formData && formData.config) {
+ formData.config.gpgcheck=(String(formData.config.gpgcheck).toLowerCase() === 'true');
+ }
+
+ if(formData.config && formData.config.comps) {
+ formData.config.comps=formData.config.comps.split(/[,\s]/);
+ for(var i=0; i>formData.config.comps.length; i++) {
+ formData.config.comps[i]=formData.config.comps[i].trim();
+ }
+ for (var j=formData.config.comps.indexOf(""); j!=-1; j=formData.config.comps.indexOf("")) {
+ formData.config.comps.splice(j, 1);
+ }
+ }
+
+ kimchi.updateRepository(kimchi.selectedRepository, formData, function() {
+ wok.topic('kimchi/repositoryUpdated').publish();
+ wok.window.close();
+ }, function(jqXHR, textStatus, errorThrown) {
+ var reason = jqXHR &&
+ jqXHR['responseJSON'] &&
+ jqXHR['responseJSON']['reason'];
+ wok.message.error(reason);
+ });
+
+ return false;
+ };
+
+ $(editForm).on('submit', editRepository);
+ $(saveButton).on('click', editRepository);
+};
diff --git a/plugins/gingerbase/ui/pages/help/de_DE/host.dita b/plugins/gingerbase/ui/pages/help/de_DE/host.dita
new file mode 100644
index 0000000..33a40e3
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/de_DE/host.dita
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="de-de">
+<title>Host</title>
+<shortdesc>Die Seite <wintitle>Host</wintitle> zeigt Informationen zum Hostsystem an und ermöglicht Ihnen, den Host herunterzufahren, erneut zu starten und eine Verbindung zu ihm herzustellen.</shortdesc>
+<csbody>
+<p>Sie können die folgenden Aktionen am Host durchführen:<ul>
+<li>Wählen Sie <uicontrol>Herunterfahren</uicontrol> aus, um das Hostsystem herunterzufahren.</li>
+<li>Wählen Sie <uicontrol>Erneut starten</uicontrol> aus, um das Hostsystem erneut zu starten.</li>
+<li>Wählen Sie <uicontrol>Verbinden</uicontrol> aus, um eine VNC-Verbindung zum Hostsystem herzustellen, wenn noch keine Verbindung besteht.</li>
+</ul></p>
+<p>Klicken Sie auf die folgenden Abschnitte, um Informationen zum Host anzuzeigen:<dl>
+<dlentry>
+<dt>Basisinformationen</dt>
+<dd>Dieser Abschnitt zeigt die Verteilung, die Version und den Codenamen des Hostbetriebssystems sowie den Prozessortyp und die Speicherkapazität in GB an.</dd>
+</dlentry><dlentry>
+<dt>Systemstatistik</dt>
+<dd>Dieser Abschnitt zeigt mithilfe von Grafiken Statistiken für CPU, Speicher, Platten-E/A und Netz-E/A für den Host an. Wählen Sie <uicontrol>Daten werden nach dem Verlassen dieser Seite gesammelt</uicontrol> aus, um mit der Sammlung von Daten fortzufahren, wenn die Host-Registerkarte nicht angezeigt wird.</dd>
+</dlentry><dlentry>
+<dt>Software-Updates</dt>
+<dd>Dieser Abschnitt zeigt Informationen für alle Pakete an, bei denen Aktualisierungen verfügbar sind, einschließlich Paketname, Version, Architektur und Repository. Sie können alle aufgelisteten Pakete aktualisieren, indem Sie <uicontrol>Alle aktualisieren</uicontrol> auswählen. Sie können nicht einzelne Pakete zur Aktualisierung auswählen.</dd>
+</dlentry><dlentry>
+<dt>Repositorys</dt>
+<dd>Dieser Abschnitt zeigt Repositorys an, die dem Hostsystem zugeordnet sind. Sie können Repositorys hinzufügen, aktivieren, bearbeiten oder entfernen. Beim Hinzufügen wird ein Repository dem Hostsystem zugeordnet. Das Aktivieren eines Repositorys dagegen ermöglicht dem Host den Zugriff auf das Repository. Wenn Ihr System Red Hat Enterprise
+Linux oder Fedora ist, können Sie <filepath>yum</filepath>-Repositorys hinzufügen.
+Wenn Ihr System Ubuntu oder Debian ist, fügen Sie <filepath>deb</filepath>-Repositorys hinzu.<p>Wenn Sie mit yum-Repositorys arbeiten, können Sie eine GPG-Prüfung hinzufügen, um sicherzustellen, dass ein Paket aus diesem Repository nicht beschädigt wurde.
+Wählen Sie ein Repository und dann <uicontrol>Bearbeiten</uicontrol> aus. Wählen Sie <uicontrol>Ja</uicontrol> aus, um die GPG-Prüfung zu aktivieren, und geben Sie dann ein URL zur GPG-Schlüsseldatei für das Repository ein.</p></dd>
+</dlentry><dlentry>
+<dt>Debugberichte</dt>
+<dd>Dieser Abschnitt zeigt Debugberichte, einschließlich Name und Dateipfad, an.
+Sie haben die Möglichkeit, einen neuen Bericht zu erstellen oder einen bestehenden Bericht umzubenennen, zu entfernen oder herunterzuladen.<p>Der Debugbericht wird während des Befehls <cmdname>sosreport</cmdname> generiert. Er ist verfügbar für Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>-, Fedora-
+und Ubuntu-Verteilungen. Der Befehl generiert eine .tar-Datei, die Konfigurations- und Diagnoseinformationen enthält, wie zum Beispiel Kernelversion, geladene Module sowie System- und Servicekonfigurationdateien.
+Der Befehl führt zudem externe Programme aus, um weitere Informationen zu sammeln, und speichert diese Ausgabe im resultierenden Archiv.</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/gingerbase/ui/pages/help/en_US/host.dita b/plugins/gingerbase/ui/pages/help/en_US/host.dita
new file mode 100644
index 0000000..0dcb670
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/en_US/host.dita
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+<?Pub Sty _display FontColor="red"?>
+<?Pub Inc?>
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="en-us">
+<title>Host</title>
+<shortdesc>The <wintitle>Host</wintitle> page shows information about
+the host system, and allows you to shut down, restart, and connect
+to the host.</shortdesc>
+<csbody>
+<p>You can perform the following actions on the host:<ul>
+<li>Select <uicontrol>Shut down</uicontrol> to shut down the host
+system.</li>
+<li>Select <uicontrol>Restart</uicontrol> to restart the host system.</li>
+<li>Select <uicontrol>Connect</uicontrol> to open a VNC connection
+to the host system, if it is not already connected.</li>
+</ul></p>
+<p>Click the following sections to display information about the host:<dl>
+<dlentry>
+<dt>Basic information</dt>
+<dd>This section displays the host operating system distribution,
+version, and code name, as well as the processor type, the number of
+online CPUs and amount of memory in GB.</dd>
+</dlentry><dlentry>
+<dt>System statistics</dt>
+<dd>This section displays graphs to show statistics for CPU, memory,
+disk I/O, and network I/O for the host. Select <uicontrol>Collecting
+data after leaving this page</uicontrol> to continue collecting data
+when the host tab is out of view.</dd>
+</dlentry><dlentry>
+<dt>Software Updates</dt>
+<dd>This section displays information for all of the packages that
+have updates available, including package name, version, architecture,
+and repository. You can update all of the packages listed by selecting <uicontrol>Update
+All</uicontrol>. You cannot select individual packages for updates.</dd>
+</dlentry><dlentry>
+<dt>Repositories</dt>
+<dd>This section displays repositories that are associated with the
+host system. You can add, enable, edit, or remove repositories. Adding
+a repository associates it with the host system while enabling a repository
+allows the host to access it. If your system is Red Hat Enterprise
+Linux or Fedora, you can add <filepath>yum</filepath> repositories.
+If your system is Ubuntu or Debian, then add <filepath>deb</filepath> repositories.<p>If
+you are working with yum repositories, you can add a GPG check to
+verify that a package from this repository have not been corrupted.
+Select a repository and then <uicontrol>Edit</uicontrol>. Select <uicontrol>Yes</uicontrol> to
+enable GPG Check and then enter a URL to the GPG key file for the
+repository.</p><?Pub Caret 156?></dd>
+</dlentry><dlentry>
+<dt>Debug reports</dt>
+<dd>This section displays debug reports, including name and file path.
+You can select from options to generate a new report, or rename, remove,
+or download an existing report.<p>The debug report is generated using
+the <cmdname>sosreport</cmdname> command. It is available for Red
+Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora,
+and Ubuntu distributions. The command generates a .tar file that contains
+configuration and diagnostic information, such as the running kernel
+version, loaded modules, and system and service configuration files.
+The command also runs external programs to collect further information
+and stores this output in the resulting archive.</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+<?Pub *0000003492?>
diff --git a/plugins/gingerbase/ui/pages/help/es_ES/host.dita b/plugins/gingerbase/ui/pages/help/es_ES/host.dita
new file mode 100644
index 0000000..7734244
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/es_ES/host.dita
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="es-es">
+<title>Host</title>
+<shortdesc>La página <wintitle>Host</wintitle> muestra información sobre el sistema host y le permite concluir, reiniciar y conectar con el sistema principal.</shortdesc>
+<csbody>
+<p>Puede realizar las acciones siguientes en el host:<ul>
+<li>Seleccione <uicontrol>Concluir</uicontrol> para concluir el sistema host.</li>
+<li>Seleccione <uicontrol>Reiniciar</uicontrol> para reiniciar el sistema host.</li>
+<li>Seleccione <uicontrol>Conectar</uicontrol> para abrir una conexión VNC al sistema host, si no está conectado aún.</li>
+</ul></p>
+<p>Pulse en las secciones siguientes para visualizar información acerca del host:<dl>
+<dlentry>
+<dt>Información básica</dt>
+<dd>Esta sección muestra la distribución del sistema operativo de host, la versión y el nombre de código, así como el tipo de procesador y la cantidad de memoria en GB.</dd>
+</dlentry><dlentry>
+<dt>Estadísticas del sistema</dt>
+<dd>Esta sección muestra gráficos para mostrar estadísticas para CPU, memoria, E/S de disco y E/S de red para el host. Seleccione <uicontrol>Recoger datos después de salir de esta página</uicontrol> para continuar la recogida de datos cuando la pestaña principal ya no está a la vista.</dd>
+</dlentry><dlentry>
+<dt>Actualizaciones de software</dt>
+<dd>En esta sección se muestra información para todos los paquetes que tienen actualizaciones disponibles, incluido el nombre de paquete, versión, arquitectura y repositorio. Puede actualizar todos los paquetes listados seleccionando <uicontrol>Actualizar todo</uicontrol>. No puede seleccionar paquetes individuales para las actualizaciones.</dd>
+</dlentry><dlentry>
+<dt>Repositorios</dt>
+<dd>En esta sección se muestran los repositorios que están asociados con el sistema host. Puede añadir, habilitar, editar o eliminar repositorios. Añadir un repositorio lo asocia con el sistema host mientras que habilitar un repositorio permite que el host acceda a él. Si el sistema es Red Hat Enterprise
+Linux o Fedora, puede añadir repositorios <filepath>yum</filepath>.
+Si el sistema es Ubuntu o Debian, añada repositorios <filepath>deb</filepath>.<p>Si está trabajando con repositorios yum, puede añadir una comprobación GPG para verificar que un paquete de este repositorio no ha resultado dañado.
+Seleccione un repositorio y, a continuación, <uicontrol>Editar</uicontrol>. Seleccione <uicontrol>Sí</uicontrol> para habilitar la comprobación GPG y, a continuación, especifique un URL al archivo de claves GPG para el repositorio.</p></dd>
+</dlentry><dlentry>
+<dt>Informes de depuración</dt>
+<dd>En esta sección se muestran informes de depuración, incluido el nombre y la ruta de archivo.
+Puede seleccionar entre opciones para generar un informe nuevo, o bien redenominar, eliminar o descargar un informe existente.<p>El informe de depuración se genera utilizando el mandato <cmdname>sosreport</cmdname>. Está disponible para distribuciones de Red
+Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora y Ubuntu. El mandato genera un archivo .tar que contiene la información de configuración y de diagnóstico, como la versión de kernel en ejecución, los módulos de carga y los archivos de configuración del sistema y servicio.
+El mandato también ejecuta programas externos para recopilar información adicional y almacena esta salida en el archivo resultante.</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/gingerbase/ui/pages/help/fr_FR/host.dita b/plugins/gingerbase/ui/pages/help/fr_FR/host.dita
new file mode 100644
index 0000000..f4c330b
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/fr_FR/host.dita
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="fr-fr">
+<title>Hôte</title>
+<shortdesc>La page <wintitle>Hôte</wintitle> affiche des informations
+sur le système hôte et vous permet d'arrêter, de redémarrer et de vous
+connecter à l'hôte.</shortdesc>
+<csbody>
+<p>Vous pouvez effectuer les actions suivantes sur l'hôte :<ul>
+<li>Sélectionnez <uicontrol>Arrêter</uicontrol> pour arrêter le système hôte.</li>
+<li>Sélectionnez <uicontrol>Redémarrer</uicontrol> pour redémarrer le système hôte.</li>
+<li>Sélectionnez <uicontrol>Connexion</uicontrol> pour ouvrir une connexion VNC
+au système hôte, si celui-ci n'est pas déjà connecté.</li>
+</ul></p>
+<p>Cliquez sur les sections suivantes pour afficher des informations sur l'hôte :<dl>
+<dlentry>
+<dt>Informations de base</dt>
+<dd>Cette section affiche la distribution, la version et le nom de code
+du système d'exploitation hôte, ainsi que le type de processeur et la quantité
+de mémoire en Go.</dd>
+</dlentry><dlentry>
+<dt>Statistiques système</dt>
+<dd>Cette section affiche les graphiques des statistiques pour l'UC, mémoire, ainsi que
+les E-S disque et E-S réseau pour l'hôte. Sélectionnez <uicontrol>Collecte des données une fois la page quittée</uicontrol>
+pour continuer la collecte de données lorsque l'onglet hôte n'est plus visible.</dd>
+</dlentry><dlentry>
+<dt>Mises à jour logicielles</dt>
+<dd>Cette section affiche des informations pour tous les modules qui
+disposent de mises à jour disponibles, y compris le nom de module, la version, l'architecture
+et le référentiel. Vous pouvez mettre à jour toutes les modules répertoriés en sélectionnant <uicontrol>Tout
+mettre à jour</uicontrol>. Vous ne pouvez pas sélectionner des modules individuels pour les mises à jour.</dd>
+</dlentry><dlentry>
+<dt>Référentiels</dt>
+<dd>Cette section affiche les référentiels associés au système hôte. Vous pouvez ajouter, activer, éditer ou retirer des référentiels. L'ajout d'un référentiel associe celui-ci au système hôte,
+tandis que l'activation d'un référentiel permet à l'hôte d'y accéder. Si votre système est Red Hat Enterprise Linux ou Fedora,
+vous pouvez ajouter des référentiels <filepath>yum</filepath>.
+Si votre système est de type Ubuntu ou Debian, ajoutez des référentiels
+<filepath>deb</filepath>.<p>Si vous travaillez avec des référentiels yum, vous pouvez ajouter un contrôle GPG
+afin de vérifier qu'un module provenant de ce référentiel n'a pas été endommagé.
+Sélectionnez un référentiel puis cliquez sur <uicontrol>Editer</uicontrol>. Sélectionnez <uicontrol>Oui</uicontrol> pour activer le contrôle GPG,
+puis entrez une URL pour le fichier de clés GPG du référentiel.</p></dd>
+</dlentry><dlentry>
+<dt>Rapports de débogage</dt>
+<dd>Cette section affiche les rapports de débogage, y compris le nom et le chemin du fichier.
+Vous pouvez faire un choix parmi les options afin de générer un nouveau rapport, ou renommer, supprimer,
+ou télécharger un rapport existant.<p>Le rapport de débogage est généré à
+l'aide de la commande <cmdname>sosreport</cmdname>. Cette option est disponible pour les distributions
+Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora et Ubuntu. La commande génère un fichier .tar contenant la configuration et des informations de diagnostic,
+telles que la version du noyau d'exécution, les modules chargés, ainsi que les fichiers de configuration
+du système et de la maintenance.
+La commande exécute également des programmes externes pour collecter des informations
+supplémentaires et stocke cette sortie dans l'archive résultante.</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/gingerbase/ui/pages/help/it_IT/host.dita b/plugins/gingerbase/ui/pages/help/it_IT/host.dita
new file mode 100644
index 0000000..63d3367
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/it_IT/host.dita
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="it-it">
+<title>Host</title>
+<shortdesc>La pagina <wintitle>Host</wintitle> visualizza le informazioni sul sistema host e consente di arrestarlo, riavviarlo e connettersi ad esso.</shortdesc>
+<csbody>
+<p>È possibile effettuare le seguenti operazioni sull'host:<ul>
+<li>Selezionare <uicontrol>Arresta</uicontrol> per arrestare il sistema host.</li>
+<li>Selezionare <uicontrol>Riavvia</uicontrol> per riavviare il sistema host.</li>
+<li>Selezionare <uicontrol>Connetti</uicontrol> per aprire una connessione VNC al sistema host, se non è già connesso.</li>
+</ul></p>
+<p>Fare clic sulle seguenti sezioni per visualizzare le informazioni sull'host:<dl>
+<dlentry>
+<dt>Informazioni di base</dt>
+<dd>Questa sezione visualizza il nome codice, la versione e la distribuzione del sistema operativo, come pure il tipo di processore e la quantità di memoria in GB.</dd>
+</dlentry><dlentry>
+<dt>Statistiche di sistema</dt>
+<dd>Questa sezione visualizza i grafici che mostrano le statistiche per la CPU, la memoria, l'I/O disco e di rete per l'host. Selezionare <uicontrol>Raccolta dati all'uscita dalla pagina</uicontrol> per continuare la raccolta dei dati quando la scheda host non è più visibile.</dd>
+</dlentry><dlentry>
+<dt>Aggiornamenti del software</dt>
+<dd>Questa sezione visualizza le informazioni per tutti i pacchetti per cui sono disponibili gli aggiornamenti, incluso il nome, la versione, l'architettura e il repository del pacchetto. È possibile aggiornare tutti i pacchetti elencati, selezionando <uicontrol>Aggiorna tutto</uicontrol>. Non è possibile selezionare singoli pacchetti per gli aggiornamenti.</dd>
+</dlentry><dlentry>
+<dt>Repository</dt>
+<dd>Questa sezione visualizza i repository associati al sistema host. È possibile aggiungere, abilitare, modificare o rimuovere i repository. L'aggiunta di un repository lo associa al sistema host, mentre l'abilitazione di un repository
+consente all'host di accedervi. Se il sistema è Red Hat Enterprise
+Linux o Fedora, è possibile aggiungere i repository <filepath>yum</filepath>.
+Se il sistema è Ubuntu o Debian, aggiungere i repository <filepath>deb</filepath>.<p>Se si stanno utilizzando i repository yum, è possibile aggiungere un controllo GPG per verificare che un pacchetto da questo repository non sia stato corrotto.
+Selezionare un repository, quindi <uicontrol>Modifica</uicontrol>. Selezionare <uicontrol>Sì</uicontrol> per abilitare il controllo GPG, quindi immettere un URL al file di chiavi GPG per il
+repository.</p></dd>
+</dlentry><dlentry>
+<dt>Report di debug</dt>
+<dd>Questa sezione visualizza i report di debug, incluso il nome e il percorso file.
+Le opzioni disponibili consentono di generare un nuovo report oppure ridenominare, rimuovere o scaricare un report esistente.<p>Il report di debug viene generato utilizzando il comando <cmdname>sosreport</cmdname>. È disponibile per le distribuzioni Red
+Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora e Ubuntu. Il comando genera un file .tar che contiene informazioni di diagnostica e configurazione, come la versione del kernel in esecuzione, i moduli caricati e i file di configurazione del servizio e del sistema.
+Il comando esegue anche programmi esterni per raccogliere ulteriori informazioni e memorizza l'output nell'archivio risultante.</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/gingerbase/ui/pages/help/ja_JP/host.dita b/plugins/gingerbase/ui/pages/help/ja_JP/host.dita
new file mode 100644
index 0000000..3a0141c
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/ja_JP/host.dita
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="ja-jp">
+<title>ホスト</title>
+<shortdesc><wintitle>「ホスト」</wintitle>ページには、ホスト・システムに関する情報が表示されます。ここで、ホストをシャットダウン、再始動、またホストに接続することができます。
+</shortdesc>
+<csbody>
+<p>以下のアクションをホストに対して実行できます。
+<ul>
+<li>ホスト・システムをシャットダウンするには<uicontrol>「シャットダウン」</uicontrol>を選択します。
+</li>
+<li>ホスト・システムを再始動するには<uicontrol>「再始動」</uicontrol>を選択します。
+</li>
+<li>ホスト・システムへの VNC 接続を (まだ接続されていない場合に) オープンするには、<uicontrol>「接続」</uicontrol>を選択します。
+</li>
+</ul></p>
+<p>ホストに関する情報を表示するには、以下の選択項目をクリックしてください。
+<dl>
+<dlentry>
+<dt>基本情報</dt>
+<dd>このセクションには、ホスト・オペレーティング・システムのディストリビューション、バージョン、およびコード名、さらにプロセッサー・タイプとメモリーの量 (GB 単位) が表示されます。
+</dd>
+</dlentry><dlentry>
+<dt>システム統計情報</dt>
+<dd>このセクションには、ホストの CPU、メモリー、ディスク入出力、およびネットワーク入出力の統計情報を表すグラフが表示されます。
+ホスト・タブを閉じたときにデータの収集を続行するには、<uicontrol>「このページを閉じた後、データを収集する」</uicontrol>を選択してください。
+</dd>
+</dlentry><dlentry>
+<dt>ソフトウェア更新</dt>
+<dd>このセクションには、更新が用意されているパッケージすべての情報
+(パッケージ名、バージョン、アーキテクチャー、リポジトリーなど) が表示されます。
+<uicontrol>「すべて更新」</uicontrol>を選択すると、リストされているパッケージすべてを更新できます。
+更新する対象として個別のパッケージを選択することはできません。
+</dd>
+</dlentry><dlentry>
+<dt>リポジトリー</dt>
+<dd>このセクションには、ホスト・システムに関連付けられているリポジトリーが表示されます。
+リポジトリーを追加する、有効にする、編集する、または削除することができます。
+リポジトリーを追加すると、そのリポジトリーがホスト・システムに関連付けられ、リポジトリーを有効にすると、そのリポジトリーにホストがアクセスできるようになります。
+システムが Red Hat Enterprise Linux または Fedora であれば、<filepath>yum</filepath> リポジトリーを追加できます。
+システムが Ubuntu または Debian であれば、<filepath>deb</filepath> リポジトリーを追加してください。
+<p>yum リポジトリーを操作している場合、そのリポジトリーに入っているパッケージが壊れていないことを確認するため、GPG チェックを追加できます。
+リポジトリーを選択し、<uicontrol>「編集」</uicontrol>をクリックしてください。
+<uicontrol>「はい」</uicontrol>を選択して GPG チェックを有効にしてから、そのリポジトリーの GPG 鍵ファイルの URL を入力してください。
+</p></dd>
+</dlentry><dlentry>
+<dt>デバッグ・レポート</dt>
+<dd>このセクションには、デバッグ・レポート (名前やファイル・パスなど) が表示されます。
+新しいレポートを生成、既存のレポートを名前変更、削除、またはダウンロードするためのオプションを選択できます。
+<p>デバッグ・レポートは、<cmdname>sosreport</cmdname> コマンドで生成されます。
+これは、Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>、Fedora、および Ubuntu ディストリビューションに用意されています。
+このコマンドは、構成および診断情報 (稼働中のカーネルのバージョン、ロードされているモジュール、システムおよびサービス構成ファイルなど) が入った .tar ファイルを生成します。
+このコマンドはまた、外部プログラムを実行して情報をさらに収集し、その出力を結果のアーカイブに保管します。
+</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 227 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 1 -->
diff --git a/plugins/gingerbase/ui/pages/help/ko_KR/host.dita b/plugins/gingerbase/ui/pages/help/ko_KR/host.dita
new file mode 100644
index 0000000..ee4a9c3
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/ko_KR/host.dita
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="ko-kr">
+<title>호스트</title>
+<shortdesc><wintitle>호스트</wintitle> 페이지에는 호스트 시스템에 대한 정보가 표시되며 이 페이지를 사용하여 호스트를 종료 및 다시 시작하거나 호스트에 연결할 수 있습니다.</shortdesc>
+<csbody>
+<p>호스트에 대해 다음 조치를 수행할 수 있습니다.<ul>
+<li>호스트 시스템을 종료하려면 <uicontrol>시스템 종료</uicontrol>를 선택합니다.</li>
+<li>호스트 시스템을 다시 시작하려면 <uicontrol>다시 시작</uicontrol>을 선택합니다.</li>
+<li>이미 연결되어 있지 않은 경우, 호스트 시스템에 대한 VNC 연결을 시작하려면 <uicontrol>연결</uicontrol>을 선택합니다.</li>
+</ul></p>
+<p>호스트에 대한 정보를 표시하려면 다음 섹션을 클릭하십시오.<dl>
+<dlentry>
+<dt>기본 정보</dt>
+<dd>이 섹션에는 호스트 운영 체제 배포, 버전, 코드 이름, 프로세서 유형, 메모리 용량(GB) 등이 표시됩니다.</dd>
+</dlentry><dlentry>
+<dt>시스템 통계</dt>
+<dd>이 섹션에는 호스트의 CPU, 메모리, 디스크 I/O, 네트워크 I/O에 대한 통계를 표시하는 그래프가 표시됩니다. 호스트 탭을 떠났을 때 데이터 수집을 계속하려면 <uicontrol>이 페이지를 떠난 후에 데이터 수집</uicontrol>을 선택합니다.</dd>
+</dlentry><dlentry>
+<dt>소프트웨어 업데이트</dt>
+<dd>이 섹션에는 패키지 이름, 버전, 아키텍처, 저장소를 비롯하여 사용 가능한 업데이트가 있는 모든 패키지에 대한 정보가 표시됩니다. <uicontrol>모두 업데이트</uicontrol>를 선택하여 나열된 모든 패키지를 업데이트할 수 있습니다. 업데이트에 대해 개별 패키지를 선택할 수는 없습니다.</dd>
+</dlentry><dlentry>
+<dt>저장소</dt>
+<dd>이 섹션에는 호스트 시스템과 연관된 저장소가 표시됩니다. 저장소를 추가하거나, 사용으로 설정하거나, 편집하거나, 제거할 수 있습니다. 저장소를 추가하면 저장소가 호스트 시스템과 연관되며, 저장소를 사용으로 설정하면 호스트가 저장소에 액세스할 수 있습니다. 해당 시스템이 Red Hat Enterprise Linux 또는 Fedora인 경우, <filepath>yum</filepath> 저장소를 추가할 수 있습니다.
+해당 시스템이 Ubuntu 또는 Debian인 경우, <filepath>deb</filepath> 저장소를 추가하십시오.<p>yum 저장소로 작업하는 경우, GPG 검사를 추가하여 이 저장소의 패키지가 손상되지 않았는지 확인할 수 있습니다.
+저장소를 선택한 후 <uicontrol>편집</uicontrol>을 선택하십시오. <uicontrol>예</uicontrol>를 선택하여 GPG 검사를 사용으로 설정한 후 저장소에 대한 GPG 키 파일의 URL을 입력하십시오.</p></dd>
+</dlentry><dlentry>
+<dt>디버그 보고서</dt>
+<dd>이 섹션에는 이름 및 파일 경로를 포함한 디버그 보고서가 표시됩니다.
+새 보고서 생성, 기존 보고서 이름 바꾸기, 제거, 다운로드 등의 옵션 중에서 선택할 수 있습니다.<p>디버그 보고서는 <cmdname>sosreport</cmdname> 명령을 사용하여 생성됩니다. 이는 Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora 및 Ubuntu 배포에서 사용 가능합니다. 이 명령은 구성 및 진단 정보(예: 실행 중인 커널 버전, 로드된 모듈, 시스템 및 서비스 구성 파일)를 포함하는 .tar 파일을 생성합니다.
+또한 이 명령은 외부 프로그램을 실행하여 추가 정보를 수집하고 결과 아카이브에 이 출력을 저장합니다.</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/gingerbase/ui/pages/help/pt_BR/host.dita b/plugins/gingerbase/ui/pages/help/pt_BR/host.dita
new file mode 100644
index 0000000..88f7eb2
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/pt_BR/host.dita
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="pt-br">
+<title>Host</title>
+<shortdesc>A página <wintitle>Host</wintitle> mostra informações sobre
+o sistema host e permite encerrar, reiniciar e conectar
+ao host.</shortdesc>
+<csbody>
+<p>É possível executar as ações a segur no host:<ul>
+<li>Selecione <uicontrol>Encerrar</uicontrol> para encerrar o sistema
+host.</li>
+<li>Selecione <uicontrol>Reiniciar</uicontrol> para reiniciar o sistema host.</li>
+<li>Selecione <uicontrol>Conectar</uicontrol> para abrir uma conexão VNC
+para o sistema host, se ele já não estiver conectado.</li>
+</ul></p>
+<p>Clique nas seções a seguir para exibir informações sobre o host:<dl>
+<dlentry>
+<dt>Informações básicas</dt>
+<dd>Esta seção exibe a distribuição do sistema operacional do host,
+a versão e o nome do código, bem como o tipo de processador e quantia de
+memória em GB.</dd>
+</dlentry><dlentry>
+<dt>Estatísticas do sistema</dt>
+<dd>Esta seção exibe gráficos para mostrar estatísticas para CPU, memória,
+E/S de disco e E/S de rede para o host. Selecione <uicontrol>Coletando
+dados depois de sair desta página</uicontrol> para continuar a coletar dados
+quando a guia do host estiver fora de visualização.</dd>
+</dlentry><dlentry>
+<dt>Atualizações de software</dt>
+<dd>Esta seção exibe informações de todos os pacotes que
+possuem atualizações disponíveis, incluindo nome do pacote, versão, arquitetura
+e repositório. É possível atualizar todos os pacotes listados selecionando <uicontrol>Atualizar
+todos</uicontrol>. Não é possível selecionar pacotes individuais para atualizações.</dd>
+</dlentry><dlentry>
+<dt>Repositórios</dt>
+<dd>Esta seção exibe repositórios que estão associados ao
+sistema host. É possível incluir, ativar, editar ou remover repositórios. Incluir
+um repositório o associa com o sistema host enquanto ativar um repositório
+permite que o host o acesse. Se o seu sistema for Red Hat Enterprise
+Linux ou Fedora, será possível incluir repositórios <filepath>yum</filepath>.
+Se o seu sistema for Ubuntu ou Debian, inclua repositórios <filepath>deb</filepath>.<p>Se
+você estiver trabalhando com repositórios yum, será possível incluir uma verificação de GPG para
+verificar se um pacote desse repositório não foi corrompido.
+Selecione um repositório e, em seguida, <uicontrol>Editar</uicontrol>. Selecione <uicontrol>Sim</uicontrol> para
+ativar a Verificação de GPG e, em seguida, insira uma URL no arquivo-chave de GPG para o
+repositório.</p></dd>
+</dlentry><dlentry>
+<dt>Relatórios de depuração</dt>
+<dd>Esta seção exibe relatórios de depuração, incluindo nome e caminho do arquivo.
+É possível selecionar a partir das opções para gerar um novo relatório ou renomear, remover
+ou fazer o download de um relatório existente.<p>O relatório de depuração é gerado usando
+o comando <cmdname>sosreport</cmdname>. Ele está disponível para distribuições
+Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora
+e Ubuntu. O comando gera um arquivo .tar que contém
+informações de configuração e de diagnóstico, como versão do kernel
+em execução, módulos carregados e arquivos de configuração de sistema e de serviço.
+O comando também executa programas externos para coletar informações adicionais
+e armazena essa saída no archive resultante.</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/gingerbase/ui/pages/help/ru_RU/host.dita b/plugins/gingerbase/ui/pages/help/ru_RU/host.dita
new file mode 100644
index 0000000..fb72c21
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/ru_RU/host.dita
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="ru-ru">
+<title>Хост</title>
+<shortdesc>Страница <wintitle>Хост</wintitle> показывает информацию о системе хоста и позволяет останавливать хост, перезапускать хост и подключаться к нему.</shortdesc>
+<csbody>
+<p>На хосте можно выполнять следующие действия:<ul>
+<li><uicontrol>Завершить работу</uicontrol> - остановить систему хоста.</li>
+<li><uicontrol>Перезапустить</uicontrol> - перезапустить систему хоста.</li>
+<li><uicontrol>Подключиться</uicontrol> - открыть соединение VNC с системой хоста, если оно еще не установлено.</li>
+</ul></p>
+<p>Щелкните на следующих разделах для просмотра информации о хосте:<dl>
+<dlentry>
+<dt>Базовая информация</dt>
+<dd>В этом разделе показывается вариант операционной системы, его версия и кодовое имя, а также тип процессора и объем памяти в ГБ.</dd>
+</dlentry><dlentry>
+<dt>Системная статистика</dt>
+<dd>В этом разделе показываются графики, отражающие статистическую информацию о процессоре, памяти, дисковом вводе-выводе и сетевом вводе-выводе для хоста. Выберите <uicontrol>Сбор данных после закрытия этой страницы</uicontrol>, чтобы сбор данных продолжался после закрытия вкладки Хост.</dd>
+</dlentry><dlentry>
+<dt>Обновления программного обеспечения</dt>
+<dd>В этом разделе показывается информация обо всех пакетах, для которых доступны обновления, включая имя пакета, версию, архитектуру и хранилище. Можно обновить все пакеты в списке щелчком на <uicontrol>Обновить все</uicontrol>. Отдельные пакеты для обновления выбрать нельзя.</dd>
+</dlentry><dlentry>
+<dt>Хранилища</dt>
+<dd>В этом разделе показываются хранилища, связанные с системой хоста. Хранилища можно добавлять, активировать, изменять и удалять. При добавлении хранилище связывается с системой хоста, при активации хранилище становится доступным для хоста. Если система - Red Hat Enterprise Linux или Fedora, можно добавить хранилища <filepath>yum</filepath>.
+Если система - Ubuntu или Debian, добавьте хранилища <filepath>deb</filepath>.<p>При работе с хранилищами yum можно добавить проверку GPG для проверки целостности пакетов из данного хранилища.
+Выберите хранилище и щелкните на <uicontrol>Изменить</uicontrol>. Выберите <uicontrol>Да</uicontrol>, чтобы включить проверку GPG, и введите URL файла ключей GPG для хранилища.</p></dd>
+</dlentry><dlentry>
+<dt>Отладочные отчеты</dt>
+<dd>В этом разделе показываются отладочные отчеты, включая имя и путь.
+Доступны команды для создания, переименования, удаления и загрузки отчетов.<p>Отладочный отчет создается командой <cmdname>sosreport</cmdname>. Он доступен для Red
+Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora и Ubuntu. Команда создает файл .tar с конфигурационной и диагностической информацией, такой как версия ядра, загруженные модули и файлы конфигурации системы и служб.
+Команда также выполняет внешние программы для сбора дополнительной информации и сохраняет их вывод в результирующем архиве.</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/gingerbase/ui/pages/help/zh_CN/host.dita b/plugins/gingerbase/ui/pages/help/zh_CN/host.dita
new file mode 100644
index 0000000..78a89c3
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/zh_CN/host.dita
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="zh-cn">
+<title>主机</title>
+<shortdesc>“<wintitle>主机</wintitle>”页面显示有关主机系统的信息,并且允许您对主机进行关闭、启动和连接。</shortdesc>
+<csbody>
+<p>可对主机执行以下操作:<ul>
+<li>选择<uicontrol>关闭</uicontrol>以关闭主机系统。</li>
+<li>选择<uicontrol>重新启动</uicontrol>以重新启动主机系统。</li>
+<li>选择<uicontrol>连接</uicontrol>以打开与主机系统的 VNC 连接(如果尚未连接)。</li>
+</ul></p>
+<p>单击以下部分以显示有关主机的信息:<dl>
+<dlentry>
+<dt>基本信息</dt>
+<dd>本部分显示主机操作系统分发版、版本和代码名称以及处理器类型和内存量(以 GB 计)。</dd>
+</dlentry><dlentry>
+<dt>系统统计信息</dt>
+<dd>本部分显示图形,以显示主机有关 CPU、内存、磁盘 I/O 和网络 I/O 的统计信息。选择<uicontrol>离开此页面之后收集数据</uicontrol>以继续在主机选项卡不在视图中时收集数据。</dd>
+</dlentry><dlentry>
+<dt>软件更新</dt>
+<dd>本部分显示有更新可用的所有软件包的信息,其中包括软件包名称、版本、体系结构和存储库。可通过选择<uicontrol>全部更新</uicontrol>来更新所列示的所有软件包。不能针对更新选择各个软件包。</dd>
+</dlentry><dlentry>
+<dt>存储库</dt>
+<dd>本部分显示与主机系统关联的存储库。您可以添加、启用、编辑或除去存储库。当启用存储库会允许主机对其进行访问时,添加存储库会将其与主机系统关联。如果您的系统为 Red Hat Enterprise Linux 或 Fedora,那么可添加 <filepath>yum</filepath> 存储库。如果您的系统为 Ubuntu 或 Debian,那么请添加 <filepath>deb</filepath> 存储库。<p>如果要处理 Yum 存储库,您可以添加 GPG 检查以验证此存储库中的软件包是否已损坏。选择一个存储库,然后选择<uicontrol>编辑</uicontrol>。选择<uicontrol>是</uicontrol>以启用 GPG 检查,然后输入存储库中 GPG 密钥文件的 URL。</p></dd>
+</dlentry><dlentry>
+<dt>调试报告</dt>
+<dd>本部分显示调试报告,其中包括名称和文件路径。您可以从选项中进行选择以生成新报告,或者对现有报告进行重命名、除去或下载。<p>调试报告将使用
+<cmdname>sosreport</cmdname> 命令生成。该报告可用于 Red
+Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>、Fedora 和 Ubuntu 分发版。该命令将生成包含配置和诊断信息的 .tar 文件,例如,正在运行的内核版本、已装入的模块以及系统和服务配置文件。该命令还会运行外部程序以收集更多信息并将此输出存储在生成的归档中。</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/gingerbase/ui/pages/help/zh_TW/host.dita b/plugins/gingerbase/ui/pages/help/zh_TW/host.dita
new file mode 100644
index 0000000..a55aae4
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/help/zh_TW/host.dita
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+
+
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="kimhhost" xml:lang="zh-tw">
+<title>主機</title>
+<shortdesc>「<wintitle>主機</wintitle>」頁面會顯示主機系統的相關資訊,並容許您關閉、重新啟動以及連接到主機。</shortdesc>
+<csbody>
+<p>您可以針對主機執行下列動作:<ul>
+<li>選取<uicontrol>關閉</uicontrol>以關閉主機系統。</li>
+<li>選取<uicontrol>重新啟動</uicontrol>以重新啟動主機系統。</li>
+<li>選取<uicontrol>連接</uicontrol>以開啟與主機系統的 VNC 連線(如果尚未連線到主機系統)。</li>
+</ul></p>
+<p>按一下下列區段以顯示主機的相關資訊:<dl>
+<dlentry>
+<dt>基本資訊</dt>
+<dd>此區段會顯示主機作業系統發行套件、版本、程式碼名稱、處理器類型以及記憶體數量 (GB)。</dd>
+</dlentry><dlentry>
+<dt>系統統計資料</dt>
+<dd>此區段會顯示一些圖形,以顯示主機的 CPU、記憶體、磁碟 I/O 和網路 I/O 的統計資料。選取<uicontrol>離開此頁面之後收集資料</uicontrol>以在主機標籤從視線中消失之後繼續收集資料。</dd>
+</dlentry><dlentry>
+<dt>軟體更新</dt>
+<dd>此區段會顯示具有可用更新的所有套件的相關資訊,包括套件名稱、版本、架構和儲存庫。您可以透過選取<uicontrol>全部更新</uicontrol>來更新所有列出的套件。不能選取個別套件以進行更新。</dd>
+</dlentry><dlentry>
+<dt>儲存庫</dt>
+<dd>此區段會顯示與主機系統相關聯的儲存庫。您可以新增、啟用、編輯或移除儲存庫。新增儲存庫可使它與主機系統相關聯,而啟用儲存庫則容許主機存取儲存庫。如果您的系統是
+Red Hat Enterprise Linux 或 Fedora,則可以新增 <filepath>yum</filepath> 儲存庫。如果您的系統是
+Ubuntu 或 Debian,則可以新增 <filepath>deb</filepath> 儲存庫。<p>如果您正在使用
+yum 儲存庫,則可以新增 GPG 檢查以驗證此儲存庫中的某個套件是否未毀損。選取儲存庫,然後選取<uicontrol>編輯</uicontrol>。選取<uicontrol>是</uicontrol>以啟用
+GPG 檢查,然後輸入儲存庫的 GPG 金鑰檔的 URL。</p></dd>
+</dlentry><dlentry>
+<dt>除錯報告</dt>
+<dd>此區段顯示除錯報告,包括名稱和檔案路徑。您可以選取選項以產生新報告、或是重新命名、移除或下載現有報告。<p>除錯報告是使用
+<cmdname>sosreport</cmdname> 指令產生的。該指令可用於 Red
+Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>、Fedora
+及 Ubuntu 發行套件。該指令會產生 .tar 檔案,其包含配置與診斷資訊,例如執行中的核心版本、已載入模組以及系統和服務配置檔案。該指令還會執行外部程式來收集更多資訊並將此輸出儲存在產生的保存檔中。</p> </dd>
+</dlentry></dl></p>
+</csbody>
+<?tm 1392659967 1?>
+</cshelp>
+
+
+<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- T9N_SRC_ID 232 -->
+<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/gingerbase/ui/pages/host.html.tmpl b/plugins/gingerbase/ui/pages/host.html.tmpl
new file mode 100644
index 0000000..d87debc
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/host.html.tmpl
@@ -0,0 +1,177 @@
+#*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2013-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *#
+
+#unicode UTF-8
+#import gettext
+#from wok.cachebust import href
+#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
+#silent _ = t.gettext
+#silent _t = t.gettext
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="stylesheet" href="plugins/kimchi/css/theme-default.min.css">
+<script src="plugins/kimchi/js/kimchi.min.js"></script>
+</head>
+<body>
+<div id="host-root-container">
+ <div class="toolbar">
+ <div class="tools">
+ </div>
+ </div>
+ <div id="host-content-container" class="empty-when-logged-off"></div>
+</div>
+
+<script id="host-tmpl" type="kimchi/template">
+ <div class="host-panel">
+ <div class="logo-container">
+ <div class="logo" style="background-image: url({logo});"></div>
+ </div>
+ <div id="host-info-container" class="info-container">
+ <h2 class="hostname">{hostname}</h2>
+ <div class="action-panel">
+ <button id="host-button-shutdown" class="btn-normal-1 stop">
+ <div class="button-icon action-icon-stop"></div>
+ $_("Shut down")
+ </button>
+ <button id="host-button-restart" class="btn-normal-1 restart">
+ <div class="button-icon action-icon-restart"></div>
+ $_("Restart")
+ </button>
+ <button class="btn-normal-1 connect" disabled="disabled">
+ <div class="button-icon action-icon-connect"></div>
+ $_("Connect")
+ </button>
+ </div>
+ <div class="host-section">
+ <h3 class="section-header"
+ aria-expanded="false"
+ aria-controls="content-sys-info">
+ $_("Basic Information")
+ </h3>
+ <div id="content-sys-info" class="section-content">
+ <div class="section-row">
+ <div class="section-label">$_("OS Distro")</div>
+ <div class="section-value">{os_distro}</div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("OS Version")</div>
+ <div class="section-value">{os_version}</div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("OS Code Name")</div>
+ <div class="section-value">{os_codename}</div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("Processor")</div>
+ <div class="section-value">{cpu_model}</div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("CPU(s)")</div>
+ <div class="section-value">{cpus}</div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("Memory")</div>
+ <div class="section-value">{memory}</div>
+ </div>
+ </div>
+ </div>
+ <div class="host-section">
+ <h3 class="section-header"
+ aria-controls="content-sys-statistics">
+ $_("System Statistics")
+ </h3>
+ <div id="content-sys-statistics" class="section-content">
+ <div class="section-row">
+ <div class="section-label">$_("CPU")</div>
+ <div class="section-value">
+ <div id="container-chart-cpu" class="inline-block"></div>
+ </div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("Memory")</div>
+ <div class="section-value">
+ <div id="container-chart-memory" class="inline-block"></div>
+ </div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("Disk I/O")</div>
+ <div class="section-value">
+ <div id="container-chart-disk-io" class="inline-block"></div>
+ </div>
+ </div>
+ <div class="section-row">
+ <div class="section-label">$_("Network I/O")</div>
+ <div class="section-value">
+ <div id="container-chart-network-io" class="inline-block"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="software-update-section" class="host-section hidden">
+ <h3 class="section-header"
+ aria-controls="content-software-update">
+ $_("Software Updates")
+ </h3>
+ <div id="content-software-update" class="section-content">
+ <div class="section-row">
+ <div class="section-value">
+ <div id="software-updates-grid-container"></div>
+ <div id="software-updates-progress-container" class="hidden">
+ <label for="software-updates-progress-textarea">$_("Update Progress")</label>
+ <textarea id="software-updates-progress-textarea" readonly></textarea>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="repositories-section" class="host-section hidden">
+ <h3 class="section-header"
+ aria-controls="content-repositories">
+ $_("Repositories")
+ </h3>
+ <div id="content-repositories" class="section-content">
+ <div class="section-row">
+ <div class="section-value">
+ <div id="repositories-grid-container"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="debug-report-section" class="host-section hidden">
+ <h3 class="section-header"
+ aria-controls="content-sys-reports">
+ $_("Debug Reports")
+ </h3>
+ <div id="content-sys-reports" class="section-content">
+ <div class="section-row">
+ <div class="section-value">
+ <div id="available-reports-grid-container"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</script>
+
+<script type="text/javascript">
+ kimchi.host_main();
+</script>
+</body>
+</html>
diff --git a/plugins/gingerbase/ui/pages/report-add.html.tmpl b/plugins/gingerbase/ui/pages/report-add.html.tmpl
new file mode 100644
index 0000000..25bf0a9
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/report-add.html.tmpl
@@ -0,0 +1,56 @@
+#*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2013-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *#
+#unicode UTF-8
+#import gettext
+#from wok.cachebust import href
+#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
+#silent _ = t.gettext
+#silent _t = t.gettext
+<!DOCTYPE html>
+<div id="report-add-window" class="window">
+ <header>
+ <h1 class="title h1 grey">$_("Generate a New Debug Report")</h1>
+ </header>
+ <div class="content">
+ <form id="form-report-add">
+ <section class="form-section">
+ <h2>
+ <label for="report-name-textbox">$_("Report Name")</label>
+ </h2>
+ <div class="field">
+ <input type="text" class="text" id="report-name-textbox" name="name" />
+ <span class="icon-info-circled light-grey c1"></span>
+ <span class="info-add-debug-report">
+ $_("The name used to identify the report. If omitted, a name will be chosen based on current time. Name can contain: letters, digits, underscore (\"_\") and hyphen (\"-\").")
+ </span>
+ </div>
+ </section>
+ </form>
+ </div>
+ <footer>
+ <div class="btn-group">
+ <button id="button-report-add" class="btn-normal"><span class="text">$_("Generate")</span></button>
+ <button id="button-report-cancel" class="btn-normal close" type="button">
+ <span calss="text">$_("Cancel")</span>
+ </button>
+ </div>
+ </footer>
+</div>
+<script>
+ kimchi.report_add_main();
+</script>
diff --git a/plugins/gingerbase/ui/pages/report-rename.html.tmpl b/plugins/gingerbase/ui/pages/report-rename.html.tmpl
new file mode 100644
index 0000000..90a0a80
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/report-rename.html.tmpl
@@ -0,0 +1,56 @@
+#*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2014-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *#
+#unicode UTF-8
+#import gettext
+#from wok.cachebust import href
+#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
+#silent _ = t.gettext
+#silent _t = t.gettext
+<!DOCTYPE html>
+<div id="report-rename-window" class="window">
+ <header>
+ <h1 class="title h1 grey">$_("Rename a Debug Report")</h1>
+ </header>
+ <div class="content">
+ <form id="form-report-rename">
+ <section class="form-section">
+ <h2>
+ <label for="report-name-textbox">$_("Report Name")</label>
+ </h2>
+ <div class="field">
+ <input type="text" class="text" id="report-name-textbox" name="name" />
+ <span class="icon-info-circled light-grey c1"></span>
+ <span class="info-debug-report-rename">
+ $_("The name used to identify the report. Name can contain: letters, digits and hyphen (\"-\").")
+ </span>
+ </div>
+ </section>
+ </form>
+ </div>
+ <footer>
+ <div class="btn-group">
+ <button id="button-report-rename" class="btn-normal"><span class="text">$_("Submit")</span></button>
+ <button id-"button-report-rename-cancel" class="btn-normal close" type="button">
+ <span class="text">$_("Cancel")</span>
+ </button>
+ </div>
+ </footer>
+</div>
+<script>
+ kimchi.report_rename_main();
+</script>
diff --git a/plugins/gingerbase/ui/pages/repository-add.html.tmpl b/plugins/gingerbase/ui/pages/repository-add.html.tmpl
new file mode 100644
index 0000000..950252a
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/repository-add.html.tmpl
@@ -0,0 +1,113 @@
+#*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2014-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *#
+#unicode UTF-8
+#import gettext
+#from wok.cachebust import href
+#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
+#silent _ = t.gettext
+#silent _t = t.gettext
+<div id="repository-add-window" class="window">
+ <form id="form-repository-add">
+ <header class="window-header">
+ <h1 class="title h1 grey">$_("Add a Repository")</h1>
+ </header>
+ <section>
+ <div class="content">
+ <div class="form-section yum">
+ <h2>$_("Identifier")</h2>
+ <div class="field">
+ <div class="textbox-wrapper">
+ <input type="text" class="text" name="repo_id" />
+ </div>
+ <div class="icon-info-circled light-grey c1 help-inline"></div>
+ <p class="text-help help-inline">
+ $_("Single word, unique identifier for the repository.")
+ </p>
+ </div>
+ </div>
+ <section class="form-section yum">
+ <h2>$_("Name")</h2>
+ <div class="field">
+ <div class="textbox-wrapper">
+ <input type="text" class="text" name="config[repo_name]" />
+ </div>
+ <div class="icon-info-circled light-grey c1 help-inline"></div>
+ <p class="text-help help-inline">
+ $_("Textual name for the repository.")
+ </p>
+ </div>
+ </section>
+ <section class="form-section">
+ <h2>$_("URL")<span class="required" role="presentation" title='$_("Required Field")'>*</span></h2>
+ <div class="field">
+ <div class="textbox-wrapper">
+ <input type="text" class="text required" name="baseurl" />
+ </div>
+ <div class="icon-info-circled light-grey c1 help-inline"></div>
+ <p class="text-help help-inline">
+ $_("URL to the repository. Supported protocols are http, ftp, and file.")
+ </p>
+ </div>
+ <div class="field yum">
+ <p class="yum">
+ <input type="checkbox" name="isMirror" value="true" id="isMirror" />
+ <label id="isMirrorLabel" for="isMirror">$_("Repository is a mirror")</label>
+ </p>
+ </div>
+ </section>
+ <section class="form-section repository-dist deb">
+ <h2>$_("Distribution")</h2>
+ <div class="field">
+ <div class="textbox-wrapper">
+ <input type="text" class="text" name="config[dist]" />
+ </div>
+ <div class="icon-info-circled light-grey c1 help-inline"></div>
+ <p class="text-help help-inline">
+ $_("Distribution of the DEB repository.")
+ </p>
+ </div>
+ </section>
+ <section class="form-section repository-comps deb">
+ <h2>$_("Components")</h2>
+ <div class="field">
+ <div class="textbox-wrapper">
+ <input type="text" class="text" name="config[comps]" />
+ </div>
+ <div class="icon-info-circled light-grey c1 help-inline"></div>
+ <p class="text-help help-inline">
+ $_("List of components in DEB repository.")
+ </p>
+ </div>
+ </section>
+ </div>
+ </section>
+ <footer>
+ <div class="btn-group">
+ <button type="submit" id="button-repository-add" class="btn-normal" disabled="disabled">
+ <span class="text">$_("Add")</span>
+ </button>
+ <button type="button" id="button-repository-close" class="btn-normal close">
+ <span class="text">$("Cancel")</span>
+ </button>
+ </div>
+ </footer>
+ </form>
+</div>
+<script>
+ kimchi.repository_add_main();
+</script>
diff --git a/plugins/gingerbase/ui/pages/repository-edit.html.tmpl b/plugins/gingerbase/ui/pages/repository-edit.html.tmpl
new file mode 100644
index 0000000..e5a3cfb
--- /dev/null
+++ b/plugins/gingerbase/ui/pages/repository-edit.html.tmpl
@@ -0,0 +1,117 @@
+#*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2014-2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *#
+#unicode UTF-8
+#import gettext
+#from wok.cachebust import href
+#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
+#silent _ = t.gettext
+#silent _t = t.gettext
+
+<div id="repository-edit-window" class="window">
+ <form id="form-repository-edit">
+ <header>
+ <h1 class="title h1 grey">$_("Edit Repository")</h1>
+ </header>
+ <div class="content">
+ <section id="form-repository-edit">
+ <fieldset class="repository-edit-fieldset">
+ <div class="repository-id yum">
+ <div class="repository-edit-wrapper-label">
+ <label for="repository-edit-id-textbox">$_("ID")</label>
+ </div>
+ <div class="repository-edit-wrapper-controls">
+ <input id="repository-edit-id-textbox" name="repo_id" type="text" disabled="disabled" readonly="readonly"/>
+ </div>
+ </div>
+ <div class="repository-name yum">
+ <div class="repository-edit-wrapper-label">
+ <label for="repository-edit-name-textbox">$_("Name")</label>
+ </div>
+ <div class="repository-edit-wrapper-controls">
+ <input id="repository-edit-name-textbox" class="yum" name="config[repo_name]" type="text" />
+ </div>
+ </div>
+ <div class="repository-url">
+ <div class="repository-edit-wrapper-label">
+ <label for="repository-edit-baseurl-textbox">$_("URL")</label>
+ </div>
+ <div class="repository-edit-wrapper-controls">
+ <input id="repository-edit-baseurl-textbox" name="baseurl" type="text" />
+ </div>
+ </div>
+ <div class="repository-dist deb">
+ <div class="repository-edit-wrapper-label">
+ <label for="repository-edit-urlargs-textbox">$_("Distribution")</label>
+ </div>
+ <div class="repository-edit-wrapper-controls">
+ <input id="repository-edit-urlargs-textbox" class="deb" name="config[dist]" type="text" />
+ </div>
+ </div>
+ <div class="repository-mirrorlist yum">
+ <div class="repository-edit-wrapper-label">
+ <label for="repository-edit-urlargs-textbox">$_("Mirror List URL")</label>
+ </div>
+ <div class="repository-edit-wrapper-controls">
+ <input id="repository-edit-urlargs-textbox" class="yum" name="config[mirrorlist]" type="text" />
+ </div>
+ </div>
+ <div class="repository-comps deb">
+ <div class="repository-edit-wrapper-label">
+ <label for="repository-edit-urlargs-textbox">$_("Components")</label>
+ </div>
+ <div class="repository-edit-wrapper-controls">
+ <input id="repository-edit-urlargs-textbox" class="deb" name="config[comps]" type="text" />
+ </div>
+ </div>
+ <div class="repository-gpgkey yum">
+ <div class="repository-edit-wrapper-label">
+ <label for="repository-edit-gpgkey-textbox">$_("GPG Key")</label>
+ </div>
+ <div class="repository-edit-wrapper-controls">
+ <input id="repository-edit-gpgkey-textbox" class="yum" name="config[gpgkey]" type="text" />
+ </div>
+ </div>
+ <div class="repository-gpgcheck yum">
+ <div class="repository-edit-wrapper-label">
+ <label>$_("GPG Check")</label>
+ </div>
+ <div class="repository-edit-wrapper-controls">
+ <input id="repository-edit-gpgcheck-radio-true" class="yum" name="config[gpgcheck]" type="radio" value="true" />
+ <label for="repository-edit-gpgcheck-radio-true">$_("Yes")</label>
+ <input id="repository-edit-gpgcheck-radio-false" class="yum" name="config[gpgcheck]" type="radio" value="false" />
+ <label for="repository-edit-gpgcheck-radio-false">$_("No")</label>
+ </div>
+ </div>
+ </fieldset>
+ </section>
+ </div>
+ <footer>
+ <div class="btn-group">
+ <button type="submit" id="repository-edit-button-save" class="btn-normal">
+ <span class="text">$_("Save")</span>
+ </button>
+ <button type="button" id="repository-edit-button-cancel" class="close btn-normal">
+ <span class="text">$_("Cancel")</span>
+ </button>
+ </div>
+ </footer>
+ </form>
+</div>
+<script type="text/javascript">
+ kimchi.repository_edit_main();
+</script>
diff --git a/plugins/gingerbase/yumparser.py b/plugins/gingerbase/yumparser.py
new file mode 100644
index 0000000..74f9fa0
--- /dev/null
+++ b/plugins/gingerbase/yumparser.py
@@ -0,0 +1,283 @@
+#
+# Project Kimchi
+#
+# Copyright IBM, Corp. 2015
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import subprocess
+from os import listdir
+from os.path import isfile, splitext
+
+
+class YumRepoObject(object):
+
+ def __init__(self, repo_id, repofile):
+ self.repo_id = repo_id
+ self.name = None
+ self.baseurl = None
+ self.enabled = True
+ self.gpgcheck = True
+ self.gpgkey = None
+ self.metalink = None
+ self.mirrorlist = None
+ self.repofile = repofile
+ self.string_attrs = ['baseurl', 'gpgkey', 'name',
+ 'metalink', 'mirrorlist']
+ self.boolean_attrs = ['enabled', 'gpgcheck']
+
+ def set_attribute(self, key, strvalue):
+ if key in self.string_attrs:
+ setattr(self, key, strvalue)
+ elif key in self.boolean_attrs:
+ setattr(self, key, (strvalue == '1'))
+
+ def get_attribute_str(self, key):
+ if key not in self.get_attributes():
+ return None
+
+ if key in self.boolean_attrs:
+ str_value = '1' if getattr(self, key) is True else '0'
+ else:
+ str_value = getattr(self, key)
+
+ if str_value is None:
+ return None
+
+ return key + '=' + str_value
+
+ def get_attributes(self):
+ return self.string_attrs + self.boolean_attrs
+
+ def enable(self):
+ self.enabled = True
+
+ def disable(self):
+ self.enabled = False
+
+ def __str__(self):
+ str_obj = '[' + self.repo_id + ']' + '\n'
+ for key in self.get_attributes():
+ if self.get_attribute_str(key) is not None:
+ str_obj += self.get_attribute_str(key) + '\n'
+ return str_obj
+
+
+def get_repo_files():
+ def _is_repository_file(f):
+ _, f_extension = splitext(f)
+ return isfile(f) and (f_extension == '.repo')
+
+ YUM_REPO_DIR = '/etc/yum.repos.d'
+ return [YUM_REPO_DIR+'/'+f for f in listdir(YUM_REPO_DIR)
+ if _is_repository_file(YUM_REPO_DIR+'/'+f)]
+
+
+def _ignore_line_repo_file(line):
+ return line.startswith("#") or '=' not in line
+
+
+def _get_repos_from_file(repo_file):
+ repos_from_file = {}
+ current_repo = None
+ current_repo_id = None
+ with open(repo_file) as f:
+ for line in f.readlines():
+ line = line.strip()
+ if line.startswith("["):
+ if current_repo is not None:
+ repos_from_file[current_repo_id] = current_repo
+ current_repo_id = line.strip('[]')
+ current_repo = YumRepoObject(current_repo_id, repo_file)
+ continue
+ if _ignore_line_repo_file(line):
+ continue
+ key, value = line.split('=', 1)
+ key = key.strip()
+ value = value.strip()
+ current_repo.set_attribute(key, value)
+
+ # add the last repo from file.
+ if current_repo is not None:
+ repos_from_file[current_repo_id] = current_repo
+
+ return repos_from_file
+
+
+def get_yum_repositories():
+ repo_files = get_repo_files()
+ repos = {}
+ for yum_repo in repo_files:
+ repos.update(_get_repos_from_file(yum_repo))
+
+ return repos
+
+
+def _retrieve_repo_line_index(data, repo):
+ repo_entry = '[' + repo.repo_id + ']\n'
+ try:
+ repo_index = data.index(repo_entry)
+ except:
+ return None
+ return repo_index
+
+
+def _update_repo_file_data(data, repo, repo_index):
+ remaining_repo_attrs = repo.get_attributes()
+
+ for i in range(repo_index + 1, len(data)):
+ line = data[i].strip()
+ if line.startswith('['):
+ break
+ if _ignore_line_repo_file(line):
+ continue
+ key, _ = line.split('=', 1)
+ key = key.strip()
+ attr_str = repo.get_attribute_str(key)
+ if attr_str is None:
+ continue
+ remaining_repo_attrs.remove(key)
+ data[i] = attr_str + '\n'
+
+ for attr in remaining_repo_attrs:
+ attr_str = repo.get_attribute_str(attr)
+ if attr_str is None:
+ continue
+ data.insert(repo_index+1, attr_str + '\n')
+
+ return data
+
+
+def write_repo_to_file(repo):
+ with open(repo.repofile) as f:
+ data = f.readlines()
+
+ repo_index = _retrieve_repo_line_index(data, repo)
+ if repo_index is None:
+ return
+
+ data = _update_repo_file_data(data, repo, repo_index)
+
+ with open(repo.repofile, 'w') as f:
+ f.writelines(data)
+
+
+def _get_last_line_repo(data, repo_index):
+ stop_delete_index = None
+ for i in range(repo_index+1, len(data)):
+ line = data[i].strip()
+ if line.startswith('['):
+ stop_delete_index = i - 1
+ break
+ if stop_delete_index is None:
+ stop_delete_index = len(data) - 1
+
+ return stop_delete_index
+
+
+def _remove_repo_file_data(data, repo_index):
+ last_line_repo = _get_last_line_repo(data, repo_index)
+ for i in range(last_line_repo, repo_index - 1, -1):
+ data.pop(i)
+ return data
+
+
+def delete_repo_from_file(repo):
+ with open(repo.repofile) as f:
+ data = f.readlines()
+
+ repo_index = _retrieve_repo_line_index(data, repo)
+ if repo_index is None:
+ return
+
+ data = _remove_repo_file_data(data, repo_index)
+
+ with open(repo.repofile, 'w') as f:
+ f.writelines(data)
+
+
+class YumUpdatePackageObject(object):
+
+ def __init__(self, name, arch, version, repo):
+ self.name = name
+ self.arch = arch
+ self.version = version
+ self.ui_from_repo = repo
+
+
+def _include_line_checkupdate_output(line):
+ tokens = line.split()
+
+ if len(tokens) != 3:
+ return False
+
+ if '.' not in tokens[0]:
+ return False
+
+ return True
+
+
+def _ignore_obsoleting_packages_in(output):
+ out = ''
+ for l in output.split('\n'):
+ if 'Obsoleting ' in l:
+ break
+ out += l + '\n'
+ return out
+
+
+def _filter_lines_checkupdate_output(output):
+ if output is None:
+ return []
+
+ output = _ignore_obsoleting_packages_in(output)
+
+ out = [l for l in output.split('\n')
+ if _include_line_checkupdate_output(l)]
+ return out
+
+
+def _get_yum_checkupdate_output():
+ cmd = ['yum', 'check-update', '-d0']
+ yum_update_cmd = subprocess.Popen(cmd,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ out, error = yum_update_cmd.communicate()
+ return_code = yum_update_cmd.returncode
+ if return_code == 1:
+ return None
+
+ return out
+
+
+def get_yum_packages_list_update(checkupdate_output=None):
+ if checkupdate_output is None:
+ checkupdate_output = _get_yum_checkupdate_output()
+
+ filtered_output = _filter_lines_checkupdate_output(checkupdate_output)
+
+ packages = []
+ for line in filtered_output:
+ line = line.split()
+ index = 0
+ name_arch = line[index]
+ index += 1
+ version = line[index]
+ index += 1
+ repo = line[index]
+ name, arch = name_arch.rsplit('.', 1)
+ packages.append(YumUpdatePackageObject(name, arch, version, repo))
+
+ return packages
diff --git a/plugins/kimchi/API.json b/plugins/kimchi/API.json
index f1f58ff..e75b35f 100644
--- a/plugins/kimchi/API.json
+++ b/plugins/kimchi/API.json
@@ -59,30 +59,6 @@
}
},
"properties": {
- "debugreports_create": {
- "type": "object",
- "error": "KCHDR0006E",
- "properties": {
- "name": {
- "description": "The name for the debug report file.",
- "type": "string",
- "pattern": "^[_A-Za-z0-9-]*$",
- "error": "KCHDR0007E"
- }
- }
- },
- "debugreport_update": {
- "type": "object",
- "properties": {
- "name": {
- "description": "New name of debug report",
- "type": "string",
- "pattern": "^[_A-Za-z0-9-]*$",
- "error": "KCHDR0007E"
- }
- },
- "additionalProperties": false
- },
"storagepools_create": {
"type": "object",
"error": "KCHPOOL0026E",
@@ -684,116 +660,6 @@
"additionalProperties": false,
"error": "KCHAPI0001E"
},
- "repositories_create": {
- "type": "object",
- "properties": {
- "repo_id": {
- "description": "Repository ID used for YUM repository.",
- "type": "string",
- "error": "KCHREPOS0001E"
- },
- "baseurl": {
- "description": "URL to the directory where the repodata directory of a repository is located. Can be an http://, ftp:// or file:// URL.",
- "type": "string",
- "error": "KCHREPOS0002E"
- },
- "config": {
- "description": "Dictionary containing repository configuration",
- "type": "object",
- "error": "KCHREPOS0003E",
- "properties": {
- "dist": {
- "description": "Distribution to DEB repository",
- "type": "string",
- "error": "KCHREPOS0004E"
- },
- "comps": {
- "description": "List of components to DEB repository",
- "type": "array",
- "error": "KCHREPOS0005E",
- "uniqueItems": true,
- "items": {
- "description": "Component name",
- "type": "string",
- "error": "KCHREPOS0006E"
- }
- },
- "repo_name": {
- "description": "YUM repository name",
- "type": "string",
- "error": "KCHREPOS0023E"
- },
- "mirrorlist": {
- "description": "URL to a file containing a list of baseurls",
- "type": "string",
- "error": "KCHREPOS0007E"
- },
- "metalink": {
- "description": "URL to a metalink file for the repomd.xml",
- "type": "string",
- "error": "KCHREPOS0029E"
- }
- }
- }
- },
- "additionalProperties": false,
- "error": "KCHAPI0001E"
- },
- "repository_update": {
- "type": "object",
- "properties": {
- "baseurl": {
- "description": "URL to the directory where the repodata directory of a repository is located. Can be an http://, ftp:// or file:// URL.",
- "type": "string",
- "error": "KCHREPOS0002E"
- },
- "config": {
- "description": "Dictionary containing repository configuration",
- "type": "object",
- "error": "KCHREPOS0003E",
- "properties": {
- "dist": {
- "description": "Distribution to DEB repository",
- "type": "string",
- "error": "KCHREPOS0004E"
- },
- "comps": {
- "description": "List of components to DEB repository",
- "type": "array",
- "error": "KCHREPOS0005E",
- "uniqueItems": true,
- "items": {
- "description": "Component name",
- "type": "string",
- "error": "KCHREPOS0006E"
- }
- },
- "repo_name": {
- "description": "Human-readable string describing the YUM repository.",
- "type": "string",
- "error": "KCHREPOS0008E"
- },
- "mirrorlist": {
- "description": "URL to a file containing a list of baseurls for YUM repository",
- "type": "string",
- "error": "KCHREPOS0007E"
- },
- "gpgcheck": {
- "description": "Indicates if a GPG signature check on the packages gotten from repository should be performed.",
- "type": "boolean",
- "error": "KCHREPOS0009E"
- },
- "gpgkey": {
- "description": "URL pointing to the ASCII-armored GPG key file for the repository.",
- "type": "string",
- "error": "KCHREPOS0010E"
- }
- }
- }
- },
- "additionalProperties": false,
- "error": "KCHAPI0001E"
- },
"devices_get_list": {
"type": "object",
"properties": {
diff --git a/plugins/kimchi/Makefile.am b/plugins/kimchi/Makefile.am
index faef341..e4a44f7 100644
--- a/plugins/kimchi/Makefile.am
+++ b/plugins/kimchi/Makefile.am
@@ -98,7 +98,6 @@ config.py: config.py.in Makefile
install-deb: install
cp -R $(top_srcdir)/contrib/DEBIAN $(DESTDIR)/
- mkdir -p $(DESTDIR)/var/lib/kimchi/debugreports
mkdir -p $(DESTDIR)/var/lib/kimchi/screenshots
mkdir -p $(DESTDIR)/var/lib/kimchi/isos
@@ -138,7 +137,7 @@ ChangeLog:
install-data-local:
$(MKDIR_P) $(DESTDIR)$(kimchidir)
$(INSTALL_DATA) API.json $(DESTDIR)$(kimchidir)/API.json
- mkdir -p $(DESTDIR)/var/lib/kimchi/{debugreports,screenshots,isos}
+ mkdir -p $(DESTDIR)/var/lib/kimchi/{screenshots,isos}
uninstall-local:
$(RM) $(DESTDIR)$(kimchidir)/API.json
diff --git a/plugins/kimchi/config.py.in b/plugins/kimchi/config.py.in
index 80b72bd..5738c4d 100644
--- a/plugins/kimchi/config.py.in
+++ b/plugins/kimchi/config.py.in
@@ -38,10 +38,6 @@ def get_distros_store():
return os.path.join(PluginPaths('kimchi').conf_dir, 'distros.d')
-def get_debugreports_path():
- return os.path.join(PluginPaths('kimchi').state_dir, 'debugreports')
-
-
def get_screenshot_path():
return os.path.join(PluginPaths('kimchi').state_dir, 'screenshots')
diff --git a/plugins/kimchi/control/debugreports.py b/plugins/kimchi/control/debugreports.py
deleted file mode 100644
index b5a3072..0000000
--- a/plugins/kimchi/control/debugreports.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2013-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-from wok.control.base import AsyncCollection, Resource
-from wok.control.utils import internal_redirect
-from wok.control.utils import UrlSubNode
-
-
-@UrlSubNode('debugreports', True)
-class DebugReports(AsyncCollection):
- def __init__(self, model):
- super(DebugReports, self).__init__(model)
- self.resource = DebugReport
- self.role_key = 'host'
- self.admin_methods = ['GET', 'POST']
-
- def _get_resources(self, filter_params):
- res_list = super(DebugReports, self)._get_resources(filter_params)
- return sorted(res_list, key=lambda x: x.data['time'], reverse=True)
-
-
-class DebugReport(Resource):
- def __init__(self, model, ident):
- super(DebugReport, self).__init__(model, ident)
- self.role_key = 'host'
- self.admin_methods = ['GET', 'PUT', 'POST']
- self.uri_fmt = '/debugreports/%s'
- self.content = DebugReportContent(model, ident)
-
- @property
- def data(self):
- return {'name': self.ident,
- 'uri': self.info['uri'],
- 'time': self.info['ctime']}
-
-
-class DebugReportContent(Resource):
- def __init__(self, model, ident):
- super(DebugReportContent, self).__init__(model, ident)
- self.role_key = 'host'
- self.admin_methods = ['GET']
-
- def get(self):
- self.lookup()
- raise internal_redirect(self.info['uri'])
diff --git a/plugins/kimchi/control/host.py b/plugins/kimchi/control/host.py
index 0a40f1b..c71c47b 100644
--- a/plugins/kimchi/control/host.py
+++ b/plugins/kimchi/control/host.py
@@ -19,7 +19,6 @@
from wok.control.base import Collection, Resource, SimpleCollection
from wok.control.utils import UrlSubNode
-from wok.exception import NotFoundError
from cpuinfo import CPUInfo
@@ -31,14 +30,7 @@ class Host(Resource):
self.role_key = 'host'
self.admin_methods = ['GET', 'POST']
self.uri_fmt = '/host/%s'
- self.reboot = self.generate_action_handler('reboot')
- self.shutdown = self.generate_action_handler('shutdown')
- self.stats = HostStats(self.model)
- self.partitions = Partitions(self.model)
self.devices = Devices(self.model)
- self.packagesupdate = PackagesUpdate(self.model)
- self.repositories = Repositories(self.model)
- self.swupdate = self.generate_action_handler_task('swupdate')
self.cpuinfo = CPUInfo(self.model)
@property
@@ -46,54 +38,6 @@ class Host(Resource):
return self.info
-class HostStats(Resource):
- def __init__(self, model, id=None):
- super(HostStats, self).__init__(model, id)
- self.role_key = 'host'
- self.admin_methods = ['GET']
- self.history = HostStatsHistory(self.model)
-
- @property
- def data(self):
- return self.info
-
-
-class HostStatsHistory(Resource):
- @property
- def data(self):
- return self.info
-
-
-class Partitions(Collection):
- def __init__(self, model):
- super(Partitions, self).__init__(model)
- self.role_key = 'storage'
- self.admin_methods = ['GET']
- self.resource = Partition
-
- # Defining get_resources in order to return list of partitions in UI
- # sorted by their path
- def _get_resources(self, flag_filter):
- res_list = super(Partitions, self)._get_resources(flag_filter)
- res_list = filter(lambda x: x.info['available'], res_list)
- res_list.sort(key=lambda x: x.info['path'])
- return res_list
-
-
-class Partition(Resource):
- def __init__(self, model, id):
- self.role_key = 'storage'
- self.admin_methods = ['GET']
- super(Partition, self).__init__(model, id)
-
- @property
- def data(self):
- if not self.info['available']:
- raise NotFoundError("KCHPART0001E", {'name': self.info['name']})
-
- return self.info
-
-
class Devices(Collection):
def __init__(self, model):
super(Devices, self).__init__(model)
@@ -115,43 +59,3 @@ class Device(Resource):
def data(self):
return self.info
-
-class PackagesUpdate(Collection):
- def __init__(self, model):
- super(PackagesUpdate, self).__init__(model)
- self.role_key = 'host'
- self.admin_methods = ['GET']
- self.resource = PackageUpdate
-
-
-class PackageUpdate(Resource):
- def __init__(self, model, id=None):
- super(PackageUpdate, self).__init__(model, id)
- self.role_key = 'host'
- self.admin_methods = ['GET']
-
- @property
- def data(self):
- return self.info
-
-
-class Repositories(Collection):
- def __init__(self, model):
- super(Repositories, self).__init__(model)
- self.role_key = 'host'
- self.admin_methods = ['GET', 'POST']
- self.resource = Repository
-
-
-class Repository(Resource):
- def __init__(self, model, id):
- super(Repository, self).__init__(model, id)
- self.role_key = 'host'
- self.admin_methods = ['GET', 'PUT', 'POST', 'DELETE']
- self.uri_fmt = "/host/repositories/%s"
- self.enable = self.generate_action_handler('enable')
- self.disable = self.generate_action_handler('disable')
-
- @property
- def data(self):
- return self.info
diff --git a/plugins/kimchi/disks.py b/plugins/kimchi/disks.py
deleted file mode 100644
index eb40e3a..0000000
--- a/plugins/kimchi/disks.py
+++ /dev/null
@@ -1,196 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2013-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import os.path
-import re
-import subprocess
-from parted import Device as PDevice
-from parted import Disk as PDisk
-
-from wok.exception import OperationFailed
-from wok.utils import wok_log
-
-
-def _get_dev_node_path(maj_min):
- """ Returns device node path given the device number 'major:min' """
-
- dm_name = "/sys/dev/block/%s/dm/name" % maj_min
- if os.path.exists(dm_name):
- with open(dm_name) as dm_f:
- content = dm_f.read().rstrip('\n')
- return "/dev/mapper/" + content
-
- uevent = "/sys/dev/block/%s/uevent" % maj_min
- with open(uevent) as ueventf:
- content = ueventf.read()
-
- data = dict(re.findall(r'(\S+)=(".*?"|\S+)', content.replace("\n", " ")))
-
- return "/dev/%s" % data["DEVNAME"]
-
-
-def _get_lsblk_devs(keys, devs=[]):
- lsblk = subprocess.Popen(
- ["lsblk", "-Pbo"] + [','.join(keys)] + devs,
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- out, err = lsblk.communicate()
- if lsblk.returncode != 0:
- raise OperationFailed("KCHDISKS0001E", {'err': err})
-
- return _parse_lsblk_output(out, keys)
-
-
-def _get_dev_major_min(name):
- maj_min = None
-
- keys = ["NAME", "MAJ:MIN"]
- dev_list = _get_lsblk_devs(keys)
-
- for dev in dev_list:
- if dev['name'].split()[0] == name:
- maj_min = dev['maj:min']
- break
- else:
- raise OperationFailed("KCHDISKS0002E", {'device': name})
-
- return maj_min
-
-
-def _is_dev_leaf(devNodePath):
- try:
- # By default, lsblk prints a device information followed by children
- # device information
- childrenCount = len(
- _get_lsblk_devs(["NAME"], [devNodePath])) - 1
- except OperationFailed as e:
- # lsblk is known to fail on multipath devices
- # Assume these devices contain children
- wok_log.error(
- "Error getting device info for %s: %s", devNodePath, e)
- return False
-
- return childrenCount == 0
-
-
-def _is_dev_extended_partition(devType, devNodePath):
- if devType != 'part':
- return False
- diskPath = devNodePath.rstrip('0123456789')
- device = PDevice(diskPath)
- try:
- extended_part = PDisk(device).getExtendedPartition()
- except NotImplementedError as e:
- wok_log.warning(
- "Error getting extended partition info for dev %s type %s: %s",
- devNodePath, devType, e.message)
- # Treate disk with unsupported partiton table as if it does not
- # contain extended partitions.
- return False
- if extended_part and extended_part.path == devNodePath:
- return True
- return False
-
-
-def _parse_lsblk_output(output, keys):
- # output is on format key="value",
- # where key can be NAME, TYPE, FSTYPE, SIZE, MOUNTPOINT, etc
- lines = output.rstrip("\n").split("\n")
- r = []
- for line in lines:
- d = {}
- for key in keys:
- expression = r"%s=\".*?\"" % key
- match = re.search(expression, line)
- field = match.group()
- k, v = field.split('=', 1)
- d[k.lower()] = v[1:-1]
- r.append(d)
- return r
-
-
-def _get_vgname(devNodePath):
- """ Return volume group name of a physical volume. If the device node path
- is not a physical volume, return empty string. """
- pvs = subprocess.Popen(
- ["pvs", "--unbuffered", "--nameprefixes", "--noheadings",
- "-o", "vg_name", devNodePath],
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- out, err = pvs.communicate()
- if pvs.returncode != 0:
- return ""
-
- return re.findall(r"LVM2_VG_NAME='([^\']*)'", out)[0]
-
-
-def _is_available(name, devtype, fstype, mountpoint, majmin):
- devNodePath = _get_dev_node_path(majmin)
- # Only list unmounted and unformated and leaf and (partition or disk)
- # leaf means a partition, a disk has no partition, or a disk not held
- # by any multipath device. Physical volume belongs to no volume group
- # is also listed. Extended partitions should not be listed.
- if (devtype in ['part', 'disk', 'mpath'] and
- fstype in ['', 'LVM2_member'] and
- mountpoint == "" and
- _get_vgname(devNodePath) == "" and
- _is_dev_leaf(devNodePath) and
- not _is_dev_extended_partition(devtype, devNodePath)):
- return True
- return False
-
-
-def get_partitions_names(check=False):
- names = set()
- keys = ["NAME", "TYPE", "FSTYPE", "MOUNTPOINT", "MAJ:MIN"]
- # output is on format key="value",
- # where key can be NAME, TYPE, FSTYPE, MOUNTPOINT
- for dev in _get_lsblk_devs(keys):
- # split()[0] to avoid the second part of the name, after the
- # whiteline
- name = dev['name'].split()[0]
- if check and not _is_available(name, dev['type'], dev['fstype'],
- dev['mountpoint'], dev['maj:min']):
- continue
- names.add(name)
-
- return list(names)
-
-
-def get_partition_details(name):
- majmin = _get_dev_major_min(name)
- dev_path = _get_dev_node_path(majmin)
-
- keys = ["TYPE", "FSTYPE", "SIZE", "MOUNTPOINT"]
- try:
- dev = _get_lsblk_devs(keys, [dev_path])[0]
- except OperationFailed as e:
- wok_log.error(
- "Error getting partition info for %s: %s", name, e)
- return {}
-
- dev['available'] = _is_available(name, dev['type'], dev['fstype'],
- dev['mountpoint'], majmin)
- if dev['mountpoint']:
- # Sometimes the mountpoint comes with [SWAP] or other
- # info which is not an actual mount point. Filtering it
- regexp = re.compile(r"\[.*\]")
- if regexp.search(dev['mountpoint']) is not None:
- dev['mountpoint'] = ''
- dev['path'] = dev_path
- dev['name'] = name
- return dev
diff --git a/plugins/kimchi/docs/README.md b/plugins/kimchi/docs/README.md
index f400333..ee6bfed 100644
--- a/plugins/kimchi/docs/README.md
+++ b/plugins/kimchi/docs/README.md
@@ -196,13 +196,13 @@ Usage
Connect your browser to https://localhost:8001. You should see a screen like:
-
+
Wok uses PAM to authenticate users so you can log in with the same username
and password that you would use to log in to the machine itself. Once logged in
you will see a screen like:
-
+
This shows you the list of running guests including a live screenshot of
the guest session. You can use the action buttons to shutdown the guests
@@ -216,7 +216,7 @@ top navigation bar.
The template screen looks like:
-
+
From this view, you can change the parameters of a template or create a
new template using the "+" button in the upper right corner.
diff --git a/plugins/kimchi/i18n.py b/plugins/kimchi/i18n.py
index 220bd24..e9699b9 100644
--- a/plugins/kimchi/i18n.py
+++ b/plugins/kimchi/i18n.py
@@ -244,31 +244,12 @@ messages = {
"KCHNET0021E": _("Failed to activate interface %(iface)s. Please check the physical link status."),
"KCHNET0022E": _("Failed to start network %(name)s. Details: %(err)s"),
- "KCHDR0001E": _("Debug report %(name)s does not exist"),
- "KCHDR0002E": _("Debug report tool not found in system"),
- "KCHDR0003E": _("Unable to create debug report %(name)s. Details: %(err)s."),
- "KCHDR0004E": _("Can not find any debug report with the given name %(name)s"),
- "KCHDR0005E": _("Unable to generate debug report %(name)s. Details: %(err)s"),
- "KCHDR0006E": _("You should give a name for the debug report file."),
- "KCHDR0007E": _("Debug report name must be a string. Only letters, digits, underscore ('_') and hyphen ('-') are allowed."),
- "KCHDR0008E": _("The debug report with specified name \"%(name)s\" already exists. Please use another one."),
-
"KCHSR0001E": _("Storage server %(server)s was not used by Kimchi"),
"KCHDISTRO0001E": _("Distro '%(name)s' does not exist"),
"KCHPART0001E": _("Partition %(name)s does not exist in the host"),
- "KCHHOST0001E": _("Unable to shutdown host machine as there are running virtual machines"),
- "KCHHOST0002E": _("Unable to reboot host machine as there are running virtual machines"),
- "KCHHOST0003E": _("Node device '%(name)s' not found"),
- "KCHHOST0004E": _("Conflicting flag filters specified."),
-
- "KCHPKGUPD0001E": _("No packages marked for update"),
- "KCHPKGUPD0002E": _("Package %(name)s is not marked to be updated."),
- "KCHPKGUPD0003E": _("Error while getting packages marked to be updated. Details: %(err)s"),
- "KCHPKGUPD0004E": _("There is no compatible package manager for this system."),
-
"KCHUTILS0001E": _("Invalid URI %(uri)s"),
"KCHUTILS0003E": _("Unable to choose a virtual machine name"),
@@ -288,37 +269,6 @@ messages = {
"KCHVMSTOR0017E": _("Only one of path or pool/volume can be specified to add a new virtual machine disk"),
"KCHVMSTOR0018E": _("Volume chosen with format %(format)s does not fit in the storage type %(type)s"),
- "KCHREPOS0001E": _("YUM Repository ID must be one word only string."),
- "KCHREPOS0002E": _("Repository URL must be an http://, ftp:// or file:// URL."),
- "KCHREPOS0003E": _("Repository configuration is a dictionary with specific values according to repository type."),
- "KCHREPOS0004E": _("Distribution to DEB repository must be a string"),
- "KCHREPOS0005E": _("Components to DEB repository must be listed in a array"),
- "KCHREPOS0006E": _("Components to DEB repository must be a string"),
- "KCHREPOS0007E": _("Mirror list to repository must be a string"),
- "KCHREPOS0008E": _("YUM Repository name must be string."),
- "KCHREPOS0009E": _("GPG check must be a boolean value."),
- "KCHREPOS0010E": _("GPG key must be a URL pointing to the ASCII-armored file."),
- "KCHREPOS0011E": _("Could not update repository %(repo_id)s."),
- "KCHREPOS0012E": _("Repository %(repo_id)s does not exist."),
- "KCHREPOS0013E": _("Specify repository base URL, mirror list or metalink in order to create or update a YUM repository."),
- "KCHREPOS0014E": _("Repository management tool was not recognized for your system."),
- "KCHREPOS0015E": _("Repository %(repo_id)s is already enabled."),
- "KCHREPOS0016E": _("Repository %(repo_id)s is already disabled."),
- "KCHREPOS0017E": _("Could not remove repository %(repo_id)s."),
- "KCHREPOS0018E": _("Could not write repository configuration file %(repo_file)s"),
- "KCHREPOS0019E": _("Specify repository distribution in order to create a DEB repository."),
- "KCHREPOS0020E": _("Could not enable repository %(repo_id)s."),
- "KCHREPOS0021E": _("Could not disable repository %(repo_id)s."),
- "KCHREPOS0022E": _("YUM Repository ID already exists"),
- "KCHREPOS0023E": _("YUM Repository name must be a string"),
- "KCHREPOS0024E": _("Unable to list repositories. Details: '%(err)s'"),
- "KCHREPOS0025E": _("Unable to retrieve repository information. Details: '%(err)s'"),
- "KCHREPOS0026E": _("Unable to add repository. Details: '%(err)s'"),
- "KCHREPOS0027E": _("Unable to remove repository. Details: '%(err)s'"),
- "KCHREPOS0028E": _("Configuration items: '%(items)s' are not supported by repository manager"),
- "KCHREPOS0029E": _("Repository metalink must be an http://, ftp:// or file:// URL."),
- "KCHREPOS0030E": _("Cannot specify mirrorlist and metalink at the same time."),
-
"KCHSNAP0001E": _("Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."),
"KCHSNAP0002E": _("Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: %(err)s"),
"KCHSNAP0003E": _("Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."),
diff --git a/plugins/kimchi/kimchi.conf b/plugins/kimchi/kimchi.conf
index 78f4f3f..98a6c57 100644
--- a/plugins/kimchi/kimchi.conf
+++ b/plugins/kimchi/kimchi.conf
@@ -23,13 +23,6 @@ tools.staticdir.on = True
tools.staticdir.dir = wok.config.PluginPaths('kimchi').state_dir + '/screenshots'
tools.nocache.on = False
-[/data/debugreports]
-tools.staticdir.on = True
-tools.staticdir.dir = wok.config.PluginPaths('kimchi').state_dir + '/debugreports'
-tools.nocache.on = False
-tools.wokauth.on = True
-tools.staticdir.content_types = {'xz': 'application/x-xz'}
-
[/favicon.ico]
tools.staticfile.on = True
tools.staticfile.filename = wok.config.PluginPaths('kimchi').ui_dir + '/images/logo.ico'
diff --git a/plugins/kimchi/mockmodel.py b/plugins/kimchi/mockmodel.py
index e316c21..68acf6f 100644
--- a/plugins/kimchi/mockmodel.py
+++ b/plugins/kimchi/mockmodel.py
@@ -33,8 +33,6 @@ from wok.xmlutils.utils import xml_item_update
import config
import imageinfo
import osinfo
-from model import cpuinfo
-from model.debugreports import DebugReportsModel
from model.host import DeviceModel
from model.libvirtstoragepool import IscsiPoolDef, NetfsPoolDef
from model.libvirtstoragepool import StoragePoolDef
@@ -73,8 +71,6 @@ class MockModel(Model):
self._mock_swupdate = MockSoftwareUpdate()
self._mock_repositories = MockRepositories()
- cpuinfo.get_topo_capabilities = \
- MockModel.get_topo_capabilities
libvirt.virConnect.defineXML = MockModel.domainDefineXML
libvirt.virDomain.XMLDesc = MockModel.domainXMLDesc
libvirt.virDomain.undefine = MockModel.undefineDomain
@@ -112,7 +108,6 @@ class MockModel(Model):
StoragePoolModel._update_lvm_disks = self._update_lvm_disks
StorageVolumesModel.get_list = self._mock_storagevolumes_get_list
StorageVolumeModel.doUpload = self._mock_storagevolume_doUpload
- DebugReportsModel._gen_debugreport_file = self._gen_debugreport_file
LibvirtVMTemplate._get_volume_path = self._get_volume_path
VMTemplate.get_iso_info = self._probe_image
imageinfo.probe_image = self._probe_image
@@ -244,22 +239,6 @@ class MockModel(Model):
return MockModel._libvirt_get_vol_path(pool, vol)
- def _gen_debugreport_file(self, name):
- return add_task('/plugins/kimchi/debugreports/%s' % name, self._create_log,
- self.objstore, name)
-
- def _create_log(self, cb, name):
- path = config.get_debugreports_path()
- tmpf = os.path.join(path, name + '.tmp')
- realf = os.path.join(path, name + '.txt')
- length = random.randint(1000, 10000)
- with open(tmpf, 'w') as fd:
- while length:
- fd.write('I am logged')
- length = length - 1
- os.rename(tmpf, realf)
- cb("OK", True)
-
def _update_lvm_disks(self, pool_name, disks):
conn = self.conn.get()
pool = conn.storagePoolLookupByName(pool_name.encode('utf-8'))
diff --git a/plugins/kimchi/model/config.py b/plugins/kimchi/model/config.py
index 371e382..5c984ee 100644
--- a/plugins/kimchi/model/config.py
+++ b/plugins/kimchi/model/config.py
@@ -28,10 +28,7 @@ from wok.utils import check_url_path, run_command, wok_log
from ..config import find_qemu_binary
from ..distroloader import DistroLoader
-from ..repositories import Repositories
from ..screenshot import VMScreenshot
-from ..swupdate import SoftwareUpdate
-from debugreports import DebugReportsModel
from featuretests import FeatureTests, FEATURETEST_POOL_NAME
from featuretests import FEATURETEST_VM_NAME
@@ -116,28 +113,10 @@ class CapabilitiesModel(object):
return False
def lookup(self, *ident):
- report_tool = DebugReportsModel.get_system_report_tool()
- try:
- SoftwareUpdate()
- except Exception:
- update_tool = False
- else:
- update_tool = True
-
- try:
- repo = Repositories()
- except Exception:
- repo_mngt_tool = None
- else:
- repo_mngt_tool = repo._pkg_mnger.TYPE
-
return {'libvirt_stream_protocols': self.libvirt_stream_protocols,
'qemu_spice': self._qemu_support_spice(),
'qemu_stream': self.qemu_stream,
'screenshot': VMScreenshot.get_stream_test_result(),
- 'system_report_tool': bool(report_tool),
- 'update_tool': update_tool,
- 'repo_mngt_tool': repo_mngt_tool,
'federation': kconfig.get("server", "federation"),
'auth': kconfig.get("authentication", "method"),
'kernel_vfio': self.kernel_vfio,
diff --git a/plugins/kimchi/model/debugreports.py b/plugins/kimchi/model/debugreports.py
deleted file mode 100644
index d20eb12..0000000
--- a/plugins/kimchi/model/debugreports.py
+++ /dev/null
@@ -1,213 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2014-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import fnmatch
-import glob
-import logging
-import os
-import shutil
-import subprocess
-import time
-
-from wok.exception import InvalidParameter, NotFoundError, OperationFailed
-from wok.exception import WokException
-from wok.utils import add_task, wok_log
-from wok.utils import run_command
-
-from .. import config
-from tasks import TaskModel
-
-
-class DebugReportsModel(object):
- def __init__(self, **kargs):
- self.objstore = kargs['objstore']
- self.task = TaskModel(**kargs)
-
- def create(self, params):
- ident = params.get('name').strip()
- # Generate a name with time and millisec precision, if necessary
- if ident is None or ident == "":
- ident = 'report-' + str(int(time.time() * 1000))
- else:
- if ident in self.get_list():
- raise InvalidParameter("KCHDR0008E", {"name": ident})
- taskid = self._gen_debugreport_file(ident)
- return self.task.lookup(taskid)
-
- def get_list(self):
- path = config.get_debugreports_path()
- file_pattern = os.path.join(path, '*.*')
- file_lists = glob.glob(file_pattern)
- file_lists = [os.path.split(file)[1] for file in file_lists]
- name_lists = [file.split('.', 1)[0] for file in file_lists]
-
- return name_lists
-
- def _gen_debugreport_file(self, name):
- gen_cmd = self.get_system_report_tool()
-
- if gen_cmd is not None:
- return add_task('/plugins/kimchi/debugreports/%s' % name, gen_cmd,
- self.objstore, name)
-
- raise OperationFailed("KCHDR0002E")
-
- @staticmethod
- def sosreport_generate(cb, name):
- def log_error(e):
- log = logging.getLogger('Model')
- log.warning('Exception in generating debug file: %s', e)
-
- try:
- command = ['sosreport', '--batch', '--name=%s' % name]
- output, error, retcode = run_command(command)
-
- if retcode != 0:
- raise OperationFailed("KCHDR0003E", {'name': name,
- 'err': retcode})
-
- # SOSREPORT might create file in /tmp or /var/tmp
- # FIXME: The right way should be passing the tar.xz file directory
- # though the parameter '--tmp-dir', but it is failing in Fedora 20
- patterns = ['/tmp/sosreport-%s-*', '/var/tmp/sosreport-%s-*']
- reports = []
- reportFile = None
- for p in patterns:
- reports = reports + [f for f in glob.glob(p % name)]
- for f in reports:
- if not fnmatch.fnmatch(f, '*.md5'):
- reportFile = f
- break
- # Some error in sosreport happened
- if reportFile is None:
- wok_log.error('Debug report file not found. See sosreport '
- 'output for detail:\n%s', output)
- fname = (patterns[0] % name).split('/')[-1]
- raise OperationFailed('KCHDR0004E', {'name': fname})
-
- md5_report_file = reportFile + '.md5'
- report_file_extension = '.' + reportFile.split('.', 1)[1]
- path = config.get_debugreports_path()
- target = os.path.join(path, name + report_file_extension)
- # Moving report
- msg = 'Moving debug report file "%s" to "%s"' % (reportFile,
- target)
- wok_log.info(msg)
- shutil.move(reportFile, target)
- # Deleting md5
- msg = 'Deleting report md5 file: "%s"' % (md5_report_file)
- wok_log.info(msg)
- with open(md5_report_file) as f:
- md5 = f.read().strip()
- wok_log.info('Md5 file content: "%s"', md5)
- os.remove(md5_report_file)
- cb('OK', True)
- return
-
- except WokException as e:
- log_error(e)
- raise
-
- except OSError as e:
- log_error(e)
- raise
-
- except Exception, e:
- # No need to call cb to update the task status here.
- # The task object will catch the exception raised here
- # and update the task status there
- log_error(e)
- raise OperationFailed("KCHDR0005E", {'name': name, 'err': e})
-
- @staticmethod
- def get_system_report_tool():
- # Please add new possible debug report command here
- # and implement the report generating function
- # based on the new report command
- report_tools = ({'cmd': 'sosreport --help',
- 'fn': DebugReportsModel.sosreport_generate},)
-
- # check if the command can be found by shell one by one
- for helper_tool in report_tools:
- try:
- retcode = subprocess.call(helper_tool['cmd'], shell=True,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- if retcode == 0:
- return helper_tool['fn']
- except Exception, e:
- wok_log.info('Exception running command: %s', e)
-
- return None
-
-
-class DebugReportModel(object):
- def __init__(self, **kargs):
- pass
-
- def lookup(self, name):
- path = config.get_debugreports_path()
- file_pattern = os.path.join(path, name)
- file_pattern = file_pattern + '.*'
- try:
- file_target = glob.glob(file_pattern)[0]
- except IndexError:
- raise NotFoundError("KCHDR0001E", {'name': name})
-
- ctime = os.stat(file_target).st_mtime
- ctime = time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime(ctime))
- file_target = os.path.split(file_target)[-1]
- file_target = os.path.join("plugins/kimchi/data/debugreports",
- file_target)
- return {'uri': file_target,
- 'ctime': ctime}
-
- def update(self, name, params):
- path = config.get_debugreports_path()
- file_pattern = os.path.join(path, name + '.*')
- try:
- file_source = glob.glob(file_pattern)[0]
- except IndexError:
- raise NotFoundError("KCHDR0001E", {'name': name})
-
- file_target = file_source.replace(name, params['name'])
- if os.path.isfile(file_target):
- raise InvalidParameter('KCHDR0008E', {'name': params['name']})
-
- shutil.move(file_source, file_target)
- wok_log.info('%s renamed to %s' % (file_source, file_target))
- return params['name']
-
- def delete(self, name):
- path = config.get_debugreports_path()
- file_pattern = os.path.join(path, name + '.*')
- try:
- file_target = glob.glob(file_pattern)[0]
- except IndexError:
- raise NotFoundError("KCHDR0001E", {'name': name})
-
- os.remove(file_target)
-
-
-class DebugReportContentModel(object):
- def __init__(self, **kargs):
- self._debugreport = DebugReportModel()
-
- def lookup(self, name):
- return self._debugreport.lookup(name)
diff --git a/plugins/kimchi/model/host.py b/plugins/kimchi/model/host.py
index 3ff034c..e24c686 100644
--- a/plugins/kimchi/model/host.py
+++ b/plugins/kimchi/model/host.py
@@ -18,27 +18,15 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
import libvirt
-import os
-import platform
import psutil
-import time
-from cherrypy.process.plugins import BackgroundTask
-from collections import defaultdict
-from wok import netinfo
-from wok.basemodel import Singleton
from wok.exception import InvalidOperation, InvalidParameter
from wok.exception import NotFoundError, OperationFailed
-from wok.utils import add_task, wok_log
from wok.xmlutils.utils import xpath_get_text
import hostdev
-from .. import disks
-from ..repositories import Repositories
-from ..swupdate import SoftwareUpdate
from config import CapabilitiesModel
from tasks import TaskModel
-from vms import DOM_STATE_MAP
HOST_STATS_INTERVAL = 1
@@ -49,57 +37,6 @@ class HostModel(object):
self.conn = kargs['conn']
self.objstore = kargs['objstore']
self.task = TaskModel(**kargs)
- self.host_info = self._get_host_info()
-
- def _get_ppc_cpu_info(self):
- res = {}
- with open('/proc/cpuinfo') as f:
- for line in f.xreadlines():
- # Parse CPU, CPU's revision and CPU's clock information
- for key in ['cpu', 'revision', 'clock']:
- if key in line:
- info = line.split(':')[1].strip()
- if key == 'clock':
- value = float(info.split('MHz')[0].strip()) / 1000
- else:
- value = info.split('(')[0].strip()
- res[key] = value
-
- # Power machines show, for each cpu/core, a block with
- # all cpu information. Here we control the scan of the
- # necessary information (1st block provides
- # everything), skipping the function when find all
- # information.
- if len(res.keys()) == 3:
- return "%(cpu)s (%(revision)s) @ %(clock)s GHz\
- " % res
-
- return ""
-
- def _get_host_info(self):
- res = {}
- if platform.machine().startswith('ppc'):
- res['cpu_model'] = self._get_ppc_cpu_info()
- else:
- with open('/proc/cpuinfo') as f:
- for line in f.xreadlines():
- if "model name" in line:
- res['cpu_model'] = line.split(':')[1].strip()
- break
-
- res['cpus'] = 0
- res['memory'] = 0L
-
- # Include IBM PowerKVM name to supported distro names
- _sup_distros = platform._supported_dists + ('ibm_powerkvm',)
- # 'fedora' '17' 'Beefy Miracle'
- distro, version, codename = platform.linux_distribution(
- supported_dists=_sup_distros)
- res['os_distro'] = distro
- res['os_version'] = version
- res['os_codename'] = unicode(codename, "utf-8")
-
- return res
def lookup(self, *name):
cpus = psutil.NUM_CPUS
@@ -121,179 +58,6 @@ class HostModel(object):
self.host_info['memory'] = psutil.phymem_usage().total
return self.host_info
- def swupdate(self, *name):
- try:
- swupdate = SoftwareUpdate()
- except:
- raise OperationFailed('KCHPKGUPD0004E')
-
- pkgs = swupdate.getNumOfUpdates()
- if pkgs == 0:
- raise OperationFailed('KCHPKGUPD0001E')
-
- wok_log.debug('Host is going to be updated.')
- taskid = add_task('/plugins/kimchi/host/swupdate', swupdate.doUpdate,
- self.objstore, None)
- return self.task.lookup(taskid)
-
- def shutdown(self, args=None):
- # Check for running vms before shutdown
- running_vms = self._get_vms_list_by_state('running')
- if len(running_vms) > 0:
- raise OperationFailed("KCHHOST0001E")
-
- wok_log.info('Host is going to shutdown.')
- os.system('shutdown -h now')
-
- def reboot(self, args=None):
- # Find running VMs
- running_vms = self._get_vms_list_by_state('running')
- if len(running_vms) > 0:
- raise OperationFailed("KCHHOST0002E")
-
- wok_log.info('Host is going to reboot.')
- os.system('reboot')
-
- def _get_vms_list_by_state(self, state):
- conn = self.conn.get()
- return [dom.name().decode('utf-8')
- for dom in conn.listAllDomains(0)
- if (DOM_STATE_MAP[dom.info()[0]]) == state]
-
-
-class HostStatsModel(object):
- __metaclass__ = Singleton
-
- def __init__(self, **kargs):
- self.host_stats = defaultdict(list)
- self.host_stats_thread = BackgroundTask(HOST_STATS_INTERVAL,
- self._update_host_stats)
- self.host_stats_thread.start()
-
- def lookup(self, *name):
- return {'cpu_utilization': self.host_stats['cpu_utilization'][-1],
- 'memory': self.host_stats['memory'][-1],
- 'disk_read_rate': self.host_stats['disk_read_rate'][-1],
- 'disk_write_rate': self.host_stats['disk_write_rate'][-1],
- 'net_recv_rate': self.host_stats['net_recv_rate'][-1],
- 'net_sent_rate': self.host_stats['net_sent_rate'][-1]}
-
- def _update_host_stats(self):
- preTimeStamp = self.host_stats['timestamp']
- timestamp = time.time()
- # FIXME when we upgrade psutil, we can get uptime by psutil.uptime
- # we get uptime by float(open("/proc/uptime").readline().split()[0])
- # and calculate the first io_rate after the OS started.
- with open("/proc/uptime") as time_f:
- seconds = (timestamp - preTimeStamp if preTimeStamp else
- float(time_f.readline().split()[0]))
-
- self.host_stats['timestamp'] = timestamp
- self._get_host_disk_io_rate(seconds)
- self._get_host_network_io_rate(seconds)
-
- self._get_percentage_host_cpu_usage()
- self._get_host_memory_stats()
-
- # store only 60 stats (1 min)
- for key, value in self.host_stats.iteritems():
- if isinstance(value, list):
- if len(value) == 60:
- self.host_stats[key] = value[10:]
-
- def _get_percentage_host_cpu_usage(self):
- # This is cpu usage producer. This producer will calculate the usage
- # at an interval of HOST_STATS_INTERVAL.
- # The psutil.cpu_percent works as non blocking.
- # psutil.cpu_percent maintains a cpu time sample.
- # It will update the cpu time sample when it is called.
- # So only this producer can call psutil.cpu_percent in kimchi.
- self.host_stats['cpu_utilization'].append(psutil.cpu_percent(None))
-
- def _get_host_memory_stats(self):
- virt_mem = psutil.virtual_memory()
- # available:
- # the actual amount of available memory that can be given
- # instantly to processes that request more memory in bytes; this
- # is calculated by summing different memory values depending on
- # the platform (e.g. free + buffers + cached on Linux)
- memory_stats = {'total': virt_mem.total,
- 'free': virt_mem.free,
- 'cached': virt_mem.cached,
- 'buffers': virt_mem.buffers,
- 'avail': virt_mem.available}
- self.host_stats['memory'].append(memory_stats)
-
- def _get_host_disk_io_rate(self, seconds):
- disk_read_bytes = self.host_stats['disk_read_bytes']
- disk_write_bytes = self.host_stats['disk_write_bytes']
- prev_read_bytes = disk_read_bytes[-1] if disk_read_bytes else 0
- prev_write_bytes = disk_write_bytes[-1] if disk_write_bytes else 0
-
- disk_io = psutil.disk_io_counters(False)
- read_bytes = disk_io.read_bytes
- write_bytes = disk_io.write_bytes
-
- rd_rate = int(float(read_bytes - prev_read_bytes) / seconds + 0.5)
- wr_rate = int(float(write_bytes - prev_write_bytes) / seconds + 0.5)
-
- self.host_stats['disk_read_rate'].append(rd_rate)
- self.host_stats['disk_write_rate'].append(wr_rate)
- self.host_stats['disk_read_bytes'].append(read_bytes)
- self.host_stats['disk_write_bytes'].append(write_bytes)
-
- def _get_host_network_io_rate(self, seconds):
- net_recv_bytes = self.host_stats['net_recv_bytes']
- net_sent_bytes = self.host_stats['net_sent_bytes']
- prev_recv_bytes = net_recv_bytes[-1] if net_recv_bytes else 0
- prev_sent_bytes = net_sent_bytes[-1] if net_sent_bytes else 0
-
- net_ios = psutil.network_io_counters(True)
- recv_bytes = 0
- sent_bytes = 0
- for key in set(netinfo.nics() +
- netinfo.wlans()) & set(net_ios.iterkeys()):
- recv_bytes = recv_bytes + net_ios[key].bytes_recv
- sent_bytes = sent_bytes + net_ios[key].bytes_sent
-
- rx_rate = int(float(recv_bytes - prev_recv_bytes) / seconds + 0.5)
- tx_rate = int(float(sent_bytes - prev_sent_bytes) / seconds + 0.5)
-
- self.host_stats['net_recv_rate'].append(rx_rate)
- self.host_stats['net_sent_rate'].append(tx_rate)
- self.host_stats['net_recv_bytes'].append(recv_bytes)
- self.host_stats['net_sent_bytes'].append(sent_bytes)
-
-
-class HostStatsHistoryModel(object):
- def __init__(self, **kargs):
- self.history = HostStatsModel(**kargs)
-
- def lookup(self, *name):
- return {'cpu_utilization': self.history.host_stats['cpu_utilization'],
- 'memory': self.history.host_stats['memory'],
- 'disk_read_rate': self.history.host_stats['disk_read_rate'],
- 'disk_write_rate': self.history.host_stats['disk_write_rate'],
- 'net_recv_rate': self.history.host_stats['net_recv_rate'],
- 'net_sent_rate': self.history.host_stats['net_sent_rate']}
-
-
-class PartitionsModel(object):
- def __init__(self, **kargs):
- pass
-
- def get_list(self):
- result = disks.get_partitions_names()
- return result
-
-
-class PartitionModel(object):
- def __init__(self, **kargs):
- pass
-
- def lookup(self, name):
- return disks.get_partition_details(name)
-
class DevicesModel(object):
def __init__(self, **kargs):
@@ -390,87 +154,3 @@ class DeviceModel(object):
raise NotFoundError('KCHHOST0003E', {'name': nodedev_name})
return hostdev.get_dev_info(dev)
-
-class PackagesUpdateModel(object):
- def __init__(self, **kargs):
- try:
- self.host_swupdate = SoftwareUpdate()
- except:
- self.host_swupdate = None
-
- def get_list(self):
- if self.host_swupdate is None:
- raise OperationFailed('KCHPKGUPD0004E')
-
- return self.host_swupdate.getUpdates()
-
-
-class PackageUpdateModel(object):
- def __init__(self, **kargs):
- pass
-
- def lookup(self, name):
- try:
- swupdate = SoftwareUpdate()
- except Exception:
- raise OperationFailed('KCHPKGUPD0004E')
-
- return swupdate.getUpdate(name)
-
-
-class RepositoriesModel(object):
- def __init__(self, **kargs):
- try:
- self.host_repositories = Repositories()
- except:
- self.host_repositories = None
-
- def get_list(self):
- if self.host_repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return sorted(self.host_repositories.getRepositories())
-
- def create(self, params):
- if self.host_repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self.host_repositories.addRepository(params)
-
-
-class RepositoryModel(object):
- def __init__(self, **kargs):
- try:
- self._repositories = Repositories()
- except:
- self._repositories = None
-
- def lookup(self, repo_id):
- if self._repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self._repositories.getRepository(repo_id)
-
- def enable(self, repo_id):
- if self._repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self._repositories.enableRepository(repo_id)
-
- def disable(self, repo_id):
- if self._repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self._repositories.disableRepository(repo_id)
-
- def update(self, repo_id, params):
- if self._repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self._repositories.updateRepository(repo_id, params)
-
- def delete(self, repo_id):
- if self._repositories is None:
- raise InvalidOperation('KCHREPOS0014E')
-
- return self._repositories.removeRepository(repo_id)
diff --git a/plugins/kimchi/repositories.py b/plugins/kimchi/repositories.py
deleted file mode 100644
index 9caabc4..0000000
--- a/plugins/kimchi/repositories.py
+++ /dev/null
@@ -1,529 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2014-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import copy
-import os
-import time
-import urlparse
-from ConfigParser import ConfigParser
-
-from wok.basemodel import Singleton
-from wok.exception import InvalidOperation, InvalidParameter
-from wok.exception import OperationFailed, NotFoundError, MissingParameter
-from wok.utils import validate_repo_url
-
-from config import kimchiLock
-from yumparser import get_yum_repositories, write_repo_to_file
-
-
-class Repositories(object):
- __metaclass__ = Singleton
-
- """
- Class to represent and operate with repositories information.
- """
- def __init__(self):
- try:
- __import__('yum')
- self._pkg_mnger = YumRepo()
- except ImportError:
- try:
- __import__('apt_pkg')
- self._pkg_mnger = AptRepo()
- except ImportError:
- raise InvalidOperation('KCHREPOS0014E')
-
- def addRepository(self, params):
- """
- Add and enable a new repository
- """
- config = params.get('config', {})
- extra_keys = list(
- set(config.keys()).difference(set(self._pkg_mnger.CONFIG_ENTRY)))
- if len(extra_keys) > 0:
- raise InvalidParameter("KCHREPOS0028E",
- {'items': ",".join(extra_keys)})
-
- return self._pkg_mnger.addRepo(params)
-
- def getRepositories(self):
- """
- Return a dictionary with all Kimchi's repositories. Each element uses
- the format {<repo_id>: {repo}}, where repo is a dictionary in the
- repositories.Repositories() format.
- """
- return self._pkg_mnger.getRepositoriesList()
-
- def getRepository(self, repo_id):
- """
- Return a dictionary with all info from a given repository ID.
- """
- info = self._pkg_mnger.getRepo(repo_id)
- info['repo_id'] = repo_id
- return info
-
- def enableRepository(self, repo_id):
- """
- Enable a repository.
- """
- return self._pkg_mnger.toggleRepo(repo_id, True)
-
- def disableRepository(self, repo_id):
- """
- Disable a given repository.
- """
- return self._pkg_mnger.toggleRepo(repo_id, False)
-
- def updateRepository(self, repo_id, params):
- """
- Update the information of a given repository.
- The input is the repo_id of the repository to be updated and a dict
- with the information to be updated.
- """
- return self._pkg_mnger.updateRepo(repo_id, params)
-
- def removeRepository(self, repo_id):
- """
- Remove a given repository
- """
- return self._pkg_mnger.removeRepo(repo_id)
-
-
-class YumRepo(object):
- """
- Class to represent and operate with YUM repositories.
- It's loaded only on those systems listed at YUM_DISTROS and loads necessary
- modules in runtime.
- """
- TYPE = 'yum'
- DEFAULT_CONF_DIR = "/etc/yum.repos.d"
- CONFIG_ENTRY = ('repo_name', 'mirrorlist', 'metalink')
-
- def __init__(self):
- self._confdir = self.DEFAULT_CONF_DIR
-
- def _get_repos(self, errcode):
- try:
- kimchiLock.acquire()
- repos = get_yum_repositories()
- except Exception, e:
- kimchiLock.release()
- raise OperationFailed(errcode, {'err': str(e)})
- finally:
- kimchiLock.release()
-
- return repos
-
- def getRepositoriesList(self):
- """
- Return a list of repositories IDs
- """
- repos = self._get_repos('KCHREPOS0024E')
- return repos.keys()
-
- def getRepo(self, repo_id):
- """
- Return a dictionary in the repositories.Repositories() of the given
- repository ID format with the information of a YumRepository object.
- """
- repos = self._get_repos('KCHREPOS0025E')
-
- if repo_id not in repos.keys():
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- entry = repos.get(repo_id)
-
- info = {}
- info['enabled'] = entry.enabled
- info['baseurl'] = entry.baseurl or ''
- info['config'] = {}
- info['config']['repo_name'] = entry.name or ''
- info['config']['gpgcheck'] = entry.gpgcheck
- info['config']['gpgkey'] = entry.gpgkey or ''
- info['config']['mirrorlist'] = entry.mirrorlist or ''
- info['config']['metalink'] = entry.metalink or ''
- return info
-
- def addRepo(self, params):
- """
- Add a given repository to YumBase
- """
- # At least one base url, or one mirror, must be given.
- baseurl = params.get('baseurl', '')
-
- config = params.get('config', {})
- mirrorlist = config.get('mirrorlist', '')
- metalink = config.get('metalink', '')
- if not baseurl and not mirrorlist and not metalink:
- raise MissingParameter("KCHREPOS0013E")
-
- if baseurl:
- validate_repo_url(baseurl)
-
- if mirrorlist:
- validate_repo_url(mirrorlist)
-
- if metalink:
- validate_repo_url(metalink)
-
- if mirrorlist and metalink:
- raise InvalidOperation('KCHREPOS0030E')
-
- repo_id = params.get('repo_id', None)
- if repo_id is None:
- repo_id = "kimchi_repo_%s" % str(int(time.time() * 1000))
-
- repos = self._get_repos('KCHREPOS0026E')
- if repo_id in repos.keys():
- raise InvalidOperation("KCHREPOS0022E", {'repo_id': repo_id})
-
- repo_name = config.get('repo_name', repo_id)
- repo = {'baseurl': baseurl, 'mirrorlist': mirrorlist,
- 'name': repo_name, 'gpgcheck': 1,
- 'gpgkey': [], 'enabled': 1, 'metalink': metalink}
-
- # write a repo file in the system with repo{} information.
- parser = ConfigParser()
- parser.add_section(repo_id)
-
- for key, value in repo.iteritems():
- if value:
- parser.set(repo_id, key, value)
-
- repofile = os.path.join(self._confdir, repo_id + '.repo')
- try:
- with open(repofile, 'w') as fd:
- parser.write(fd)
- except:
- raise OperationFailed("KCHREPOS0018E",
- {'repo_file': repofile})
-
- return repo_id
-
- def toggleRepo(self, repo_id, enable):
- repos = self._get_repos('KCHREPOS0011E')
- if repo_id not in repos.keys():
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- entry = repos.get(repo_id)
- if enable and entry.enabled:
- raise InvalidOperation("KCHREPOS0015E", {'repo_id': repo_id})
-
- if not enable and not entry.enabled:
- raise InvalidOperation("KCHREPOS0016E", {'repo_id': repo_id})
-
- kimchiLock.acquire()
- try:
- if enable:
- entry.enable()
- else:
- entry.disable()
-
- write_repo_to_file(entry)
- except:
- if enable:
- raise OperationFailed("KCHREPOS0020E", {'repo_id': repo_id})
-
- raise OperationFailed("KCHREPOS0021E", {'repo_id': repo_id})
- finally:
- kimchiLock.release()
-
- return repo_id
-
- def updateRepo(self, repo_id, params):
- """
- Update a given repository in repositories.Repositories() format
- """
- repos = self._get_repos('KCHREPOS0011E')
- if repo_id not in repos.keys():
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- entry = repos.get(repo_id)
-
- baseurl = params.get('baseurl', None)
- config = params.get('config', {})
- mirrorlist = config.get('mirrorlist', None)
- metalink = config.get('metalink', None)
-
- if baseurl is not None and len(baseurl.strip()) == 0:
- baseurl = None
-
- if mirrorlist is not None and len(mirrorlist.strip()) == 0:
- mirrorlist = None
-
- if metalink is not None and len(metalink.strip()) == 0:
- metalink = None
-
- if baseurl is None and mirrorlist is None and metalink is None:
- raise MissingParameter("KCHREPOS0013E")
-
- if baseurl is not None:
- validate_repo_url(baseurl)
- entry.baseurl = baseurl
-
- if mirrorlist is not None:
- validate_repo_url(mirrorlist)
- entry.mirrorlist = mirrorlist
-
- if metalink is not None:
- validate_repo_url(metalink)
- entry.metalink = metalink
-
- if mirrorlist and metalink:
- raise InvalidOperation('KCHREPOS0030E')
-
- entry.id = params.get('repo_id', repo_id)
- entry.name = config.get('repo_name', entry.name)
- entry.gpgcheck = config.get('gpgcheck', entry.gpgcheck)
- entry.gpgkey = config.get('gpgkey', entry.gpgkey)
- kimchiLock.acquire()
- write_repo_to_file(entry)
- kimchiLock.release()
- return repo_id
-
- def removeRepo(self, repo_id):
- """
- Remove a given repository
- """
- repos = self._get_repos('KCHREPOS0027E')
- if repo_id not in repos.keys():
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- entry = repos.get(repo_id)
- parser = ConfigParser()
- with open(entry.repofile) as fd:
- parser.readfp(fd)
-
- if len(parser.sections()) == 1:
- os.remove(entry.repofile)
- return
-
- parser.remove_section(repo_id)
- with open(entry.repofile, "w") as fd:
- parser.write(fd)
-
-
-class AptRepo(object):
- """
- Class to represent and operate with YUM repositories.
- It's loaded only on those systems listed at YUM_DISTROS and loads necessary
- modules in runtime.
- """
- TYPE = 'deb'
- KIMCHI_LIST = "kimchi-source.list"
- CONFIG_ENTRY = ('dist', 'comps')
-
- def __init__(self):
- getattr(__import__('apt_pkg'), 'init_config')()
- getattr(__import__('apt_pkg'), 'init_system')()
- config = getattr(__import__('apt_pkg'), 'config')
- self.pkg_lock = getattr(__import__('apt_pkg'), 'SystemLock')
- module = __import__('aptsources.sourceslist', globals(), locals(),
- ['SourcesList'], -1)
-
- self._sourceparts_path = '/%s%s' % (
- config.get('Dir::Etc'), config.get('Dir::Etc::sourceparts'))
- self._sourceslist = getattr(module, 'SourcesList')
- self.filename = os.path.join(self._sourceparts_path, self.KIMCHI_LIST)
- if not os.path.exists(self.filename):
- with open(self.filename, 'w') as fd:
- fd.write("# This file is managed by Kimchi and it must not "
- "be modified manually\n")
-
- def _get_repos(self):
- try:
- with self.pkg_lock():
- repos = self._sourceslist()
- repos.refresh()
- except Exception, e:
- kimchiLock.release()
- raise OperationFailed('KCHREPOS0025E', {'err': e.message})
-
- return repos
-
- def _get_repo_id(self, repo):
- data = urlparse.urlparse(repo.uri)
- name = data.hostname or data.path
- return '%s-%s-%s' % (name, repo.dist, "-".join(repo.comps))
-
- def _get_source_entry(self, repo_id):
- kimchiLock.acquire()
- repos = self._get_repos()
- kimchiLock.release()
-
- for r in repos:
- # Ignore deb-src repositories
- if r.type != 'deb':
- continue
-
- if self._get_repo_id(r) != repo_id:
- continue
-
- return r
-
- return None
-
- def getRepositoriesList(self):
- """
- Return a list of repositories IDs
-
- APT repositories there aren't the concept about repository ID, so for
- internal control, the repository ID will be built as described in
- _get_repo_id()
- """
- kimchiLock.acquire()
- repos = self._get_repos()
- kimchiLock.release()
-
- res = []
- for r in repos:
- # Ignore deb-src repositories
- if r.type != 'deb':
- continue
-
- res.append(self._get_repo_id(r))
-
- return res
-
- def getRepo(self, repo_id):
- """
- Return a dictionary in the repositories.Repositories() format of the
- given repository ID with the information of a SourceEntry object.
- """
- r = self._get_source_entry(repo_id)
- if r is None:
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- info = {'enabled': not r.disabled,
- 'baseurl': r.uri,
- 'config': {'dist': r.dist,
- 'comps': r.comps}}
- return info
-
- def addRepo(self, params):
- """
- Add a new APT repository based on <params>
- """
- # To create a APT repository the dist is a required parameter
- # (in addition to baseurl, verified on controller through API.json)
- config = params.get('config', None)
- if config is None:
- raise MissingParameter("KCHREPOS0019E")
-
- if 'dist' not in config.keys():
- raise MissingParameter("KCHREPOS0019E")
-
- uri = params['baseurl']
- dist = config['dist']
- comps = config.get('comps', [])
-
- validate_repo_url(uri)
-
- kimchiLock.acquire()
- try:
- repos = self._get_repos()
- source_entry = repos.add('deb', uri, dist, comps,
- file=self.filename)
- with self.pkg_lock():
- repos.save()
- except Exception as e:
- kimchiLock.release()
- raise OperationFailed("KCHREPOS0026E", {'err': e.message})
- kimchiLock.release()
- return self._get_repo_id(source_entry)
-
- def toggleRepo(self, repo_id, enable):
- """
- Enable a given repository
- """
- r = self._get_source_entry(repo_id)
- if r is None:
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- if enable and not r.disabled:
- raise InvalidOperation("KCHREPOS0015E", {'repo_id': repo_id})
-
- if not enable and r.disabled:
- raise InvalidOperation("KCHREPOS0016E", {'repo_id': repo_id})
-
- if enable:
- line = 'deb'
- else:
- line = '#deb'
-
- kimchiLock.acquire()
- try:
- repos = self._get_repos()
- with self.pkg_lock():
- repos.remove(r)
- repos.add(line, r.uri, r.dist, r.comps, file=self.filename)
- repos.save()
- except:
- kimchiLock.release()
- if enable:
- raise OperationFailed("KCHREPOS0020E", {'repo_id': repo_id})
-
- raise OperationFailed("KCHREPOS0021E", {'repo_id': repo_id})
- finally:
- kimchiLock.release()
-
- return repo_id
-
- def updateRepo(self, repo_id, params):
- """
- Update a given repository in repositories.Repositories() format
- """
- old_info = self.getRepo(repo_id)
- updated_info = copy.deepcopy(old_info)
- updated_info['baseurl'] = params.get(
- 'baseurl', updated_info['baseurl'])
-
- if 'config' in params.keys():
- config = params['config']
- updated_info['config']['dist'] = config.get(
- 'dist', old_info['config']['dist'])
- updated_info['config']['comps'] = config.get(
- 'comps', old_info['config']['comps'])
-
- self.removeRepo(repo_id)
- try:
- return self.addRepo(updated_info)
- except:
- self.addRepo(old_info)
- raise
-
- def removeRepo(self, repo_id):
- """
- Remove a given repository
- """
- r = self._get_source_entry(repo_id)
- if r is None:
- raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})
-
- kimchiLock.acquire()
- try:
- repos = self._get_repos()
- with self.pkg_lock():
- repos.remove(r)
- repos.save()
- except:
- kimchiLock.release()
- raise OperationFailed("KCHREPOS0017E", {'repo_id': repo_id})
- finally:
- kimchiLock.release()
diff --git a/plugins/kimchi/root.py b/plugins/kimchi/root.py
index 20c41ca..1e4cab7 100644
--- a/plugins/kimchi/root.py
+++ b/plugins/kimchi/root.py
@@ -58,7 +58,6 @@ class KimchiRoot(WokRoot):
make_dirs = [
os.path.abspath(config.get_distros_store()),
- os.path.abspath(config.get_debugreports_path()),
os.path.abspath(config.get_screenshot_path())
]
for directory in make_dirs:
diff --git a/plugins/kimchi/swupdate.py b/plugins/kimchi/swupdate.py
deleted file mode 100644
index 84b927f..0000000
--- a/plugins/kimchi/swupdate.py
+++ /dev/null
@@ -1,263 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2014-2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import subprocess
-import time
-
-from wok.basemodel import Singleton
-from wok.exception import NotFoundError, OperationFailed
-from wok.utils import run_command, wok_log
-
-from config import kimchiLock
-from yumparser import get_yum_packages_list_update
-
-
-class SoftwareUpdate(object):
- __metaclass__ = Singleton
-
- """
- Class to represent and operate with OS software update.
- """
- def __init__(self):
- # This stores all packages to be updated for Kimchi perspective. It's a
- # dictionary of dictionaries, in the format {'package_name': package},
- # where:
- # package = {'package_name': <string>, 'version': <string>,
- # 'arch': <string>, 'repository': <string>
- # }
- self._packages = {}
-
- # This stores the number of packages to update
- self._num2update = 0
-
- # Get the distro of host machine and creates an object related to
- # correct package management system
- try:
- __import__('yum')
- wok_log.info("Loading YumUpdate features.")
- self._pkg_mnger = YumUpdate()
- except ImportError:
- try:
- __import__('apt')
- wok_log.info("Loading AptUpdate features.")
- self._pkg_mnger = AptUpdate()
- except ImportError:
- zypper_help = ["zypper", "--help"]
- (stdout, stderr, returncode) = run_command(zypper_help)
- if returncode == 0:
- wok_log.info("Loading ZypperUpdate features.")
- self._pkg_mnger = ZypperUpdate()
- else:
- raise Exception("There is no compatible package manager "
- "for this system.")
-
- def _scanUpdates(self):
- """
- Update self._packages with packages to be updated.
- """
- self._packages = {}
- self._num2update = 0
-
- # Call system pkg_mnger to get the packages as list of dictionaries.
- for pkg in self._pkg_mnger.getPackagesList():
-
- # Check if already exist a package in self._packages
- pkg_id = pkg.get('package_name')
- if pkg_id in self._packages.keys():
- # package already listed to update. do nothing
- continue
-
- # Update the self._packages and self._num2update
- self._packages[pkg_id] = pkg
- self._num2update = self._num2update + 1
-
- def getUpdates(self):
- """
- Return the self._packages.
- """
- self._scanUpdates()
- return self._packages
-
- def getUpdate(self, name):
- """
- Return a dictionary with all info from a given package name.
- """
- if name not in self._packages.keys():
- raise NotFoundError('KCHPKGUPD0002E', {'name': name})
-
- return self._packages[name]
-
- def getNumOfUpdates(self):
- """
- Return the number of packages to be updated.
- """
- self._scanUpdates()
- return self._num2update
-
- def doUpdate(self, cb, params):
- """
- Execute the update
- """
- # reset messages
- cb('')
-
- cmd = self._pkg_mnger.update_cmd
- proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- msgs = []
- while proc.poll() is None:
- msgs.append(proc.stdout.readline())
- cb(''.join(msgs))
- time.sleep(0.5)
-
- # read the final output lines
- msgs.extend(proc.stdout.readlines())
-
- retcode = proc.poll()
- if retcode == 0:
- return cb(''.join(msgs), True)
-
- msgs.extend(proc.stderr.readlines())
- return cb(''.join(msgs), False)
-
-
-class YumUpdate(object):
- """
- Class to represent and operate with YUM software update system.
- It's loaded only on those systems listed at YUM_DISTROS and loads necessary
- modules in runtime.
- """
- def __init__(self):
- self._pkgs = {}
- self.update_cmd = ["yum", "-y", "update"]
-
- def _refreshUpdateList(self):
- """
- Update the list of packages to be updated in the system.
- """
- try:
- kimchiLock.acquire()
- self._pkgs = get_yum_packages_list_update()
- except Exception, e:
- raise OperationFailed('KCHPKGUPD0003E', {'err': str(e)})
- finally:
- kimchiLock.release()
-
- def getPackagesList(self):
- """
- Return a list of package's dictionaries. Each dictionary contains the
- information about a package, in the format:
- package = {'package_name': <string>, 'version': <string>,
- 'arch': <string>, 'repository': <string>}
- """
- self._refreshUpdateList()
- pkg_list = []
- for pkg in self._pkgs:
- package = {'package_name': pkg.name, 'version': pkg.version,
- 'arch': pkg.arch, 'repository': pkg.ui_from_repo}
- pkg_list.append(package)
- return pkg_list
-
-
-class AptUpdate(object):
- """
- Class to represent and operate with APT software update system.
- It's loaded only on those systems listed at APT_DISTROS and loads necessary
- modules in runtime.
- """
- def __init__(self):
- self._pkgs = {}
- self.pkg_lock = getattr(__import__('apt_pkg'), 'SystemLock')
- self.update_cmd = ['apt-get', 'upgrade', '-y']
-
- def _refreshUpdateList(self):
- """
- Update the list of packages to be updated in the system.
- """
- apt_cache = getattr(__import__('apt'), 'Cache')()
- try:
- with self.pkg_lock():
- apt_cache.update()
- apt_cache.upgrade()
- self._pkgs = apt_cache.get_changes()
- except Exception, e:
- kimchiLock.release()
- raise OperationFailed('KCHPKGUPD0003E', {'err': e.message})
-
- def getPackagesList(self):
- """
- Return a list of package's dictionaries. Each dictionary contains the
- information about a package, in the format
- package = {'package_name': <string>, 'version': <string>,
- 'arch': <string>, 'repository': <string>}
- """
- kimchiLock.acquire()
- self._refreshUpdateList()
- kimchiLock.release()
- pkg_list = []
- for pkg in self._pkgs:
- package = {'package_name': pkg.shortname,
- 'version': pkg.candidate.version,
- 'arch': pkg._pkg.architecture,
- 'repository': pkg.candidate.origins[0].label}
- pkg_list.append(package)
-
- return pkg_list
-
-
-class ZypperUpdate(object):
- """
- Class to represent and operate with Zypper software update system.
- It's loaded only on those systems listed at ZYPPER_DISTROS and loads
- necessary modules in runtime.
- """
- def __init__(self):
- self._pkgs = {}
- self.update_cmd = ["zypper", "--non-interactive", "update",
- "--auto-agree-with-licenses"]
-
- def _refreshUpdateList(self):
- """
- Update the list of packages to be updated in the system.
- """
- self._pkgs = []
- cmd = ["zypper", "list-updates"]
- (stdout, stderr, returncode) = run_command(cmd)
-
- if len(stderr) > 0:
- raise OperationFailed('KCHPKGUPD0003E', {'err': stderr})
-
- for line in stdout.split('\n'):
- if line.find('v |') >= 0:
- info = line.split(' | ')
- package = {'package_name': info[2], 'version': info[4],
- 'arch': info[5], 'repository': info[1]}
- self._pkgs.append(package)
-
- def getPackagesList(self):
- """
- Return a list of package's dictionaries. Each dictionary contains the
- information about a package, in the format
- package = {'package_name': <string>, 'version': <string>,
- 'arch': <string>, 'repository': <string>}
- """
- kimchiLock.acquire()
- self._refreshUpdateList()
- kimchiLock.release()
- return self._pkgs
diff --git a/plugins/kimchi/tests/test_authorization.py b/plugins/kimchi/tests/test_authorization.py
index 53aa847..0976622 100644
--- a/plugins/kimchi/tests/test_authorization.py
+++ b/plugins/kimchi/tests/test_authorization.py
@@ -77,12 +77,6 @@ class AuthorizationTests(unittest.TestCase):
resp = self.request('/plugins/kimchi/host/shutdown', '{}', 'POST')
self.assertEquals(403, resp.status)
- # Non-root users can not get or debug reports
- resp = self.request('/plugins/kimchi/debugreports', '{}', 'GET')
- self.assertEquals(403, resp.status)
- resp = self.request('/plugins/kimchi/debugreports', '{}', 'POST')
- self.assertEquals(403, resp.status)
-
# Non-root users can not create or delete network (only get)
resp = self.request('/plugins/kimchi/networks', '{}', 'GET')
self.assertEquals(200, resp.status)
diff --git a/plugins/kimchi/tests/test_config.py.in b/plugins/kimchi/tests/test_config.py.in
index 6bca3df..c37069f 100644
--- a/plugins/kimchi/tests/test_config.py.in
+++ b/plugins/kimchi/tests/test_config.py.in
@@ -22,7 +22,6 @@ from cherrypy.lib.reprconf import Parser
from wok.config import Paths
-from wok.plugins.kimchi.config import get_debugreports_path
from wok.plugins.kimchi.config import get_screenshot_path
from wok.plugins.kimchi.config import KimchiPaths
@@ -167,13 +166,6 @@ class ConfigTests(unittest.TestCase):
'tools.staticdir.dir': get_screenshot_path(),
'tools.nocache.on': False
},
- '/data/debugreports': {
- 'tools.staticdir.on': True,
- 'tools.staticdir.dir': get_debugreports_path(),
- 'tools.nocache.on': False,
- 'tools.wokauth.on': True,
- 'tools.staticdir.content_types': {'xz': 'application/x-xz'}
- },
'/favicon.ico': {
'tools.staticfile.on': True,
'tools.staticfile.filename':
diff --git a/plugins/kimchi/tests/test_host.py b/plugins/kimchi/tests/test_host.py
deleted file mode 100644
index e2aa196..0000000
--- a/plugins/kimchi/tests/test_host.py
+++ /dev/null
@@ -1,200 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import json
-import os
-import platform
-import psutil
-import tempfile
-import time
-import unittest
-from functools import partial
-
-from wok.plugins.kimchi.mockmodel import MockModel
-
-from utils import get_free_port, patch_auth, request, run_server, wait_task
-
-
-test_server = None
-model = None
-host = None
-ssl_port = None
-tmpfile = None
-
-
-def setUpModule():
- global test_server, model, host, ssl_port, tmpfile
-
- patch_auth()
- tmpfile = tempfile.mktemp()
- model = MockModel(tmpfile)
- host = '127.0.0.1'
- port = get_free_port('http')
- ssl_port = get_free_port('https')
- cherrypy_port = get_free_port('cherrypy_port')
- test_server = run_server(host, port, ssl_port, test_mode=True,
- cherrypy_port=cherrypy_port, model=model)
-
-
-def tearDownModule():
- test_server.stop()
- os.unlink(tmpfile)
-
-
-class HostTests(unittest.TestCase):
- def setUp(self):
- self.request = partial(request, host, ssl_port)
-
- def test_hostinfo(self):
- resp = self.request('/plugins/kimchi/host').read()
- info = json.loads(resp)
- keys = ['os_distro', 'os_version', 'os_codename', 'cpu_model',
- 'memory', 'cpus']
- self.assertEquals(sorted(keys), sorted(info.keys()))
-
- distro, version, codename = platform.linux_distribution()
- self.assertEquals(distro, info['os_distro'])
- self.assertEquals(version, info['os_version'])
- self.assertEquals(unicode(codename, "utf-8"), info['os_codename'])
- self.assertEquals(psutil.TOTAL_PHYMEM, info['memory'])
-
- def test_hoststats(self):
- time.sleep(1)
- stats_keys = ['cpu_utilization', 'memory', 'disk_read_rate',
- 'disk_write_rate', 'net_recv_rate', 'net_sent_rate']
- resp = self.request('/plugins/kimchi/host/stats').read()
- stats = json.loads(resp)
- self.assertEquals(sorted(stats_keys), sorted(stats.keys()))
-
- cpu_utilization = stats['cpu_utilization']
- self.assertIsInstance(cpu_utilization, float)
- self.assertGreaterEqual(cpu_utilization, 0.0)
- self.assertTrue(cpu_utilization <= 100.0)
-
- memory_stats = stats['memory']
- self.assertIn('total', memory_stats)
- self.assertIn('free', memory_stats)
- self.assertIn('cached', memory_stats)
- self.assertIn('buffers', memory_stats)
- self.assertIn('avail', memory_stats)
-
- resp = self.request('/plugins/kimchi/host/stats/history').read()
- history = json.loads(resp)
- self.assertEquals(sorted(stats_keys), sorted(history.keys()))
-
- def test_host_actions(self):
- def _task_lookup(taskid):
- return json.loads(self.request('/plugins/kimchi/tasks/%s' %
- taskid).read())
-
- resp = self.request('/plugins/kimchi/host/shutdown', '{}', 'POST')
- self.assertEquals(200, resp.status)
- resp = self.request('/plugins/kimchi/host/reboot', '{}', 'POST')
- self.assertEquals(200, resp.status)
-
- # Test system update
- resp = self.request('/plugins/kimchi/host/packagesupdate', None, 'GET')
- pkgs = json.loads(resp.read())
- self.assertEquals(3, len(pkgs))
-
- pkg_keys = ['package_name', 'repository', 'arch', 'version']
- for p in pkgs:
- name = p['package_name']
- resp = self.request('/plugins/kimchi/host/packagesupdate/' + name,
- None, 'GET')
- info = json.loads(resp.read())
- self.assertEquals(sorted(pkg_keys), sorted(info.keys()))
-
- resp = self.request('/plugins/kimchi/host/swupdate', '{}', 'POST')
- task = json.loads(resp.read())
- task_params = [u'id', u'message', u'status', u'target_uri']
- self.assertEquals(sorted(task_params), sorted(task.keys()))
-
- resp = self.request('/plugins/kimchi/tasks/' + task[u'id'], None, 'GET')
- task_info = json.loads(resp.read())
- self.assertEquals(task_info['status'], 'running')
- wait_task(_task_lookup, task_info['id'])
- resp = self.request('/plugins/kimchi/tasks/' + task[u'id'], None, 'GET')
- task_info = json.loads(resp.read())
- self.assertEquals(task_info['status'], 'finished')
- self.assertIn(u'All packages updated', task_info['message'])
- pkgs = model.packagesupdate_get_list()
- self.assertEquals(0, len(pkgs))
-
- def test_host_partitions(self):
- resp = self.request('/plugins/kimchi/host/partitions')
- self.assertEquals(200, resp.status)
- partitions = json.loads(resp.read())
-
- keys = ['name', 'path', 'type', 'fstype', 'size', 'mountpoint',
- 'available']
- for item in partitions:
- resp = self.request('/plugins/kimchi/host/partitions/%s' %
- item['name'])
- info = json.loads(resp.read())
- self.assertEquals(sorted(info.keys()), sorted(keys))
-
- def test_host_devices(self):
- def asset_devices_type(devices, dev_type):
- for dev in devices:
- self.assertEquals(dev['device_type'], dev_type)
-
- resp = self.request('/plugins/kimchi/host/devices?_cap=scsi_host')
- nodedevs = json.loads(resp.read())
- # Mockmodel brings 3 preconfigured scsi fc_host
- self.assertEquals(3, len(nodedevs))
-
- nodedev = json.loads(self.request(
- '/plugins/kimchi/host/devices/scsi_host2').read())
- # Mockmodel generates random wwpn and wwnn
- self.assertEquals('scsi_host2', nodedev['name'])
- self.assertEquals('fc_host', nodedev['adapter']['type'])
- self.assertEquals(16, len(nodedev['adapter']['wwpn']))
- self.assertEquals(16, len(nodedev['adapter']['wwnn']))
-
- devs = json.loads(self.request('/plugins/kimchi/host/devices').read())
- dev_names = [dev['name'] for dev in devs]
- for dev_type in ('pci', 'usb_device', 'scsi'):
- resp = self.request('/plugins/kimchi/host/devices?_cap=%s' %
- dev_type)
- devsByType = json.loads(resp.read())
- names = [dev['name'] for dev in devsByType]
- self.assertTrue(set(names) <= set(dev_names))
- asset_devices_type(devsByType, dev_type)
-
- resp = self.request('/plugins/kimchi/host/devices?_passthrough=true')
- passthru_devs = [dev['name'] for dev in json.loads(resp.read())]
- self.assertTrue(set(passthru_devs) <= set(dev_names))
-
- for dev_type in ('pci', 'usb_device', 'scsi'):
- resp = self.request(
- '/plugins/kimchi/host/devices?_cap=%s&_passthrough=true' %
- dev_type)
- filteredDevs = json.loads(resp.read())
- filteredNames = [dev['name'] for dev in filteredDevs]
- self.assertTrue(set(filteredNames) <= set(dev_names))
- asset_devices_type(filteredDevs, dev_type)
-
- for dev in passthru_devs:
- resp = self.request(
- '/plugins/kimchi/host/devices?_passthrough_affected_by=%s' %
- dev)
- affected_devs = [dev['name'] for dev in json.loads(resp.read())]
- self.assertTrue(set(affected_devs) <= set(dev_names))
diff --git a/plugins/kimchi/tests/test_model.py b/plugins/kimchi/tests/test_model.py
index c70e4fb..3e95b58 100644
--- a/plugins/kimchi/tests/test_model.py
+++ b/plugins/kimchi/tests/test_model.py
@@ -943,54 +943,6 @@ class ModelTests(unittest.TestCase):
self.assertTrue('kimchi-vm' in vms)
- @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
- def test_debug_reports(self):
- inst = model.Model('test:///default',
- objstore_loc=self.tmp_store)
-
- if not inst.capabilities_lookup()['system_report_tool']:
- raise unittest.SkipTest("Without debug report tool")
-
- try:
- timeout = int(os.environ['TEST_REPORT_TIMEOUT'])
- except (ValueError, KeyError):
- timeout = 120
-
- namePrefix = 'unitTestReport'
- # sosreport always deletes unsual letters like '-' and '_' in the
- # generated report file name.
- uuidstr = str(uuid.uuid4()).translate(None, "-_")
- reportName = namePrefix + uuidstr
- try:
- inst.debugreport_delete(namePrefix + '*')
- except NotFoundError:
- pass
- with RollbackContext() as rollback:
- report_list = inst.debugreports_get_list()
- self.assertFalse(reportName in report_list)
- try:
- tmp_name = reportName + "_1"
- task = inst.debugreports_create({'name': reportName})
- rollback.prependDefer(inst.debugreport_delete, tmp_name)
- taskid = task['id']
- inst.task_wait(taskid, timeout)
- self.assertEquals('finished',
- inst.task_lookup(taskid)['status'],
- "It is not necessary an error. "
- "You may need to increase the "
- "timeout number by "
- "TEST_REPORT_TIMEOUT=200 "
- "./run_tests.sh test_model")
- report_list = inst.debugreports_get_list()
- self.assertTrue(reportName in report_list)
- name = inst.debugreport_update(reportName, {'name': tmp_name})
- self.assertEquals(name, tmp_name)
- report_list = inst.debugreports_get_list()
- self.assertTrue(tmp_name in report_list)
- except OperationFailed, e:
- if 'debugreport tool not found' not in e.message:
- raise e
-
def test_get_distros(self):
inst = model.Model('test:///default',
objstore_loc=self.tmp_store)
@@ -1029,195 +981,6 @@ class ModelTests(unittest.TestCase):
volumes = inst.storagevolumes_get_list(args['name'])
self.assertEquals(len(volumes), 2)
- def test_repository_create(self):
- inst = model.Model('test:///default',
- objstore_loc=self.tmp_store)
-
- yum_repos = [{'repo_id': 'fedora-fake',
- 'baseurl': 'http://www.fedora.org'},
- {'repo_id': 'fedora-updates-fake',
- 'config':
- {'mirrorlist': 'http://www.fedoraproject.org'}}]
-
- deb_repos = [{'baseurl': 'http://archive.ubuntu.com/ubuntu/',
- 'config': {'dist': 'quantal'}},
- {'baseurl': 'http://archive.ubuntu.com/ubuntu/',
- 'config': {'dist': 'quantal', 'comps': ['main']}}]
-
- yum_invalid_repos = []
- deb_invalid_repos = []
-
- for url in invalid_repository_urls:
- wrong_baseurl = {'repo_id': 'wrong-id', 'baseurl': url}
- wrong_mirrorlist = {'repo_id': 'wrong-id',
- 'baseurl': 'www.example.com',
- 'config': {'mirrorlist': url}}
- wrong_config_item = {
- 'repo_id': 'wrong-id',
- 'baseurl': 'www.example.com',
- 'config': {
- 'gpgkey': 'file:///tmp/KEY-fedora-updates-fake-19'}}
-
- yum_invalid_repos.append(wrong_baseurl)
- yum_invalid_repos.append(wrong_mirrorlist)
- yum_invalid_repos.append(wrong_config_item)
-
- wrong_baseurl['config'] = {'dist': 'tasty'}
- wrong_config = {'baseurl': deb_repos[0]['baseurl'],
- 'config': {
- 'unsupported_item': "a_unsupported_item"}}
- deb_invalid_repos.append(wrong_baseurl)
- deb_invalid_repos.append(wrong_config)
-
- repo_type = inst.capabilities_lookup()['repo_mngt_tool']
- if repo_type == 'yum':
- test_repos = yum_repos
- invalid_repos = yum_invalid_repos
- elif repo_type == 'deb':
- test_repos = deb_repos
- invalid_repos = deb_invalid_repos
- else:
- # repository management tool was not recognized by Kimchi
- # skip test case
- return
-
- # create repositories with invalid data
- for repo in invalid_repos:
- self.assertRaises(InvalidParameter, inst.repositories_create, repo)
-
- for repo in test_repos:
- system_host_repos = len(inst.repositories_get_list())
- repo_id = inst.repositories_create(repo)
- host_repos = inst.repositories_get_list()
- self.assertEquals(system_host_repos + 1, len(host_repos))
-
- repo_info = inst.repository_lookup(repo_id)
- self.assertEquals(repo_id, repo_info['repo_id'])
- self.assertEquals(True, repo_info.get('enabled'))
- self.assertEquals(repo.get('baseurl', ''),
- repo_info.get('baseurl'))
-
- original_config = repo.get('config', {})
- config_info = repo_info.get('config', {})
-
- if repo_type == 'yum':
- self.assertEquals(original_config.get('mirrorlist', ''),
- config_info.get('mirrorlist', ''))
- self.assertEquals(True, config_info['gpgcheck'])
- else:
- self.assertEquals(original_config['dist'], config_info['dist'])
- self.assertEquals(original_config.get('comps', []),
- config_info.get('comps', []))
-
- inst.repository_delete(repo_id)
- self.assertRaises(NotFoundError, inst.repository_lookup, repo_id)
-
- self.assertRaises(NotFoundError, inst.repository_lookup, 'google')
-
- def test_repository_update(self):
- inst = model.Model('test:///default',
- objstore_loc=self.tmp_store)
-
- yum_repo = {'repo_id': 'fedora-fake',
- 'baseurl': 'http://www.fedora.org'}
- yum_new_repo = {'baseurl': 'http://www.fedoraproject.org'}
-
- deb_repo = {'baseurl': 'http://archive.ubuntu.com/ubuntu/',
- 'config': {'dist': 'quantal'}}
- deb_new_repo = {'baseurl': 'http://br.archive.canonical.com/ubuntu/',
- 'config': {'dist': 'utopic'}}
-
- yum_invalid_repos = []
- deb_invalid_repos = []
-
- for url in invalid_repository_urls:
- wrong_baseurl = {'baseurl': url}
- wrong_mirrorlist = {'baseurl': 'www.example.com',
- 'config': {'mirrorlist': url}}
-
- yum_invalid_repos.append(wrong_baseurl)
- yum_invalid_repos.append(wrong_mirrorlist)
-
- wrong_baseurl['config'] = {'dist': 'tasty'}
- deb_invalid_repos.append(wrong_baseurl)
-
- repo_type = inst.capabilities_lookup()['repo_mngt_tool']
- if repo_type == 'yum':
- repo = yum_repo
- new_repo = yum_new_repo
- invalid_repos = yum_invalid_repos
- elif repo_type == 'deb':
- repo = deb_repo
- new_repo = deb_new_repo
- invalid_repos = deb_invalid_repos
- else:
- # repository management tool was not recognized by Kimchi
- # skip test case
- return
-
- system_host_repos = len(inst.repositories_get_list())
-
- with RollbackContext() as rollback:
- repo_id = inst.repositories_create(repo)
- rollback.prependDefer(inst.repository_delete, repo_id)
-
- host_repos = inst.repositories_get_list()
- self.assertEquals(system_host_repos + 1, len(host_repos))
-
- # update repositories with invalid data
- for tmp_repo in invalid_repos:
- self.assertRaises(InvalidParameter, inst.repository_update,
- repo_id, tmp_repo)
-
- new_repo_id = inst.repository_update(repo_id, new_repo)
- repo_info = inst.repository_lookup(new_repo_id)
-
- self.assertEquals(new_repo_id, repo_info['repo_id'])
- self.assertEquals(new_repo['baseurl'], repo_info['baseurl'])
- self.assertEquals(True, repo_info['enabled'])
- inst.repository_update(new_repo_id, repo)
-
- def test_repository_disable_enable(self):
- inst = model.Model('test:///default',
- objstore_loc=self.tmp_store)
-
- yum_repo = {'repo_id': 'fedora-fake',
- 'baseurl': 'http://www.fedora.org'}
- deb_repo = {'baseurl': 'http://archive.ubuntu.com/ubuntu/',
- 'config': {'dist': 'quantal'}}
-
- repo_type = inst.capabilities_lookup()['repo_mngt_tool']
- if repo_type == 'yum':
- repo = yum_repo
- elif repo_type == 'deb':
- repo = deb_repo
- else:
- # repository management tool was not recognized by Kimchi
- # skip test case
- return
-
- system_host_repos = len(inst.repositories_get_list())
-
- repo_id = inst.repositories_create(repo)
-
- host_repos = inst.repositories_get_list()
- self.assertEquals(system_host_repos + 1, len(host_repos))
-
- repo_info = inst.repository_lookup(repo_id)
- self.assertEquals(True, repo_info['enabled'])
-
- inst.repository_disable(repo_id)
- repo_info = inst.repository_lookup(repo_id)
- self.assertEquals(False, repo_info['enabled'])
-
- inst.repository_enable(repo_id)
- repo_info = inst.repository_lookup(repo_id)
- self.assertEquals(True, repo_info['enabled'])
-
- # remove files creates
- inst.repository_delete(repo_id)
-
-
class BaseModelTests(unittest.TestCase):
class FoosModel(object):
def __init__(self):
diff --git a/plugins/kimchi/tests/test_rest.py b/plugins/kimchi/tests/test_rest.py
index 1a1ae6c..75e4342 100644
--- a/plugins/kimchi/tests/test_rest.py
+++ b/plugins/kimchi/tests/test_rest.py
@@ -1127,53 +1127,6 @@ class RestTests(unittest.TestCase):
# Distro not found error
self.assertIn('KCHDISTRO0001E', distro.get('reason'))
- def test_debugreports(self):
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports')
- self.assertEquals(200, resp.status)
-
- def _report_delete(self, name):
- request(host, ssl_port, '/plugins/kimchi/debugreports/%s' % name, '{}', 'DELETE')
-
- def test_create_debugreport(self):
- req = json.dumps({'name': 'report1'})
- with RollbackContext() as rollback:
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports', req, 'POST')
- self.assertEquals(202, resp.status)
- task = json.loads(resp.read())
- # make sure the debugreport doesn't exist until the
- # the task is finished
- wait_task(self._task_lookup, task['id'])
- rollback.prependDefer(self._report_delete, 'report2')
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports/report1')
- debugreport = json.loads(resp.read())
- self.assertEquals("report1", debugreport['name'])
- self.assertEquals(200, resp.status)
- req = json.dumps({'name': 'report2'})
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports/report1',
- req, 'PUT')
- self.assertEquals(303, resp.status)
-
- def test_debugreport_download(self):
- req = json.dumps({'name': 'report1'})
- with RollbackContext() as rollback:
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports', req, 'POST')
- self.assertEquals(202, resp.status)
- task = json.loads(resp.read())
- # make sure the debugreport doesn't exist until the
- # the task is finished
- wait_task(self._task_lookup, task['id'], 20)
- rollback.prependDefer(self._report_delete, 'report1')
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports/report1')
- debugreport = json.loads(resp.read())
- self.assertEquals("report1", debugreport['name'])
- self.assertEquals(200, resp.status)
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports/report1/content')
- self.assertEquals(200, resp.status)
- resp = request(host, ssl_port, '/plugins/kimchi/debugreports/report1')
- debugre = json.loads(resp.read())
- resp = request(host, ssl_port, debugre['uri'])
- self.assertEquals(200, resp.status)
-
def test_repositories(self):
def verify_repo(t, res):
for field in ('repo_id', 'enabled', 'baseurl', 'config'):
diff --git a/plugins/kimchi/ui/config/tab-ext.xml b/plugins/kimchi/ui/config/tab-ext.xml
index ee88c88..48ec9ec 100644
--- a/plugins/kimchi/ui/config/tab-ext.xml
+++ b/plugins/kimchi/ui/config/tab-ext.xml
@@ -2,13 +2,6 @@
<tabs-ext>
<tab>
<access role="admin" mode="admin"/>
- <access role="user" mode="none"/>
-
- <title>Host</title>
- <path>plugins/kimchi/host.html</path>
- </tab>
- <tab>
- <access role="admin" mode="admin"/>
<access role="user" mode="byInstance"/>
<title>Guests</title>
diff --git a/plugins/kimchi/ui/css/theme-default/host.css b/plugins/kimchi/ui/css/theme-default/host.css
deleted file mode 100644
index a0cccb1..0000000
--- a/plugins/kimchi/ui/css/theme-default/host.css
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-.host-panel {
- font-size: 12px;
- margin-bottom: 100px;
-}
-
-.host-panel .logo-container, .host-panel .info-container,
-.host-panel .section-label, .host-panel .section-value {
- display: inline-block;
- vertical-align: top;
-}
-
-.host-panel .section-label {
- display: inline-block;
- margin-right: 1em;
- vertical-align: top;
-}
-
-.host-panel .logo {
- background: url("plugins/kimchi/images/icon-vm.png") no-repeat left top;
- height: 128px;
- width: 128px;
-}
-
-.host-panel .hostname {
- text-decoration: underline;
-}
-
-.host-panel .action-panel {
- margin-top: 2em;
- padding-left: 10px;
-}
-
-.host-panel .button-icon {
- background: url("../images/theme-default/host-icon-sprite.png") no-repeat
- left top;
- display: inline-block;
- height: 12px;
- width: 12px;
-}
-
-.host-panel .action-icon-stop {
- background-position: -14px 0;
-}
-
-.host-panel .action-icon-restart {
- background-position: -28px 0;
-}
-
-.host-panel .action-icon-download {
- background-position: -42px 0;
-}
-
-.host-panel .action-icon-connect {
- background-position: -56px 0;
-}
-
-.host-panel .action-icon-add {
- background-position: -70px 0;
-}
-
-.host-panel .action-icon-edit {
- background-position: -84px 0;
-}
-
-.host-panel .action-icon-remove {
- background-position: -98px 0;
-}
-
-.host-panel button:disabled .action-icon-start {
- background-position: 0 -14px;
-}
-
-.host-panel button:disabled .action-icon-stop {
- background-position: -14px -14px;
-}
-
-.host-panel button:disabled .action-icon-restart {
- background-position: -28px -14px;
-}
-
-.host-panel button:disabled .action-icon-download {
- background-position: -42px -14px;
-}
-
-.host-panel button:disabled .action-icon-connect {
- background-position: -56px -14px;
-}
-
-.host-panel button:disabled .action-icon-add {
- background-position: -70px -14px;
-}
-
-.host-panel button:disabled .action-icon-edit {
- background-position: -84px -14px;
-}
-
-.host-panel button:disabled .action-icon-remove {
- background-position: -98px -14px;
-}
-
-.host-panel .info-container {
- padding-top: 16px;
- width: 890px;
-}
-
-.host-panel .section-header {
- background: #EEE;
- border-radius: 5px;
- cursor: pointer;
- line-height: 2em;
- margin: 1em 0 1em;
- padding-left: 6px;
-}
-
-.host-panel .section-header:hover {
- background: #06f;
- color: white;
-}
-
-.host-panel .section-content {
- padding-left: 1em;
-}
-
-.host-panel .section-header .arrow {
- border-color: transparent;
- border-style: solid;
- display: inline-block;
- margin-right: 6px;
- width: 0;
-}
-
-.host-panel .section-header[aria-expanded="true"] .arrow {
- border-top-color: black;
- border-width: 8px 4px 0;
- border-bottom: none;
-}
-
-.host-panel .section-header[aria-expanded="true"]:hover .arrow {
- border-top-color: white;
-}
-
-.host-panel .section-header[aria-expanded="false"] .arrow {
- border-left-color: black;
- border-right: none;
- border-width: 4px 0 4px 8px;
-}
-
-.host-panel .section-header[aria-expanded="false"]:hover .arrow {
- border-left-color: white;
-}
-
-.host-panel .section-row {
- line-height: 1.6em;
- margin-bottom: 1em;
-}
-
-.host-panel .section-label {
- width: 100px;
-}
-
-#frequency-textbox {
- width: 20px;
-}
-
-#container-chart-cpu,
-#container-chart-memory,
-#container-chart-disk-io,
-#container-chart-network-io {
- border: 1px solid white;
- box-shadow: 2px 2px 2px gray, 2px -2px 2px gray, -2px -2px 2px gray, -2px
- 2px 2px gray;
- height: 100px;
- width: 500px;
-}
-
-#container-chart-disk-io .disk-write,
-#container-chart-network-io .network-sent {
- stroke: #f80;
-}
-
-/* Debug Report */
-.cell-text-wrapper {
- margin-left: 10px;
-}
-
-.host-panel #available-reports-grid {
- border-color: #ddd;
- height: 400px;
- width: 850px;
-}
-
-.host-panel select#available-reports-list {
- width: 300px;
-}
-
-.host-panel select#available-reports-list option {
- margin: .2em 1em;
-}
-
-.debug-report-name,
-.debug-report-time {
- width: 424px;
-}
-
-#id-debug-img {
- background: url(../images/theme-default/kimchi-loading15x15.gif) 12px
- center no-repeat;
- padding-left: 23px;
-}
-
-/* End of Debug Report */
-
-/* Software Updates */
-.host-panel #software-updates-grid {
- border-color: #ddd;
- height: 300px;
- width: 850px;
-}
-
-.software-update-name,
-.software-update-repos {
- width: 224px;
-}
-
-.software-update-version,
-.software-update-arch {
- width: 200px;
-}
-
-.host-panel #software-updates-progress-textarea {
- border: 1px solid #ddd;
- box-sizing: border-box;
- height: 100px;
- padding: .2em .5em;
- resize: vertical;
- width: 852px;
-}
-/* End of Software Updates */
-
-/* Repository */
-.host-panel #repositories-grid {
- border-color: #ddd;
- height: 200px;
- width: 850px;
-}
-
-.host-panel #repositories-grid .repository-id {
- width: 120px;
-}
-
-.host-panel #repositories-grid .repository-name {
- width: 640px;
-}
-
-.host-panel #repositories-grid .repository-enabled {
- width: 88px;
-}
-
-.host-panel #repositories-grid .repository-baseurl.deb {
- width: 400px;
-}
-
-.host-panel #repositories-grid .repository-enabled.deb {
- width: 100px;
-}
-
-.host-panel #repositories-grid .repository-gpgcheck.deb {
- width: 150px;
-}
-/* End of Repository */
diff --git a/plugins/kimchi/ui/css/theme-default/report-add.css b/plugins/kimchi/ui/css/theme-default/report-add.css
deleted file mode 100644
index 8020182..0000000
--- a/plugins/kimchi/ui/css/theme-default/report-add.css
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#report-add-window {
- height: 300px;
- width: 400px;
-}
-
-#report-add-window .field {
- font-size: 12px;
-}
-
-#report-name-textbox {
- margin: 0;
- width: 100%;
-}
-
-.info-add-debug-report {
- font-size: 12px;
- color: #999999;
- font-weight: lighter;
- font-family: 'Helvetica Neue', Helvetica, Arial;
-}
\ No newline at end of file
diff --git a/plugins/kimchi/ui/css/theme-default/report-rename.css b/plugins/kimchi/ui/css/theme-default/report-rename.css
deleted file mode 100644
index 2fb2698..0000000
--- a/plugins/kimchi/ui/css/theme-default/report-rename.css
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#report-rename-window {
- height: 300px;
- width: 400px;
-}
-
-#report-rename-window .field {
- font-size: 12px;
-}
-
-#report-name-textbox {
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- margin: 0;
- width: 100%;
-}
-
-.info-debug-report-rename {
- font-size: 12px;
- color: #999999;
- font-weight: lighter;
- font-family: 'Helvetica Neue', Helvetica, Arial;
-}
diff --git a/plugins/kimchi/ui/css/theme-default/repository-add.css b/plugins/kimchi/ui/css/theme-default/repository-add.css
deleted file mode 100644
index 4344569..0000000
--- a/plugins/kimchi/ui/css/theme-default/repository-add.css
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#repository-add-window {
- height: 500px;
- width: 1000px;
-}
-
-#repository-add-window span.required {
- color: red;
- padding-left: 5px;
- vertical-align: top;
-}
-
-#repository-add-window .textbox-wrapper input[type="text"] {
- box-sizing: border-box;
- width: 100%;
-}
-
-#repository-add-window .textbox-wrapper label {
- vertical-align: middle;
-}
-
-#isMirrorLabel {
- font-size: 14px;
- font-weight: lighter;
- font-family: 'Helvetica Neue', Helvetica, Arial;
-}
\ No newline at end of file
diff --git a/plugins/kimchi/ui/css/theme-default/repository-edit.css b/plugins/kimchi/ui/css/theme-default/repository-edit.css
deleted file mode 100644
index 383a7fe..0000000
--- a/plugins/kimchi/ui/css/theme-default/repository-edit.css
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-.yum div#repository-edit-window {
- height: 680px;
- width: 1000px;
-}
-
-.deb div#repository-edit-window {
- height: 480px;
- width: 1000px;
-}
-
-
-.repository-edit-fieldset {
- float: left;
- padding: 0 30px;
- width: 95%;
-}
-
-.repository-edit-wrapper-label, .repository-edit-wrapper-controls {
- display: inline-block;
- height: 30px;
- line-height: 30px;
- font-size: 14px;
- vertical-align: top;
-}
-
-.repository-edit-wrapper-label {
- margin-top: 10px;
- width: 150px;
-}
-
-.repository-edit-wrapper-controls label {
- vertical-align: middle;
-}
-
-.repository-edit-wrapper-controls {
- width: 100%;
-}
-
-.repository-edit-wrapper-controls input[type="text"] {
- font-size: 16px;
- height: 30px;
- line-height: 30px;
- padding: 0 10px;
- width: 100%;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- border: 1px solid #CCCCCC;
-}
-
-
-.repository-edit-wrapper-controls input[type="text"][readonly] {
- color: #bbb;
- background-color: #fafafa;
-}
-
-
-.repository-edit-wrapper-controls input[type="text"][disabled] {
- color: #bbb;
- background-color: #fafafa;
- cursor: not-allowed;
-}
-
-
-.deb .yum{
- display: none;
-}
-
-
-.yum .deb{
- display: none;
-}
diff --git a/plugins/kimchi/ui/js/src/kimchi.api.js b/plugins/kimchi/ui/js/src/kimchi.api.js
index 0ec3747..19fe1a6 100644
--- a/plugins/kimchi/ui/js/src/kimchi.api.js
+++ b/plugins/kimchi/ui/js/src/kimchi.api.js
@@ -70,37 +70,6 @@ var kimchi = {
},
/**
- * Get the dynamic host stats (usually used for monitoring).
- */
- getHostStats : function(suc, err) {
- wok.requestJSON({
- url : 'plugins/kimchi/host/stats',
- type : 'GET',
- contentType : 'application/json',
- headers: {'Wok-Robot': 'wok-robot'},
- dataType : 'json',
- success : suc,
- error: err
- });
- },
-
- /**
- * Get the historic host stats.
- */
- getHostStatsHistory : function(suc, err) {
- wok.requestJSON({
- url : 'plugins/kimchi/host/stats/history',
- type : 'GET',
- resend: true,
- contentType : 'application/json',
- headers: {'Wok-Robot': 'wok-robot'},
- dataType : 'json',
- success : suc,
- error: err
- });
- },
-
- /**
*
* Create a new Virtual Machine. Usage: kimchi.createVM({ name: 'MyUbuntu',
* template: '/templates/ubuntu_base' }, creationSuc, creationErr);
@@ -638,18 +607,6 @@ var kimchi = {
});
},
- listReports : function(suc, err) {
- wok.requestJSON({
- url : 'plugins/kimchi/debugreports',
- type : 'GET',
- contentType : 'application/json',
- dataType : 'json',
- resend: true,
- success : suc,
- error : err
- });
- },
-
trackTask : function(taskID, suc, err, progress) {
var onTaskResponse = function(result) {
var taskStatus = result['status'];
@@ -676,75 +633,6 @@ var kimchi = {
kimchi.trackingTasks.push(taskID);
},
- createReport: function(settings, suc, err, progress) {
- var onResponse = function(data) {
- taskID = data['id'];
- kimchi.trackTask(taskID, suc, err, progress);
- };
-
- wok.requestJSON({
- url : 'plugins/kimchi/debugreports',
- type : "POST",
- contentType : "application/json",
- data : JSON.stringify(settings),
- dataType : "json",
- success : onResponse,
- error : err
- });
- },
-
- renameReport : function(name, settings, suc, err) {
- $.ajax({
- url : "plugins/kimchi/debugreports/" + encodeURIComponent(name),
- type : 'PUT',
- contentType : 'application/json',
- data : JSON.stringify(settings),
- dataType : 'json',
- success: suc,
- error: err
- });
- },
-
- deleteReport: function(settings, suc, err) {
- var reportName = encodeURIComponent(settings['name']);
- wok.requestJSON({
- url : 'plugins/kimchi/debugreports/' + reportName,
- type : 'DELETE',
- contentType : 'application/json',
- dataType : 'json',
- success : suc,
- error : err
- });
- },
-
- downloadReport: function(settings, suc, err) {
- window.open(settings['file']);
- },
-
- shutdown: function(settings, suc, err) {
- var reboot = settings && settings['reboot'] === true;
- var url = 'plugins/kimchi/host/' + (reboot ? 'reboot' : 'shutdown');
- wok.requestJSON({
- url : url,
- type : 'POST',
- contentType : 'application/json',
- dataType : 'json',
- success : suc,
- error : err
- });
- },
-
- listHostPartitions : function(suc, err) {
- wok.requestJSON({
- url : 'plugins/kimchi/host/partitions',
- type : 'GET',
- contentType : 'application/json',
- dataType : 'json',
- success : suc,
- error : err
- });
- },
-
getStorageServers: function(type, suc, err) {
var url = 'plugins/kimchi/storageservers?_target_type=' + type;
wok.requestJSON({
@@ -872,131 +760,6 @@ var kimchi = {
});
},
- listSoftwareUpdates : function(suc, err) {
- wok.requestJSON({
- url : 'plugins/kimchi/host/packagesupdate',
- type : 'GET',
- contentType : 'application/json',
- dataType : 'json',
- resend: true,
- success : suc,
- error : err
- });
- },
-
- updateSoftware : function(suc, err, progress) {
- var taskID = -1;
- var onResponse = function(data) {
- taskID = data['id'];
- trackTask();
- };
-
- var trackTask = function() {
- kimchi.getTask(taskID, onTaskResponse, err);
- };
-
- var onTaskResponse = function(result) {
- var taskStatus = result['status'];
- switch(taskStatus) {
- case 'running':
- progress && progress(result);
- setTimeout(function() {
- trackTask();
- }, 200);
- break;
- case 'finished':
- case 'failed':
- suc(result);
- break;
- default:
- break;
- }
- };
-
- wok.requestJSON({
- url : 'plugins/kimchi/host/swupdate',
- type : "POST",
- contentType : "application/json",
- dataType : "json",
- success : onResponse,
- error : err
- });
- },
-
- createRepository : function(settings, suc, err) {
- wok.requestJSON({
- url : "plugins/kimchi/host/repositories",
- type : "POST",
- contentType : "application/json",
- data : JSON.stringify(settings),
- dataType : "json",
- success: suc,
- error: err
- });
- },
-
- retrieveRepository : function(repository, suc, err) {
- var reposID = encodeURIComponent(repository);
- wok.requestJSON({
- url : "plugins/kimchi/host/repositories/" + reposID,
- type : 'GET',
- contentType : 'application/json',
- dataType : 'json',
- success : suc,
- error : err
- });
- },
-
- updateRepository : function(name, settings, suc, err) {
- var reposID = encodeURIComponent(name);
- $.ajax({
- url : "plugins/kimchi/host/repositories/" + reposID,
- type : 'PUT',
- contentType : 'application/json',
- data : JSON.stringify(settings),
- dataType : 'json',
- success : suc,
- error : err
- });
- },
-
- enableRepository : function(name, enable, suc, err) {
- var reposID = encodeURIComponent(name);
- $.ajax({
- url : "plugins/kimchi/host/repositories/" + reposID +
- '/' + (enable === true ? 'enable' : 'disable'),
- type : 'POST',
- contentType : 'application/json',
- dataType : 'json',
- success : suc,
- error : err
- });
- },
-
- deleteRepository : function(repository, suc, err) {
- var reposID = encodeURIComponent(repository);
- wok.requestJSON({
- url : 'plugins/kimchi/host/repositories/' + reposID,
- type : 'DELETE',
- contentType : 'application/json',
- dataType : 'json',
- success : suc,
- error : err
- });
- },
-
- listRepositories : function(suc, err) {
- wok.requestJSON({
- url : 'plugins/kimchi/host/repositories',
- type : 'GET',
- contentType : 'application/json',
- dataType : 'json',
- resend: true,
- success : suc,
- error : err
- });
- },
-
getHostFCDevices: function(suc, err) {
var url = 'plugins/kimchi/host/devices?_cap=fc_host';
wok.requestJSON({
@@ -1339,17 +1102,4 @@ var kimchi = {
});
},
- getCPUInfo : function(suc, err) {
- wok.requestJSON({
- url : 'plugins/kimchi/host/cpuinfo',
- type : 'GET',
- contentType : 'application/json',
- dataType : 'json',
- resend : true,
- success : suc,
- error : err ? err : function(data) {
- wok.message.error(data.responseJSON.reason);
- }
- });
- }
};
diff --git a/plugins/kimchi/ui/js/src/kimchi.host.js b/plugins/kimchi/ui/js/src/kimchi.host.js
deleted file mode 100644
index ab02333..0000000
--- a/plugins/kimchi/ui/js/src/kimchi.host.js
+++ /dev/null
@@ -1,858 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-kimchi.host={};
-
-kimchi.host_main = function() {
- var expand = function(header, toExpand) {
- var controlledNode = $(header).attr('aria-controls');
- $('#' + controlledNode)[toExpand ? 'removeClass' : 'addClass']('hidden');
- $(header).attr('aria-expanded', toExpand ? 'true' : 'false');
- };
-
- var repositoriesGrid = null;
- var initRepositoriesGrid = function(repo_type) {
- var gridFields=[];
- if (repo_type == "yum") {
- gridFields=[{
- name: 'repo_id',
- label: i18n['KCHREPO6004M'],
- 'class': 'repository-id'
- }, {
- name: 'config[repo_name]',
- label: i18n['KCHREPO6005M'],
- 'class': 'repository-name'
- }, {
- name: 'enabled',
- label: i18n['KCHREPO6009M'],
- 'class': 'repository-enabled'
- }];
- }
- else if (repo_type == "deb") {
- gridFields=[{
- name: 'baseurl',
- label: i18n['KCHREPO6006M'],
- makeTitle: true,
- 'class': 'repository-baseurl deb'
- }, {
- name: 'enabled',
- label: i18n['KCHREPO6009M'],
- 'class': 'repository-enabled deb'
- }, {
- name: 'config[dist]',
- label: "dist",
- 'class': 'repository-gpgcheck deb'
- }, {
- name: 'config[comps]',
- label: "comps",
- 'class': 'repository-gpgcheck deb'
- }];
- }
- else {
- gridFields=[{
- name: 'repo_id',
- label: i18n['KCHREPO6004M'],
- 'class': 'repository-id'
- }, {
- name: 'enabled',
- label: i18n['KCHREPO6009M'],
- 'class': 'repository-enabled'
- }, {
- name: 'baseurl',
- label: i18n['KCHREPO6006M'],
- makeTitle: true,
- 'class': 'repository-baseurl'
- }];
- }
- repositoriesGrid = new kimchi.widget.Grid({
- container: 'repositories-grid-container',
- id: 'repositories-grid',
- title: i18n['KCHREPO6003M'],
- toolbarButtons: [{
- id: 'repositories-grid-add-button',
- label: i18n['KCHREPO6012M'],
- onClick: function(event) {
- wok.window.open({url:'plugins/kimchi/repository-add.html',
- class: repo_type});
- }
- }, {
- id: 'repositories-grid-enable-button',
- label: i18n['KCHREPO6016M'],
- disabled: true,
- onClick: function(event) {
- var repository = repositoriesGrid.getSelected();
- if(!repository) {
- return;
- }
- var name = repository['repo_id'];
- var enable = !repository['enabled'];
- $(this).prop('disabled', true);
- kimchi.enableRepository(name, enable, function() {
- wok.topic('kimchi/repositoryUpdated').publish();
- });
- }
- }, {
- id: 'repositories-grid-edit-button',
- label: i18n['KCHREPO6013M'],
- disabled: true,
- onClick: function(event) {
- var repository = repositoriesGrid.getSelected();
- if(!repository) {
- return;
- }
- kimchi.selectedRepository = repository['repo_id'];
- wok.window.open({url:'plugins/kimchi/repository-edit.html',
- class: repo_type});
- }
- }, {
- id: 'repositories-grid-remove-button',
- label: i18n['KCHREPO6014M'],
- disabled: true,
- onClick: function(event) {
- var repository = repositoriesGrid.getSelected();
- if(!repository) {
- return;
- }
-
- var settings = {
- title : i18n['KCHREPO6001M'],
- content : i18n['KCHREPO6002M'],
- confirm : i18n['KCHAPI6004M'],
- cancel : i18n['KCHAPI6003M']
- };
-
- wok.confirm(settings, function() {
- kimchi.deleteRepository(
- repository['repo_id'],
- function(result) {
- wok.topic('kimchi/repositoryDeleted').publish(result);
- }, function(error) {
- }
- );
- });
- }
- }],
- onRowSelected: function(row) {
- var repository = repositoriesGrid.getSelected();
- if(!repository) {
- return;
- }
- $('#repositories-grid-remove-button').prop('disabled', false);
- $('#repositories-grid-edit-button').prop('disabled', false);
- var enabled = repository['enabled'];
- $('#repositories-grid-enable-button')
- .text(i18n[enabled ? 'KCHREPO6017M' : 'KCHREPO6016M'])
- .prop('disabled', false);
- },
- frozenFields: [],
- fields: gridFields,
- data: listRepositories
- });
- };
-
- var listRepositories = function(gridCallback) {
- kimchi.listRepositories(function(repositories) {
- if($.isFunction(gridCallback)) {
- gridCallback(repositories);
- }
- else {
- if(repositoriesGrid) {
- repositoriesGrid.setData(repositories);
- }
- else {
- initRepositoriesGrid();
- repositoriesGrid.setData(repositories);
- }
- }
- },
- function(error) {
- var message = error && error['responseJSON'] && error['responseJSON']['reason'];
-
- if($.isFunction(gridCallback)) {
- gridCallback([]);
- }
- repositoriesGrid &&
- repositoriesGrid.showMessage(message || i18n['KCHUPD6008M']);
- });
-
- $('#repositories-grid-remove-button').prop('disabled', true);
- $('#repositories-grid-edit-button').prop('disabled', true);
- $('#repositories-grid-enable-button').prop('disabled', true);
- };
-
- var softwareUpdatesGridID = 'software-updates-grid';
- var softwareUpdatesGrid = null;
- var progressAreaID = 'software-updates-progress-textarea';
- var reloadProgressArea = function(result) {
- var progressArea = $('#' + progressAreaID)[0];
- $(progressArea).text(result['message']);
- var scrollTop = $(progressArea).prop('scrollHeight');
- $(progressArea).prop('scrollTop', scrollTop);
- };
-
- var initSoftwareUpdatesGrid = function(softwareUpdates) {
- softwareUpdatesGrid = new kimchi.widget.Grid({
- container: 'software-updates-grid-container',
- id: softwareUpdatesGridID,
- title: i18n['KCHUPD6001M'],
- rowSelection: 'disabled',
- toolbarButtons: [{
- id: softwareUpdatesGridID + '-update-button',
- label: i18n['KCHUPD6006M'],
- disabled: true,
- onClick: function(event) {
- var updateButton = $(this);
- var progressArea = $('#' + progressAreaID)[0];
- $('#software-updates-progress-container').removeClass('hidden');
- $(progressArea).text('');
- !wok.isElementInViewport(progressArea) &&
- progressArea.scrollIntoView();
- $(updateButton).text(i18n['KCHUPD6007M']).prop('disabled', true);
-
- kimchi.updateSoftware(function(result) {
- reloadProgressArea(result);
- $(updateButton).text(i18n['KCHUPD6006M']).prop('disabled', false);
- wok.topic('kimchi/softwareUpdated').publish({
- result: result
- });
- }, function(error) {
- var message = error && error['responseJSON'] && error['responseJSON']['reason'];
- wok.message.error(message || i18n['KCHUPD6009M']);
- $(updateButton).text(i18n['KCHUPD6006M']).prop('disabled', false);
- }, reloadProgressArea);
- }
- }],
- frozenFields: [],
- fields: [{
- name: 'package_name',
- label: i18n['KCHUPD6002M'],
- 'class': 'software-update-name'
- }, {
- name: 'version',
- label: i18n['KCHUPD6003M'],
- 'class': 'software-update-version'
- }, {
- name: 'arch',
- label: i18n['KCHUPD6004M'],
- 'class': 'software-update-arch'
- }, {
- name: 'repository',
- label: i18n['KCHUPD6005M'],
- 'class': 'software-update-repos'
- }],
- data: listSoftwareUpdates
- });
- };
-
- var listSoftwareUpdates = function(gridCallback) {
- kimchi.listSoftwareUpdates(function(softwareUpdates) {
- if($.isFunction(gridCallback)) {
- gridCallback(softwareUpdates);
- }
- else {
- if(softwareUpdatesGrid) {
- softwareUpdatesGrid.setData(softwareUpdates);
- }
- else {
- initSoftwareUpdatesGrid(softwareUpdates);
- }
- }
-
- var updateButton = $('#' + softwareUpdatesGridID + '-update-button');
- $(updateButton).prop('disabled', softwareUpdates.length === 0);
- }, function(error) {
- var message = error && error['responseJSON'] && error['responseJSON']['reason'];
- if($.isFunction(gridCallback)) {
- gridCallback([]);
- }
- softwareUpdatesGrid &&
- softwareUpdatesGrid.showMessage(message || i18n['KCHUPD6008M']);
- });
- };
-
- var reportGridID = 'available-reports-grid';
- var reportGrid = null;
- var enableReportButtons = function(toEnable) {
- var buttonID = '#{grid}-{btn}-button';
- $.each(['rename', 'remove', 'download'], function(i, n) {
- $(wok.substitute(buttonID, {
- grid: reportGridID,
- btn: n
- })).prop('disabled', !toEnable);
- });
- };
- var initReportGrid = function(reports) {
- reportGrid = new kimchi.widget.Grid({
- container: 'available-reports-grid-container',
- id: reportGridID,
- title: i18n['KCHDR6002M'],
- toolbarButtons: [{
- id: reportGridID + '-generate-button',
- label: i18n['KCHDR6006M'],
- onClick: function(event) {
- wok.window.open('plugins/kimchi/report-add.html');
- }
- }, {
- id: reportGridID + '-rename-button',
- label: i18n['KCHDR6008M'],
- disabled: true,
- onClick: function(event) {
- var report = reportGrid.getSelected();
- if(!report) {
- return;
- }
-
- kimchi.selectedReport = report['name'];
- wok.window.open('plugins/kimchi/report-rename.html');
- }
- }, {
- id: reportGridID + '-remove-button',
- label: i18n['KCHDR6009M'],
- disabled: true,
- onClick: function(event) {
- var report = reportGrid.getSelected();
- if(!report) {
- return;
- }
-
- var settings = {
- title : i18n['KCHAPI6004M'],
- content : i18n['KCHDR6001M'],
- confirm : i18n['KCHAPI6002M'],
- cancel : i18n['KCHAPI6003M']
- };
-
- wok.confirm(settings, function() {
- kimchi.deleteReport({
- name: report['name']
- }, function(result) {
- listDebugReports();
- }, function(error) {
- wok.message.error(error.responseJSON.reason);
- });
- });
- }
- }, {
- id: reportGridID + '-download-button',
- label: i18n['KCHDR6010M'],
- disabled: true,
- onClick: function(event) {
- var report = reportGrid.getSelected();
- if(!report) {
- return;
- }
-
- kimchi.downloadReport({
- file: report['uri']
- });
- }
- }],
- onRowSelected: function(row) {
- var report = reportGrid.getSelected();
- // Only enable report buttons if the selected line is not a
- // pending report
- if (report['time'] == i18n['KCHDR6007M']) {
- var gridElement = $('#'+ reportGridID);
- var row = $('tr:contains(' + report['name'] + ')', gridElement);
- enableReportButtons(false);
- row.attr('class', '');
- }
- else {
- enableReportButtons(true);
- }
- },
- frozenFields: [],
- fields: [{
- name: 'name',
- label: i18n['KCHDR6003M'],
- 'class': 'debug-report-name'
- }, {
- name: 'time',
- label: i18n['KCHDR6005M'],
- 'class': 'debug-report-time'
- }],
- data: reports
- });
- };
-
- var getPendingReports = function() {
- var reports = []
- var filter = 'status=running&target_uri=' + encodeURIComponent('^/plugins/kimchi/debugreports/*')
-
- kimchi.getTasksByFilter(filter, function(tasks) {
- for(var i = 0; i < tasks.length; i++) {
- reportName = tasks[i].target_uri.replace(/^\/plugins\/kimchi\/debugreports\//, '') || i18n['KCHDR6012M'];
- reports.push({'name': reportName, 'time': i18n['KCHDR6007M']})
-
- if(kimchi.trackingTasks.indexOf(tasks[i].id) >= 0) {
- continue;
- }
-
- kimchi.trackTask(tasks[i].id, function(result) {
- wok.topic('kimchi/debugReportAdded').publish();
- }, function(result) {
- // Error message from Async Task status
- if (result['message']) {
- var errText = result['message'];
- }
- // Error message from standard kimchi exception
- else {
- var errText = result['responseJSON']['reason'];
- }
- result && wok.message.error(errText);
- wok.topic('kimchi/debugReportAdded').publish();
- }, null);
- }
- }, null, true);
-
- return reports;
- };
-
- var listDebugReports = function() {
- kimchi.listReports(function(reports) {
- pendingReports = getPendingReports();
- allReports = pendingReports.concat(reports);
- $('#debug-report-section').removeClass('hidden');
-
- // Row selection will be cleared so disable buttons here
- enableReportButtons(false);
-
- if(reportGrid) {
- reportGrid.setData(allReports);
- }
- else {
- initReportGrid(allReports);
- }
-
- // Set id-debug-img to pending reports
- // It will display a loading icon
- var gridElement = $('#' + reportGridID);
- $.each($('td:contains(' + i18n['KCHDR6007M'] + ')', gridElement), function(index, row) {
- $(row).parent().addClass('no-hover');
- $(row).attr('id', 'id-debug-img');
- });
- }, function(error) {
- if(error['status'] == 403) {
- $('#debug-report-section').addClass('hidden');
- return;
- }
- $('#debug-report-section').removeClass('hidden');
- });
- };
-
- var shutdownButtonID = '#host-button-shutdown';
- var restartButtonID = '#host-button-restart';
- var shutdownHost = function(params) {
- var settings = {
- title : i18n['KCHAPI6004M'],
- content : i18n['KCHHOST6008M'],
- confirm : i18n['KCHAPI6002M'],
- cancel : i18n['KCHAPI6003M']
- };
-
- wok.confirm(settings, function() {
- kimchi.shutdown(params);
- $(shutdownButtonID).prop('disabled', true);
- $(restartButtonID).prop('disabled', true);
- // Check if there is any VM is running.
- kimchi.listVMs(function(vms) {
- for(var i = 0; i < vms.length; i++) {
- if(vms[i]['state'] === 'running') {
- wok.message.error.code('KCHHOST6001E');
- $(shutdownButtonID).prop('disabled', false);
- $(restartButtonID).prop('disabled', false);
- return;
- }
- }
-
- });
- }, function() {
- });
- };
-
- var initPage = function() {
- $('#host-info-container .section-header').each(function(i, header) {
- $('<span class="arrow"></span>').prependTo(header);
- var toExpand = $(header).attr('aria-expanded') !== 'false';
- expand(header, toExpand);
- });
-
- $('#host-info-container').on('click', '.section-header', function(event) {
- var toExpand = $(this).attr('aria-expanded') === 'false';
- expand(this, toExpand);
- });
-
- $('#host-button-shutdown').on('click', function(event) {
- shutdownHost(null);
- });
-
- $('#host-button-restart').on('click', function(event) {
- shutdownHost({
- reboot: true
- });
- });
-
- var setupUI = function() {
- if (kimchi.capabilities == undefined) {
- setTimeout(setupUI, 2000);
- return;
- }
-
- if((kimchi.capabilities['repo_mngt_tool']) && (kimchi.capabilities['repo_mngt_tool']!="None")) {
- initRepositoriesGrid(kimchi.capabilities['repo_mngt_tool']);
- $('#repositories-section').switchClass('hidden', kimchi.capabilities['repo_mngt_tool']);
- wok.topic('kimchi/repositoryAdded')
- .subscribe(listRepositories);
- wok.topic('kimchi/repositoryUpdated')
- .subscribe(listRepositories);
- wok.topic('kimchi/repositoryDeleted')
- .subscribe(listRepositories);
- }
-
- if(kimchi.capabilities['update_tool']) {
- $('#software-update-section').removeClass('hidden');
- initSoftwareUpdatesGrid();
- wok.topic('kimchi/softwareUpdated')
- .subscribe(listSoftwareUpdates);
- $('#software-updates-progress-container').accordion({
- collapsible: true
- });
- }
-
- if(kimchi.capabilities['system_report_tool']) {
- listDebugReports();
- wok.topic('kimchi/debugReportAdded')
- .subscribe(listDebugReports);
- wok.topic('kimchi/debugReportRenamed')
- .subscribe(listDebugReports);
- }
- };
- setupUI();
- };
-
- kimchi.getHost(function(data) {
- var htmlTmpl = $('#host-tmpl').html();
- data['logo'] = data['logo'] || '';
- data['memory'] = wok.formatMeasurement(data['memory'], {
- fixed: 2
- });
- var templated = wok.substitute(htmlTmpl, data);
- $('#host-content-container').html(templated);
-
- initPage();
- initTracker();
- });
-
- var StatsMgr = function() {
- var statsArray = {
- cpu: {
- u: {
- type: 'percent',
- legend: i18n['KCHHOST6002M'],
- points: []
- }
- },
- memory: {
- u: {
- type: 'value',
- base: 2,
- fixed: 2,
- legend: i18n['KCHHOST6003M'],
- points: []
- }
- },
- diskIO: {
- r: {
- type: 'value',
- base: 2,
- fixed: 2,
- unit: 'B/s',
- legend: i18n['KCHHOST6004M'],
- points: []
- },
- w: {
- type: 'value',
- base: 2,
- fixed: 2,
- unit: 'B/s',
- legend: i18n['KCHHOST6005M'],
- 'class': 'disk-write',
- points: []
- }
- },
- networkIO: {
- r: {
- type: 'value',
- base: 2,
- fixed: 2,
- unit: 'B/s',
- legend: i18n['KCHHOST6006M'],
- points: []
- },
- s: {
- type: 'value',
- base: 2,
- fixed: 2,
- unit: 'B/s',
- legend: i18n['KCHHOST6007M'],
- 'class': 'network-sent',
- points: []
- }
- }
- };
- var SIZE = 20;
- var cursor = SIZE;
-
- var add = function(stats) {
- for(var key in stats) {
- var item = stats[key];
- for(var metrics in item) {
- var value = item[metrics]['v'];
- var max = item[metrics]['max'];
- var unifiedMetrics = statsArray[key][metrics];
- var ps = unifiedMetrics['points'];
- if(!Array.isArray(value)){
- ps.push(value);
- if(ps.length > SIZE + 1) {
- ps.shift();
- }
- }
- else{
- ps=ps.concat(value);
- ps.splice(0, ps.length-SIZE-1);
- unifiedMetrics['points']=ps;
- }
- if(max !== undefined) {
- unifiedMetrics['max'] = max;
- }
- else {
- if(unifiedMetrics['type'] !== 'value') {
- continue;
- }
- max = -Infinity;
- $.each(ps, function(i, value) {
- if(value > max) {
- max = value;
- }
- });
- if(max === 0) {
- ++max;
- }
- max *= 1.1;
- unifiedMetrics['max'] = max;
- }
- }
- }
- cursor++;
- };
-
- var get = function(which) {
- var stats = statsArray[which];
- var lines = [];
- for(var k in stats) {
- var obj = stats[k];
- var line = {
- type: obj['type'],
- base: obj['base'],
- unit: obj['unit'],
- fixed: obj['fixed'],
- legend: obj['legend']
- };
- if(obj['max']) {
- line['max'] = obj['max'];
- }
- if(obj['class']) {
- line['class'] = obj['class'];
- }
- var ps = obj['points'];
- var numStats = ps.length;
- var unifiedPoints = [];
- $.each(ps, function(i, value) {
- unifiedPoints.push({
- x: cursor - numStats + i,
- y: value
- });
- });
- line['points'] = unifiedPoints;
- lines.push(line);
- }
- return lines;
- };
-
- return {
- add: add,
- get: get
- };
- };
-
- var Tracker = function(charts) {
- var charts = charts;
- var timer = null;
- var statsPool = new StatsMgr();
- var setCharts = function(newCharts) {
- charts = newCharts;
- for(var key in charts) {
- var chart = charts[key];
- chart.updateUI(statsPool.get(key));
- }
- };
-
- var self = this;
-
- var UnifyStats = function(stats) {
- var result= {
- cpu: {
- u: {
- v: stats['cpu_utilization']
- }
- },
- memory: {
- u: {
- }
- },
- diskIO: {
- r: {
- v: stats['disk_read_rate']
- },
- w: {
- v: stats['disk_write_rate']
- }
- },
- networkIO: {
- r: {
- v: stats['net_recv_rate']
- },
- s: {
- v: stats['net_sent_rate']
- }
- }
- };
- if(Array.isArray(stats['memory'])){
- result.memory.u['v']=[];
- result.memory.u['max']=-Infinity;
- for(var i=0;i<stats['memory'].length;i++){
- result.memory.u['v'].push(stats['memory'][i]['avail']);
- result.memory.u['max']=Math.max(result.memory.u['max'],stats['memory'][i]['total']);
- }
- }
- else {
- result.memory.u['v']=stats['memory']['avail'],
- result.memory.u['max']=stats['memory']['total']
- }
- return(result);
- };
-
-
- var statsCallback = function(stats) {
- var unifiedStats = UnifyStats(stats);
- statsPool.add(unifiedStats);
- for(var key in charts) {
- var chart = charts[key];
- chart.updateUI(statsPool.get(key));
- }
- timer = setTimeout(function() {
- continueTrack();
- }, 1000);
- };
-
- var track = function() {
- kimchi.getHostStatsHistory(statsCallback,
- function() {
- continueTrack();
- });
- };
-
- var continueTrack = function() {
- kimchi.getHostStats(statsCallback,
- function() {
- continueTrack();
- });
- };
-
- var destroy = function() {
- timer && clearTimeout(timer);
- timer = null;
- };
-
- return {
- setCharts: setCharts,
- start: track,
- stop: destroy
- };
- };
-
- var initTracker = function() {
- // TODO: Extend tabs with onUnload event to unregister timers.
- if(kimchi.hostTimer) {
- kimchi.hostTimer.stop();
- delete kimchi.hostTimer;
- }
-
- var trackedCharts = {
- cpu: new kimchi.widget.LineChart({
- id: 'chart-cpu',
- node: 'container-chart-cpu',
- type: 'percent'
- }),
- memory: new kimchi.widget.LineChart({
- id: 'chart-memory',
- node: 'container-chart-memory',
- type: 'value'
- }),
- diskIO: new kimchi.widget.LineChart({
- id: 'chart-disk-io',
- node: 'container-chart-disk-io',
- type: 'value'
- }),
- networkIO: new kimchi.widget.LineChart({
- id: 'chart-network-io',
- node: 'container-chart-network-io',
- type: 'value'
- })
- };
-
- if(kimchi.hostTimer) {
- kimchi.hostTimer.setCharts(trackedCharts);
- }
- else {
- kimchi.hostTimer = new Tracker(trackedCharts);
- kimchi.hostTimer.start();
- }
- };
-
- $('#host-root-container').on('remove', function() {
- if(kimchi.hostTimer) {
- kimchi.hostTimer.stop();
- delete kimchi.hostTimer;
- }
-
- repositoriesGrid && repositoriesGrid.destroy();
- wok.topic('kimchi/repositoryAdded')
- .unsubscribe(listRepositories);
- wok.topic('kimchi/repositoryUpdated')
- .unsubscribe(listRepositories);
- wok.topic('kimchi/repositoryDeleted')
- .unsubscribe(listRepositories);
-
- softwareUpdatesGrid && softwareUpdatesGrid.destroy();
- wok.topic('kimchi/softwareUpdated').unsubscribe(listSoftwareUpdates);
-
- reportGrid && reportGrid.destroy();
- wok.topic('kimchi/debugReportAdded').unsubscribe(listDebugReports);
- wok.topic('kimchi/debugReportRenamed').unsubscribe(listDebugReports);
- });
-};
diff --git a/plugins/kimchi/ui/js/src/kimchi.report_add_main.js b/plugins/kimchi/ui/js/src/kimchi.report_add_main.js
deleted file mode 100644
index 5f098d3..0000000
--- a/plugins/kimchi/ui/js/src/kimchi.report_add_main.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-kimchi.report_add_main = function() {
- var reportGridID = 'available-reports-grid';
- var addReportForm = $('#form-report-add');
- var submitButton = $('#button-report-add');
- var nameTextbox = $('input[name="name"]', addReportForm);
- nameTextbox.select();
-
- var submitForm = function(event) {
- if(submitButton.prop('disabled')) {
- return false;
- }
- var reportName = nameTextbox.val();
- var validator = RegExp("^[_A-Za-z0-9-]*$");
- if (!validator.test(reportName)) {
- wok.message.error.code('KCHDR6011M');
- return false;
- }
- var formData = addReportForm.serializeObject();
- var taskAccepted = false;
- var onTaskAccepted = function() {
- if(taskAccepted) {
- return;
- }
- taskAccepted = true;
- wok.window.close();
- wok.topic('kimchi/debugReportAdded').publish();
- };
-
- kimchi.createReport(formData, function(result) {
- onTaskAccepted();
- wok.topic('kimchi/debugReportAdded').publish();
- }, function(result) {
- // Error message from Async Task status
- if (result['message']) {
- var errText = result['message'];
- }
- // Error message from standard kimchi exception
- else {
- var errText = result['responseJSON']['reason'];
- }
- result && wok.message.error(errText);
-
- taskAccepted &&
- $('.grid-body-view table tr:first-child',
- '#' + reportGridID).remove();
- submitButton.prop('disabled', false);
- nameTextbox.select();
- }, onTaskAccepted);
-
- event.preventDefault();
- };
-
- addReportForm.on('submit', submitForm);
- submitButton.on('click', submitForm);
-};
diff --git a/plugins/kimchi/ui/js/src/kimchi.report_rename_main.js b/plugins/kimchi/ui/js/src/kimchi.report_rename_main.js
deleted file mode 100644
index 1bdb8d9..0000000
--- a/plugins/kimchi/ui/js/src/kimchi.report_rename_main.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-kimchi.report_rename_main = function() {
- var renameReportForm = $('#form-report-rename');
- var submitButton = $('#button-report-rename');
- var nameTextbox = $('input[name="name"]', renameReportForm);
- var submitForm = function(event) {
- if(submitButton.prop('disabled')) {
- return false;
- }
- var reportName = nameTextbox.val();
-
- // if the user hasn't changed the report's name,
- // nothing should be done.
- if (reportName == kimchi.selectedReport) {
- wok.message.error.code('KCHDR6013M');
- return false;
- }
-
- var validator = RegExp("^[A-Za-z0-9-]*$");
- if (!validator.test(reportName)) {
- wok.message.error.code('KCHDR6011M');
- return false;
- }
- var formData = renameReportForm.serializeObject();
- submitButton.prop('disabled', true);
- nameTextbox.prop('disabled', true);
- kimchi.renameReport(kimchi.selectedReport, formData, function(result) {
- submitButton.prop('disabled', false);
- nameTextbox.prop('disabled', false);
- wok.window.close();
- wok.topic('kimchi/debugReportRenamed').publish({
- result: result
- });
- }, function(result) {
- var errText = result &&
- result['responseJSON'] &&
- result['responseJSON']['reason'];
- wok.message.error(errText);
- submitButton.prop('disabled', false);
- nameTextbox.prop('disabled', false).focus();
- });
-
- event.preventDefault();
- };
-
- renameReportForm.on('submit', submitForm);
- submitButton.on('click', submitForm);
-
- nameTextbox.val(kimchi.selectedReport).select();
-};
diff --git a/plugins/kimchi/ui/js/src/kimchi.repository_add_main.js b/plugins/kimchi/ui/js/src/kimchi.repository_add_main.js
deleted file mode 100644
index 656306b..0000000
--- a/plugins/kimchi/ui/js/src/kimchi.repository_add_main.js
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-kimchi.repository_add_main = function() {
-
- var addForm = $('#form-repository-add');
- var addButton = $('#button-repository-add');
-
- var validateField = function(event) {
- var valid=($(this).val()!=='');
- $(addButton).prop('disabled', !valid);
- return(valid);
- };
-
- var validateForm = function(event) {
- var valid=false;
- addForm.find('input.required').each( function() {
- valid=($(this).val()!=='');
- return(!valid);
- });
- return(valid);
- }
-
- addForm.find('input.required').on('input propertychange', validateField);
-
- var weedObject = function(obj) {
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- if((typeof(obj[key])==="object") && !Array.isArray(obj[key])) {
- weedObject(obj[key]);
- }
- else if(obj[key] == '') {
- delete obj[key];
- }
- }
- }
- }
-
- var addRepository = function(event) {
- var valid = validateForm();
- if(!valid) {
- return false;
- }
-
- var formData = $(addForm).serializeObject();
-
- if (formData && formData.isMirror!=undefined) {
- formData.isMirror=(String(formData.isMirror).toLowerCase() === 'true');
- }
- if(formData.isMirror) {
- if(formData.config==undefined) {
- formData.config=new Object();
- }
- formData.config.mirrorlist=formData.baseurl;
- delete formData.baseurl;
- delete formData.isMirror;
- }
- weedObject(formData);
- if(formData.config && formData.config.comps) {
- formData.config.comps=formData.config.comps.split(/[,\s]/);
- for(var i=0; i>formData.config.comps.length; i++) {
- formData.config.comps[i]=formData.config.comps[i].trim();
- }
- for (var j=formData.config.comps.indexOf(""); j!=-1; j=formData.config.comps.indexOf("")) {
- formData.config.comps.splice(j, 1);
- }
- }
-
- kimchi.createRepository(formData, function() {
- wok.topic('kimchi/repositoryAdded').publish();
- wok.window.close();
- }, function(jqXHR, textStatus, errorThrown) {
- var reason = jqXHR &&
- jqXHR['responseJSON'] &&
- jqXHR['responseJSON']['reason'];
- wok.message.error(reason);
- });
- return false;
- };
-
- $(addForm).on('submit', addRepository);
-};
diff --git a/plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js b/plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js
deleted file mode 100644
index 5bfc51e..0000000
--- a/plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-kimchi.repository_edit_main = function() {
-
- var editForm = $('#form-repository-edit');
-
- var saveButton = $('#repository-edit-button-save');
-
- if(kimchi.capabilities['repo_mngt_tool']=="yum") {
- editForm.find('input.deb').prop('disabled', true);
- }
- else if(kimchi.capabilities['repo_mngt_tool']=="deb") {
- editForm.find('input.yum').prop('disabled', true);
- }
-
- kimchi.retrieveRepository(kimchi.selectedRepository, function(repository) {
- editForm.fillWithObject(repository);
-
- $('input', editForm).on('input propertychange', function(event) {
- if($(this).val() !== '') {
- $(saveButton).prop('disabled', false);
- }
- });
- });
-
-
- var editRepository = function(event) {
- var formData = $(editForm).serializeObject();
-
- if (formData && formData.config) {
- formData.config.gpgcheck=(String(formData.config.gpgcheck).toLowerCase() === 'true');
- }
-
- if(formData.config && formData.config.comps) {
- formData.config.comps=formData.config.comps.split(/[,\s]/);
- for(var i=0; i>formData.config.comps.length; i++) {
- formData.config.comps[i]=formData.config.comps[i].trim();
- }
- for (var j=formData.config.comps.indexOf(""); j!=-1; j=formData.config.comps.indexOf("")) {
- formData.config.comps.splice(j, 1);
- }
- }
-
- kimchi.updateRepository(kimchi.selectedRepository, formData, function() {
- wok.topic('kimchi/repositoryUpdated').publish();
- wok.window.close();
- }, function(jqXHR, textStatus, errorThrown) {
- var reason = jqXHR &&
- jqXHR['responseJSON'] &&
- jqXHR['responseJSON']['reason'];
- wok.message.error(reason);
- });
-
- return false;
- };
-
- $(editForm).on('submit', editRepository);
- $(saveButton).on('click', editRepository);
-};
diff --git a/plugins/kimchi/ui/pages/help/de_DE/host.dita b/plugins/kimchi/ui/pages/help/de_DE/host.dita
deleted file mode 100644
index 33a40e3..0000000
--- a/plugins/kimchi/ui/pages/help/de_DE/host.dita
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="de-de">
-<title>Host</title>
-<shortdesc>Die Seite <wintitle>Host</wintitle> zeigt Informationen zum Hostsystem an und ermöglicht Ihnen, den Host herunterzufahren, erneut zu starten und eine Verbindung zu ihm herzustellen.</shortdesc>
-<csbody>
-<p>Sie können die folgenden Aktionen am Host durchführen:<ul>
-<li>Wählen Sie <uicontrol>Herunterfahren</uicontrol> aus, um das Hostsystem herunterzufahren.</li>
-<li>Wählen Sie <uicontrol>Erneut starten</uicontrol> aus, um das Hostsystem erneut zu starten.</li>
-<li>Wählen Sie <uicontrol>Verbinden</uicontrol> aus, um eine VNC-Verbindung zum Hostsystem herzustellen, wenn noch keine Verbindung besteht.</li>
-</ul></p>
-<p>Klicken Sie auf die folgenden Abschnitte, um Informationen zum Host anzuzeigen:<dl>
-<dlentry>
-<dt>Basisinformationen</dt>
-<dd>Dieser Abschnitt zeigt die Verteilung, die Version und den Codenamen des Hostbetriebssystems sowie den Prozessortyp und die Speicherkapazität in GB an.</dd>
-</dlentry><dlentry>
-<dt>Systemstatistik</dt>
-<dd>Dieser Abschnitt zeigt mithilfe von Grafiken Statistiken für CPU, Speicher, Platten-E/A und Netz-E/A für den Host an. Wählen Sie <uicontrol>Daten werden nach dem Verlassen dieser Seite gesammelt</uicontrol> aus, um mit der Sammlung von Daten fortzufahren, wenn die Host-Registerkarte nicht angezeigt wird.</dd>
-</dlentry><dlentry>
-<dt>Software-Updates</dt>
-<dd>Dieser Abschnitt zeigt Informationen für alle Pakete an, bei denen Aktualisierungen verfügbar sind, einschließlich Paketname, Version, Architektur und Repository. Sie können alle aufgelisteten Pakete aktualisieren, indem Sie <uicontrol>Alle aktualisieren</uicontrol> auswählen. Sie können nicht einzelne Pakete zur Aktualisierung auswählen.</dd>
-</dlentry><dlentry>
-<dt>Repositorys</dt>
-<dd>Dieser Abschnitt zeigt Repositorys an, die dem Hostsystem zugeordnet sind. Sie können Repositorys hinzufügen, aktivieren, bearbeiten oder entfernen. Beim Hinzufügen wird ein Repository dem Hostsystem zugeordnet. Das Aktivieren eines Repositorys dagegen ermöglicht dem Host den Zugriff auf das Repository. Wenn Ihr System Red Hat Enterprise
-Linux oder Fedora ist, können Sie <filepath>yum</filepath>-Repositorys hinzufügen.
-Wenn Ihr System Ubuntu oder Debian ist, fügen Sie <filepath>deb</filepath>-Repositorys hinzu.<p>Wenn Sie mit yum-Repositorys arbeiten, können Sie eine GPG-Prüfung hinzufügen, um sicherzustellen, dass ein Paket aus diesem Repository nicht beschädigt wurde.
-Wählen Sie ein Repository und dann <uicontrol>Bearbeiten</uicontrol> aus. Wählen Sie <uicontrol>Ja</uicontrol> aus, um die GPG-Prüfung zu aktivieren, und geben Sie dann ein URL zur GPG-Schlüsseldatei für das Repository ein.</p></dd>
-</dlentry><dlentry>
-<dt>Debugberichte</dt>
-<dd>Dieser Abschnitt zeigt Debugberichte, einschließlich Name und Dateipfad, an.
-Sie haben die Möglichkeit, einen neuen Bericht zu erstellen oder einen bestehenden Bericht umzubenennen, zu entfernen oder herunterzuladen.<p>Der Debugbericht wird während des Befehls <cmdname>sosreport</cmdname> generiert. Er ist verfügbar für Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>-, Fedora-
-und Ubuntu-Verteilungen. Der Befehl generiert eine .tar-Datei, die Konfigurations- und Diagnoseinformationen enthält, wie zum Beispiel Kernelversion, geladene Module sowie System- und Servicekonfigurationdateien.
-Der Befehl führt zudem externe Programme aus, um weitere Informationen zu sammeln, und speichert diese Ausgabe im resultierenden Archiv.</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/help/en_US/host.dita b/plugins/kimchi/ui/pages/help/en_US/host.dita
deleted file mode 100644
index 0dcb670..0000000
--- a/plugins/kimchi/ui/pages/help/en_US/host.dita
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-<?Pub Sty _display FontColor="red"?>
-<?Pub Inc?>
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="en-us">
-<title>Host</title>
-<shortdesc>The <wintitle>Host</wintitle> page shows information about
-the host system, and allows you to shut down, restart, and connect
-to the host.</shortdesc>
-<csbody>
-<p>You can perform the following actions on the host:<ul>
-<li>Select <uicontrol>Shut down</uicontrol> to shut down the host
-system.</li>
-<li>Select <uicontrol>Restart</uicontrol> to restart the host system.</li>
-<li>Select <uicontrol>Connect</uicontrol> to open a VNC connection
-to the host system, if it is not already connected.</li>
-</ul></p>
-<p>Click the following sections to display information about the host:<dl>
-<dlentry>
-<dt>Basic information</dt>
-<dd>This section displays the host operating system distribution,
-version, and code name, as well as the processor type, the number of
-online CPUs and amount of memory in GB.</dd>
-</dlentry><dlentry>
-<dt>System statistics</dt>
-<dd>This section displays graphs to show statistics for CPU, memory,
-disk I/O, and network I/O for the host. Select <uicontrol>Collecting
-data after leaving this page</uicontrol> to continue collecting data
-when the host tab is out of view.</dd>
-</dlentry><dlentry>
-<dt>Software Updates</dt>
-<dd>This section displays information for all of the packages that
-have updates available, including package name, version, architecture,
-and repository. You can update all of the packages listed by selecting <uicontrol>Update
-All</uicontrol>. You cannot select individual packages for updates.</dd>
-</dlentry><dlentry>
-<dt>Repositories</dt>
-<dd>This section displays repositories that are associated with the
-host system. You can add, enable, edit, or remove repositories. Adding
-a repository associates it with the host system while enabling a repository
-allows the host to access it. If your system is Red Hat Enterprise
-Linux or Fedora, you can add <filepath>yum</filepath> repositories.
-If your system is Ubuntu or Debian, then add <filepath>deb</filepath> repositories.<p>If
-you are working with yum repositories, you can add a GPG check to
-verify that a package from this repository have not been corrupted.
-Select a repository and then <uicontrol>Edit</uicontrol>. Select <uicontrol>Yes</uicontrol> to
-enable GPG Check and then enter a URL to the GPG key file for the
-repository.</p><?Pub Caret 156?></dd>
-</dlentry><dlentry>
-<dt>Debug reports</dt>
-<dd>This section displays debug reports, including name and file path.
-You can select from options to generate a new report, or rename, remove,
-or download an existing report.<p>The debug report is generated using
-the <cmdname>sosreport</cmdname> command. It is available for Red
-Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora,
-and Ubuntu distributions. The command generates a .tar file that contains
-configuration and diagnostic information, such as the running kernel
-version, loaded modules, and system and service configuration files.
-The command also runs external programs to collect further information
-and stores this output in the resulting archive.</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-<?Pub *0000003492?>
diff --git a/plugins/kimchi/ui/pages/help/es_ES/host.dita b/plugins/kimchi/ui/pages/help/es_ES/host.dita
deleted file mode 100644
index 7734244..0000000
--- a/plugins/kimchi/ui/pages/help/es_ES/host.dita
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="es-es">
-<title>Host</title>
-<shortdesc>La página <wintitle>Host</wintitle> muestra información sobre el sistema host y le permite concluir, reiniciar y conectar con el sistema principal.</shortdesc>
-<csbody>
-<p>Puede realizar las acciones siguientes en el host:<ul>
-<li>Seleccione <uicontrol>Concluir</uicontrol> para concluir el sistema host.</li>
-<li>Seleccione <uicontrol>Reiniciar</uicontrol> para reiniciar el sistema host.</li>
-<li>Seleccione <uicontrol>Conectar</uicontrol> para abrir una conexión VNC al sistema host, si no está conectado aún.</li>
-</ul></p>
-<p>Pulse en las secciones siguientes para visualizar información acerca del host:<dl>
-<dlentry>
-<dt>Información básica</dt>
-<dd>Esta sección muestra la distribución del sistema operativo de host, la versión y el nombre de código, así como el tipo de procesador y la cantidad de memoria en GB.</dd>
-</dlentry><dlentry>
-<dt>Estadísticas del sistema</dt>
-<dd>Esta sección muestra gráficos para mostrar estadísticas para CPU, memoria, E/S de disco y E/S de red para el host. Seleccione <uicontrol>Recoger datos después de salir de esta página</uicontrol> para continuar la recogida de datos cuando la pestaña principal ya no está a la vista.</dd>
-</dlentry><dlentry>
-<dt>Actualizaciones de software</dt>
-<dd>En esta sección se muestra información para todos los paquetes que tienen actualizaciones disponibles, incluido el nombre de paquete, versión, arquitectura y repositorio. Puede actualizar todos los paquetes listados seleccionando <uicontrol>Actualizar todo</uicontrol>. No puede seleccionar paquetes individuales para las actualizaciones.</dd>
-</dlentry><dlentry>
-<dt>Repositorios</dt>
-<dd>En esta sección se muestran los repositorios que están asociados con el sistema host. Puede añadir, habilitar, editar o eliminar repositorios. Añadir un repositorio lo asocia con el sistema host mientras que habilitar un repositorio permite que el host acceda a él. Si el sistema es Red Hat Enterprise
-Linux o Fedora, puede añadir repositorios <filepath>yum</filepath>.
-Si el sistema es Ubuntu o Debian, añada repositorios <filepath>deb</filepath>.<p>Si está trabajando con repositorios yum, puede añadir una comprobación GPG para verificar que un paquete de este repositorio no ha resultado dañado.
-Seleccione un repositorio y, a continuación, <uicontrol>Editar</uicontrol>. Seleccione <uicontrol>Sí</uicontrol> para habilitar la comprobación GPG y, a continuación, especifique un URL al archivo de claves GPG para el repositorio.</p></dd>
-</dlentry><dlentry>
-<dt>Informes de depuración</dt>
-<dd>En esta sección se muestran informes de depuración, incluido el nombre y la ruta de archivo.
-Puede seleccionar entre opciones para generar un informe nuevo, o bien redenominar, eliminar o descargar un informe existente.<p>El informe de depuración se genera utilizando el mandato <cmdname>sosreport</cmdname>. Está disponible para distribuciones de Red
-Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora y Ubuntu. El mandato genera un archivo .tar que contiene la información de configuración y de diagnóstico, como la versión de kernel en ejecución, los módulos de carga y los archivos de configuración del sistema y servicio.
-El mandato también ejecuta programas externos para recopilar información adicional y almacena esta salida en el archivo resultante.</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/help/fr_FR/host.dita b/plugins/kimchi/ui/pages/help/fr_FR/host.dita
deleted file mode 100644
index f4c330b..0000000
--- a/plugins/kimchi/ui/pages/help/fr_FR/host.dita
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="fr-fr">
-<title>Hôte</title>
-<shortdesc>La page <wintitle>Hôte</wintitle> affiche des informations
-sur le système hôte et vous permet d'arrêter, de redémarrer et de vous
-connecter à l'hôte.</shortdesc>
-<csbody>
-<p>Vous pouvez effectuer les actions suivantes sur l'hôte :<ul>
-<li>Sélectionnez <uicontrol>Arrêter</uicontrol> pour arrêter le système hôte.</li>
-<li>Sélectionnez <uicontrol>Redémarrer</uicontrol> pour redémarrer le système hôte.</li>
-<li>Sélectionnez <uicontrol>Connexion</uicontrol> pour ouvrir une connexion VNC
-au système hôte, si celui-ci n'est pas déjà connecté.</li>
-</ul></p>
-<p>Cliquez sur les sections suivantes pour afficher des informations sur l'hôte :<dl>
-<dlentry>
-<dt>Informations de base</dt>
-<dd>Cette section affiche la distribution, la version et le nom de code
-du système d'exploitation hôte, ainsi que le type de processeur et la quantité
-de mémoire en Go.</dd>
-</dlentry><dlentry>
-<dt>Statistiques système</dt>
-<dd>Cette section affiche les graphiques des statistiques pour l'UC, mémoire, ainsi que
-les E-S disque et E-S réseau pour l'hôte. Sélectionnez <uicontrol>Collecte des données une fois la page quittée</uicontrol>
-pour continuer la collecte de données lorsque l'onglet hôte n'est plus visible.</dd>
-</dlentry><dlentry>
-<dt>Mises à jour logicielles</dt>
-<dd>Cette section affiche des informations pour tous les modules qui
-disposent de mises à jour disponibles, y compris le nom de module, la version, l'architecture
-et le référentiel. Vous pouvez mettre à jour toutes les modules répertoriés en sélectionnant <uicontrol>Tout
-mettre à jour</uicontrol>. Vous ne pouvez pas sélectionner des modules individuels pour les mises à jour.</dd>
-</dlentry><dlentry>
-<dt>Référentiels</dt>
-<dd>Cette section affiche les référentiels associés au système hôte. Vous pouvez ajouter, activer, éditer ou retirer des référentiels. L'ajout d'un référentiel associe celui-ci au système hôte,
-tandis que l'activation d'un référentiel permet à l'hôte d'y accéder. Si votre système est Red Hat Enterprise Linux ou Fedora,
-vous pouvez ajouter des référentiels <filepath>yum</filepath>.
-Si votre système est de type Ubuntu ou Debian, ajoutez des référentiels
-<filepath>deb</filepath>.<p>Si vous travaillez avec des référentiels yum, vous pouvez ajouter un contrôle GPG
-afin de vérifier qu'un module provenant de ce référentiel n'a pas été endommagé.
-Sélectionnez un référentiel puis cliquez sur <uicontrol>Editer</uicontrol>. Sélectionnez <uicontrol>Oui</uicontrol> pour activer le contrôle GPG,
-puis entrez une URL pour le fichier de clés GPG du référentiel.</p></dd>
-</dlentry><dlentry>
-<dt>Rapports de débogage</dt>
-<dd>Cette section affiche les rapports de débogage, y compris le nom et le chemin du fichier.
-Vous pouvez faire un choix parmi les options afin de générer un nouveau rapport, ou renommer, supprimer,
-ou télécharger un rapport existant.<p>Le rapport de débogage est généré à
-l'aide de la commande <cmdname>sosreport</cmdname>. Cette option est disponible pour les distributions
-Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora et Ubuntu. La commande génère un fichier .tar contenant la configuration et des informations de diagnostic,
-telles que la version du noyau d'exécution, les modules chargés, ainsi que les fichiers de configuration
-du système et de la maintenance.
-La commande exécute également des programmes externes pour collecter des informations
-supplémentaires et stocke cette sortie dans l'archive résultante.</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/help/it_IT/host.dita b/plugins/kimchi/ui/pages/help/it_IT/host.dita
deleted file mode 100644
index 63d3367..0000000
--- a/plugins/kimchi/ui/pages/help/it_IT/host.dita
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="it-it">
-<title>Host</title>
-<shortdesc>La pagina <wintitle>Host</wintitle> visualizza le informazioni sul sistema host e consente di arrestarlo, riavviarlo e connettersi ad esso.</shortdesc>
-<csbody>
-<p>È possibile effettuare le seguenti operazioni sull'host:<ul>
-<li>Selezionare <uicontrol>Arresta</uicontrol> per arrestare il sistema host.</li>
-<li>Selezionare <uicontrol>Riavvia</uicontrol> per riavviare il sistema host.</li>
-<li>Selezionare <uicontrol>Connetti</uicontrol> per aprire una connessione VNC al sistema host, se non è già connesso.</li>
-</ul></p>
-<p>Fare clic sulle seguenti sezioni per visualizzare le informazioni sull'host:<dl>
-<dlentry>
-<dt>Informazioni di base</dt>
-<dd>Questa sezione visualizza il nome codice, la versione e la distribuzione del sistema operativo, come pure il tipo di processore e la quantità di memoria in GB.</dd>
-</dlentry><dlentry>
-<dt>Statistiche di sistema</dt>
-<dd>Questa sezione visualizza i grafici che mostrano le statistiche per la CPU, la memoria, l'I/O disco e di rete per l'host. Selezionare <uicontrol>Raccolta dati all'uscita dalla pagina</uicontrol> per continuare la raccolta dei dati quando la scheda host non è più visibile.</dd>
-</dlentry><dlentry>
-<dt>Aggiornamenti del software</dt>
-<dd>Questa sezione visualizza le informazioni per tutti i pacchetti per cui sono disponibili gli aggiornamenti, incluso il nome, la versione, l'architettura e il repository del pacchetto. È possibile aggiornare tutti i pacchetti elencati, selezionando <uicontrol>Aggiorna tutto</uicontrol>. Non è possibile selezionare singoli pacchetti per gli aggiornamenti.</dd>
-</dlentry><dlentry>
-<dt>Repository</dt>
-<dd>Questa sezione visualizza i repository associati al sistema host. È possibile aggiungere, abilitare, modificare o rimuovere i repository. L'aggiunta di un repository lo associa al sistema host, mentre l'abilitazione di un repository
-consente all'host di accedervi. Se il sistema è Red Hat Enterprise
-Linux o Fedora, è possibile aggiungere i repository <filepath>yum</filepath>.
-Se il sistema è Ubuntu o Debian, aggiungere i repository <filepath>deb</filepath>.<p>Se si stanno utilizzando i repository yum, è possibile aggiungere un controllo GPG per verificare che un pacchetto da questo repository non sia stato corrotto.
-Selezionare un repository, quindi <uicontrol>Modifica</uicontrol>. Selezionare <uicontrol>Sì</uicontrol> per abilitare il controllo GPG, quindi immettere un URL al file di chiavi GPG per il
-repository.</p></dd>
-</dlentry><dlentry>
-<dt>Report di debug</dt>
-<dd>Questa sezione visualizza i report di debug, incluso il nome e il percorso file.
-Le opzioni disponibili consentono di generare un nuovo report oppure ridenominare, rimuovere o scaricare un report esistente.<p>Il report di debug viene generato utilizzando il comando <cmdname>sosreport</cmdname>. È disponibile per le distribuzioni Red
-Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora e Ubuntu. Il comando genera un file .tar che contiene informazioni di diagnostica e configurazione, come la versione del kernel in esecuzione, i moduli caricati e i file di configurazione del servizio e del sistema.
-Il comando esegue anche programmi esterni per raccogliere ulteriori informazioni e memorizza l'output nell'archivio risultante.</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/help/ja_JP/host.dita b/plugins/kimchi/ui/pages/help/ja_JP/host.dita
deleted file mode 100644
index 3a0141c..0000000
--- a/plugins/kimchi/ui/pages/help/ja_JP/host.dita
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="ja-jp">
-<title>ホスト</title>
-<shortdesc><wintitle>「ホスト」</wintitle>ページには、ホスト・システムに関する情報が表示されます。ここで、ホストをシャットダウン、再始動、またホストに接続することができます。
-</shortdesc>
-<csbody>
-<p>以下のアクションをホストに対して実行できます。
-<ul>
-<li>ホスト・システムをシャットダウンするには<uicontrol>「シャットダウン」</uicontrol>を選択します。
-</li>
-<li>ホスト・システムを再始動するには<uicontrol>「再始動」</uicontrol>を選択します。
-</li>
-<li>ホスト・システムへの VNC 接続を (まだ接続されていない場合に) オープンするには、<uicontrol>「接続」</uicontrol>を選択します。
-</li>
-</ul></p>
-<p>ホストに関する情報を表示するには、以下の選択項目をクリックしてください。
-<dl>
-<dlentry>
-<dt>基本情報</dt>
-<dd>このセクションには、ホスト・オペレーティング・システムのディストリビューション、バージョン、およびコード名、さらにプロセッサー・タイプとメモリーの量 (GB 単位) が表示されます。
-</dd>
-</dlentry><dlentry>
-<dt>システム統計情報</dt>
-<dd>このセクションには、ホストの CPU、メモリー、ディスク入出力、およびネットワーク入出力の統計情報を表すグラフが表示されます。
-ホスト・タブを閉じたときにデータの収集を続行するには、<uicontrol>「このページを閉じた後、データを収集する」</uicontrol>を選択してください。
-</dd>
-</dlentry><dlentry>
-<dt>ソフトウェア更新</dt>
-<dd>このセクションには、更新が用意されているパッケージすべての情報
-(パッケージ名、バージョン、アーキテクチャー、リポジトリーなど) が表示されます。
-<uicontrol>「すべて更新」</uicontrol>を選択すると、リストされているパッケージすべてを更新できます。
-更新する対象として個別のパッケージを選択することはできません。
-</dd>
-</dlentry><dlentry>
-<dt>リポジトリー</dt>
-<dd>このセクションには、ホスト・システムに関連付けられているリポジトリーが表示されます。
-リポジトリーを追加する、有効にする、編集する、または削除することができます。
-リポジトリーを追加すると、そのリポジトリーがホスト・システムに関連付けられ、リポジトリーを有効にすると、そのリポジトリーにホストがアクセスできるようになります。
-システムが Red Hat Enterprise Linux または Fedora であれば、<filepath>yum</filepath> リポジトリーを追加できます。
-システムが Ubuntu または Debian であれば、<filepath>deb</filepath> リポジトリーを追加してください。
-<p>yum リポジトリーを操作している場合、そのリポジトリーに入っているパッケージが壊れていないことを確認するため、GPG チェックを追加できます。
-リポジトリーを選択し、<uicontrol>「編集」</uicontrol>をクリックしてください。
-<uicontrol>「はい」</uicontrol>を選択して GPG チェックを有効にしてから、そのリポジトリーの GPG 鍵ファイルの URL を入力してください。
-</p></dd>
-</dlentry><dlentry>
-<dt>デバッグ・レポート</dt>
-<dd>このセクションには、デバッグ・レポート (名前やファイル・パスなど) が表示されます。
-新しいレポートを生成、既存のレポートを名前変更、削除、またはダウンロードするためのオプションを選択できます。
-<p>デバッグ・レポートは、<cmdname>sosreport</cmdname> コマンドで生成されます。
-これは、Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>、Fedora、および Ubuntu ディストリビューションに用意されています。
-このコマンドは、構成および診断情報 (稼働中のカーネルのバージョン、ロードされているモジュール、システムおよびサービス構成ファイルなど) が入った .tar ファイルを生成します。
-このコマンドはまた、外部プログラムを実行して情報をさらに収集し、その出力を結果のアーカイブに保管します。
-</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 227 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 1 -->
diff --git a/plugins/kimchi/ui/pages/help/ko_KR/host.dita b/plugins/kimchi/ui/pages/help/ko_KR/host.dita
deleted file mode 100644
index ee4a9c3..0000000
--- a/plugins/kimchi/ui/pages/help/ko_KR/host.dita
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="ko-kr">
-<title>호스트</title>
-<shortdesc><wintitle>호스트</wintitle> 페이지에는 호스트 시스템에 대한 정보가 표시되며 이 페이지를 사용하여 호스트를 종료 및 다시 시작하거나 호스트에 연결할 수 있습니다.</shortdesc>
-<csbody>
-<p>호스트에 대해 다음 조치를 수행할 수 있습니다.<ul>
-<li>호스트 시스템을 종료하려면 <uicontrol>시스템 종료</uicontrol>를 선택합니다.</li>
-<li>호스트 시스템을 다시 시작하려면 <uicontrol>다시 시작</uicontrol>을 선택합니다.</li>
-<li>이미 연결되어 있지 않은 경우, 호스트 시스템에 대한 VNC 연결을 시작하려면 <uicontrol>연결</uicontrol>을 선택합니다.</li>
-</ul></p>
-<p>호스트에 대한 정보를 표시하려면 다음 섹션을 클릭하십시오.<dl>
-<dlentry>
-<dt>기본 정보</dt>
-<dd>이 섹션에는 호스트 운영 체제 배포, 버전, 코드 이름, 프로세서 유형, 메모리 용량(GB) 등이 표시됩니다.</dd>
-</dlentry><dlentry>
-<dt>시스템 통계</dt>
-<dd>이 섹션에는 호스트의 CPU, 메모리, 디스크 I/O, 네트워크 I/O에 대한 통계를 표시하는 그래프가 표시됩니다. 호스트 탭을 떠났을 때 데이터 수집을 계속하려면 <uicontrol>이 페이지를 떠난 후에 데이터 수집</uicontrol>을 선택합니다.</dd>
-</dlentry><dlentry>
-<dt>소프트웨어 업데이트</dt>
-<dd>이 섹션에는 패키지 이름, 버전, 아키텍처, 저장소를 비롯하여 사용 가능한 업데이트가 있는 모든 패키지에 대한 정보가 표시됩니다. <uicontrol>모두 업데이트</uicontrol>를 선택하여 나열된 모든 패키지를 업데이트할 수 있습니다. 업데이트에 대해 개별 패키지를 선택할 수는 없습니다.</dd>
-</dlentry><dlentry>
-<dt>저장소</dt>
-<dd>이 섹션에는 호스트 시스템과 연관된 저장소가 표시됩니다. 저장소를 추가하거나, 사용으로 설정하거나, 편집하거나, 제거할 수 있습니다. 저장소를 추가하면 저장소가 호스트 시스템과 연관되며, 저장소를 사용으로 설정하면 호스트가 저장소에 액세스할 수 있습니다. 해당 시스템이 Red Hat Enterprise Linux 또는 Fedora인 경우, <filepath>yum</filepath> 저장소를 추가할 수 있습니다.
-해당 시스템이 Ubuntu 또는 Debian인 경우, <filepath>deb</filepath> 저장소를 추가하십시오.<p>yum 저장소로 작업하는 경우, GPG 검사를 추가하여 이 저장소의 패키지가 손상되지 않았는지 확인할 수 있습니다.
-저장소를 선택한 후 <uicontrol>편집</uicontrol>을 선택하십시오. <uicontrol>예</uicontrol>를 선택하여 GPG 검사를 사용으로 설정한 후 저장소에 대한 GPG 키 파일의 URL을 입력하십시오.</p></dd>
-</dlentry><dlentry>
-<dt>디버그 보고서</dt>
-<dd>이 섹션에는 이름 및 파일 경로를 포함한 디버그 보고서가 표시됩니다.
-새 보고서 생성, 기존 보고서 이름 바꾸기, 제거, 다운로드 등의 옵션 중에서 선택할 수 있습니다.<p>디버그 보고서는 <cmdname>sosreport</cmdname> 명령을 사용하여 생성됩니다. 이는 Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora 및 Ubuntu 배포에서 사용 가능합니다. 이 명령은 구성 및 진단 정보(예: 실행 중인 커널 버전, 로드된 모듈, 시스템 및 서비스 구성 파일)를 포함하는 .tar 파일을 생성합니다.
-또한 이 명령은 외부 프로그램을 실행하여 추가 정보를 수집하고 결과 아카이브에 이 출력을 저장합니다.</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/help/pt_BR/host.dita b/plugins/kimchi/ui/pages/help/pt_BR/host.dita
deleted file mode 100644
index 88f7eb2..0000000
--- a/plugins/kimchi/ui/pages/help/pt_BR/host.dita
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="pt-br">
-<title>Host</title>
-<shortdesc>A página <wintitle>Host</wintitle> mostra informações sobre
-o sistema host e permite encerrar, reiniciar e conectar
-ao host.</shortdesc>
-<csbody>
-<p>É possível executar as ações a segur no host:<ul>
-<li>Selecione <uicontrol>Encerrar</uicontrol> para encerrar o sistema
-host.</li>
-<li>Selecione <uicontrol>Reiniciar</uicontrol> para reiniciar o sistema host.</li>
-<li>Selecione <uicontrol>Conectar</uicontrol> para abrir uma conexão VNC
-para o sistema host, se ele já não estiver conectado.</li>
-</ul></p>
-<p>Clique nas seções a seguir para exibir informações sobre o host:<dl>
-<dlentry>
-<dt>Informações básicas</dt>
-<dd>Esta seção exibe a distribuição do sistema operacional do host,
-a versão e o nome do código, bem como o tipo de processador e quantia de
-memória em GB.</dd>
-</dlentry><dlentry>
-<dt>Estatísticas do sistema</dt>
-<dd>Esta seção exibe gráficos para mostrar estatísticas para CPU, memória,
-E/S de disco e E/S de rede para o host. Selecione <uicontrol>Coletando
-dados depois de sair desta página</uicontrol> para continuar a coletar dados
-quando a guia do host estiver fora de visualização.</dd>
-</dlentry><dlentry>
-<dt>Atualizações de software</dt>
-<dd>Esta seção exibe informações de todos os pacotes que
-possuem atualizações disponíveis, incluindo nome do pacote, versão, arquitetura
-e repositório. É possível atualizar todos os pacotes listados selecionando <uicontrol>Atualizar
-todos</uicontrol>. Não é possível selecionar pacotes individuais para atualizações.</dd>
-</dlentry><dlentry>
-<dt>Repositórios</dt>
-<dd>Esta seção exibe repositórios que estão associados ao
-sistema host. É possível incluir, ativar, editar ou remover repositórios. Incluir
-um repositório o associa com o sistema host enquanto ativar um repositório
-permite que o host o acesse. Se o seu sistema for Red Hat Enterprise
-Linux ou Fedora, será possível incluir repositórios <filepath>yum</filepath>.
-Se o seu sistema for Ubuntu ou Debian, inclua repositórios <filepath>deb</filepath>.<p>Se
-você estiver trabalhando com repositórios yum, será possível incluir uma verificação de GPG para
-verificar se um pacote desse repositório não foi corrompido.
-Selecione um repositório e, em seguida, <uicontrol>Editar</uicontrol>. Selecione <uicontrol>Sim</uicontrol> para
-ativar a Verificação de GPG e, em seguida, insira uma URL no arquivo-chave de GPG para o
-repositório.</p></dd>
-</dlentry><dlentry>
-<dt>Relatórios de depuração</dt>
-<dd>Esta seção exibe relatórios de depuração, incluindo nome e caminho do arquivo.
-É possível selecionar a partir das opções para gerar um novo relatório ou renomear, remover
-ou fazer o download de um relatório existente.<p>O relatório de depuração é gerado usando
-o comando <cmdname>sosreport</cmdname>. Ele está disponível para distribuições
-Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora
-e Ubuntu. O comando gera um arquivo .tar que contém
-informações de configuração e de diagnóstico, como versão do kernel
-em execução, módulos carregados e arquivos de configuração de sistema e de serviço.
-O comando também executa programas externos para coletar informações adicionais
-e armazena essa saída no archive resultante.</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/help/ru_RU/host.dita b/plugins/kimchi/ui/pages/help/ru_RU/host.dita
deleted file mode 100644
index fb72c21..0000000
--- a/plugins/kimchi/ui/pages/help/ru_RU/host.dita
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="ru-ru">
-<title>Хост</title>
-<shortdesc>Страница <wintitle>Хост</wintitle> показывает информацию о системе хоста и позволяет останавливать хост, перезапускать хост и подключаться к нему.</shortdesc>
-<csbody>
-<p>На хосте можно выполнять следующие действия:<ul>
-<li><uicontrol>Завершить работу</uicontrol> - остановить систему хоста.</li>
-<li><uicontrol>Перезапустить</uicontrol> - перезапустить систему хоста.</li>
-<li><uicontrol>Подключиться</uicontrol> - открыть соединение VNC с системой хоста, если оно еще не установлено.</li>
-</ul></p>
-<p>Щелкните на следующих разделах для просмотра информации о хосте:<dl>
-<dlentry>
-<dt>Базовая информация</dt>
-<dd>В этом разделе показывается вариант операционной системы, его версия и кодовое имя, а также тип процессора и объем памяти в ГБ.</dd>
-</dlentry><dlentry>
-<dt>Системная статистика</dt>
-<dd>В этом разделе показываются графики, отражающие статистическую информацию о процессоре, памяти, дисковом вводе-выводе и сетевом вводе-выводе для хоста. Выберите <uicontrol>Сбор данных после закрытия этой страницы</uicontrol>, чтобы сбор данных продолжался после закрытия вкладки Хост.</dd>
-</dlentry><dlentry>
-<dt>Обновления программного обеспечения</dt>
-<dd>В этом разделе показывается информация обо всех пакетах, для которых доступны обновления, включая имя пакета, версию, архитектуру и хранилище. Можно обновить все пакеты в списке щелчком на <uicontrol>Обновить все</uicontrol>. Отдельные пакеты для обновления выбрать нельзя.</dd>
-</dlentry><dlentry>
-<dt>Хранилища</dt>
-<dd>В этом разделе показываются хранилища, связанные с системой хоста. Хранилища можно добавлять, активировать, изменять и удалять. При добавлении хранилище связывается с системой хоста, при активации хранилище становится доступным для хоста. Если система - Red Hat Enterprise Linux или Fedora, можно добавить хранилища <filepath>yum</filepath>.
-Если система - Ubuntu или Debian, добавьте хранилища <filepath>deb</filepath>.<p>При работе с хранилищами yum можно добавить проверку GPG для проверки целостности пакетов из данного хранилища.
-Выберите хранилище и щелкните на <uicontrol>Изменить</uicontrol>. Выберите <uicontrol>Да</uicontrol>, чтобы включить проверку GPG, и введите URL файла ключей GPG для хранилища.</p></dd>
-</dlentry><dlentry>
-<dt>Отладочные отчеты</dt>
-<dd>В этом разделе показываются отладочные отчеты, включая имя и путь.
-Доступны команды для создания, переименования, удаления и загрузки отчетов.<p>Отладочный отчет создается командой <cmdname>sosreport</cmdname>. Он доступен для Red
-Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora и Ubuntu. Команда создает файл .tar с конфигурационной и диагностической информацией, такой как версия ядра, загруженные модули и файлы конфигурации системы и служб.
-Команда также выполняет внешние программы для сбора дополнительной информации и сохраняет их вывод в результирующем архиве.</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/help/zh_CN/host.dita b/plugins/kimchi/ui/pages/help/zh_CN/host.dita
deleted file mode 100644
index 78a89c3..0000000
--- a/plugins/kimchi/ui/pages/help/zh_CN/host.dita
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="zh-cn">
-<title>主机</title>
-<shortdesc>“<wintitle>主机</wintitle>”页面显示有关主机系统的信息,并且允许您对主机进行关闭、启动和连接。</shortdesc>
-<csbody>
-<p>可对主机执行以下操作:<ul>
-<li>选择<uicontrol>关闭</uicontrol>以关闭主机系统。</li>
-<li>选择<uicontrol>重新启动</uicontrol>以重新启动主机系统。</li>
-<li>选择<uicontrol>连接</uicontrol>以打开与主机系统的 VNC 连接(如果尚未连接)。</li>
-</ul></p>
-<p>单击以下部分以显示有关主机的信息:<dl>
-<dlentry>
-<dt>基本信息</dt>
-<dd>本部分显示主机操作系统分发版、版本和代码名称以及处理器类型和内存量(以 GB 计)。</dd>
-</dlentry><dlentry>
-<dt>系统统计信息</dt>
-<dd>本部分显示图形,以显示主机有关 CPU、内存、磁盘 I/O 和网络 I/O 的统计信息。选择<uicontrol>离开此页面之后收集数据</uicontrol>以继续在主机选项卡不在视图中时收集数据。</dd>
-</dlentry><dlentry>
-<dt>软件更新</dt>
-<dd>本部分显示有更新可用的所有软件包的信息,其中包括软件包名称、版本、体系结构和存储库。可通过选择<uicontrol>全部更新</uicontrol>来更新所列示的所有软件包。不能针对更新选择各个软件包。</dd>
-</dlentry><dlentry>
-<dt>存储库</dt>
-<dd>本部分显示与主机系统关联的存储库。您可以添加、启用、编辑或除去存储库。当启用存储库会允许主机对其进行访问时,添加存储库会将其与主机系统关联。如果您的系统为 Red Hat Enterprise Linux 或 Fedora,那么可添加 <filepath>yum</filepath> 存储库。如果您的系统为 Ubuntu 或 Debian,那么请添加 <filepath>deb</filepath> 存储库。<p>如果要处理 Yum 存储库,您可以添加 GPG 检查以验证此存储库中的软件包是否已损坏。选择一个存储库,然后选择<uicontrol>编辑</uicontrol>。选择<uicontrol>是</uicontrol>以启用 GPG 检查,然后输入存储库中 GPG 密钥文件的 URL。</p></dd>
-</dlentry><dlentry>
-<dt>调试报告</dt>
-<dd>本部分显示调试报告,其中包括名称和文件路径。您可以从选项中进行选择以生成新报告,或者对现有报告进行重命名、除去或下载。<p>调试报告将使用
-<cmdname>sosreport</cmdname> 命令生成。该报告可用于 Red
-Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>、Fedora 和 Ubuntu 分发版。该命令将生成包含配置和诊断信息的 .tar 文件,例如,正在运行的内核版本、已装入的模块以及系统和服务配置文件。该命令还会运行外部程序以收集更多信息并将此输出存储在生成的归档中。</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/help/zh_TW/host.dita b/plugins/kimchi/ui/pages/help/zh_TW/host.dita
deleted file mode 100644
index a55aae4..0000000
--- a/plugins/kimchi/ui/pages/help/zh_TW/host.dita
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--Arbortext, Inc., 1988-2011, v.4002-->
-<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
- "..\dtd\cshelp.dtd">
-
-
-<!--This DITA specialized document type is not supported by the Authoring Tools development team.
-For support please see:
-https://w3.opensource.ibm.com/projects/dita-cshelp/-->
-<cshelp id="kimhhost" xml:lang="zh-tw">
-<title>主機</title>
-<shortdesc>「<wintitle>主機</wintitle>」頁面會顯示主機系統的相關資訊,並容許您關閉、重新啟動以及連接到主機。</shortdesc>
-<csbody>
-<p>您可以針對主機執行下列動作:<ul>
-<li>選取<uicontrol>關閉</uicontrol>以關閉主機系統。</li>
-<li>選取<uicontrol>重新啟動</uicontrol>以重新啟動主機系統。</li>
-<li>選取<uicontrol>連接</uicontrol>以開啟與主機系統的 VNC 連線(如果尚未連線到主機系統)。</li>
-</ul></p>
-<p>按一下下列區段以顯示主機的相關資訊:<dl>
-<dlentry>
-<dt>基本資訊</dt>
-<dd>此區段會顯示主機作業系統發行套件、版本、程式碼名稱、處理器類型以及記憶體數量 (GB)。</dd>
-</dlentry><dlentry>
-<dt>系統統計資料</dt>
-<dd>此區段會顯示一些圖形,以顯示主機的 CPU、記憶體、磁碟 I/O 和網路 I/O 的統計資料。選取<uicontrol>離開此頁面之後收集資料</uicontrol>以在主機標籤從視線中消失之後繼續收集資料。</dd>
-</dlentry><dlentry>
-<dt>軟體更新</dt>
-<dd>此區段會顯示具有可用更新的所有套件的相關資訊,包括套件名稱、版本、架構和儲存庫。您可以透過選取<uicontrol>全部更新</uicontrol>來更新所有列出的套件。不能選取個別套件以進行更新。</dd>
-</dlentry><dlentry>
-<dt>儲存庫</dt>
-<dd>此區段會顯示與主機系統相關聯的儲存庫。您可以新增、啟用、編輯或移除儲存庫。新增儲存庫可使它與主機系統相關聯,而啟用儲存庫則容許主機存取儲存庫。如果您的系統是
-Red Hat Enterprise Linux 或 Fedora,則可以新增 <filepath>yum</filepath> 儲存庫。如果您的系統是
-Ubuntu 或 Debian,則可以新增 <filepath>deb</filepath> 儲存庫。<p>如果您正在使用
-yum 儲存庫,則可以新增 GPG 檢查以驗證此儲存庫中的某個套件是否未毀損。選取儲存庫,然後選取<uicontrol>編輯</uicontrol>。選取<uicontrol>是</uicontrol>以啟用
-GPG 檢查,然後輸入儲存庫的 GPG 金鑰檔的 URL。</p></dd>
-</dlentry><dlentry>
-<dt>除錯報告</dt>
-<dd>此區段顯示除錯報告,包括名稱和檔案路徑。您可以選取選項以產生新報告、或是重新命名、移除或下載現有報告。<p>除錯報告是使用
-<cmdname>sosreport</cmdname> 指令產生的。該指令可用於 Red
-Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>、Fedora
-及 Ubuntu 發行套件。該指令會產生 .tar 檔案,其包含配置與診斷資訊,例如執行中的核心版本、已載入模組以及系統和服務配置檔案。該指令還會執行外部程式來收集更多資訊並將此輸出儲存在產生的保存檔中。</p> </dd>
-</dlentry></dl></p>
-</csbody>
-<?tm 1392659967 1?>
-</cshelp>
-
-
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
-<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
diff --git a/plugins/kimchi/ui/pages/host.html.tmpl b/plugins/kimchi/ui/pages/host.html.tmpl
deleted file mode 100644
index d87debc..0000000
--- a/plugins/kimchi/ui/pages/host.html.tmpl
+++ /dev/null
@@ -1,177 +0,0 @@
-#*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *#
-
-#unicode UTF-8
-#import gettext
-#from wok.cachebust import href
-#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
-#silent _ = t.gettext
-#silent _t = t.gettext
-<!DOCTYPE html>
-<html>
-<head>
-<link rel="stylesheet" href="plugins/kimchi/css/theme-default.min.css">
-<script src="plugins/kimchi/js/kimchi.min.js"></script>
-</head>
-<body>
-<div id="host-root-container">
- <div class="toolbar">
- <div class="tools">
- </div>
- </div>
- <div id="host-content-container" class="empty-when-logged-off"></div>
-</div>
-
-<script id="host-tmpl" type="kimchi/template">
- <div class="host-panel">
- <div class="logo-container">
- <div class="logo" style="background-image: url({logo});"></div>
- </div>
- <div id="host-info-container" class="info-container">
- <h2 class="hostname">{hostname}</h2>
- <div class="action-panel">
- <button id="host-button-shutdown" class="btn-normal-1 stop">
- <div class="button-icon action-icon-stop"></div>
- $_("Shut down")
- </button>
- <button id="host-button-restart" class="btn-normal-1 restart">
- <div class="button-icon action-icon-restart"></div>
- $_("Restart")
- </button>
- <button class="btn-normal-1 connect" disabled="disabled">
- <div class="button-icon action-icon-connect"></div>
- $_("Connect")
- </button>
- </div>
- <div class="host-section">
- <h3 class="section-header"
- aria-expanded="false"
- aria-controls="content-sys-info">
- $_("Basic Information")
- </h3>
- <div id="content-sys-info" class="section-content">
- <div class="section-row">
- <div class="section-label">$_("OS Distro")</div>
- <div class="section-value">{os_distro}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("OS Version")</div>
- <div class="section-value">{os_version}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("OS Code Name")</div>
- <div class="section-value">{os_codename}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Processor")</div>
- <div class="section-value">{cpu_model}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("CPU(s)")</div>
- <div class="section-value">{cpus}</div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Memory")</div>
- <div class="section-value">{memory}</div>
- </div>
- </div>
- </div>
- <div class="host-section">
- <h3 class="section-header"
- aria-controls="content-sys-statistics">
- $_("System Statistics")
- </h3>
- <div id="content-sys-statistics" class="section-content">
- <div class="section-row">
- <div class="section-label">$_("CPU")</div>
- <div class="section-value">
- <div id="container-chart-cpu" class="inline-block"></div>
- </div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Memory")</div>
- <div class="section-value">
- <div id="container-chart-memory" class="inline-block"></div>
- </div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Disk I/O")</div>
- <div class="section-value">
- <div id="container-chart-disk-io" class="inline-block"></div>
- </div>
- </div>
- <div class="section-row">
- <div class="section-label">$_("Network I/O")</div>
- <div class="section-value">
- <div id="container-chart-network-io" class="inline-block"></div>
- </div>
- </div>
- </div>
- </div>
- <div id="software-update-section" class="host-section hidden">
- <h3 class="section-header"
- aria-controls="content-software-update">
- $_("Software Updates")
- </h3>
- <div id="content-software-update" class="section-content">
- <div class="section-row">
- <div class="section-value">
- <div id="software-updates-grid-container"></div>
- <div id="software-updates-progress-container" class="hidden">
- <label for="software-updates-progress-textarea">$_("Update Progress")</label>
- <textarea id="software-updates-progress-textarea" readonly></textarea>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div id="repositories-section" class="host-section hidden">
- <h3 class="section-header"
- aria-controls="content-repositories">
- $_("Repositories")
- </h3>
- <div id="content-repositories" class="section-content">
- <div class="section-row">
- <div class="section-value">
- <div id="repositories-grid-container"></div>
- </div>
- </div>
- </div>
- </div>
- <div id="debug-report-section" class="host-section hidden">
- <h3 class="section-header"
- aria-controls="content-sys-reports">
- $_("Debug Reports")
- </h3>
- <div id="content-sys-reports" class="section-content">
- <div class="section-row">
- <div class="section-value">
- <div id="available-reports-grid-container"></div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-</script>
-
-<script type="text/javascript">
- kimchi.host_main();
-</script>
-</body>
-</html>
diff --git a/plugins/kimchi/ui/pages/i18n.json.tmpl b/plugins/kimchi/ui/pages/i18n.json.tmpl
index cd320e0..f7f557d 100644
--- a/plugins/kimchi/ui/pages/i18n.json.tmpl
+++ b/plugins/kimchi/ui/pages/i18n.json.tmpl
@@ -75,49 +75,6 @@
"KCHHOST6007M": "$_("Sent")",
"KCHHOST6008M": "$_("Shutting down or restarting host will cause unsaved work lost. Continue to shut down/restarting?")",
-
- "KCHREPO6001M": "$_("Confirm")",
- "KCHREPO6002M": "$_("Repository will be removed permanently and can't be recovered. Do you want to continue?")",
- "KCHREPO6003M": "$_("Repositories")",
- "KCHREPO6004M": "$_("ID")",
- "KCHREPO6005M": "$_("Name")",
- "KCHREPO6006M": "$_("Base URL")",
- "KCHREPO6007M": "$_("Is Mirror")",
- "KCHREPO6008M": "$_("URL Args")",
- "KCHREPO6009M": "$_("Enabled")",
- "KCHREPO6010M": "$_("GPG Check")",
- "KCHREPO6011M": "$_("GPG Key")",
- "KCHREPO6012M": "$_("Add")",
- "KCHREPO6013M": "$_("Edit")",
- "KCHREPO6014M": "$_("Remove")",
- "KCHREPO6016M": "$_("Enable")",
- "KCHREPO6017M": "$_("Disable")",
-
-
- "KCHUPD6001M": "$_("Software Updates")",
- "KCHUPD6002M": "$_("Package Name")",
- "KCHUPD6003M": "$_("Version")",
- "KCHUPD6004M": "$_("Architecture")",
- "KCHUPD6005M": "$_("Repository")",
- "KCHUPD6006M": "$_("Update All")",
- "KCHUPD6007M": "$_("Updating...")",
- "KCHUPD6008M": "$_("Failed to retrieve packages update information.")",
- "KCHUPD6009M": "$_("Failed to update package(s).")",
-
-
- "KCHDR6001M": "$_("Debug report will be removed permanently and can't be recovered. Do you want to continue?")",
- "KCHDR6002M": "$_("Debug Reports")",
- "KCHDR6003M": "$_("Name")",
- "KCHDR6005M": "$_("Generated Time")",
- "KCHDR6006M": "$_("Generate")",
- "KCHDR6007M": "$_("Generating...")",
- "KCHDR6008M": "$_("Rename")",
- "KCHDR6009M": "$_("Remove")",
- "KCHDR6010M": "$_("Download")",
- "KCHDR6011M": "$_("Report name should contain only letters, digits, underscore ('_') and/or hyphen ('-').")",
- "KCHDR6012M": "$_("Pending...")",
- "KCHDR6013M": "$_("Report name is the same as the original one.")",
-
"KCHVM6001M": "$_("This will delete the virtual machine and its virtual disks. This operation cannot be undone. Would you like to continue?")",
"KCHVM6002M": "$_("Power off Confirmation")",
"KCHVM6003M": "$_("This action may produce undesirable results, "
diff --git a/plugins/kimchi/ui/pages/report-add.html.tmpl b/plugins/kimchi/ui/pages/report-add.html.tmpl
deleted file mode 100644
index 25bf0a9..0000000
--- a/plugins/kimchi/ui/pages/report-add.html.tmpl
+++ /dev/null
@@ -1,56 +0,0 @@
-#*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2013-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *#
-#unicode UTF-8
-#import gettext
-#from wok.cachebust import href
-#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
-#silent _ = t.gettext
-#silent _t = t.gettext
-<!DOCTYPE html>
-<div id="report-add-window" class="window">
- <header>
- <h1 class="title h1 grey">$_("Generate a New Debug Report")</h1>
- </header>
- <div class="content">
- <form id="form-report-add">
- <section class="form-section">
- <h2>
- <label for="report-name-textbox">$_("Report Name")</label>
- </h2>
- <div class="field">
- <input type="text" class="text" id="report-name-textbox" name="name" />
- <span class="icon-info-circled light-grey c1"></span>
- <span class="info-add-debug-report">
- $_("The name used to identify the report. If omitted, a name will be chosen based on current time. Name can contain: letters, digits, underscore (\"_\") and hyphen (\"-\").")
- </span>
- </div>
- </section>
- </form>
- </div>
- <footer>
- <div class="btn-group">
- <button id="button-report-add" class="btn-normal"><span class="text">$_("Generate")</span></button>
- <button id="button-report-cancel" class="btn-normal close" type="button">
- <span calss="text">$_("Cancel")</span>
- </button>
- </div>
- </footer>
-</div>
-<script>
- kimchi.report_add_main();
-</script>
diff --git a/plugins/kimchi/ui/pages/report-rename.html.tmpl b/plugins/kimchi/ui/pages/report-rename.html.tmpl
deleted file mode 100644
index 90a0a80..0000000
--- a/plugins/kimchi/ui/pages/report-rename.html.tmpl
+++ /dev/null
@@ -1,56 +0,0 @@
-#*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *#
-#unicode UTF-8
-#import gettext
-#from wok.cachebust import href
-#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
-#silent _ = t.gettext
-#silent _t = t.gettext
-<!DOCTYPE html>
-<div id="report-rename-window" class="window">
- <header>
- <h1 class="title h1 grey">$_("Rename a Debug Report")</h1>
- </header>
- <div class="content">
- <form id="form-report-rename">
- <section class="form-section">
- <h2>
- <label for="report-name-textbox">$_("Report Name")</label>
- </h2>
- <div class="field">
- <input type="text" class="text" id="report-name-textbox" name="name" />
- <span class="icon-info-circled light-grey c1"></span>
- <span class="info-debug-report-rename">
- $_("The name used to identify the report. Name can contain: letters, digits and hyphen (\"-\").")
- </span>
- </div>
- </section>
- </form>
- </div>
- <footer>
- <div class="btn-group">
- <button id="button-report-rename" class="btn-normal"><span class="text">$_("Submit")</span></button>
- <button id-"button-report-rename-cancel" class="btn-normal close" type="button">
- <span class="text">$_("Cancel")</span>
- </button>
- </div>
- </footer>
-</div>
-<script>
- kimchi.report_rename_main();
-</script>
diff --git a/plugins/kimchi/ui/pages/repository-add.html.tmpl b/plugins/kimchi/ui/pages/repository-add.html.tmpl
deleted file mode 100644
index 950252a..0000000
--- a/plugins/kimchi/ui/pages/repository-add.html.tmpl
+++ /dev/null
@@ -1,113 +0,0 @@
-#*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *#
-#unicode UTF-8
-#import gettext
-#from wok.cachebust import href
-#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
-#silent _ = t.gettext
-#silent _t = t.gettext
-<div id="repository-add-window" class="window">
- <form id="form-repository-add">
- <header class="window-header">
- <h1 class="title h1 grey">$_("Add a Repository")</h1>
- </header>
- <section>
- <div class="content">
- <div class="form-section yum">
- <h2>$_("Identifier")</h2>
- <div class="field">
- <div class="textbox-wrapper">
- <input type="text" class="text" name="repo_id" />
- </div>
- <div class="icon-info-circled light-grey c1 help-inline"></div>
- <p class="text-help help-inline">
- $_("Single word, unique identifier for the repository.")
- </p>
- </div>
- </div>
- <section class="form-section yum">
- <h2>$_("Name")</h2>
- <div class="field">
- <div class="textbox-wrapper">
- <input type="text" class="text" name="config[repo_name]" />
- </div>
- <div class="icon-info-circled light-grey c1 help-inline"></div>
- <p class="text-help help-inline">
- $_("Textual name for the repository.")
- </p>
- </div>
- </section>
- <section class="form-section">
- <h2>$_("URL")<span class="required" role="presentation" title='$_("Required Field")'>*</span></h2>
- <div class="field">
- <div class="textbox-wrapper">
- <input type="text" class="text required" name="baseurl" />
- </div>
- <div class="icon-info-circled light-grey c1 help-inline"></div>
- <p class="text-help help-inline">
- $_("URL to the repository. Supported protocols are http, ftp, and file.")
- </p>
- </div>
- <div class="field yum">
- <p class="yum">
- <input type="checkbox" name="isMirror" value="true" id="isMirror" />
- <label id="isMirrorLabel" for="isMirror">$_("Repository is a mirror")</label>
- </p>
- </div>
- </section>
- <section class="form-section repository-dist deb">
- <h2>$_("Distribution")</h2>
- <div class="field">
- <div class="textbox-wrapper">
- <input type="text" class="text" name="config[dist]" />
- </div>
- <div class="icon-info-circled light-grey c1 help-inline"></div>
- <p class="text-help help-inline">
- $_("Distribution of the DEB repository.")
- </p>
- </div>
- </section>
- <section class="form-section repository-comps deb">
- <h2>$_("Components")</h2>
- <div class="field">
- <div class="textbox-wrapper">
- <input type="text" class="text" name="config[comps]" />
- </div>
- <div class="icon-info-circled light-grey c1 help-inline"></div>
- <p class="text-help help-inline">
- $_("List of components in DEB repository.")
- </p>
- </div>
- </section>
- </div>
- </section>
- <footer>
- <div class="btn-group">
- <button type="submit" id="button-repository-add" class="btn-normal" disabled="disabled">
- <span class="text">$_("Add")</span>
- </button>
- <button type="button" id="button-repository-close" class="btn-normal close">
- <span class="text">$("Cancel")</span>
- </button>
- </div>
- </footer>
- </form>
-</div>
-<script>
- kimchi.repository_add_main();
-</script>
diff --git a/plugins/kimchi/ui/pages/repository-edit.html.tmpl b/plugins/kimchi/ui/pages/repository-edit.html.tmpl
deleted file mode 100644
index e5a3cfb..0000000
--- a/plugins/kimchi/ui/pages/repository-edit.html.tmpl
+++ /dev/null
@@ -1,117 +0,0 @@
-#*
- * Project Kimchi
- *
- * Copyright IBM, Corp. 2014-2015
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *#
-#unicode UTF-8
-#import gettext
-#from wok.cachebust import href
-#silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang, fallback=True)
-#silent _ = t.gettext
-#silent _t = t.gettext
-
-<div id="repository-edit-window" class="window">
- <form id="form-repository-edit">
- <header>
- <h1 class="title h1 grey">$_("Edit Repository")</h1>
- </header>
- <div class="content">
- <section id="form-repository-edit">
- <fieldset class="repository-edit-fieldset">
- <div class="repository-id yum">
- <div class="repository-edit-wrapper-label">
- <label for="repository-edit-id-textbox">$_("ID")</label>
- </div>
- <div class="repository-edit-wrapper-controls">
- <input id="repository-edit-id-textbox" name="repo_id" type="text" disabled="disabled" readonly="readonly"/>
- </div>
- </div>
- <div class="repository-name yum">
- <div class="repository-edit-wrapper-label">
- <label for="repository-edit-name-textbox">$_("Name")</label>
- </div>
- <div class="repository-edit-wrapper-controls">
- <input id="repository-edit-name-textbox" class="yum" name="config[repo_name]" type="text" />
- </div>
- </div>
- <div class="repository-url">
- <div class="repository-edit-wrapper-label">
- <label for="repository-edit-baseurl-textbox">$_("URL")</label>
- </div>
- <div class="repository-edit-wrapper-controls">
- <input id="repository-edit-baseurl-textbox" name="baseurl" type="text" />
- </div>
- </div>
- <div class="repository-dist deb">
- <div class="repository-edit-wrapper-label">
- <label for="repository-edit-urlargs-textbox">$_("Distribution")</label>
- </div>
- <div class="repository-edit-wrapper-controls">
- <input id="repository-edit-urlargs-textbox" class="deb" name="config[dist]" type="text" />
- </div>
- </div>
- <div class="repository-mirrorlist yum">
- <div class="repository-edit-wrapper-label">
- <label for="repository-edit-urlargs-textbox">$_("Mirror List URL")</label>
- </div>
- <div class="repository-edit-wrapper-controls">
- <input id="repository-edit-urlargs-textbox" class="yum" name="config[mirrorlist]" type="text" />
- </div>
- </div>
- <div class="repository-comps deb">
- <div class="repository-edit-wrapper-label">
- <label for="repository-edit-urlargs-textbox">$_("Components")</label>
- </div>
- <div class="repository-edit-wrapper-controls">
- <input id="repository-edit-urlargs-textbox" class="deb" name="config[comps]" type="text" />
- </div>
- </div>
- <div class="repository-gpgkey yum">
- <div class="repository-edit-wrapper-label">
- <label for="repository-edit-gpgkey-textbox">$_("GPG Key")</label>
- </div>
- <div class="repository-edit-wrapper-controls">
- <input id="repository-edit-gpgkey-textbox" class="yum" name="config[gpgkey]" type="text" />
- </div>
- </div>
- <div class="repository-gpgcheck yum">
- <div class="repository-edit-wrapper-label">
- <label>$_("GPG Check")</label>
- </div>
- <div class="repository-edit-wrapper-controls">
- <input id="repository-edit-gpgcheck-radio-true" class="yum" name="config[gpgcheck]" type="radio" value="true" />
- <label for="repository-edit-gpgcheck-radio-true">$_("Yes")</label>
- <input id="repository-edit-gpgcheck-radio-false" class="yum" name="config[gpgcheck]" type="radio" value="false" />
- <label for="repository-edit-gpgcheck-radio-false">$_("No")</label>
- </div>
- </div>
- </fieldset>
- </section>
- </div>
- <footer>
- <div class="btn-group">
- <button type="submit" id="repository-edit-button-save" class="btn-normal">
- <span class="text">$_("Save")</span>
- </button>
- <button type="button" id="repository-edit-button-cancel" class="close btn-normal">
- <span class="text">$_("Cancel")</span>
- </button>
- </div>
- </footer>
- </form>
-</div>
-<script type="text/javascript">
- kimchi.repository_edit_main();
-</script>
diff --git a/plugins/kimchi/yumparser.py b/plugins/kimchi/yumparser.py
deleted file mode 100644
index 74f9fa0..0000000
--- a/plugins/kimchi/yumparser.py
+++ /dev/null
@@ -1,283 +0,0 @@
-#
-# Project Kimchi
-#
-# Copyright IBM, Corp. 2015
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-import subprocess
-from os import listdir
-from os.path import isfile, splitext
-
-
-class YumRepoObject(object):
-
- def __init__(self, repo_id, repofile):
- self.repo_id = repo_id
- self.name = None
- self.baseurl = None
- self.enabled = True
- self.gpgcheck = True
- self.gpgkey = None
- self.metalink = None
- self.mirrorlist = None
- self.repofile = repofile
- self.string_attrs = ['baseurl', 'gpgkey', 'name',
- 'metalink', 'mirrorlist']
- self.boolean_attrs = ['enabled', 'gpgcheck']
-
- def set_attribute(self, key, strvalue):
- if key in self.string_attrs:
- setattr(self, key, strvalue)
- elif key in self.boolean_attrs:
- setattr(self, key, (strvalue == '1'))
-
- def get_attribute_str(self, key):
- if key not in self.get_attributes():
- return None
-
- if key in self.boolean_attrs:
- str_value = '1' if getattr(self, key) is True else '0'
- else:
- str_value = getattr(self, key)
-
- if str_value is None:
- return None
-
- return key + '=' + str_value
-
- def get_attributes(self):
- return self.string_attrs + self.boolean_attrs
-
- def enable(self):
- self.enabled = True
-
- def disable(self):
- self.enabled = False
-
- def __str__(self):
- str_obj = '[' + self.repo_id + ']' + '\n'
- for key in self.get_attributes():
- if self.get_attribute_str(key) is not None:
- str_obj += self.get_attribute_str(key) + '\n'
- return str_obj
-
-
-def get_repo_files():
- def _is_repository_file(f):
- _, f_extension = splitext(f)
- return isfile(f) and (f_extension == '.repo')
-
- YUM_REPO_DIR = '/etc/yum.repos.d'
- return [YUM_REPO_DIR+'/'+f for f in listdir(YUM_REPO_DIR)
- if _is_repository_file(YUM_REPO_DIR+'/'+f)]
-
-
-def _ignore_line_repo_file(line):
- return line.startswith("#") or '=' not in line
-
-
-def _get_repos_from_file(repo_file):
- repos_from_file = {}
- current_repo = None
- current_repo_id = None
- with open(repo_file) as f:
- for line in f.readlines():
- line = line.strip()
- if line.startswith("["):
- if current_repo is not None:
- repos_from_file[current_repo_id] = current_repo
- current_repo_id = line.strip('[]')
- current_repo = YumRepoObject(current_repo_id, repo_file)
- continue
- if _ignore_line_repo_file(line):
- continue
- key, value = line.split('=', 1)
- key = key.strip()
- value = value.strip()
- current_repo.set_attribute(key, value)
-
- # add the last repo from file.
- if current_repo is not None:
- repos_from_file[current_repo_id] = current_repo
-
- return repos_from_file
-
-
-def get_yum_repositories():
- repo_files = get_repo_files()
- repos = {}
- for yum_repo in repo_files:
- repos.update(_get_repos_from_file(yum_repo))
-
- return repos
-
-
-def _retrieve_repo_line_index(data, repo):
- repo_entry = '[' + repo.repo_id + ']\n'
- try:
- repo_index = data.index(repo_entry)
- except:
- return None
- return repo_index
-
-
-def _update_repo_file_data(data, repo, repo_index):
- remaining_repo_attrs = repo.get_attributes()
-
- for i in range(repo_index + 1, len(data)):
- line = data[i].strip()
- if line.startswith('['):
- break
- if _ignore_line_repo_file(line):
- continue
- key, _ = line.split('=', 1)
- key = key.strip()
- attr_str = repo.get_attribute_str(key)
- if attr_str is None:
- continue
- remaining_repo_attrs.remove(key)
- data[i] = attr_str + '\n'
-
- for attr in remaining_repo_attrs:
- attr_str = repo.get_attribute_str(attr)
- if attr_str is None:
- continue
- data.insert(repo_index+1, attr_str + '\n')
-
- return data
-
-
-def write_repo_to_file(repo):
- with open(repo.repofile) as f:
- data = f.readlines()
-
- repo_index = _retrieve_repo_line_index(data, repo)
- if repo_index is None:
- return
-
- data = _update_repo_file_data(data, repo, repo_index)
-
- with open(repo.repofile, 'w') as f:
- f.writelines(data)
-
-
-def _get_last_line_repo(data, repo_index):
- stop_delete_index = None
- for i in range(repo_index+1, len(data)):
- line = data[i].strip()
- if line.startswith('['):
- stop_delete_index = i - 1
- break
- if stop_delete_index is None:
- stop_delete_index = len(data) - 1
-
- return stop_delete_index
-
-
-def _remove_repo_file_data(data, repo_index):
- last_line_repo = _get_last_line_repo(data, repo_index)
- for i in range(last_line_repo, repo_index - 1, -1):
- data.pop(i)
- return data
-
-
-def delete_repo_from_file(repo):
- with open(repo.repofile) as f:
- data = f.readlines()
-
- repo_index = _retrieve_repo_line_index(data, repo)
- if repo_index is None:
- return
-
- data = _remove_repo_file_data(data, repo_index)
-
- with open(repo.repofile, 'w') as f:
- f.writelines(data)
-
-
-class YumUpdatePackageObject(object):
-
- def __init__(self, name, arch, version, repo):
- self.name = name
- self.arch = arch
- self.version = version
- self.ui_from_repo = repo
-
-
-def _include_line_checkupdate_output(line):
- tokens = line.split()
-
- if len(tokens) != 3:
- return False
-
- if '.' not in tokens[0]:
- return False
-
- return True
-
-
-def _ignore_obsoleting_packages_in(output):
- out = ''
- for l in output.split('\n'):
- if 'Obsoleting ' in l:
- break
- out += l + '\n'
- return out
-
-
-def _filter_lines_checkupdate_output(output):
- if output is None:
- return []
-
- output = _ignore_obsoleting_packages_in(output)
-
- out = [l for l in output.split('\n')
- if _include_line_checkupdate_output(l)]
- return out
-
-
-def _get_yum_checkupdate_output():
- cmd = ['yum', 'check-update', '-d0']
- yum_update_cmd = subprocess.Popen(cmd,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- out, error = yum_update_cmd.communicate()
- return_code = yum_update_cmd.returncode
- if return_code == 1:
- return None
-
- return out
-
-
-def get_yum_packages_list_update(checkupdate_output=None):
- if checkupdate_output is None:
- checkupdate_output = _get_yum_checkupdate_output()
-
- filtered_output = _filter_lines_checkupdate_output(checkupdate_output)
-
- packages = []
- for line in filtered_output:
- line = line.split()
- index = 0
- name_arch = line[index]
- index += 1
- version = line[index]
- index += 1
- repo = line[index]
- name, arch = name_arch.rsplit('.', 1)
- packages.append(YumUpdatePackageObject(name, arch, version, repo))
-
- return packages
--
2.1.0
1
0
Signed-off-by: Aline Manera <alinefm(a)linux.vnet.ibm.com>
---
po/de_DE.po | 1785 +++++++++++++++++++++--------------------------------
po/en_US.po | 5 +-
po/es_ES.po | 1768 +++++++++++++++++++++-------------------------------
po/fr_FR.po | 1779 +++++++++++++++++++++--------------------------------
po/it_IT.po | 1747 ++++++++++++++++++++--------------------------------
po/ja_JP.po | 732 ++++++++++++----------
po/kimchi.pot | 5 +-
po/ko_KR.po | 1824 +++++++++++++++++++-----------------------------------
po/pt_BR.po | 1189 ++++++++++++++++++-----------------
po/ru_RU.po | 1779 ++++++++++++++++++++---------------------------------
po/zh_CN.po | 1903 +++++++++++++++++++-------------------------------------
po/zh_TW.po | 1905 +++++++++++++++++++--------------------------------------
12 files changed, 6402 insertions(+), 10019 deletions(-)
diff --git a/po/de_DE.po b/po/de_DE.po
index 1347df6..439dce4 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -6,57 +6,49 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-06-24 09:39-0300\n"
+"POT-Creation-Date: 2015-08-21 09:52-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
-"Language: en_US\n"
+"Language: de_DE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"Plural-Forms: nplurals=2; plural=n != 1;"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
#, python-format
msgid "Unknown parameter %(value)s"
-msgstr ""
-"Unbekannter Parameter %(value)s"
+msgstr "Unbekannter Parameter %(value)s"
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr ""
-"Löschen ist nicht zulässig für %(resource)s"
+msgstr "Löschen ist nicht zulässig für %(resource)s"
#, python-format
msgid "%(resource)s does not implement update method"
-msgstr ""
-"%(resource)s implementiert keine Aktualisierungsmethode"
+msgstr "%(resource)s implementiert keine Aktualisierungsmethode"
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr ""
-"Erstellen ist nicht zulässig für %(resource)s"
+msgstr "Erstellen ist nicht zulässig für %(resource)s"
msgid "Unable to parse JSON request"
-msgstr ""
-"JSON-Anfrage konnte nicht analysiert werden"
+msgstr "JSON-Anfrage konnte nicht analysiert werden"
msgid "This API only supports JSON"
-msgstr ""
-"Diese API unterstützt nur JSON"
+msgstr "Diese API unterstützt nur JSON"
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
-msgstr ""
-"Parameter entsprechen nicht der Anforderung im Schema: %(err)s"
+msgstr "Parameter entsprechen nicht der Anforderung im Schema: %(err)s"
msgid "You don't have permission to perform this operation."
msgstr ""
"Sie verfügen nicht über die Berechtigung zur Ausführung dieser Operation."
msgid "Datastore is not initiated in the model object."
-msgstr ""
-"Datenspeicher wird nicht im Modellobjekt initialisiert."
+msgstr "Datenspeicher wird nicht im Modellobjekt initialisiert."
#, python-format
msgid "Unable to start task due error: %(err)s"
@@ -66,99 +58,92 @@ msgstr ""
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
msgstr ""
-"Zeitlimit von %(seconds)s Sekunden ist während der Ausführung von Task '%(task)s' abgelaufen."
+"Zeitlimit von %(seconds)s Sekunden ist während der Ausführung von Task "
+"'%(task)s' abgelaufen."
#, python-format
msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
msgstr ""
-"Authentifizierung für Benutzer '%(username)s' fehlgeschlagen. [Fehlercode: %(code)s]"
+"Authentifizierung für Benutzer '%(username)s' fehlgeschlagen. [Fehlercode: "
+"%(code)s]"
msgid "You are not authorized to access Kimchi"
-msgstr ""
-"Sie sind nicht berechtigt, auf Kimchi zuzugreifen"
+msgstr "Sie sind nicht berechtigt, auf Kimchi zuzugreifen"
#, python-format
msgid "Specify %(item)s to login into Kimchi"
-msgstr ""
-"Geben Sie %(item)s an, um sich bei Kimchi anzumelden"
+msgstr "Geben Sie %(item)s an, um sich bei Kimchi anzumelden"
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
msgstr ""
-"Benutzer %(user_id)s mit den angegebenen LDAP-Einstellungen wurde nicht gefunden."
+"Benutzer %(user_id)s mit den angegebenen LDAP-Einstellungen wurde nicht "
+"gefunden."
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
-msgstr ""
-"Ungültige LDAP-Konfiguration: %(item)s : %(value)s"
+msgstr "Ungültige LDAP-Konfiguration: %(item)s : %(value)s"
msgid "Unknown \"_cap\" specified"
-msgstr ""
-"Unbekanntes Element \"_cap\" angegeben"
+msgstr "Unbekanntes Element \"_cap\" angegeben"
msgid "\"_passthrough\" should be \"true\" or \"false\""
-msgstr ""
-"Für \"_passthrough\" muss \"true\" oder \"false\" angegeben werden"
+msgstr "Für \"_passthrough\" muss \"true\" oder \"false\" angegeben werden"
msgid "\"_passthrough_affected_by\" should be a device name string"
msgstr ""
-"Für \"_passthrough_affected_by\" muss eine Einheitennamenszeichenfolge angegeben werden"
+"Für \"_passthrough_affected_by\" muss eine Einheitennamenszeichenfolge "
+"angegeben werden"
+
+msgid "\"_available_only\" should be \"true\" or \"false\""
+msgstr "Für \"_available_only\" muss \"true\" oder \"false\" angegeben werden"
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
-msgstr ""
-"Fehler beim Abrufen von Blockeinheiten. Details: %(err)s"
+msgstr "Fehler beim Abrufen von Blockeinheiten. Details: %(err)s"
#, python-format
msgid "Error while getting block device information for %(device)s."
-msgstr ""
-"Fehler beim Abrufen von Blockeinheiteninformationen für %(device)s."
+msgstr "Fehler beim Abrufen von Blockeinheiteninformationen für %(device)s."
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr ""
-"Distro-Datei konnte nicht gefunden werden: %(filename)s"
+msgstr "Distro-Datei konnte nicht gefunden werden: %(filename)s"
#, python-format
msgid ""
"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
msgstr ""
-"Distro-Datei konnte nicht analysiert werden: %(filename)s. Stellen Sie sicher, dass es sich um eine JSON-Datei handelt."
+"Distro-Datei konnte nicht analysiert werden: %(filename)s. Stellen Sie "
+"sicher, dass es sich um eine JSON-Datei handelt."
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
-msgstr ""
-"Fehler beim Anmelden bei iSCSI-Hostziel %(portal)s. Details: %(err)s"
+msgstr "Fehler beim Anmelden bei iSCSI-Hostziel %(portal)s. Details: %(err)s"
#, python-format
msgid "Unable to login to iSCSI host %(host)s target %(target)s"
-msgstr ""
-"Anmeldung bei iSCSI-Host %(host)s Ziel %(target)s nicht möglich"
+msgstr "Anmeldung bei iSCSI-Host %(host)s Ziel %(target)s nicht möglich"
#, python-format
msgid "Unable to find ISO file %(filename)s"
-msgstr ""
-"ISO-Datei %(filename)s konnte nicht gefunden werden"
+msgstr "ISO-Datei %(filename)s konnte nicht gefunden werden"
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr ""
-"Die ISO-Datei %(filename)s ist nicht bootfähig"
+msgstr "Die ISO-Datei %(filename)s ist nicht bootfähig"
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
-msgstr ""
-"Die ISO-Datei %(filename)s hat keinen gültigen El Torito-Bootsatz"
+msgstr "Die ISO-Datei %(filename)s hat keinen gültigen El Torito-Bootsatz"
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
-msgstr ""
-"Ungültiger El Torito-Prüfeintrag in ISO-Datei %(filename)s"
+msgstr "Ungültiger El Torito-Prüfeintrag in ISO-Datei %(filename)s"
#, python-format
msgid "Invalid El Torito boot indicator in ISO %(filename)s"
-msgstr ""
-"Ungültiger El Torito-Boot-Indikator in ISO-Datei %(filename)s"
+msgstr "Ungültiger El Torito-Boot-Indikator in ISO-Datei %(filename)s"
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
@@ -168,7 +153,8 @@ msgstr ""
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
msgstr ""
-"Ungültiges Format beim Lesen des Datenträgerdeskriptors in ISO-Datei %(filename)s"
+"Ungültiges Format beim Lesen des Datenträgerdeskriptors in ISO-Datei "
+"%(filename)s"
#, python-format
msgid ""
@@ -178,64 +164,59 @@ msgid ""
"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
"'path_to_iso'.Details: %(err)s"
msgstr ""
-"Der Hypervisor hat nicht die Berechtigung, die ISO-Datei %(filename)s zu verwenden."
-"Verschieben Sie sie entweder nach /var/lib/libvirt oder setzen Sie, sofern möglich, die Suchberechtigung "
-"auf Dateizugriffssteuerungslisten für den Benutzer '%(user)s' oder fügen Sie "
-"'%(user)s' der ISO-Pfadgruppe hinzu oder (nicht empfohlen) 'chmod -R o+x "
-"'path_to_iso'. Details: %(err)s"
+"Der Hypervisor hat nicht die Berechtigung, die ISO-Datei %(filename)s zu "
+"verwenden.Verschieben Sie sie entweder nach /var/lib/libvirt oder setzen "
+"Sie, sofern möglich, die Suchberechtigung auf Dateizugriffssteuerungslisten "
+"für den Benutzer '%(user)s' oder fügen Sie '%(user)s' der ISO-Pfadgruppe "
+"hinzu oder (nicht empfohlen) 'chmod -R o+x 'path_to_iso'. Details: %(err)s"
msgid "An error occurred when probing image OS information."
-msgstr ""
-"Beim Prüfen der OS-Informationen des Image ist ein Fehler aufgetreten."
+msgstr "Beim Prüfen der OS-Informationen des Image ist ein Fehler aufgetreten."
msgid "No OS information found in given image."
-msgstr ""
-"Im angegebenen Image wurden keine OS-Informationen gefunden."
+msgstr "Im angegebenen Image wurden keine OS-Informationen gefunden."
#, python-format
msgid "Unable to read image file %(filename)s"
-msgstr ""
-"Die Imagedatei %(filename)s konnte nicht gelesen werden"
+msgstr "Die Imagedatei %(filename)s konnte nicht gelesen werden"
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
msgstr ""
-"Bei der Imagedatei muss es sich um eine auf dem System vorhandene Datei handeln. %(filename)s ist keine gültige "
-"Eingabe."
+"Bei der Imagedatei muss es sich um eine auf dem System vorhandene Datei "
+"handeln. %(filename)s ist keine gültige Eingabe."
#, python-format
msgid "Virtual machine %(name)s already exists"
-msgstr ""
-"Virtuelle Maschine %(name)s ist bereits vorhanden"
+msgstr "Virtuelle Maschine %(name)s ist bereits vorhanden"
#, python-format
msgid "Virtual machine %(name)s does not exist"
-msgstr ""
-"Virtuelle Maschine %(name)s ist nicht vorhanden"
+msgstr "Virtuelle Maschine %(name)s ist nicht vorhanden"
#, python-format
msgid ""
"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
"in use or the virtual machine is not powered off."
msgstr ""
-"Virtuelle Maschine %(name)s konnte nicht umbenannt werden. Der Name %(new_name)s ist bereits belegt "
-"oder die virtuelle Maschine wurde nicht ausgeschaltet."
+"Virtuelle Maschine %(name)s konnte nicht umbenannt werden. Der Name "
+"%(new_name)s ist bereits belegt oder die virtuelle Maschine wurde nicht "
+"ausgeschaltet."
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
msgstr ""
-"Screenshot für gestoppte virtuelle Maschine %(name)s konnte nicht abgerufen werden"
+"Screenshot für gestoppte virtuelle Maschine %(name)s konnte nicht abgerufen "
+"werden"
msgid "Remote ISO image is not supported by this server."
-msgstr ""
-"Fernes ISO-Image wird von diesem Server nicht unterstützt."
+msgstr "Fernes ISO-Image wird von diesem Server nicht unterstützt."
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
-msgstr ""
-"Screenshot wird auf virtueller Maschine %(name)s nicht unterstützt"
+msgstr "Screenshot wird auf virtueller Maschine %(name)s nicht unterstützt"
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
@@ -245,7 +226,8 @@ msgstr ""
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Virtuelle Maschine %(name)s konnte nicht aktualisiert werden. Details: %(err)s"
+"Virtuelle Maschine %(name)s konnte nicht aktualisiert werden. Details: "
+"%(err)s"
#, python-format
msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
@@ -255,33 +237,30 @@ msgstr ""
#, python-format
msgid "Unable to connect to powered off virtual machine %(name)s."
msgstr ""
-"Verbindung zu ausgeschalteter virtueller Maschine %(name)s konnte nicht hergestellt werden."
+"Verbindung zu ausgeschalteter virtueller Maschine %(name)s konnte nicht "
+"hergestellt werden."
msgid "Virtual machine name must be a string without slashes (/)"
msgstr ""
-"Name der virtuellen Maschine muss eine Zeichenfolge ohne Schrägstriche (/) sein"
+"Name der virtuellen Maschine muss eine Zeichenfolge ohne Schrägstriche (/) "
+"sein"
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
-msgstr ""
-"Ungültiger Vorlagen-URI %(value)s für virtuelle Maschine angegeben"
+msgstr "Ungültiger Vorlagen-URI %(value)s für virtuelle Maschine angegeben"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for virtual machine"
-msgstr ""
-"Ungültiger Speicherpool-URI %(value)s für virtuelle Maschine angegeben"
+msgstr "Ungültiger Speicherpool-URI %(value)s für virtuelle Maschine angegeben"
msgid "Supported virtual machine graphics are Spice or VNC"
-msgstr ""
-"Unterstützte Grafiken für virtuelle Maschine sind Spice oder VNC"
+msgstr "Unterstützte Grafiken für virtuelle Maschine sind Spice oder VNC"
msgid "Graphics address to listen on must be IPv4 or IPv6"
-msgstr ""
-"Zu überwachende Grafikadresse muss IPv4 oder IPv6 sein"
+msgstr "Zu überwachende Grafikadresse muss IPv4 oder IPv6 sein"
msgid "Specify a template to create a virtual machine from"
-msgstr ""
-"Vorlage angeben, aus der eine virtuelle Maschine erstellt werden soll"
+msgstr "Vorlage angeben, aus der eine virtuelle Maschine erstellt werden soll"
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
@@ -291,7 +270,8 @@ msgstr ""
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Virtuelle Maschine %(name)s konnte nicht ausgeschaltet werden. Details: %(err)s"
+"Virtuelle Maschine %(name)s konnte nicht ausgeschaltet werden. Details: "
+"%(err)s"
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
@@ -301,48 +281,44 @@ msgstr ""
#, python-format
msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Virtuelle Maschine %(name)s konnte nicht zurückgesetzt werden. Details: %(err)s"
+"Virtuelle Maschine %(name)s konnte nicht zurückgesetzt werden. Details: "
+"%(err)s"
msgid "User name list must be an array"
-msgstr ""
-"Benutzernamensliste muss ein Array sein"
+msgstr "Benutzernamensliste muss ein Array sein"
msgid "User name must be a string"
-msgstr ""
-"Benutzername muss eine Zeichenfolge sein"
+msgstr "Benutzername muss eine Zeichenfolge sein"
msgid "Group name list must be an array"
-msgstr ""
-"Gruppennamensliste muss ein Array sein"
+msgstr "Gruppennamensliste muss ein Array sein"
msgid "Group name must be a string"
-msgstr ""
-"Gruppenname muss eine Zeichenfolge sein"
+msgstr "Gruppenname muss eine Zeichenfolge sein"
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr ""
-"Benutzer '%(users)s' nicht vorhanden"
+msgstr "Benutzer '%(users)s' nicht vorhanden"
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr ""
-"Gruppe(n) '%(groups)s' nicht vorhanden"
+msgstr "Gruppe(n) '%(groups)s' nicht vorhanden"
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Virtuelle Maschine %(name)s konnte nicht heruntergefahren werden. Details: %(err)s"
+"Virtuelle Maschine %(name)s konnte nicht heruntergefahren werden. Details: "
+"%(err)s"
#, python-format
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Zugriff auf die Metadaten der virtuellen Maschine %(name)s nicht möglich. Details: %(err)s"
+"Zugriff auf die Metadaten der virtuellen Maschine %(name)s nicht möglich. "
+"Details: %(err)s"
msgid "The guest console password must be a string."
-msgstr ""
-"Das Konsolenkennwort des Gastes muss eine Zeichenfolge sein."
+msgstr "Das Konsolenkennwort des Gastes muss eine Zeichenfolge sein."
msgid "The life time for the guest console password must be a number."
msgstr ""
@@ -350,13 +326,13 @@ msgstr ""
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
-msgstr ""
-"Die virtuelle Maschine '%(name)s' muss vor dem Klonen gestoppt werden."
+msgstr "Die virtuelle Maschine '%(name)s' muss vor dem Klonen gestoppt werden."
#, python-format
msgid "Insufficient disk space to clone virtual machine '%(name)s'"
msgstr ""
-"Nicht genügend Plattenspeicherplatz zum Klonen der virtuellen Maschine '%(name)s' vorhanden"
+"Nicht genügend Plattenspeicherplatz zum Klonen der virtuellen Maschine "
+"'%(name)s' vorhanden"
#, python-format
msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
@@ -365,40 +341,45 @@ msgstr ""
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
-msgstr ""
-"Ungültige Operation für nicht permanente virtuelle Maschine %(name)s"
+msgstr "Ungültige Operation für nicht permanente virtuelle Maschine %(name)s"
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
msgstr ""
-"Die virtuelle Maschine '%(name)s' kann nicht ausgesetzt werden, weil sie momentan nicht aktiv ist."
+"Die virtuelle Maschine '%(name)s' kann nicht ausgesetzt werden, weil sie "
+"momentan nicht aktiv ist."
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
msgstr ""
-"Virtuelle Maschine '%(name)s' konnte nicht ausgesetzt werden. Details: %(err)s"
+"Virtuelle Maschine '%(name)s' konnte nicht ausgesetzt werden. Details: "
+"%(err)s"
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
msgstr ""
-"Die virtuelle Maschine '%(name)s' kann nicht fortgesetzt werden, weil sie nicht angehalten wurde."
+"Die virtuelle Maschine '%(name)s' kann nicht fortgesetzt werden, weil sie "
+"nicht angehalten wurde."
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
msgstr ""
-"Virtuelle Maschine '%(name)s' konnte nicht fortgesetzt werden. Details: %(err)s"
+"Virtuelle Maschine '%(name)s' konnte nicht fortgesetzt werden. Details: "
+"%(err)s"
msgid "Memory assigned is higher then the maximum allowed in the host."
msgstr ""
-"Der zugewiesene Speicher überschreitet den auf dem Host zulässigen Maximalwert."
+"Der zugewiesene Speicher überschreitet den auf dem Host zulässigen "
+"Maximalwert."
#, python-format
msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
-"Die Live-Speicheraktualisierung wird von der virtuellen Maschine '%(name)s' nicht unterstützt. Aktualisieren Sie den Speicher mit "
-"der Maschine im Offlinemodus, um diese Funktion zu aktivieren."
+"Die Live-Speicheraktualisierung wird von der virtuellen Maschine '%(name)s' "
+"nicht unterstützt. Aktualisieren Sie den Speicher mit der Maschine im "
+"Offlinemodus, um diese Funktion zu aktivieren."
msgid "Only increase memory is allowed in active VMs"
msgstr ""
@@ -408,8 +389,8 @@ msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
msgstr ""
-"Für die Live-Speicheraktualisierung muss der neue Speicherwert gleich dem alten Speicherwert plus "
-"ein Vielfaches von 1024 Mebibyte sein"
+"Für die Live-Speicheraktualisierung muss der neue Speicherwert gleich dem "
+"alten Speicherwert plus ein Vielfaches von 1024 Mebibyte sein"
msgid "There are not enough free slots of 1024 Mib in the guest."
msgstr ""
@@ -419,13 +400,12 @@ msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
msgstr ""
-"Die libvirt-Version des Hosts unterstützt keine Speichereinheiten. Für libvirt muss >= "
-"1.2.14 angegeben sein"
+"Die libvirt-Version des Hosts unterstützt keine Speichereinheiten. Für "
+"libvirt muss >= 1.2.14 angegeben sein"
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
-msgstr ""
-"Fehler beim Anschließen der Speichereinheit. Details: %(error)s"
+msgstr "Fehler beim Anschließen der Speichereinheit. Details: %(error)s"
#, python-format
msgid ""
@@ -445,23 +425,23 @@ msgid ""
"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
"iommu=1."
msgstr ""
-"Keine IOMMU-Gruppen gefunden. Für den Host-PCI-Durchgriff muss die IOMMU-Gruppe "
-"ordnungsgemäß funktionieren. Aktivieren Sie Intel VT-d oder AMD IOMMU in Ihrem BIOS "
-"und prüfen Sie dann, ob der Kernel mit IOMMU-Unterstützung kompiliert wurde. Fügen Sie "
-"Ihrem Kernelparameter für die Intel-CPU intel_iommu=on in /boot/grub2/grub.conf hinzu. "
-"Für AMD-CPU müssen Sie iommu=pt iommu=1 hinzufügen."
+"Keine IOMMU-Gruppen gefunden. Für den Host-PCI-Durchgriff muss die IOMMU-"
+"Gruppe ordnungsgemäß funktionieren. Aktivieren Sie Intel VT-d oder AMD IOMMU "
+"in Ihrem BIOS und prüfen Sie dann, ob der Kernel mit IOMMU-Unterstützung "
+"kompiliert wurde. Fügen Sie Ihrem Kernelparameter für die Intel-CPU "
+"intel_iommu=on in /boot/grub2/grub.conf hinzu. Für AMD-CPU müssen Sie "
+"iommu=pt iommu=1 hinzufügen."
msgid "\"name\" should be a device name string"
-msgstr ""
-"Für \"name\" muss eine Einheitennamenszeichenfolge angegeben werden"
+msgstr "Für \"name\" muss eine Einheitennamenszeichenfolge angegeben werden"
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
msgstr ""
-"Die Einheit %(name)s wird vermutlich vom Host benutzt. Es kann keine Verbindung der Einheit zum "
-"Gast hergestellt werden."
+"Die Einheit %(name)s wird vermutlich vom Host benutzt. Es kann keine "
+"Verbindung der Einheit zum Gast hergestellt werden."
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
@@ -472,27 +452,29 @@ msgstr ""
msgid ""
"Network %(network)s specified for virtual machine %(name)s does not exist"
msgstr ""
-"Das Netz %(network)s, das für die virtuelle Maschine %(name)s angegeben wurde, ist nicht vorhanden"
+"Das Netz %(network)s, das für die virtuelle Maschine %(name)s angegeben "
+"wurde, ist nicht vorhanden"
msgid "Supported virtual machine interfaces type is only network"
-msgstr ""
-"Unterstützter Schnittstellentyp einer virtuellen Maschine ist nur Netz"
+msgstr "Unterstützter Schnittstellentyp einer virtuellen Maschine ist nur Netz"
msgid "Network name for virtual machine interface must be a string"
msgstr ""
-"Netzname für Schnittstelle einer virtuellen Maschine muss eine Zeichenfolge sein"
+"Netzname für Schnittstelle einer virtuellen Maschine muss eine Zeichenfolge "
+"sein"
msgid "Invalid network model card specified for virtual machine interface"
msgstr ""
-"Ungültige Netzmodellkarte für Schnittstelle einer virtuellen Maschine angegeben"
+"Ungültige Netzmodellkarte für Schnittstelle einer virtuellen Maschine "
+"angegeben"
msgid "Specify type and network to add a new virtual machine interface"
msgstr ""
-"Geben Sie Typ und Netz an, um eine neue Schnittstelle für eine virtuelle Maschine hinzuzufügen"
+"Geben Sie Typ und Netz an, um eine neue Schnittstelle für eine virtuelle "
+"Maschine hinzuzufügen"
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
-msgstr ""
-"MAC-Adresse muss folgendes Format verwenden: FF:FF:FF:FF:FF:FF"
+msgstr "MAC-Adresse muss folgendes Format verwenden: FF:FF:FF:FF:FF:FF"
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
@@ -500,8 +482,7 @@ msgstr ""
"MAC-Adresse %(mac)s ist in virtueller Maschine %(name)s bereits vorhanden"
msgid "Invalid MAC Address"
-msgstr ""
-"Ungültige MAC-Adresse"
+msgstr "Ungültige MAC-Adresse"
msgid "Cannot change MAC address of a running virtual machine"
msgstr ""
@@ -509,80 +490,75 @@ msgstr ""
#, python-format
msgid "Template %(name)s already exists"
-msgstr ""
-"Vorlage %(name)s ist bereits vorhanden"
+msgstr "Vorlage %(name)s ist bereits vorhanden"
#, python-format
msgid ""
"Network '%(network)s' specified for template %(template)s does not exist"
msgstr ""
-"Netz '%(network)s', das für Vorlage %(template)s angegeben wurde, ist nicht vorhanden"
+"Netz '%(network)s', das für Vorlage %(template)s angegeben wurde, ist nicht "
+"vorhanden"
#, python-format
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
msgstr ""
-"Speicherpool %(pool)s, der für Vorlage %(template)s angegeben wurde, ist nicht vorhanden"
+"Speicherpool %(pool)s, der für Vorlage %(template)s angegeben wurde, ist "
+"nicht vorhanden"
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
msgstr ""
-"Speicherpool %(pool)s, der für Vorlage %(template)s angegeben wurde, ist nicht aktiv"
+"Speicherpool %(pool)s, der für Vorlage %(template)s angegeben wurde, ist "
+"nicht aktiv"
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr ""
-"Ungültiger Parameter '%(param)s' für CD-ROM angegeben."
+msgstr "Ungültiger Parameter '%(param)s' für CD-ROM angegeben."
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
msgstr ""
-"Netz %(network)s, das für Vorlage %(template)s angegeben wurde, ist nicht aktiv"
+"Netz %(network)s, das für Vorlage %(template)s angegeben wurde, ist nicht "
+"aktiv"
msgid "Template name must be a string"
-msgstr ""
-"Vorlagenname muss eine Zeichenfolge sein"
+msgstr "Vorlagenname muss eine Zeichenfolge sein"
msgid "Template icon must be a path to the image"
-msgstr ""
-"Vorlagensymbol muss ein Pfad zum Image sein"
+msgstr "Vorlagensymbol muss ein Pfad zum Image sein"
msgid "Template distribution must be a string"
-msgstr ""
-"Vorlagenverteilung muss eine Zeichenfolge sein"
+msgstr "Vorlagenverteilung muss eine Zeichenfolge sein"
msgid "Template distribution version must be a string"
-msgstr ""
-"Vorlagenverteilungsversion muss eine Zeichenfolge sein"
+msgstr "Vorlagenverteilungsversion muss eine Zeichenfolge sein"
msgid "The number of CPUs must be an integer greater than 0"
-msgstr ""
-"Die Anzahl der CPUs muss eine Ganzzahl größer als 0 sein"
+msgstr "Die Anzahl der CPUs muss eine Ganzzahl größer als 0 sein"
msgid "Amount of memory (MB) must be an integer greater than 512"
-msgstr ""
-"Speicherkapazität (MB) muss eine Ganzzahl größer als 512 sein"
+msgstr "Speicherkapazität (MB) muss eine Ganzzahl größer als 512 sein"
msgid "Template CDROM must be a local or remote ISO file"
-msgstr ""
-"Vorlagen-CD-ROM muss eine lokale oder ferne ISO-Datei sein"
+msgstr "Vorlagen-CD-ROM muss eine lokale oder ferne ISO-Datei sein"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for template"
-msgstr ""
-"Ungültiger Speicherpool-URI %(value)s für Vorlage angegeben"
+msgstr "Ungültiger Speicherpool-URI %(value)s für Vorlage angegeben"
msgid "Specify an ISO image as CDROM or a base image to create a template"
msgstr ""
-"Geben Sie ein ISO-Image als CD-ROM oder ein Basisimage an, um eine Vorlage zu erstellen"
+"Geben Sie ein ISO-Image als CD-ROM oder ein Basisimage an, um eine Vorlage "
+"zu erstellen"
msgid "All networks for the template must be specified in a list."
-msgstr ""
-"Alle Netze für die Vorlage müssen in einer Liste angegeben werden."
+msgstr "Alle Netze für die Vorlage müssen in einer Liste angegeben werden."
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
msgstr ""
-"Geben Sie einen Datenträger für eine Vorlage an, wenn der Speicherpool iSCSI oder SCSI ist"
+"Geben Sie einen Datenträger für eine Vorlage an, wenn der Speicherpool iSCSI "
+"oder SCSI ist"
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
@@ -600,24 +576,21 @@ msgstr ""
"Vorlage kann aufgrund des folgenden Fehlers nicht gelöscht werden: %(err)s"
msgid "Disk size must be an integer greater than 1GB."
-msgstr ""
-"Plattengröße muss eine Ganzzahl größer als 1 GB sein."
+msgstr "Plattengröße muss eine Ganzzahl größer als 1 GB sein."
msgid "Template base image must be a valid local image file"
-msgstr ""
-"Basisimage der Vorlage muss eine gültige lokale Imagedatei sein"
+msgstr "Basisimage der Vorlage muss eine gültige lokale Imagedatei sein"
#, python-format
msgid "Cannot identify base image %(path)s format"
-msgstr ""
-"Format für %(path)s des Basisimage kann nicht ermittelt werden"
+msgstr "Format für %(path)s des Basisimage kann nicht ermittelt werden"
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
msgstr ""
-"Bei der Angabe der CPU-Topologie müssen VCPUs ein Produkt der Sockets, Kerne und "
-"Threads sein."
+"Bei der Angabe der CPU-Topologie müssen VCPUs ein Produkt der Sockets, Kerne "
+"und Threads sein."
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
@@ -630,51 +603,44 @@ msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"Ungültiges Plattenimageformat. Gültige Formate: bochs, cloop, cow, dmg, qcow, "
-"qcow2, qed, raw, vmdk, vpc."
+"Ungültiges Plattenimageformat. Gültige Formate: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
#, python-format
msgid "Storage pool %(name)s already exists"
-msgstr ""
-"Speicherpool %(name)s ist bereits vorhanden"
+msgstr "Speicherpool %(name)s ist bereits vorhanden"
#, python-format
msgid "Storage pool %(name)s does not exist"
-msgstr ""
-"Speicherpool %(name)s ist nicht vorhanden"
+msgstr "Speicherpool %(name)s ist nicht vorhanden"
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
-msgstr ""
-"Geben Sie %(item)s an, um den Speicherpool %(name)s zu erstellen"
+msgstr "Geben Sie %(item)s an, um den Speicherpool %(name)s zu erstellen"
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr ""
-"Aktiver Speicherpool %(name)s konnte nicht gelöscht werden"
+msgstr "Aktiver Speicherpool %(name)s konnte nicht gelöscht werden"
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
-msgstr ""
-"Speicherpools konnten nicht aufgelistet werden. Details: %(err)s"
+msgstr "Speicherpools konnten nicht aufgelistet werden. Details: %(err)s"
#, python-format
msgid "Unable to create storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"Speicherpool %(name)s konnte nicht erstellt werden. Details: %(err)s"
+msgstr "Speicherpool %(name)s konnte nicht erstellt werden. Details: %(err)s"
#, python-format
msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
msgstr ""
-"Anzahl der Speicherdatenträger im Speicherpool %(name)s konnte nicht abgerufen werden. Details: "
-"%(err)s"
+"Anzahl der Speicherdatenträger im Speicherpool %(name)s konnte nicht "
+"abgerufen werden. Details: %(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"Speicherpool %(name)s konnte nicht aktiviert werden. Details: %(err)s"
+msgstr "Speicherpool %(name)s konnte nicht aktiviert werden. Details: %(err)s"
#, python-format
msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
@@ -683,29 +649,28 @@ msgstr ""
#, python-format
msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"Speicherpool %(name)s konnte nicht gelöscht werden. Details: %(err)s"
+msgstr "Speicherpool %(name)s konnte nicht gelöscht werden. Details: %(err)s"
#, python-format
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
msgstr ""
-"NFS-Pool konnte nicht erstellt werden, weil Exportpfad %(path)s beim Mounten blockieren kann"
+"NFS-Pool konnte nicht erstellt werden, weil Exportpfad %(path)s beim Mounten "
+"blockieren kann"
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
msgstr ""
-"NFS-Pool konnte nicht erstellt werden, weil das Mounten des Exportpfads %(path)s fehlgeschlagen ist"
+"NFS-Pool konnte nicht erstellt werden, weil das Mounten des Exportpfads "
+"%(path)s fehlgeschlagen ist"
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr ""
-"Nicht unterstützter Speicherpooltyp: %(type)s"
+msgstr "Nicht unterstützter Speicherpooltyp: %(type)s"
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
-msgstr ""
-"Fehler beim Abrufen der XML für Speicherpool in %(pool)s"
+msgstr "Fehler beim Abrufen der XML für Speicherpool in %(pool)s"
msgid "Storage pool name must be a string without slashes (/)"
msgstr ""
@@ -715,52 +680,45 @@ msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
"iso"
msgstr ""
-"Unterstützte Speicherpooltypen sind dir, netfs, logical, iscsi, isci und kimchi-"
-"iso"
+"Unterstützte Speicherpooltypen sind dir, netfs, logical, iscsi, isci und "
+"kimchi-iso"
msgid "Storage pool path must be a string"
-msgstr ""
-"Speicherpoolpfad muss eine Zeichenfolge sein"
+msgstr "Speicherpoolpfad muss eine Zeichenfolge sein"
msgid "Storage pool host must be a IP or hostname"
-msgstr ""
-"Speicherpoolhost muss eine IP oder ein Hostname sein"
+msgstr "Speicherpoolhost muss eine IP oder ein Hostname sein"
msgid "Storage pool device must be the absolute path to the block device"
-msgstr ""
-"Speicherpooleinheit muss den absoluten Pfad zur Blockeinheit angeben"
+msgstr "Speicherpooleinheit muss den absoluten Pfad zur Blockeinheit angeben"
msgid "Storage pool devices parameter must be a list"
-msgstr ""
-"Einheitenparameter des Speicherpools muss eine Liste sein"
+msgstr "Einheitenparameter des Speicherpools muss eine Liste sein"
msgid "Target IQN of an iSCSI pool must be a string"
-msgstr ""
-"Ziel-IQN eines iSCSI-Pools muss eine Zeichenfolge sein"
+msgstr "Ziel-IQN eines iSCSI-Pools muss eine Zeichenfolge sein"
msgid "Port of a remote storage server must be an integer between 1 and 65535"
msgstr ""
-"Port eines fernen Speicherservers muss eine Ganzzahl zwischen 1 und 65535 sein"
+"Port eines fernen Speicherservers muss eine Ganzzahl zwischen 1 und 65535 "
+"sein"
msgid "iSCSI target username must be a string"
-msgstr ""
-"Benutzername des iSCSI-Ziels muss eine Zeichenfolge sein"
+msgstr "Benutzername des iSCSI-Ziels muss eine Zeichenfolge sein"
msgid "iSCSI target password must be a string"
-msgstr ""
-"Kennwort des iSCSI-Ziels muss eine Zeichenfolge sein"
+msgstr "Kennwort des iSCSI-Ziels muss eine Zeichenfolge sein"
msgid "Specify name and type to create a storage pool"
-msgstr ""
-"Geben Sie Name und Typ an, um einen Speicherpool zu erstellen"
+msgstr "Geben Sie Name und Typ an, um einen Speicherpool zu erstellen"
#, python-format
msgid ""
"%(disk)s is not a valid disk/partition. Could not add it to the pool "
"%(pool)s."
msgstr ""
-"%(disk)s ist keine gültige Platte/Partition. Sie konnte nicht hinzugefügt werden zum Pool "
-"%(pool)s."
+"%(disk)s ist keine gültige Platte/Partition. Sie konnte nicht hinzugefügt "
+"werden zum Pool %(pool)s."
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
@@ -769,60 +727,61 @@ msgstr ""
msgid "The parameter disks only can be updated for logical storage pool."
msgstr ""
-"Die Parameterplatten können nur für den logischen Speicherpool aktualisiert werden."
+"Die Parameterplatten können nur für den logischen Speicherpool aktualisiert "
+"werden."
msgid "The SCSI host adapter name must be a string."
-msgstr ""
-"Der Name des SCSI-Hostadapters muss eine Zeichenfolge sein."
+msgstr "Der Name des SCSI-Hostadapters muss eine Zeichenfolge sein."
msgid "The storage pool kimchi_isos is reserved for internal use"
-msgstr ""
-"Der Speicherpool kimchi_isos ist für die interne Verwendung reserviert"
+msgstr "Der Speicherpool kimchi_isos ist für die interne Verwendung reserviert"
#, python-format
msgid ""
"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"NFS-Speicherpool %(name)s konnte nicht aktiviert werden. NFS-Server %(server)s ist "
-"nicht erreichbar."
+"NFS-Speicherpool %(name)s konnte nicht aktiviert werden. NFS-Server "
+"%(server)s ist nicht erreichbar."
#, python-format
msgid ""
"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"NFS-Speicherpool %(name)s konnte nicht inaktiviert werden. NFS-Server %(server)s ist "
-"nicht erreichbar."
+"NFS-Speicherpool %(name)s konnte nicht inaktiviert werden. NFS-Server "
+"%(server)s ist nicht erreichbar."
#, python-format
msgid ""
"Unable to deactivate pool %(name)s as it is associated with some templates"
msgstr ""
-"Pool %(name)s konnte nicht inaktiviert werden, weil er einigen Vorlagen zugeordnet ist"
+"Pool %(name)s konnte nicht inaktiviert werden, weil er einigen Vorlagen "
+"zugeordnet ist"
#, python-format
msgid "Unable to delete pool %(name)s as it is associated with some templates"
msgstr ""
-"Pool %(name)s konnte nicht gelöscht werden, weil er einigen Vorlagen zugeordnet ist"
+"Pool %(name)s konnte nicht gelöscht werden, weil er einigen Vorlagen "
+"zugeordnet ist"
#, python-format
msgid ""
"A volume group named '%(name)s' already exists. Please, choose another name "
"to create the logical pool."
msgstr ""
-"Eine Datenträgergruppe mit dem Namen '%(name)s' ist bereits vorhanden. Wählen Sie einen anderen Namen aus, "
-"um den logischen Pool zu erstellen."
+"Eine Datenträgergruppe mit dem Namen '%(name)s' ist bereits vorhanden. "
+"Wählen Sie einen anderen Namen aus, um den logischen Pool zu erstellen."
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
msgstr ""
-"Datenbank mit Tiefenscaninformationen kann aufgrund des folgenden Fehlers nicht aktualisiert werden: %(err)s"
+"Datenbank mit Tiefenscaninformationen kann aufgrund des folgenden Fehlers "
+"nicht aktualisiert werden: %(err)s"
#, python-format
msgid "Storage volume %(name)s already exists"
-msgstr ""
-"Speicherdatenträger %(name)s ist bereits vorhanden"
+msgstr "Speicherdatenträger %(name)s ist bereits vorhanden"
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
@@ -834,8 +793,8 @@ msgid ""
"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
"not active"
msgstr ""
-"Speicherdatenträger %(volume)s konnte nicht erstellt werden, weil Speicherpool %(pool)s "
-"nicht aktiv ist"
+"Speicherdatenträger %(volume)s konnte nicht erstellt werden, weil "
+"Speicherpool %(pool)s nicht aktiv ist"
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
@@ -846,21 +805,23 @@ msgstr ""
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
msgstr ""
-"Speicherdatenträger konnten nicht aufgelistet werden, weil Speicherpool %(pool)s nicht aktiv ist"
+"Speicherdatenträger konnten nicht aufgelistet werden, weil Speicherpool "
+"%(pool)s nicht aktiv ist"
#, python-format
msgid ""
"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
"%(err)s"
msgstr ""
-"Speicherdatenträger %(name)s konnte im Speicherpool %(pool)s nicht erstellt werden. Details: "
-"%(err)s"
+"Speicherdatenträger %(name)s konnte im Speicherpool %(pool)s nicht erstellt "
+"werden. Details: %(err)s"
#, python-format
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
msgstr ""
-"Speicherdatenträger im Speicherpool %(pool)s konnten nicht aufgelistet werden. Details: %(err)s"
+"Speicherdatenträger im Speicherpool %(pool)s konnten nicht aufgelistet "
+"werden. Details: %(err)s"
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
@@ -875,81 +836,81 @@ msgstr ""
#, python-format
msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
msgstr ""
-"Größe des Speicherdatenträgers %(name)s konnte nicht geändert werden. Details: %(err)s"
+"Größe des Speicherdatenträgers %(name)s konnte nicht geändert werden. "
+"Details: %(err)s"
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
msgstr ""
-"Speichertyp %(type)s unterstützt nicht das Erstellen und Löschen von Datenträgern"
+"Speichertyp %(type)s unterstützt nicht das Erstellen und Löschen von "
+"Datenträgern"
msgid "Storage volume name must be a string"
-msgstr ""
-"Name des Speicherdatenträgers muss eine Zeichenfolge sein"
+msgstr "Name des Speicherdatenträgers muss eine Zeichenfolge sein"
msgid "Storage volume allocation must be an integer number"
-msgstr ""
-"Zuordnung des Speicherdatenträgers muss eine Ganzzahl sein"
+msgstr "Zuordnung des Speicherdatenträgers muss eine Ganzzahl sein"
msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"Format des Speicherdatenträgers wird nicht unterstützt. Gültige Formate: bochs, cloop, cow, dmg, "
-"qcow, qcow2, qed, raw, vmdk, vpc."
+"Format des Speicherdatenträgers wird nicht unterstützt. Gültige Formate: "
+"bochs, cloop, cow, dmg, qcow, qcow2, qed, raw, vmdk, vpc."
msgid "Storage volume requires a volume name"
-msgstr ""
-"Speicherdatenträger erfordert einen Datenträgernamen"
+msgstr "Speicherdatenträger erfordert einen Datenträgernamen"
#, python-format
msgid ""
"Unable to update database with storage volume information due error: %(err)s"
msgstr ""
-"Datenbank mit Datenträgerinformationen kann aufgrund des folgenden Fehlers nicht aktualisiert werden: %(err)s"
+"Datenbank mit Datenträgerinformationen kann aufgrund des folgenden Fehlers "
+"nicht aktualisiert werden: %(err)s"
#, python-format
msgid "Only one of parameter %(param)s can be specified"
-msgstr ""
-"Der Parameter %(param)s kann nur einmal angegeben werden"
+msgstr "Der Parameter %(param)s kann nur einmal angegeben werden"
#, python-format
msgid "Create volume from %(param)s is not supported"
-msgstr ""
-"Erstellung des Datenträgers aus %(param)s wird nicht unterstützt"
+msgstr "Erstellung des Datenträgers aus %(param)s wird nicht unterstützt"
msgid "Storage volume capacity must be an integer number."
-msgstr ""
-"Kapazität des Speicherdatenträgers muss eine Ganzzahl sein."
+msgstr "Kapazität des Speicherdatenträgers muss eine Ganzzahl sein."
msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
msgstr ""
-"Speicherdatenträger-URL muss eine http://-, https://-, ftp://- oder ftps://-URL sein."
+"Speicherdatenträger-URL muss eine http://-, https://-, ftp://- oder ftps://-"
+"URL sein."
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
msgstr ""
-"Zugriff auf Datei %(url)s konnte nicht ausgeführt werden. Überprüfen Sie die Datei."
+"Zugriff auf Datei %(url)s konnte nicht ausgeführt werden. Überprüfen Sie die "
+"Datei."
#, python-format
msgid ""
"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
"%(err)s"
msgstr ""
-"Speicherdatenträger '%(name)s' im Pool '%(pool)s' konnte nicht geklont werden. Details: "
-"%(err)s"
+"Speicherdatenträger '%(name)s' im Pool '%(pool)s' konnte nicht geklont "
+"werden. Details: %(err)s"
msgid "Specify chunk data and its size to upload a file."
-msgstr ""
-"Geben Sie Chunkdaten und deren Größe an, um eine Datei hochzuladen."
+msgstr "Geben Sie Chunkdaten und deren Größe an, um eine Datei hochzuladen."
msgid "In order to upload a storage volume, specify the 'upload' parameter."
msgstr ""
-"Um einen Speicherdatenträger hochzuladen, müssen Sie den Parameter 'upload' angeben."
+"Um einen Speicherdatenträger hochzuladen, müssen Sie den Parameter 'upload' "
+"angeben."
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
msgstr ""
-"Chunkdaten konnten nicht hochgeladen werden, da sie nicht mit der angeforderten Chunkgröße übereinstimmen."
+"Chunkdaten konnten nicht hochgeladen werden, da sie nicht mit der "
+"angeforderten Chunkgröße übereinstimmen."
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
@@ -958,255 +919,233 @@ msgstr ""
msgid "The upload chunk data will exceed the storage volume size."
msgstr ""
-"Die Chunkdaten für den Upload überschreiten die Größe des Speicherdatenträgers."
+"Die Chunkdaten für den Upload überschreiten die Größe des "
+"Speicherdatenträgers."
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
msgstr ""
-"Chunkdaten konnten nicht auf Speicherdatenträger hochgeladen werden. Details: %(err)s."
+"Chunkdaten konnten nicht auf Speicherdatenträger hochgeladen werden. "
+"Details: %(err)s."
#, python-format
msgid "Interface %(name)s does not exist"
-msgstr ""
-"Schnittstelle %(name)s ist nicht vorhanden"
+msgstr "Schnittstelle %(name)s ist nicht vorhanden"
#, python-format
msgid "Network %(name)s already exists"
-msgstr ""
-"Netz %(name)s ist bereits vorhanden"
+msgstr "Netz %(name)s ist bereits vorhanden"
#, python-format
msgid "Network %(name)s does not exist"
-msgstr ""
-"Netz %(name)s ist nicht vorhanden"
+msgstr "Netz %(name)s ist nicht vorhanden"
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
msgstr ""
-"Das Teilnetz %(subnet)s, das für das Netz %(network)s angegeben wurde, ist nicht gültig."
+"Das Teilnetz %(subnet)s, das für das Netz %(network)s angegeben wurde, ist "
+"nicht gültig."
#, python-format
msgid "Specify a network interface to create bridged network %(name)s"
msgstr ""
-"Geben Sie eine Netzschnittstelle an, um das überbrückte Netz %(name)s zu erstellen"
+"Geben Sie eine Netzschnittstelle an, um das überbrückte Netz %(name)s zu "
+"erstellen"
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr ""
-"Aktives Netz %(name)s konnte nicht gelöscht werden"
+msgstr "Aktives Netz %(name)s konnte nicht gelöscht werden"
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
msgstr ""
-"Die Schnittstelle %(iface)s, die für das Netz %(network)s angegeben wurde, ist bereits belegt"
+"Die Schnittstelle %(iface)s, die für das Netz %(network)s angegeben wurde, "
+"ist bereits belegt"
msgid "Interface should be bare NIC, bonding or bridge device."
-msgstr ""
-"Schnittstelle sollte bloßes NIC, Bonding oder Brückeneinheit sein."
+msgstr "Schnittstelle sollte bloßes NIC, Bonding oder Brückeneinheit sein."
#, python-format
msgid "Unable to create network %(name)s. Details: %(err)s"
-msgstr ""
-"Netz %(name)s konnte nicht erstellt werden. Details: %(err)s"
+msgstr "Netz %(name)s konnte nicht erstellt werden. Details: %(err)s"
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
-msgstr ""
-"Es konnte keine freie IP-Adresse für Netz '%(name)s' gefunden werden"
+msgstr "Es konnte keine freie IP-Adresse für Netz '%(name)s' gefunden werden"
#, python-format
msgid "The interface %(iface)s already exists."
-msgstr ""
-"Schnittstelle %(iface)s ist bereits vorhanden."
+msgstr "Schnittstelle %(iface)s ist bereits vorhanden."
msgid "Network name must be a string without slashes (/) or quotes (\")"
msgstr ""
-"Netzname muss eine Zeichenfolge ohne Schrägstriche (/) oder Anführungszeichen (\") sein"
+"Netzname muss eine Zeichenfolge ohne Schrägstriche (/) oder "
+"Anführungszeichen (\") sein"
msgid "Supported network types are isolated, NAT and bridge"
-msgstr ""
-"Unterstützte Netztypen sind Isoliert, NAT und Brücke"
+msgstr "Unterstützte Netztypen sind Isoliert, NAT und Brücke"
msgid "Network subnet must be a string with IP address and prefix or netmask"
msgstr ""
-"Teilnetz des Netzes muss eine Zeichenfolge mit IP-Adresse und Präfix oder Netzmaske sein"
+"Teilnetz des Netzes muss eine Zeichenfolge mit IP-Adresse und Präfix oder "
+"Netzmaske sein"
msgid "Network interface must be a string"
-msgstr ""
-"Netzschnittstelle muss eine Zeichenfolge sein"
+msgstr "Netzschnittstelle muss eine Zeichenfolge sein"
msgid "Network VLAN ID must be an integer between 1 and 4094"
-msgstr ""
-"Netz-VLAN-ID muss eine Ganzzahl zwischen 1 und 4094 sein"
+msgstr "Netz-VLAN-ID muss eine Ganzzahl zwischen 1 und 4094 sein"
msgid "Specify name and type to create a Network"
-msgstr ""
-"Geben Sie Name und Typ an, um ein Netz zu erstellen"
+msgstr "Geben Sie Name und Typ an, um ein Netz zu erstellen"
#, python-format
msgid ""
"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
"and/or templates linked to this network."
msgstr ""
-"Netz %(name)s konnte nicht gelöscht werden. Mit diesem Netz sind einige virtuelle Maschinen %(vms)s "
-"und/oder Vorlagen verlinkt."
+"Netz %(name)s konnte nicht gelöscht werden. Mit diesem Netz sind einige "
+"virtuelle Maschinen %(vms)s und/oder Vorlagen verlinkt."
#, python-format
msgid ""
"Unable to deactivate network %(name)s. There are some virtual machines "
"%(vms)s and/or templates linked to this network."
msgstr ""
-"Netz %(name)s konnte nicht inaktiviert werden. Mit diesem Netz sind einige virtuelle Maschinen "
-"%(vms)s und/oder Vorlagen verlinkt."
+"Netz %(name)s konnte nicht inaktiviert werden. Mit diesem Netz sind einige "
+"virtuelle Maschinen %(vms)s und/oder Vorlagen verlinkt."
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
-msgstr ""
-"Brückeneinheit %(name)s kann nicht die Trunkeinheit eines VLAN sein."
+msgstr "Brückeneinheit %(name)s kann nicht die Trunkeinheit eines VLAN sein."
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr ""
-"Schnittstelle %(iface)s konnte nicht aktiviert werden: %(err)s."
+msgstr "Schnittstelle %(iface)s konnte nicht aktiviert werden: %(err)s."
#, python-format
msgid ""
"Failed to activate interface %(iface)s. Please check the physical link "
"status."
msgstr ""
-"Schnittstelle %(iface)s konnte nicht aktiviert werden. Überprüfen Sie den Status der "
-"physischen Verbindung."
+"Schnittstelle %(iface)s konnte nicht aktiviert werden. Überprüfen Sie den "
+"Status der physischen Verbindung."
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
-msgstr ""
-"Netz %(name)s konnte nicht gestartet werden. Details: %(err)s"
+msgstr "Netz %(name)s konnte nicht gestartet werden. Details: %(err)s"
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr ""
-"Debugbericht %(name)s ist nicht vorhanden"
+msgstr "Debugbericht %(name)s ist nicht vorhanden"
msgid "Debug report tool not found in system"
-msgstr ""
-"Debugberichtstool nicht im System gefunden"
+msgstr "Debugberichtstool nicht im System gefunden"
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
-msgstr ""
-"Debugbericht %(name)s konnte nicht erstellt werden. Details: %(err)s."
+msgstr "Debugbericht %(name)s konnte nicht erstellt werden. Details: %(err)s."
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
msgstr ""
-"Ein Debugbericht mit dem angegebenen Namen %(name)s konnte nicht gefunden werden"
+"Ein Debugbericht mit dem angegebenen Namen %(name)s konnte nicht gefunden "
+"werden"
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
-msgstr ""
-"Debugbericht %(name)s konnte nicht generiert werden. Details: %(err)s"
+msgstr "Debugbericht %(name)s konnte nicht generiert werden. Details: %(err)s"
msgid "You should give a name for the debug report file."
-msgstr ""
-"Sie müssen einen Namen für die Debugberichtsdatei angeben."
+msgstr "Sie müssen einen Namen für die Debugberichtsdatei angeben."
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
-"Der Name des Debugberichts muss eine Zeichenfolge sein. Nur Buchstaben, Ziffern, Unterstreichungszeichen ('_') "
-"und Bindestriche ('-') sind zulässig."
+"Der Name des Debugberichts muss eine Zeichenfolge sein. Nur Buchstaben, "
+"Ziffern, Unterstreichungszeichen ('_') und Bindestriche ('-') sind zulässig."
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
msgstr ""
-"Der Debugbericht mit dem Namen \"%(name)s\" ist bereits vorhanden. Verwenden Sie "
-"einen anderen Namen."
+"Der Debugbericht mit dem Namen \"%(name)s\" ist bereits vorhanden. Verwenden "
+"Sie einen anderen Namen."
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr ""
-"Speicherserver %(server)s wurde nicht von Kimchi verwendet"
+msgstr "Speicherserver %(server)s wurde nicht von Kimchi verwendet"
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr ""
-"Distro '%(name)s' ist nicht vorhanden"
+msgstr "Distro '%(name)s' ist nicht vorhanden"
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr ""
-"Partition %(name)s ist im Host nicht vorhanden"
+msgstr "Partition %(name)s ist im Host nicht vorhanden"
msgid "Unable to shutdown host machine as there are running virtual machines"
msgstr ""
-"Hostmaschine konnte nicht heruntergefahren werden, weil virtuelle Maschinen ausgeführt werden"
+"Hostmaschine konnte nicht heruntergefahren werden, weil virtuelle Maschinen "
+"ausgeführt werden"
msgid "Unable to reboot host machine as there are running virtual machines"
msgstr ""
-"Hostmaschine konnte nicht neu gestartet werden, weil virtuelle Maschinen ausgeführt werden"
+"Hostmaschine konnte nicht neu gestartet werden, weil virtuelle Maschinen "
+"ausgeführt werden"
#, python-format
msgid "Node device '%(name)s' not found"
-msgstr ""
-"Knoteneinheit '%(name)s' nicht gefunden"
+msgstr "Knoteneinheit '%(name)s' nicht gefunden"
msgid "Conflicting flag filters specified."
-msgstr ""
-"In Konflikt stehende Flagfilter angegeben."
+msgstr "In Konflikt stehende Flagfilter angegeben."
msgid "No packages marked for update"
-msgstr ""
-"Keine Pakete für Aktualisierung markiert"
+msgstr "Keine Pakete für Aktualisierung markiert"
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr ""
-"Paket %(name)s ist nicht für Aktualisierung markiert."
+msgstr "Paket %(name)s ist nicht für Aktualisierung markiert."
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
msgstr ""
-"Fehler beim Abrufen von Paketen, die für die Aktualisierung markiert sind. Details: %(err)s"
+"Fehler beim Abrufen von Paketen, die für die Aktualisierung markiert sind. "
+"Details: %(err)s"
msgid "There is no compatible package manager for this system."
-msgstr ""
-"Es gibt keinen kompatiblen Paketmanager für dieses System."
+msgstr "Es gibt keinen kompatiblen Paketmanager für dieses System."
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr ""
-"%(item)s konnten nicht im Datenspeicher gefunden werden"
+msgstr "%(item)s konnten nicht im Datenspeicher gefunden werden"
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr ""
-"Ungültiger URI %(uri)s"
+msgstr "Ungültiger URI %(uri)s"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
msgstr ""
-"Zeitlimitüberschreitung bei Ausführung des Befehls '%(cmd)s' nach %(seconds)s Sekunden"
+"Zeitlimitüberschreitung bei Ausführung des Befehls '%(cmd)s' nach "
+"%(seconds)s Sekunden"
msgid "Unable to choose a virtual machine name"
-msgstr ""
-"Name der virtuellen Maschine konnte nicht ausgewählt werden"
+msgstr "Name der virtuellen Maschine konnte nicht ausgewählt werden"
#, python-format
msgid "Invalid data value '%(value)s'"
-msgstr ""
-"Ungültiger Datenwert '%(value)s'"
+msgstr "Ungültiger Datenwert '%(value)s'"
#, python-format
msgid "Invalid data unit '%(unit)s'"
-msgstr ""
-"Ungültige Dateneinheit '%(unit)s'"
+msgstr "Ungültige Dateneinheit '%(unit)s'"
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
-msgstr ""
-"Ungültiger Speichertyp. Unterstützte Typen: 'cdrom', 'disk'"
+msgstr "Ungültiger Speichertyp. Unterstützte Typen: 'cdrom', 'disk'"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
@@ -1214,56 +1153,52 @@ msgstr ""
"Der Pfad '%(value)s' ist kein gültiger lokaler/ferner Pfad für die Einheit"
msgid "Only CDROM path can be update."
-msgstr ""
-"Nur der CD-ROM-Pfad kann aktualisiert werden."
+msgstr "Nur der CD-ROM-Pfad kann aktualisiert werden."
#, python-format
msgid ""
"The storage device %(dev_name)s does not exist in the virtual machine "
"%(vm_name)s"
msgstr ""
-"Die Speichereinheit %(dev_name)s ist in der virtuellen Maschine "
-"%(vm_name)s nicht vorhanden"
+"Die Speichereinheit %(dev_name)s ist in der virtuellen Maschine %(vm_name)s "
+"nicht vorhanden"
#, python-format
msgid "Error while creating new storage device: %(error)s"
-msgstr ""
-"Fehler beim Erstellen einer neuen Speichereinheit: %(error)s"
+msgstr "Fehler beim Erstellen einer neuen Speichereinheit: %(error)s"
#, python-format
msgid "Error while updating storage device: %(error)s"
-msgstr ""
-"Fehler beim Aktualisieren einer Speichereinheit: %(error)s"
+msgstr "Fehler beim Aktualisieren einer Speichereinheit: %(error)s"
#, python-format
msgid "Error while removing storage device: %(error)s"
-msgstr ""
-"Fehler beim Entfernen einer Speichereinheit: %(error)s"
+msgstr "Fehler beim Entfernen einer Speichereinheit: %(error)s"
msgid "Do not support IDE device hot plug"
-msgstr ""
-"Hot Plug für IDE-Einheit nicht unterstützen"
+msgstr "Hot Plug für IDE-Einheit nicht unterstützen"
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
"disk"
msgstr ""
-"Geben Sie Typ und Pfad oder Typ und Pool/Datenträger an, um eine neue "
-"Platte für eine virtuelle Maschine hinzuzufügen"
+"Geben Sie Typ und Pfad oder Typ und Pool/Datenträger an, um eine neue Platte "
+"für eine virtuelle Maschine hinzuzufügen"
msgid "Specify path to update virtual machine disk"
msgstr ""
-"Geben Sie einen Pfad an, um die Platte der virtuellen Maschine zu aktualisieren"
+"Geben Sie einen Pfad an, um die Platte der virtuellen Maschine zu "
+"aktualisieren"
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
-msgstr ""
-"Begrenzung von %(limit)s Einheiten bei Controllertyp %(type)s erreicht"
+msgstr "Begrenzung von %(limit)s Einheiten bei Controllertyp %(type)s erreicht"
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
msgstr ""
-"Plattenpfadinformationen für angegebenen Pool/Datenträger können nicht abgerufen werden: %(error)s"
+"Plattenpfadinformationen für angegebenen Pool/Datenträger können nicht "
+"abgerufen werden: %(error)s"
msgid "Volume already in use by other virtual machine."
msgstr ""
@@ -1273,8 +1208,8 @@ msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
msgstr ""
-"Es kann nur ein Pfad oder ein Pool/Datenträger angegeben werden, um eine neue "
-"Platte für die virtuelle Maschine hinzuzufügen"
+"Es kann nur ein Pfad oder ein Pool/Datenträger angegeben werden, um eine "
+"neue Platte für die virtuelle Maschine hinzuzufügen"
#, python-format
msgid ""
@@ -1289,39 +1224,32 @@ msgstr ""
"YUM-Repository-ID darf nur ein aus einer Zeichenfolge bestehendes Wort sein."
msgid "Repository URL must be an http://, ftp:// or file:// URL."
-msgstr ""
-"Repository-URL muss eine http://-, ftp://- oder file://-URL sein."
+msgstr "Repository-URL muss eine http://-, ftp://- oder file://-URL sein."
msgid ""
"Repository configuration is a dictionary with specific values according to "
"repository type."
msgstr ""
-"Repository-Konfiguration ist ein Wörterbuch mit bestimmten Werten hinsichtlich "
-"Repository-Typ."
+"Repository-Konfiguration ist ein Wörterbuch mit bestimmten Werten "
+"hinsichtlich Repository-Typ."
msgid "Distribution to DEB repository must be a string"
-msgstr ""
-"Verteilung an DEB-Repository muss eine Zeichenfolge sein"
+msgstr "Verteilung an DEB-Repository muss eine Zeichenfolge sein"
msgid "Components to DEB repository must be listed in a array"
-msgstr ""
-"Komponenten für DEB-Repository müssen in einem Array aufgelistet sein"
+msgstr "Komponenten für DEB-Repository müssen in einem Array aufgelistet sein"
msgid "Components to DEB repository must be a string"
-msgstr ""
-"Komponenten für DEB-Repository müssen eine Zeichenfolge sein"
+msgstr "Komponenten für DEB-Repository müssen eine Zeichenfolge sein"
msgid "Mirror list to repository must be a string"
-msgstr ""
-"Spiegelliste für Repository muss eine Zeichenfolge sein"
+msgstr "Spiegelliste für Repository muss eine Zeichenfolge sein"
msgid "YUM Repository name must be string."
-msgstr ""
-"Name des YUM-Repositorys muss eine Zeichenfolge sein."
+msgstr "Name des YUM-Repositorys muss eine Zeichenfolge sein."
msgid "GPG check must be a boolean value."
-msgstr ""
-"GPG-Prüfung muss ein boolescher Wert sein."
+msgstr "GPG-Prüfung muss ein boolescher Wert sein."
msgid "GPG key must be a URL pointing to the ASCII-armored file."
msgstr ""
@@ -1329,39 +1257,33 @@ msgstr ""
#, python-format
msgid "Could not update repository %(repo_id)s."
-msgstr ""
-"Repository %(repo_id)s konnte nicht aktualisiert werden."
+msgstr "Repository %(repo_id)s konnte nicht aktualisiert werden."
#, python-format
msgid "Repository %(repo_id)s does not exist."
-msgstr ""
-"Repository %(repo_id)s ist nicht vorhanden."
+msgstr "Repository %(repo_id)s ist nicht vorhanden."
msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
"update a YUM repository."
msgstr ""
-"Geben Sie die Basis-URL, die Spiegelliste oder den Metalink des Repositorys an, um ein "
-"YUM-Repository zu erstellen oder zu aktualisieren."
+"Geben Sie die Basis-URL, die Spiegelliste oder den Metalink des Repositorys "
+"an, um ein YUM-Repository zu erstellen oder zu aktualisieren."
msgid "Repository management tool was not recognized for your system."
-msgstr ""
-"Repository-Verwaltungstool wurde für Ihr System nicht erkannt."
+msgstr "Repository-Verwaltungstool wurde für Ihr System nicht erkannt."
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr ""
-"Repository %(repo_id)s ist bereits aktiviert."
+msgstr "Repository %(repo_id)s ist bereits aktiviert."
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr ""
-"Repository %(repo_id)s ist bereits inaktiviert."
+msgstr "Repository %(repo_id)s ist bereits inaktiviert."
#, python-format
msgid "Could not remove repository %(repo_id)s."
-msgstr ""
-"Repository %(repo_id)s konnte nicht entfernt werden."
+msgstr "Repository %(repo_id)s konnte nicht entfernt werden."
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
@@ -1374,26 +1296,21 @@ msgstr ""
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr ""
-"Repository %(repo_id)s konnte nicht aktiviert werden."
+msgstr "Repository %(repo_id)s konnte nicht aktiviert werden."
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr ""
-"Repository %(repo_id)s konnte nicht inaktiviert werden."
+msgstr "Repository %(repo_id)s konnte nicht inaktiviert werden."
msgid "YUM Repository ID already exists"
-msgstr ""
-"YUM-Repository-ID ist bereits vorhanden"
+msgstr "YUM-Repository-ID ist bereits vorhanden"
msgid "YUM Repository name must be a string"
-msgstr ""
-"YUM-Repository-Name muss eine Zeichenfolge sein"
+msgstr "YUM-Repository-Name muss eine Zeichenfolge sein"
#, python-format
msgid "Unable to list repositories. Details: '%(err)s'"
-msgstr ""
-"Repositorys konnten nicht aufgelistet werden. Details: '%(err)s'"
+msgstr "Repositorys konnten nicht aufgelistet werden. Details: '%(err)s'"
#, python-format
msgid "Unable to retrieve repository information. Details: '%(err)s'"
@@ -1402,41 +1319,39 @@ msgstr ""
#, python-format
msgid "Unable to add repository. Details: '%(err)s'"
-msgstr ""
-"Repository konnte nicht hinzugefügt werden. Details: '%(err)s'"
+msgstr "Repository konnte nicht hinzugefügt werden. Details: '%(err)s'"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr ""
-"Repository konnte nicht entfernt werden. Details: '%(err)s'"
+msgstr "Repository konnte nicht entfernt werden. Details: '%(err)s'"
#, python-format
msgid ""
"Configuration items: '%(items)s' are not supported by repository manager"
msgstr ""
-"Konfigurationselemente: '%(items)s' werden vom Repository-Manager nicht unterstützt"
+"Konfigurationselemente: '%(items)s' werden vom Repository-Manager nicht "
+"unterstützt"
msgid "Repository metalink must be an http://, ftp:// or file:// URL."
-msgstr ""
-"Repository-Metalink muss eine http://-, ftp://- oder file://-URL sein."
+msgstr "Repository-Metalink muss eine http://-, ftp://- oder file://-URL sein."
msgid "Cannot specify mirrorlist and metalink at the same time."
-msgstr ""
-"Spiegelliste und Metalink können nicht gleichzeitig angegeben werden."
+msgstr "Spiegelliste und Metalink können nicht gleichzeitig angegeben werden."
#, python-format
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
msgstr ""
-"Die virtuelle Maschine '%(vm)s' muss vor dem Erstellen eines Snapshots gestoppt werden."
+"Die virtuelle Maschine '%(vm)s' muss vor dem Erstellen eines Snapshots "
+"gestoppt werden."
#, python-format
msgid ""
"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Snapshot '%(name)s' kann auf virtueller Maschine '%(vm)s' nicht erstellt werden. Details: "
-"%(err)s"
+"Snapshot '%(name)s' kann auf virtueller Maschine '%(vm)s' nicht erstellt "
+"werden. Details: %(err)s"
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
@@ -1448,634 +1363,507 @@ msgid ""
"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Snapshot '%(name)s' kann auf virtueller Maschine '%(vm)s' nicht abgerufen werden. Details: "
-"%(err)s"
+"Snapshot '%(name)s' kann auf virtueller Maschine '%(vm)s' nicht abgerufen "
+"werden. Details: %(err)s"
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
msgstr ""
-"Snapshots können auf virtueller Maschine '%(vm)s' nicht aufgelistet werden. Details: %(err)s"
+"Snapshots können auf virtueller Maschine '%(vm)s' nicht aufgelistet werden. "
+"Details: %(err)s"
#, python-format
msgid ""
"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Snapshot '%(name)s' kann auf virtueller Maschine '%(vm)s' nicht gelöscht werden. Details: "
-"%(err)s"
+"Snapshot '%(name)s' kann auf virtueller Maschine '%(vm)s' nicht gelöscht "
+"werden. Details: %(err)s"
#, python-format
msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Aktueller Snapshot der virtuellen Maschine '%(vm)s' kann nicht abgerufen werden. Details: "
-"%(err)s"
+"Aktueller Snapshot der virtuellen Maschine '%(vm)s' kann nicht abgerufen "
+"werden. Details: %(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
msgstr ""
-"Virtuelle Maschine '%(vm)s' kann nicht auf Snapshot '%(name)s' zurückgesetzt werden. Details: "
-"%(err)s"
+"Virtuelle Maschine '%(vm)s' kann nicht auf Snapshot '%(name)s' zurückgesetzt "
+"werden. Details: %(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
-"Snapshot der virtuellen Maschine '%(vm)s' kann nicht erstellt werden, weil er eine "
-"Platte im Format '%(format)s' enthält. Nur 'qcow2' wird unterstützt."
+"Snapshot der virtuellen Maschine '%(vm)s' kann nicht erstellt werden, weil "
+"er eine Platte im Format '%(format)s' enthält. Nur 'qcow2' wird unterstützt."
msgid "The number of vCPUs is too large for this system."
-msgstr ""
-"Die Anzahl der vCPUs ist für dieses System zu groß."
+msgstr "Die Anzahl der vCPUs ist für dieses System zu groß."
msgid "Invalid vCPU/topology combination."
-msgstr ""
-"Ungültige Kombination aus vCPU und Topologie."
+msgstr "Ungültige Kombination aus vCPU und Topologie."
msgid "This host (or current configuration) does not allow CPU topology."
msgstr ""
"Dieser Host (oder die aktuelle Konfiguration) erlaubt keine CPU-Topologie."
msgid "ERROR CODE"
-msgstr ""
-"FEHLERCODE"
+msgstr "FEHLERCODE"
msgid "REASON"
-msgstr ""
-"GRUND"
+msgstr "GRUND"
msgid "STACK"
-msgstr ""
-"STACK"
+msgstr "STACK"
msgid "Go to Homepage"
-msgstr ""
-"Gehe zu Homepage"
+msgstr "Gehe zu Homepage"
msgid "Create a New Virtual Machine"
-msgstr ""
-"Neue virtuelle Maschine erstellen"
+msgstr "Neue virtuelle Maschine erstellen"
msgid "Virtual Machine Name"
-msgstr ""
-"Name der virtuellen Maschine"
+msgstr "Name der virtuellen Maschine"
msgid ""
"The name used to identify the virtual machine. If omitted, a name will be "
"chosen based on the template used."
msgstr ""
-"Der für die Kennzeichnung der virtuellen Maschine verwendete Name. Falls er ausgelassen wird, wird ein Name "
-"anhand der verwendeten Vorlage ausgewählt."
+"Der für die Kennzeichnung der virtuellen Maschine verwendete Name. Falls er "
+"ausgelassen wird, wird ein Name anhand der verwendeten Vorlage ausgewählt."
msgid "Template"
-msgstr ""
-"Vorlage"
+msgstr "Vorlage"
msgid "Please create a template first."
-msgstr ""
-"Erstellen Sie zunächst eine Vorlage."
+msgstr "Erstellen Sie zunächst eine Vorlage."
msgid "Create a Template"
-msgstr ""
-"Vorlage erstellen"
+msgstr "Vorlage erstellen"
msgid "Please choose a template."
-msgstr ""
-"Wählen Sie eine Vorlage aus."
+msgstr "Wählen Sie eine Vorlage aus."
msgid "OS"
-msgstr ""
-"BS"
+msgstr "BS"
msgid "OS Version"
-msgstr ""
-"BS-Version"
+msgstr "BS-Version"
msgid "CPUS"
-msgstr ""
-"CPUS"
+msgstr "CPUS"
msgid "Memory"
-msgstr ""
-"Speicher"
+msgstr "Speicher"
msgid "Create"
-msgstr ""
-"Erstellen"
+msgstr "Erstellen"
msgid "Creating..."
-msgstr ""
-"Wird erstellt..."
+msgstr "Wird erstellt..."
msgid "Edit Guest"
-msgstr ""
-"Gast bearbeiten"
+msgstr "Gast bearbeiten"
msgid "General"
-msgstr ""
-"Allgemein"
+msgstr "Allgemein"
msgid "Storage"
-msgstr ""
-"Speicher"
+msgstr "Speicher"
msgid "Interface"
-msgstr ""
-"Schnittstelle"
+msgstr "Schnittstelle"
msgid "Permission"
-msgstr ""
-"Berechtigung"
+msgstr "Berechtigung"
msgid "Host PCI Device"
-msgstr ""
-"PCI-Einheit für Host"
+msgstr "PCI-Einheit für Host"
msgid "Snapshot"
-msgstr ""
-"Snapshot"
+msgstr "Snapshot"
msgid "Name"
-msgstr ""
-"Name"
+msgstr "Name"
msgid "CPUs"
-msgstr ""
-"CPUs"
+msgstr "CPUs"
msgid "Memory (MB)"
-msgstr ""
-"Speicher (MB)"
+msgstr "Speicher (MB)"
msgid "Icon"
-msgstr ""
-"Symbol"
+msgstr "Symbol"
msgid "Device"
-msgstr ""
-"Einheit"
+msgstr "Einheit"
msgid "Path"
-msgstr ""
-"Pfad"
+msgstr "Pfad"
msgid "Network"
-msgstr ""
-"Netz"
+msgstr "Netz"
msgid "Type"
-msgstr ""
-"Typ"
+msgstr "Typ"
msgid "MAC Address"
-msgstr ""
-"MAC-Adresse"
+msgstr "MAC-Adresse"
msgid "Available system users and groups"
-msgstr ""
-"Verfügbare Systembenutzer und -gruppen"
+msgstr "Verfügbare Systembenutzer und -gruppen"
msgid "Selected system users and groups"
-msgstr ""
-"Ausgewählte Systembenutzer und -gruppen"
+msgstr "Ausgewählte Systembenutzer und -gruppen"
msgid "User"
-msgstr ""
-"Benutzer"
+msgstr "Benutzer"
msgid "All"
-msgstr ""
-"Alle"
+msgstr "Alle"
msgid "To Add"
-msgstr ""
-"Hinzuzufügen"
+msgstr "Hinzuzufügen"
msgid "Added"
-msgstr ""
-"Hinzugefügt"
+msgstr "Hinzugefügt"
msgid "filter"
-msgstr ""
-"Filter"
+msgstr "Filter"
msgid "Product"
-msgstr ""
-"Produkt"
+msgstr "Produkt"
msgid "Vendor"
-msgstr ""
-"Anbieter"
+msgstr "Anbieter"
msgid "Created"
-msgstr ""
-"Erstellt"
+msgstr "Erstellt"
msgid "Save"
-msgstr ""
-"Speichern"
+msgstr "Speichern"
msgid "Replace"
-msgstr ""
-"Ersetzen"
+msgstr "Ersetzen"
msgid "Detach"
-msgstr ""
-"Abhängen"
+msgstr "Abhängen"
msgid "Cancel"
-msgstr ""
-"Abbrechen"
+msgstr "Abbrechen"
msgid "revert"
-msgstr ""
-"zurücksetzen"
+msgstr "zurücksetzen"
msgid "Add a Storage Device to VM"
-msgstr ""
-"Speichereinheit zur virtuellen Maschine hinzufügen"
+msgstr "Speichereinheit zur virtuellen Maschine hinzufügen"
msgid "Device Type"
-msgstr ""
-"Einheitentyp"
+msgstr "Einheitentyp"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
msgstr ""
"Der Einheitentyp. Derzeit werden nur \"cdrom\" und \"disk\" unterstützt."
msgid "Storage Pool"
-msgstr ""
-"Speicherpool"
+msgstr "Speicherpool"
msgid "Storage pool which volume located in"
-msgstr ""
-"Speicherpool, in dem sich der Datenträger befindet"
+msgstr "Speicherpool, in dem sich der Datenträger befindet"
msgid "Storage Volume"
-msgstr ""
-"Speicherdatenträger"
+msgstr "Speicherdatenträger"
msgid "Storage volume to be attached"
-msgstr ""
-"Anzuhängender Speicherdatenträger"
+msgstr "Anzuhängender Speicherdatenträger"
msgid "File Path"
-msgstr ""
-"Dateipfad"
+msgstr "Dateipfad"
msgid "The ISO file path in the server for CDROM."
-msgstr ""
-"Der ISO-Dateipfad auf dem Server für die CD-ROM."
+msgstr "Der ISO-Dateipfad auf dem Server für die CD-ROM."
msgid "Attach"
-msgstr ""
-"Anhängen"
+msgstr "Anhängen"
msgid "Start"
-msgstr ""
-"Starten"
+msgstr "Starten"
msgid "Reset"
-msgstr ""
-"Zurücksetzen"
+msgstr "Zurücksetzen"
msgid "Pause"
-msgstr ""
-"Anhalten"
+msgstr "Anhalten"
msgid "Resume"
-msgstr ""
-"Fortsetzen"
+msgstr "Fortsetzen"
msgid "Power Off"
-msgstr ""
-"Ausschalten"
+msgstr "Ausschalten"
msgid "Actions"
-msgstr ""
-"Aktionen"
+msgstr "Aktionen"
msgid "Connect"
-msgstr ""
-"Verbinden"
+msgstr "Verbinden"
msgid "Clone"
-msgstr ""
-"Klonen"
+msgstr "Klonen"
msgid "Edit"
-msgstr ""
-"Bearbeiten"
+msgstr "Bearbeiten"
msgid "Shut Down"
-msgstr ""
-"Herunterfahren"
+msgstr "Herunterfahren"
msgid "Delete"
-msgstr ""
-"Löschen"
+msgstr "Löschen"
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
-"Der Benutzername oder das Kennwort, den bzw. das Sie eingegeben haben, ist falsch. Versuchen Sie es bitte erneut."
+"Der Benutzername oder das Kennwort, den bzw. das Sie eingegeben haben, ist "
+"falsch. Versuchen Sie es bitte erneut."
msgid "This field is required."
-msgstr ""
-"Dieses Feld ist erforderlich."
+msgstr "Dieses Feld ist erforderlich."
msgid "Log in"
-msgstr ""
-"Anmelden"
+msgstr "Anmelden"
msgid "Logging in..."
-msgstr ""
-"Wird angemeldet..."
+msgstr "Wird angemeldet..."
msgid "Host"
-msgstr ""
-"Host"
+msgstr "Host"
msgid "Guests"
-msgstr ""
-"Gäste"
+msgstr "Gäste"
msgid "Templates"
-msgstr ""
-"Vorlagen"
+msgstr "Vorlagen"
msgid "Failed to get application configuration"
-msgstr ""
-"Anwendungskonfiguration konnte nicht abgerufen werden"
+msgstr "Anwendungskonfiguration konnte nicht abgerufen werden"
msgid "This is not a valid Linux path"
-msgstr ""
-"Dies ist kein gültiger Linux-Pfad"
+msgstr "Dies ist kein gültiger Linux-Pfad"
msgid "This is not a valid URL."
-msgstr ""
-"Dies ist keine gültige URL."
+msgstr "Dies ist keine gültige URL."
msgid "No such data available."
-msgstr ""
-"Keine solchen Daten verfügbar."
+msgstr "Keine solchen Daten verfügbar."
msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"Hostsystem kann nicht kontaktiert werden. Prüfen Sie, ob das Hostsystem aktiv ist und ob"
-"Netzkonnektivität besteht. HTTP-Anforderungsantwort %1."
+"Hostsystem kann nicht kontaktiert werden. Prüfen Sie, ob das Hostsystem "
+"aktiv ist und obNetzkonnektivität besteht. HTTP-Anforderungsantwort %1."
msgid "Unable to read file."
-msgstr ""
-"Datei konnte nicht gelesen werden."
+msgstr "Datei konnte nicht gelesen werden."
msgid "Error while uploading file."
-msgstr ""
-"Fehler beim Hochladen der Datei."
+msgstr "Fehler beim Hochladen der Datei."
msgid "Delete Confirmation"
-msgstr ""
-"Löschbestätigung"
+msgstr "Löschbestätigung"
msgid "OK"
-msgstr ""
-"OK"
+msgstr "OK"
msgid "Confirm"
-msgstr ""
-"Bestätigen"
+msgstr "Bestätigen"
msgid "Warning"
-msgstr ""
-"Warnung"
+msgstr "Warnung"
msgid "Cloning..."
-msgstr ""
-"Wird geklont..."
+msgstr "Wird geklont..."
msgid "Loading..."
-msgstr ""
-"Wird geladen..."
+msgstr "Wird geladen..."
msgid "An error occurred while retrieving system information."
-msgstr ""
-"Beim Abrufen der Systeminformationen ist ein Fehler aufgetreten."
+msgstr "Beim Abrufen der Systeminformationen ist ein Fehler aufgetreten."
msgid "Retry"
-msgstr ""
-"Wiederholen"
+msgstr "Wiederholen"
msgid "Detailed message:"
-msgstr ""
-"Detaillierte Meldung:"
+msgstr "Detaillierte Meldung:"
msgid "No ISO found"
-msgstr ""
-"Keine ISO-Datei gefunden"
+msgstr "Keine ISO-Datei gefunden"
msgid "This is not a valid ISO file."
-msgstr ""
-"Dies ist keine gültige ISO-Datei."
+msgstr "Dies ist keine gültige ISO-Datei."
msgid "This may take a long time. Do you want to continue?"
-msgstr ""
-"Dieser Vorgang kann lange dauern. Möchten Sie fortfahren?"
+msgstr "Dieser Vorgang kann lange dauern. Möchten Sie fortfahren?"
msgid "This will permanently delete the template. Would you like to continue?"
-msgstr ""
-"Hiermit wird die Vorlage dauerhaft gelöscht. Möchten Sie fortfahren?"
+msgstr "Hiermit wird die Vorlage dauerhaft gelöscht. Möchten Sie fortfahren?"
msgid "Unable to shut down system as there are some virtual machines running!"
msgstr ""
-"System konnte nicht heruntergefahren werden, weil einige virtuellen Maschinen ausgeführt werden!"
+"System konnte nicht heruntergefahren werden, weil einige virtuellen "
+"Maschinen ausgeführt werden!"
msgid "Max:"
-msgstr ""
-"Max:"
+msgstr "Max:"
msgid "Utilization"
-msgstr ""
-"Auslastung"
+msgstr "Auslastung"
msgid "Available"
-msgstr ""
-"Verfügbar"
+msgstr "Verfügbar"
msgid "Read Rate"
-msgstr ""
-"Leserate"
+msgstr "Leserate"
msgid "Write Rate"
-msgstr ""
-"Schreibrate"
+msgstr "Schreibrate"
msgid "Received"
-msgstr ""
-"Empfangen"
+msgstr "Empfangen"
msgid "Sent"
-msgstr ""
-"Gesendet"
+msgstr "Gesendet"
msgid ""
"Shutting down or restarting host will cause unsaved work lost. Continue to "
"shut down/restarting?"
msgstr ""
-"Durch das Herunterfahren oder Neustarten des Hosts können ungesicherte Arbeiten verloren gehen. Möchten Sie mit dem Herunterfahren/Neustarten "
+"Durch das Herunterfahren oder Neustarten des Hosts können ungesicherte "
+"Arbeiten verloren gehen. Möchten Sie mit dem Herunterfahren/Neustarten "
"fortfahren?"
msgid ""
"Repository will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"Repository wird dauerhaft entfernt und kann nicht wiederhergestellt werden. Möchten Sie "
-"fortfahren?"
+"Repository wird dauerhaft entfernt und kann nicht wiederhergestellt werden. "
+"Möchten Sie fortfahren?"
msgid "Repositories"
-msgstr ""
-"Repositorys"
+msgstr "Repositorys"
msgid "ID"
-msgstr ""
-"ID"
+msgstr "ID"
msgid "Base URL"
-msgstr ""
-"Basis-URL"
+msgstr "Basis-URL"
msgid "Is Mirror"
-msgstr ""
-"Ist Spiegel"
+msgstr "Ist Spiegel"
msgid "URL Args"
-msgstr ""
-"URL-Args"
+msgstr "URL-Args"
msgid "Enabled"
-msgstr ""
-"Aktiviert"
+msgstr "Aktiviert"
msgid "GPG Check"
-msgstr ""
-"GPG-Prüfung"
+msgstr "GPG-Prüfung"
msgid "GPG Key"
-msgstr ""
-"GPG-Schlüssel"
+msgstr "GPG-Schlüssel"
msgid "Add"
-msgstr ""
-"Hinzufügen"
+msgstr "Hinzufügen"
msgid "Remove"
-msgstr ""
-"Entfernen"
+msgstr "Entfernen"
msgid "Enable"
-msgstr ""
-"Aktivieren"
+msgstr "Aktivieren"
msgid "Disable"
-msgstr ""
-"Inaktivieren"
+msgstr "Inaktivieren"
msgid "Software Updates"
-msgstr ""
-"Software-Updates"
+msgstr "Software-Updates"
msgid "Package Name"
-msgstr ""
-"Paketname"
+msgstr "Paketname"
msgid "Version"
-msgstr ""
-"Version"
+msgstr "Version"
msgid "Architecture"
-msgstr ""
-"Architektur"
+msgstr "Architektur"
msgid "Repository"
-msgstr ""
-"Repository"
+msgstr "Repository"
msgid "Update All"
-msgstr ""
-"Alle aktualisieren"
+msgstr "Alle aktualisieren"
msgid "Updating..."
-msgstr ""
-"Wird aktualisiert..."
+msgstr "Wird aktualisiert..."
msgid "Failed to retrieve packages update information."
-msgstr ""
-"Updateinformationen für Pakete konnten nicht abgerufen werden."
+msgstr "Updateinformationen für Pakete konnten nicht abgerufen werden."
msgid "Failed to update package(s)."
-msgstr ""
-"Pakete konnten nicht aktualisiert werden."
+msgstr "Pakete konnten nicht aktualisiert werden."
msgid ""
"Debug report will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"Debugbericht wird dauerhaft entfernt und kann nicht wiederhergestellt werden. Möchten Sie "
-"fortfahren?"
+"Debugbericht wird dauerhaft entfernt und kann nicht wiederhergestellt "
+"werden. Möchten Sie fortfahren?"
msgid "Debug Reports"
-msgstr ""
-"Debugberichte"
+msgstr "Debugberichte"
msgid "Generated Time"
-msgstr ""
-"Generierte Zeit"
+msgstr "Generierte Zeit"
msgid "Generate"
-msgstr ""
-"Generieren"
+msgstr "Generieren"
msgid "Generating..."
-msgstr ""
-"Wird generiert..."
+msgstr "Wird generiert..."
msgid "Rename"
-msgstr ""
-"Umbenennen"
+msgstr "Umbenennen"
msgid "Download"
-msgstr ""
-"Herunterladen"
+msgstr "Herunterladen"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
"hyphen ('-')."
msgstr ""
-"Der Berichtsname darf nur Buchstaben, Ziffern, Unterstreichungszeichen ('_') und/oder "
-"Bindestriche ('-') enthalten."
+"Der Berichtsname darf nur Buchstaben, Ziffern, Unterstreichungszeichen ('_') "
+"und/oder Bindestriche ('-') enthalten."
msgid "Pending..."
-msgstr ""
-"Anstehend..."
+msgstr "Anstehend..."
msgid "Report name is the same as the original one."
-msgstr ""
-"Der Berichtsname stimmt mit dem ursprünglichen Namen überein."
+msgstr "Der Berichtsname stimmt mit dem ursprünglichen Namen überein."
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
"cannot be undone. Would you like to continue?"
msgstr ""
-"Hiermit werden die virtuelle Maschine und deren virtuellen Platten gelöscht. Diese Operation "
-"kann nicht rückgängig gemacht werden. Möchten Sie fortfahren?"
+"Hiermit werden die virtuelle Maschine und deren virtuellen Platten gelöscht. "
+"Diese Operation kann nicht rückgängig gemacht werden. Möchten Sie fortfahren?"
msgid "Power off Confirmation"
-msgstr ""
-"Ausschalten bestätigen"
+msgstr "Ausschalten bestätigen"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
@@ -2085,8 +1873,7 @@ msgstr ""
"einem nicht geleerten Plattencache beim Gast. Möchten Sie fortfahren?"
msgid "Reset Confirmation"
-msgstr ""
-"Zurücksetzung bestätigen"
+msgstr "Zurücksetzung bestätigen"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
@@ -2096,125 +1883,111 @@ msgstr ""
"das Risiko eines Datenverlusts. Möchten Sie fortfahren?"
msgid "Shut Down Confirmation"
-msgstr ""
-"Herunterfahren bestätigen"
+msgstr "Herunterfahren bestätigen"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
msgstr ""
-"Hinweis: Diese Anforderung wird vom Gastbetriebssystem möglicherweise ignoriert. Möchten Sie fortfahren?"
+"Hinweis: Diese Anforderung wird vom Gastbetriebssystem möglicherweise "
+"ignoriert. Möchten Sie fortfahren?"
msgid "Virtual Machine delete Confirmation"
-msgstr ""
-"Löschbestätigung für virtuelle Maschine"
+msgstr "Löschbestätigung für virtuelle Maschine"
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
msgstr ""
-"Diese virtuelle Maschine ist nicht permanent. Wenn Sie das System ausschalten, wird sie gelöscht. Möchten Sie fortfahren?"
+"Diese virtuelle Maschine ist nicht permanent. Wenn Sie das System "
+"ausschalten, wird sie gelöscht. Möchten Sie fortfahren?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
"default storage pool. The same will happen when the target pool does not "
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
-"Wenn der Zielgast über SCSI- oder iSCSI-Datenträger verfügt, dann werden sie im Standardspeicherpool "
-"geklont. Derselbe Vorgang wird ausgeführt, wenn der Zielpool nicht über genügend "
-"Speicherplatz zum Klonen der Datenträger verfügt. Möchten Sie fortfahren?"
+"Wenn der Zielgast über SCSI- oder iSCSI-Datenträger verfügt, dann werden sie "
+"im Standardspeicherpool geklont. Derselbe Vorgang wird ausgeführt, wenn der "
+"Zielpool nicht über genügend Speicherplatz zum Klonen der Datenträger "
+"verfügt. Möchten Sie fortfahren?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
msgstr ""
-"Diese CD-ROM wird dauerhaft abgehängt und Sie können sie neu anhängen. Möchten Sie "
-"mit dem Abhängen fortfahren?"
+"Diese CD-ROM wird dauerhaft abgehängt und Sie können sie neu anhängen. "
+"Möchten Sie mit dem Abhängen fortfahren?"
msgid "Attaching..."
-msgstr ""
-"Wird angehängt..."
+msgstr "Wird angehängt..."
msgid "Replacing..."
-msgstr ""
-"Wird ersetzt..."
+msgstr "Wird ersetzt..."
msgid "Successfully attached!"
-msgstr ""
-"Erfolgreich angehängt!"
+msgstr "Erfolgreich angehängt!"
msgid "Successfully replaced!"
-msgstr ""
-"Erfolgreich ersetzt!"
+msgstr "Erfolgreich ersetzt!"
msgid "Successfully detached!"
-msgstr ""
-"Erfolgreich abgehängt!"
+msgstr "Erfolgreich abgehängt!"
msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
msgstr ""
-"Diese Platte wird dauerhaft abgehängt und Sie können sie neu anhängen. Möchten Sie "
-"mit dem Abhängen fortfahren?"
+"Diese Platte wird dauerhaft abgehängt und Sie können sie neu anhängen. "
+"Möchten Sie mit dem Abhängen fortfahren?"
msgid "interface:"
-msgstr ""
-"Schnittstelle:"
+msgstr "Schnittstelle:"
msgid "address:"
-msgstr ""
-"Adresse:"
+msgstr "Adresse:"
msgid "link_type:"
-msgstr ""
-"Linktyp:"
+msgstr "Linktyp:"
msgid "block:"
-msgstr ""
-"Block:"
+msgstr "Block:"
msgid "drive_type:"
-msgstr ""
-"Laufwerkstyp:"
+msgstr "Laufwerkstyp:"
msgid "model:"
-msgstr ""
-"Modell:"
+msgstr "Modell:"
msgid "Affected devices:"
-msgstr ""
-"Betroffene Einheiten:"
+msgstr "Betroffene Einheiten:"
msgid "The VLAN id must be between 1 and 4094."
-msgstr ""
-"Die VLAN-ID muss zwischen 1 und 4094 liegen."
+msgstr "Die VLAN-ID muss zwischen 1 und 4094 liegen."
msgid "unavailable"
-msgstr ""
-"nicht verfügbar"
+msgstr "nicht verfügbar"
msgid ""
"This action will interrupt network connectivity for any virtual machine that "
"depend on this network."
msgstr ""
-"Diese Aktion unterbricht die Netzkonnektivität für jede virtuelle Maschine, die "
-"von diesem Netz abhängt."
+"Diese Aktion unterbricht die Netzkonnektivität für jede virtuelle Maschine, "
+"die von diesem Netz abhängt."
msgid "Create a network"
-msgstr ""
-"Netz erstellen"
+msgstr "Netz erstellen"
msgid ""
"This network is not persistent. Instead of stop, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Dieses Netz ist nicht permanent. Durch diese Aktion wird es nicht gestoppt, sondern "
-"permanent gelöscht. Möchten Sie fortfahren?"
+"Dieses Netz ist nicht permanent. Durch diese Aktion wird es nicht gestoppt, "
+"sondern permanent gelöscht. Möchten Sie fortfahren?"
msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
-"Der überbrückte VLAN-Tag arbeitet möglicherweise nicht korrekt, wenn der Netzmanager aktiviert ist. Sie "
-"sollten ihn eventuell inaktivieren."
+"Der überbrückte VLAN-Tag arbeitet möglicherweise nicht korrekt, wenn der "
+"Netzmanager aktiviert ist. Sie sollten ihn eventuell inaktivieren."
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
@@ -2222,620 +1995,484 @@ msgstr ""
"Hiermit wird der Speicherpool dauerhaft gelöscht. Möchten Sie fortfahren?"
msgid "This storage pool is empty."
-msgstr ""
-"Dieser Speicherpool ist leer."
+msgstr "Dieser Speicherpool ist leer."
msgid ""
"It will format your disk and you will loose any data in there, are you sure "
"to continue? "
msgstr ""
-"Hiermit wird Ihre Platte formatiert und Sie verlieren sämtliche Daten darauf. Sind Sie sicher, dass "
-"Sie fortfahren möchten? "
+"Hiermit wird Ihre Platte formatiert und Sie verlieren sämtliche Daten "
+"darauf. Sind Sie sicher, dass Sie fortfahren möchten? "
msgid "SCSI Fibre Channel"
-msgstr ""
-"SCSI-Fibre Channel"
+msgstr "SCSI-Fibre Channel"
msgid "No SCSI adapters found."
-msgstr ""
-"Keine SCSI-Adapter gefunden."
+msgstr "Keine SCSI-Adapter gefunden."
msgid "Loading iSCSI targets..."
-msgstr ""
-"iSCSI-Ziele werden geladen..."
+msgstr "iSCSI-Ziele werden geladen..."
msgid "No iSCSI found. Please input one."
-msgstr ""
-"iSCSI wurde nicht gefunden. Nehmen Sie die iSCSI-Eingabe vor."
+msgstr "iSCSI wurde nicht gefunden. Nehmen Sie die iSCSI-Eingabe vor."
msgid "Failed to load iSCSI targets."
-msgstr ""
-"iSCSI-Ziele konnten nicht geladen werden."
+msgstr "iSCSI-Ziele konnten nicht geladen werden."
msgid "The storage pool name can not be blank."
-msgstr ""
-"Der Speicherpoolname darf nicht leer sein."
+msgstr "Der Speicherpoolname darf nicht leer sein."
msgid "The storage pool path can not be blank."
-msgstr ""
-"Der Speicherpoolpfad darf nicht leer sein."
+msgstr "Der Speicherpoolpfad darf nicht leer sein."
msgid "NFS server mount path can not be blank."
-msgstr ""
-"Der Mountpfad des NFS-Servers darf nicht leer sein."
+msgstr "Der Mountpfad des NFS-Servers darf nicht leer sein."
msgid "Invalid NFS mount path."
-msgstr ""
-"Ungültiger NFS-Mountpfad."
+msgstr "Ungültiger NFS-Mountpfad."
msgid "No logical device selected."
-msgstr ""
-"Keine logische Einheit ausgewählt."
+msgstr "Keine logische Einheit ausgewählt."
msgid "The iSCSI target can not be blank."
-msgstr ""
-"Das iSCSI-Ziel darf nicht leer sein."
+msgstr "Das iSCSI-Ziel darf nicht leer sein."
msgid "Server name can not be blank."
-msgstr ""
-"Servername darf nicht leer sein."
+msgstr "Servername darf nicht leer sein."
msgid "This is not a valid Server Name or IP. Please, modify it."
msgstr ""
-"Dies ist kein gültiger Servername oder keine gültige IP. Ändern Sie den Servernamen oder die IP."
+"Dies ist kein gültiger Servername oder keine gültige IP. Ändern Sie den "
+"Servernamen oder die IP."
msgid "Looking for available partitions ..."
-msgstr ""
-"Es wird nach verfügbaren Partitionen gesucht..."
+msgstr "Es wird nach verfügbaren Partitionen gesucht..."
msgid "No available partitions found."
-msgstr ""
-"Keine gültigen Partitionen gefunden."
+msgstr "Keine gültigen Partitionen gefunden."
msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Dieser Speicherpool ist nicht permanent. Durch diese Aktion wird er nicht inaktiviert, sondern "
-"permanent gelöscht. Möchten Sie fortfahren?"
+"Dieser Speicherpool ist nicht permanent. Durch diese Aktion wird er nicht "
+"inaktiviert, sondern permanent gelöscht. Möchten Sie fortfahren?"
msgid "Unable to retrieve partitions information."
-msgstr ""
-"Partitionsinformationen konnten nicht abgerufen werden."
+msgstr "Partitionsinformationen konnten nicht abgerufen werden."
msgid "In progress..."
-msgstr ""
-"In Bearbeitung..."
+msgstr "In Bearbeitung..."
msgid "Failed!"
-msgstr ""
-"Fehlgeschlagen!"
+msgstr "Fehlgeschlagen!"
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
msgstr ""
-"Der CD-ROM-Pfad muss ein gültiger lokaler/ferner Pfad sein. Er darf nicht leer sein."
+"Der CD-ROM-Pfad muss ein gültiger lokaler/ferner Pfad sein. Er darf nicht "
+"leer sein."
msgid "Disk pool or volume cannot be blank."
-msgstr ""
-"Der Plattenpool oder Datenträger darf nicht leer sein."
+msgstr "Der Plattenpool oder Datenträger darf nicht leer sein."
msgid "Peers"
-msgstr ""
-"Peers"
+msgstr "Peers"
msgid "Searching"
-msgstr ""
-"Suche wird durchgeführt"
+msgstr "Suche wird durchgeführt"
msgid "No peers found."
-msgstr ""
-"Keine Peers gefunden."
+msgstr "Keine Peers gefunden."
msgid "Help"
-msgstr ""
-"Hilfe"
+msgstr "Hilfe"
msgid "About"
-msgstr ""
-"Informationen"
+msgstr "Informationen"
msgid "Log out"
-msgstr ""
-"Abmelden"
+msgstr "Abmelden"
msgid "Version:"
-msgstr ""
-"Version:"
+msgstr "Version:"
msgid "Session timeout, please re-login."
-msgstr ""
-"Sitzungszeitlimitüberschreitung, melden Sie sich erneut an."
+msgstr "Sitzungszeitlimitüberschreitung, melden Sie sich erneut an."
msgid "User Name"
-msgstr ""
-"Benutzername"
+msgstr "Benutzername"
msgid "Password"
-msgstr ""
-"Kennwort"
+msgstr "Kennwort"
msgid "Generate a New Debug Report"
-msgstr ""
-"Neuen Debugbericht erstellen"
+msgstr "Neuen Debugbericht erstellen"
msgid "Report Name"
-msgstr ""
-"Berichtsname"
+msgstr "Berichtsname"
msgid ""
"The name used to identify the report. If omitted, a name will be chosen "
"based on current time. Name can contain: letters, digits, underscore (\"_\") "
"and hyphen (\"-\")."
msgstr ""
-"Der Name, mit dem der Bericht angegeben wird. Falls keine Angabe erfolgt, wird ein Name "
-"auf Basis der aktuellen Uhrzeit ausgewählt. Der Name kann Buchstaben, Ziffern, Unterstreichungszeichen (\"_\") "
-"und Bindestriche (\"-\") enthalten."
+"Der Name, mit dem der Bericht angegeben wird. Falls keine Angabe erfolgt, "
+"wird ein Name auf Basis der aktuellen Uhrzeit ausgewählt. Der Name kann "
+"Buchstaben, Ziffern, Unterstreichungszeichen (\"_\") und Bindestriche (\"-"
+"\") enthalten."
msgid "Rename a Debug Report"
-msgstr ""
-"Debugbericht umbenennen"
+msgstr "Debugbericht umbenennen"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
"hyphen (\"-\")."
msgstr ""
-"Der Name, mit dem der Bericht angegeben wird. Der Name kann Buchstaben, Ziffern und "
-"Bindestriche (\"-\") enthalten."
+"Der Name, mit dem der Bericht angegeben wird. Der Name kann Buchstaben, "
+"Ziffern und Bindestriche (\"-\") enthalten."
msgid "Submit"
-msgstr ""
-"Übergeben"
+msgstr "Übergeben"
msgid "Add a Repository"
-msgstr ""
-"Repository hinzufügen"
+msgstr "Repository hinzufügen"
msgid "Identifier"
-msgstr ""
-"Kennung"
+msgstr "Kennung"
msgid "Single word, unique identifier for the repository."
-msgstr ""
-"Einzelnes Wort, eindeutige Kennung für das Repository."
+msgstr "Einzelnes Wort, eindeutige Kennung für das Repository."
msgid "Textual name for the repository."
-msgstr ""
-"Textname für das Repository."
+msgstr "Textname für das Repository."
msgid "URL"
-msgstr ""
-"URL"
+msgstr "URL"
msgid "Required Field"
-msgstr ""
-"Erforderliches Feld"
+msgstr "Erforderliches Feld"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
-msgstr ""
-"URL zum Repository. Unterstützte Protokolle sind http, ftp und file."
+msgstr "URL zum Repository. Unterstützte Protokolle sind http, ftp und file."
msgid "Repository is a mirror"
-msgstr ""
-"Repository ist ein Spiegel"
+msgstr "Repository ist ein Spiegel"
msgid "Distribution"
-msgstr ""
-"Verteilung"
+msgstr "Verteilung"
msgid "Distribution of the DEB repository."
-msgstr ""
-"Verteilung des DEB-Repositorys."
+msgstr "Verteilung des DEB-Repositorys."
msgid "Components"
-msgstr ""
-"Komponenten"
+msgstr "Komponenten"
msgid "List of components in DEB repository."
-msgstr ""
-"Liste der Komponenten im DEB-Repository."
+msgstr "Liste der Komponenten im DEB-Repository."
msgid "Edit Repository"
-msgstr ""
-"Repository bearbeiten"
+msgstr "Repository bearbeiten"
msgid "Mirror List URL"
-msgstr ""
-"Spiegellisten-URL"
+msgstr "Spiegellisten-URL"
msgid "Yes"
-msgstr ""
-"Ja"
+msgstr "Ja"
msgid "No"
-msgstr ""
-"Nein"
+msgstr "Nein"
msgid "Add a Volume to Storage Pool"
-msgstr ""
-"Datenträger zu Speicherpool hinzufügen"
+msgstr "Datenträger zu Speicherpool hinzufügen"
msgid "Fetch from remote URL"
-msgstr ""
-"Über Remote URL abrufen"
+msgstr "Über Remote URL abrufen"
msgid "Enter the remote URL here."
-msgstr ""
-"Remote URL hier eingeben."
+msgstr "Remote URL hier eingeben."
msgid "Upload a file"
-msgstr ""
-"Datei hochladen"
+msgstr "Datei hochladen"
msgid "Choose the file you want to upload."
-msgstr ""
-"Wählen Sie die hochzuladende Datei aus."
+msgstr "Wählen Sie die hochzuladende Datei aus."
msgid "Define a New Storage Pool"
-msgstr ""
-"Neuen Speicherpool definieren"
+msgstr "Neuen Speicherpool definieren"
msgid "Storage Pool Name"
-msgstr ""
-"Speicherpoolname"
+msgstr "Speicherpoolname"
msgid ""
"The name used to identify the storage pools, and it should not be empty."
msgstr ""
-"Der Name, mit dem die Speicherpools gekennzeichnet werden. Er darf nicht leer sein."
+"Der Name, mit dem die Speicherpools gekennzeichnet werden. Er darf nicht "
+"leer sein."
msgid "Storage Pool Type"
-msgstr ""
-"Speicherpooltyp"
+msgstr "Speicherpooltyp"
msgid "Storage Path"
-msgstr ""
-"Speicherpfad"
+msgstr "Speicherpfad"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
msgstr ""
-"Der Pfad des Speicherpools. Jeder Speicherpool muss einen eindeutigen Pfad haben."
+"Der Pfad des Speicherpools. Jeder Speicherpool muss einen eindeutigen Pfad "
+"haben."
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
"your system."
msgstr ""
-"Kimchi versucht, das Verzeichnis zu erstellen, wenn es noch nicht in Ihrem System "
-"vorhanden ist."
+"Kimchi versucht, das Verzeichnis zu erstellen, wenn es noch nicht in Ihrem "
+"System vorhanden ist."
msgid "NFS Server IP"
-msgstr ""
-"NFS-Server-IP"
+msgstr "NFS-Server-IP"
msgid "NFS server IP or hostname. It can be input or chosen from history."
msgstr ""
-"IP oder Hostname des NFS-Servers. Diese(r) kann eingegeben oder aus dem Verlauf ausgewählt werden."
+"IP oder Hostname des NFS-Servers. Diese(r) kann eingegeben oder aus dem "
+"Verlauf ausgewählt werden."
msgid "NFS Path"
-msgstr ""
-"NFS-Pfad"
+msgstr "NFS-Pfad"
msgid "The NFS exported path on NFS server."
-msgstr ""
-"Der NFS-Exportpfad auf dem NFS-Server."
+msgstr "Der NFS-Exportpfad auf dem NFS-Server."
msgid "Device path"
-msgstr ""
-"Einheitenpfad"
+msgstr "Einheitenpfad"
msgid "iSCSI Server"
-msgstr ""
-"iSCSI-Server"
+msgstr "iSCSI-Server"
msgid "iSCSI server IP or hostname. It should not be empty."
-msgstr ""
-"IP oder Hostname des iSCSI-Servers. Diese(r) darf nicht leer sein."
+msgstr "IP oder Hostname des iSCSI-Servers. Diese(r) darf nicht leer sein."
msgid "Server"
-msgstr ""
-"Server"
+msgstr "Server"
msgid "Port"
-msgstr ""
-"Port"
+msgstr "Port"
msgid "Target"
-msgstr ""
-"Ziel"
+msgstr "Ziel"
msgid "The iSCSI target on iSCSI server"
-msgstr ""
-"Das iSCSI-Ziel auf dem iSCSI-Server"
+msgstr "Das iSCSI-Ziel auf dem iSCSI-Server"
msgid "Add iSCSI Authentication"
-msgstr ""
-"iSCSI-Authentifizierung hinzufügen"
+msgstr "iSCSI-Authentifizierung hinzufügen"
msgid "iSCSI Authentication"
-msgstr ""
-"iSCSI-Authentifizierung"
+msgstr "iSCSI-Authentifizierung"
msgid "SCSI Adapter"
-msgstr ""
-"SCSI-Adapter"
+msgstr "SCSI-Adapter"
msgid "Please, wait..."
-msgstr ""
-"Bitte warten..."
+msgstr "Bitte warten..."
msgid "Add Template"
-msgstr ""
-"Vorlage hinzufügen"
+msgstr "Vorlage hinzufügen"
msgid "Where is the source media for this template? "
-msgstr ""
-"Wo ist der Quellendatenträger für diese Vorlage?"
+msgstr "Wo ist der Quellendatenträger für diese Vorlage?"
msgid "Local ISO Image"
-msgstr ""
-"Lokales ISO-Image"
+msgstr "Lokales ISO-Image"
msgid "Local Image File"
-msgstr ""
-"Lokale Imagedatei"
+msgstr "Lokale Imagedatei"
msgid "Remote ISO Image"
-msgstr ""
-"Fernes ISO-Image"
+msgstr "Fernes ISO-Image"
msgid "Search ISOs"
-msgstr ""
-"ISOs suchen"
+msgstr "ISOs suchen"
msgid "The following ISOs are available:"
-msgstr ""
-"Die folgenden ISOs sind verfügbar:"
+msgstr "Die folgenden ISOs sind verfügbar:"
msgid "OS: "
-msgstr ""
-"BS: "
+msgstr "BS: "
msgid "Version: "
-msgstr ""
-"Version: "
+msgstr "Version: "
msgid "Size: "
-msgstr ""
-"Größe: "
+msgstr "Größe: "
msgid "Search more ISOs"
-msgstr ""
-"Weitere ISOs suchen"
+msgstr "Weitere ISOs suchen"
msgid "Create Templates from Selected ISO"
-msgstr ""
-"Vorlagen aus ausgewähltem ISO erstellen"
+msgstr "Vorlagen aus ausgewähltem ISO erstellen"
msgid "I want to use a specific ISO file"
-msgstr ""
-"Ich möchte eine bestimmte ISO-Datei verwenden"
+msgstr "Ich möchte eine bestimmte ISO-Datei verwenden"
msgid "Loading default remote ISOs ..."
-msgstr ""
-"Standardmäßige ferne ISOs werden geladen..."
+msgstr "Standardmäßige ferne ISOs werden geladen..."
msgid "Arch: "
-msgstr ""
-"Arch: "
+msgstr "Arch: "
msgid "I want to use a custom URL"
-msgstr ""
-"Ich möchte eine benutzerdefinierte URL verwenden"
+msgstr "Ich möchte eine benutzerdefinierte URL verwenden"
msgid "Edit Template"
-msgstr ""
-"Vorlage bearbeiten"
+msgstr "Vorlage bearbeiten"
msgid "Processor"
-msgstr ""
-"Prozessor"
+msgstr "Prozessor"
msgid "CDROM"
-msgstr ""
-"CD-ROM"
+msgstr "CD-ROM"
msgid "Image File"
-msgstr ""
-"Imagedatei"
+msgstr "Imagedatei"
msgid "Graphics"
-msgstr ""
-"Grafik"
+msgstr "Grafik"
msgid "Disk(GB)"
-msgstr ""
-"Festplatte (GB)"
+msgstr "Festplatte (GB)"
msgid "Disk Format"
-msgstr ""
-"Plattenformat"
+msgstr "Plattenformat"
msgid "CPU Number"
-msgstr ""
-"CPU-Anzahl"
+msgstr "CPU-Anzahl"
msgid "Manually set CPU topology"
-msgstr ""
-"CPU-Topologie manuell festlegen"
+msgstr "CPU-Topologie manuell festlegen"
msgid "Cores"
-msgstr ""
-"Kerne"
+msgstr "Kerne"
msgid "Threads"
-msgstr ""
-"Threads"
+msgstr "Threads"
msgid "CPU"
-msgstr ""
-"CPU"
+msgstr "CPU"
msgid "Disk I/O"
-msgstr ""
-"Platten-E/A"
+msgstr "Platten-E/A"
msgid "Network I/O"
-msgstr ""
-"Netz-E/A"
+msgstr "Netz-E/A"
msgid "Livetile"
-msgstr ""
-"Live Tile"
+msgstr "Live Tile"
msgid "No guests found."
-msgstr ""
-"Keine Gäste gefunden."
+msgstr "Keine Gäste gefunden."
msgid "Shut down"
-msgstr ""
-"Herunterfahren"
+msgstr "Herunterfahren"
msgid "Restart"
-msgstr ""
-"Erneut starten"
+msgstr "Erneut starten"
msgid "Basic Information"
-msgstr ""
-"Basisinformationen"
+msgstr "Basisinformationen"
msgid "OS Distro"
-msgstr ""
-"BS-Distro"
+msgstr "BS-Distro"
msgid "OS Code Name"
-msgstr ""
-"BS-Codename"
+msgstr "BS-Codename"
msgid "CPU(s)"
-msgstr ""
-"CPU(s)"
+msgstr "CPU(s)"
msgid "System Statistics"
-msgstr ""
-"Systemstatistik"
+msgstr "Systemstatistik"
msgid "Update Progress"
-msgstr ""
-"Aktualisierungsfortschritt"
+msgstr "Aktualisierungsfortschritt"
msgid "Network Name"
-msgstr ""
-"Netzname"
+msgstr "Netzname"
msgid "State"
-msgstr ""
-"Status"
+msgstr "Status"
msgid "Network Type"
-msgstr ""
-"Netztyp"
+msgstr "Netztyp"
msgid "Address Space"
-msgstr ""
-"Adressraum"
+msgstr "Adressraum"
msgid "Name should not contain '/' and '\"'."
-msgstr ""
-"Der Name darf weder '/' noch '\"' enthalten."
+msgstr "Der Name darf weder '/' noch '\"' enthalten."
msgid "Isolated: no external network connection"
-msgstr ""
-"Isoliert: keine externe Netzverbindung"
+msgstr "Isoliert: keine externe Netzverbindung"
msgid "NAT: outbound physical network connection only"
-msgstr ""
-"NAT: nur ausgehende physische Netzverbindung"
+msgstr "NAT: nur ausgehende physische Netzverbindung"
msgid "Bridged: Virtual machines are connected to physical network directly"
msgstr ""
"Überbrückt: Virtuelle Maschinen sind direkt mit physischem Netz verbunden"
msgid "(No interfaces found)"
-msgstr ""
-"(Keine Schnittstellen gefunden)"
+msgstr "(Keine Schnittstellen gefunden)"
msgid "Destination"
-msgstr ""
-"Zieladresse"
+msgstr "Zieladresse"
msgid "Enable VLAN"
-msgstr ""
-"VLAN aktivieren"
+msgstr "VLAN aktivieren"
msgid "VLAN ID"
-msgstr ""
-"VLAN-ID"
+msgstr "VLAN-ID"
msgid "Stop"
-msgstr ""
-"Stoppen"
+msgstr "Stoppen"
msgid "%Used"
-msgstr ""
-"% belegt"
+msgstr "% belegt"
msgid "Location"
-msgstr ""
-"Position"
+msgstr "Position"
msgid "Capacity"
-msgstr ""
-"Kapazität"
+msgstr "Kapazität"
msgid "Allocated"
-msgstr ""
-"Zugeordnet"
+msgstr "Zugeordnet"
msgid "active"
-msgstr ""
-"aktiv"
+msgstr "aktiv"
msgid "inactive"
-msgstr ""
-"inaktiv"
+msgstr "inaktiv"
msgid "Deactivate"
-msgstr ""
-"Inaktivieren"
+msgstr "Inaktivieren"
msgid "Activate"
-msgstr ""
-"Aktivieren"
+msgstr "Aktivieren"
msgid "Add Volume"
-msgstr ""
-"Datenträger hinzufügen"
+msgstr "Datenträger hinzufügen"
msgid "Extend"
-msgstr ""
-"Erweitern"
+msgstr "Erweitern"
msgid "Undefine"
-msgstr ""
-"Definition aufheben"
+msgstr "Definition aufheben"
msgid "Format"
-msgstr ""
-"Format"
+msgstr "Format"
msgid "Allocation"
-msgstr ""
-"Zuordnung"
+msgstr "Zuordnung"
msgid "No templates found."
-msgstr ""
-"Keine Vorlagen gefunden."
-
-# ENGL1SH_VERS10N 28617_40 DO NOT REMOVE OR CHANGE THIS LINE
-# T9N_SRC_ID 92
-# T9N_SH1P_STR1NG KV310AAP001 1
+msgstr "Keine Vorlagen gefunden."
diff --git a/po/en_US.po b/po/en_US.po
index 9331bde..26dbaac 100644
--- a/po/en_US.po
+++ b/po/en_US.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-06-24 09:39-0300\n"
+"POT-Creation-Date: 2015-08-21 09:52-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -85,6 +85,9 @@ msgstr ""
msgid "\"_passthrough_affected_by\" should be a device name string"
msgstr ""
+msgid "\"_available_only\" should be \"true\" or \"false\""
+msgstr ""
+
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
msgstr ""
diff --git a/po/es_ES.po b/po/es_ES.po
index f97760d..173af93 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -6,81 +6,71 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-06-24 09:39-0300\n"
+"POT-Creation-Date: 2015-08-21 09:52-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
-"Language: en_US\n"
+"Language: es_ES\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"Plural-Forms: nplurals=2; plural=n != 1;"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
#, python-format
msgid "Unknown parameter %(value)s"
-msgstr ""
-"Parámetro %(value)s desconocido"
+msgstr "Parámetro %(value)s desconocido"
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr ""
-"No se permite la supresión para %(resource)s"
+msgstr "No se permite la supresión para %(resource)s"
#, python-format
msgid "%(resource)s does not implement update method"
-msgstr ""
-"%(resource)s no implementa el método de actualización"
+msgstr "%(resource)s no implementa el método de actualización"
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr ""
-"No se permite la creación para %(resource)s"
+msgstr "No se permite la creación para %(resource)s"
msgid "Unable to parse JSON request"
-msgstr ""
-"No se puede analizar la solicitud JSON"
+msgstr "No se puede analizar la solicitud JSON"
msgid "This API only supports JSON"
-msgstr ""
-"Esta API sólo da soporte a JSON"
+msgstr "Esta API sólo da soporte a JSON"
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
-msgstr ""
-"Los parámetros no coinciden con el requisito en el esquema: %(err)s"
+msgstr "Los parámetros no coinciden con el requisito en el esquema: %(err)s"
msgid "You don't have permission to perform this operation."
-msgstr ""
-"No dispone de permiso para llevar a cabo esta operación."
+msgstr "No dispone de permiso para llevar a cabo esta operación."
msgid "Datastore is not initiated in the model object."
-msgstr ""
-"El almacén de datos no se ha iniciado en el objeto de modelo."
+msgstr "El almacén de datos no se ha iniciado en el objeto de modelo."
#, python-format
msgid "Unable to start task due error: %(err)s"
-msgstr ""
-"No se puede iniciar la tarea debido a un error: %(err)s"
+msgstr "No se puede iniciar la tarea debido a un error: %(err)s"
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
msgstr ""
-"El tiempo de espera de %(seconds)s segundos se ha agotado al ejecutar la tarea '%(task)s."
+"El tiempo de espera de %(seconds)s segundos se ha agotado al ejecutar la "
+"tarea '%(task)s."
#, python-format
msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
msgstr ""
-"Error en la autenticación para el usuario '%(username)s'. [Código de error: %(code)s]"
+"Error en la autenticación para el usuario '%(username)s'. [Código de error: "
+"%(code)s]"
msgid "You are not authorized to access Kimchi"
-msgstr ""
-"No tiene autorización para acceder a Kimchi"
+msgstr "No tiene autorización para acceder a Kimchi"
#, python-format
msgid "Specify %(item)s to login into Kimchi"
-msgstr ""
-"Especifique %(item)s para iniciar sesión en Kimchi"
+msgstr "Especifique %(item)s para iniciar sesión en Kimchi"
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
@@ -89,25 +79,24 @@ msgstr ""
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
-msgstr ""
-"Configuración LDAP no válida: %(item)s : %(value)s"
+msgstr "Configuración LDAP no válida: %(item)s : %(value)s"
msgid "Unknown \"_cap\" specified"
-msgstr ""
-"Se ha especificado un valor \"_cap\" desconocido"
+msgstr "Se ha especificado un valor \"_cap\" desconocido"
msgid "\"_passthrough\" should be \"true\" or \"false\""
-msgstr ""
-"\"_passthrough\" debería ser \"true\" o \"false\""
+msgstr "\"_passthrough\" debería ser \"true\" o \"false\""
msgid "\"_passthrough_affected_by\" should be a device name string"
msgstr ""
"\"_passthrough_affected_by\" debería ser una cadena de nombre de dispositivo"
+msgid "\"_available_only\" should be \"true\" or \"false\""
+msgstr "\"_available_only\" debería ser \"true\" o \"false\""
+
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
-msgstr ""
-"Error al obtener dispositivos de bloque. Detalles: %(err)s"
+msgstr "Error al obtener dispositivos de bloque. Detalles: %(err)s"
#, python-format
msgid "Error while getting block device information for %(device)s."
@@ -116,19 +105,20 @@ msgstr ""
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr ""
-"No se ha podido encontrar el archivo distro: %(filename)s"
+msgstr "No se ha podido encontrar el archivo distro: %(filename)s"
#, python-format
msgid ""
"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
msgstr ""
-"No se ha podido analizar el archivo distro: %(filename)s. Asegúrese de que se trate de un archivo JSON. "
+"No se ha podido analizar el archivo distro: %(filename)s. Asegúrese de que "
+"se trate de un archivo JSON. "
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
msgstr ""
-"No se puede iniciar sesión en el %(portal)s de destino de host iSCSI. Detalles: %(err)s"
+"No se puede iniciar sesión en el %(portal)s de destino de host iSCSI. "
+"Detalles: %(err)s"
#, python-format
msgid "Unable to login to iSCSI host %(host)s target %(target)s"
@@ -137,13 +127,11 @@ msgstr ""
#, python-format
msgid "Unable to find ISO file %(filename)s"
-msgstr ""
-"No se puede encontrar el archivo ISO %(filename)s"
+msgstr "No se puede encontrar el archivo ISO %(filename)s"
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr ""
-"El archivo ISO %(filename)s no se puede arrancar"
+msgstr "El archivo ISO %(filename)s no se puede arrancar"
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
@@ -152,13 +140,11 @@ msgstr ""
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
-msgstr ""
-"La entrada de validación de El Torito no es válida en ISO %(filename)s"
+msgstr "La entrada de validación de El Torito no es válida en ISO %(filename)s"
#, python-format
msgid "Invalid El Torito boot indicator in ISO %(filename)s"
-msgstr ""
-"El indicador de arranque de El Torito no es válido en ISO %(filename)s"
+msgstr "El indicador de arranque de El Torito no es válido en ISO %(filename)s"
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
@@ -167,8 +153,7 @@ msgstr ""
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
-msgstr ""
-"Formato erróneo al leer el descriptor de volúmenes en ISO %(filename)s"
+msgstr "Formato erróneo al leer el descriptor de volúmenes en ISO %(filename)s"
#, python-format
msgid ""
@@ -180,40 +165,39 @@ msgid ""
msgstr ""
"El hipervisor no tiene permiso para utilizar este ISO %(filename)s. "
"Considere moverlo a /var/lib/libvirt, o establezca el permiso de búsqueda en "
-"las listas de control de acceso de archivos para el usuario '%(user)s', si es posible, o añada el "
-"'%(user)s' al grupo de vías de acceso ISO o (no recomendado) 'chmod -R o+x "
-"'path_to_iso'. Detalles: %(err)s"
+"las listas de control de acceso de archivos para el usuario '%(user)s', si "
+"es posible, o añada el '%(user)s' al grupo de vías de acceso ISO o (no "
+"recomendado) 'chmod -R o+x 'path_to_iso'. Detalles: %(err)s"
msgid "An error occurred when probing image OS information."
msgstr ""
-"Se ha producido un error al analizar la información de sistema operativo de las imágenes. "
+"Se ha producido un error al analizar la información de sistema operativo de "
+"las imágenes. "
msgid "No OS information found in given image."
msgstr ""
-"No se ha encontrado información de sistema operativo en una imagen especificada. "
+"No se ha encontrado información de sistema operativo en una imagen "
+"especificada. "
#, python-format
msgid "Unable to read image file %(filename)s"
-msgstr ""
-"No se puede leer el archivo de imágenes %(filename)s"
+msgstr "No se puede leer el archivo de imágenes %(filename)s"
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
msgstr ""
-"El archivo de imágenes debe ser un archivo existente en el sistema. %(filename)s no es una entrada"
-"válida. "
+"El archivo de imágenes debe ser un archivo existente en el sistema. "
+"%(filename)s no es una entradaválida. "
#, python-format
msgid "Virtual machine %(name)s already exists"
-msgstr ""
-"Ya existe la máquina virtual %(name)s"
+msgstr "Ya existe la máquina virtual %(name)s"
#, python-format
msgid "Virtual machine %(name)s does not exist"
-msgstr ""
-"No existe la máquina virtual %(name)s"
+msgstr "No existe la máquina virtual %(name)s"
#, python-format
msgid ""
@@ -226,36 +210,31 @@ msgstr ""
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
msgstr ""
-"No se puede recuperar la captura de pantalla para la máquina virtual detenida %(name)s"
+"No se puede recuperar la captura de pantalla para la máquina virtual "
+"detenida %(name)s"
msgid "Remote ISO image is not supported by this server."
-msgstr ""
-"La imagen ISO remota no está soportada por este servidor."
+msgstr "La imagen ISO remota no está soportada por este servidor."
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
-msgstr ""
-"No se acepta la captura de pantalla en la máquina virtual %(name)s"
+msgstr "No se acepta la captura de pantalla en la máquina virtual %(name)s"
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"No se puede crear la máquina virtual %(name)s. Detalles: %(err)s"
+msgstr "No se puede crear la máquina virtual %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"No se puede actualizar la máquina virtual %(name)s. Detalles: %(err)s"
+msgstr "No se puede actualizar la máquina virtual %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"No se puede recuperar la máquina virtual %(name)s. Detalles: %(err)s"
+msgstr "No se puede recuperar la máquina virtual %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to connect to powered off virtual machine %(name)s."
-msgstr ""
-"No se puede conectar a la máquina virtual %(name)s apagada. "
+msgstr "No se puede conectar a la máquina virtual %(name)s apagada. "
msgid "Virtual machine name must be a string without slashes (/)"
msgstr ""
@@ -264,20 +243,22 @@ msgstr ""
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
msgstr ""
-"Se ha especificado un URI de plantilla %(value)s no válido para la máquina virtual"
+"Se ha especificado un URI de plantilla %(value)s no válido para la máquina "
+"virtual"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for virtual machine"
msgstr ""
-"Se ha especificado un URI de agrupación de almacenamiento %(value)s no válido para la máquina virtual"
+"Se ha especificado un URI de agrupación de almacenamiento %(value)s no "
+"válido para la máquina virtual"
msgid "Supported virtual machine graphics are Spice or VNC"
-msgstr ""
-"Los gráficos de la máquina virtual soportados son Spice o VNC"
+msgstr "Los gráficos de la máquina virtual soportados son Spice o VNC"
msgid "Graphics address to listen on must be IPv4 or IPv6"
msgstr ""
-"La dirección de gráficos en que hay que estar a la escucha debe ser IPv4 o IPv6"
+"La dirección de gráficos en que hay que estar a la escucha debe ser IPv4 o "
+"IPv6"
msgid "Specify a template to create a virtual machine from"
msgstr ""
@@ -285,73 +266,62 @@ msgstr ""
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"No se puede iniciar la máquina virtual %(name)s. Detalles: %(err)s"
+msgstr "No se puede iniciar la máquina virtual %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"No se puede apagar la máquina virtual %(name)s. Detalles: %(err)s"
+msgstr "No se puede apagar la máquina virtual %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"No se puede suprimir la máquina virtual %(name)s. Detalles: %(err)s"
+msgstr "No se puede suprimir la máquina virtual %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"No se puede restablecer la máquina virtual %(name)s. Detalles: %(err)s"
+msgstr "No se puede restablecer la máquina virtual %(name)s. Detalles: %(err)s"
msgid "User name list must be an array"
-msgstr ""
-"La lista de nombres de usuarios debe ser una matriz"
+msgstr "La lista de nombres de usuarios debe ser una matriz"
msgid "User name must be a string"
-msgstr ""
-"El nombre de usuario debe ser una serie"
+msgstr "El nombre de usuario debe ser una serie"
msgid "Group name list must be an array"
-msgstr ""
-"La lista de nombres de grupos debe ser una matriz"
+msgstr "La lista de nombres de grupos debe ser una matriz"
msgid "Group name must be a string"
-msgstr ""
-"El nombre de grupo debe ser una serie"
+msgstr "El nombre de grupo debe ser una serie"
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr ""
-"No existe el usuario (o usuarios) '%(users)s'"
+msgstr "No existe el usuario (o usuarios) '%(users)s'"
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr ""
-"No existe el grupo (o grupos) '%(groups)s'"
+msgstr "No existe el grupo (o grupos) '%(groups)s'"
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"No se puede apagar la máquina virtual %(name)s. Detalles: %(err)s"
+msgstr "No se puede apagar la máquina virtual %(name)s. Detalles: %(err)s"
#, python-format
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"No se puede obtener acceso a los metadatos de la máquina virtual %(name)s. Detalles: %(err)s"
+"No se puede obtener acceso a los metadatos de la máquina virtual %(name)s. "
+"Detalles: %(err)s"
msgid "The guest console password must be a string."
-msgstr ""
-"La contraseña de la consola del invitado debe ser una serie. "
+msgstr "La contraseña de la consola del invitado debe ser una serie. "
msgid "The life time for the guest console password must be a number."
msgstr ""
-"El tiempo de vida para la contraseña de la consola del invitado debe ser un número. "
+"El tiempo de vida para la contraseña de la consola del invitado debe ser un "
+"número. "
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
-msgstr ""
-"La máquina virtual '%(name)s' se debe detener antes de clonarla."
+msgstr "La máquina virtual '%(name)s' se debe detener antes de clonarla."
#, python-format
msgid "Insufficient disk space to clone virtual machine '%(name)s'"
@@ -360,45 +330,43 @@ msgstr ""
#, python-format
msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
-msgstr ""
-"No se puede clonar la máquina virtual '%(name)s'. Detalles: %(err)s"
+msgstr "No se puede clonar la máquina virtual '%(name)s'. Detalles: %(err)s"
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
-msgstr ""
-"Operación no válida para la máquina virtual no persistente %(name)s"
+msgstr "Operación no válida para la máquina virtual no persistente %(name)s"
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
msgstr ""
-"No se puede suspender la máquina virtual '%(name)s' porque no se está ejecutando."
+"No se puede suspender la máquina virtual '%(name)s' porque no se está "
+"ejecutando."
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
-msgstr ""
-"No se puede suspender la máquina virtual '%(name)s'. Detalles: %(err)s"
+msgstr "No se puede suspender la máquina virtual '%(name)s'. Detalles: %(err)s"
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
msgstr ""
-"No se puede reanudar la máquina virtual '%(name)s' porque no se ha puesto en pausa. "
+"No se puede reanudar la máquina virtual '%(name)s' porque no se ha puesto en "
+"pausa. "
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
-msgstr ""
-"No se puede reanudar la máquina virtual '%(name)s'. Detalles: %(err)s"
+msgstr "No se puede reanudar la máquina virtual '%(name)s'. Detalles: %(err)s"
msgid "Memory assigned is higher then the maximum allowed in the host."
-msgstr ""
-"La memoria asignada es superior al máximo asignado en el host."
+msgstr "La memoria asignada es superior al máximo asignado en el host."
#, python-format
msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
-"La máquina virtual '%(name)s' no admite la actualización de memoria activa. Actualice la memoria con "
-"la máquina fuera de línea para habilitar esta característica. "
+"La máquina virtual '%(name)s' no admite la actualización de memoria activa. "
+"Actualice la memoria con la máquina fuera de línea para habilitar esta "
+"característica. "
msgid "Only increase memory is allowed in active VMs"
msgstr ""
@@ -408,35 +376,35 @@ msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
msgstr ""
-"Para la actualización de memoria en directo, el valor de memoria nuevo debe ser igual al valor anterior de la memoria más "
-"múltiplos de 1024 Mib"
+"Para la actualización de memoria en directo, el valor de memoria nuevo debe "
+"ser igual al valor anterior de la memoria más múltiplos de 1024 Mib"
msgid "There are not enough free slots of 1024 Mib in the guest."
-msgstr ""
-"No hay suficientes ranuras libres de 1024 Mib en el invitado. "
+msgstr "No hay suficientes ranuras libres de 1024 Mib en el invitado. "
msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
msgstr ""
-"La versión libvirt del host no admite dispositivos de memoria. Libvirt debe ser >= "
-"1.2.14"
+"La versión libvirt del host no admite dispositivos de memoria. Libvirt debe "
+"ser >= 1.2.14"
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
-msgstr ""
-"Error al conectar el dispositivo de memoria. Detalles: %(error)s"
+msgstr "Error al conectar el dispositivo de memoria. Detalles: %(error)s"
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
-"La máquina virtual %(vmid)s no contiene el dispositivo de host asignado directamente %(dev_name)s."
+"La máquina virtual %(vmid)s no contiene el dispositivo de host asignado "
+"directamente %(dev_name)s."
#, python-format
msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
msgstr ""
-"El dispositivo de host %(dev_name)s no se permite para asignarlo directamente a la máquina virtual. "
+"El dispositivo de host %(dev_name)s no se permite para asignarlo "
+"directamente a la máquina virtual. "
msgid ""
"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
@@ -445,28 +413,26 @@ msgid ""
"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
"iommu=1."
msgstr ""
-"No se han encontrado grupos IOMMU. El paso a través de PCI de host necesita el grupo IOMMU para funcionar "
-"correctamente. Habilite Intel VT-d o AMD IOMMU en el BIOS y, a continuación, verifique "
-"que el Kernel se ha compilado con soporte IOMMU. Para Intel CPU, añada intel_iommu=on "
-"al parámetro de Kernel en /boot/grub2/grub.conf. Para AMD CPU, añada iommu=pt "
-"iommu=1."
+"No se han encontrado grupos IOMMU. El paso a través de PCI de host necesita "
+"el grupo IOMMU para funcionar correctamente. Habilite Intel VT-d o AMD IOMMU "
+"en el BIOS y, a continuación, verifique que el Kernel se ha compilado con "
+"soporte IOMMU. Para Intel CPU, añada intel_iommu=on al parámetro de Kernel "
+"en /boot/grub2/grub.conf. Para AMD CPU, añada iommu=pt iommu=1."
msgid "\"name\" should be a device name string"
-msgstr ""
-"\"name\" debe ser una serie de nombre de dispositivo"
+msgstr "\"name\" debe ser una serie de nombre de dispositivo"
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
msgstr ""
-"El dispositivo %(name)s lo está utilizando probablemente el host. No se puede conectar al "
-"invitado. "
+"El dispositivo %(name)s lo está utilizando probablemente el host. No se "
+"puede conectar al invitado. "
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
-msgstr ""
-"La interfaz %(iface)s no existe en la máquina virtual %(name)s"
+msgstr "La interfaz %(iface)s no existe en la máquina virtual %(name)s"
#, python-format
msgid ""
@@ -475,8 +441,7 @@ msgstr ""
"La red %(network)s especificada para la máquina virtual %(name)s no existe"
msgid "Supported virtual machine interfaces type is only network"
-msgstr ""
-"El tipo de interfaces de máquina virtual soportado es de red solamente"
+msgstr "El tipo de interfaces de máquina virtual soportado es de red solamente"
msgid "Network name for virtual machine interface must be a string"
msgstr ""
@@ -484,24 +449,23 @@ msgstr ""
msgid "Invalid network model card specified for virtual machine interface"
msgstr ""
-"Especificada tarjeta de modelo de red no válida para la interfaz de máquina virtual"
+"Especificada tarjeta de modelo de red no válida para la interfaz de máquina "
+"virtual"
msgid "Specify type and network to add a new virtual machine interface"
msgstr ""
-"Especifique el tipo y la red para añadir una interfaz de máquina virtual nueva"
+"Especifique el tipo y la red para añadir una interfaz de máquina virtual "
+"nueva"
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
-msgstr ""
-"La dirección MAC debe respetar este formato FF:FF:FF:FF:FF:FF"
+msgstr "La dirección MAC debe respetar este formato FF:FF:FF:FF:FF:FF"
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
-msgstr ""
-"La dirección MAC %(mac)s ya existe en la máquina virtual %(name)s"
+msgstr "La dirección MAC %(mac)s ya existe en la máquina virtual %(name)s"
msgid "Invalid MAC Address"
-msgstr ""
-"Dirección MAC no válida"
+msgstr "Dirección MAC no válida"
msgid "Cannot change MAC address of a running virtual machine"
msgstr ""
@@ -509,8 +473,7 @@ msgstr ""
#, python-format
msgid "Template %(name)s already exists"
-msgstr ""
-"La plantilla %(name)s ya existe"
+msgstr "La plantilla %(name)s ya existe"
#, python-format
msgid ""
@@ -522,67 +485,64 @@ msgstr ""
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
msgstr ""
-"La agrupación de almacenamiento %(pool)s especificada para la plantilla %(template)s no existe"
+"La agrupación de almacenamiento %(pool)s especificada para la plantilla "
+"%(template)s no existe"
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
msgstr ""
-"La agrupación de almacenamiento %(pool)s especificada para la plantilla %(template)s no está activa"
+"La agrupación de almacenamiento %(pool)s especificada para la plantilla "
+"%(template)s no está activa"
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr ""
-"Parámetro no válido '%(param)s' especificado para CDROM."
+msgstr "Parámetro no válido '%(param)s' especificado para CDROM."
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
msgstr ""
-"La red %(network)s que se ha especificado para la plantilla %(template)s no está activa"
+"La red %(network)s que se ha especificado para la plantilla %(template)s no "
+"está activa"
msgid "Template name must be a string"
-msgstr ""
-"El nombre de plantilla debe ser una serie"
+msgstr "El nombre de plantilla debe ser una serie"
msgid "Template icon must be a path to the image"
-msgstr ""
-"El icono de plantilla debe ser una vía de acceso a la imagen"
+msgstr "El icono de plantilla debe ser una vía de acceso a la imagen"
msgid "Template distribution must be a string"
-msgstr ""
-"La distribución de plantilla debe ser una serie"
+msgstr "La distribución de plantilla debe ser una serie"
msgid "Template distribution version must be a string"
-msgstr ""
-"La versión de distribución de plantilla debe ser una serie"
+msgstr "La versión de distribución de plantilla debe ser una serie"
msgid "The number of CPUs must be an integer greater than 0"
-msgstr ""
-"El número de CPU debe ser un entero mayor que 0"
+msgstr "El número de CPU debe ser un entero mayor que 0"
msgid "Amount of memory (MB) must be an integer greater than 512"
-msgstr ""
-"La cantidad de memoria (MB) debe ser un entero mayor que 512"
+msgstr "La cantidad de memoria (MB) debe ser un entero mayor que 512"
msgid "Template CDROM must be a local or remote ISO file"
-msgstr ""
-"El CDROM de plantilla debe ser un archivo ISO local o remoto"
+msgstr "El CDROM de plantilla debe ser un archivo ISO local o remoto"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for template"
msgstr ""
-"Se ha especificado un URI de agrupación de almacenamiento %(value)s no válido para la plantilla"
+"Se ha especificado un URI de agrupación de almacenamiento %(value)s no "
+"válido para la plantilla"
msgid "Specify an ISO image as CDROM or a base image to create a template"
msgstr ""
-"Especifique una imagen ISO como CDROM o una imagen base para crear una plantilla"
+"Especifique una imagen ISO como CDROM o una imagen base para crear una "
+"plantilla"
msgid "All networks for the template must be specified in a list."
-msgstr ""
-"Todas las redes para la plantilla deben especificarse en una lista."
+msgstr "Todas las redes para la plantilla deben especificarse en una lista."
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
msgstr ""
-"Especifique un volumen para una plantilla cuando la agrupación de almacenamiento sea iSCSI o SCSI"
+"Especifique un volumen para una plantilla cuando la agrupación de "
+"almacenamiento sea iSCSI o SCSI"
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
@@ -591,57 +551,52 @@ msgstr ""
#, python-format
msgid "Unable to create template due error: %(err)s"
-msgstr ""
-"No se ha podido crear la plantilla debido al error: %(err)s"
+msgstr "No se ha podido crear la plantilla debido al error: %(err)s"
#, python-format
msgid "Unable to delete template due error: %(err)s"
-msgstr ""
-"No se ha podido suprimir la plantilla debido a un error: %(err)s"
+msgstr "No se ha podido suprimir la plantilla debido a un error: %(err)s"
msgid "Disk size must be an integer greater than 1GB."
-msgstr ""
-"El tamaño del disco debe ser un entero mayor que 1 GB."
+msgstr "El tamaño del disco debe ser un entero mayor que 1 GB."
msgid "Template base image must be a valid local image file"
msgstr ""
-"La imagen base de la plantilla debe ser un archivo de imagen base local válido"
+"La imagen base de la plantilla debe ser un archivo de imagen base local "
+"válido"
#, python-format
msgid "Cannot identify base image %(path)s format"
-msgstr ""
-"No se puede identificar el formato de la imagen base %(path)s"
+msgstr "No se puede identificar el formato de la imagen base %(path)s"
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
msgstr ""
-"Cuando se especifique la topología de CPU, las VCPU deben ser un producto de sockets, núcleos y "
-"hebras. "
+"Cuando se especifique la topología de CPU, las VCPU deben ser un producto de "
+"sockets, núcleos y hebras. "
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
"zero."
msgstr ""
-"Cuando se especifica la topología de CPU, cada elemento debe ser un entero mayor que "
-"cero."
+"Cuando se especifica la topología de CPU, cada elemento debe ser un entero "
+"mayor que cero."
msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"formato de imagen de disco no válido. Formatos válidos: bochs, cloop, cow, dmg, qcow, "
-"qcow2, qed, raw, vmdk, vpc."
+"formato de imagen de disco no válido. Formatos válidos: bochs, cloop, cow, "
+"dmg, qcow, qcow2, qed, raw, vmdk, vpc."
#, python-format
msgid "Storage pool %(name)s already exists"
-msgstr ""
-"Ya existe la agrupación de almacenamiento %(name)s"
+msgstr "Ya existe la agrupación de almacenamiento %(name)s"
#, python-format
msgid "Storage pool %(name)s does not exist"
-msgstr ""
-"No existe la agrupación de almacenamiento %(name)s"
+msgstr "No existe la agrupación de almacenamiento %(name)s"
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
@@ -650,8 +605,7 @@ msgstr ""
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr ""
-"No se puede suprimir la agrupación de almacenamiento activo %(name)s"
+msgstr "No se puede suprimir la agrupación de almacenamiento activo %(name)s"
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
@@ -668,39 +622,43 @@ msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
msgstr ""
-"No se puede obtener el número de volúmenes de almacenamiento en la agrupación de almacenamiento %(name)s. Detalles: "
-"%(err)s"
+"No se puede obtener el número de volúmenes de almacenamiento en la "
+"agrupación de almacenamiento %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
msgstr ""
-"No se puede activar la agrupación de almacenamiento %(name)s. Detalles: %(err)s"
+"No se puede activar la agrupación de almacenamiento %(name)s. Detalles: "
+"%(err)s"
#, python-format
msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
msgstr ""
-"No se puede desactivar la agrupación de almacenamiento %(name)s. Detalles: %(err)s"
+"No se puede desactivar la agrupación de almacenamiento %(name)s. Detalles: "
+"%(err)s"
#, python-format
msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
msgstr ""
-"No se puede suprimir la agrupación de almacenamiento %(name)s. Detalles: %(err)s"
+"No se puede suprimir la agrupación de almacenamiento %(name)s. Detalles: "
+"%(err)s"
#, python-format
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
msgstr ""
-"No se puede crear la agrupación de NFS ya que la vía de acceso de exportación %(path)s podría bloquearse durante el montaje"
+"No se puede crear la agrupación de NFS ya que la vía de acceso de "
+"exportación %(path)s podría bloquearse durante el montaje"
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
msgstr ""
-"No se puede crear la agrupación de NFS ya que ha fallado el montaje de la vía de acceso de exportación %(path)s"
+"No se puede crear la agrupación de NFS ya que ha fallado el montaje de la "
+"vía de acceso de exportación %(path)s"
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr ""
-"Tipo de agrupación de almacenamiento no admitido: %(type)s"
+msgstr "Tipo de agrupación de almacenamiento no admitido: %(type)s"
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
@@ -709,18 +667,18 @@ msgstr ""
msgid "Storage pool name must be a string without slashes (/)"
msgstr ""
-"El nombre de la agrupación de almacenamiento debe ser una serie sin barras inclinadas (/)"
+"El nombre de la agrupación de almacenamiento debe ser una serie sin barras "
+"inclinadas (/)"
msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
"iso"
msgstr ""
-"Los tipos de agrupación de almacenamiento admitidos son dir, netfs, logical, iscsi, isci y kimchi-"
-"iso"
+"Los tipos de agrupación de almacenamiento admitidos son dir, netfs, logical, "
+"iscsi, isci y kimchi-iso"
msgid "Storage pool path must be a string"
-msgstr ""
-"La vía de acceso de la agrupación de almacenamiento debe ser una serie"
+msgstr "La vía de acceso de la agrupación de almacenamiento debe ser una serie"
msgid "Storage pool host must be a IP or hostname"
msgstr ""
@@ -728,27 +686,27 @@ msgstr ""
msgid "Storage pool device must be the absolute path to the block device"
msgstr ""
-"El dispositivo de la agrupación de almacenamiento debe ser la vía de acceso absoluta al dispositivo de bloque"
+"El dispositivo de la agrupación de almacenamiento debe ser la vía de acceso "
+"absoluta al dispositivo de bloque"
msgid "Storage pool devices parameter must be a list"
msgstr ""
-"El parámetro de los dispositivos de agrupación de almacenamiento debe ser una lista"
+"El parámetro de los dispositivos de agrupación de almacenamiento debe ser "
+"una lista"
msgid "Target IQN of an iSCSI pool must be a string"
-msgstr ""
-"El IQN destino de una agrupación de iSCSI debe ser una serie"
+msgstr "El IQN destino de una agrupación de iSCSI debe ser una serie"
msgid "Port of a remote storage server must be an integer between 1 and 65535"
msgstr ""
-"El puerto de un servidor de almacenamiento remoto debe ser un entero entre 1 y 65535"
+"El puerto de un servidor de almacenamiento remoto debe ser un entero entre 1 "
+"y 65535"
msgid "iSCSI target username must be a string"
-msgstr ""
-"El nombre de usuario de destino de iSCSI debe ser una serie"
+msgstr "El nombre de usuario de destino de iSCSI debe ser una serie"
msgid "iSCSI target password must be a string"
-msgstr ""
-"La contraseña de destino de iSCSI debe ser una serie"
+msgstr "La contraseña de destino de iSCSI debe ser una serie"
msgid "Specify name and type to create a storage pool"
msgstr ""
@@ -759,21 +717,20 @@ msgid ""
"%(disk)s is not a valid disk/partition. Could not add it to the pool "
"%(pool)s."
msgstr ""
-"%(disk)s no es un disco/partición válido. No se ha podido añadir a la agrupación "
-"%(pool)s."
+"%(disk)s no es un disco/partición válido. No se ha podido añadir a la "
+"agrupación %(pool)s."
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
-msgstr ""
-"No se puede ampliar la agrupación lógica %(pool)s. Detalles: %(err)s"
+msgstr "No se puede ampliar la agrupación lógica %(pool)s. Detalles: %(err)s"
msgid "The parameter disks only can be updated for logical storage pool."
msgstr ""
-"Los discos de parámetro sólo pueden actualizarse para la agrupación de almacenamiento lógico."
+"Los discos de parámetro sólo pueden actualizarse para la agrupación de "
+"almacenamiento lógico."
msgid "The SCSI host adapter name must be a string."
-msgstr ""
-"El nombre del adaptador de host SCSI debe ser una serie."
+msgstr "El nombre del adaptador de host SCSI debe ser una serie."
msgid "The storage pool kimchi_isos is reserved for internal use"
msgstr ""
@@ -784,27 +741,29 @@ msgid ""
"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"No se puede activar la agrupación de almacenamiento NFS %(name)s. El servidor NFS %(server)s "
-"está fuera de alcance."
+"No se puede activar la agrupación de almacenamiento NFS %(name)s. El "
+"servidor NFS %(server)s está fuera de alcance."
#, python-format
msgid ""
"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"No se puede desactivar la agrupación de almacenamiento NFS %(name)s. El servidor NFS %(server)s "
-"está fuera de alcance."
+"No se puede desactivar la agrupación de almacenamiento NFS %(name)s. El "
+"servidor NFS %(server)s está fuera de alcance."
#, python-format
msgid ""
"Unable to deactivate pool %(name)s as it is associated with some templates"
msgstr ""
-"No se puede desactivar la agrupación %(name)s ya que está asociada con algunas plantillas"
+"No se puede desactivar la agrupación %(name)s ya que está asociada con "
+"algunas plantillas"
#, python-format
msgid "Unable to delete pool %(name)s as it is associated with some templates"
msgstr ""
-"No se puede suprimir la agrupación %(name)s ya que está asociada con algunas plantillas"
+"No se puede suprimir la agrupación %(name)s ya que está asociada con algunas "
+"plantillas"
#, python-format
msgid ""
@@ -817,25 +776,26 @@ msgstr ""
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
msgstr ""
-"No se puede actualizar la base de datos con la información de exploración profunda debido a un error: %(err)s"
+"No se puede actualizar la base de datos con la información de exploración "
+"profunda debido a un error: %(err)s"
#, python-format
msgid "Storage volume %(name)s already exists"
-msgstr ""
-"Ya existe el volumen de almacenamiento %(name)s"
+msgstr "Ya existe el volumen de almacenamiento %(name)s"
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
msgstr ""
-"No existe el volumen de almacenamiento %(name)s en la agrupación de almacenamiento %(pool)s"
+"No existe el volumen de almacenamiento %(name)s en la agrupación de "
+"almacenamiento %(pool)s"
#, python-format
msgid ""
"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
"not active"
msgstr ""
-"No se puede crear el volumen de almacenamiento %(volume)s porque la agrupación de almacenamiento %(pool)s "
-"no está activa"
+"No se puede crear el volumen de almacenamiento %(volume)s porque la "
+"agrupación de almacenamiento %(pool)s no está activa"
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
@@ -846,26 +806,29 @@ msgstr ""
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
msgstr ""
-"No se pueden listar los volúmenes de almacenamiento porque la agrupación de almacenamiento %(pool)s no está activa"
+"No se pueden listar los volúmenes de almacenamiento porque la agrupación de "
+"almacenamiento %(pool)s no está activa"
#, python-format
msgid ""
"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
"%(err)s"
msgstr ""
-"No se puede crear el volumen de almacenamiento %(name)s en la agrupación de almacenamiento %(pool)s. Detalles: "
-"%(err)s"
+"No se puede crear el volumen de almacenamiento %(name)s en la agrupación de "
+"almacenamiento %(pool)s. Detalles: %(err)s"
#, python-format
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
msgstr ""
-"No se pueden listar los volúmenes de almacenamiento en la agrupación de almacenamiento %(pool)s. Detalles: %(err)s"
+"No se pueden listar los volúmenes de almacenamiento en la agrupación de "
+"almacenamiento %(pool)s. Detalles: %(err)s"
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
msgstr ""
-"No se pueden limpiar los volúmenes de almacenamiento %(name)s. Detalles: %(err)s"
+"No se pueden limpiar los volúmenes de almacenamiento %(name)s. Detalles: "
+"%(err)s"
#, python-format
msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
@@ -875,72 +838,68 @@ msgstr ""
#, python-format
msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
msgstr ""
-"No se puede redimensionar el volumen de almacenamiento %(name)s. Detalles: %(err)s"
+"No se puede redimensionar el volumen de almacenamiento %(name)s. Detalles: "
+"%(err)s"
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
msgstr ""
-"El tipo de almacenamiento %(type)s no admite la creación y supresión del volumen"
+"El tipo de almacenamiento %(type)s no admite la creación y supresión del "
+"volumen"
msgid "Storage volume name must be a string"
-msgstr ""
-"El nombre de volumen de almacenamiento debe ser una serie"
+msgstr "El nombre de volumen de almacenamiento debe ser una serie"
msgid "Storage volume allocation must be an integer number"
-msgstr ""
-"La asignación de volumen de almacenamiento debe ser un número entero"
+msgstr "La asignación de volumen de almacenamiento debe ser un número entero"
msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"Formato de volumen de almacenamiento no admitido. Formatos válidos: bochs, cloop, cow, dmg, "
-"qcow, qcow2, qed, raw, vmdk, vpc."
+"Formato de volumen de almacenamiento no admitido. Formatos válidos: bochs, "
+"cloop, cow, dmg, qcow, qcow2, qed, raw, vmdk, vpc."
msgid "Storage volume requires a volume name"
-msgstr ""
-"El volumen de almacenamiento requiere un nombre de volumen"
+msgstr "El volumen de almacenamiento requiere un nombre de volumen"
#, python-format
msgid ""
"Unable to update database with storage volume information due error: %(err)s"
msgstr ""
-"No se puede actualizar la base de datos con la información del volumen de almacenamiento debido a un error: %(err)s"
+"No se puede actualizar la base de datos con la información del volumen de "
+"almacenamiento debido a un error: %(err)s"
#, python-format
msgid "Only one of parameter %(param)s can be specified"
-msgstr ""
-"Sólo se puede especificar uno de los parámetros %(param)s"
+msgstr "Sólo se puede especificar uno de los parámetros %(param)s"
#, python-format
msgid "Create volume from %(param)s is not supported"
-msgstr ""
-"No se admite la creación del volumen de %(param)s"
+msgstr "No se admite la creación del volumen de %(param)s"
msgid "Storage volume capacity must be an integer number."
-msgstr ""
-"La capacidad del volumen de almacenamiento debe ser un número entero. "
+msgstr "La capacidad del volumen de almacenamiento debe ser un número entero. "
msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
msgstr ""
-"El URL del volumen de almacenamiento debe ser http://, https://, ftp:// o ftps://."
+"El URL del volumen de almacenamiento debe ser http://, https://, ftp:// o "
+"ftps://."
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
-msgstr ""
-"No se puede acceder al archivo %(url)s. Por favor, compruébelo. "
+msgstr "No se puede acceder al archivo %(url)s. Por favor, compruébelo. "
#, python-format
msgid ""
"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
"%(err)s"
msgstr ""
-"No se puede clonar el volumen de almacenamiento '%(name)s' en la agrupación '%(pool)s'. Detalles: "
-"%(err)s"
+"No se puede clonar el volumen de almacenamiento '%(name)s' en la agrupación "
+"'%(pool)s'. Detalles: %(err)s"
msgid "Specify chunk data and its size to upload a file."
-msgstr ""
-"Especifique datos de fragmento y su tamaño para cargar un archivo. "
+msgstr "Especifique datos de fragmento y su tamaño para cargar un archivo. "
msgid "In order to upload a storage volume, specify the 'upload' parameter."
msgstr ""
@@ -949,7 +908,8 @@ msgstr ""
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
msgstr ""
-"No se pueden cargar datos de fragmento porque no coinciden con el tamaño de fragmento solicitado. "
+"No se pueden cargar datos de fragmento porque no coinciden con el tamaño de "
+"fragmento solicitado. "
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
@@ -958,27 +918,26 @@ msgstr ""
msgid "The upload chunk data will exceed the storage volume size."
msgstr ""
-"Los datos de fragmento de carga superarán el tamaño del volumen de almacenamiento. "
+"Los datos de fragmento de carga superarán el tamaño del volumen de "
+"almacenamiento. "
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
msgstr ""
-"No se pueden cargar datos de fragmento al volumen de almacenamiento. Detalles: %(err)s."
+"No se pueden cargar datos de fragmento al volumen de almacenamiento. "
+"Detalles: %(err)s."
#, python-format
msgid "Interface %(name)s does not exist"
-msgstr ""
-"No existe la interfaz %(name)s"
+msgstr "No existe la interfaz %(name)s"
#, python-format
msgid "Network %(name)s already exists"
-msgstr ""
-"Ya existe la red %(name)s"
+msgstr "Ya existe la red %(name)s"
#, python-format
msgid "Network %(name)s does not exist"
-msgstr ""
-"No existe la red %(name)s"
+msgstr "No existe la red %(name)s"
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
@@ -987,61 +946,54 @@ msgstr ""
#, python-format
msgid "Specify a network interface to create bridged network %(name)s"
-msgstr ""
-"Especifique una interfaz de red para crear una red puenteada %(name)s"
+msgstr "Especifique una interfaz de red para crear una red puenteada %(name)s"
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr ""
-"No se puede suprimir la red activa %(name)s"
+msgstr "No se puede suprimir la red activa %(name)s"
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
msgstr ""
-"La interfaz %(iface)s especificada para la red %(network)s ya se está utilizando"
+"La interfaz %(iface)s especificada para la red %(network)s ya se está "
+"utilizando"
msgid "Interface should be bare NIC, bonding or bridge device."
-msgstr ""
-"La interfaz debe ser dispositivo de puente, enlazado o NIC simple."
+msgstr "La interfaz debe ser dispositivo de puente, enlazado o NIC simple."
#, python-format
msgid "Unable to create network %(name)s. Details: %(err)s"
-msgstr ""
-"No se puede crear la red %(name)s. Detalles: %(err)s"
+msgstr "No se puede crear la red %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
-msgstr ""
-"No se puede encontrar una dirección IP libre para la red '%(name)s'"
+msgstr "No se puede encontrar una dirección IP libre para la red '%(name)s'"
#, python-format
msgid "The interface %(iface)s already exists."
-msgstr ""
-"La interfaz %(iface)s ya existe."
+msgstr "La interfaz %(iface)s ya existe."
msgid "Network name must be a string without slashes (/) or quotes (\")"
msgstr ""
-"El nombre de red debe ser una serie sin barras inclinadas (/) ni comillas (\")"
+"El nombre de red debe ser una serie sin barras inclinadas (/) ni comillas "
+"(\")"
msgid "Supported network types are isolated, NAT and bridge"
-msgstr ""
-"Los tipos de red soportados son aislada, NAT y puente"
+msgstr "Los tipos de red soportados son aislada, NAT y puente"
msgid "Network subnet must be a string with IP address and prefix or netmask"
msgstr ""
-"La subred de red debe ser una serie con dirección IP y prefijo o máscara de red"
+"La subred de red debe ser una serie con dirección IP y prefijo o máscara de "
+"red"
msgid "Network interface must be a string"
-msgstr ""
-"La interfaz de red debe ser una serie"
+msgstr "La interfaz de red debe ser una serie"
msgid "Network VLAN ID must be an integer between 1 and 4094"
-msgstr ""
-"El ID de VLAN de red debe ser un entero entre 1 y 4094"
+msgstr "El ID de VLAN de red debe ser un entero entre 1 y 4094"
msgid "Specify name and type to create a Network"
-msgstr ""
-"Especifique el nombre y el tipo para crear una red"
+msgstr "Especifique el nombre y el tipo para crear una red"
#, python-format
msgid ""
@@ -1062,34 +1014,31 @@ msgstr ""
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
msgstr ""
-"El dispositivo en puente %(name)s no puede ser el dispositivo de conexión troncal de una VLAN."
+"El dispositivo en puente %(name)s no puede ser el dispositivo de conexión "
+"troncal de una VLAN."
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr ""
-"No se ha podido activar la interfaz %(iface)s: %(err)s."
+msgstr "No se ha podido activar la interfaz %(iface)s: %(err)s."
#, python-format
msgid ""
"Failed to activate interface %(iface)s. Please check the physical link "
"status."
msgstr ""
-"No se ha podido activar la interfaz %(iface)s. Compruebe el estado del enlace "
-"físico. "
+"No se ha podido activar la interfaz %(iface)s. Compruebe el estado del "
+"enlace físico. "
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
-msgstr ""
-"No se ha podido iniciar la red %(name)s. Detalles: %(err)s"
+msgstr "No se ha podido iniciar la red %(name)s. Detalles: %(err)s"
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr ""
-"El informe de depuración %(name)s no existe"
+msgstr "El informe de depuración %(name)s no existe"
msgid "Debug report tool not found in system"
-msgstr ""
-"Herramienta de informes de depuración no encontrada en el sistema"
+msgstr "Herramienta de informes de depuración no encontrada en el sistema"
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
@@ -1099,7 +1048,8 @@ msgstr ""
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
msgstr ""
-"No se puede encontrar ningún informe de depuración con el nombre indicado %(name)s"
+"No se puede encontrar ningún informe de depuración con el nombre indicado "
+"%(name)s"
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
@@ -1107,64 +1057,58 @@ msgstr ""
"No se puede generar el informe de depuración %(name)s. Detalles: %(err)s"
msgid "You should give a name for the debug report file."
-msgstr ""
-"Debería dar un nombre al archivo de informe de depuración."
+msgstr "Debería dar un nombre al archivo de informe de depuración."
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
-"El nombre del informe de depuración debe ser una serie. Solamente se permiten letras, dígitos, carácter de subrayado ('_') "
-"y guión ('-'). "
+"El nombre del informe de depuración debe ser una serie. Solamente se "
+"permiten letras, dígitos, carácter de subrayado ('_') y guión ('-'). "
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
msgstr ""
-"El informe de depuración con el nombre especificado \"%(name)s\" ya existe. Utilice "
-"otro."
+"El informe de depuración con el nombre especificado \"%(name)s\" ya existe. "
+"Utilice otro."
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr ""
-"El servidor de almacenamiento %(server)s no lo ha utilizado Kimchi"
+msgstr "El servidor de almacenamiento %(server)s no lo ha utilizado Kimchi"
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr ""
-"No existe Distro '%(name)s'"
+msgstr "No existe Distro '%(name)s'"
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr ""
-"La partición %(name)s no existe en el host"
+msgstr "La partición %(name)s no existe en el host"
msgid "Unable to shutdown host machine as there are running virtual machines"
msgstr ""
-"No se puede concluir la máquina host ya que hay máquinas virtuales en ejecución"
+"No se puede concluir la máquina host ya que hay máquinas virtuales en "
+"ejecución"
msgid "Unable to reboot host machine as there are running virtual machines"
msgstr ""
-"No se puede rearrancar la máquina host ya que hay máquinas virtuales en ejecución"
+"No se puede rearrancar la máquina host ya que hay máquinas virtuales en "
+"ejecución"
#, python-format
msgid "Node device '%(name)s' not found"
-msgstr ""
-"No se encuentra el dispositivo de nodos '%(name)s'"
+msgstr "No se encuentra el dispositivo de nodos '%(name)s'"
msgid "Conflicting flag filters specified."
-msgstr ""
-"Se han especificado filtros de distintivos en conflicto."
+msgstr "Se han especificado filtros de distintivos en conflicto."
msgid "No packages marked for update"
-msgstr ""
-"No hay paquetes marcados para su actualización"
+msgstr "No hay paquetes marcados para su actualización"
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr ""
-"El paquete %(name)s no se ha marcado para actualizarlo."
+msgstr "El paquete %(name)s no se ha marcado para actualizarlo."
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
@@ -1172,77 +1116,67 @@ msgstr ""
"Error al obtener paquetes marcados para su actualización. Detalles: %(err)s"
msgid "There is no compatible package manager for this system."
-msgstr ""
-"No hay ningún gestor de paquetes compatible para este sistema."
+msgstr "No hay ningún gestor de paquetes compatible para este sistema."
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr ""
-"No se puede encontrar %(item)s en el almacén de datos"
+msgstr "No se puede encontrar %(item)s en el almacén de datos"
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr ""
-"URI %(uri)s no válido"
+msgstr "URI %(uri)s no válido"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
msgstr ""
-"Tiempo de espera excedido al ejecutar el mandato '%(cmd)s' después de %(seconds)s segundos"
+"Tiempo de espera excedido al ejecutar el mandato '%(cmd)s' después de "
+"%(seconds)s segundos"
msgid "Unable to choose a virtual machine name"
-msgstr ""
-"No se puede elegir un nombre de máquina virtual"
+msgstr "No se puede elegir un nombre de máquina virtual"
#, python-format
msgid "Invalid data value '%(value)s'"
-msgstr ""
-"Valor de datos '%(value)s' no válido"
+msgstr "Valor de datos '%(value)s' no válido"
#, python-format
msgid "Invalid data unit '%(unit)s'"
-msgstr ""
-"Unidad de datos '%(unit)s' no válida"
+msgstr "Unidad de datos '%(unit)s' no válida"
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
-msgstr ""
-"Tipo de almacenamiento no válido. Tipos soportados: 'cdrom', 'disk'"
+msgstr "Tipo de almacenamiento no válido. Tipos soportados: 'cdrom', 'disk'"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
msgstr ""
-"La vía de acceso '%(value)s' no es una vía de acceso local/remota válida para el dispositivo"
+"La vía de acceso '%(value)s' no es una vía de acceso local/remota válida "
+"para el dispositivo"
msgid "Only CDROM path can be update."
-msgstr ""
-"Solamente se puede actualizar la vía de acceso de CDROM. "
+msgstr "Solamente se puede actualizar la vía de acceso de CDROM. "
#, python-format
msgid ""
"The storage device %(dev_name)s does not exist in the virtual machine "
"%(vm_name)s"
msgstr ""
-"El dispositivo de almacenamiento %(dev_name)s no existe en la máquina virtual. "
-"%(vm_name)s"
+"El dispositivo de almacenamiento %(dev_name)s no existe en la máquina "
+"virtual. %(vm_name)s"
#, python-format
msgid "Error while creating new storage device: %(error)s"
-msgstr ""
-"Error al crear el dispositivo de almacenamiento nuevo: %(error)s"
+msgstr "Error al crear el dispositivo de almacenamiento nuevo: %(error)s"
#, python-format
msgid "Error while updating storage device: %(error)s"
-msgstr ""
-"Error al actualizar el dispositivo de almacenamiento: %(error)s"
+msgstr "Error al actualizar el dispositivo de almacenamiento: %(error)s"
#, python-format
msgid "Error while removing storage device: %(error)s"
-msgstr ""
-"Error al eliminar el dispositivo de almacenamiento: %(error)s"
+msgstr "Error al eliminar el dispositivo de almacenamiento: %(error)s"
msgid "Do not support IDE device hot plug"
-msgstr ""
-"No se admite la conexión en caliente del IDE"
+msgstr "No se admite la conexión en caliente del IDE"
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
@@ -1258,91 +1192,81 @@ msgstr ""
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
msgstr ""
-"Se ha alcanzado el límite de tipo de controlador %(type)s de %(limit)s dispositivos"
+"Se ha alcanzado el límite de tipo de controlador %(type)s de %(limit)s "
+"dispositivos"
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
msgstr ""
-"No se puede recuperar la información de vía de acceso de disco para la agrupación o el volumen que se ha especificado: %(error)s"
+"No se puede recuperar la información de vía de acceso de disco para la "
+"agrupación o el volumen que se ha especificado: %(error)s"
msgid "Volume already in use by other virtual machine."
-msgstr ""
-"El volumen ya lo está utilizando otra máquina virtual. "
+msgstr "El volumen ya lo está utilizando otra máquina virtual. "
msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
msgstr ""
-"Solo se puede especificar uno de vía de acceso o agrupación/volumen "
-"para añadir un nuevo disco de máquina virtual"
+"Solo se puede especificar uno de vía de acceso o agrupación/volumen para "
+"añadir un nuevo disco de máquina virtual"
#, python-format
msgid ""
"Volume chosen with format %(format)s does not fit in the storage type "
"%(type)s"
msgstr ""
-"El volumen elegido con el formato %(format)s no se ajusta al tipo de almacenamiento"
-"%(type)s"
+"El volumen elegido con el formato %(format)s no se ajusta al tipo de "
+"almacenamiento%(type)s"
msgid "YUM Repository ID must be one word only string."
-msgstr ""
-"El ID de repositorio YUM debe ser una serie de una sola palabra."
+msgstr "El ID de repositorio YUM debe ser una serie de una sola palabra."
msgid "Repository URL must be an http://, ftp:// or file:// URL."
-msgstr ""
-"El URL de repositorio debe ser http://, ftp:// o archivo:// URL."
+msgstr "El URL de repositorio debe ser http://, ftp:// o archivo:// URL."
msgid ""
"Repository configuration is a dictionary with specific values according to "
"repository type."
msgstr ""
-"La configuración de repositorio es un diccionario con valores específicos según "
-"el tipo de repositorio."
+"La configuración de repositorio es un diccionario con valores específicos "
+"según el tipo de repositorio."
msgid "Distribution to DEB repository must be a string"
-msgstr ""
-"El repositorio de Distribución a DEB debe ser una serie"
+msgstr "El repositorio de Distribución a DEB debe ser una serie"
msgid "Components to DEB repository must be listed in a array"
-msgstr ""
-"El repositorio de Componentes a DEB debe estar listado en una matriz"
+msgstr "El repositorio de Componentes a DEB debe estar listado en una matriz"
msgid "Components to DEB repository must be a string"
-msgstr ""
-"El repositorio de Componentes a DEB debe ser una serie"
+msgstr "El repositorio de Componentes a DEB debe ser una serie"
msgid "Mirror list to repository must be a string"
-msgstr ""
-"La lista de duplicados en el repositorios debe ser una serie"
+msgstr "La lista de duplicados en el repositorios debe ser una serie"
msgid "YUM Repository name must be string."
-msgstr ""
-"El nombre del repositorio YUM debe ser una serie."
+msgstr "El nombre del repositorio YUM debe ser una serie."
msgid "GPG check must be a boolean value."
-msgstr ""
-"La comprobación de GPG debe ser un valor booleano."
+msgstr "La comprobación de GPG debe ser un valor booleano."
msgid "GPG key must be a URL pointing to the ASCII-armored file."
-msgstr ""
-"La clave GPG debe ser un URL que apunta al archivo blindado por ASCII."
+msgstr "La clave GPG debe ser un URL que apunta al archivo blindado por ASCII."
#, python-format
msgid "Could not update repository %(repo_id)s."
-msgstr ""
-"No se puede actualizar el repositorio %(repo_id)s."
+msgstr "No se puede actualizar el repositorio %(repo_id)s."
#, python-format
msgid "Repository %(repo_id)s does not exist."
-msgstr ""
-"El repositorio %(repo_id)s no existe. "
+msgstr "El repositorio %(repo_id)s no existe. "
msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
"update a YUM repository."
msgstr ""
-"Especifique el URL base de repositorio, la lista de duplicados o el metaenlace para crear o "
-"actualizar un repositorio YUM. "
+"Especifique el URL base de repositorio, la lista de duplicados o el "
+"metaenlace para crear o actualizar un repositorio YUM. "
msgid "Repository management tool was not recognized for your system."
msgstr ""
@@ -1350,23 +1274,21 @@ msgstr ""
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr ""
-"El repositorio %(repo_id)s ya está habilitado."
+msgstr "El repositorio %(repo_id)s ya está habilitado."
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr ""
-"El repositorio %(repo_id)s ya está inhabilitado. "
+msgstr "El repositorio %(repo_id)s ya está inhabilitado. "
#, python-format
msgid "Could not remove repository %(repo_id)s."
-msgstr ""
-"No se ha podido eliminar el repositorio %(repo_id)s."
+msgstr "No se ha podido eliminar el repositorio %(repo_id)s."
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
msgstr ""
-"No se ha podido escribir en el archivo de configuración del repositorio %(repo_file)s"
+"No se ha podido escribir en el archivo de configuración del repositorio "
+"%(repo_file)s"
msgid "Specify repository distribution in order to create a DEB repository."
msgstr ""
@@ -1374,41 +1296,33 @@ msgstr ""
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr ""
-"No se ha podido habilitar el repositorio %(repo_id)s."
+msgstr "No se ha podido habilitar el repositorio %(repo_id)s."
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr ""
-"No se ha podido inhabilitar el repositorio %(repo_id)s."
+msgstr "No se ha podido inhabilitar el repositorio %(repo_id)s."
msgid "YUM Repository ID already exists"
-msgstr ""
-"El ID de repositorio de YUM ya existe"
+msgstr "El ID de repositorio de YUM ya existe"
msgid "YUM Repository name must be a string"
-msgstr ""
-"El nombre del repositorio de YUM debe ser una serie"
+msgstr "El nombre del repositorio de YUM debe ser una serie"
#, python-format
msgid "Unable to list repositories. Details: '%(err)s'"
-msgstr ""
-"No se pueden listar los repositorios. Detalles: '%(err)s'"
+msgstr "No se pueden listar los repositorios. Detalles: '%(err)s'"
#, python-format
msgid "Unable to retrieve repository information. Details: '%(err)s'"
-msgstr ""
-"No se puede recuperar información de repositorios. Detalles: '%(err)s'"
+msgstr "No se puede recuperar información de repositorios. Detalles: '%(err)s'"
#, python-format
msgid "Unable to add repository. Details: '%(err)s'"
-msgstr ""
-"No se puede añadir el repositorio. Detalles: '%(err)s'"
+msgstr "No se puede añadir el repositorio. Detalles: '%(err)s'"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr ""
-"No se puede eliminar el repositorio. Detalles: '%(err)s'"
+msgstr "No se puede eliminar el repositorio. Detalles: '%(err)s'"
#, python-format
msgid ""
@@ -1428,689 +1342,562 @@ msgstr ""
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
msgstr ""
-"Se ha de detener la máquina virtual '%(vm)s' antes de crear una instantánea de la misma. "
+"Se ha de detener la máquina virtual '%(vm)s' antes de crear una instantánea "
+"de la misma. "
#, python-format
msgid ""
"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"No se puede crear la instantánea '%(name)s' en la máquina virtual '%(vm)s'. Detalles: "
-"%(err)s"
+"No se puede crear la instantánea '%(name)s' en la máquina virtual '%(vm)s'. "
+"Detalles: %(err)s"
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
-msgstr ""
-"La instantánea '%(name)s' no existe en la máquina virtual '%(vm)s'."
+msgstr "La instantánea '%(name)s' no existe en la máquina virtual '%(vm)s'."
#, python-format
msgid ""
"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"No se puede recuperar la instantánea '%(name)s' en la máquina virtual '%(vm)s'. Detalles: "
-"%(err)s"
+"No se puede recuperar la instantánea '%(name)s' en la máquina virtual "
+"'%(vm)s'. Detalles: %(err)s"
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
msgstr ""
-"No se pueden listar las instantáneas en la máquina virtual '%(vm)s'. Detalles: %(err)s"
+"No se pueden listar las instantáneas en la máquina virtual '%(vm)s'. "
+"Detalles: %(err)s"
#, python-format
msgid ""
"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"No se puede suprimir la instantánea '%(name)s' en la máquina virtual '%(vm)s'. Detalles: "
-"%(err)s"
+"No se puede suprimir la instantánea '%(name)s' en la máquina virtual "
+"'%(vm)s'. Detalles: %(err)s"
#, python-format
msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"No se puede recuperar la instantánea actual de la máquina virtual '%(vm)s'. Detalles: "
-"%(err)s"
+"No se puede recuperar la instantánea actual de la máquina virtual '%(vm)s'. "
+"Detalles: %(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
msgstr ""
-"No se puede revertir la máquina virtual '%(vm)s' en la instantánea '%(name)s'. Detalles: "
-"%(err)s"
+"No se puede revertir la máquina virtual '%(vm)s' en la instantánea "
+"'%(name)s'. Detalles: %(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
-"No se puede crear la instantánea de la máquina virtual '%(vm)s' porque contiene un "
-"disco con el formato '%(format)s'; sólo se admite 'qcow2'. "
+"No se puede crear la instantánea de la máquina virtual '%(vm)s' porque "
+"contiene un disco con el formato '%(format)s'; sólo se admite 'qcow2'. "
msgid "The number of vCPUs is too large for this system."
-msgstr ""
-"El número de vCPUs es demasiado grande para este sistema. "
+msgstr "El número de vCPUs es demasiado grande para este sistema. "
msgid "Invalid vCPU/topology combination."
-msgstr ""
-"Combinación de vCPU/topología no válida."
+msgstr "Combinación de vCPU/topología no válida."
msgid "This host (or current configuration) does not allow CPU topology."
-msgstr ""
-"Este host (o la configuración actual) no permite la topología de CPU. "
+msgstr "Este host (o la configuración actual) no permite la topología de CPU. "
msgid "ERROR CODE"
-msgstr ""
-"CÓDIGO DE ERROR"
+msgstr "CÓDIGO DE ERROR"
msgid "REASON"
-msgstr ""
-"RAZÓN"
+msgstr "RAZÓN"
msgid "STACK"
-msgstr ""
-"PILA"
+msgstr "PILA"
msgid "Go to Homepage"
-msgstr ""
-"Ir a la página inicial"
+msgstr "Ir a la página inicial"
msgid "Create a New Virtual Machine"
-msgstr ""
-"Crear una nueva máquina virtual"
+msgstr "Crear una nueva máquina virtual"
msgid "Virtual Machine Name"
-msgstr ""
-"Nombre de máquina virtual"
+msgstr "Nombre de máquina virtual"
msgid ""
"The name used to identify the virtual machine. If omitted, a name will be "
"chosen based on the template used."
msgstr ""
-"El nombre que se utiliza para identificar la máquina virtual. Si se omite, se "
-"elegirá un nombre basándose en la plantilla utilizada."
+"El nombre que se utiliza para identificar la máquina virtual. Si se omite, "
+"se elegirá un nombre basándose en la plantilla utilizada."
msgid "Template"
-msgstr ""
-"Plantilla"
+msgstr "Plantilla"
msgid "Please create a template first."
-msgstr ""
-"Cree una plantilla primero."
+msgstr "Cree una plantilla primero."
msgid "Create a Template"
-msgstr ""
-"Crear una plantilla"
+msgstr "Crear una plantilla"
msgid "Please choose a template."
-msgstr ""
-"Elija una plantilla."
+msgstr "Elija una plantilla."
msgid "OS"
-msgstr ""
-"SO"
+msgstr "SO"
msgid "OS Version"
-msgstr ""
-"Versión del SO"
+msgstr "Versión del SO"
msgid "CPUS"
-msgstr ""
-"CPUS"
+msgstr "CPUS"
msgid "Memory"
-msgstr ""
-"Memoria"
+msgstr "Memoria"
msgid "Create"
-msgstr ""
-"Crear"
+msgstr "Crear"
msgid "Creating..."
-msgstr ""
-"Creando..."
+msgstr "Creando..."
msgid "Edit Guest"
-msgstr ""
-"Editar invitado"
+msgstr "Editar invitado"
msgid "General"
-msgstr ""
-"General"
+msgstr "General"
msgid "Storage"
-msgstr ""
-"Almacenamiento"
+msgstr "Almacenamiento"
msgid "Interface"
-msgstr ""
-"Interfaz"
+msgstr "Interfaz"
msgid "Permission"
-msgstr ""
-"Permiso"
+msgstr "Permiso"
msgid "Host PCI Device"
-msgstr ""
-"Dispositivo PCI de host"
+msgstr "Dispositivo PCI de host"
msgid "Snapshot"
-msgstr ""
-"Instantánea"
+msgstr "Instantánea"
msgid "Name"
-msgstr ""
-"Nombre"
+msgstr "Nombre"
msgid "CPUs"
-msgstr ""
-"CPUs"
+msgstr "CPUs"
msgid "Memory (MB)"
-msgstr ""
-"Memoria (MB)"
+msgstr "Memoria (MB)"
msgid "Icon"
-msgstr ""
-"Icono"
+msgstr "Icono"
msgid "Device"
-msgstr ""
-"Dispositivo"
+msgstr "Dispositivo"
msgid "Path"
-msgstr ""
-"Vía de acceso"
+msgstr "Vía de acceso"
msgid "Network"
-msgstr ""
-"Red"
+msgstr "Red"
msgid "Type"
-msgstr ""
-"Tipo"
+msgstr "Tipo"
msgid "MAC Address"
-msgstr ""
-"Dirección MAC"
+msgstr "Dirección MAC"
msgid "Available system users and groups"
-msgstr ""
-"Usuarios y grupos del sistema disponibles"
+msgstr "Usuarios y grupos del sistema disponibles"
msgid "Selected system users and groups"
-msgstr ""
-"Usuarios y grupos del sistema seleccionados"
+msgstr "Usuarios y grupos del sistema seleccionados"
msgid "User"
-msgstr ""
-"Usuario"
+msgstr "Usuario"
msgid "All"
-msgstr ""
-"Todo"
+msgstr "Todo"
msgid "To Add"
-msgstr ""
-"A añadir"
+msgstr "A añadir"
msgid "Added"
-msgstr ""
-"Añadido"
+msgstr "Añadido"
msgid "filter"
-msgstr ""
-"filtrar"
+msgstr "filtrar"
msgid "Product"
-msgstr ""
-"Producto"
+msgstr "Producto"
msgid "Vendor"
-msgstr ""
-"Proveedor"
+msgstr "Proveedor"
msgid "Created"
-msgstr ""
-"Creado"
+msgstr "Creado"
msgid "Save"
-msgstr ""
-"Guardar"
+msgstr "Guardar"
msgid "Replace"
-msgstr ""
-"Sustituir"
+msgstr "Sustituir"
msgid "Detach"
-msgstr ""
-"Desconectar"
+msgstr "Desconectar"
msgid "Cancel"
-msgstr ""
-"Cancelar"
+msgstr "Cancelar"
msgid "revert"
-msgstr ""
-"revertir"
+msgstr "revertir"
msgid "Add a Storage Device to VM"
-msgstr ""
-"Añadir un dispositivo de almacenamiento a VM"
+msgstr "Añadir un dispositivo de almacenamiento a VM"
msgid "Device Type"
-msgstr ""
-"Tipo de dispositivo"
+msgstr "Tipo de dispositivo"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
msgstr ""
"El tipo de dispositivo. Actualmente se da soporte a \"cdrom\" y \"disk\"."
msgid "Storage Pool"
-msgstr ""
-"Agrupación de almacenamiento"
+msgstr "Agrupación de almacenamiento"
msgid "Storage pool which volume located in"
-msgstr ""
-"Agrupación de almacenamiento con volumen ubicado en"
+msgstr "Agrupación de almacenamiento con volumen ubicado en"
msgid "Storage Volume"
-msgstr ""
-"Volumen de almacenamiento"
+msgstr "Volumen de almacenamiento"
msgid "Storage volume to be attached"
-msgstr ""
-"Volumen de almacenamiento que se va a adjuntar"
+msgstr "Volumen de almacenamiento que se va a adjuntar"
msgid "File Path"
-msgstr ""
-"Vía de acceso de archivo"
+msgstr "Vía de acceso de archivo"
msgid "The ISO file path in the server for CDROM."
-msgstr ""
-"La vía de acceso del archivo ISO en el servidor para el CDROM."
+msgstr "La vía de acceso del archivo ISO en el servidor para el CDROM."
msgid "Attach"
-msgstr ""
-"Conectar"
+msgstr "Conectar"
msgid "Start"
-msgstr ""
-"Iniciar"
+msgstr "Iniciar"
msgid "Reset"
-msgstr ""
-"Restablecer"
+msgstr "Restablecer"
msgid "Pause"
-msgstr ""
-"Poner en pausa"
+msgstr "Poner en pausa"
msgid "Resume"
-msgstr ""
-"Reanudar"
+msgstr "Reanudar"
msgid "Power Off"
-msgstr ""
-"Apagar"
+msgstr "Apagar"
msgid "Actions"
-msgstr ""
-"Acciones"
+msgstr "Acciones"
msgid "Connect"
-msgstr ""
-"Conectar"
+msgstr "Conectar"
msgid "Clone"
-msgstr ""
-"Clonar"
+msgstr "Clonar"
msgid "Edit"
-msgstr ""
-"Editar"
+msgstr "Editar"
msgid "Shut Down"
-msgstr ""
-"Concluir"
+msgstr "Concluir"
msgid "Delete"
-msgstr ""
-"Suprimir"
+msgstr "Suprimir"
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
-"El nombre de usuario o contraseña que ha especificado es incorrecto. Por favor, vuelva a intentarlo."
+"El nombre de usuario o contraseña que ha especificado es incorrecto. Por "
+"favor, vuelva a intentarlo."
msgid "This field is required."
-msgstr ""
-"Este campo es obligatorio."
+msgstr "Este campo es obligatorio."
msgid "Log in"
-msgstr ""
-"Iniciar sesión"
+msgstr "Iniciar sesión"
msgid "Logging in..."
-msgstr ""
-"Iniciando sesión..."
+msgstr "Iniciando sesión..."
msgid "Host"
-msgstr ""
-"Host"
+msgstr "Host"
msgid "Guests"
-msgstr ""
-"Invitados"
+msgstr "Invitados"
msgid "Templates"
-msgstr ""
-"Plantillas"
+msgstr "Plantillas"
msgid "Failed to get application configuration"
-msgstr ""
-"No se ha podido obtener la configuración de la aplicación"
+msgstr "No se ha podido obtener la configuración de la aplicación"
msgid "This is not a valid Linux path"
-msgstr ""
-"No es una vía de acceso de Linux válida"
+msgstr "No es una vía de acceso de Linux válida"
msgid "This is not a valid URL."
-msgstr ""
-"No es un URL válido."
+msgstr "No es un URL válido."
msgid "No such data available."
-msgstr ""
-"No hay datos de ese tipo disponibles."
+msgstr "No hay datos de ese tipo disponibles."
msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"No se puede contactar con el sistema host. Verifique que el sistema host está activo y que "
-"tiene conectividad de red con él. Respuesta de solicitud HTTP %1. "
+"No se puede contactar con el sistema host. Verifique que el sistema host "
+"está activo y que tiene conectividad de red con él. Respuesta de solicitud "
+"HTTP %1. "
msgid "Unable to read file."
-msgstr ""
-"No se puede leer el archivo. "
+msgstr "No se puede leer el archivo. "
msgid "Error while uploading file."
-msgstr ""
-"Error al actualizar el archivo. "
+msgstr "Error al actualizar el archivo. "
msgid "Delete Confirmation"
-msgstr ""
-"Confirmación de supresión"
+msgstr "Confirmación de supresión"
msgid "OK"
-msgstr ""
-"Aceptar"
+msgstr "Aceptar"
msgid "Confirm"
-msgstr ""
-"Confirmar"
+msgstr "Confirmar"
msgid "Warning"
-msgstr ""
-"Aviso"
+msgstr "Aviso"
msgid "Cloning..."
-msgstr ""
-"Clonación..."
+msgstr "Clonación..."
msgid "Loading..."
-msgstr ""
-"Cargando..."
+msgstr "Cargando..."
msgid "An error occurred while retrieving system information."
-msgstr ""
-"Se ha producido un error al recuperar la información del sistema."
+msgstr "Se ha producido un error al recuperar la información del sistema."
msgid "Retry"
-msgstr ""
-"Reintentar"
+msgstr "Reintentar"
msgid "Detailed message:"
-msgstr ""
-"Mensaje detallado:"
+msgstr "Mensaje detallado:"
msgid "No ISO found"
-msgstr ""
-"No se ha encontrado ningún ISO"
+msgstr "No se ha encontrado ningún ISO"
msgid "This is not a valid ISO file."
-msgstr ""
-"No es un archivo ISO válido."
+msgstr "No es un archivo ISO válido."
msgid "This may take a long time. Do you want to continue?"
-msgstr ""
-"Esta operación puede necesitar mucho tiempo. ¿Desea continuar?"
+msgstr "Esta operación puede necesitar mucho tiempo. ¿Desea continuar?"
msgid "This will permanently delete the template. Would you like to continue?"
-msgstr ""
-"Así se suprimirá la plantilla de forma permanente. ¿Desea continuar?"
+msgstr "Así se suprimirá la plantilla de forma permanente. ¿Desea continuar?"
msgid "Unable to shut down system as there are some virtual machines running!"
msgstr ""
-"No se puede concluir el sistema ya que hay algunas máquinas virtuales en ejecución."
+"No se puede concluir el sistema ya que hay algunas máquinas virtuales en "
+"ejecución."
msgid "Max:"
-msgstr ""
-"Máx.:"
+msgstr "Máx.:"
msgid "Utilization"
-msgstr ""
-"Utilización"
+msgstr "Utilización"
msgid "Available"
-msgstr ""
-"Disponible"
+msgstr "Disponible"
msgid "Read Rate"
-msgstr ""
-"Velocidad de lectura"
+msgstr "Velocidad de lectura"
msgid "Write Rate"
-msgstr ""
-"Velocidad de escritura"
+msgstr "Velocidad de escritura"
msgid "Received"
-msgstr ""
-"Recibido"
+msgstr "Recibido"
msgid "Sent"
-msgstr ""
-"Enviado"
+msgstr "Enviado"
msgid ""
"Shutting down or restarting host will cause unsaved work lost. Continue to "
"shut down/restarting?"
msgstr ""
-"Concluir o reiniciar el host hará que se pierda el trabajo no guardado. ¿Desea continuar "
-"para concluir/reiniciar?"
+"Concluir o reiniciar el host hará que se pierda el trabajo no guardado. "
+"¿Desea continuar para concluir/reiniciar?"
msgid ""
"Repository will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"El repositorio se eliminará de forma permanente y no se puede recuperar. ¿Desea "
-"continuar?"
+"El repositorio se eliminará de forma permanente y no se puede recuperar. "
+"¿Desea continuar?"
msgid "Repositories"
-msgstr ""
-"Repositorios"
+msgstr "Repositorios"
msgid "ID"
-msgstr ""
-"ID"
+msgstr "ID"
msgid "Base URL"
-msgstr ""
-"URL base"
+msgstr "URL base"
msgid "Is Mirror"
-msgstr ""
-"Es duplicado"
+msgstr "Es duplicado"
msgid "URL Args"
-msgstr ""
-"Args de URL"
+msgstr "Args de URL"
msgid "Enabled"
-msgstr ""
-"Habilitado"
+msgstr "Habilitado"
msgid "GPG Check"
-msgstr ""
-"Comprobación GPG"
+msgstr "Comprobación GPG"
msgid "GPG Key"
-msgstr ""
-"Clave GPG"
+msgstr "Clave GPG"
msgid "Add"
-msgstr ""
-"Añadir"
+msgstr "Añadir"
msgid "Remove"
-msgstr ""
-"Eliminar"
+msgstr "Eliminar"
msgid "Enable"
-msgstr ""
-"Habilitar"
+msgstr "Habilitar"
msgid "Disable"
-msgstr ""
-"Inhabilitar"
+msgstr "Inhabilitar"
msgid "Software Updates"
-msgstr ""
-"Actualizaciones de software"
+msgstr "Actualizaciones de software"
msgid "Package Name"
-msgstr ""
-"Nombre de paquete"
+msgstr "Nombre de paquete"
msgid "Version"
-msgstr ""
-"Versión"
+msgstr "Versión"
msgid "Architecture"
-msgstr ""
-"Arquitectura"
+msgstr "Arquitectura"
msgid "Repository"
-msgstr ""
-"Repositorio"
+msgstr "Repositorio"
msgid "Update All"
-msgstr ""
-"Actualizar todo"
+msgstr "Actualizar todo"
msgid "Updating..."
-msgstr ""
-"Actualizando..."
+msgstr "Actualizando..."
msgid "Failed to retrieve packages update information."
msgstr ""
"No se ha podido recuperar la información de actualización de paquetes. "
msgid "Failed to update package(s)."
-msgstr ""
-"No se han podido actualizar paquetes."
+msgstr "No se han podido actualizar paquetes."
msgid ""
"Debug report will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"El informe de depuración se eliminará permanentemente y no se puede recuperar. ¿Desea "
-"continuar?"
+"El informe de depuración se eliminará permanentemente y no se puede "
+"recuperar. ¿Desea continuar?"
msgid "Debug Reports"
-msgstr ""
-"Informes de depuración"
+msgstr "Informes de depuración"
msgid "Generated Time"
-msgstr ""
-"Tiempo generado"
+msgstr "Tiempo generado"
msgid "Generate"
-msgstr ""
-"Generar"
+msgstr "Generar"
msgid "Generating..."
-msgstr ""
-"Generando..."
+msgstr "Generando..."
msgid "Rename"
-msgstr ""
-"Redenominar"
+msgstr "Redenominar"
msgid "Download"
-msgstr ""
-"Descargar"
+msgstr "Descargar"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
"hyphen ('-')."
msgstr ""
-"El nombre de informe debe contener solamente letras, dígitos, el carácter de subrayado ('_') y/o "
-"de guión ('-')."
+"El nombre de informe debe contener solamente letras, dígitos, el carácter de "
+"subrayado ('_') y/o de guión ('-')."
msgid "Pending..."
-msgstr ""
-"Pendiente..."
+msgstr "Pendiente..."
msgid "Report name is the same as the original one."
-msgstr ""
-"El nombre de informe es el mismo que el original. "
+msgstr "El nombre de informe es el mismo que el original. "
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
"cannot be undone. Would you like to continue?"
msgstr ""
-"Esto suprimirá la máquina virtual y sus discos virtuales. Esta operación "
-"no se puede deshacer. ¿Desea continuar?"
+"Esto suprimirá la máquina virtual y sus discos virtuales. Esta operación no "
+"se puede deshacer. ¿Desea continuar?"
msgid "Power off Confirmation"
-msgstr ""
-"Confirmación de apagado"
+msgstr "Confirmación de apagado"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
"cache in the guest. Would you like to continue?"
msgstr ""
-"Esta acción puede producir resultados no deseables, por ejemplo almacenamiento de memoria caché en disco "
-"sin vaciar en el invitado. ¿Desea continuar?"
+"Esta acción puede producir resultados no deseables, por ejemplo "
+"almacenamiento de memoria caché en disco sin vaciar en el invitado. ¿Desea "
+"continuar?"
msgid "Reset Confirmation"
-msgstr ""
-"Confirmación de restablecimiento"
+msgstr "Confirmación de restablecimiento"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
"Would you like to continue?"
msgstr ""
-"Existe un riesgo de pérdida de datos causado por el restablecimiento sin la conclusión del sistema operativo invitado. "
-"¿Desea continuar?"
+"Existe un riesgo de pérdida de datos causado por el restablecimiento sin la "
+"conclusión del sistema operativo invitado. ¿Desea continuar?"
msgid "Shut Down Confirmation"
-msgstr ""
-"Confirmación de conclusión"
+msgstr "Confirmación de conclusión"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
msgstr ""
-"Tenga en cuenta que el sistema operativo del invitado puede ignorar esta solicitud. ¿Desea continuar?"
+"Tenga en cuenta que el sistema operativo del invitado puede ignorar esta "
+"solicitud. ¿Desea continuar?"
msgid "Virtual Machine delete Confirmation"
-msgstr ""
-"Confirmación de supresión de la máquina virtual "
+msgstr "Confirmación de supresión de la máquina virtual "
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
msgstr ""
-"Esta máquina virtual no es persistente. Con la acción Apagar se suprimirá. ¿Desea continuar?"
+"Esta máquina virtual no es persistente. Con la acción Apagar se suprimirá. "
+"¿Desea continuar?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
@@ -2118,112 +1905,98 @@ msgid ""
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
"Cuando el invitado de destino tiene volúmenes SCSI o iSCSI, se clonarán en "
-"la agrupación de almacenamiento predeterminada. Ocurrirá lo mismo cuando la agrupación de destino no "
-"tenga espacio suficiente para clonar los volúmenes. ¿Desea continuar?"
+"la agrupación de almacenamiento predeterminada. Ocurrirá lo mismo cuando la "
+"agrupación de destino no tenga espacio suficiente para clonar los volúmenes. "
+"¿Desea continuar?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
msgstr ""
-"Este CDROM se desconectará de forma permanente pero puede volver a conectarlo. ¿Desea "
-"continuar para desconectarlo?"
+"Este CDROM se desconectará de forma permanente pero puede volver a "
+"conectarlo. ¿Desea continuar para desconectarlo?"
msgid "Attaching..."
-msgstr ""
-"Conectando..."
+msgstr "Conectando..."
msgid "Replacing..."
-msgstr ""
-"Sustituyendo..."
+msgstr "Sustituyendo..."
msgid "Successfully attached!"
-msgstr ""
-"¡Conectado correctamente!"
+msgstr "¡Conectado correctamente!"
msgid "Successfully replaced!"
-msgstr ""
-"¡Sustituido correctamente!"
+msgstr "¡Sustituido correctamente!"
msgid "Successfully detached!"
-msgstr ""
-"¡Desconectado correctamente!"
+msgstr "¡Desconectado correctamente!"
msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
msgstr ""
-"Este disco se desconectará de forma permanente y podrá volver a conectarlo. ¿Desea continuar"
-"desconectándolo?"
+"Este disco se desconectará de forma permanente y podrá volver a conectarlo. "
+"¿Desea continuardesconectándolo?"
msgid "interface:"
-msgstr ""
-"interfaz: "
+msgstr "interfaz: "
msgid "address:"
-msgstr ""
-"dirección:"
+msgstr "dirección:"
msgid "link_type:"
-msgstr ""
-"link_type:"
+msgstr "link_type:"
msgid "block:"
-msgstr ""
-"bloque:"
+msgstr "bloque:"
msgid "drive_type:"
-msgstr ""
-"drive_type:"
+msgstr "drive_type:"
msgid "model:"
-msgstr ""
-"modelo:"
+msgstr "modelo:"
msgid "Affected devices:"
-msgstr ""
-"Dispositivos afectados:"
+msgstr "Dispositivos afectados:"
msgid "The VLAN id must be between 1 and 4094."
-msgstr ""
-"El ID de VLAN debe estar entre 1 y 4094."
+msgstr "El ID de VLAN debe estar entre 1 y 4094."
msgid "unavailable"
-msgstr ""
-"no disponible"
+msgstr "no disponible"
msgid ""
"This action will interrupt network connectivity for any virtual machine that "
"depend on this network."
msgstr ""
-"Esta acción interrumpirá la conectividad de red para cualquier máquina virtual que "
-"dependa de esta red."
+"Esta acción interrumpirá la conectividad de red para cualquier máquina "
+"virtual que dependa de esta red."
msgid "Create a network"
-msgstr ""
-"Crear una red"
+msgstr "Crear una red"
msgid ""
"This network is not persistent. Instead of stop, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Esta red no es persistente. En lugar de detenerla, esta acción "
-"la suprimirá de forma permanente. ¿Desea continuar?"
+"Esta red no es persistente. En lugar de detenerla, esta acción la suprimirá "
+"de forma permanente. ¿Desea continuar?"
msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
-"Es posible que el código VLAN ponteado no funcione bien si NetworkManager está habilitado. Debería "
-"considerar la posibilidad de inhabilitarlo. "
+"Es posible que el código VLAN ponteado no funcione bien si NetworkManager "
+"está habilitado. Debería considerar la posibilidad de inhabilitarlo. "
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
msgstr ""
-"Así se suprimirá la agrupación de almacenamiento de forma permanente. ¿Desea continuar?"
+"Así se suprimirá la agrupación de almacenamiento de forma permanente. ¿Desea "
+"continuar?"
msgid "This storage pool is empty."
-msgstr ""
-"Esta agrupación de almacenamiento está vacía."
+msgstr "Esta agrupación de almacenamiento está vacía."
msgid ""
"It will format your disk and you will loose any data in there, are you sure "
@@ -2233,609 +2006,472 @@ msgstr ""
"de que desea continuar? "
msgid "SCSI Fibre Channel"
-msgstr ""
-"Canal de fibra de SCSI"
+msgstr "Canal de fibra de SCSI"
msgid "No SCSI adapters found."
-msgstr ""
-"No se han encontrado adaptadores SCSI."
+msgstr "No se han encontrado adaptadores SCSI."
msgid "Loading iSCSI targets..."
-msgstr ""
-"Se están cargando los destinos iSCSI..."
+msgstr "Se están cargando los destinos iSCSI..."
msgid "No iSCSI found. Please input one."
-msgstr ""
-"No se ha encontrado el iSCSI. Indique uno. "
+msgstr "No se ha encontrado el iSCSI. Indique uno. "
msgid "Failed to load iSCSI targets."
-msgstr ""
-"No se han podido cargar los destinos iSCSI. "
+msgstr "No se han podido cargar los destinos iSCSI. "
msgid "The storage pool name can not be blank."
-msgstr ""
-"El nombre de la agrupación de almacenamiento no puede estar en blanco."
+msgstr "El nombre de la agrupación de almacenamiento no puede estar en blanco."
msgid "The storage pool path can not be blank."
msgstr ""
"La vía de acceso de la agrupación de almacenamiento no puede estar en blanco."
msgid "NFS server mount path can not be blank."
-msgstr ""
-"La vía de acceso de montaje del servidor NFS no puede estar en blanco."
+msgstr "La vía de acceso de montaje del servidor NFS no puede estar en blanco."
msgid "Invalid NFS mount path."
-msgstr ""
-"Vía de acceso de montaje de NFS no válida."
+msgstr "Vía de acceso de montaje de NFS no válida."
msgid "No logical device selected."
-msgstr ""
-"No se ha seleccionado ningún dispositivo lógico."
+msgstr "No se ha seleccionado ningún dispositivo lógico."
msgid "The iSCSI target can not be blank."
-msgstr ""
-"El destino iSCSI no puede estar en blanco."
+msgstr "El destino iSCSI no puede estar en blanco."
msgid "Server name can not be blank."
-msgstr ""
-"El nombre de servidor no puede estar en blanco."
+msgstr "El nombre de servidor no puede estar en blanco."
msgid "This is not a valid Server Name or IP. Please, modify it."
-msgstr ""
-"No es un nombre de servidor válido o IP válida. Modifique el valor. "
+msgstr "No es un nombre de servidor válido o IP válida. Modifique el valor. "
msgid "Looking for available partitions ..."
-msgstr ""
-"Buscando particiones disponibles..."
+msgstr "Buscando particiones disponibles..."
msgid "No available partitions found."
-msgstr ""
-"No se han encontrado particiones disponibles."
+msgstr "No se han encontrado particiones disponibles."
msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Esta agrupación de almacenamiento no es persistente. En lugar de desactivar, esta acción "
-"la suprimirá de forma permanente. ¿Desea continuar?"
+"Esta agrupación de almacenamiento no es persistente. En lugar de desactivar, "
+"esta acción la suprimirá de forma permanente. ¿Desea continuar?"
msgid "Unable to retrieve partitions information."
-msgstr ""
-"No se puede recuperar la información de particiones. "
+msgstr "No se puede recuperar la información de particiones. "
msgid "In progress..."
-msgstr ""
-"En curso..."
+msgstr "En curso..."
msgid "Failed!"
-msgstr ""
-"Error"
+msgstr "Error"
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
msgstr ""
-"La vía de acceso de CDROM ha de ser una vía de acceso local/remota válida y no puede dejarse en blanco. "
+"La vía de acceso de CDROM ha de ser una vía de acceso local/remota válida y "
+"no puede dejarse en blanco. "
msgid "Disk pool or volume cannot be blank."
-msgstr ""
-"El volumen o la agrupación de discos no puede estar en blanco."
+msgstr "El volumen o la agrupación de discos no puede estar en blanco."
msgid "Peers"
-msgstr ""
-"Homólogos"
+msgstr "Homólogos"
msgid "Searching"
-msgstr ""
-"Buscando"
+msgstr "Buscando"
msgid "No peers found."
-msgstr ""
-"No se han encontrado homólogos."
+msgstr "No se han encontrado homólogos."
msgid "Help"
-msgstr ""
-"Ayuda"
+msgstr "Ayuda"
msgid "About"
-msgstr ""
-"Acerca de"
+msgstr "Acerca de"
msgid "Log out"
-msgstr ""
-"Finalizar sesión"
+msgstr "Finalizar sesión"
msgid "Version:"
-msgstr ""
-"Versión:"
+msgstr "Versión:"
msgid "Session timeout, please re-login."
msgstr ""
"Se ha excedido el tiempo de espera de sesión; vuelva a iniciar la sesión."
msgid "User Name"
-msgstr ""
-"Nombre de usuario"
+msgstr "Nombre de usuario"
msgid "Password"
-msgstr ""
-"Contraseña"
+msgstr "Contraseña"
msgid "Generate a New Debug Report"
-msgstr ""
-"Generar un Informe de depuración nuevo"
+msgstr "Generar un Informe de depuración nuevo"
msgid "Report Name"
-msgstr ""
-"Nombre de informe"
+msgstr "Nombre de informe"
msgid ""
"The name used to identify the report. If omitted, a name will be chosen "
"based on current time. Name can contain: letters, digits, underscore (\"_\") "
"and hyphen (\"-\")."
msgstr ""
-"El nombre que se utiliza para identificar el informe. Si se omite, se elegirá un nombre "
-"en base a la hora actual. El nombre puede contener: letras, dígitos, carácter de subrayado (\"_\") "
-"y de guión (\"-\")."
+"El nombre que se utiliza para identificar el informe. Si se omite, se "
+"elegirá un nombre en base a la hora actual. El nombre puede contener: "
+"letras, dígitos, carácter de subrayado (\"_\") y de guión (\"-\")."
msgid "Rename a Debug Report"
-msgstr ""
-"Renombre un informe de depuración"
+msgstr "Renombre un informe de depuración"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
"hyphen (\"-\")."
msgstr ""
-"El nombre utilizado para identificar el informe. El nombre puede contener: letras, dígitos y "
-"el carácter de guión (\"-\")."
+"El nombre utilizado para identificar el informe. El nombre puede contener: "
+"letras, dígitos y el carácter de guión (\"-\")."
msgid "Submit"
-msgstr ""
-"Enviar"
+msgstr "Enviar"
msgid "Add a Repository"
-msgstr ""
-"Añadir un repositorio"
+msgstr "Añadir un repositorio"
msgid "Identifier"
-msgstr ""
-"Identificador"
+msgstr "Identificador"
msgid "Single word, unique identifier for the repository."
-msgstr ""
-"Identificador exclusivo de una sola palabra para el repositorio."
+msgstr "Identificador exclusivo de una sola palabra para el repositorio."
msgid "Textual name for the repository."
-msgstr ""
-"Nombre textual para el repositorio."
+msgstr "Nombre textual para el repositorio."
msgid "URL"
-msgstr ""
-"URL"
+msgstr "URL"
msgid "Required Field"
-msgstr ""
-"Campo obligatorio"
+msgstr "Campo obligatorio"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
-msgstr ""
-"URL al repositorio. Los protocolos soportados son http, ftp y archivo."
+msgstr "URL al repositorio. Los protocolos soportados son http, ftp y archivo."
msgid "Repository is a mirror"
-msgstr ""
-"El repositorio es un duplicado"
+msgstr "El repositorio es un duplicado"
msgid "Distribution"
-msgstr ""
-"Distribución"
+msgstr "Distribución"
msgid "Distribution of the DEB repository."
-msgstr ""
-"Distribución del repositorio DEB."
+msgstr "Distribución del repositorio DEB."
msgid "Components"
-msgstr ""
-"Componentes"
+msgstr "Componentes"
msgid "List of components in DEB repository."
-msgstr ""
-"Lista de componentes en el repositorio DEB."
+msgstr "Lista de componentes en el repositorio DEB."
msgid "Edit Repository"
-msgstr ""
-"Editar repositorio"
+msgstr "Editar repositorio"
msgid "Mirror List URL"
-msgstr ""
-"URL de lista duplicada"
+msgstr "URL de lista duplicada"
msgid "Yes"
-msgstr ""
-"Sí"
+msgstr "Sí"
msgid "No"
-msgstr ""
-"No"
+msgstr "No"
msgid "Add a Volume to Storage Pool"
-msgstr ""
-"Añadir un volumen a la agrupación de almacenamiento"
+msgstr "Añadir un volumen a la agrupación de almacenamiento"
msgid "Fetch from remote URL"
-msgstr ""
-"Captar de URL remoto"
+msgstr "Captar de URL remoto"
msgid "Enter the remote URL here."
-msgstr ""
-"Escriba el URL remoto aquí. "
+msgstr "Escriba el URL remoto aquí. "
msgid "Upload a file"
-msgstr ""
-"Cargar un archivo"
+msgstr "Cargar un archivo"
msgid "Choose the file you want to upload."
-msgstr ""
-"Elija el archivo que desee cargar. "
+msgstr "Elija el archivo que desee cargar. "
msgid "Define a New Storage Pool"
-msgstr ""
-"Definir una agrupación de almacenamiento nueva"
+msgstr "Definir una agrupación de almacenamiento nueva"
msgid "Storage Pool Name"
-msgstr ""
-"Nombre de agrupación de almacenamiento"
+msgstr "Nombre de agrupación de almacenamiento"
msgid ""
"The name used to identify the storage pools, and it should not be empty."
msgstr ""
-"El nombre que se utiliza para identificar las agrupaciones de almacenamiento y no debe estar vacío."
+"El nombre que se utiliza para identificar las agrupaciones de almacenamiento "
+"y no debe estar vacío."
msgid "Storage Pool Type"
-msgstr ""
-"Tipo de agrupación de almacenamiento"
+msgstr "Tipo de agrupación de almacenamiento"
msgid "Storage Path"
-msgstr ""
-"Vía de acceso de almacenamiento"
+msgstr "Vía de acceso de almacenamiento"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
msgstr ""
-"La vía de acceso de la agrupación de almacenamiento. Cada agrupación de almacenamiento debe tener una vía de acceso exclusiva."
+"La vía de acceso de la agrupación de almacenamiento. Cada agrupación de "
+"almacenamiento debe tener una vía de acceso exclusiva."
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
"your system."
-msgstr ""
-"Kimchi intentará crear el directorio cuando no existe en "
-"el sistema."
+msgstr "Kimchi intentará crear el directorio cuando no existe en el sistema."
msgid "NFS Server IP"
-msgstr ""
-"IP de Servidor NFS"
+msgstr "IP de Servidor NFS"
msgid "NFS server IP or hostname. It can be input or chosen from history."
msgstr ""
-"IP o nombre de host de servidor NFS. Puede especificarse o elegirse del historial."
+"IP o nombre de host de servidor NFS. Puede especificarse o elegirse del "
+"historial."
msgid "NFS Path"
-msgstr ""
-"Vía de acceso NFS"
+msgstr "Vía de acceso NFS"
msgid "The NFS exported path on NFS server."
-msgstr ""
-"La vía de acceso exportada de NFS en el servidor NFS."
+msgstr "La vía de acceso exportada de NFS en el servidor NFS."
msgid "Device path"
-msgstr ""
-"Vía de acceso del dispositivo"
+msgstr "Vía de acceso del dispositivo"
msgid "iSCSI Server"
-msgstr ""
-"Servidor iSCSI"
+msgstr "Servidor iSCSI"
msgid "iSCSI server IP or hostname. It should not be empty."
-msgstr ""
-"IP o nombre de host de servidor iSCSI. No debe estar vacío."
+msgstr "IP o nombre de host de servidor iSCSI. No debe estar vacío."
msgid "Server"
-msgstr ""
-"Servidor"
+msgstr "Servidor"
msgid "Port"
-msgstr ""
-"Puerto"
+msgstr "Puerto"
msgid "Target"
-msgstr ""
-"Destino"
+msgstr "Destino"
msgid "The iSCSI target on iSCSI server"
-msgstr ""
-"El destino iSCSI en el servidor iSCSI"
+msgstr "El destino iSCSI en el servidor iSCSI"
msgid "Add iSCSI Authentication"
-msgstr ""
-"Añadir Autenticación iSCSI"
+msgstr "Añadir Autenticación iSCSI"
msgid "iSCSI Authentication"
-msgstr ""
-"Autenticación iSCSI"
+msgstr "Autenticación iSCSI"
msgid "SCSI Adapter"
-msgstr ""
-"Adaptador SCSI"
+msgstr "Adaptador SCSI"
msgid "Please, wait..."
-msgstr ""
-"Por favor, espere..."
+msgstr "Por favor, espere..."
msgid "Add Template"
-msgstr ""
-"Añadir plantilla"
+msgstr "Añadir plantilla"
msgid "Where is the source media for this template? "
-msgstr ""
-"¿Dónde está el soporte de origen para esta plantilla?"
+msgstr "¿Dónde está el soporte de origen para esta plantilla?"
msgid "Local ISO Image"
-msgstr ""
-"Imagen ISO local"
+msgstr "Imagen ISO local"
msgid "Local Image File"
-msgstr ""
-"Archivo de imagen local"
+msgstr "Archivo de imagen local"
msgid "Remote ISO Image"
-msgstr ""
-"Imagen ISO remota"
+msgstr "Imagen ISO remota"
msgid "Search ISOs"
-msgstr ""
-"Buscar ISOs"
+msgstr "Buscar ISOs"
msgid "The following ISOs are available:"
-msgstr ""
-"Las siguientes ISO están disponibles:"
+msgstr "Las siguientes ISO están disponibles:"
msgid "OS: "
-msgstr ""
-"SO: "
+msgstr "SO: "
msgid "Version: "
-msgstr ""
-"Versión: "
+msgstr "Versión: "
msgid "Size: "
-msgstr ""
-"Tamaño: "
+msgstr "Tamaño: "
msgid "Search more ISOs"
-msgstr ""
-"Buscar más ISO"
+msgstr "Buscar más ISO"
msgid "Create Templates from Selected ISO"
-msgstr ""
-"Crear plantillas a partir de ISO seleccionadas"
+msgstr "Crear plantillas a partir de ISO seleccionadas"
msgid "I want to use a specific ISO file"
-msgstr ""
-"Deseo utilizar un archivo ISO específico"
+msgstr "Deseo utilizar un archivo ISO específico"
msgid "Loading default remote ISOs ..."
-msgstr ""
-"Cargando ISO remotas predeterminadas ..."
+msgstr "Cargando ISO remotas predeterminadas ..."
msgid "Arch: "
-msgstr ""
-"Arch: "
+msgstr "Arch: "
msgid "I want to use a custom URL"
-msgstr ""
-"Deseo utilizar un URL personalizado"
+msgstr "Deseo utilizar un URL personalizado"
msgid "Edit Template"
-msgstr ""
-"Editar plantilla"
+msgstr "Editar plantilla"
msgid "Processor"
-msgstr ""
-"Procesador"
+msgstr "Procesador"
msgid "CDROM"
-msgstr ""
-"CDROM"
+msgstr "CDROM"
msgid "Image File"
-msgstr ""
-"Archivo de imagen"
+msgstr "Archivo de imagen"
msgid "Graphics"
-msgstr ""
-"Gráficos"
+msgstr "Gráficos"
msgid "Disk(GB)"
-msgstr ""
-"Disco (GB)"
+msgstr "Disco (GB)"
msgid "Disk Format"
-msgstr ""
-"Formato de disco"
+msgstr "Formato de disco"
msgid "CPU Number"
-msgstr ""
-"Número de CPU"
+msgstr "Número de CPU"
msgid "Manually set CPU topology"
-msgstr ""
-"Establezca manualmente la topología de CPU"
+msgstr "Establezca manualmente la topología de CPU"
msgid "Cores"
-msgstr ""
-"Núcleos"
+msgstr "Núcleos"
msgid "Threads"
-msgstr ""
-"Hebras"
+msgstr "Hebras"
msgid "CPU"
-msgstr ""
-"CPU"
+msgstr "CPU"
msgid "Disk I/O"
-msgstr ""
-"E/S de disco"
+msgstr "E/S de disco"
msgid "Network I/O"
-msgstr ""
-"E/S de red"
+msgstr "E/S de red"
msgid "Livetile"
-msgstr ""
-"Livetile"
+msgstr "Livetile"
msgid "No guests found."
-msgstr ""
-"No se ha encontrado invitados."
+msgstr "No se ha encontrado invitados."
msgid "Shut down"
-msgstr ""
-"Concluir"
+msgstr "Concluir"
msgid "Restart"
-msgstr ""
-"Reiniciar"
+msgstr "Reiniciar"
msgid "Basic Information"
-msgstr ""
-"Información básica"
+msgstr "Información básica"
msgid "OS Distro"
-msgstr ""
-"Distro de SO"
+msgstr "Distro de SO"
msgid "OS Code Name"
-msgstr ""
-"Nombre de código de SO"
+msgstr "Nombre de código de SO"
msgid "CPU(s)"
-msgstr ""
-"CPU(s)"
+msgstr "CPU(s)"
msgid "System Statistics"
-msgstr ""
-"Estadísticas del sistema"
+msgstr "Estadísticas del sistema"
msgid "Update Progress"
-msgstr ""
-"Actualizar progreso"
+msgstr "Actualizar progreso"
msgid "Network Name"
-msgstr ""
-"Nombre de red"
+msgstr "Nombre de red"
msgid "State"
-msgstr ""
-"Estado"
+msgstr "Estado"
msgid "Network Type"
-msgstr ""
-"Tipo de red"
+msgstr "Tipo de red"
msgid "Address Space"
-msgstr ""
-"Espacio de direcciones"
+msgstr "Espacio de direcciones"
msgid "Name should not contain '/' and '\"'."
-msgstr ""
-"El nombre no debe contener '/' y '\"'."
+msgstr "El nombre no debe contener '/' y '\"'."
msgid "Isolated: no external network connection"
-msgstr ""
-"Aislado: no hay conexión de red externa"
+msgstr "Aislado: no hay conexión de red externa"
msgid "NAT: outbound physical network connection only"
-msgstr ""
-"NAT: conexión de red física saliente solamente"
+msgstr "NAT: conexión de red física saliente solamente"
msgid "Bridged: Virtual machines are connected to physical network directly"
msgstr ""
-"Puenteado: Las máquinas virtuales están conectadas a la red física directamente"
+"Puenteado: Las máquinas virtuales están conectadas a la red física "
+"directamente"
msgid "(No interfaces found)"
-msgstr ""
-"(No se han encontrado interfaces) "
+msgstr "(No se han encontrado interfaces) "
msgid "Destination"
-msgstr ""
-"Destino"
+msgstr "Destino"
msgid "Enable VLAN"
-msgstr ""
-"Habilitar VLAN"
+msgstr "Habilitar VLAN"
msgid "VLAN ID"
-msgstr ""
-"ID de VLAN"
+msgstr "ID de VLAN"
msgid "Stop"
-msgstr ""
-"Detener"
+msgstr "Detener"
msgid "%Used"
-msgstr ""
-"% Utilizado"
+msgstr "% Utilizado"
msgid "Location"
-msgstr ""
-"Ubicación"
+msgstr "Ubicación"
msgid "Capacity"
-msgstr ""
-"Capacidad"
+msgstr "Capacidad"
msgid "Allocated"
-msgstr ""
-"Asignado"
+msgstr "Asignado"
msgid "active"
-msgstr ""
-"activo"
+msgstr "activo"
msgid "inactive"
-msgstr ""
-"inactivo"
+msgstr "inactivo"
msgid "Deactivate"
-msgstr ""
-"Desactivar"
+msgstr "Desactivar"
msgid "Activate"
-msgstr ""
-"Activar"
+msgstr "Activar"
msgid "Add Volume"
-msgstr ""
-"Añadir volumen"
+msgstr "Añadir volumen"
msgid "Extend"
-msgstr ""
-"Ampliar"
+msgstr "Ampliar"
msgid "Undefine"
-msgstr ""
-"No definir"
+msgstr "No definir"
msgid "Format"
-msgstr ""
-"Formato"
+msgstr "Formato"
msgid "Allocation"
-msgstr ""
-"Asignación"
+msgstr "Asignación"
msgid "No templates found."
-msgstr ""
-"No se han encontrado plantillas."
-
-# ENGL1SH_VERS10N 28617_40 DO NOT REMOVE OR CHANGE THIS LINE
-# T9N_SRC_ID 92
-# T9N_SH1P_STR1NG KV310AAP001 1
+msgstr "No se han encontrado plantillas."
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 7418acc..42bb004 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -6,81 +6,71 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-06-24 09:39-0300\n"
+"POT-Creation-Date: 2015-08-21 09:52-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
-"Language: en_US\n"
+"Language: fr_FR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"Plural-Forms: nplurals=2; plural=n>1;"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
#, python-format
msgid "Unknown parameter %(value)s"
-msgstr ""
-"Paramètre inconnu %(value)s"
+msgstr "Paramètre inconnu %(value)s"
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr ""
-"La suppression n'est pas autorisée pour %(resource)s"
+msgstr "La suppression n'est pas autorisée pour %(resource)s"
#, python-format
msgid "%(resource)s does not implement update method"
-msgstr ""
-"%(resource)s n'implémente pas la méthode de mise à jour"
+msgstr "%(resource)s n'implémente pas la méthode de mise à jour"
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr ""
-"La création n'est pas autorisée pour %(resource)s"
+msgstr "La création n'est pas autorisée pour %(resource)s"
msgid "Unable to parse JSON request"
-msgstr ""
-"Impossible d'analyser la demande JSON"
+msgstr "Impossible d'analyser la demande JSON"
msgid "This API only supports JSON"
-msgstr ""
-"L'API prend uniquement en charge la notation JSON"
+msgstr "L'API prend uniquement en charge la notation JSON"
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
-msgstr ""
-"Les paramètres ne correspondent pas aux exigences du schéma : %(err)s"
+msgstr "Les paramètres ne correspondent pas aux exigences du schéma : %(err)s"
msgid "You don't have permission to perform this operation."
-msgstr ""
-"Vous ne disposez pas des droits pour effectuer cette opération."
+msgstr "Vous ne disposez pas des droits pour effectuer cette opération."
msgid "Datastore is not initiated in the model object."
-msgstr ""
-"Le magasin de données n'est pas initié dans l'objet de modèle."
+msgstr "Le magasin de données n'est pas initié dans l'objet de modèle."
#, python-format
msgid "Unable to start task due error: %(err)s"
-msgstr ""
-"Impossible de démarrer la tâche en raison de l'erreur : %(err)s"
+msgstr "Impossible de démarrer la tâche en raison de l'erreur : %(err)s"
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
msgstr ""
-"Expiration du délai d'attente de %(seconds)s lors de l'exécution de la tâche '%(task)s."
+"Expiration du délai d'attente de %(seconds)s lors de l'exécution de la tâche "
+"'%(task)s."
#, python-format
msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
msgstr ""
-"Echec d'authentification pour l'utilisateur '%(username)s'. [Code d'erreur : %(code)s]"
+"Echec d'authentification pour l'utilisateur '%(username)s'. [Code d'erreur : "
+"%(code)s]"
msgid "You are not authorized to access Kimchi"
-msgstr ""
-"Vous n'êtes pas autorisé à accéder à Kimchi"
+msgstr "Vous n'êtes pas autorisé à accéder à Kimchi"
#, python-format
msgid "Specify %(item)s to login into Kimchi"
-msgstr ""
-"Indiquez %(item)s pour la connexion à Kimchi"
+msgstr "Indiquez %(item)s pour la connexion à Kimchi"
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
@@ -89,25 +79,23 @@ msgstr ""
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
-msgstr ""
-"Configuration LDAP non valide : %(item)s : %(value)s"
+msgstr "Configuration LDAP non valide : %(item)s : %(value)s"
msgid "Unknown \"_cap\" specified"
-msgstr ""
-"\"_cap\" inconnu spécifié"
+msgstr "\"_cap\" inconnu spécifié"
msgid "\"_passthrough\" should be \"true\" or \"false\""
-msgstr ""
-"\"_passthrough\" doit avoir la valeur \"true\" ou \"false\""
+msgstr "\"_passthrough\" doit avoir la valeur \"true\" ou \"false\""
msgid "\"_passthrough_affected_by\" should be a device name string"
-msgstr ""
-"\"_passthrough_affected_by\" doit être une chaîne de nom d'unité"
+msgstr "\"_passthrough_affected_by\" doit être une chaîne de nom d'unité"
+
+msgid "\"_available_only\" should be \"true\" or \"false\""
+msgstr "\"_available_only\" doit avoir la valeur \"true\" ou \"false\""
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
-msgstr ""
-"Erreur lors de l'obtention d'unités par bloc. Détails : %(err)s"
+msgstr "Erreur lors de l'obtention d'unités par bloc. Détails : %(err)s"
#, python-format
msgid "Error while getting block device information for %(device)s."
@@ -116,39 +104,38 @@ msgstr ""
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr ""
-"Fichier de distribution introuvable : %(filename)s"
+msgstr "Fichier de distribution introuvable : %(filename)s"
#, python-format
msgid ""
"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
msgstr ""
-"Impossible d'analyser le fichier de distribution : %(filename)s. Vérifiez qu'il s'agit d'un fichier JSON."
+"Impossible d'analyser le fichier de distribution : %(filename)s. Vérifiez "
+"qu'il s'agit d'un fichier JSON."
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
msgstr ""
-"Impossible de se connecter à la cible hôte iSCSI %(portal)s. Détails : %(err)s"
+"Impossible de se connecter à la cible hôte iSCSI %(portal)s. Détails : "
+"%(err)s"
#, python-format
msgid "Unable to login to iSCSI host %(host)s target %(target)s"
-msgstr ""
-"Impossible de se connecter à la cible hôte %(host)s iSCSI %(target)s"
+msgstr "Impossible de se connecter à la cible hôte %(host)s iSCSI %(target)s"
#, python-format
msgid "Unable to find ISO file %(filename)s"
-msgstr ""
-"Fichier ISO introuvable : %(filename)s"
+msgstr "Fichier ISO introuvable : %(filename)s"
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr ""
-"Le fichier ISO %(filename)s n'est pas amorçable"
+msgstr "Le fichier ISO %(filename)s n'est pas amorçable"
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
msgstr ""
-"Le fichier ISO %(filename)s ne possède pas d'enregistrement d'amorçage El Torito valide"
+"Le fichier ISO %(filename)s ne possède pas d'enregistrement d'amorçage El "
+"Torito valide"
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
@@ -163,12 +150,14 @@ msgstr ""
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
msgstr ""
-"Type de volume inattendu pour le volume principal dans le fichier ISO %(filename)s"
+"Type de volume inattendu pour le volume principal dans le fichier ISO "
+"%(filename)s"
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
msgstr ""
-"Format incorrect lors de la lecture du descripteur de volume dans le fichier ISO %(filename)s"
+"Format incorrect lors de la lecture du descripteur de volume dans le fichier "
+"ISO %(filename)s"
#, python-format
msgid ""
@@ -178,69 +167,69 @@ msgid ""
"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
"'path_to_iso'.Details: %(err)s"
msgstr ""
-"L'hyperviseur ne dispose pas des droits pour utiliser ce fichier ISO %(filename)s. "
-"placez-le dans /var/lib/libvirt, ou définissez le droit de recherche sur "
-"les listes de contrôle d'accès d'accès aux fichiers pour l'utilisateur '%(user)s', si possible, ou ajoutez "
-"'%(user)s' au groupe de chemins d'accès ISO ou (non recommandé) 'chmod -R o+x "
-"'path_to_iso'.Détails : %(err)s"
+"L'hyperviseur ne dispose pas des droits pour utiliser ce fichier ISO "
+"%(filename)s. placez-le dans /var/lib/libvirt, ou définissez le droit de "
+"recherche sur les listes de contrôle d'accès d'accès aux fichiers pour "
+"l'utilisateur '%(user)s', si possible, ou ajoutez '%(user)s' au groupe de "
+"chemins d'accès ISO ou (non recommandé) 'chmod -R o+x 'path_to_iso'."
+"Détails : %(err)s"
msgid "An error occurred when probing image OS information."
msgstr ""
-"Une erreur s'est produite lors de l'application d'une sonde aux informations de système d'exploitation d'image."
+"Une erreur s'est produite lors de l'application d'une sonde aux informations "
+"de système d'exploitation d'image."
msgid "No OS information found in given image."
msgstr ""
-"Aucune information relative au système d'exploitation n'a été trouvée dans l'image donnée."
+"Aucune information relative au système d'exploitation n'a été trouvée dans "
+"l'image donnée."
#, python-format
msgid "Unable to read image file %(filename)s"
-msgstr ""
-"Impossible de lire le fichier image %(filename)s"
+msgstr "Impossible de lire le fichier image %(filename)s"
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
msgstr ""
-"Le fichier image doit être un fichier existant sur le système. %(filename)s n'est pas une entrée "
-"valide."
+"Le fichier image doit être un fichier existant sur le système. %(filename)s "
+"n'est pas une entrée valide."
#, python-format
msgid "Virtual machine %(name)s already exists"
-msgstr ""
-"La machine virtuelle %(name)s existe déjà"
+msgstr "La machine virtuelle %(name)s existe déjà"
#, python-format
msgid "Virtual machine %(name)s does not exist"
-msgstr ""
-"La machine virtuelle nommée %(name)s n'existe pas"
+msgstr "La machine virtuelle nommée %(name)s n'existe pas"
#, python-format
msgid ""
"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
"in use or the virtual machine is not powered off."
msgstr ""
-"Impossible de renommer la machine virtuelle %(name)s. Le nom %(new_name)s est déjà "
-"utilisé ou la machine virtuelle n'est pas hors tension."
+"Impossible de renommer la machine virtuelle %(name)s. Le nom %(new_name)s "
+"est déjà utilisé ou la machine virtuelle n'est pas hors tension."
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
msgstr ""
-"Impossible d'extraire la capture d'écran pour la machine virtuelle arrêtée %(name)s"
+"Impossible d'extraire la capture d'écran pour la machine virtuelle arrêtée "
+"%(name)s"
msgid "Remote ISO image is not supported by this server."
-msgstr ""
-"L'image ISO distante n'est pas prise en charge par ce serveur."
+msgstr "L'image ISO distante n'est pas prise en charge par ce serveur."
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
msgstr ""
-"La capture d'écran n'est pas prise en charge sur la machine virtuelle %(name)s"
+"La capture d'écran n'est pas prise en charge sur la machine virtuelle "
+"%(name)s"
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Impossible de créer la machine virtuelle %(name)s. Détails : %(err)s"
+msgstr "Impossible de créer la machine virtuelle %(name)s. Détails : %(err)s"
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
@@ -263,25 +252,22 @@ msgstr ""
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
-msgstr ""
-"URI du modèle non valide %(value)s indiqué pour la machine virtuelle"
+msgstr "URI du modèle non valide %(value)s indiqué pour la machine virtuelle"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for virtual machine"
msgstr ""
-"URI du pool de stockage non valide %(value)s indiqué pour la machine virtuelle"
+"URI du pool de stockage non valide %(value)s indiqué pour la machine "
+"virtuelle"
msgid "Supported virtual machine graphics are Spice or VNC"
-msgstr ""
-"Graphiques de machine virtuelle pris en charge : Spice ou VNC"
+msgstr "Graphiques de machine virtuelle pris en charge : Spice ou VNC"
msgid "Graphics address to listen on must be IPv4 or IPv6"
-msgstr ""
-"L'adresse des graphiques pour l'écoute doit être IPv4 ou IPv6"
+msgstr "L'adresse des graphiques pour l'écoute doit être IPv4 ou IPv6"
msgid "Specify a template to create a virtual machine from"
-msgstr ""
-"Indiquez un modèle pour créer une machine virtuelle depuis"
+msgstr "Indiquez un modèle pour créer une machine virtuelle depuis"
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
@@ -291,7 +277,8 @@ msgstr ""
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Impossible de mettre hors tension la machine virtuelle %(name)s. Détails : %(err)s"
+"Impossible de mettre hors tension la machine virtuelle %(name)s. Détails : "
+"%(err)s"
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
@@ -304,59 +291,51 @@ msgstr ""
"Impossible de réinitialiser la machine virtuelle %(name)s. Détails : %(err)s"
msgid "User name list must be an array"
-msgstr ""
-"La liste de noms d'utilisateur doit être un tableau"
+msgstr "La liste de noms d'utilisateur doit être un tableau"
msgid "User name must be a string"
-msgstr ""
-"Le nom d'utilisateur doit être une chaîne"
+msgstr "Le nom d'utilisateur doit être une chaîne"
msgid "Group name list must be an array"
-msgstr ""
-"La liste de noms de groupe doit être un tableau"
+msgstr "La liste de noms de groupe doit être un tableau"
msgid "Group name must be a string"
-msgstr ""
-"Le nom de groupe doit être une chaîne"
+msgstr "Le nom de groupe doit être une chaîne"
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr ""
-"Le ou les utilisateurs '%(users)s' n'existent pas"
+msgstr "Le ou les utilisateurs '%(users)s' n'existent pas"
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr ""
-"Le ou les groupes '%(groups)s' n'existent pas"
+msgstr "Le ou les groupes '%(groups)s' n'existent pas"
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Impossible d'arrêter la machine virtuelle %(name)s. Détails : %(err)s"
+msgstr "Impossible d'arrêter la machine virtuelle %(name)s. Détails : %(err)s"
#, python-format
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Impossible d'obtenir l'accès aux métadonnées de la machine virtuelle %(name)s. Détails : %(err)s"
+"Impossible d'obtenir l'accès aux métadonnées de la machine virtuelle "
+"%(name)s. Détails : %(err)s"
msgid "The guest console password must be a string."
-msgstr ""
-"Le mot de passe de la console invité doit être une chaîne."
+msgstr "Le mot de passe de la console invité doit être une chaîne."
msgid "The life time for the guest console password must be a number."
msgstr ""
-"La durée de vie du mot de passe de console invité doit être une valeur numérique."
+"La durée de vie du mot de passe de console invité doit être une valeur "
+"numérique."
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
-msgstr ""
-"La machine virtuelle '%(name)s' doit être arrêtée avant d'être clonée."
+msgstr "La machine virtuelle '%(name)s' doit être arrêtée avant d'être clonée."
#, python-format
msgid "Insufficient disk space to clone virtual machine '%(name)s'"
-msgstr ""
-"Espace disque insuffisant pour cloner la machine virtuelle '%(name)s'"
+msgstr "Espace disque insuffisant pour cloner la machine virtuelle '%(name)s'"
#, python-format
msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
@@ -365,13 +344,13 @@ msgstr ""
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
-msgstr ""
-"Opération non valide pour la machine virtuelle non permanente %(name)s"
+msgstr "Opération non valide pour la machine virtuelle non permanente %(name)s"
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
msgstr ""
-"Impossible d'interrompre la machine virtuelle '%(name)s' car elle n'est pas en cours d'exécution."
+"Impossible d'interrompre la machine virtuelle '%(name)s' car elle n'est pas "
+"en cours d'exécution."
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
@@ -381,7 +360,8 @@ msgstr ""
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
msgstr ""
-"Impossible de reprendre la machine virtuelle '%(name)s' car elle n'est pas interrompue."
+"Impossible de reprendre la machine virtuelle '%(name)s' car elle n'est pas "
+"interrompue."
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
@@ -390,26 +370,29 @@ msgstr ""
msgid "Memory assigned is higher then the maximum allowed in the host."
msgstr ""
-"La mémoire affectée est supérieure à la quantité maximale autorisée sur l'hôte."
+"La mémoire affectée est supérieure à la quantité maximale autorisée sur "
+"l'hôte."
#, python-format
msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
-"La machine virtuelle '%(name)s' ne prend pas en charge la mise à jour dynamique de la mémoire. Mettez à jour la mémoire avec "
-"la machine hors ligne pour activer cette fonction."
+"La machine virtuelle '%(name)s' ne prend pas en charge la mise à jour "
+"dynamique de la mémoire. Mettez à jour la mémoire avec la machine hors ligne "
+"pour activer cette fonction."
msgid "Only increase memory is allowed in active VMs"
msgstr ""
-"Seule une augmentation de la mémoire est autorisée sur les machines virtuelles actives"
+"Seule une augmentation de la mémoire est autorisée sur les machines "
+"virtuelles actives"
msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
msgstr ""
-"Pour la mise à jour dynamique de la mémoire, la nouvelle valeur de mémoire doit être égale à l'ancienne valeur plus "
-"des multiples de 1024 Mib"
+"Pour la mise à jour dynamique de la mémoire, la nouvelle valeur de mémoire "
+"doit être égale à l'ancienne valeur plus des multiples de 1024 Mib"
msgid "There are not enough free slots of 1024 Mib in the guest."
msgstr ""
@@ -419,24 +402,25 @@ msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
msgstr ""
-"La version libvirt de l'hôte ne prend pas en charge les unités de mémoire. Libvirt doit être >= "
-"1.2.14"
+"La version libvirt de l'hôte ne prend pas en charge les unités de mémoire. "
+"Libvirt doit être >= 1.2.14"
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
-msgstr ""
-"Erreur d'attachement de l'unité de mémoire. Détails : %(error)s"
+msgstr "Erreur d'attachement de l'unité de mémoire. Détails : %(error)s"
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
-"La machine virtuelle VM %(vmid)s ne contient pas l'unité hôte affectée directement %(dev_name)s."
+"La machine virtuelle VM %(vmid)s ne contient pas l'unité hôte affectée "
+"directement %(dev_name)s."
#, python-format
msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
msgstr ""
-"L'unité hôte %(dev_name)s n'est pas autorisée à être affectée directement à la machine virtuelle."
+"L'unité hôte %(dev_name)s n'est pas autorisée à être affectée directement à "
+"la machine virtuelle."
msgid ""
"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
@@ -445,28 +429,26 @@ msgid ""
"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
"iommu=1."
msgstr ""
-"Aucun groupe IOMMU trouvé. Le passe-système PCI hôte a besoin d'un groupe IOMMU pour "
-"fonctionner correctement. Activez Intel VT-d ou AMD IOMMU dans votre BIOS, puis vérifiez "
-"que le noyau est compilé avec le support IOMMU. Pour l'UC Intel, ajoutez intel_iommu=on "
-"pour le paramètre de noyau dans /boot/grub2/grub.conf. Pour l'UC AMD, ajoutez iommu=pt "
-"iommu=1."
+"Aucun groupe IOMMU trouvé. Le passe-système PCI hôte a besoin d'un groupe "
+"IOMMU pour fonctionner correctement. Activez Intel VT-d ou AMD IOMMU dans "
+"votre BIOS, puis vérifiez que le noyau est compilé avec le support IOMMU. "
+"Pour l'UC Intel, ajoutez intel_iommu=on pour le paramètre de noyau dans /"
+"boot/grub2/grub.conf. Pour l'UC AMD, ajoutez iommu=pt iommu=1."
msgid "\"name\" should be a device name string"
-msgstr ""
-"\"name\" doit être une chaîne de nom d'unité"
+msgstr "\"name\" doit être une chaîne de nom d'unité"
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
msgstr ""
-"L'unité %(name)s est probablement utilisée par l'hôte. Impossible de l'attacher à "
-"l'hôte."
+"L'unité %(name)s est probablement utilisée par l'hôte. Impossible de "
+"l'attacher à l'hôte."
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
-msgstr ""
-"L'interface %(iface)s n'existe pas sur la machine virtuelle %(name)s"
+msgstr "L'interface %(iface)s n'existe pas sur la machine virtuelle %(name)s"
#, python-format
msgid ""
@@ -480,37 +462,37 @@ msgstr ""
msgid "Network name for virtual machine interface must be a string"
msgstr ""
-"Le nom de réseau pour l'interface de la machine virtuelle doit être une chaîne"
+"Le nom de réseau pour l'interface de la machine virtuelle doit être une "
+"chaîne"
msgid "Invalid network model card specified for virtual machine interface"
msgstr ""
-"La carte de modèle réseau spécifiée pour l'interface de la machine virtuelle n'est pas valide"
+"La carte de modèle réseau spécifiée pour l'interface de la machine virtuelle "
+"n'est pas valide"
msgid "Specify type and network to add a new virtual machine interface"
msgstr ""
-"Spécifiez un type et un réseau à ajouter à une nouvelle interface de machine virtuelle"
+"Spécifiez un type et un réseau à ajouter à une nouvelle interface de machine "
+"virtuelle"
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
-msgstr ""
-"L'adresse MAC doit être conforme au format FF:FF:FF:FF:FF:FF"
+msgstr "L'adresse MAC doit être conforme au format FF:FF:FF:FF:FF:FF"
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
-msgstr ""
-"L'adresse MAC %(mac)s existe déjà sur la machine virtuelle %(name)s"
+msgstr "L'adresse MAC %(mac)s existe déjà sur la machine virtuelle %(name)s"
msgid "Invalid MAC Address"
-msgstr ""
-"Adresse MAC non valide"
+msgstr "Adresse MAC non valide"
msgid "Cannot change MAC address of a running virtual machine"
msgstr ""
-"Impossible de modifier l'adresse MAC d'une machine virtuelle en cours d'exécution"
+"Impossible de modifier l'adresse MAC d'une machine virtuelle en cours "
+"d'exécution"
#, python-format
msgid "Template %(name)s already exists"
-msgstr ""
-"Le modèle %(name)s existe déjà"
+msgstr "Le modèle %(name)s existe déjà"
#, python-format
msgid ""
@@ -522,17 +504,18 @@ msgstr ""
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
msgstr ""
-"Le pool de stockage '%(pool)s' indiqué pour le modèle %(template)s n'existe pas"
+"Le pool de stockage '%(pool)s' indiqué pour le modèle %(template)s n'existe "
+"pas"
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
msgstr ""
-"Le pool de stockage '%(pool)s' indiqué pour le modèle %(template)s n'est pas actif"
+"Le pool de stockage '%(pool)s' indiqué pour le modèle %(template)s n'est pas "
+"actif"
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr ""
-"Paramètre non valide '%(param)s' spécifié pour le CD-ROM."
+msgstr "Paramètre non valide '%(param)s' spécifié pour le CD-ROM."
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
@@ -540,59 +523,49 @@ msgstr ""
"Le réseau '%(network)s' indiqué pour le modèle %(template)s n'est pas actif"
msgid "Template name must be a string"
-msgstr ""
-"Le nom du modèle doit être une chaîne"
+msgstr "Le nom du modèle doit être une chaîne"
msgid "Template icon must be a path to the image"
-msgstr ""
-"L'icône de modèle doit être un chemin d'accès à l'image"
+msgstr "L'icône de modèle doit être un chemin d'accès à l'image"
msgid "Template distribution must be a string"
-msgstr ""
-"La distribution du modèle doit être une chaîne"
+msgstr "La distribution du modèle doit être une chaîne"
msgid "Template distribution version must be a string"
-msgstr ""
-"La version de distribution du modèle doit être une chaîne"
+msgstr "La version de distribution du modèle doit être une chaîne"
msgid "The number of CPUs must be an integer greater than 0"
-msgstr ""
-"Le nombre d'UC doit être un entier supérieur à 0"
+msgstr "Le nombre d'UC doit être un entier supérieur à 0"
msgid "Amount of memory (MB) must be an integer greater than 512"
-msgstr ""
-"La quantité de mémoire (Mo) doit être un entier supérieur à 512"
+msgstr "La quantité de mémoire (Mo) doit être un entier supérieur à 512"
msgid "Template CDROM must be a local or remote ISO file"
-msgstr ""
-"Le CD-ROM modèle doit être un fichier ISO local ou distant"
+msgstr "Le CD-ROM modèle doit être un fichier ISO local ou distant"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for template"
-msgstr ""
-"URI du pool de stockage non valide %(value)s indiqué pour le modèle"
+msgstr "URI du pool de stockage non valide %(value)s indiqué pour le modèle"
msgid "Specify an ISO image as CDROM or a base image to create a template"
msgstr ""
"Indiquez une image ISO comme CD-ROM ou image de base pour créer un modèle"
msgid "All networks for the template must be specified in a list."
-msgstr ""
-"Tous les réseaux du modèle doivent être spécifiés dans une liste."
+msgstr "Tous les réseaux du modèle doivent être spécifiés dans une liste."
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
msgstr ""
-"Spécifiez un volume sur un modèle lorsque le pool de stockage est iSCSI ou SCSI"
+"Spécifiez un volume sur un modèle lorsque le pool de stockage est iSCSI ou "
+"SCSI"
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
-msgstr ""
-"Le volume %(volume)s n'est pas dans le pool de stockage %(pool)s"
+msgstr "Le volume %(volume)s n'est pas dans le pool de stockage %(pool)s"
#, python-format
msgid "Unable to create template due error: %(err)s"
-msgstr ""
-"Impossible de créer le modèle en raison de l'erreur suivante : %(err)s"
+msgstr "Impossible de créer le modèle en raison de l'erreur suivante : %(err)s"
#, python-format
msgid "Unable to delete template due error: %(err)s"
@@ -600,81 +573,71 @@ msgstr ""
"Impossible de supprimer le modèle en raison de l'erreur suivante : %(err)s"
msgid "Disk size must be an integer greater than 1GB."
-msgstr ""
-"La taille du disque doit être un entier supérieur à 1 Go."
+msgstr "La taille du disque doit être un entier supérieur à 1 Go."
msgid "Template base image must be a valid local image file"
-msgstr ""
-"L'image de base du modèle doit être un fichier image local valide"
+msgstr "L'image de base du modèle doit être un fichier image local valide"
#, python-format
msgid "Cannot identify base image %(path)s format"
-msgstr ""
-"Impossible d'identifier le format %(path)s de l'image de base"
+msgstr "Impossible d'identifier le format %(path)s de l'image de base"
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
msgstr ""
-"Lors de la spécification de la topologie d'UC, les UC virtuelles doivent être un produit des sockets, coeurs et "
-"unités d'exécution."
+"Lors de la spécification de la topologie d'UC, les UC virtuelles doivent "
+"être un produit des sockets, coeurs et unités d'exécution."
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
"zero."
msgstr ""
-"Lors de la spécification de la topologie d'UC, chaque élément doit être un entier supérieur à "
-"zéro."
+"Lors de la spécification de la topologie d'UC, chaque élément doit être un "
+"entier supérieur à zéro."
msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"Format d'image de disque non valide. Formats valides : bochs, cloop, cow, dmg, qcow, "
-"qcow2, qed, raw, vmdk, vpc."
+"Format d'image de disque non valide. Formats valides : bochs, cloop, cow, "
+"dmg, qcow, qcow2, qed, raw, vmdk, vpc."
#, python-format
msgid "Storage pool %(name)s already exists"
-msgstr ""
-"Le pool de stockage %(name)s existe déjà"
+msgstr "Le pool de stockage %(name)s existe déjà"
#, python-format
msgid "Storage pool %(name)s does not exist"
-msgstr ""
-"Le pool de stockage %(name)s n'existe pas"
+msgstr "Le pool de stockage %(name)s n'existe pas"
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
-msgstr ""
-"Spécifiez %(item)s pour créer le pool de stockage %(name)s"
+msgstr "Spécifiez %(item)s pour créer le pool de stockage %(name)s"
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr ""
-"Impossible de supprimer le pool de stockage actif %(name)s"
+msgstr "Impossible de supprimer le pool de stockage actif %(name)s"
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
-msgstr ""
-"Impossible de répertorier les pools de stockage. Détails : %(err)s"
+msgstr "Impossible de répertorier les pools de stockage. Détails : %(err)s"
#, python-format
msgid "Unable to create storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"Impossible de créer le pool de stockage %(name)s. Détails : %(err)s"
+msgstr "Impossible de créer le pool de stockage %(name)s. Détails : %(err)s"
#, python-format
msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
msgstr ""
-"Impossible d'obtenir le nombre de volumes de stockage dans le pool de stockage %(name)s. Détails : "
-"%(err)s"
+"Impossible d'obtenir le nombre de volumes de stockage dans le pool de "
+"stockage %(name)s. Détails : %(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"Impossible d'activer le pool de stockage %(name)s. Détails : %(err)s"
+msgstr "Impossible d'activer le pool de stockage %(name)s. Détails : %(err)s"
#, python-format
msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
@@ -690,121 +653,116 @@ msgstr ""
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
msgstr ""
-"Impossible de créer le pool NFS car le chemin d'exportation %(path)s risque de bloquer lors du montage"
+"Impossible de créer le pool NFS car le chemin d'exportation %(path)s risque "
+"de bloquer lors du montage"
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
msgstr ""
-"Impossible de créer le pool NFS car le montage du chemin d'exportation %(path)s a échoué"
+"Impossible de créer le pool NFS car le montage du chemin d'exportation "
+"%(path)s a échoué"
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr ""
-"Type de pool de stockage non pris en charge : %(type)s"
+msgstr "Type de pool de stockage non pris en charge : %(type)s"
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
-msgstr ""
-"Erreur d'extraction du fichier XML du pool de stockage dans %(pool)s"
+msgstr "Erreur d'extraction du fichier XML du pool de stockage dans %(pool)s"
msgid "Storage pool name must be a string without slashes (/)"
-msgstr ""
-"Le nom du pool de stockage doit être une chaîne sans barre oblique (/)"
+msgstr "Le nom du pool de stockage doit être une chaîne sans barre oblique (/)"
msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
"iso"
msgstr ""
-"Types de pool de stockage pris en charge : dir, netfs, logical, iscsi, isci et kimchi-"
-"iso"
+"Types de pool de stockage pris en charge : dir, netfs, logical, iscsi, isci "
+"et kimchi-iso"
msgid "Storage pool path must be a string"
-msgstr ""
-"Le chemin du pool de stockage doit être une chaîne"
+msgstr "Le chemin du pool de stockage doit être une chaîne"
msgid "Storage pool host must be a IP or hostname"
-msgstr ""
-"L'hôte du pool de stockage doit être une adresse IP ou un nom d'hôte"
+msgstr "L'hôte du pool de stockage doit être une adresse IP ou un nom d'hôte"
msgid "Storage pool device must be the absolute path to the block device"
msgstr ""
-"L'unité du pool de stockage doit correspondre au chemin d'accès absolu à l'unité par bloc"
+"L'unité du pool de stockage doit correspondre au chemin d'accès absolu à "
+"l'unité par bloc"
msgid "Storage pool devices parameter must be a list"
msgstr ""
"Le paramètre des unités du pool de stockage doivent constituer une liste"
msgid "Target IQN of an iSCSI pool must be a string"
-msgstr ""
-"Le nom qualifié iSCSI (IQN) cible d'un pool iSCSI doit être une chaîne"
+msgstr "Le nom qualifié iSCSI (IQN) cible d'un pool iSCSI doit être une chaîne"
msgid "Port of a remote storage server must be an integer between 1 and 65535"
msgstr ""
-"Le port d'un serveur de stockage distant doit être un entier compris entre 1 et 65535"
+"Le port d'un serveur de stockage distant doit être un entier compris entre 1 "
+"et 65535"
msgid "iSCSI target username must be a string"
-msgstr ""
-"Le nom d'utilisateur cible iSCSI doit être une chaîne"
+msgstr "Le nom d'utilisateur cible iSCSI doit être une chaîne"
msgid "iSCSI target password must be a string"
-msgstr ""
-"Le mot de passe cible iSCSI doit être une chaîne"
+msgstr "Le mot de passe cible iSCSI doit être une chaîne"
msgid "Specify name and type to create a storage pool"
-msgstr ""
-"Indiquez le nom et le type pour créer un pool de stockage"
+msgstr "Indiquez le nom et le type pour créer un pool de stockage"
#, python-format
msgid ""
"%(disk)s is not a valid disk/partition. Could not add it to the pool "
"%(pool)s."
msgstr ""
-"%(disk)s n'est pas un disque/une partition valide. Impossible de l'ajouter au pool "
-"%(pool)s."
+"%(disk)s n'est pas un disque/une partition valide. Impossible de l'ajouter "
+"au pool %(pool)s."
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
-msgstr ""
-"Impossible d'étendre le pool logique %(pool)s. Détails : %(err)s"
+msgstr "Impossible d'étendre le pool logique %(pool)s. Détails : %(err)s"
msgid "The parameter disks only can be updated for logical storage pool."
msgstr ""
-"Les disques de paramètre peuvent être mis à jour uniquement pour le pool de stockage logique."
+"Les disques de paramètre peuvent être mis à jour uniquement pour le pool de "
+"stockage logique."
msgid "The SCSI host adapter name must be a string."
-msgstr ""
-"Le nom de l'adaptateur hôte SCSI doit être une chaîne."
+msgstr "Le nom de l'adaptateur hôte SCSI doit être une chaîne."
msgid "The storage pool kimchi_isos is reserved for internal use"
-msgstr ""
-"Le pool de stockage kimchi_isos est réservé à un usage interne"
+msgstr "Le pool de stockage kimchi_isos est réservé à un usage interne"
#, python-format
msgid ""
"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"Impossible d'activer le pool de stockage NFS %(name)s. Le serveur NFS %(server)s est "
-"inaccessible."
+"Impossible d'activer le pool de stockage NFS %(name)s. Le serveur NFS "
+"%(server)s est inaccessible."
#, python-format
msgid ""
"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"Impossible de désactiver le pool de stockage NFS %(name)s. Le serveur NFS %(server)s est "
-"inaccessible."
+"Impossible de désactiver le pool de stockage NFS %(name)s. Le serveur NFS "
+"%(server)s est inaccessible."
#, python-format
msgid ""
"Unable to deactivate pool %(name)s as it is associated with some templates"
msgstr ""
-"Impossible de désactiver le pool %(name)s car il est associé à plusieurs modèles"
+"Impossible de désactiver le pool %(name)s car il est associé à plusieurs "
+"modèles"
#, python-format
msgid "Unable to delete pool %(name)s as it is associated with some templates"
msgstr ""
-"Impossible de supprimer le pool %(name)s car il est associé à plusieurs modèles"
+"Impossible de supprimer le pool %(name)s car il est associé à plusieurs "
+"modèles"
#, python-format
msgid ""
@@ -817,12 +775,12 @@ msgstr ""
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
msgstr ""
-"Impossible de mettre à jour la base de données avec des informations d'analyse approfondie en raison de l'erreur suivante : %(err)s"
+"Impossible de mettre à jour la base de données avec des informations "
+"d'analyse approfondie en raison de l'erreur suivante : %(err)s"
#, python-format
msgid "Storage volume %(name)s already exists"
-msgstr ""
-"Le volume de stockage %(name)s existe déjà"
+msgstr "Le volume de stockage %(name)s existe déjà"
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
@@ -834,33 +792,34 @@ msgid ""
"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
"not active"
msgstr ""
-"Impossible de créer le volume de stockage %(volume)s car le pool de stockage %(pool)s "
-"n'est pas actif"
+"Impossible de créer le volume de stockage %(volume)s car le pool de stockage "
+"%(pool)s n'est pas actif"
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
-msgstr ""
-"Spécifiez %(item)s afin de créer le volume de stockage %(volume)s"
+msgstr "Spécifiez %(item)s afin de créer le volume de stockage %(volume)s"
#, python-format
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
msgstr ""
-"Impossible de répertorier les volumes de stockage car le pool de stockage %(pool)s n'est pas actif"
+"Impossible de répertorier les volumes de stockage car le pool de stockage "
+"%(pool)s n'est pas actif"
#, python-format
msgid ""
"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
"%(err)s"
msgstr ""
-"Impossible de créer le volume de stockage %(name)s dans le pool de stockage %(pool)s. Détails : "
-"%(err)s"
+"Impossible de créer le volume de stockage %(name)s dans le pool de stockage "
+"%(pool)s. Détails : %(err)s"
#, python-format
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
msgstr ""
-"Impossible de répertorier les volumes de stockage dans le pool de stockage %(pool)s. Détails : %(err)s"
+"Impossible de répertorier les volumes de stockage dans le pool de stockage "
+"%(pool)s. Détails : %(err)s"
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
@@ -875,42 +834,41 @@ msgstr ""
#, python-format
msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
msgstr ""
-"Impossible de redimensionner le volume de stockage %(name)s. Détails : %(err)s"
+"Impossible de redimensionner le volume de stockage %(name)s. Détails : "
+"%(err)s"
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
msgstr ""
-"Le type de stockage %(type)s ne prend pas en charge la création et la suppression de volume"
+"Le type de stockage %(type)s ne prend pas en charge la création et la "
+"suppression de volume"
msgid "Storage volume name must be a string"
-msgstr ""
-"Le nom du volume de stockage doit être une chaîne"
+msgstr "Le nom du volume de stockage doit être une chaîne"
msgid "Storage volume allocation must be an integer number"
-msgstr ""
-"L'allocation de volume de stockage doit être un nombre entier"
+msgstr "L'allocation de volume de stockage doit être un nombre entier"
msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"Format du volume de stockage non pris en charge. Formats valides : bochs, cloop, cow, dmg, "
-"qcow, qcow2, qed, raw, vmdk, vpc."
+"Format du volume de stockage non pris en charge. Formats valides : bochs, "
+"cloop, cow, dmg, qcow, qcow2, qed, raw, vmdk, vpc."
msgid "Storage volume requires a volume name"
-msgstr ""
-"Le volume de stockage requiert un nom de volume"
+msgstr "Le volume de stockage requiert un nom de volume"
#, python-format
msgid ""
"Unable to update database with storage volume information due error: %(err)s"
msgstr ""
-"Impossible de mettre à jour la base de données avec des informations de volume de stockage en raison de l'erreur suivante : %(err)s"
+"Impossible de mettre à jour la base de données avec des informations de "
+"volume de stockage en raison de l'erreur suivante : %(err)s"
#, python-format
msgid "Only one of parameter %(param)s can be specified"
-msgstr ""
-"Un seul paramètre %(param)s peut être spécifié"
+msgstr "Un seul paramètre %(param)s peut être spécifié"
#, python-format
msgid "Create volume from %(param)s is not supported"
@@ -927,16 +885,15 @@ msgstr ""
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
-msgstr ""
-"Impossible d'accéder au fichier %(url)s. Vérifiez ce dernier."
+msgstr "Impossible d'accéder au fichier %(url)s. Vérifiez ce dernier."
#, python-format
msgid ""
"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
"%(err)s"
msgstr ""
-"Impossible de cloner le volume de stockage '%(name)s' dans le pool '%(pool)s'. Détails : "
-"%(err)s"
+"Impossible de cloner le volume de stockage '%(name)s' dans le pool "
+"'%(pool)s'. Détails : %(err)s"
msgid "Specify chunk data and its size to upload a file."
msgstr ""
@@ -949,51 +906,51 @@ msgstr ""
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
msgstr ""
-"Impossible de télécharger les données de bloc car elles ne correspondent pas à la taille de bloc."
+"Impossible de télécharger les données de bloc car elles ne correspondent pas "
+"à la taille de bloc."
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
msgstr ""
-"Le volume de stockage %(vol)s n'est pas soumis à un processus de téléchargement."
+"Le volume de stockage %(vol)s n'est pas soumis à un processus de "
+"téléchargement."
msgid "The upload chunk data will exceed the storage volume size."
msgstr ""
-"Le téléchargement des données de bloc dépasse la taille du volume de stockage."
+"Le téléchargement des données de bloc dépasse la taille du volume de "
+"stockage."
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
msgstr ""
-"Impossible de télécharger les données de bloc dans le volume de stockage. Détails : %(err)s."
+"Impossible de télécharger les données de bloc dans le volume de stockage. "
+"Détails : %(err)s."
#, python-format
msgid "Interface %(name)s does not exist"
-msgstr ""
-"L'interface %(name)s n'existe pas"
+msgstr "L'interface %(name)s n'existe pas"
#, python-format
msgid "Network %(name)s already exists"
-msgstr ""
-"Le réseau %(name)s existe déjà"
+msgstr "Le réseau %(name)s existe déjà"
#, python-format
msgid "Network %(name)s does not exist"
-msgstr ""
-"Le réseau %(name)s n'existe pas"
+msgstr "Le réseau %(name)s n'existe pas"
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
msgstr ""
-"Le sous-réseau %(subnet)s indiqué pour le réseau %(network)s n'est pas valide."
+"Le sous-réseau %(subnet)s indiqué pour le réseau %(network)s n'est pas "
+"valide."
#, python-format
msgid "Specify a network interface to create bridged network %(name)s"
-msgstr ""
-"Indiquez une interface réseau pour créer le réseau routé %(name)s"
+msgstr "Indiquez une interface réseau pour créer le réseau routé %(name)s"
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr ""
-"Impossible de supprimer le réseau actif %(name)s"
+msgstr "Impossible de supprimer le réseau actif %(name)s"
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
@@ -1002,12 +959,12 @@ msgstr ""
msgid "Interface should be bare NIC, bonding or bridge device."
msgstr ""
-"L'interface doit être un contrôleur NIC nu, une unité de pontage ou de liaison."
+"L'interface doit être un contrôleur NIC nu, une unité de pontage ou de "
+"liaison."
#, python-format
msgid "Unable to create network %(name)s. Details: %(err)s"
-msgstr ""
-"Impossible de créer le réseau %(name)s. Détails : %(err)s"
+msgstr "Impossible de créer le réseau %(name)s. Détails : %(err)s"
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
@@ -1016,80 +973,76 @@ msgstr ""
#, python-format
msgid "The interface %(iface)s already exists."
-msgstr ""
-"L'interface %(iface)s existe déjà."
+msgstr "L'interface %(iface)s existe déjà."
msgid "Network name must be a string without slashes (/) or quotes (\")"
msgstr ""
-"Le nom du réseau doit être une chaîne sans barre oblique (/) ni guillemet (\")"
+"Le nom du réseau doit être une chaîne sans barre oblique (/) ni guillemet "
+"(\")"
msgid "Supported network types are isolated, NAT and bridge"
-msgstr ""
-"Les types de réseau pris en charge sont isolé, NAT et routé"
+msgstr "Les types de réseau pris en charge sont isolé, NAT et routé"
msgid "Network subnet must be a string with IP address and prefix or netmask"
msgstr ""
-"Le sous-réseau du réseau doit être une chaîne avec adresse IP et préfixe ou masque de réseau"
+"Le sous-réseau du réseau doit être une chaîne avec adresse IP et préfixe ou "
+"masque de réseau"
msgid "Network interface must be a string"
-msgstr ""
-"L'interface réseau doit être une chaîne"
+msgstr "L'interface réseau doit être une chaîne"
msgid "Network VLAN ID must be an integer between 1 and 4094"
msgstr ""
-"L'ID réseau local virtuel du réseau doit être un entier compris entre 1 et 4094"
+"L'ID réseau local virtuel du réseau doit être un entier compris entre 1 et "
+"4094"
msgid "Specify name and type to create a Network"
-msgstr ""
-"Indiquez le nom et le type pour créer un réseau"
+msgstr "Indiquez le nom et le type pour créer un réseau"
#, python-format
msgid ""
"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
"and/or templates linked to this network."
msgstr ""
-"Impossible de supprimer le réseau %(name)s. Il existe plusieurs machines virtuelles %(vms)s "
-"et/ou modèles liés à ce réseau."
+"Impossible de supprimer le réseau %(name)s. Il existe plusieurs machines "
+"virtuelles %(vms)s et/ou modèles liés à ce réseau."
#, python-format
msgid ""
"Unable to deactivate network %(name)s. There are some virtual machines "
"%(vms)s and/or templates linked to this network."
msgstr ""
-"Impossible de désactiver le réseau %(name)s. Il existe plusieurs machines virtuelles "
-"%(vms)s et/ou modèles liés à ce réseau."
+"Impossible de désactiver le réseau %(name)s. Il existe plusieurs machines "
+"virtuelles %(vms)s et/ou modèles liés à ce réseau."
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
msgstr ""
-"L'unité de pontage %(name)s ne peut pas être l'unité de liaison d'un réseau local virtuel."
+"L'unité de pontage %(name)s ne peut pas être l'unité de liaison d'un réseau "
+"local virtuel."
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr ""
-"Echec de l'activation de l'interface %(iface)s: %(err)s."
+msgstr "Echec de l'activation de l'interface %(iface)s: %(err)s."
#, python-format
msgid ""
"Failed to activate interface %(iface)s. Please check the physical link "
"status."
msgstr ""
-"Echec de l'activation de l'interface %(iface)s. Vérifiez l'état de "
-"la liaison physique."
+"Echec de l'activation de l'interface %(iface)s. Vérifiez l'état de la "
+"liaison physique."
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
-msgstr ""
-"Echec du démarrage du réseau %(name)s. Détails : %(err)s"
+msgstr "Echec du démarrage du réseau %(name)s. Détails : %(err)s"
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr ""
-"Le rapport de débogage %(name)s n'existe pas"
+msgstr "Le rapport de débogage %(name)s n'existe pas"
msgid "Debug report tool not found in system"
-msgstr ""
-"Outil de génération de rapports de débogage introuvable sur le système"
+msgstr "Outil de génération de rapports de débogage introuvable sur le système"
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
@@ -1098,8 +1051,7 @@ msgstr ""
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
-msgstr ""
-"Aucun rapport de débogage nommé %(name)s n'a été trouvé"
+msgstr "Aucun rapport de débogage nommé %(name)s n'a été trouvé"
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
@@ -1107,106 +1059,95 @@ msgstr ""
"Impossible de générer le rapport de débogage %(name)s. Détails : %(err)s"
msgid "You should give a name for the debug report file."
-msgstr ""
-"Vous devez indiquer un nom pour le fichier du rapport de débogage."
+msgstr "Vous devez indiquer un nom pour le fichier du rapport de débogage."
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
-"Le nom du rapport de débogage doit être une chaîne. Seuls des lettres, chiffres, trait de soulignement ('_') "
-"et tiret ('-') sont autorisés."
+"Le nom du rapport de débogage doit être une chaîne. Seuls des lettres, "
+"chiffres, trait de soulignement ('_') et tiret ('-') sont autorisés."
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
msgstr ""
-"Le rapport de débogage nommé \"%(name)s\" existe déjà. Veuillez utiliser "
-"un autre nom."
+"Le rapport de débogage nommé \"%(name)s\" existe déjà. Veuillez utiliser un "
+"autre nom."
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr ""
-"Le serveur de stockage %(server)s n'a pas été utilisé par Kimchi"
+msgstr "Le serveur de stockage %(server)s n'a pas été utilisé par Kimchi"
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr ""
-"La distribution '%(name)s' n'existe pas"
+msgstr "La distribution '%(name)s' n'existe pas"
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr ""
-"La partition %(name)s n'existe pas sur l'hôte"
+msgstr "La partition %(name)s n'existe pas sur l'hôte"
msgid "Unable to shutdown host machine as there are running virtual machines"
msgstr ""
-"Impossible d'arrêter la machine hôte car des machines virtuelles sont en cours d'exécution"
+"Impossible d'arrêter la machine hôte car des machines virtuelles sont en "
+"cours d'exécution"
msgid "Unable to reboot host machine as there are running virtual machines"
msgstr ""
-"Impossible de réamorcer la machine hôte car des machines virtuelles sont en cours d'exécution"
+"Impossible de réamorcer la machine hôte car des machines virtuelles sont en "
+"cours d'exécution"
#, python-format
msgid "Node device '%(name)s' not found"
-msgstr ""
-"Unité de noeud '%(name)s' introuvable"
+msgstr "Unité de noeud '%(name)s' introuvable"
msgid "Conflicting flag filters specified."
-msgstr ""
-"Filtres d'indicateur en conflit spécifiés."
+msgstr "Filtres d'indicateur en conflit spécifiés."
msgid "No packages marked for update"
-msgstr ""
-"Aucun module marqué pour mise à jour"
+msgstr "Aucun module marqué pour mise à jour"
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr ""
-"Le module %(name)s n'est pas marqué pour mise à jour."
+msgstr "Le module %(name)s n'est pas marqué pour mise à jour."
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
msgstr ""
-"Erreur lors de l'obtention des modules marqués pour mise à jour. Détails : %(err)s"
+"Erreur lors de l'obtention des modules marqués pour mise à jour. Détails : "
+"%(err)s"
msgid "There is no compatible package manager for this system."
-msgstr ""
-"Aucun gestionnaire de modules compatible pour ce système."
+msgstr "Aucun gestionnaire de modules compatible pour ce système."
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr ""
-"%(item)s introuvable dans le magasin de données"
+msgstr "%(item)s introuvable dans le magasin de données"
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr ""
-"URI %(uri)s non valide"
+msgstr "URI %(uri)s non valide"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
msgstr ""
-"Dépassement de délai lors de l'exécution de la commande '%(cmd)s' après %(seconds)s secondes"
+"Dépassement de délai lors de l'exécution de la commande '%(cmd)s' après "
+"%(seconds)s secondes"
msgid "Unable to choose a virtual machine name"
-msgstr ""
-"Impossible de sélectionner un nom de machine virtuelle"
+msgstr "Impossible de sélectionner un nom de machine virtuelle"
#, python-format
msgid "Invalid data value '%(value)s'"
-msgstr ""
-"Valeur de données '%(value)s' non valide"
+msgstr "Valeur de données '%(value)s' non valide"
#, python-format
msgid "Invalid data unit '%(unit)s'"
-msgstr ""
-"Unité de données '%(unit)s' non valide"
+msgstr "Unité de données '%(unit)s' non valide"
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
-msgstr ""
-"Type de stockage non valide. Types pris en charge : 'cdrom', 'disk'"
+msgstr "Type de stockage non valide. Types pris en charge : 'cdrom', 'disk'"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
@@ -1214,8 +1155,7 @@ msgstr ""
"Le chemin '%(value)s' n'est pas un chemin local/distant valide pour l'unité"
msgid "Only CDROM path can be update."
-msgstr ""
-"Seul le chemin du CD-ROM peut être mis à jour."
+msgstr "Seul le chemin du CD-ROM peut être mis à jour."
#, python-format
msgid ""
@@ -1227,122 +1167,106 @@ msgstr ""
#, python-format
msgid "Error while creating new storage device: %(error)s"
-msgstr ""
-"Erreur lors de la création de l'unité de stockage : %(error)s"
+msgstr "Erreur lors de la création de l'unité de stockage : %(error)s"
#, python-format
msgid "Error while updating storage device: %(error)s"
-msgstr ""
-"Erreur lors de la mise à jour de l'unité de stockage : %(error)s"
+msgstr "Erreur lors de la mise à jour de l'unité de stockage : %(error)s"
#, python-format
msgid "Error while removing storage device: %(error)s"
-msgstr ""
-"Erreur lors du retrait de l'unité de stockage : %(error)s"
+msgstr "Erreur lors du retrait de l'unité de stockage : %(error)s"
msgid "Do not support IDE device hot plug"
-msgstr ""
-"Pas de prise en charge du remplacement à chaud d'unité IDE"
+msgstr "Pas de prise en charge du remplacement à chaud d'unité IDE"
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
"disk"
msgstr ""
-"Spécifiez un type et un chemin pour ajouter un nouveau disque "
-"de machine virtuelle"
+"Spécifiez un type et un chemin pour ajouter un nouveau disque de machine "
+"virtuelle"
msgid "Specify path to update virtual machine disk"
-msgstr ""
-"Indiquez le chemin pour mettre à jour le disque de machine virtuelle"
+msgstr "Indiquez le chemin pour mettre à jour le disque de machine virtuelle"
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
-msgstr ""
-"Le type de contrôleur %(type)s a atteint sa limite de %(limit)s unités"
+msgstr "Le type de contrôleur %(type)s a atteint sa limite de %(limit)s unités"
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
msgstr ""
-"Impossible d'extraire les informations de chemin d'accès au disque pour le pool/volume donné : %(error)s"
+"Impossible d'extraire les informations de chemin d'accès au disque pour le "
+"pool/volume donné : %(error)s"
msgid "Volume already in use by other virtual machine."
-msgstr ""
-"Le volume est déjà utilisé par une autre machine virtuelle."
+msgstr "Le volume est déjà utilisé par une autre machine virtuelle."
msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
msgstr ""
-"Soit le chemin, soit le pool/volume peut être spécifié pour ajouter un nouveau disque "
-"de machine virtuelle"
+"Soit le chemin, soit le pool/volume peut être spécifié pour ajouter un "
+"nouveau disque de machine virtuelle"
#, python-format
msgid ""
"Volume chosen with format %(format)s does not fit in the storage type "
"%(type)s"
msgstr ""
-"Le volume choisi avec le format %(format)s n'est pas adapté au type de stockage "
-"%(type)s"
+"Le volume choisi avec le format %(format)s n'est pas adapté au type de "
+"stockage %(type)s"
msgid "YUM Repository ID must be one word only string."
-msgstr ""
-"L'ID référentiel YUM doit être une chaîne d'un seul mot."
+msgstr "L'ID référentiel YUM doit être une chaîne d'un seul mot."
msgid "Repository URL must be an http://, ftp:// or file:// URL."
-msgstr ""
-"L'URL du référentiel doit être de type http://, ftp:// ou file://."
+msgstr "L'URL du référentiel doit être de type http://, ftp:// ou file://."
msgid ""
"Repository configuration is a dictionary with specific values according to "
"repository type."
msgstr ""
-"La configuration de référentiel est un dictionnaire avec des valeurs spécifiques en fonction "
-"du type de référentiel."
+"La configuration de référentiel est un dictionnaire avec des valeurs "
+"spécifiques en fonction du type de référentiel."
msgid "Distribution to DEB repository must be a string"
-msgstr ""
-"La distribution sur le référentiel DEB doit être une chaîne"
+msgstr "La distribution sur le référentiel DEB doit être une chaîne"
msgid "Components to DEB repository must be listed in a array"
msgstr ""
"Les composants du référentiel DEB doivent être répertoriés dans un tableau"
msgid "Components to DEB repository must be a string"
-msgstr ""
-"Les composants du référentiel DEB doivent être une chaîne"
+msgstr "Les composants du référentiel DEB doivent être une chaîne"
msgid "Mirror list to repository must be a string"
-msgstr ""
-"La liste miroir du référentiel doit être une chaîne"
+msgstr "La liste miroir du référentiel doit être une chaîne"
msgid "YUM Repository name must be string."
-msgstr ""
-"Le nom de référentiel YUM doit être une chaîne."
+msgstr "Le nom de référentiel YUM doit être une chaîne."
msgid "GPG check must be a boolean value."
-msgstr ""
-"Le contrôle GPG doit être une valeur booléenne."
+msgstr "Le contrôle GPG doit être une valeur booléenne."
msgid "GPG key must be a URL pointing to the ASCII-armored file."
-msgstr ""
-"La clé GPG doit être une URL pointant sur le fichier ASCII."
+msgstr "La clé GPG doit être une URL pointant sur le fichier ASCII."
#, python-format
msgid "Could not update repository %(repo_id)s."
-msgstr ""
-"Impossible de mettre à jour le référentiel %(repo_id)s."
+msgstr "Impossible de mettre à jour le référentiel %(repo_id)s."
#, python-format
msgid "Repository %(repo_id)s does not exist."
-msgstr ""
-"Le référentiel %(repo_id)s n'existe pas."
+msgstr "Le référentiel %(repo_id)s n'existe pas."
msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
"update a YUM repository."
msgstr ""
-"Indiquez l'URL de base du référentiel, la liste miroir ou le lien afin de créer ou "
-"mettre à jour un référentiel YUM."
+"Indiquez l'URL de base du référentiel, la liste miroir ou le lien afin de "
+"créer ou mettre à jour un référentiel YUM."
msgid "Repository management tool was not recognized for your system."
msgstr ""
@@ -1350,23 +1274,21 @@ msgstr ""
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr ""
-"Le référentiel %(repo_id)s est déjà activé."
+msgstr "Le référentiel %(repo_id)s est déjà activé."
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr ""
-"Le référentiel %(repo_id)s est déjà désactivé."
+msgstr "Le référentiel %(repo_id)s est déjà désactivé."
#, python-format
msgid "Could not remove repository %(repo_id)s."
-msgstr ""
-"Impossible de supprimer le référentiel %(repo_id)s."
+msgstr "Impossible de supprimer le référentiel %(repo_id)s."
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
msgstr ""
-"Impossible d'écrire dans le fichier de configuration du référentiel %(repo_file)s"
+"Impossible d'écrire dans le fichier de configuration du référentiel "
+"%(repo_file)s"
msgid "Specify repository distribution in order to create a DEB repository."
msgstr ""
@@ -1374,155 +1296,143 @@ msgstr ""
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr ""
-"Impossible d'activer le référentiel %(repo_id)s."
+msgstr "Impossible d'activer le référentiel %(repo_id)s."
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr ""
-"Impossible de désactiver le référentiel %(repo_id)s."
+msgstr "Impossible de désactiver le référentiel %(repo_id)s."
msgid "YUM Repository ID already exists"
-msgstr ""
-"L'ID référentiel YUM existe déjà"
+msgstr "L'ID référentiel YUM existe déjà"
msgid "YUM Repository name must be a string"
-msgstr ""
-"Le nom de référentiel YUM doit être une chaîne."
+msgstr "Le nom de référentiel YUM doit être une chaîne."
#, python-format
msgid "Unable to list repositories. Details: '%(err)s'"
-msgstr ""
-"Impossible de répertorier les référentiels. Détails : '%(err)s'"
+msgstr "Impossible de répertorier les référentiels. Détails : '%(err)s'"
#, python-format
msgid "Unable to retrieve repository information. Details: '%(err)s'"
msgstr ""
-"Impossible d'extraire les informations relatives au référentiel. Détails : '%(err)s'"
+"Impossible d'extraire les informations relatives au référentiel. Détails : "
+"'%(err)s'"
#, python-format
msgid "Unable to add repository. Details: '%(err)s'"
-msgstr ""
-"Impossible d'ajouter le référentiel. Détails : '%(err)s'"
+msgstr "Impossible d'ajouter le référentiel. Détails : '%(err)s'"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr ""
-"Impossible de supprimer le référentiel. Détails : '%(err)s'"
+msgstr "Impossible de supprimer le référentiel. Détails : '%(err)s'"
#, python-format
msgid ""
"Configuration items: '%(items)s' are not supported by repository manager"
msgstr ""
-"Les éléments de configuration '%(items)s' ne sont pas pris en charge par le gestionnaire de référentiel"
+"Les éléments de configuration '%(items)s' ne sont pas pris en charge par le "
+"gestionnaire de référentiel"
msgid "Repository metalink must be an http://, ftp:// or file:// URL."
-msgstr ""
-"Le lien du référentiel doit être une URL http://, ftp:// ou file://."
+msgstr "Le lien du référentiel doit être une URL http://, ftp:// ou file://."
msgid "Cannot specify mirrorlist and metalink at the same time."
-msgstr ""
-"Impossible de spécifier à la fois la liste miroir et le lien."
+msgstr "Impossible de spécifier à la fois la liste miroir et le lien."
#, python-format
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
msgstr ""
-"La machine virtuelle '%(vm)s' doit être arrêtée avant la création d'une image instantanée de celle-ci."
+"La machine virtuelle '%(vm)s' doit être arrêtée avant la création d'une "
+"image instantanée de celle-ci."
#, python-format
msgid ""
"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Impossible de créer l'image instantanée '%(name)s' sur la machine virtuelle '%(vm)s'. Détails : "
-"%(err)s"
+"Impossible de créer l'image instantanée '%(name)s' sur la machine virtuelle "
+"'%(vm)s'. Détails : %(err)s"
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
msgstr ""
-"L'image instantanée '%(name)s' n'existe pas sur la machine virtuelle '%(vm)s'."
+"L'image instantanée '%(name)s' n'existe pas sur la machine virtuelle "
+"'%(vm)s'."
#, python-format
msgid ""
"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Impossible d'extraire l'image instantanée '%(name)s' sur la machine virtuelle '%(vm)s'. Détails : "
-"%(err)s"
+"Impossible d'extraire l'image instantanée '%(name)s' sur la machine "
+"virtuelle '%(vm)s'. Détails : %(err)s"
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
msgstr ""
-"Impossible de répertorier les images instantanées sur la machine virtuelle '%(vm)s'. Détails : %(err)s"
+"Impossible de répertorier les images instantanées sur la machine virtuelle "
+"'%(vm)s'. Détails : %(err)s"
#, python-format
msgid ""
"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Impossible de supprimer l'image instantanée '%(name)s' sur la machine virtuelle '%(vm)s'. Détails : "
-"%(err)s"
+"Impossible de supprimer l'image instantanée '%(name)s' sur la machine "
+"virtuelle '%(vm)s'. Détails : %(err)s"
#, python-format
msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Impossible d'extraire l'image instantanée en cours de la machine virtuelle '%(vm)s'. Détails : "
-"%(err)s"
+"Impossible d'extraire l'image instantanée en cours de la machine virtuelle "
+"'%(vm)s'. Détails : %(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
msgstr ""
-"Impossible de rétablir la machine virtuelle '%(vm)s' à l'image instantanée '%(name)s'. Détails : "
-"%(err)s"
+"Impossible de rétablir la machine virtuelle '%(vm)s' à l'image instantanée "
+"'%(name)s'. Détails : %(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
-"Impossible de créer l'image instantanée de la machine virtuelle '%(vm)s' car elle contient un "
-"disque au format '%(format)s' ; seul 'qcow2' est pris en charge."
+"Impossible de créer l'image instantanée de la machine virtuelle '%(vm)s' car "
+"elle contient un disque au format '%(format)s' ; seul 'qcow2' est pris en "
+"charge."
msgid "The number of vCPUs is too large for this system."
-msgstr ""
-"Le nombre d'UC virtuelles est trop élevé pour ce système."
+msgstr "Le nombre d'UC virtuelles est trop élevé pour ce système."
msgid "Invalid vCPU/topology combination."
-msgstr ""
-"Combinaison d'UC virtuelle/topologie non valide."
+msgstr "Combinaison d'UC virtuelle/topologie non valide."
msgid "This host (or current configuration) does not allow CPU topology."
-msgstr ""
-"Cet hôte (ou configuration actuelle) n'autorise pas la topologie d'UC."
+msgstr "Cet hôte (ou configuration actuelle) n'autorise pas la topologie d'UC."
msgid "ERROR CODE"
-msgstr ""
-"CODE D'ERREUR"
+msgstr "CODE D'ERREUR"
msgid "REASON"
-msgstr ""
-"MOTIF"
+msgstr "MOTIF"
msgid "STACK"
-msgstr ""
-"PILE"
+msgstr "PILE"
msgid "Go to Homepage"
-msgstr ""
-"Accéder à la page d'accueil"
+msgstr "Accéder à la page d'accueil"
msgid "Create a New Virtual Machine"
-msgstr ""
-"Créer une machine virtuelle"
+msgstr "Créer une machine virtuelle"
msgid "Virtual Machine Name"
-msgstr ""
-"Nom de la machine virtuelle"
+msgstr "Nom de la machine virtuelle"
msgid ""
"The name used to identify the virtual machine. If omitted, a name will be "
@@ -1532,689 +1442,557 @@ msgstr ""
"choisi en fonction du modèle utilisé."
msgid "Template"
-msgstr ""
-"Modèle"
+msgstr "Modèle"
msgid "Please create a template first."
-msgstr ""
-"Commencez par créer un modèle."
+msgstr "Commencez par créer un modèle."
msgid "Create a Template"
-msgstr ""
-"Créer un modèle"
+msgstr "Créer un modèle"
msgid "Please choose a template."
-msgstr ""
-"Sélectionnez un modèle."
+msgstr "Sélectionnez un modèle."
msgid "OS"
-msgstr ""
-"SE"
+msgstr "SE"
msgid "OS Version"
-msgstr ""
-"Version SE"
+msgstr "Version SE"
msgid "CPUS"
-msgstr ""
-"Unités centrales"
+msgstr "Unités centrales"
msgid "Memory"
-msgstr ""
-"Mémoire"
+msgstr "Mémoire"
msgid "Create"
-msgstr ""
-"Créer"
+msgstr "Créer"
msgid "Creating..."
-msgstr ""
-"Création..."
+msgstr "Création..."
msgid "Edit Guest"
-msgstr ""
-"Editer l'invité"
+msgstr "Editer l'invité"
msgid "General"
-msgstr ""
-"Général"
+msgstr "Général"
msgid "Storage"
-msgstr ""
-"Stockage"
+msgstr "Stockage"
msgid "Interface"
-msgstr ""
-"Interface"
+msgstr "Interface"
msgid "Permission"
-msgstr ""
-"Droits"
+msgstr "Droits"
msgid "Host PCI Device"
-msgstr ""
-"Unité PCI hôte"
+msgstr "Unité PCI hôte"
msgid "Snapshot"
-msgstr ""
-"Image instantanée"
+msgstr "Image instantanée"
msgid "Name"
-msgstr ""
-"Nom"
+msgstr "Nom"
msgid "CPUs"
-msgstr ""
-"UC"
+msgstr "UC"
msgid "Memory (MB)"
-msgstr ""
-"Mémoire (Mo)"
+msgstr "Mémoire (Mo)"
msgid "Icon"
-msgstr ""
-"Icône"
+msgstr "Icône"
msgid "Device"
-msgstr ""
-"Unité"
+msgstr "Unité"
msgid "Path"
-msgstr ""
-"Chemin"
+msgstr "Chemin"
msgid "Network"
-msgstr ""
-"Réseau"
+msgstr "Réseau"
msgid "Type"
-msgstr ""
-"Type"
+msgstr "Type"
msgid "MAC Address"
-msgstr ""
-"Adresse MAC"
+msgstr "Adresse MAC"
msgid "Available system users and groups"
-msgstr ""
-"Groupes et utilisateurs système disponibles"
+msgstr "Groupes et utilisateurs système disponibles"
msgid "Selected system users and groups"
-msgstr ""
-"Groupes et utilisateurs système sélectionnés"
+msgstr "Groupes et utilisateurs système sélectionnés"
msgid "User"
-msgstr ""
-"Utilisateur"
+msgstr "Utilisateur"
msgid "All"
-msgstr ""
-"Tout"
+msgstr "Tout"
msgid "To Add"
-msgstr ""
-"A ajouter"
+msgstr "A ajouter"
msgid "Added"
-msgstr ""
-"Ajouté"
+msgstr "Ajouté"
msgid "filter"
-msgstr ""
-"filtre"
+msgstr "filtre"
msgid "Product"
-msgstr ""
-"Produit"
+msgstr "Produit"
msgid "Vendor"
-msgstr ""
-"Fournisseur"
+msgstr "Fournisseur"
msgid "Created"
-msgstr ""
-"Créé"
+msgstr "Créé"
msgid "Save"
-msgstr ""
-"Sauvegarder"
+msgstr "Sauvegarder"
msgid "Replace"
-msgstr ""
-"Remplacer"
+msgstr "Remplacer"
msgid "Detach"
-msgstr ""
-"Détacher"
+msgstr "Détacher"
msgid "Cancel"
-msgstr ""
-"Annuler"
+msgstr "Annuler"
msgid "revert"
-msgstr ""
-"rétablir"
+msgstr "rétablir"
msgid "Add a Storage Device to VM"
-msgstr ""
-"Ajouter une unité de stockage à la machine virtuelle"
+msgstr "Ajouter une unité de stockage à la machine virtuelle"
msgid "Device Type"
-msgstr ""
-"Type d'unité"
+msgstr "Type d'unité"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
msgstr ""
-"Type d'unité. Actuellement, \"cdrom\" et \"disk\" seulement sont pris en charge."
+"Type d'unité. Actuellement, \"cdrom\" et \"disk\" seulement sont pris en "
+"charge."
msgid "Storage Pool"
-msgstr ""
-"Pool de stockage"
+msgstr "Pool de stockage"
msgid "Storage pool which volume located in"
-msgstr ""
-"Pool de stockage dans lequel le volume est situé"
+msgstr "Pool de stockage dans lequel le volume est situé"
msgid "Storage Volume"
-msgstr ""
-"Volume de stockage"
+msgstr "Volume de stockage"
msgid "Storage volume to be attached"
-msgstr ""
-"Volume de stockage à attacher"
+msgstr "Volume de stockage à attacher"
msgid "File Path"
-msgstr ""
-"Chemin d'accès au fichier"
+msgstr "Chemin d'accès au fichier"
msgid "The ISO file path in the server for CDROM."
-msgstr ""
-"Chemin d'accès au fichier ISO sur le serveur pour le CD-ROM."
+msgstr "Chemin d'accès au fichier ISO sur le serveur pour le CD-ROM."
msgid "Attach"
-msgstr ""
-"Attacher"
+msgstr "Attacher"
msgid "Start"
-msgstr ""
-"Démarrer"
+msgstr "Démarrer"
msgid "Reset"
-msgstr ""
-"Réinitialiser"
+msgstr "Réinitialiser"
msgid "Pause"
-msgstr ""
-"Pause"
+msgstr "Pause"
msgid "Resume"
-msgstr ""
-"Reprendre"
+msgstr "Reprendre"
msgid "Power Off"
-msgstr ""
-"Mettre hors tension"
+msgstr "Mettre hors tension"
msgid "Actions"
-msgstr ""
-"Actions"
+msgstr "Actions"
msgid "Connect"
-msgstr ""
-"Se connecter"
+msgstr "Se connecter"
msgid "Clone"
-msgstr ""
-"Cloner"
+msgstr "Cloner"
msgid "Edit"
-msgstr ""
-"Editer"
+msgstr "Editer"
msgid "Shut Down"
-msgstr ""
-"Arrêter"
+msgstr "Arrêter"
msgid "Delete"
-msgstr ""
-"Supprimer"
+msgstr "Supprimer"
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
-"Le nom d'utilisateur ou le mot de passe entré est incorrect. Veuillez recommencer."
+"Le nom d'utilisateur ou le mot de passe entré est incorrect. Veuillez "
+"recommencer."
msgid "This field is required."
-msgstr ""
-"Cette zone est obligatoire."
+msgstr "Cette zone est obligatoire."
msgid "Log in"
-msgstr ""
-"Connexion"
+msgstr "Connexion"
msgid "Logging in..."
-msgstr ""
-"Connexion en cours..."
+msgstr "Connexion en cours..."
msgid "Host"
-msgstr ""
-"Hôte"
+msgstr "Hôte"
msgid "Guests"
-msgstr ""
-"Invités"
+msgstr "Invités"
msgid "Templates"
-msgstr ""
-"Modèles"
+msgstr "Modèles"
msgid "Failed to get application configuration"
-msgstr ""
-"Echec d'obtention de la configuration d'application"
+msgstr "Echec d'obtention de la configuration d'application"
msgid "This is not a valid Linux path"
-msgstr ""
-"Ce chemin Linux n'est pas valide"
+msgstr "Ce chemin Linux n'est pas valide"
msgid "This is not a valid URL."
-msgstr ""
-"Cette URL n'est pas valide."
+msgstr "Cette URL n'est pas valide."
msgid "No such data available."
-msgstr ""
-"Aucune donnée de ce type disponible."
+msgstr "Aucune donnée de ce type disponible."
msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"Impossible de contacter le système hôte. Vérifiez que celui-ci est démarré et "
-"que vous disposez d'une connectivité au système hôte. Réponse à la demande HTTP %1. "
+"Impossible de contacter le système hôte. Vérifiez que celui-ci est démarré "
+"et que vous disposez d'une connectivité au système hôte. Réponse à la "
+"demande HTTP %1. "
msgid "Unable to read file."
-msgstr ""
-"Impossible de lire le fichier."
+msgstr "Impossible de lire le fichier."
msgid "Error while uploading file."
-msgstr ""
-"Erreur lors du téléchargement du fichier."
+msgstr "Erreur lors du téléchargement du fichier."
msgid "Delete Confirmation"
-msgstr ""
-"Confirmation de suppression"
+msgstr "Confirmation de suppression"
msgid "OK"
-msgstr ""
-"OK"
+msgstr "OK"
msgid "Confirm"
-msgstr ""
-"Confirmer"
+msgstr "Confirmer"
msgid "Warning"
-msgstr ""
-"Avertissement"
+msgstr "Avertissement"
msgid "Cloning..."
-msgstr ""
-"Clonage en cours..."
+msgstr "Clonage en cours..."
msgid "Loading..."
-msgstr ""
-"Chargement en cours..."
+msgstr "Chargement en cours..."
msgid "An error occurred while retrieving system information."
msgstr ""
"Une erreur s'est produite lors de l'extraction des informations système."
msgid "Retry"
-msgstr ""
-"Nouvelle tentative"
+msgstr "Nouvelle tentative"
msgid "Detailed message:"
-msgstr ""
-"Message détaillé :"
+msgstr "Message détaillé :"
msgid "No ISO found"
-msgstr ""
-"ISO introuvable"
+msgstr "ISO introuvable"
msgid "This is not a valid ISO file."
-msgstr ""
-"Ceci n'est pas un fichier ISO valide."
+msgstr "Ceci n'est pas un fichier ISO valide."
msgid "This may take a long time. Do you want to continue?"
-msgstr ""
-"Cette opération peut être assez longue. Voulez-vous continuer ?"
+msgstr "Cette opération peut être assez longue. Voulez-vous continuer ?"
msgid "This will permanently delete the template. Would you like to continue?"
-msgstr ""
-"Le modèle va être supprimé définitivement. Voulez-vous continuer ?"
+msgstr "Le modèle va être supprimé définitivement. Voulez-vous continuer ?"
msgid "Unable to shut down system as there are some virtual machines running!"
msgstr ""
-"Impossible d'arrêter le système car certaines machines virtuelles sont en cours d'exécution !"
+"Impossible d'arrêter le système car certaines machines virtuelles sont en "
+"cours d'exécution !"
msgid "Max:"
-msgstr ""
-"Maximum :"
+msgstr "Maximum :"
msgid "Utilization"
-msgstr ""
-"Utilisation"
+msgstr "Utilisation"
msgid "Available"
-msgstr ""
-"Disponible"
+msgstr "Disponible"
msgid "Read Rate"
-msgstr ""
-"Vitesse de lecture"
+msgstr "Vitesse de lecture"
msgid "Write Rate"
-msgstr ""
-"Vitesse d'écriture"
+msgstr "Vitesse d'écriture"
msgid "Received"
-msgstr ""
-"Reçu"
+msgstr "Reçu"
msgid "Sent"
-msgstr ""
-"Envoyé"
+msgstr "Envoyé"
msgid ""
"Shutting down or restarting host will cause unsaved work lost. Continue to "
"shut down/restarting?"
msgstr ""
-"L'arrêt ou le redémarrage de l'hôte va entraîner la perte du travail non sauvegardé. Poursuivre "
-"l'arrêt/le redémarrage ?"
+"L'arrêt ou le redémarrage de l'hôte va entraîner la perte du travail non "
+"sauvegardé. Poursuivre l'arrêt/le redémarrage ?"
msgid ""
"Repository will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"Le référentiel va être retiré définitivement et ne pourra pas être récupéré. Voulez-vous "
-"continuer ?"
+"Le référentiel va être retiré définitivement et ne pourra pas être récupéré. "
+"Voulez-vous continuer ?"
msgid "Repositories"
-msgstr ""
-"Référentiels"
+msgstr "Référentiels"
msgid "ID"
-msgstr ""
-"ID"
+msgstr "ID"
msgid "Base URL"
-msgstr ""
-"URL de base"
+msgstr "URL de base"
msgid "Is Mirror"
-msgstr ""
-"Est un miroir"
+msgstr "Est un miroir"
msgid "URL Args"
-msgstr ""
-"Arguments d'URL"
+msgstr "Arguments d'URL"
msgid "Enabled"
-msgstr ""
-"Activé"
+msgstr "Activé"
msgid "GPG Check"
-msgstr ""
-"Contrôle GPG"
+msgstr "Contrôle GPG"
msgid "GPG Key"
-msgstr ""
-"Clé GPG"
+msgstr "Clé GPG"
msgid "Add"
-msgstr ""
-"Ajouter"
+msgstr "Ajouter"
msgid "Remove"
-msgstr ""
-"Retirer"
+msgstr "Retirer"
msgid "Enable"
-msgstr ""
-"Activer"
+msgstr "Activer"
msgid "Disable"
-msgstr ""
-"Désactiver"
+msgstr "Désactiver"
msgid "Software Updates"
-msgstr ""
-"Mises à jour logicielles"
+msgstr "Mises à jour logicielles"
msgid "Package Name"
-msgstr ""
-"Nom du module"
+msgstr "Nom du module"
msgid "Version"
-msgstr ""
-"Version"
+msgstr "Version"
msgid "Architecture"
-msgstr ""
-"Architecture"
+msgstr "Architecture"
msgid "Repository"
-msgstr ""
-"Référentiel"
+msgstr "Référentiel"
msgid "Update All"
-msgstr ""
-"Tout mettre à jour"
+msgstr "Tout mettre à jour"
msgid "Updating..."
-msgstr ""
-"Mise à jour en cours..."
+msgstr "Mise à jour en cours..."
msgid "Failed to retrieve packages update information."
-msgstr ""
-"Echec de l'extraction des informations de mise à jour des modules."
+msgstr "Echec de l'extraction des informations de mise à jour des modules."
msgid "Failed to update package(s)."
-msgstr ""
-"Echec de mise à jour du ou des modules."
+msgstr "Echec de mise à jour du ou des modules."
msgid ""
"Debug report will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"Le rapport de débogage va être retiré définitivement et ne pourra pas être récupéré. Voulez-vous "
-"continuer ?"
+"Le rapport de débogage va être retiré définitivement et ne pourra pas être "
+"récupéré. Voulez-vous continuer ?"
msgid "Debug Reports"
-msgstr ""
-"Rapports de débogage"
+msgstr "Rapports de débogage"
msgid "Generated Time"
-msgstr ""
-"Heure génération"
+msgstr "Heure génération"
msgid "Generate"
-msgstr ""
-"Générer"
+msgstr "Générer"
msgid "Generating..."
-msgstr ""
-"Génération en cours..."
+msgstr "Génération en cours..."
msgid "Rename"
-msgstr ""
-"Renommer"
+msgstr "Renommer"
msgid "Download"
-msgstr ""
-"Télécharger"
+msgstr "Télécharger"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
"hyphen ('-')."
msgstr ""
-"Le nom du rapport doit comporter uniquement des lettres, chiffres, trait de soulignement ('_') et/ou "
-"tiret ('-')."
+"Le nom du rapport doit comporter uniquement des lettres, chiffres, trait de "
+"soulignement ('_') et/ou tiret ('-')."
msgid "Pending..."
-msgstr ""
-"En attente..."
+msgstr "En attente..."
msgid "Report name is the same as the original one."
-msgstr ""
-"Le nom du rapport est identique au nom d'origine."
+msgstr "Le nom du rapport est identique au nom d'origine."
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
"cannot be undone. Would you like to continue?"
msgstr ""
-"Cette opération va supprimer la machine virtuelle et ses disques virtuels. L'opération "
-"ne peut pas être annulée. Voulez-vous continuer ?"
+"Cette opération va supprimer la machine virtuelle et ses disques virtuels. "
+"L'opération ne peut pas être annulée. Voulez-vous continuer ?"
msgid "Power off Confirmation"
-msgstr ""
-"Confirmation de mise hors tension"
+msgstr "Confirmation de mise hors tension"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
"cache in the guest. Would you like to continue?"
msgstr ""
-"Cette action peut produire des résultats indésirables, par exemple, "
-"un cache de disque non vidé sur le système invité. Voulez-vous continuer ?"
+"Cette action peut produire des résultats indésirables, par exemple, un cache "
+"de disque non vidé sur le système invité. Voulez-vous continuer ?"
msgid "Reset Confirmation"
-msgstr ""
-"Confirmation de réinitialisation"
+msgstr "Confirmation de réinitialisation"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
"Would you like to continue?"
msgstr ""
-"Risque de perte de données suite à une réinitialisation sans arrêt du système d'exploitation invité. "
-"Voulez-vous continuer ?"
+"Risque de perte de données suite à une réinitialisation sans arrêt du "
+"système d'exploitation invité. Voulez-vous continuer ?"
msgid "Shut Down Confirmation"
-msgstr ""
-"Confirmation d'arrêt"
+msgstr "Confirmation d'arrêt"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
msgstr ""
-"Notez que le système d'exploitation invité peut ignorer cette demande. Voulez-vous continuer ?"
+"Notez que le système d'exploitation invité peut ignorer cette demande. "
+"Voulez-vous continuer ?"
msgid "Virtual Machine delete Confirmation"
-msgstr ""
-"Confirmation de la suppression de la machine virtuelle"
+msgstr "Confirmation de la suppression de la machine virtuelle"
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
msgstr ""
-"Cette machine virtuelle n'est pas permanente. Elle sera supprimée lors de la mise hors tension. Continuer ?"
+"Cette machine virtuelle n'est pas permanente. Elle sera supprimée lors de la "
+"mise hors tension. Continuer ?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
"default storage pool. The same will happen when the target pool does not "
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
-"Lorsque l'invité cible comporte des volumes SCSI ou iSCSI, ces derniers sont clonés dans le "
-"pool de stockage par défaut. Cela se produit également lorsque le pool cible ne comporte "
-"pas suffisamment d'espace pour cloner les volumes. Voulez-vous continuer ?"
+"Lorsque l'invité cible comporte des volumes SCSI ou iSCSI, ces derniers sont "
+"clonés dans le pool de stockage par défaut. Cela se produit également "
+"lorsque le pool cible ne comporte pas suffisamment d'espace pour cloner les "
+"volumes. Voulez-vous continuer ?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
msgstr ""
-"Ce CD-ROM va être détaché définitivement et ne pourra pas être attaché à nouveau. Continuer "
-"le détachement ?"
+"Ce CD-ROM va être détaché définitivement et ne pourra pas être attaché à "
+"nouveau. Continuer le détachement ?"
msgid "Attaching..."
-msgstr ""
-"Attachement en cours..."
+msgstr "Attachement en cours..."
msgid "Replacing..."
-msgstr ""
-"Remplacement en cours..."
+msgstr "Remplacement en cours..."
msgid "Successfully attached!"
-msgstr ""
-"L'attachement a abouti."
+msgstr "L'attachement a abouti."
msgid "Successfully replaced!"
-msgstr ""
-"Le remplacement a abouti."
+msgstr "Le remplacement a abouti."
msgid "Successfully detached!"
-msgstr ""
-"Le détachement a abouti."
+msgstr "Le détachement a abouti."
msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
msgstr ""
-"Ce disque va être détaché définitivement et ne pourra pas être attaché à nouveau. Continuer "
-"le détachement ?"
+"Ce disque va être détaché définitivement et ne pourra pas être attaché à "
+"nouveau. Continuer le détachement ?"
msgid "interface:"
-msgstr ""
-"interface :"
+msgstr "interface :"
msgid "address:"
-msgstr ""
-"adresse :"
+msgstr "adresse :"
msgid "link_type:"
-msgstr ""
-"type_lien :"
+msgstr "type_lien :"
msgid "block:"
-msgstr ""
-"bloc :"
+msgstr "bloc :"
msgid "drive_type:"
-msgstr ""
-"type_lecteur :"
+msgstr "type_lecteur :"
msgid "model:"
-msgstr ""
-"modèle :"
+msgstr "modèle :"
msgid "Affected devices:"
-msgstr ""
-"Unités concernées :"
+msgstr "Unités concernées :"
msgid "The VLAN id must be between 1 and 4094."
-msgstr ""
-"L'ID réseau local virtuel doit être compris entre 1 et 4094."
+msgstr "L'ID réseau local virtuel doit être compris entre 1 et 4094."
msgid "unavailable"
-msgstr ""
-"non disponible"
+msgstr "non disponible"
msgid ""
"This action will interrupt network connectivity for any virtual machine that "
"depend on this network."
msgstr ""
-"Cette action va interrompre la connectivité réseau pour toute machine virtuelle "
-"dépendant de ce réseau."
+"Cette action va interrompre la connectivité réseau pour toute machine "
+"virtuelle dépendant de ce réseau."
msgid "Create a network"
-msgstr ""
-"Créer un réseau"
+msgstr "Créer un réseau"
msgid ""
"This network is not persistent. Instead of stop, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Il ne s'agit pas d'un réseau permanent. Au lieu de l'arrêter, cette action va "
-"le supprimer de manière permanente. Voulez-vous continuer ?"
+"Il ne s'agit pas d'un réseau permanent. Au lieu de l'arrêter, cette action "
+"va le supprimer de manière permanente. Voulez-vous continuer ?"
msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
-"Il se peut que l'étiquette Réseau local virtuel local routé ne fonctionne pas correctement lorsque NetworkManager est activé. Vous "
-"devez envisager de désactiver ce dernier."
+"Il se peut que l'étiquette Réseau local virtuel local routé ne fonctionne "
+"pas correctement lorsque NetworkManager est activé. Vous devez envisager de "
+"désactiver ce dernier."
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
@@ -2222,266 +2000,214 @@ msgstr ""
"Le pool de stockage va être supprimé définitivement. Voulez-vous continuer ?"
msgid "This storage pool is empty."
-msgstr ""
-"Ce pool de stockage est vide."
+msgstr "Ce pool de stockage est vide."
msgid ""
"It will format your disk and you will loose any data in there, are you sure "
"to continue? "
msgstr ""
-"Le disque va être formaté et vous perdrez toutes les données qu'il contient. Voulez-vous vraiment "
-"continuer ? "
+"Le disque va être formaté et vous perdrez toutes les données qu'il contient. "
+"Voulez-vous vraiment continuer ? "
msgid "SCSI Fibre Channel"
-msgstr ""
-"Fibre Channel SCSI"
+msgstr "Fibre Channel SCSI"
msgid "No SCSI adapters found."
-msgstr ""
-"Aucun adaptateur SCSI trouvé."
+msgstr "Aucun adaptateur SCSI trouvé."
msgid "Loading iSCSI targets..."
-msgstr ""
-"Chargement des cibles iSCSI..."
+msgstr "Chargement des cibles iSCSI..."
msgid "No iSCSI found. Please input one."
-msgstr ""
-"iSCSI introuvable. Spécifiez-le."
+msgstr "iSCSI introuvable. Spécifiez-le."
msgid "Failed to load iSCSI targets."
-msgstr ""
-"Echec du chargement des cibles iSCSI."
+msgstr "Echec du chargement des cibles iSCSI."
msgid "The storage pool name can not be blank."
-msgstr ""
-"Le nom du pool de stockage ne peut pas être vide."
+msgstr "Le nom du pool de stockage ne peut pas être vide."
msgid "The storage pool path can not be blank."
-msgstr ""
-"Le chemin du pool de stockage ne peut pas être vide."
+msgstr "Le chemin du pool de stockage ne peut pas être vide."
msgid "NFS server mount path can not be blank."
-msgstr ""
-"Le chemin de montage du serveur NFS ne peut pas être vide."
+msgstr "Le chemin de montage du serveur NFS ne peut pas être vide."
msgid "Invalid NFS mount path."
-msgstr ""
-"Chemin de montage NFS non valide."
+msgstr "Chemin de montage NFS non valide."
msgid "No logical device selected."
-msgstr ""
-"Aucune unité logique sélectionnée."
+msgstr "Aucune unité logique sélectionnée."
msgid "The iSCSI target can not be blank."
-msgstr ""
-"La cible iSCSI ne peut pas être vide."
+msgstr "La cible iSCSI ne peut pas être vide."
msgid "Server name can not be blank."
-msgstr ""
-"Le nom du serveur ne peut pas être vide."
+msgstr "Le nom du serveur ne peut pas être vide."
msgid "This is not a valid Server Name or IP. Please, modify it."
msgstr ""
-"Il ne s'agit pas d'un nom de serveur ou d'une adresse IP valide. Modifiez cet élément."
+"Il ne s'agit pas d'un nom de serveur ou d'une adresse IP valide. Modifiez "
+"cet élément."
msgid "Looking for available partitions ..."
-msgstr ""
-"Recherche des partitions disponibles..."
+msgstr "Recherche des partitions disponibles..."
msgid "No available partitions found."
-msgstr ""
-"Aucune partition disponible trouvée."
+msgstr "Aucune partition disponible trouvée."
msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Il ne s'agit pas d'un pool de stockage permanent. Au lieu de le désactiver, cette action va "
-"le supprimer de manière permanente. Voulez-vous continuer ?"
+"Il ne s'agit pas d'un pool de stockage permanent. Au lieu de le désactiver, "
+"cette action va le supprimer de manière permanente. Voulez-vous continuer ?"
msgid "Unable to retrieve partitions information."
-msgstr ""
-"Impossible d'extraire les informations relatives aux partitions. "
+msgstr "Impossible d'extraire les informations relatives aux partitions. "
msgid "In progress..."
-msgstr ""
-"En cours..."
+msgstr "En cours..."
msgid "Failed!"
-msgstr ""
-"Echec !"
+msgstr "Echec !"
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
msgstr ""
-"Le chemin de CD-ROM doit être un chemin local/distant et ne peut pas être à blanc."
+"Le chemin de CD-ROM doit être un chemin local/distant et ne peut pas être à "
+"blanc."
msgid "Disk pool or volume cannot be blank."
-msgstr ""
-"Le pool de stockage sur disque ou le volume ne peut pas être à blanc."
+msgstr "Le pool de stockage sur disque ou le volume ne peut pas être à blanc."
msgid "Peers"
-msgstr ""
-"Homologues"
+msgstr "Homologues"
msgid "Searching"
-msgstr ""
-"Recherche"
+msgstr "Recherche"
msgid "No peers found."
-msgstr ""
-"Homologue introuvable."
+msgstr "Homologue introuvable."
msgid "Help"
-msgstr ""
-"Aide"
+msgstr "Aide"
msgid "About"
-msgstr ""
-"A propos de"
+msgstr "A propos de"
msgid "Log out"
-msgstr ""
-"Déconnexion"
+msgstr "Déconnexion"
msgid "Version:"
-msgstr ""
-"Version :"
+msgstr "Version :"
msgid "Session timeout, please re-login."
-msgstr ""
-"Délai d'attente de session dépassé, veuillez vous reconnecter."
+msgstr "Délai d'attente de session dépassé, veuillez vous reconnecter."
msgid "User Name"
-msgstr ""
-"Nom d'utilisateur"
+msgstr "Nom d'utilisateur"
msgid "Password"
-msgstr ""
-"Mot de passe"
+msgstr "Mot de passe"
msgid "Generate a New Debug Report"
-msgstr ""
-"Générer un nouveau rapport de débogage"
+msgstr "Générer un nouveau rapport de débogage"
msgid "Report Name"
-msgstr ""
-"Nom du rapport"
+msgstr "Nom du rapport"
msgid ""
"The name used to identify the report. If omitted, a name will be chosen "
"based on current time. Name can contain: letters, digits, underscore (\"_\") "
"and hyphen (\"-\")."
msgstr ""
-"Nom utilisé pour identifier le rapport. S'il est omis, un nom sera choisi "
-"en fonction de l'heure en cours. Le nom peut contenir : des lettres, chiffres, trait de soulignement (\"_\") "
-"et tiret (\"-\")."
+"Nom utilisé pour identifier le rapport. S'il est omis, un nom sera choisi en "
+"fonction de l'heure en cours. Le nom peut contenir : des lettres, chiffres, "
+"trait de soulignement (\"_\") et tiret (\"-\")."
msgid "Rename a Debug Report"
-msgstr ""
-"Renommer un rapport de débogage"
+msgstr "Renommer un rapport de débogage"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
"hyphen (\"-\")."
msgstr ""
-"Nom utilisé pour identifier le rapport. Il peut contenir : des lettres, chiffres et "
-"tiret (\"-\")."
+"Nom utilisé pour identifier le rapport. Il peut contenir : des lettres, "
+"chiffres et tiret (\"-\")."
msgid "Submit"
-msgstr ""
-"Soumettre"
+msgstr "Soumettre"
msgid "Add a Repository"
-msgstr ""
-"Ajouter un référentiel"
+msgstr "Ajouter un référentiel"
msgid "Identifier"
-msgstr ""
-"Identificateur"
+msgstr "Identificateur"
msgid "Single word, unique identifier for the repository."
-msgstr ""
-"Mot unique, identificateur unique pour le référentiel."
+msgstr "Mot unique, identificateur unique pour le référentiel."
msgid "Textual name for the repository."
-msgstr ""
-"Nom textuel pour le référentiel."
+msgstr "Nom textuel pour le référentiel."
msgid "URL"
-msgstr ""
-"URL"
+msgstr "URL"
msgid "Required Field"
-msgstr ""
-"Zone obligatoire"
+msgstr "Zone obligatoire"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
msgstr ""
-"Adresse URL pour le référentiel. Les protocoles pris en charge sont http, ftp, et file."
+"Adresse URL pour le référentiel. Les protocoles pris en charge sont http, "
+"ftp, et file."
msgid "Repository is a mirror"
-msgstr ""
-"Le référentiel est un miroir"
+msgstr "Le référentiel est un miroir"
msgid "Distribution"
-msgstr ""
-"Distribution"
+msgstr "Distribution"
msgid "Distribution of the DEB repository."
-msgstr ""
-"Distribution du référentiel DEB."
+msgstr "Distribution du référentiel DEB."
msgid "Components"
-msgstr ""
-"Composants"
+msgstr "Composants"
msgid "List of components in DEB repository."
-msgstr ""
-"Liste des composants dans le référentiel DEB."
+msgstr "Liste des composants dans le référentiel DEB."
msgid "Edit Repository"
-msgstr ""
-"Editer le référentiel"
+msgstr "Editer le référentiel"
msgid "Mirror List URL"
-msgstr ""
-"URL liste miroir"
+msgstr "URL liste miroir"
msgid "Yes"
-msgstr ""
-"Oui"
+msgstr "Oui"
msgid "No"
-msgstr ""
-"Non"
+msgstr "Non"
msgid "Add a Volume to Storage Pool"
-msgstr ""
-"Ajouter un volume au pool de stockage"
+msgstr "Ajouter un volume au pool de stockage"
msgid "Fetch from remote URL"
-msgstr ""
-"Extraire de l'URL distante"
+msgstr "Extraire de l'URL distante"
msgid "Enter the remote URL here."
-msgstr ""
-"Indiquez ici l'URL distante."
+msgstr "Indiquez ici l'URL distante."
msgid "Upload a file"
-msgstr ""
-"Télécharger un fichier"
+msgstr "Télécharger un fichier"
msgid "Choose the file you want to upload."
-msgstr ""
-"Sélectionnez le fichier à télécharger."
+msgstr "Sélectionnez le fichier à télécharger."
msgid "Define a New Storage Pool"
-msgstr ""
-"Définir un nouveau pool de stockage"
+msgstr "Définir un nouveau pool de stockage"
msgid "Storage Pool Name"
-msgstr ""
-"Nom du pool de stockage"
+msgstr "Nom du pool de stockage"
msgid ""
"The name used to identify the storage pools, and it should not be empty."
@@ -2489,353 +2215,268 @@ msgstr ""
"Nom utilisé pour identifier les pools de stockage. Ne doit pas être vide."
msgid "Storage Pool Type"
-msgstr ""
-"Type de pool de stockage"
+msgstr "Type de pool de stockage"
msgid "Storage Path"
-msgstr ""
-"Chemin de stockage"
+msgstr "Chemin de stockage"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
msgstr ""
-"Chemin du pool de stockage. Chaque pool de stockage doit avoir un chemin unique."
+"Chemin du pool de stockage. Chaque pool de stockage doit avoir un chemin "
+"unique."
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
"your system."
msgstr ""
-"Kimchi va tenter de créer le répertoire s'il n'en existe pas déjà un "
-"sur votre système."
+"Kimchi va tenter de créer le répertoire s'il n'en existe pas déjà un sur "
+"votre système."
msgid "NFS Server IP"
-msgstr ""
-"IP du serveur NFS"
+msgstr "IP du serveur NFS"
msgid "NFS server IP or hostname. It can be input or chosen from history."
msgstr ""
-"IP ou nom d'hôte du serveur NFS. Peut être entré ou sélectionné depuis l'historique."
+"IP ou nom d'hôte du serveur NFS. Peut être entré ou sélectionné depuis "
+"l'historique."
msgid "NFS Path"
-msgstr ""
-"Chemin NFS"
+msgstr "Chemin NFS"
msgid "The NFS exported path on NFS server."
-msgstr ""
-"Chemin NFS exporté ou serveur NFS."
+msgstr "Chemin NFS exporté ou serveur NFS."
msgid "Device path"
-msgstr ""
-"Chemin d'unité"
+msgstr "Chemin d'unité"
msgid "iSCSI Server"
-msgstr ""
-"Serveur iSCSI"
+msgstr "Serveur iSCSI"
msgid "iSCSI server IP or hostname. It should not be empty."
-msgstr ""
-"IP ou nom d'hôte du serveur iSCSI. Ne doit pas être vide."
+msgstr "IP ou nom d'hôte du serveur iSCSI. Ne doit pas être vide."
msgid "Server"
-msgstr ""
-"Serveur"
+msgstr "Serveur"
msgid "Port"
-msgstr ""
-"Port"
+msgstr "Port"
msgid "Target"
-msgstr ""
-"Cible"
+msgstr "Cible"
msgid "The iSCSI target on iSCSI server"
-msgstr ""
-"Cible iSCSI sur le serveur iSCSI"
+msgstr "Cible iSCSI sur le serveur iSCSI"
msgid "Add iSCSI Authentication"
-msgstr ""
-"Ajouter l'authentification iSCSI"
+msgstr "Ajouter l'authentification iSCSI"
msgid "iSCSI Authentication"
-msgstr ""
-"Authentification iSCSI"
+msgstr "Authentification iSCSI"
msgid "SCSI Adapter"
-msgstr ""
-"Adaptateur SCSI"
+msgstr "Adaptateur SCSI"
msgid "Please, wait..."
-msgstr ""
-"Veuillez patienter..."
+msgstr "Veuillez patienter..."
msgid "Add Template"
-msgstr ""
-"Ajouter un modèle"
+msgstr "Ajouter un modèle"
msgid "Where is the source media for this template? "
-msgstr ""
-"Où se trouve le support source pour ce modèle ? "
+msgstr "Où se trouve le support source pour ce modèle ? "
msgid "Local ISO Image"
-msgstr ""
-"Image ISO locale"
+msgstr "Image ISO locale"
msgid "Local Image File"
-msgstr ""
-"Fichier image local"
+msgstr "Fichier image local"
msgid "Remote ISO Image"
-msgstr ""
-"Image ISO distante"
+msgstr "Image ISO distante"
msgid "Search ISOs"
-msgstr ""
-"Recherche d'ISO"
+msgstr "Recherche d'ISO"
msgid "The following ISOs are available:"
-msgstr ""
-"Les images ISO suivantes sont disponibles :"
+msgstr "Les images ISO suivantes sont disponibles :"
msgid "OS: "
-msgstr ""
-"SE : "
+msgstr "SE : "
msgid "Version: "
-msgstr ""
-"Version : "
+msgstr "Version : "
msgid "Size: "
-msgstr ""
-"Taille : "
+msgstr "Taille : "
msgid "Search more ISOs"
-msgstr ""
-"Rechercher d'autres images ISO"
+msgstr "Rechercher d'autres images ISO"
msgid "Create Templates from Selected ISO"
-msgstr ""
-"Créer des modèles à partir de l'image ISO sélectionnée"
+msgstr "Créer des modèles à partir de l'image ISO sélectionnée"
msgid "I want to use a specific ISO file"
-msgstr ""
-"Je souhaite utiliser un fichier ISO spécifique"
+msgstr "Je souhaite utiliser un fichier ISO spécifique"
msgid "Loading default remote ISOs ..."
-msgstr ""
-"Chargement d'ISO distants par défaut..."
+msgstr "Chargement d'ISO distants par défaut..."
msgid "Arch: "
-msgstr ""
-"Arch : "
+msgstr "Arch : "
msgid "I want to use a custom URL"
-msgstr ""
-"Je souhaite utiliser une URL personnalisée"
+msgstr "Je souhaite utiliser une URL personnalisée"
msgid "Edit Template"
-msgstr ""
-"Editer le modèle"
+msgstr "Editer le modèle"
msgid "Processor"
-msgstr ""
-"Processeur"
+msgstr "Processeur"
msgid "CDROM"
-msgstr ""
-"CD-ROM"
+msgstr "CD-ROM"
msgid "Image File"
-msgstr ""
-"Fichier image"
+msgstr "Fichier image"
msgid "Graphics"
-msgstr ""
-"Graphiques"
+msgstr "Graphiques"
msgid "Disk(GB)"
-msgstr ""
-"Disque (Go)"
+msgstr "Disque (Go)"
msgid "Disk Format"
-msgstr ""
-"Format de disque"
+msgstr "Format de disque"
msgid "CPU Number"
-msgstr ""
-"Nombre d'UC"
+msgstr "Nombre d'UC"
msgid "Manually set CPU topology"
-msgstr ""
-"Définir manuellement la topologie d'UC"
+msgstr "Définir manuellement la topologie d'UC"
msgid "Cores"
-msgstr ""
-"Coeurs"
+msgstr "Coeurs"
msgid "Threads"
-msgstr ""
-"Unités d'exécution"
+msgstr "Unités d'exécution"
msgid "CPU"
-msgstr ""
-"UC"
+msgstr "UC"
msgid "Disk I/O"
-msgstr ""
-"E-S disque"
+msgstr "E-S disque"
msgid "Network I/O"
-msgstr ""
-"E-S réseau"
+msgstr "E-S réseau"
msgid "Livetile"
-msgstr ""
-"Livetile"
+msgstr "Livetile"
msgid "No guests found."
-msgstr ""
-"Aucun invité trouvé."
+msgstr "Aucun invité trouvé."
msgid "Shut down"
-msgstr ""
-"Arrêter"
+msgstr "Arrêter"
msgid "Restart"
-msgstr ""
-"Redémarrer"
+msgstr "Redémarrer"
msgid "Basic Information"
-msgstr ""
-"Informations de base"
+msgstr "Informations de base"
msgid "OS Distro"
-msgstr ""
-"SE distribution"
+msgstr "SE distribution"
msgid "OS Code Name"
-msgstr ""
-"Nom de code SE"
+msgstr "Nom de code SE"
msgid "CPU(s)"
-msgstr ""
-"UC"
+msgstr "UC"
msgid "System Statistics"
-msgstr ""
-"Statistiques système"
+msgstr "Statistiques système"
msgid "Update Progress"
-msgstr ""
-"Progression de la mise à jour"
+msgstr "Progression de la mise à jour"
msgid "Network Name"
-msgstr ""
-"Nom du réseau"
+msgstr "Nom du réseau"
msgid "State"
-msgstr ""
-"Etat"
+msgstr "Etat"
msgid "Network Type"
-msgstr ""
-"Type de réseau"
+msgstr "Type de réseau"
msgid "Address Space"
-msgstr ""
-"Espace adresse"
+msgstr "Espace adresse"
msgid "Name should not contain '/' and '\"'."
-msgstr ""
-"Le nom ne doit pas contenir '/' et '\"'."
+msgstr "Le nom ne doit pas contenir '/' et '\"'."
msgid "Isolated: no external network connection"
-msgstr ""
-"Isolé : aucune connexion réseau externe"
+msgstr "Isolé : aucune connexion réseau externe"
msgid "NAT: outbound physical network connection only"
-msgstr ""
-"NAT : connexion réseau physique sortante uniquement"
+msgstr "NAT : connexion réseau physique sortante uniquement"
msgid "Bridged: Virtual machines are connected to physical network directly"
-msgstr ""
-"Routé : machines virtuelles directement connectées au réseau physique"
+msgstr "Routé : machines virtuelles directement connectées au réseau physique"
msgid "(No interfaces found)"
-msgstr ""
-"(Interface introuvable)"
+msgstr "(Interface introuvable)"
msgid "Destination"
-msgstr ""
-"Destination"
+msgstr "Destination"
msgid "Enable VLAN"
-msgstr ""
-"Activer le réseau local virtuel"
+msgstr "Activer le réseau local virtuel"
msgid "VLAN ID"
-msgstr ""
-"ID réseau local virtuel"
+msgstr "ID réseau local virtuel"
msgid "Stop"
-msgstr ""
-"Arrêter"
+msgstr "Arrêter"
msgid "%Used"
-msgstr ""
-"%Util"
+msgstr "%Util"
msgid "Location"
-msgstr ""
-"Emplacement"
+msgstr "Emplacement"
msgid "Capacity"
-msgstr ""
-"Capacité"
+msgstr "Capacité"
msgid "Allocated"
-msgstr ""
-"Alloué"
+msgstr "Alloué"
msgid "active"
-msgstr ""
-"actif"
+msgstr "actif"
msgid "inactive"
-msgstr ""
-"inactif"
+msgstr "inactif"
msgid "Deactivate"
-msgstr ""
-"Désactiver"
+msgstr "Désactiver"
msgid "Activate"
-msgstr ""
-"Activer"
+msgstr "Activer"
msgid "Add Volume"
-msgstr ""
-"Ajouter un volume"
+msgstr "Ajouter un volume"
msgid "Extend"
-msgstr ""
-"Extension"
+msgstr "Extension"
msgid "Undefine"
-msgstr ""
-"Annuler définition"
+msgstr "Annuler définition"
msgid "Format"
-msgstr ""
-"Format"
+msgstr "Format"
msgid "Allocation"
-msgstr ""
-"Allocation"
+msgstr "Allocation"
msgid "No templates found."
-msgstr ""
-"Aucun modèle trouvé."
-
-# ENGL1SH_VERS10N 28617_40 DO NOT REMOVE OR CHANGE THIS LINE
-# T9N_SRC_ID 92
-# T9N_SH1P_STR1NG KV310AAP001 1
+msgstr "Aucun modèle trouvé."
diff --git a/po/it_IT.po b/po/it_IT.po
index 50dc7c8..5d0b407 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -6,103 +6,91 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-06-24 09:39-0300\n"
+"POT-Creation-Date: 2015-08-21 09:52-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
-"Language: en_US\n"
+"Language: it_IT\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"Plural-Forms: nplurals=2; plural=n != 1;"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
#, python-format
msgid "Unknown parameter %(value)s"
-msgstr ""
-"Parametro sconosciuto %(value)s"
+msgstr "Parametro sconosciuto %(value)s"
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr ""
-"Eliminazione non consentita per %(resource)s"
+msgstr "Eliminazione non consentita per %(resource)s"
#, python-format
msgid "%(resource)s does not implement update method"
-msgstr ""
-"%(resource)s non implementa il metodo di aggiornamento"
+msgstr "%(resource)s non implementa il metodo di aggiornamento"
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr ""
-"Creazione non consentita per %(resource)s"
+msgstr "Creazione non consentita per %(resource)s"
msgid "Unable to parse JSON request"
-msgstr ""
-"Impossibile analizzare la richiesta JSON"
+msgstr "Impossibile analizzare la richiesta JSON"
msgid "This API only supports JSON"
-msgstr ""
-"L'API supporta solo JSON"
+msgstr "L'API supporta solo JSON"
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
-msgstr ""
-"I parametri non corrispondono ai requisiti nello schema: %(err)s"
+msgstr "I parametri non corrispondono ai requisiti nello schema: %(err)s"
msgid "You don't have permission to perform this operation."
-msgstr ""
-"Non si dispone dell'autorizzazione per eseguire questa operazione. "
+msgstr "Non si dispone dell'autorizzazione per eseguire questa operazione. "
msgid "Datastore is not initiated in the model object."
-msgstr ""
-"Archivio dati non inizializzato nell'oggetto modello."
+msgstr "Archivio dati non inizializzato nell'oggetto modello."
#, python-format
msgid "Unable to start task due error: %(err)s"
-msgstr ""
-"Impossibile avviare l'attività a causa dell'errore: %(err)s"
+msgstr "Impossibile avviare l'attività a causa dell'errore: %(err)s"
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
msgstr ""
-"È stato raggiunto il timeout di %(seconds)s secondi durante l'esecuzione dell'attività '%(task)s."
+"È stato raggiunto il timeout di %(seconds)s secondi durante l'esecuzione "
+"dell'attività '%(task)s."
#, python-format
msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
msgstr ""
-"Autenticazione non riuscita per l'utente '%(username)s'. [Codice di errore: %(code)s]"
+"Autenticazione non riuscita per l'utente '%(username)s'. [Codice di errore: "
+"%(code)s]"
msgid "You are not authorized to access Kimchi"
-msgstr ""
-"Non si dispone dell'autorizzazione ad accedere a Kimchi"
+msgstr "Non si dispone dell'autorizzazione ad accedere a Kimchi"
#, python-format
msgid "Specify %(item)s to login into Kimchi"
-msgstr ""
-"Specificare %(item)s per accedere a Kimchi"
+msgstr "Specificare %(item)s per accedere a Kimchi"
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
-msgstr ""
-"Utente %(user_id)s non trovato con le impostazioni LDAP fornite. "
+msgstr "Utente %(user_id)s non trovato con le impostazioni LDAP fornite. "
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
-msgstr ""
-"Configurazione LDAP non valida: %(item)s : %(value)s"
+msgstr "Configurazione LDAP non valida: %(item)s : %(value)s"
msgid "Unknown \"_cap\" specified"
-msgstr ""
-"Specificato \"_cap\" sconosciuto"
+msgstr "Specificato \"_cap\" sconosciuto"
msgid "\"_passthrough\" should be \"true\" or \"false\""
-msgstr ""
-"\"_passthrough\" deve essere \"true\" o \"false\""
+msgstr "\"_passthrough\" deve essere \"true\" o \"false\""
msgid "\"_passthrough_affected_by\" should be a device name string"
-msgstr ""
-"\"_passthrough_affected_by\" deve essere una stringa nome dispositivo"
+msgstr "\"_passthrough_affected_by\" deve essere una stringa nome dispositivo"
+
+msgid "\"_available_only\" should be \"true\" or \"false\""
+msgstr "\"_available_only\" deve essere \"true\" o \"false\""
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
@@ -112,63 +100,59 @@ msgstr ""
#, python-format
msgid "Error while getting block device information for %(device)s."
msgstr ""
-"Errore durante il richiamo delle informazioni sul dispositivo del blocco per %(device)s."
+"Errore durante il richiamo delle informazioni sul dispositivo del blocco per "
+"%(device)s."
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr ""
-"Impossibile trovare il file distro: %(filename)s"
+msgstr "Impossibile trovare il file distro: %(filename)s"
#, python-format
msgid ""
"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
msgstr ""
-"Impossibile analizzare il file distro: %(filename)s. Verificare che sia un file JSON."
+"Impossibile analizzare il file distro: %(filename)s. Verificare che sia un "
+"file JSON."
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
msgstr ""
-"Impossibile accedere alla destinazione host iSCSI %(portal)s. Dettagli: %(err)s"
+"Impossibile accedere alla destinazione host iSCSI %(portal)s. Dettagli: "
+"%(err)s"
#, python-format
msgid "Unable to login to iSCSI host %(host)s target %(target)s"
-msgstr ""
-"Impossibile accedere alla destinazione %(target)s host %(host)s iSCSI"
+msgstr "Impossibile accedere alla destinazione %(target)s host %(host)s iSCSI"
#, python-format
msgid "Unable to find ISO file %(filename)s"
-msgstr ""
-"Impossibile trovare il file ISO %(filename)s"
+msgstr "Impossibile trovare il file ISO %(filename)s"
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr ""
-"Il file ISO %(filename)s non è avviabile"
+msgstr "Il file ISO %(filename)s non è avviabile"
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
-msgstr ""
-"Il file ISO %(filename)s non ha un record di avvio El Torito valido"
+msgstr "Il file ISO %(filename)s non ha un record di avvio El Torito valido"
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
-msgstr ""
-"Voce di convalida El Torito non valida in ISO %(filename)s"
+msgstr "Voce di convalida El Torito non valida in ISO %(filename)s"
#, python-format
msgid "Invalid El Torito boot indicator in ISO %(filename)s"
-msgstr ""
-"Indicatore di avvio El Torito non valido in ISO %(filename)s"
+msgstr "Indicatore di avvio El Torito non valido in ISO %(filename)s"
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
-msgstr ""
-"Tipo di volume imprevisto per il volume primario in ISO %(filename)s"
+msgstr "Tipo di volume imprevisto per il volume primario in ISO %(filename)s"
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
msgstr ""
-"Formato non corretto durante la lettura del descrittore volume in ISO %(filename)s"
+"Formato non corretto durante la lettura del descrittore volume in ISO "
+"%(filename)s"
#, python-format
msgid ""
@@ -178,50 +162,46 @@ msgid ""
"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
"'path_to_iso'.Details: %(err)s"
msgstr ""
-"L'hypervisor non dispone dell'autorizzazione per utilizzare questo ISO %(filename)s. "
-"Spostarlo in /var/lib/libvirt o impostare l'autorizzazione di ricerca "
-"sugli elenchi di controllo di accesso file per l'utente '%(user)s' se possibile, oppure aggiungere "
-"'%(user)s' al gruppo percorso ISO oppure (non consigliato) 'chmod -R o+x "
-"'path_to_iso'. Dettagli: %(err)s"
+"L'hypervisor non dispone dell'autorizzazione per utilizzare questo ISO "
+"%(filename)s. Spostarlo in /var/lib/libvirt o impostare l'autorizzazione di "
+"ricerca sugli elenchi di controllo di accesso file per l'utente '%(user)s' "
+"se possibile, oppure aggiungere '%(user)s' al gruppo percorso ISO oppure "
+"(non consigliato) 'chmod -R o+x 'path_to_iso'. Dettagli: %(err)s"
msgid "An error occurred when probing image OS information."
msgstr ""
"Si è verificato un errore durante l'analisi delle informazioni SO immagine."
msgid "No OS information found in given image."
-msgstr ""
-"Nessuna informazione SO trovata nell'immagine fornita."
+msgstr "Nessuna informazione SO trovata nell'immagine fornita."
#, python-format
msgid "Unable to read image file %(filename)s"
-msgstr ""
-"Impossibile leggere il file immagine %(filename)s"
+msgstr "Impossibile leggere il file immagine %(filename)s"
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
msgstr ""
-"Il file immagine deve essere un file esistente sul sistema. %(filename)s non è un valido "
-"input."
+"Il file immagine deve essere un file esistente sul sistema. %(filename)s non "
+"è un valido input."
#, python-format
msgid "Virtual machine %(name)s already exists"
-msgstr ""
-"Macchina virtuale %(name)s già esistente"
+msgstr "Macchina virtuale %(name)s già esistente"
#, python-format
msgid "Virtual machine %(name)s does not exist"
-msgstr ""
-"La macchina virtuale %(name)s non esiste"
+msgstr "La macchina virtuale %(name)s non esiste"
#, python-format
msgid ""
"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
"in use or the virtual machine is not powered off."
msgstr ""
-"Impossibile ridenominare la macchina virtuale %(name)s. Il nome %(new_name)s è già "
-"in uso o la macchina virtuale non è spenta."
+"Impossibile ridenominare la macchina virtuale %(name)s. Il nome %(new_name)s "
+"è già in uso o la macchina virtuale non è spenta."
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
@@ -229,8 +209,7 @@ msgstr ""
"Impossibile richiamare l'immagine per la macchina virtuale arrestata %(name)s"
msgid "Remote ISO image is not supported by this server."
-msgstr ""
-"L'immagine ISO remota non è supportata da questo server."
+msgstr "L'immagine ISO remota non è supportata da questo server."
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
@@ -239,8 +218,7 @@ msgstr ""
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Impossibile creare la macchina virtuale %(name)s. Dettagli: %(err)s"
+msgstr "Impossibile creare la macchina virtuale %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
@@ -254,8 +232,7 @@ msgstr ""
#, python-format
msgid "Unable to connect to powered off virtual machine %(name)s."
-msgstr ""
-"Impossibile connettere la macchina virtuale %(name)s."
+msgstr "Impossibile connettere la macchina virtuale %(name)s."
msgid "Virtual machine name must be a string without slashes (/)"
msgstr ""
@@ -263,8 +240,7 @@ msgstr ""
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
-msgstr ""
-"URI modello non valido %(value)s specificato per la macchina virtuale"
+msgstr "URI modello non valido %(value)s specificato per la macchina virtuale"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for virtual machine"
@@ -272,31 +248,26 @@ msgstr ""
"URI pool di memoria non valido %(value)s specificato per la macchina virtuale"
msgid "Supported virtual machine graphics are Spice or VNC"
-msgstr ""
-"I grafici macchina virtuale supportati sono Spice o VNC"
+msgstr "I grafici macchina virtuale supportati sono Spice o VNC"
msgid "Graphics address to listen on must be IPv4 or IPv6"
msgstr ""
"L'indirizzo dei grafici su cui rimanere in ascolto deve essere IPv4 o IPv6"
msgid "Specify a template to create a virtual machine from"
-msgstr ""
-"Specificare un modello da cui creare una macchina virtuale"
+msgstr "Specificare un modello da cui creare una macchina virtuale"
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Impossibile avviare la macchina virtuale %(name)s. Dettagli: %(err)s"
+msgstr "Impossibile avviare la macchina virtuale %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Impossibile spegnere la macchina virtuale %(name)s. Dettagli: %(err)s"
+msgstr "Impossibile spegnere la macchina virtuale %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Impossibile eliminare la macchina virtuale %(name)s. Dettagli: %(err)s"
+msgstr "Impossibile eliminare la macchina virtuale %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
@@ -304,41 +275,35 @@ msgstr ""
"Impossibile reimpostare la macchina virtuale %(name)s. Dettagli: %(err)s"
msgid "User name list must be an array"
-msgstr ""
-"L'elenco di nomi utente deve essere un array"
+msgstr "L'elenco di nomi utente deve essere un array"
msgid "User name must be a string"
-msgstr ""
-"Il nome utente deve essere una stringa"
+msgstr "Il nome utente deve essere una stringa"
msgid "Group name list must be an array"
-msgstr ""
-"L'elenco di nomi gruppo deve essere un array"
+msgstr "L'elenco di nomi gruppo deve essere un array"
msgid "Group name must be a string"
-msgstr ""
-"Il nome gruppo deve essere una stringa"
+msgstr "Il nome gruppo deve essere una stringa"
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr ""
-"L'utente o gli utenti '%(users)s' non esistono"
+msgstr "L'utente o gli utenti '%(users)s' non esistono"
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr ""
-"Il gruppo o i gruppi '%(groups)s' non esistono"
+msgstr "Il gruppo o i gruppi '%(groups)s' non esistono"
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Impossibile arrestare la macchina virtuale %(name)s. Dettagli: %(err)s"
+msgstr "Impossibile arrestare la macchina virtuale %(name)s. Dettagli: %(err)s"
#, python-format
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Impossibile ottenere i metadati di accesso della macchina virtuale %(name)s. Dettagli: %(err)s"
+"Impossibile ottenere i metadati di accesso della macchina virtuale %(name)s. "
+"Dettagli: %(err)s"
msgid "The guest console password must be a string."
msgstr ""
@@ -346,12 +311,14 @@ msgstr ""
msgid "The life time for the guest console password must be a number."
msgstr ""
-"La durata per la password della console della macchina guest deve essere un numero. "
+"La durata per la password della console della macchina guest deve essere un "
+"numero. "
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
msgstr ""
-"La macchina virtuale '%(name)s' deve essere arrestata prima di poterla clonare. "
+"La macchina virtuale '%(name)s' deve essere arrestata prima di poterla "
+"clonare. "
#, python-format
msgid "Insufficient disk space to clone virtual machine '%(name)s'"
@@ -360,8 +327,7 @@ msgstr ""
#, python-format
msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
-msgstr ""
-"Impossibile clonare la VM '%(name)s'. Dettagli: %(err)s"
+msgstr "Impossibile clonare la VM '%(name)s'. Dettagli: %(err)s"
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
@@ -370,46 +336,40 @@ msgstr ""
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
-msgstr ""
-"Impossibile sospendere la VM '%(name)s' perché non è in esecuzione. "
+msgstr "Impossibile sospendere la VM '%(name)s' perché non è in esecuzione. "
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
-msgstr ""
-"Impossibile sospendere la VM '%(name)s'. Dettagli: %(err)s"
+msgstr "Impossibile sospendere la VM '%(name)s'. Dettagli: %(err)s"
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
-msgstr ""
-"Impossibile riprendere la VM '%(name)s' perché non è in pausa. "
+msgstr "Impossibile riprendere la VM '%(name)s' perché non è in pausa. "
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
-msgstr ""
-"Impossibile riprendere la VM '%(name)s'. Dettagli: %(err)s"
+msgstr "Impossibile riprendere la VM '%(name)s'. Dettagli: %(err)s"
msgid "Memory assigned is higher then the maximum allowed in the host."
-msgstr ""
-"La memoria assegnata è superiore al massimo consentito nell'host. "
+msgstr "La memoria assegnata è superiore al massimo consentito nell'host. "
#, python-format
msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
-"La VM '%(name)s' non supporta l'aggiornamento della memoria live. Aggiornare la memoria con"
-"la macchina fuori linea per abilitare questa funzione. "
+"La VM '%(name)s' non supporta l'aggiornamento della memoria live. Aggiornare "
+"la memoria conla macchina fuori linea per abilitare questa funzione. "
msgid "Only increase memory is allowed in active VMs"
-msgstr ""
-"Nelle VM attive è consentito solo aumentare la memoria. "
+msgstr "Nelle VM attive è consentito solo aumentare la memoria. "
msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
msgstr ""
-"Per l'aggiornamento della memoria live, il nuovo valore di memoria deve essere uguale al vecchio più"
-"multipli di 1024 Mib"
+"Per l'aggiornamento della memoria live, il nuovo valore di memoria deve "
+"essere uguale al vecchio piùmultipli di 1024 Mib"
msgid "There are not enough free slots of 1024 Mib in the guest."
msgstr ""
@@ -419,24 +379,27 @@ msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
msgstr ""
-"La versione libvirt dell'host non supporta dispositivi di memoria. Libvirt deve essere >= "
-"1.2.14"
+"La versione libvirt dell'host non supporta dispositivi di memoria. Libvirt "
+"deve essere >= 1.2.14"
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
msgstr ""
-"Errore durante il collegamento del dispositivo di memoria. Dettagli: %(error)s"
+"Errore durante il collegamento del dispositivo di memoria. Dettagli: "
+"%(error)s"
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
-"La VM %(vmid)s non contiene un dispositivo host assegnato direttamente %(dev_name)s."
+"La VM %(vmid)s non contiene un dispositivo host assegnato direttamente "
+"%(dev_name)s."
#, python-format
msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
msgstr ""
-"Il dispositivo host %(dev_name)s non consente di assegnare direttamente al VM."
+"Il dispositivo host %(dev_name)s non consente di assegnare direttamente al "
+"VM."
msgid ""
"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
@@ -445,28 +408,26 @@ msgid ""
"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
"iommu=1."
msgstr ""
-"Non è stato trovato alcun gruppo IOMMU. Per funzionare correttamente il pass-through PCI host "
-"ha bisogno del gruppo IOMMU. Abilitare Intel VT-d o AMD IOMMU nel BIOS e verificare quindi che "
-"il Kernel sia compilato con il supporto IOMMU. per la CPU Intel, aggiungere intel_iommu=on "
-"al parametro Kernel in /boot/grub2/grub.conf. Per la CPU AMD, aggiungere iommu=pt "
-"iommu=1."
+"Non è stato trovato alcun gruppo IOMMU. Per funzionare correttamente il pass-"
+"through PCI host ha bisogno del gruppo IOMMU. Abilitare Intel VT-d o AMD "
+"IOMMU nel BIOS e verificare quindi che il Kernel sia compilato con il "
+"supporto IOMMU. per la CPU Intel, aggiungere intel_iommu=on al parametro "
+"Kernel in /boot/grub2/grub.conf. Per la CPU AMD, aggiungere iommu=pt iommu=1."
msgid "\"name\" should be a device name string"
-msgstr ""
-"\"name\" deve essere una stringa nome dispositivo"
+msgstr "\"name\" deve essere una stringa nome dispositivo"
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
msgstr ""
-"Il dispositivo %(name)s è probabilmente utilizzato dall'host. Impossibile collegarlo"
-"alla macchina guest."
+"Il dispositivo %(name)s è probabilmente utilizzato dall'host. Impossibile "
+"collegarloalla macchina guest."
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
-msgstr ""
-"L'interfaccia %(iface)s non esiste nella macchina virtuale %(name)s"
+msgstr "L'interfaccia %(iface)s non esiste nella macchina virtuale %(name)s"
#, python-format
msgid ""
@@ -480,7 +441,8 @@ msgstr ""
msgid "Network name for virtual machine interface must be a string"
msgstr ""
-"Il nome di rete per l'interfaccia della macchina virtuale deve essere una stringa"
+"Il nome di rete per l'interfaccia della macchina virtuale deve essere una "
+"stringa"
msgid "Invalid network model card specified for virtual machine interface"
msgstr ""
@@ -488,20 +450,18 @@ msgstr ""
msgid "Specify type and network to add a new virtual machine interface"
msgstr ""
-"Specificare il tipo e la rete per aggiungere una nuova interfaccia della macchina virtuale"
+"Specificare il tipo e la rete per aggiungere una nuova interfaccia della "
+"macchina virtuale"
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
-msgstr ""
-"L'indirizzo MAC deve rispettare il formato FF:FF:FF:FF:FF:FF"
+msgstr "L'indirizzo MAC deve rispettare il formato FF:FF:FF:FF:FF:FF"
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
-msgstr ""
-"L'indirizzo MAC %(mac)s esiste già nella macchina virtuale %(name)s"
+msgstr "L'indirizzo MAC %(mac)s esiste già nella macchina virtuale %(name)s"
msgid "Invalid MAC Address"
-msgstr ""
-"Indirizzo MAC non valido"
+msgstr "Indirizzo MAC non valido"
msgid "Cannot change MAC address of a running virtual machine"
msgstr ""
@@ -509,8 +469,7 @@ msgstr ""
#, python-format
msgid "Template %(name)s already exists"
-msgstr ""
-"Modello %(name)s già esistente"
+msgstr "Modello %(name)s già esistente"
#, python-format
msgid ""
@@ -522,17 +481,18 @@ msgstr ""
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
msgstr ""
-"Il pool di memoria %(pool)s specificato per il modello %(template)s non esiste"
+"Il pool di memoria %(pool)s specificato per il modello %(template)s non "
+"esiste"
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
msgstr ""
-"Il pool di memoria %(pool)s specificato per il modello %(template)s non è attivo"
+"Il pool di memoria %(pool)s specificato per il modello %(template)s non è "
+"attivo"
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr ""
-"Parametro non valido '%(param)s' specificato per CDROM."
+msgstr "Parametro non valido '%(param)s' specificato per CDROM."
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
@@ -540,45 +500,38 @@ msgstr ""
"La rete %(network)s specificata per il modello %(template)s non è attiva"
msgid "Template name must be a string"
-msgstr ""
-"Il nome del modello deve essere una stringa"
+msgstr "Il nome del modello deve essere una stringa"
msgid "Template icon must be a path to the image"
-msgstr ""
-"L'icona del modello deve essere un percorso all'immagine"
+msgstr "L'icona del modello deve essere un percorso all'immagine"
msgid "Template distribution must be a string"
-msgstr ""
-"La distribuzione del modello deve essere una stringa"
+msgstr "La distribuzione del modello deve essere una stringa"
msgid "Template distribution version must be a string"
-msgstr ""
-"La versione della distribuzione del modello deve essere una stringa"
+msgstr "La versione della distribuzione del modello deve essere una stringa"
msgid "The number of CPUs must be an integer greater than 0"
-msgstr ""
-"Il numero di CPU deve essere un numero intero maggiore di 0"
+msgstr "Il numero di CPU deve essere un numero intero maggiore di 0"
msgid "Amount of memory (MB) must be an integer greater than 512"
msgstr ""
"La quantità di memoria (MB) deve essere un numero intero maggiore di 512"
msgid "Template CDROM must be a local or remote ISO file"
-msgstr ""
-"Il CDROM del modello deve essere un file ISO locale o remoto"
+msgstr "Il CDROM del modello deve essere un file ISO locale o remoto"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for template"
-msgstr ""
-"URI pool di memoria non valido %(value)s specificato per il modello"
+msgstr "URI pool di memoria non valido %(value)s specificato per il modello"
msgid "Specify an ISO image as CDROM or a base image to create a template"
msgstr ""
-"Specificare un'immagine ISO come CDROM o un'immagine di base per creare un modello"
+"Specificare un'immagine ISO come CDROM o un'immagine di base per creare un "
+"modello"
msgid "All networks for the template must be specified in a list."
-msgstr ""
-"Tutte le reti per il modello devono essere specificate in un elenco."
+msgstr "Tutte le reti per il modello devono essere specificate in un elenco."
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
msgstr ""
@@ -586,22 +539,18 @@ msgstr ""
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
-msgstr ""
-"Il volume %(volume)s non è nel pool di memoria %(pool)s"
+msgstr "Il volume %(volume)s non è nel pool di memoria %(pool)s"
#, python-format
msgid "Unable to create template due error: %(err)s"
-msgstr ""
-"Impossibile creare il modello a causa dell'errore: %(err)s"
+msgstr "Impossibile creare il modello a causa dell'errore: %(err)s"
#, python-format
msgid "Unable to delete template due error: %(err)s"
-msgstr ""
-"Impossibile eliminare il modello a causa dell'errore: %(err)s"
+msgstr "Impossibile eliminare il modello a causa dell'errore: %(err)s"
msgid "Disk size must be an integer greater than 1GB."
-msgstr ""
-"La dimensione del disco deve essere un numero intero maggiore di 1GB."
+msgstr "La dimensione del disco deve essere un numero intero maggiore di 1GB."
msgid "Template base image must be a valid local image file"
msgstr ""
@@ -609,150 +558,134 @@ msgstr ""
#, python-format
msgid "Cannot identify base image %(path)s format"
-msgstr ""
-"Impossibile identificare il formato %(path)s dell'immagine di base"
+msgstr "Impossibile identificare il formato %(path)s dell'immagine di base"
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
msgstr ""
-"Quando si specifica la topologia CPU, le VCPU devono essere composte da socket, core e"
-"thread."
+"Quando si specifica la topologia CPU, le VCPU devono essere composte da "
+"socket, core ethread."
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
"zero."
msgstr ""
-"Quando si specifica la topologia CPU, ogni elemento deve essere un numero intero maggiore di"
-"zero."
+"Quando si specifica la topologia CPU, ogni elemento deve essere un numero "
+"intero maggiore dizero."
msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"Formato immagine disco non valido. Formati validi: bochs, cloop, cow, dmg, qcow, "
-"qcow2, qed, raw, vmdk, vpc."
+"Formato immagine disco non valido. Formati validi: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
#, python-format
msgid "Storage pool %(name)s already exists"
-msgstr ""
-"Pool di memoria %(name)s già esistente"
+msgstr "Pool di memoria %(name)s già esistente"
#, python-format
msgid "Storage pool %(name)s does not exist"
-msgstr ""
-"Il pool di memoria %(name)s non esiste"
+msgstr "Il pool di memoria %(name)s non esiste"
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
-msgstr ""
-"Specificare %(item)s per poter creare il pool di memoria %(name)s"
+msgstr "Specificare %(item)s per poter creare il pool di memoria %(name)s"
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr ""
-"Impossibile eliminare il pool di memoria attivo %(name)s"
+msgstr "Impossibile eliminare il pool di memoria attivo %(name)s"
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
-msgstr ""
-"Impossibile elencare i pool di memoria. Dettagli: %(err)s"
+msgstr "Impossibile elencare i pool di memoria. Dettagli: %(err)s"
#, python-format
msgid "Unable to create storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"Impossibile creare il pool di memoria %(name)s. Dettagli: %(err)s"
+msgstr "Impossibile creare il pool di memoria %(name)s. Dettagli: %(err)s"
#, python-format
msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
msgstr ""
-"Impossibile ottenere il numero di volumi di memoria nel pool di memoria %(name)s. Dettagli: "
-"%(err)s"
+"Impossibile ottenere il numero di volumi di memoria nel pool di memoria "
+"%(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"Impossibile attivare il pool di memoria %(name)s. Dettagli: %(err)s"
+msgstr "Impossibile attivare il pool di memoria %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"Impossibile disattivare il pool di memoria %(name)s. Dettagli: %(err)s"
+msgstr "Impossibile disattivare il pool di memoria %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"Impossibile eliminare il pool di memoria %(name)s. Dettagli: %(err)s"
+msgstr "Impossibile eliminare il pool di memoria %(name)s. Dettagli: %(err)s"
#, python-format
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
msgstr ""
-"Impossibile creare il pool NFS poiché il percorso di esportazione %(path)s potrebbe bloccarsi durante il montaggio"
+"Impossibile creare il pool NFS poiché il percorso di esportazione %(path)s "
+"potrebbe bloccarsi durante il montaggio"
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
msgstr ""
-"Impossibile creare il pool NFS poiché il montaggio del percorso di esportazione %(path)s ha avuto esito negativo"
+"Impossibile creare il pool NFS poiché il montaggio del percorso di "
+"esportazione %(path)s ha avuto esito negativo"
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr ""
-"Tipo di pool di memoria non supportato: %(type)s"
+msgstr "Tipo di pool di memoria non supportato: %(type)s"
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
-msgstr ""
-"Errore durante il richiamo dell'XML del pool di memoria per %(pool)s"
+msgstr "Errore durante il richiamo dell'XML del pool di memoria per %(pool)s"
msgid "Storage pool name must be a string without slashes (/)"
-msgstr ""
-"Il nome del pool di memoria deve essere una stringa senza barre (/)"
+msgstr "Il nome del pool di memoria deve essere una stringa senza barre (/)"
msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
"iso"
msgstr ""
-"I tipi di pool di memoria supportati sono dir, netfs, logico, iscsi, isci e kimchi-"
-"iso"
+"I tipi di pool di memoria supportati sono dir, netfs, logico, iscsi, isci e "
+"kimchi-iso"
msgid "Storage pool path must be a string"
-msgstr ""
-"Il percorso del pool di memoria deve essere una stringa"
+msgstr "Il percorso del pool di memoria deve essere una stringa"
msgid "Storage pool host must be a IP or hostname"
-msgstr ""
-"L'host del pool di memoria deve essere un nome host o IP"
+msgstr "L'host del pool di memoria deve essere un nome host o IP"
msgid "Storage pool device must be the absolute path to the block device"
msgstr ""
-"Il dispositivo pool di memoria deve essere il percorso assoluto al dispositivo del blocco"
+"Il dispositivo pool di memoria deve essere il percorso assoluto al "
+"dispositivo del blocco"
msgid "Storage pool devices parameter must be a list"
-msgstr ""
-"Il parametro dispositivi pool di memoria deve essere un elenco"
+msgstr "Il parametro dispositivi pool di memoria deve essere un elenco"
msgid "Target IQN of an iSCSI pool must be a string"
-msgstr ""
-"L'IQN di destinazione di un pool iSCSI deve essere una stringa"
+msgstr "L'IQN di destinazione di un pool iSCSI deve essere una stringa"
msgid "Port of a remote storage server must be an integer between 1 and 65535"
msgstr ""
-"La porta di un server di memoria remoto deve essere un numero intero tra 1 e 65535"
+"La porta di un server di memoria remoto deve essere un numero intero tra 1 e "
+"65535"
msgid "iSCSI target username must be a string"
-msgstr ""
-"Il nome utente della destinazione iSCSI deve essere una stringa"
+msgstr "Il nome utente della destinazione iSCSI deve essere una stringa"
msgid "iSCSI target password must be a string"
-msgstr ""
-"La password della destinazione iSCSI deve essere una stringa"
+msgstr "La password della destinazione iSCSI deve essere una stringa"
msgid "Specify name and type to create a storage pool"
-msgstr ""
-"Specificare nome e tipo per creare un pool di memoria"
+msgstr "Specificare nome e tipo per creare un pool di memoria"
#, python-format
msgid ""
@@ -764,36 +697,33 @@ msgstr ""
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
-msgstr ""
-"Impossibile estendere il pool logico %(pool)s. Dettagli: %(err)s"
+msgstr "Impossibile estendere il pool logico %(pool)s. Dettagli: %(err)s"
msgid "The parameter disks only can be updated for logical storage pool."
msgstr ""
"Solo il parametro dischi può essere aggiornato per il pool di memoria logico."
msgid "The SCSI host adapter name must be a string."
-msgstr ""
-"Il nome adattatore host SCSI deve essere una stringa."
+msgstr "Il nome adattatore host SCSI deve essere una stringa."
msgid "The storage pool kimchi_isos is reserved for internal use"
-msgstr ""
-"Il pool di memoria kimchi_isos è riservato per uso interno"
+msgstr "Il pool di memoria kimchi_isos è riservato per uso interno"
#, python-format
msgid ""
"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"Impossibile attivare il pool di memoria NFS %(name)s. Il server NFS %(server)s è "
-"irraggiungibile."
+"Impossibile attivare il pool di memoria NFS %(name)s. Il server NFS "
+"%(server)s è irraggiungibile."
#, python-format
msgid ""
"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"Impossibile disattivare il pool di memoria NFS %(name)s. Il server NFS %(server)s è "
-"irraggiungibile."
+"Impossibile disattivare il pool di memoria NFS %(name)s. Il server NFS "
+"%(server)s è irraggiungibile."
#, python-format
msgid ""
@@ -811,66 +741,64 @@ msgid ""
"A volume group named '%(name)s' already exists. Please, choose another name "
"to create the logical pool."
msgstr ""
-"Un gruppo di volumi denominato '%(name)s' esiste già. Scegliere un altro nome "
-"per creare il pool logico."
+"Un gruppo di volumi denominato '%(name)s' esiste già. Scegliere un altro "
+"nome per creare il pool logico."
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
msgstr ""
-"Impossibile aggiornare il database con informazioni approfondite sulla scansione a causa dell'errore: %(err)s"
+"Impossibile aggiornare il database con informazioni approfondite sulla "
+"scansione a causa dell'errore: %(err)s"
#, python-format
msgid "Storage volume %(name)s already exists"
-msgstr ""
-"Volume di memoria %(name)s già esistente"
+msgstr "Volume di memoria %(name)s già esistente"
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
-msgstr ""
-"Il volume di memoria %(name)s non esiste nel pool di memoria %(pool)s"
+msgstr "Il volume di memoria %(name)s non esiste nel pool di memoria %(pool)s"
#, python-format
msgid ""
"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
"not active"
msgstr ""
-"Impossibile creare il volume di memoria %(volume)s perché il pool di memoria %(pool)s "
-"non è attivo"
+"Impossibile creare il volume di memoria %(volume)s perché il pool di memoria "
+"%(pool)s non è attivo"
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
-msgstr ""
-"Specificare %(item)s per poter creare il volume di memoria %(volume)s"
+msgstr "Specificare %(item)s per poter creare il volume di memoria %(volume)s"
#, python-format
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
msgstr ""
-"Impossibile elencare i volumi di memoria poiché il pool di memoria %(pool)s non è attivo"
+"Impossibile elencare i volumi di memoria poiché il pool di memoria %(pool)s "
+"non è attivo"
#, python-format
msgid ""
"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
"%(err)s"
msgstr ""
-"Impossibile creare il volume di memoria %(name)s nel pool di memoria %(pool)s. Dettagli: "
-"%(err)s"
+"Impossibile creare il volume di memoria %(name)s nel pool di memoria "
+"%(pool)s. Dettagli: %(err)s"
#, python-format
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
msgstr ""
-"Impossibile elencare i volumi di memoria nel pool di memoria %(pool)s. Dettagli: %(err)s"
+"Impossibile elencare i volumi di memoria nel pool di memoria %(pool)s. "
+"Dettagli: %(err)s"
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
-msgstr ""
-"Impossibile ripulire i volumi di memoria %(name)s. Dettagli: %(err)s"
+msgstr "Impossibile ripulire i volumi di memoria %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
-msgstr ""
-"Impossibile eliminare il volume di memoria %(name)s. Dettagli: %(err)s"
+msgstr "Impossibile eliminare il volume di memoria %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
@@ -880,46 +808,42 @@ msgstr ""
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
msgstr ""
-"Il tipo di memoria %(type)s non supporta la creazione ed eliminazione del volume"
+"Il tipo di memoria %(type)s non supporta la creazione ed eliminazione del "
+"volume"
msgid "Storage volume name must be a string"
-msgstr ""
-"Il nome del volume di memoria deve essere una stringa"
+msgstr "Il nome del volume di memoria deve essere una stringa"
msgid "Storage volume allocation must be an integer number"
-msgstr ""
-"L'assegnazione del volume di memoria deve essere un numero intero"
+msgstr "L'assegnazione del volume di memoria deve essere un numero intero"
msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"Formato del volume di memoria non supportato. Formati validi: bochs, cloop, cow, dmg, "
-"qcow, qcow2, qed, raw, vmdk, vpc."
+"Formato del volume di memoria non supportato. Formati validi: bochs, cloop, "
+"cow, dmg, qcow, qcow2, qed, raw, vmdk, vpc."
msgid "Storage volume requires a volume name"
-msgstr ""
-"Il volume di memoria richiede un nome volume"
+msgstr "Il volume di memoria richiede un nome volume"
#, python-format
msgid ""
"Unable to update database with storage volume information due error: %(err)s"
msgstr ""
-"Impossibile aggiornare il database con informazioni sul volume di memoria a causa dell'errore: %(err)s"
+"Impossibile aggiornare il database con informazioni sul volume di memoria a "
+"causa dell'errore: %(err)s"
#, python-format
msgid "Only one of parameter %(param)s can be specified"
-msgstr ""
-"È possibile specificare solo un parametro %(param)s"
+msgstr "È possibile specificare solo un parametro %(param)s"
#, python-format
msgid "Create volume from %(param)s is not supported"
-msgstr ""
-"La creazione del volume da %(param)s non è supportata"
+msgstr "La creazione del volume da %(param)s non è supportata"
msgid "Storage volume capacity must be an integer number."
-msgstr ""
-"La capacità del volume di memoria deve essere un numero intero."
+msgstr "La capacità del volume di memoria deve essere un numero intero."
msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
msgstr ""
@@ -927,29 +851,27 @@ msgstr ""
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
-msgstr ""
-"Impossibile accedere al file %(url)s. Verificare."
+msgstr "Impossibile accedere al file %(url)s. Verificare."
#, python-format
msgid ""
"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
"%(err)s"
msgstr ""
-"Impossibile clonare il volume di memoria '%(name)s' nel pool '%(pool)s'. Dettagli: "
-"%(err)s"
+"Impossibile clonare il volume di memoria '%(name)s' nel pool '%(pool)s'. "
+"Dettagli: %(err)s"
msgid "Specify chunk data and its size to upload a file."
-msgstr ""
-"Specificare dati sezione e dimensioni per caricare un file. "
+msgstr "Specificare dati sezione e dimensioni per caricare un file. "
msgid "In order to upload a storage volume, specify the 'upload' parameter."
-msgstr ""
-"Per caricare un volume di memoria, specificare il parametro 'upload'. "
+msgstr "Per caricare un volume di memoria, specificare il parametro 'upload'. "
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
msgstr ""
-"Impossibile caricare i dati sezione perché non corrispondono con la dimensione sezione richiesta. "
+"Impossibile caricare i dati sezione perché non corrispondono con la "
+"dimensione sezione richiesta. "
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
@@ -963,22 +885,20 @@ msgstr ""
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
msgstr ""
-"Impossibile caricare i dati sezione nel volume di memoria. Dettagli: %(err)s. "
+"Impossibile caricare i dati sezione nel volume di memoria. Dettagli: "
+"%(err)s. "
#, python-format
msgid "Interface %(name)s does not exist"
-msgstr ""
-"L'interfaccia %(name)s non esiste"
+msgstr "L'interfaccia %(name)s non esiste"
#, python-format
msgid "Network %(name)s already exists"
-msgstr ""
-"Rete %(name)s già esistente"
+msgstr "Rete %(name)s già esistente"
#, python-format
msgid "Network %(name)s does not exist"
-msgstr ""
-"La rete %(name)s non esiste"
+msgstr "La rete %(name)s non esiste"
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
@@ -992,8 +912,7 @@ msgstr ""
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr ""
-"Impossibile eliminare la rete attiva %(name)s"
+msgstr "Impossibile eliminare la rete attiva %(name)s"
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
@@ -1002,54 +921,49 @@ msgstr ""
msgid "Interface should be bare NIC, bonding or bridge device."
msgstr ""
-"L'interfaccia deve essere un dispositivo bridge o di collegamento NIC bare-metal."
+"L'interfaccia deve essere un dispositivo bridge o di collegamento NIC bare-"
+"metal."
#, python-format
msgid "Unable to create network %(name)s. Details: %(err)s"
-msgstr ""
-"Impossibile creare la rete %(name)s. Dettagli: %(err)s"
+msgstr "Impossibile creare la rete %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
-msgstr ""
-"Impossibile trovare un indirizzo IP libero per la rete '%(name)s'"
+msgstr "Impossibile trovare un indirizzo IP libero per la rete '%(name)s'"
#, python-format
msgid "The interface %(iface)s already exists."
-msgstr ""
-"Interfaccia %(iface)s già esistente."
+msgstr "Interfaccia %(iface)s già esistente."
msgid "Network name must be a string without slashes (/) or quotes (\")"
msgstr ""
"Il nome della rete deve essere una stringa senza barre (/) o virgolette (\")"
msgid "Supported network types are isolated, NAT and bridge"
-msgstr ""
-"I tipi di rete supportati sono isolata, NAT e bridge"
+msgstr "I tipi di rete supportati sono isolata, NAT e bridge"
msgid "Network subnet must be a string with IP address and prefix or netmask"
msgstr ""
-"La sottorete della rete deve essere una stringa con indirizzo IP e prefisso o maschera di rete"
+"La sottorete della rete deve essere una stringa con indirizzo IP e prefisso "
+"o maschera di rete"
msgid "Network interface must be a string"
-msgstr ""
-"L'interfaccia di rete deve essere una stringa"
+msgstr "L'interfaccia di rete deve essere una stringa"
msgid "Network VLAN ID must be an integer between 1 and 4094"
-msgstr ""
-"L'ID VLAN di rete deve essere un numero intero tra 1 e 4094"
+msgstr "L'ID VLAN di rete deve essere un numero intero tra 1 e 4094"
msgid "Specify name and type to create a Network"
-msgstr ""
-"Specificare nome e tipo per creare una rete"
+msgstr "Specificare nome e tipo per creare una rete"
#, python-format
msgid ""
"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
"and/or templates linked to this network."
msgstr ""
-"Impossibile eliminare la rete %(name)s. Ci sono alcune macchine virtuali %(vms)s "
-"e/o modelli collegati a tale rete."
+"Impossibile eliminare la rete %(name)s. Ci sono alcune macchine virtuali "
+"%(vms)s e/o modelli collegati a tale rete."
#, python-format
msgid ""
@@ -1062,12 +976,12 @@ msgstr ""
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
msgstr ""
-"Il dispositivo bridge %(name)s non può essere il dispositivo trunk di una VLAN."
+"Il dispositivo bridge %(name)s non può essere il dispositivo trunk di una "
+"VLAN."
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr ""
-"Impossibile attivare l'interfaccia %(iface)s: %(err)s."
+msgstr "Impossibile attivare l'interfaccia %(iface)s: %(err)s."
#, python-format
msgid ""
@@ -1079,111 +993,97 @@ msgstr ""
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
-msgstr ""
-"Impossibile avviare la rete %(name)s. Dettagli: %(err)s"
+msgstr "Impossibile avviare la rete %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr ""
-"Il report di debug %(name)s non esiste"
+msgstr "Il report di debug %(name)s non esiste"
msgid "Debug report tool not found in system"
-msgstr ""
-"Strumento report di debug non trovato nel sistema"
+msgstr "Strumento report di debug non trovato nel sistema"
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
-msgstr ""
-"Impossibile creare il report di debug %(name)s. Dettagli: %(err)s. "
+msgstr "Impossibile creare il report di debug %(name)s. Dettagli: %(err)s. "
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
-msgstr ""
-"Impossibile trovare un report di debug con il nome fornito %(name)s"
+msgstr "Impossibile trovare un report di debug con il nome fornito %(name)s"
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
-msgstr ""
-"Impossibile generare il report di debug %(name)s. Dettagli: %(err)s"
+msgstr "Impossibile generare il report di debug %(name)s. Dettagli: %(err)s"
msgid "You should give a name for the debug report file."
-msgstr ""
-"È necessario fornire un nome per il file report di debug. "
+msgstr "È necessario fornire un nome per il file report di debug. "
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
-"Il nome report di debug deve essere una stringa. Sono consentiti solo lettere, cifre, sottolineature ('_') "
-"e trattini ('-')."
+"Il nome report di debug deve essere una stringa. Sono consentiti solo "
+"lettere, cifre, sottolineature ('_') e trattini ('-')."
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
msgstr ""
-"Il report di debug con il nome specificato \"%(name)s\" già esiste. Utilizzare "
-"un altro."
+"Il report di debug con il nome specificato \"%(name)s\" già esiste. "
+"Utilizzare un altro."
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr ""
-"Il server di memoria %(server)s non è stato utilizzato da Kimchi"
+msgstr "Il server di memoria %(server)s non è stato utilizzato da Kimchi"
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr ""
-"Distro '%(name)s' non esistente"
+msgstr "Distro '%(name)s' non esistente"
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr ""
-"La partizione %(name)s non esiste nell'host"
+msgstr "La partizione %(name)s non esiste nell'host"
msgid "Unable to shutdown host machine as there are running virtual machines"
msgstr ""
-"Impossibile arrestare la macchina host poiché sono presenti macchine virtuali in esecuzione"
+"Impossibile arrestare la macchina host poiché sono presenti macchine "
+"virtuali in esecuzione"
msgid "Unable to reboot host machine as there are running virtual machines"
msgstr ""
-"Impossibile riavviare la macchina host poiché sono presenti macchine virtuali in esecuzione"
+"Impossibile riavviare la macchina host poiché sono presenti macchine "
+"virtuali in esecuzione"
#, python-format
msgid "Node device '%(name)s' not found"
-msgstr ""
-"Dispositivo nodo '%(name)s' non trovato"
+msgstr "Dispositivo nodo '%(name)s' non trovato"
msgid "Conflicting flag filters specified."
-msgstr ""
-"Sono stati specificati dei filtri indicatore in conflitto."
+msgstr "Sono stati specificati dei filtri indicatore in conflitto."
msgid "No packages marked for update"
-msgstr ""
-"Nessun pacchetto contrassegnato per l'aggiornamento"
+msgstr "Nessun pacchetto contrassegnato per l'aggiornamento"
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr ""
-"Il pacchetto %(name)s non è contrassegnato per l'aggiornamento. "
+msgstr "Il pacchetto %(name)s non è contrassegnato per l'aggiornamento. "
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
msgstr ""
-"Errore durante il richiamo dei pacchetti contrassegnati per l'aggiornamento. Dettagli: %(err)s"
+"Errore durante il richiamo dei pacchetti contrassegnati per l'aggiornamento. "
+"Dettagli: %(err)s"
msgid "There is no compatible package manager for this system."
-msgstr ""
-"Non è presente un gestore pacchetti compatibile per questo sistema."
+msgstr "Non è presente un gestore pacchetti compatibile per questo sistema."
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr ""
-"Impossibile trovare %(item)s nell'archivio dati"
+msgstr "Impossibile trovare %(item)s nell'archivio dati"
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr ""
-"URI non valido %(uri)s"
+msgstr "URI non valido %(uri)s"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
@@ -1191,31 +1091,27 @@ msgstr ""
"Timeout durante l'esecuzione del comando '%(cmd)s' dopo %(seconds)s secondi"
msgid "Unable to choose a virtual machine name"
-msgstr ""
-"Impossibile scegliere un nome di macchina virtuale"
+msgstr "Impossibile scegliere un nome di macchina virtuale"
#, python-format
msgid "Invalid data value '%(value)s'"
-msgstr ""
-"Valore dati non valido '%(value)s'"
+msgstr "Valore dati non valido '%(value)s'"
#, python-format
msgid "Invalid data unit '%(unit)s'"
-msgstr ""
-"Unità dati non valida '%(unit)s'"
+msgstr "Unità dati non valida '%(unit)s'"
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
-msgstr ""
-"Tipo di memoria non valido. Tipi supportati: 'cdrom', 'disk'"
+msgstr "Tipo di memoria non valido. Tipi supportati: 'cdrom', 'disk'"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
msgstr ""
-"Il percorso '%(value)s' non è un percorso locale/remoto valido per il dispositivo"
+"Il percorso '%(value)s' non è un percorso locale/remoto valido per il "
+"dispositivo"
msgid "Only CDROM path can be update."
-msgstr ""
-"È possibile aggiornare solo il percorso CDROM."
+msgstr "È possibile aggiornare solo il percorso CDROM."
#, python-format
msgid ""
@@ -1232,24 +1128,21 @@ msgstr ""
#, python-format
msgid "Error while updating storage device: %(error)s"
-msgstr ""
-"Errore durante l'aggiornamento del dispositivo di memoria: %(error)s"
+msgstr "Errore durante l'aggiornamento del dispositivo di memoria: %(error)s"
#, python-format
msgid "Error while removing storage device: %(error)s"
-msgstr ""
-"Errore durante la rimozione del dispositivo di memoria: %(error)s"
+msgstr "Errore durante la rimozione del dispositivo di memoria: %(error)s"
msgid "Do not support IDE device hot plug"
-msgstr ""
-"Non supportare hot plug dispositivo IDE"
+msgstr "Non supportare hot plug dispositivo IDE"
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
"disk"
msgstr ""
-"Specificare il tipo e il percorso oppure il tipo e il pool/volume per aggiungere un nuovo disco di macchina "
-"virtuale"
+"Specificare il tipo e il percorso oppure il tipo e il pool/volume per "
+"aggiungere un nuovo disco di macchina virtuale"
msgid "Specify path to update virtual machine disk"
msgstr ""
@@ -1258,23 +1151,24 @@ msgstr ""
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
msgstr ""
-"Il tipo di controller %(type)s ha raggiunto il limite di %(limit)s dispositivi"
+"Il tipo di controller %(type)s ha raggiunto il limite di %(limit)s "
+"dispositivi"
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
msgstr ""
-"Impossibile richiamare le informazioni del percorso disco per il pool/volume fornito: %(error)s"
+"Impossibile richiamare le informazioni del percorso disco per il pool/volume "
+"fornito: %(error)s"
msgid "Volume already in use by other virtual machine."
-msgstr ""
-"Il volume è già utilizzato da un'altra macchina virtuale."
+msgstr "Il volume è già utilizzato da un'altra macchina virtuale."
msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
msgstr ""
-"È possibile specificare solo uno tra percorso o pool/volume per aggiungere un nuovo"
-"disco di macchina virtuale"
+"È possibile specificare solo uno tra percorso o pool/volume per aggiungere "
+"un nuovodisco di macchina virtuale"
#, python-format
msgid ""
@@ -1285,83 +1179,71 @@ msgstr ""
"%(type)s"
msgid "YUM Repository ID must be one word only string."
-msgstr ""
-"L'ID repository YUM deve essere una stringa di una sola parola."
+msgstr "L'ID repository YUM deve essere una stringa di una sola parola."
msgid "Repository URL must be an http://, ftp:// or file:// URL."
-msgstr ""
-"L'URL del repository deve essere http://, ftp:// o file:// URL."
+msgstr "L'URL del repository deve essere http://, ftp:// o file:// URL."
msgid ""
"Repository configuration is a dictionary with specific values according to "
"repository type."
msgstr ""
-"La configurazione del repository è un dizionario con valori specifici in base al "
-"tipo di repository."
+"La configurazione del repository è un dizionario con valori specifici in "
+"base al tipo di repository."
msgid "Distribution to DEB repository must be a string"
-msgstr ""
-"La distribuzione al repository DEB deve essere una stringa"
+msgstr "La distribuzione al repository DEB deve essere una stringa"
msgid "Components to DEB repository must be listed in a array"
-msgstr ""
-"I componenti per il repository DEB devono essere elencati in un array"
+msgstr "I componenti per il repository DEB devono essere elencati in un array"
msgid "Components to DEB repository must be a string"
-msgstr ""
-"I componenti per il repository DEB devono essere una stringa"
+msgstr "I componenti per il repository DEB devono essere una stringa"
msgid "Mirror list to repository must be a string"
msgstr ""
"L'elenco di elementi speculari per il repository deve essere una stringa"
msgid "YUM Repository name must be string."
-msgstr ""
-"Il nome del repository YUM deve essere una stringa."
+msgstr "Il nome del repository YUM deve essere una stringa."
msgid "GPG check must be a boolean value."
-msgstr ""
-"Il controllo GPG deve essere un valore booleano."
+msgstr "Il controllo GPG deve essere un valore booleano."
msgid "GPG key must be a URL pointing to the ASCII-armored file."
-msgstr ""
-"La chiave GPG deve essere un URL che punta al file blindato ASCII."
+msgstr "La chiave GPG deve essere un URL che punta al file blindato ASCII."
#, python-format
msgid "Could not update repository %(repo_id)s."
-msgstr ""
-"Impossibile aggiornare il repository %(repo_id)s."
+msgstr "Impossibile aggiornare il repository %(repo_id)s."
#, python-format
msgid "Repository %(repo_id)s does not exist."
-msgstr ""
-"Il repository %(repo_id)s non esiste."
+msgstr "Il repository %(repo_id)s non esiste."
msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
"update a YUM repository."
msgstr ""
-"Specificare l'URL di base del repository, l'elenco di elementi speculari o metalink per poter creare o "
-"aggiornare un repository YUM."
+"Specificare l'URL di base del repository, l'elenco di elementi speculari o "
+"metalink per poter creare o aggiornare un repository YUM."
msgid "Repository management tool was not recognized for your system."
msgstr ""
-"Lo strumento di gestione del repository non è stato riconosciuto per il sistema."
+"Lo strumento di gestione del repository non è stato riconosciuto per il "
+"sistema."
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr ""
-"Il repository %(repo_id)s è già abilitato."
+msgstr "Il repository %(repo_id)s è già abilitato."
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr ""
-"Il repository %(repo_id)s è già disabilitato."
+msgstr "Il repository %(repo_id)s è già disabilitato."
#, python-format
msgid "Could not remove repository %(repo_id)s."
-msgstr ""
-"Impossibile rimuovere il repository %(repo_id)s."
+msgstr "Impossibile rimuovere il repository %(repo_id)s."
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
@@ -1370,30 +1252,26 @@ msgstr ""
msgid "Specify repository distribution in order to create a DEB repository."
msgstr ""
-"Specificare la distribuzione del repository per poter creare un repository DEB."
+"Specificare la distribuzione del repository per poter creare un repository "
+"DEB."
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr ""
-"Impossibile abilitare il repository %(repo_id)s."
+msgstr "Impossibile abilitare il repository %(repo_id)s."
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr ""
-"Impossibile disabilitare il repository %(repo_id)s."
+msgstr "Impossibile disabilitare il repository %(repo_id)s."
msgid "YUM Repository ID already exists"
-msgstr ""
-"ID repository YUM già esistente"
+msgstr "ID repository YUM già esistente"
msgid "YUM Repository name must be a string"
-msgstr ""
-"Il nome del repository YUM deve essere una stringa"
+msgstr "Il nome del repository YUM deve essere una stringa"
#, python-format
msgid "Unable to list repositories. Details: '%(err)s'"
-msgstr ""
-"Impossibile elencare i repository. Dettagli: '%(err)s'"
+msgstr "Impossibile elencare i repository. Dettagli: '%(err)s'"
#, python-format
msgid "Unable to retrieve repository information. Details: '%(err)s'"
@@ -1402,669 +1280,542 @@ msgstr ""
#, python-format
msgid "Unable to add repository. Details: '%(err)s'"
-msgstr ""
-"Impossibile aggiungere il repository. Dettagli: '%(err)s'"
+msgstr "Impossibile aggiungere il repository. Dettagli: '%(err)s'"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr ""
-"Impossibile rimuovere il repository. Dettagli: '%(err)s'"
+msgstr "Impossibile rimuovere il repository. Dettagli: '%(err)s'"
#, python-format
msgid ""
"Configuration items: '%(items)s' are not supported by repository manager"
msgstr ""
-"Elementi di configurazione: '%(items)s' non supportati dal gestore repository "
+"Elementi di configurazione: '%(items)s' non supportati dal gestore "
+"repository "
msgid "Repository metalink must be an http://, ftp:// or file:// URL."
-msgstr ""
-"Il metalink del repository deve essere http://, ftp:// o file:// URL."
+msgstr "Il metalink del repository deve essere http://, ftp:// o file:// URL."
msgid "Cannot specify mirrorlist and metalink at the same time."
msgstr ""
-"Impossibile specificare contemporaneamente elenco di elementi speculari e metalink. "
+"Impossibile specificare contemporaneamente elenco di elementi speculari e "
+"metalink. "
#, python-format
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
msgstr ""
-"La macchina virtuale '%(vm)s' deve essere arrestata prima di poterne creare l'istantanea. "
+"La macchina virtuale '%(vm)s' deve essere arrestata prima di poterne creare "
+"l'istantanea. "
#, python-format
msgid ""
"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Impossibile creare l'istantanea '%(name)s' sulla macchina virtuale '%(vm)s'. Dettagli: "
-"%(err)s"
+"Impossibile creare l'istantanea '%(name)s' sulla macchina virtuale '%(vm)s'. "
+"Dettagli: %(err)s"
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
-msgstr ""
-"L'istantanea '%(name)s' non esiste sulla macchina virtuale '%(vm)s'."
+msgstr "L'istantanea '%(name)s' non esiste sulla macchina virtuale '%(vm)s'."
#, python-format
msgid ""
"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Impossibile richiamare l'istantanea '%(name)s' sulla macchina virtuale '%(vm)s'. Dettagli: "
-"%(err)s"
+"Impossibile richiamare l'istantanea '%(name)s' sulla macchina virtuale "
+"'%(vm)s'. Dettagli: %(err)s"
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
msgstr ""
-"Impossibile elencare le istantanee sulla macchina virtuale '%(vm)s'. Dettagli: %(err)s"
+"Impossibile elencare le istantanee sulla macchina virtuale '%(vm)s'. "
+"Dettagli: %(err)s"
#, python-format
msgid ""
"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Impossibile eliminare l'istantanea '%(name)s' sulla macchina virtuale '%(vm)s'. Dettagli: "
-"%(err)s"
+"Impossibile eliminare l'istantanea '%(name)s' sulla macchina virtuale "
+"'%(vm)s'. Dettagli: %(err)s"
#, python-format
msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Impossibile richiamare l'istantanea corrente sulla macchina virtuale '%(vm)s'. Dettagli: "
-"%(err)s"
+"Impossibile richiamare l'istantanea corrente sulla macchina virtuale "
+"'%(vm)s'. Dettagli: %(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
msgstr ""
-"Impossibile invertire la macchina virtuale '%(vm)s' alla istantanea '%(name)s'. Dettagli: "
-"%(err)s"
+"Impossibile invertire la macchina virtuale '%(vm)s' alla istantanea "
+"'%(name)s'. Dettagli: %(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
-"Impossibile creare l'istantanea della macchina virtuale '%(vm)s' perché contiene un "
-"disco con formato '%(format)s'; solo 'qcow2' è supportato."
+"Impossibile creare l'istantanea della macchina virtuale '%(vm)s' perché "
+"contiene un disco con formato '%(format)s'; solo 'qcow2' è supportato."
msgid "The number of vCPUs is too large for this system."
-msgstr ""
-"Il numero di vCPU è troppo grande per questo sistema. "
+msgstr "Il numero di vCPU è troppo grande per questo sistema. "
msgid "Invalid vCPU/topology combination."
-msgstr ""
-"Combinazione vCPU/topologia non valida. "
+msgstr "Combinazione vCPU/topologia non valida. "
msgid "This host (or current configuration) does not allow CPU topology."
-msgstr ""
-"Questo host (o configurazione corrente) non consente la topologia CPU."
+msgstr "Questo host (o configurazione corrente) non consente la topologia CPU."
msgid "ERROR CODE"
-msgstr ""
-"CODICE DI ERRORE"
+msgstr "CODICE DI ERRORE"
msgid "REASON"
-msgstr ""
-"CAUSA"
+msgstr "CAUSA"
msgid "STACK"
-msgstr ""
-"STACK"
+msgstr "STACK"
msgid "Go to Homepage"
-msgstr ""
-"Vai alla home page"
+msgstr "Vai alla home page"
msgid "Create a New Virtual Machine"
-msgstr ""
-"Crea una nuova macchina virtuale"
+msgstr "Crea una nuova macchina virtuale"
msgid "Virtual Machine Name"
-msgstr ""
-"Nome macchina virtuale"
+msgstr "Nome macchina virtuale"
msgid ""
"The name used to identify the virtual machine. If omitted, a name will be "
"chosen based on the template used."
msgstr ""
-"Il nome utilizzato per identificare la macchina virtuale. Se il nome viene omesso "
-"ne verrà scelto uno in base al modello utilizzato."
+"Il nome utilizzato per identificare la macchina virtuale. Se il nome viene "
+"omesso ne verrà scelto uno in base al modello utilizzato."
msgid "Template"
-msgstr ""
-"Modello"
+msgstr "Modello"
msgid "Please create a template first."
-msgstr ""
-"Creare prima un modello."
+msgstr "Creare prima un modello."
msgid "Create a Template"
-msgstr ""
-"Crea un modello"
+msgstr "Crea un modello"
msgid "Please choose a template."
-msgstr ""
-"Scegliere un modello."
+msgstr "Scegliere un modello."
msgid "OS"
-msgstr ""
-"SO"
+msgstr "SO"
msgid "OS Version"
-msgstr ""
-"Versione SO"
+msgstr "Versione SO"
msgid "CPUS"
-msgstr ""
-"CPUS"
+msgstr "CPUS"
msgid "Memory"
-msgstr ""
-"Memoria"
+msgstr "Memoria"
msgid "Create"
-msgstr ""
-"Crea"
+msgstr "Crea"
msgid "Creating..."
-msgstr ""
-"Creazione..."
+msgstr "Creazione..."
msgid "Edit Guest"
-msgstr ""
-"Modifica macchina guest"
+msgstr "Modifica macchina guest"
msgid "General"
-msgstr ""
-"Generale"
+msgstr "Generale"
msgid "Storage"
-msgstr ""
-"Memoria"
+msgstr "Memoria"
msgid "Interface"
-msgstr ""
-"Interfaccia"
+msgstr "Interfaccia"
msgid "Permission"
-msgstr ""
-"Autorizzazione"
+msgstr "Autorizzazione"
msgid "Host PCI Device"
-msgstr ""
-"Dispositivo PCI host"
+msgstr "Dispositivo PCI host"
msgid "Snapshot"
-msgstr ""
-"Istantanea"
+msgstr "Istantanea"
msgid "Name"
-msgstr ""
-"Nome"
+msgstr "Nome"
msgid "CPUs"
-msgstr ""
-"CPU"
+msgstr "CPU"
msgid "Memory (MB)"
-msgstr ""
-"Memoria (MB)"
+msgstr "Memoria (MB)"
msgid "Icon"
-msgstr ""
-"Icona"
+msgstr "Icona"
msgid "Device"
-msgstr ""
-"Unità"
+msgstr "Unità"
msgid "Path"
-msgstr ""
-"Percorso"
+msgstr "Percorso"
msgid "Network"
-msgstr ""
-"Rete"
+msgstr "Rete"
msgid "Type"
-msgstr ""
-"Tipo"
+msgstr "Tipo"
msgid "MAC Address"
-msgstr ""
-"Indirizzo MAC"
+msgstr "Indirizzo MAC"
msgid "Available system users and groups"
-msgstr ""
-"Utenti e gruppi di sistema disponibili"
+msgstr "Utenti e gruppi di sistema disponibili"
msgid "Selected system users and groups"
-msgstr ""
-"Utenti e gruppi di sistema selezionati"
+msgstr "Utenti e gruppi di sistema selezionati"
msgid "User"
-msgstr ""
-"Utente "
+msgstr "Utente "
msgid "All"
-msgstr ""
-"Tutti"
+msgstr "Tutti"
msgid "To Add"
-msgstr ""
-"Da aggiungere"
+msgstr "Da aggiungere"
msgid "Added"
-msgstr ""
-"Aggiunto"
+msgstr "Aggiunto"
msgid "filter"
-msgstr ""
-"filtro"
+msgstr "filtro"
msgid "Product"
-msgstr ""
-"Prodotto"
+msgstr "Prodotto"
msgid "Vendor"
-msgstr ""
-"Fornitore"
+msgstr "Fornitore"
msgid "Created"
-msgstr ""
-"Creato"
+msgstr "Creato"
msgid "Save"
-msgstr ""
-"Salva"
+msgstr "Salva"
msgid "Replace"
-msgstr ""
-"Sostituisci"
+msgstr "Sostituisci"
msgid "Detach"
-msgstr ""
-"Scollega"
+msgstr "Scollega"
msgid "Cancel"
-msgstr ""
-"Annulla"
+msgstr "Annulla"
msgid "revert"
-msgstr ""
-"Inverti"
+msgstr "Inverti"
msgid "Add a Storage Device to VM"
-msgstr ""
-"Aggiungi un dispositivo di memoria alla VM"
+msgstr "Aggiungi un dispositivo di memoria alla VM"
msgid "Device Type"
-msgstr ""
-"Tipo dispositivo"
+msgstr "Tipo dispositivo"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
msgstr ""
"Il tipo di dispositivo. Attualmente, sono supportati \"cdrom\" e \"disk\"."
msgid "Storage Pool"
-msgstr ""
-"Pool di memoria"
+msgstr "Pool di memoria"
msgid "Storage pool which volume located in"
-msgstr ""
-"Pool di memoria in cui si trova il volume"
+msgstr "Pool di memoria in cui si trova il volume"
msgid "Storage Volume"
-msgstr ""
-"Volume di memoria"
+msgstr "Volume di memoria"
msgid "Storage volume to be attached"
-msgstr ""
-"Volume di memoria oggetto del collegamento"
+msgstr "Volume di memoria oggetto del collegamento"
msgid "File Path"
-msgstr ""
-"Percorso file"
+msgstr "Percorso file"
msgid "The ISO file path in the server for CDROM."
-msgstr ""
-"Il percorso file ISO nel server per CDROM."
+msgstr "Il percorso file ISO nel server per CDROM."
msgid "Attach"
-msgstr ""
-"Allega"
+msgstr "Allega"
msgid "Start"
-msgstr ""
-"Avvia"
+msgstr "Avvia"
msgid "Reset"
-msgstr ""
-"Reimposta"
+msgstr "Reimposta"
msgid "Pause"
-msgstr ""
-"In pausa"
+msgstr "In pausa"
msgid "Resume"
-msgstr ""
-"Riprendi"
+msgstr "Riprendi"
msgid "Power Off"
-msgstr ""
-"Spegni"
+msgstr "Spegni"
msgid "Actions"
-msgstr ""
-"Azioni"
+msgstr "Azioni"
msgid "Connect"
-msgstr ""
-"Connetti"
+msgstr "Connetti"
msgid "Clone"
-msgstr ""
-"Clona"
+msgstr "Clona"
msgid "Edit"
-msgstr ""
-"Modifica"
+msgstr "Modifica"
msgid "Shut Down"
-msgstr ""
-"Arresta"
+msgstr "Arresta"
msgid "Delete"
-msgstr ""
-"Elimina"
+msgstr "Elimina"
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
-"Il nome utente o la password immessi non sono corretti. Ripetere l'operazione."
+"Il nome utente o la password immessi non sono corretti. Ripetere "
+"l'operazione."
msgid "This field is required."
-msgstr ""
-"Questo campo è obbligatorio."
+msgstr "Questo campo è obbligatorio."
msgid "Log in"
-msgstr ""
-"Accedi"
+msgstr "Accedi"
msgid "Logging in..."
-msgstr ""
-"Accesso in corso..."
+msgstr "Accesso in corso..."
msgid "Host"
-msgstr ""
-"Host"
+msgstr "Host"
msgid "Guests"
-msgstr ""
-"Guest"
+msgstr "Guest"
msgid "Templates"
-msgstr ""
-"Modelli"
+msgstr "Modelli"
msgid "Failed to get application configuration"
-msgstr ""
-"Richiamo della configurazione dell'applicazione non riuscito"
+msgstr "Richiamo della configurazione dell'applicazione non riuscito"
msgid "This is not a valid Linux path"
-msgstr ""
-"Non è un percorso Linux valido"
+msgstr "Non è un percorso Linux valido"
msgid "This is not a valid URL."
-msgstr ""
-"Non è un URL valido."
+msgstr "Non è un URL valido."
msgid "No such data available."
-msgstr ""
-"Dati indicati non disponibili."
+msgstr "Dati indicati non disponibili."
msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"Impossibile contattare il sistema host. Verificare che il sistema host sia attivo e che "
-"abbia la connettività di rete. Risposta alla richiesta HTTP %1. "
+"Impossibile contattare il sistema host. Verificare che il sistema host sia "
+"attivo e che abbia la connettività di rete. Risposta alla richiesta HTTP %1. "
msgid "Unable to read file."
-msgstr ""
-"Impossibile leggere il file."
+msgstr "Impossibile leggere il file."
msgid "Error while uploading file."
-msgstr ""
-"Errore durante il caricamento del file."
+msgstr "Errore durante il caricamento del file."
msgid "Delete Confirmation"
-msgstr ""
-"Conferma eliminazione"
+msgstr "Conferma eliminazione"
msgid "OK"
-msgstr ""
-"OK"
+msgstr "OK"
msgid "Confirm"
-msgstr ""
-"Conferma"
+msgstr "Conferma"
msgid "Warning"
-msgstr ""
-"Avvertenza"
+msgstr "Avvertenza"
msgid "Cloning..."
-msgstr ""
-"Clonazione..."
+msgstr "Clonazione..."
msgid "Loading..."
-msgstr ""
-"Caricamento in corso..."
+msgstr "Caricamento in corso..."
msgid "An error occurred while retrieving system information."
msgstr ""
"Si è verificato un errore durante il richiamo delle informazioni di sistema. "
msgid "Retry"
-msgstr ""
-"Riprova"
+msgstr "Riprova"
msgid "Detailed message:"
-msgstr ""
-"Messaggio dettagliato:"
+msgstr "Messaggio dettagliato:"
msgid "No ISO found"
-msgstr ""
-"Nessun file ISO trovato"
+msgstr "Nessun file ISO trovato"
msgid "This is not a valid ISO file."
-msgstr ""
-"Non è un file ISO valido."
+msgstr "Non è un file ISO valido."
msgid "This may take a long time. Do you want to continue?"
-msgstr ""
-"Questa operazione può richiedere del tempo. Si desidera continuare?"
+msgstr "Questa operazione può richiedere del tempo. Si desidera continuare?"
msgid "This will permanently delete the template. Would you like to continue?"
-msgstr ""
-"L'azione eliminerà permanentemente il modello. Si desidera continuare?"
+msgstr "L'azione eliminerà permanentemente il modello. Si desidera continuare?"
msgid "Unable to shut down system as there are some virtual machines running!"
msgstr ""
-"Impossibile arrestare il sistema poiché sono in esecuzione alcune macchine virtuali."
+"Impossibile arrestare il sistema poiché sono in esecuzione alcune macchine "
+"virtuali."
msgid "Max:"
-msgstr ""
-"Massimo:"
+msgstr "Massimo:"
msgid "Utilization"
-msgstr ""
-"Utilizzo"
+msgstr "Utilizzo"
msgid "Available"
-msgstr ""
-"Disponibile"
+msgstr "Disponibile"
msgid "Read Rate"
-msgstr ""
-"Velocità di lettura"
+msgstr "Velocità di lettura"
msgid "Write Rate"
-msgstr ""
-"Velocità di scrittura"
+msgstr "Velocità di scrittura"
msgid "Received"
-msgstr ""
-"Ricevuti"
+msgstr "Ricevuti"
msgid "Sent"
-msgstr ""
-"Inviati"
+msgstr "Inviati"
msgid ""
"Shutting down or restarting host will cause unsaved work lost. Continue to "
"shut down/restarting?"
msgstr ""
-"L'arresto o il riavvio dell'host provocherà la perdita del lavoro non salvato. Continuare con "
-"l'arresto o il riavvio?"
+"L'arresto o il riavvio dell'host provocherà la perdita del lavoro non "
+"salvato. Continuare con l'arresto o il riavvio?"
msgid ""
"Repository will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"Il repository verrà rimosso permanentemente e non potrà essere ripristinato. Si desidera "
-"continuare?"
+"Il repository verrà rimosso permanentemente e non potrà essere ripristinato. "
+"Si desidera continuare?"
msgid "Repositories"
-msgstr ""
-"Repository"
+msgstr "Repository"
msgid "ID"
-msgstr ""
-"ID"
+msgstr "ID"
msgid "Base URL"
-msgstr ""
-"URL di base"
+msgstr "URL di base"
msgid "Is Mirror"
-msgstr ""
-"È speculare"
+msgstr "È speculare"
msgid "URL Args"
-msgstr ""
-"Argomenti URL"
+msgstr "Argomenti URL"
msgid "Enabled"
-msgstr ""
-"Abilitato"
+msgstr "Abilitato"
msgid "GPG Check"
-msgstr ""
-"Controllo GPG"
+msgstr "Controllo GPG"
msgid "GPG Key"
-msgstr ""
-"Chiave GPG"
+msgstr "Chiave GPG"
msgid "Add"
-msgstr ""
-"Aggiungi"
+msgstr "Aggiungi"
msgid "Remove"
-msgstr ""
-"Rimuovi"
+msgstr "Rimuovi"
msgid "Enable"
-msgstr ""
-"Abilita"
+msgstr "Abilita"
msgid "Disable"
-msgstr ""
-"Disabilita"
+msgstr "Disabilita"
msgid "Software Updates"
-msgstr ""
-"Aggiornamenti del software"
+msgstr "Aggiornamenti del software"
msgid "Package Name"
-msgstr ""
-"Nome pacchetto"
+msgstr "Nome pacchetto"
msgid "Version"
-msgstr ""
-"Versione"
+msgstr "Versione"
msgid "Architecture"
-msgstr ""
-"Architettura"
+msgstr "Architettura"
msgid "Repository"
-msgstr ""
-"Repository"
+msgstr "Repository"
msgid "Update All"
-msgstr ""
-"Aggiorna tutto"
+msgstr "Aggiorna tutto"
msgid "Updating..."
-msgstr ""
-"Aggiornamento in corso..."
+msgstr "Aggiornamento in corso..."
msgid "Failed to retrieve packages update information."
msgstr ""
"Richiamo delle informazioni di aggiornamento dei pacchetti non riuscito."
msgid "Failed to update package(s)."
-msgstr ""
-"Aggiornamento dei pacchetti non riuscito."
+msgstr "Aggiornamento dei pacchetti non riuscito."
msgid ""
"Debug report will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"Il report del debug verrà rimosso permanentemente e non potrà essere ripristinato. Si desidera "
-"continuare?"
+"Il report del debug verrà rimosso permanentemente e non potrà essere "
+"ripristinato. Si desidera continuare?"
msgid "Debug Reports"
-msgstr ""
-"Report di debug"
+msgstr "Report di debug"
msgid "Generated Time"
-msgstr ""
-"Ora di creazione"
+msgstr "Ora di creazione"
msgid "Generate"
-msgstr ""
-"Crea"
+msgstr "Crea"
msgid "Generating..."
-msgstr ""
-"Creazione in corso..."
+msgstr "Creazione in corso..."
msgid "Rename"
-msgstr ""
-"Ridenomina"
+msgstr "Ridenomina"
msgid "Download"
-msgstr ""
-"Scarica"
+msgstr "Scarica"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
"hyphen ('-')."
msgstr ""
-"Il nome del report può contenere solo lettere, cifre, sottolineature ('_') e/o "
-"trattini ('-')."
+"Il nome del report può contenere solo lettere, cifre, sottolineature ('_') e/"
+"o trattini ('-')."
msgid "Pending..."
-msgstr ""
-"In sospeso..."
+msgstr "In sospeso..."
msgid "Report name is the same as the original one."
-msgstr ""
-"Il nome report è uguale a quello originale. "
+msgstr "Il nome report è uguale a quello originale. "
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
@@ -2074,133 +1825,117 @@ msgstr ""
"non è reversibile. Si desidera continuare?"
msgid "Power off Confirmation"
-msgstr ""
-"Conferma spegnimento"
+msgstr "Conferma spegnimento"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
"cache in the guest. Would you like to continue?"
msgstr ""
-"Questa azione può produrre dei risultati indesiderabili, ad esempio una cache di disco "
-"non ripulita nella macchina guest. Si desidera continuare?"
+"Questa azione può produrre dei risultati indesiderabili, ad esempio una "
+"cache di disco non ripulita nella macchina guest. Si desidera continuare?"
msgid "Reset Confirmation"
-msgstr ""
-"Conferma reimpostazione"
+msgstr "Conferma reimpostazione"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
"Would you like to continue?"
msgstr ""
-"C'è un rischio di perdita di dati causato dalla reimpostazione senza l'arresto del sistema operativo della macchina guest. "
-"Si desidera continuare?"
+"C'è un rischio di perdita di dati causato dalla reimpostazione senza "
+"l'arresto del sistema operativo della macchina guest. Si desidera continuare?"
msgid "Shut Down Confirmation"
-msgstr ""
-"Conferma dell'arresto"
+msgstr "Conferma dell'arresto"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
msgstr ""
-"Notare che il sistema operativo della macchina guest può ignorare questa richiesta. Si desidera continuare?"
+"Notare che il sistema operativo della macchina guest può ignorare questa "
+"richiesta. Si desidera continuare?"
msgid "Virtual Machine delete Confirmation"
-msgstr ""
-"Conferma di eliminazione della macchina virtuale"
+msgstr "Conferma di eliminazione della macchina virtuale"
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
msgstr ""
-"Questa macchina virtuale non è persistente. Lo spegnimento la eliminerà. Continuare?"
+"Questa macchina virtuale non è persistente. Lo spegnimento la eliminerà. "
+"Continuare?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
"default storage pool. The same will happen when the target pool does not "
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
-"Quando la macchina guest di destinazione ha volumi SCSI o iSCSI, essi verranno clonati sul"
-"pool di memoria predefinito. Lo stesso accadrà se il pool di destinazione non"
-"ha spazio sufficiente per clonare i volumi. Si desidera continuare?"
+"Quando la macchina guest di destinazione ha volumi SCSI o iSCSI, essi "
+"verranno clonati sulpool di memoria predefinito. Lo stesso accadrà se il "
+"pool di destinazione nonha spazio sufficiente per clonare i volumi. Si "
+"desidera continuare?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
msgstr ""
-"Il CDROM verrà scollegato permanentemente e non sarà possibile ricollegarlo. Continuare con "
-"lo scollegamento?"
+"Il CDROM verrà scollegato permanentemente e non sarà possibile ricollegarlo. "
+"Continuare con lo scollegamento?"
msgid "Attaching..."
-msgstr ""
-"Collegamento in corso..."
+msgstr "Collegamento in corso..."
msgid "Replacing..."
-msgstr ""
-"Sostituzione in corso..."
+msgstr "Sostituzione in corso..."
msgid "Successfully attached!"
-msgstr ""
-"Collegamento riuscito."
+msgstr "Collegamento riuscito."
msgid "Successfully replaced!"
-msgstr ""
-"Sostituzione riuscita."
+msgstr "Sostituzione riuscita."
msgid "Successfully detached!"
-msgstr ""
-"Scollegamento riuscito."
+msgstr "Scollegamento riuscito."
msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
msgstr ""
-"Il disco verrà scollegato permanentemente e sarà possibile ricollegarlo. Continuare con "
-"lo scollegamento?"
+"Il disco verrà scollegato permanentemente e sarà possibile ricollegarlo. "
+"Continuare con lo scollegamento?"
msgid "interface:"
-msgstr ""
-"interfaccia:"
+msgstr "interfaccia:"
msgid "address:"
-msgstr ""
-"indirizzo:"
+msgstr "indirizzo:"
msgid "link_type:"
-msgstr ""
-"tipo_link:"
+msgstr "tipo_link:"
msgid "block:"
-msgstr ""
-"blocco:"
+msgstr "blocco:"
msgid "drive_type:"
-msgstr ""
-"tipo_drive:"
+msgstr "tipo_drive:"
msgid "model:"
-msgstr ""
-"modello:"
+msgstr "modello:"
msgid "Affected devices:"
-msgstr ""
-"Dispositivi influenzati:"
+msgstr "Dispositivi influenzati:"
msgid "The VLAN id must be between 1 and 4094."
-msgstr ""
-"L'ID VLAN deve essere compreso tra 1 e 4094."
+msgstr "L'ID VLAN deve essere compreso tra 1 e 4094."
msgid "unavailable"
-msgstr ""
-"non disponibile"
+msgstr "non disponibile"
msgid ""
"This action will interrupt network connectivity for any virtual machine that "
"depend on this network."
msgstr ""
-"L'azione interromperà la connettività di rete per qualsiasi macchina virtuale che "
-"dipende da questa rete."
+"L'azione interromperà la connettività di rete per qualsiasi macchina "
+"virtuale che dipende da questa rete."
msgid "Create a network"
-msgstr ""
-"Crea una rete"
+msgstr "Crea una rete"
msgid ""
"This network is not persistent. Instead of stop, this action will "
@@ -2213,84 +1948,70 @@ msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
-"La tag VLAN con bridge potrebbe non funzionare bene con NetworkManager abilitato. Si "
-"dovrebbe prendere in considerazione la sua disabilitazione. "
+"La tag VLAN con bridge potrebbe non funzionare bene con NetworkManager "
+"abilitato. Si dovrebbe prendere in considerazione la sua disabilitazione. "
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
msgstr ""
-"L'azione eliminerà permanentemente il pool di memoria. Si desidera continuare?"
+"L'azione eliminerà permanentemente il pool di memoria. Si desidera "
+"continuare?"
msgid "This storage pool is empty."
-msgstr ""
-"Il pool di memoria è vuoto."
+msgstr "Il pool di memoria è vuoto."
msgid ""
"It will format your disk and you will loose any data in there, are you sure "
"to continue? "
msgstr ""
-"Il disco verrà formattato e tutti i dati su di esso andranno persi, sicuri di voler "
-"continuare? "
+"Il disco verrà formattato e tutti i dati su di esso andranno persi, sicuri "
+"di voler continuare? "
msgid "SCSI Fibre Channel"
-msgstr ""
-"Canale a fibre ottiche SCSI"
+msgstr "Canale a fibre ottiche SCSI"
msgid "No SCSI adapters found."
-msgstr ""
-"Nessun adattatore SCSI trovato."
+msgstr "Nessun adattatore SCSI trovato."
msgid "Loading iSCSI targets..."
-msgstr ""
-"Caricamento delle destinazioni iSCSI..."
+msgstr "Caricamento delle destinazioni iSCSI..."
msgid "No iSCSI found. Please input one."
-msgstr ""
-"iSCSI non trovato. Immetterne uno."
+msgstr "iSCSI non trovato. Immetterne uno."
msgid "Failed to load iSCSI targets."
-msgstr ""
-"Impossibile caricare le destinazioni iSCSI."
+msgstr "Impossibile caricare le destinazioni iSCSI."
msgid "The storage pool name can not be blank."
-msgstr ""
-"Il campo per il nome del pool di memoria non può essere vuoto."
+msgstr "Il campo per il nome del pool di memoria non può essere vuoto."
msgid "The storage pool path can not be blank."
-msgstr ""
-"Il campo per il percorso del pool di memoria non può essere vuoto."
+msgstr "Il campo per il percorso del pool di memoria non può essere vuoto."
msgid "NFS server mount path can not be blank."
msgstr ""
"Il campo per il percorso di montaggio del server NFS non può essere vuoto."
msgid "Invalid NFS mount path."
-msgstr ""
-"Percorso di montaggio NFS non valido."
+msgstr "Percorso di montaggio NFS non valido."
msgid "No logical device selected."
-msgstr ""
-"Nessun dispositivo logico selezionato."
+msgstr "Nessun dispositivo logico selezionato."
msgid "The iSCSI target can not be blank."
-msgstr ""
-"Il campo per la destinazione iSCSI non può essere vuoto."
+msgstr "Il campo per la destinazione iSCSI non può essere vuoto."
msgid "Server name can not be blank."
-msgstr ""
-"Il campo per il nome del server non può essere vuoto."
+msgstr "Il campo per il nome del server non può essere vuoto."
msgid "This is not a valid Server Name or IP. Please, modify it."
-msgstr ""
-"Nome server o IP non validi. Modificarli."
+msgstr "Nome server o IP non validi. Modificarli."
msgid "Looking for available partitions ..."
-msgstr ""
-"Ricerca di partizioni disponibili in corso..."
+msgstr "Ricerca di partizioni disponibili in corso..."
msgid "No available partitions found."
-msgstr ""
-"Nessuna partizione disponibile trovata."
+msgstr "Nessuna partizione disponibile trovata."
msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
@@ -2300,542 +2021,420 @@ msgstr ""
"eliminerà permanentemente. Si desidera continuare?"
msgid "Unable to retrieve partitions information."
-msgstr ""
-"Impossibile caricare le informazioni sulla partizione. "
+msgstr "Impossibile caricare le informazioni sulla partizione. "
msgid "In progress..."
-msgstr ""
-"In corso..."
+msgstr "In corso..."
msgid "Failed!"
-msgstr ""
-"Non riuscito."
+msgstr "Non riuscito."
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
msgstr ""
-"Il percorso CDROM deve essere un percorso locale/remoto valido e non può essere vuoto."
+"Il percorso CDROM deve essere un percorso locale/remoto valido e non può "
+"essere vuoto."
msgid "Disk pool or volume cannot be blank."
-msgstr ""
-"Il volume o il pool di dischi non può essere vuoto."
+msgstr "Il volume o il pool di dischi non può essere vuoto."
msgid "Peers"
-msgstr ""
-"Peer"
+msgstr "Peer"
msgid "Searching"
-msgstr ""
-"Ricerca "
+msgstr "Ricerca "
msgid "No peers found."
-msgstr ""
-"Nessun peer trovato. "
+msgstr "Nessun peer trovato. "
msgid "Help"
-msgstr ""
-"Guida"
+msgstr "Guida"
msgid "About"
-msgstr ""
-"Info su"
+msgstr "Info su"
msgid "Log out"
-msgstr ""
-"Disconnetti"
+msgstr "Disconnetti"
msgid "Version:"
-msgstr ""
-"Versione:"
+msgstr "Versione:"
msgid "Session timeout, please re-login."
-msgstr ""
-"Timeout della sessione; rieseguire l'accesso."
+msgstr "Timeout della sessione; rieseguire l'accesso."
msgid "User Name"
-msgstr ""
-"Nome utente"
+msgstr "Nome utente"
msgid "Password"
-msgstr ""
-"Password"
+msgstr "Password"
msgid "Generate a New Debug Report"
-msgstr ""
-"Crea un nuovo report di debug"
+msgstr "Crea un nuovo report di debug"
msgid "Report Name"
-msgstr ""
-"Nome report"
+msgstr "Nome report"
msgid ""
"The name used to identify the report. If omitted, a name will be chosen "
"based on current time. Name can contain: letters, digits, underscore (\"_\") "
"and hyphen (\"-\")."
msgstr ""
-"Il nome utilizzato per identificare il report. Se il nome viene omesso, ne viene scelto uno "
-"in base all'ora corrente. Il nome può contenere lettere, cifre, sottolineature (\"_\") "
-"e trattini (\"-\")."
+"Il nome utilizzato per identificare il report. Se il nome viene omesso, ne "
+"viene scelto uno in base all'ora corrente. Il nome può contenere lettere, "
+"cifre, sottolineature (\"_\") e trattini (\"-\")."
msgid "Rename a Debug Report"
-msgstr ""
-"Ridenomina un report di debug"
+msgstr "Ridenomina un report di debug"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
"hyphen (\"-\")."
msgstr ""
-"Il nome utilizzato per identificare il report. Il nome può contenere lettere, cifre e"
-"trattini (\"-\")."
+"Il nome utilizzato per identificare il report. Il nome può contenere "
+"lettere, cifre etrattini (\"-\")."
msgid "Submit"
-msgstr ""
-"Inoltra"
+msgstr "Inoltra"
msgid "Add a Repository"
-msgstr ""
-"Aggiungi un repository"
+msgstr "Aggiungi un repository"
msgid "Identifier"
-msgstr ""
-"Identificativo"
+msgstr "Identificativo"
msgid "Single word, unique identifier for the repository."
-msgstr ""
-"Identificativo univoco di una sola parola per il repository."
+msgstr "Identificativo univoco di una sola parola per il repository."
msgid "Textual name for the repository."
-msgstr ""
-"Nome in formato testo per il repository."
+msgstr "Nome in formato testo per il repository."
msgid "URL"
-msgstr ""
-"URL"
+msgstr "URL"
msgid "Required Field"
-msgstr ""
-"Campo obbligatorio"
+msgstr "Campo obbligatorio"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
-msgstr ""
-"URL al repository. I protocolli supportati sono http, ftp e file."
+msgstr "URL al repository. I protocolli supportati sono http, ftp e file."
msgid "Repository is a mirror"
-msgstr ""
-"Il repository è un elemento speculare"
+msgstr "Il repository è un elemento speculare"
msgid "Distribution"
-msgstr ""
-"Distribuzione"
+msgstr "Distribuzione"
msgid "Distribution of the DEB repository."
-msgstr ""
-"Distribuzione del repository DEB."
+msgstr "Distribuzione del repository DEB."
msgid "Components"
-msgstr ""
-"Componenti"
+msgstr "Componenti"
msgid "List of components in DEB repository."
-msgstr ""
-"Elenco di componenti nel repository DEB."
+msgstr "Elenco di componenti nel repository DEB."
msgid "Edit Repository"
-msgstr ""
-"Modifica repository"
+msgstr "Modifica repository"
msgid "Mirror List URL"
-msgstr ""
-"URL elenco elementi speculari"
+msgstr "URL elenco elementi speculari"
msgid "Yes"
-msgstr ""
-"Sì"
+msgstr "Sì"
msgid "No"
-msgstr ""
-"No"
+msgstr "No"
msgid "Add a Volume to Storage Pool"
-msgstr ""
-"Aggiungi un volume al pool di memoria"
+msgstr "Aggiungi un volume al pool di memoria"
msgid "Fetch from remote URL"
-msgstr ""
-"Richiama da URL remoto"
+msgstr "Richiama da URL remoto"
msgid "Enter the remote URL here."
-msgstr ""
-"Immettere qui l'URL remoto. "
+msgstr "Immettere qui l'URL remoto. "
msgid "Upload a file"
-msgstr ""
-"Carica un file"
+msgstr "Carica un file"
msgid "Choose the file you want to upload."
-msgstr ""
-"Selezionare il file da caricare. "
+msgstr "Selezionare il file da caricare. "
msgid "Define a New Storage Pool"
-msgstr ""
-"Definisci un nuovo pool di memoria"
+msgstr "Definisci un nuovo pool di memoria"
msgid "Storage Pool Name"
-msgstr ""
-"Nome pool di memoria"
+msgstr "Nome pool di memoria"
msgid ""
"The name used to identify the storage pools, and it should not be empty."
msgstr ""
-"Il nome utilizzato per identificare i pool di memoria; il campo non deve essere vuoto."
+"Il nome utilizzato per identificare i pool di memoria; il campo non deve "
+"essere vuoto."
msgid "Storage Pool Type"
-msgstr ""
-"Tipo di pool di memoria"
+msgstr "Tipo di pool di memoria"
msgid "Storage Path"
-msgstr ""
-"Percorso di memoria"
+msgstr "Percorso di memoria"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
msgstr ""
-"Il percorso del pool di memoria. Ogni pool di memoria deve avere un percorso univoco."
+"Il percorso del pool di memoria. Ogni pool di memoria deve avere un percorso "
+"univoco."
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
"your system."
msgstr ""
-"Kimchi tenterà di creare la directory nel caso non esista ancora sul "
-"sistema."
+"Kimchi tenterà di creare la directory nel caso non esista ancora sul sistema."
msgid "NFS Server IP"
-msgstr ""
-"IP server NFS"
+msgstr "IP server NFS"
msgid "NFS server IP or hostname. It can be input or chosen from history."
msgstr ""
-"Il nome host o l'indirizzo IP del server NFS. È possibile immetterlo o sceglierlo dalla cronologia."
+"Il nome host o l'indirizzo IP del server NFS. È possibile immetterlo o "
+"sceglierlo dalla cronologia."
msgid "NFS Path"
-msgstr ""
-"Percorso NFS"
+msgstr "Percorso NFS"
msgid "The NFS exported path on NFS server."
-msgstr ""
-"Il percorso esportato NFS sul server NFS."
+msgstr "Il percorso esportato NFS sul server NFS."
msgid "Device path"
-msgstr ""
-"Percorso dispositivo"
+msgstr "Percorso dispositivo"
msgid "iSCSI Server"
-msgstr ""
-"Server iSCSI"
+msgstr "Server iSCSI"
msgid "iSCSI server IP or hostname. It should not be empty."
msgstr ""
-"Il nome host o l'indirizzo IP del server iSCSI. Il campo non deve essere vuoto."
+"Il nome host o l'indirizzo IP del server iSCSI. Il campo non deve essere "
+"vuoto."
msgid "Server"
-msgstr ""
-"Server"
+msgstr "Server"
msgid "Port"
-msgstr ""
-"Porta"
+msgstr "Porta"
msgid "Target"
-msgstr ""
-"Destinazione"
+msgstr "Destinazione"
msgid "The iSCSI target on iSCSI server"
-msgstr ""
-"La destinazione iSCSI sul server iSCSI"
+msgstr "La destinazione iSCSI sul server iSCSI"
msgid "Add iSCSI Authentication"
-msgstr ""
-"Aggiungi autenticazione iSCSI"
+msgstr "Aggiungi autenticazione iSCSI"
msgid "iSCSI Authentication"
-msgstr ""
-"Autenticazione iSCSI"
+msgstr "Autenticazione iSCSI"
msgid "SCSI Adapter"
-msgstr ""
-"Adattatore SCSI"
+msgstr "Adattatore SCSI"
msgid "Please, wait..."
-msgstr ""
-"Attendere..."
+msgstr "Attendere..."
msgid "Add Template"
-msgstr ""
-"Aggiungi modello"
+msgstr "Aggiungi modello"
msgid "Where is the source media for this template? "
-msgstr ""
-"Dov'è il supporto di origine per questo modello? "
+msgstr "Dov'è il supporto di origine per questo modello? "
msgid "Local ISO Image"
-msgstr ""
-"Immagine ISO locale"
+msgstr "Immagine ISO locale"
msgid "Local Image File"
-msgstr ""
-"File immagine locale"
+msgstr "File immagine locale"
msgid "Remote ISO Image"
-msgstr ""
-"Immagine ISO remota"
+msgstr "Immagine ISO remota"
msgid "Search ISOs"
-msgstr ""
-"Ricerca ISO"
+msgstr "Ricerca ISO"
msgid "The following ISOs are available:"
-msgstr ""
-"Sono disponibili i seguenti file ISO:"
+msgstr "Sono disponibili i seguenti file ISO:"
msgid "OS: "
-msgstr ""
-"SO: "
+msgstr "SO: "
msgid "Version: "
-msgstr ""
-"Versione: "
+msgstr "Versione: "
msgid "Size: "
-msgstr ""
-"Dimensione: "
+msgstr "Dimensione: "
msgid "Search more ISOs"
-msgstr ""
-"Ricerca più ISO"
+msgstr "Ricerca più ISO"
msgid "Create Templates from Selected ISO"
-msgstr ""
-"Crea modelli da ISO selezionato"
+msgstr "Crea modelli da ISO selezionato"
msgid "I want to use a specific ISO file"
-msgstr ""
-"Utilizzare un file ISO specifico"
+msgstr "Utilizzare un file ISO specifico"
msgid "Loading default remote ISOs ..."
-msgstr ""
-"Caricamento di ISO remoti predefiniti in corso..."
+msgstr "Caricamento di ISO remoti predefiniti in corso..."
msgid "Arch: "
-msgstr ""
-"Arch: "
+msgstr "Arch: "
msgid "I want to use a custom URL"
-msgstr ""
-"Utilizzare un URL personalizzato"
+msgstr "Utilizzare un URL personalizzato"
msgid "Edit Template"
-msgstr ""
-"Modifica modello"
+msgstr "Modifica modello"
msgid "Processor"
-msgstr ""
-"Processore"
+msgstr "Processore"
msgid "CDROM"
-msgstr ""
-"CDROM"
+msgstr "CDROM"
msgid "Image File"
-msgstr ""
-"File immagine "
+msgstr "File immagine "
msgid "Graphics"
-msgstr ""
-"Grafici"
+msgstr "Grafici"
msgid "Disk(GB)"
-msgstr ""
-"Disco (GB)"
+msgstr "Disco (GB)"
msgid "Disk Format"
-msgstr ""
-"Formato disco"
+msgstr "Formato disco"
msgid "CPU Number"
-msgstr ""
-"Numero CPU"
+msgstr "Numero CPU"
msgid "Manually set CPU topology"
-msgstr ""
-"Imposta manualmente la topologia CPU"
+msgstr "Imposta manualmente la topologia CPU"
msgid "Cores"
-msgstr ""
-"Core"
+msgstr "Core"
msgid "Threads"
-msgstr ""
-"Thread"
+msgstr "Thread"
msgid "CPU"
-msgstr ""
-"CPU"
+msgstr "CPU"
msgid "Disk I/O"
-msgstr ""
-"I/O disco"
+msgstr "I/O disco"
msgid "Network I/O"
-msgstr ""
-"I/O di rete"
+msgstr "I/O di rete"
msgid "Livetile"
-msgstr ""
-"Riquadro animato"
+msgstr "Riquadro animato"
msgid "No guests found."
-msgstr ""
-"Nessuna macchina guest trovata."
+msgstr "Nessuna macchina guest trovata."
msgid "Shut down"
-msgstr ""
-"Arresta"
+msgstr "Arresta"
msgid "Restart"
-msgstr ""
-"Riavvia"
+msgstr "Riavvia"
msgid "Basic Information"
-msgstr ""
-"Informazioni di base"
+msgstr "Informazioni di base"
msgid "OS Distro"
-msgstr ""
-"Distro SO"
+msgstr "Distro SO"
msgid "OS Code Name"
-msgstr ""
-"Nome codice SO"
+msgstr "Nome codice SO"
msgid "CPU(s)"
-msgstr ""
-"CPU"
+msgstr "CPU"
msgid "System Statistics"
-msgstr ""
-"Statistiche di sistema"
+msgstr "Statistiche di sistema"
msgid "Update Progress"
-msgstr ""
-"Avanzamento aggiornamento"
+msgstr "Avanzamento aggiornamento"
msgid "Network Name"
-msgstr ""
-"Nome rete"
+msgstr "Nome rete"
msgid "State"
-msgstr ""
-"Stato"
+msgstr "Stato"
msgid "Network Type"
-msgstr ""
-"Tipo di Rete"
+msgstr "Tipo di Rete"
msgid "Address Space"
-msgstr ""
-"Spazio indirizzo"
+msgstr "Spazio indirizzo"
msgid "Name should not contain '/' and '\"'."
-msgstr ""
-"Il nome non deve contenere '/' e '\"'."
+msgstr "Il nome non deve contenere '/' e '\"'."
msgid "Isolated: no external network connection"
-msgstr ""
-"Isolata: nessuna connessione di rete esterna"
+msgstr "Isolata: nessuna connessione di rete esterna"
msgid "NAT: outbound physical network connection only"
-msgstr ""
-"NAT: solo connessione di rete fisica in uscita"
+msgstr "NAT: solo connessione di rete fisica in uscita"
msgid "Bridged: Virtual machines are connected to physical network directly"
msgstr ""
"Con bridge: le macchine virtuali sono connesse direttamente alla rete fisica"
msgid "(No interfaces found)"
-msgstr ""
-"(Nessuna interfaccia trovata)"
+msgstr "(Nessuna interfaccia trovata)"
msgid "Destination"
-msgstr ""
-"Destinazione"
+msgstr "Destinazione"
msgid "Enable VLAN"
-msgstr ""
-"Abilita VLAN"
+msgstr "Abilita VLAN"
msgid "VLAN ID"
-msgstr ""
-"ID VLAN"
+msgstr "ID VLAN"
msgid "Stop"
-msgstr ""
-"Arresta"
+msgstr "Arresta"
msgid "%Used"
-msgstr ""
-"% utilizzata"
+msgstr "% utilizzata"
msgid "Location"
-msgstr ""
-"Ubicazione"
+msgstr "Ubicazione"
msgid "Capacity"
-msgstr ""
-"Capacità"
+msgstr "Capacità"
msgid "Allocated"
-msgstr ""
-"Assegnato"
+msgstr "Assegnato"
msgid "active"
-msgstr ""
-"attivo"
+msgstr "attivo"
msgid "inactive"
-msgstr ""
-"non attivo"
+msgstr "non attivo"
msgid "Deactivate"
-msgstr ""
-"Disattiva"
+msgstr "Disattiva"
msgid "Activate"
-msgstr ""
-"Attiva"
+msgstr "Attiva"
msgid "Add Volume"
-msgstr ""
-"Aggiungi volume"
+msgstr "Aggiungi volume"
msgid "Extend"
-msgstr ""
-"Estendi"
+msgstr "Estendi"
msgid "Undefine"
-msgstr ""
-"Rimuovi definizione"
+msgstr "Rimuovi definizione"
msgid "Format"
-msgstr ""
-"Formato"
+msgstr "Formato"
msgid "Allocation"
-msgstr ""
-"Assegnazione"
+msgstr "Assegnazione"
msgid "No templates found."
-msgstr ""
-"Nessun modello trovato."
-
-# ENGL1SH_VERS10N 28617_40 DO NOT REMOVE OR CHANGE THIS LINE
-# T9N_SRC_ID 92
-# T9N_SH1P_STR1NG KV310AAP001 1
+msgstr "Nessun modello trovato."
diff --git a/po/ja_JP.po b/po/ja_JP.po
index 52770fb..a95a210 100644
--- a/po/ja_JP.po
+++ b/po/ja_JP.po
@@ -1,11 +1,12 @@
# English translations for kimchi package.
# Copyright (C) 2013 ORGANIZATION
+# Adam Litke <agl(a)us.ibm.com>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-06-24 09:39-0300\n"
+"POT-Creation-Date: 2015-08-21 09:52-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
@@ -14,15 +15,15 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
#, python-format
msgid "Unknown parameter %(value)s"
-msgstr ""
+msgstr "パラメーター %(value)s が不明です"
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr "%(resource)s の削除は許可されません"
+msgstr "%(resource)s に対して削除は許可されません"
#, python-format
msgid "%(resource)s does not implement update method"
@@ -30,7 +31,7 @@ msgstr "%(resource)s は更新メソッドを実装していません"
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr "%(resource)s の作成は許可されません"
+msgstr "%(resource)s に対して作成は許可されません"
msgid "Unable to parse JSON request"
msgstr "JSON 要求を解析できません"
@@ -40,10 +41,10 @@ msgstr "この API は JSON のみサポートします"
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
-msgstr ""
+msgstr "パラメーターがスキーマでの要件に適合しません: %(err)s"
msgid "You don't have permission to perform this operation."
-msgstr ""
+msgstr "この操作を実行する権限がありません。"
msgid "Datastore is not initiated in the model object."
msgstr "データ・ストアは、モデル・オブジェクトで開始されていません。"
@@ -55,6 +56,7 @@ msgstr "次のエラーのため、タスクを開始できません: %(err)s"
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
msgstr ""
+"タスク %(task)s の実行中に %(seconds)s 秒のタイムアウトが満了しました。"
#, python-format
msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
@@ -70,41 +72,42 @@ msgstr "Kimchi にログインするには、%(item)s を指定します"
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
-msgstr ""
+msgstr "指定の LDAP 設定を持つユーザー %(user_id)s が見つかりません。"
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
-msgstr ""
+msgstr "LDAP 構成が無効です: %(item)s : %(value)s"
msgid "Unknown \"_cap\" specified"
-msgstr ""
+msgstr "不明な「_cap」が指定されました"
msgid "\"_passthrough\" should be \"true\" or \"false\""
-msgstr ""
+msgstr "「_passthrough」は「true」または「false」でなければなりません"
msgid "\"_passthrough_affected_by\" should be a device name string"
-msgstr ""
+msgstr "「_passthrough_affected_by」はデバイス名ストリングでなければなりません"
+
+msgid "\"_available_only\" should be \"true\" or \"false\""
+msgstr "「_available_only」は「true」または「false」でなければなりません"
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
-msgstr ""
-"ブロック・デバイスを取得しているときに、エラーがありました。詳細: %(err)s"
+msgstr "ブロック・デバイスの取得中にエラーが発生しました。詳細: %(err)s"
#, python-format
msgid "Error while getting block device information for %(device)s."
-msgstr ""
-"%(device)s のブロック・デバイス情報を取得しているときに、エラーがありました。"
+msgstr "%(device)s のブロック・デバイス情報の取得中にエラーが発生しました。"
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr "ディストリビューション・ファイル %(filename)s が見つかりません"
+msgstr "distro ファイル %(filename)s が見つかりません"
#, python-format
msgid ""
"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
msgstr ""
-"ディストリビューション・ファイル %(filename)s を解析できません。JSON ファイル"
-"であることを確認してください。"
+"distro ファイル %(filename)s を解析できません。JSON ファイルであることを確認"
+"してください。"
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
@@ -117,35 +120,34 @@ msgstr "iSCSI ホスト %(host)s ターゲット %(target)s にログインで
#, python-format
msgid "Unable to find ISO file %(filename)s"
-msgstr ""
+msgstr "ISO ファイル %(filename)s が見つかりません"
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr "ISO ファイル %(filename)s は、ブート可能ではありません"
+msgstr "ISO ファイル %(filename)s がブート可能ではありません"
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
msgstr ""
-"ISO ファイル %(filename)s には、有効な El Torito ブート・レコードがありません"
+"ISO ファイル %(filename)s に有効な El Torito ブート・レコードがありません"
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
-msgstr "無効な El Torito 検証エントリーが ISO %(filename)s にあります"
+msgstr "ISO %(filename)s に無効な El Torito 検証項目があります"
#, python-format
msgid "Invalid El Torito boot indicator in ISO %(filename)s"
-msgstr "無効な El Torito ブート・インジケーターが ISO %(filename)s にあります"
+msgstr "ISO %(filename)s に無効な El Torito ブート・インジケーターがあります"
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
-msgstr ""
-"1 次ボリュームの予期しないボリューム・タイプが ISO %(filename)s にあります"
+msgstr "ISO %(filename)s 内の 1 次ボリュームが予期しないボリューム・タイプです"
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
msgstr ""
-"ボリューム・ディスクリプターを ISO %(filename)s から読み取っていましたが、"
-"フォーマットが不正でした"
+"ISO %(filename)s 内のボリューム・ディスクリプターを読み取り中にフォーマットが"
+"正しくありませんでした"
#, python-format
msgid ""
@@ -156,26 +158,28 @@ msgid ""
"'path_to_iso'.Details: %(err)s"
msgstr ""
"ハイパーバイザーにこの ISO %(filename)s を使用する権限がありません。/var/lib/"
-"libvirt の下に移動するか、可能であれば検索許可を「%(user)s」ユーザーのファイ"
-"ル・アクセス制御リストに設定するか、「%(user)s」をISO パス・グループに追加す"
-"るか、または「chmod -R o+x path_to_iso」を実行 (推奨されません) してくださ"
-"い。詳細: %(err)s"
+"libvirt の下への移動を検討するか、可能であれば検索権限を「%(user)s」ユーザー"
+"のファイル・アクセス制御リストに設定するか、「%(user)s」を ISO パス・グループ"
+"に追加するか、または「chmod -R o+x path_to_iso」を実行 (推奨されません) して"
+"ください。詳細: %(err)s"
msgid "An error occurred when probing image OS information."
-msgstr ""
+msgstr "イメージ OS 情報のプローブ時にエラーが発生しました。"
msgid "No OS information found in given image."
-msgstr ""
+msgstr "OS 情報が指定のイメージに見つかりません。"
#, python-format
msgid "Unable to read image file %(filename)s"
-msgstr ""
+msgstr "イメージ・ファイル %(filename)s を読み取ることができません"
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
msgstr ""
+"イメージ・ファイルはシステム上の既存ファイルでなければなりませ"
+"ん。%(filename)s は有効な入力ではありません。"
#, python-format
msgid "Virtual machine %(name)s already exists"
@@ -190,6 +194,8 @@ msgid ""
"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
"in use or the virtual machine is not powered off."
msgstr ""
+"仮想マシン %(name)s を名前変更できません。名前 %(new_name)s が既に使用されて"
+"いるか、仮想マシンが電源オフされていません。"
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
@@ -201,6 +207,7 @@ msgstr "リモート ISO イメージは、このサーバーではサポート
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
msgstr ""
+"スクリーン・ショットはこの仮想マシン %(name)s ではサポートされていません"
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
@@ -208,7 +215,7 @@ msgstr "仮想マシン %(name)s を作成できません。詳細: %(err)s"
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
-msgstr "仮想マシン %(name)s を作成できません。詳細: %(err)s"
+msgstr "仮想マシン %(name)s を更新できません。詳細: %(err)s"
#, python-format
msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
@@ -216,37 +223,36 @@ msgstr "仮想マシン %(name)s を取得できません。詳細: %(err)s"
#, python-format
msgid "Unable to connect to powered off virtual machine %(name)s."
-msgstr ""
+msgstr "電源オフされた仮想マシン %(name)s に接続できません。"
msgid "Virtual machine name must be a string without slashes (/)"
-msgstr ""
+msgstr "仮想マシン名はスラッシュ (/) のないストリングでなければなりません"
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
-msgstr ""
+msgstr "無効なテンプレート URI %(value)s が仮想マシンに指定されています"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for virtual machine"
-msgstr ""
+msgstr "無効なストレージ・プール URI %(value)s が仮想マシンに指定されています"
msgid "Supported virtual machine graphics are Spice or VNC"
-msgstr ""
+msgstr "サポートされている仮想マシン・グラフィックスは Spice または VNC です"
msgid "Graphics address to listen on must be IPv4 or IPv6"
msgstr ""
-"listen を行うグラフィックス・アドレスは、IPv4 または IPv6 でなければなりませ"
-"ん"
+"listen を行うグラフィックス・アドレスは IPv4 または IPv6 でなければなりません"
msgid "Specify a template to create a virtual machine from"
msgstr "仮想マシンの作成元となるテンプレートを指定してください"
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
-msgstr "仮想マシン %(name)s を始動できません。詳細: %(err)s"
+msgstr "仮想マシン %(name)s を開始できません。詳細: %(err)s"
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
-msgstr "仮想マシン %(name)s を停止できません。詳細: %(err)s"
+msgstr "仮想マシン %(name)s を電源オフできません。詳細: %(err)s"
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
@@ -254,112 +260,124 @@ msgstr "仮想マシン %(name)s を削除できません。詳細: %(err)s"
#, python-format
msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
-msgstr "仮想マシン %(name)s を名前変更できません。詳細: %(err)s"
+msgstr "仮想マシン %(name)s をリセットできません。詳細: %(err)s"
msgid "User name list must be an array"
-msgstr ""
+msgstr "ユーザー名リストは配列でなければなりません"
msgid "User name must be a string"
-msgstr "ネットワーク名はストリングでなければなりません"
+msgstr "ユーザー名はストリングでなければなりません"
msgid "Group name list must be an array"
-msgstr ""
+msgstr "グループ名リストは配列でなければなりません"
msgid "Group name must be a string"
-msgstr "ネットワーク名はストリングでなければなりません"
+msgstr "グループ名はストリングでなければなりません"
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr "ユーザー「%(users)s」は存在しません。"
+msgstr "ユーザー「%(users)s」は存在しません"
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr "ユーザー「%(groups)s」は存在しません。"
+msgstr "グループ「%(groups)s」は存在しません"
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
-msgstr "仮想マシン %(name)s を停止できません。詳細: %(err)s"
+msgstr "仮想マシン %(name)s をシャットダウンできません。詳細: %(err)s"
#, python-format
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr "仮想マシン %(name)s を始動できません。詳細: %(err)s"
+msgstr ""
+"仮想マシン %(name)s のアクセス・メタデータを取得できません。詳細: %(err)s"
msgid "The guest console password must be a string."
-msgstr ""
+msgstr "ゲスト・コンソール・パスワードはストリングでなければなりません。"
msgid "The life time for the guest console password must be a number."
-msgstr ""
+msgstr "ゲスト・コンソール・パスワードの存続時間は数値でなければなりません。"
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
-msgstr ""
+msgstr "仮想マシン「%(name)s」のクローンを作成する前に停止する必要があります。"
#, python-format
msgid "Insufficient disk space to clone virtual machine '%(name)s'"
msgstr ""
+"仮想マシン「%(name)s」のクローンを作成するためのディスク・スペースが不足して"
+"います"
#, python-format
msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
-msgstr ""
+msgstr "VM「%(name)s」のクローンを作成できません。詳細: %(err)s"
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
-msgstr ""
+msgstr "非永続仮想マシン %(name)s の操作が無効です"
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
-msgstr ""
+msgstr "VM「%(name)s」は実行されていないため、中断できません。"
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
-msgstr ""
+msgstr "VM「%(name)s」を中断できません。詳細: %(err)s"
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
-msgstr ""
+msgstr "VM「%(name)s」は一時停止されていないため、再開できません。"
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
-msgstr ""
+msgstr "VM「%(name)s」を再開できません。詳細: %(err)s"
msgid "Memory assigned is higher then the maximum allowed in the host."
-msgstr ""
+msgstr "割り当てられたメモリーはホストで許可された最大を超えています。"
#, python-format
msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
+"VM「%(name)s」ではライブ・メモリー・アップデートはサポートされていません。オ"
+"フライン状態のマシンでメモリーを更新して、この機能を使用可能にしてください。"
msgid "Only increase memory is allowed in active VMs"
-msgstr ""
+msgstr "アクティブ VM ではメモリーの増加のみが許可されています"
msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
msgstr ""
+"ライブ・メモリー・アップデートの場合、新規メモリー値は、旧メモリー値に1024 "
+"Mib の倍数を加算した値に等しくなければなりません"
msgid "There are not enough free slots of 1024 Mib in the guest."
-msgstr ""
+msgstr "1024 Mib のフリー・スロットがゲストで不足しています。"
msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
msgstr ""
+"ホストの libvirt バージョンではメモリー・デバイスはサポートされていません。"
+"Libvirt は 1.2.14 以上でなければなりません"
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
-msgstr ""
+msgstr "メモリー・デバイスの接続エラーです。詳細: %(error)s"
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
+"直接割り当てられたホスト・デバイス %(dev_name)s が VM %(vmid)s に含まれていま"
+"せん。"
#, python-format
msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
msgstr ""
+"ホスト・デバイス %(dev_name)s は VM への直接割り当てを許可されていません。"
msgid ""
"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
@@ -368,30 +386,37 @@ msgid ""
"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
"iommu=1."
msgstr ""
+"IOMMU グループが見つかりません。ホスト PCI パススルーは、IOMMU グループが正し"
+"く機能することを必要とします。BIOS で Intel VT-d または AMD IOMMU を使用可能"
+"にし、IOMMU サポートを使用してカーネルがコンパイルされていることを確認してく"
+"ださい。Intel CPU の場合は、/boot/grub2/grub.conf でカーネル・パラメーターに "
+"intel_iommu=on を追加します。AMD CPU の場合は、iommu=pt iommu=1 を追加しま"
+"す。"
msgid "\"name\" should be a device name string"
-msgstr ""
+msgstr "「name」はデバイス名ストリングでなければなりません"
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
msgstr ""
+"デバイス %(name)s はホストで使用中である可能性があります。ゲストに接続するこ"
+"とはできません。"
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
-msgstr "インターフェース %(iface)s は仮想マシン %(name)s には存在しません"
+msgstr "インターフェース %(iface)s は仮想マシン %(name)s に存在しません"
#, python-format
msgid ""
"Network %(network)s specified for virtual machine %(name)s does not exist"
msgstr ""
-"仮想マシン %(name)s 用に指定されているネットワーク %(network)s は存在しません"
+"仮想マシン %(name)s に指定されたネットワーク %(network)s は存在しません"
msgid "Supported virtual machine interfaces type is only network"
msgstr ""
-"サポートされている仮想マシン・インターフェース・タイプは、ネットワークだけで"
-"す"
+"サポートされている仮想マシン・インターフェース・タイプはネットワークのみです"
msgid "Network name for virtual machine interface must be a string"
msgstr ""
@@ -405,20 +430,20 @@ msgstr ""
msgid "Specify type and network to add a new virtual machine interface"
msgstr ""
"新しい仮想マシン・インターフェースに追加するタイプおよびネットワークを指定し"
-"ます"
+"てください"
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
-msgstr ""
+msgstr "MAC アドレスは FF:FF:FF:FF:FF:FF の形式に従っていなければなりません"
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
-msgstr ""
+msgstr "MAC アドレス %(mac)s は既に仮想マシン %(name)s に存在します"
msgid "Invalid MAC Address"
-msgstr ""
+msgstr "MAC アドレスが無効です"
msgid "Cannot change MAC address of a running virtual machine"
-msgstr ""
+msgstr "実行中の仮想マシンの MAC アドレスは変更できません"
#, python-format
msgid "Template %(name)s already exists"
@@ -428,31 +453,31 @@ msgstr "テンプレート %(name)s は既に存在します"
msgid ""
"Network '%(network)s' specified for template %(template)s does not exist"
msgstr ""
-"テンプレート %(template)s 用に指定されているネットワーク「%(network)s」は存在"
-"しません"
+"テンプレート %(template)s に指定されたネットワーク「%(network)s」は存在しませ"
+"ん"
#, python-format
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
msgstr ""
-"テンプレート %(template)s 用に指定されているストレージ・プール %(pool)s は存"
-"在しません"
+"テンプレート %(template)s に指定されたストレージ・プール %(pool)s は存在しま"
+"せん"
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
msgstr ""
-"テンプレート %(template)s 用に指定されているストレージ・プール %(pool)s はア"
-"クティブではありません"
+"テンプレート %(template)s に指定されたストレージ・プール %(pool)s はアクティ"
+"ブではありません"
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr "CDROM に指定されているパラメーター「%(param)s」は無効です。"
+msgstr "無効なパラメーター「%(param)s」が CDROM に指定されました。"
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
msgstr ""
-"テンプレート %(template)s 用に指定されているネットワーク %(network)s はアク"
-"ティブではありません"
+"テンプレート %(template)s に指定されたネットワーク %(network)s はアクティブで"
+"はありません"
msgid "Template name must be a string"
msgstr "テンプレート名はストリングでなければなりません"
@@ -469,14 +494,14 @@ msgstr ""
"せん"
msgid "The number of CPUs must be an integer greater than 0"
-msgstr "CPU 数は整数でなければなりません"
+msgstr "CPU の数は 0 より大きい整数でなければなりません"
msgid "Amount of memory (MB) must be an integer greater than 512"
msgstr "メモリーの量 (MB 単位) は、512 より大きい整数でなければなりません"
msgid "Template CDROM must be a local or remote ISO file"
msgstr ""
-"テンプレート CDROM は、ローカルまたはリモート ISO ファイルでなければなりませ"
+"テンプレート CDROM はローカルまたはリモートの ISO ファイルでなければなりませ"
"ん"
#, python-format
@@ -486,17 +511,20 @@ msgstr ""
msgid "Specify an ISO image as CDROM or a base image to create a template"
msgstr ""
-"CDROM として、テンプレートを作成するための ISO イメージを指定してください"
+"テンプレートを作成するには、CDROM として ISO イメージを指定するか、ベース・イ"
+"メージを指定してください"
msgid "All networks for the template must be specified in a list."
msgstr "テンプレート用のネットワークをすべてリストに指定する必要があります。"
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
msgstr ""
+"ストレージ・プールが iSCSI または SCSI である場合はテンプレートに対してボ"
+"リュームを指定してください"
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
-msgstr ""
+msgstr "ボリューム %(volume)s がストレージ・プール %(pool)s にありません"
#, python-format
msgid "Unable to create template due error: %(err)s"
@@ -507,31 +535,37 @@ msgid "Unable to delete template due error: %(err)s"
msgstr "次のエラーのため、テンプレートを削除できません: %(err)s"
msgid "Disk size must be an integer greater than 1GB."
-msgstr ""
+msgstr "ディスク・サイズは 1GB より大きい整数でなければなりません。"
msgid "Template base image must be a valid local image file"
msgstr ""
-"テンプレート CDROM は、ローカルまたはリモート ISO ファイルでなければなりませ"
-"ん"
+"テンプレート・ベース・イメージは有効なローカル・イメージ・ファイルでなければ"
+"なりません"
#, python-format
msgid "Cannot identify base image %(path)s format"
-msgstr ""
+msgstr "ベース・イメージ %(path)s のフォーマットを識別できません"
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
msgstr ""
+"CPU トポロジーを指定する場合、VCPU はソケット、コア、およびスレッドの積でなけ"
+"ればなりません。"
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
"zero."
msgstr ""
+"CPU トポロジーを指定する場合、各エレメントはゼロより大きい整数でなければなり"
+"ません。"
msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
+"ディスク・イメージ・フォーマットが無効です。有効なフォーマットはbochs、"
+"cloop、cow、dmg、qcow、qcow2、qed、raw、vmdk、vpc です。"
#, python-format
msgid "Storage pool %(name)s already exists"
@@ -544,11 +578,11 @@ msgstr "ストレージ・プール %(name)s は存在しません"
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
msgstr ""
-"ストレージ・プール %(name)s を作成するためには、%(item)s を指定してください"
+"ストレージ・プール %(name)s を作成するには、%(item)s を指定してください"
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr "アクティブ・ストレージ・プール %(name)s は削除できません"
+msgstr "アクティブ・ストレージ・プール %(name)s を削除できません"
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
@@ -563,8 +597,8 @@ msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
msgstr ""
-"ストレージ・プール %(name)s のストレージ・ボリュームの数を取得できません。詳"
-"細:%(err)s"
+"ストレージ・プール %(name)s 内のストレージ・ボリューム数を取得できません。詳"
+"細: %(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
@@ -576,36 +610,39 @@ msgstr "ストレージ・プール %(name)s を非アクティブにできま
#, python-format
msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
-msgstr "ストレージ・プール %(name)s を削除できません。詳細: %(err)s"
+msgstr "ストレージ・プール %(name)s を削除にできません。詳細: %(err)s"
#, python-format
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
msgstr ""
-"マウント中にエクスポート・パス %(path)s がブロックされていた可能性があるた"
-"め、NFS プールを作成できません"
+"エクスポート・パス %(path)s がマウント中にブロックしている可能性があるため、"
+"NFS プールを作成できません"
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
msgstr ""
-"エクスポート・パス %(path)s のマウントに失敗したため、NFS プールを作成できま"
-"せん"
+"エクスポート・パス %(path)s マウントが失敗したため、NFS プールを作成できませ"
+"ん"
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr "サポートされていないストレージ・プール・タイプ: %(type)s"
+msgstr "ストレージ・プール・タイプ %(type)s はサポートされていません"
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
-msgstr ""
+msgstr "ストレージ・プール XML を %(pool)s に取得中にエラーが発生しました"
msgid "Storage pool name must be a string without slashes (/)"
msgstr ""
+"ストレージ・プール名はスラッシュ (/) のないストリングでなければなりません"
msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
"iso"
msgstr ""
+"サポートされているストレージ・プール・タイプは dir、netfs、logical、iscsi、"
+"isci、および kimchi-iso です"
msgid "Storage pool path must be a string"
msgstr "ストレージ・プール・パスはストリングでなければなりません"
@@ -615,6 +652,8 @@ msgstr "ストレージ・プール・ホストは、IP またはホスト名で
msgid "Storage pool device must be the absolute path to the block device"
msgstr ""
+"ストレージ・プール・デバイスはブロック・デバイスへの絶対パスでなければなりま"
+"せん"
msgid "Storage pool devices parameter must be a list"
msgstr "ストレージ・プール・デバイス・パラメーターはリストでなければなりません"
@@ -624,14 +663,14 @@ msgstr "iSCSI プールのターゲット IQN はストリングでなければ
msgid "Port of a remote storage server must be an integer between 1 and 65535"
msgstr ""
-"リモート・ストレージ・サーバーのポートは、1 から 65535 までの整数でなければな"
+"リモート・ストレージ・サーバーのポートは 1 から 65535 までの整数でなければな"
"りません"
msgid "iSCSI target username must be a string"
-msgstr ""
+msgstr "iSCSI ターゲット・ユーザー名はストリングでなければなりません"
msgid "iSCSI target password must be a string"
-msgstr ""
+msgstr "iSCSI ターゲット・パスワードはストリングでなければなりません"
msgid "Specify name and type to create a storage pool"
msgstr "ストレージ・プールを作成するには、名前とタイプを指定してください"
@@ -641,12 +680,12 @@ msgid ""
"%(disk)s is not a valid disk/partition. Could not add it to the pool "
"%(pool)s."
msgstr ""
-"%(disk)s は、有効なディスク/パーティションではないため、プール %(pool)s に追"
+"%(disk)s は有効なディスク/パーティションではありません。プール %(pool)s に追"
"加できませんでした。"
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
-msgstr ""
+msgstr "論理プール %(pool)s を拡張できません。詳細: %(err)s"
msgid "The parameter disks only can be updated for logical storage pool."
msgstr ""
@@ -665,7 +704,7 @@ msgid ""
"unreachable."
msgstr ""
"NFS ストレージ・プール %(name)s をアクティブにできません。NFS サーバー "
-"%(server)s に到達できません。"
+"%(server)s は到達不能です。"
#, python-format
msgid ""
@@ -673,14 +712,14 @@ msgid ""
"unreachable."
msgstr ""
"NFS ストレージ・プール %(name)s を非アクティブにできません。NFS サーバー "
-"%(server)s に到達できません。"
+"%(server)s は到達不能です。"
#, python-format
msgid ""
"Unable to deactivate pool %(name)s as it is associated with some templates"
msgstr ""
"プール %(name)s はいくつかのテンプレートに関連付けられているため、非アクティ"
-"ブにできません"
+"ブにすることはできません"
#, python-format
msgid "Unable to delete pool %(name)s as it is associated with some templates"
@@ -693,13 +732,13 @@ msgid ""
"A volume group named '%(name)s' already exists. Please, choose another name "
"to create the logical pool."
msgstr ""
-"名前「%(name)s」のボリューム・グループは既に存在します。論理プールを作成する"
-"には、別の名前を選択してください。"
+"ボリューム・グループ「%(name)s」は既に存在します。論理プールを作成するには、"
+"別の名前を選択してください。"
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
msgstr ""
-"次のエラーのため、データベースをディープ・スキャン情報で更新できません: "
+"次のエラーのため、データベースをディープ・スキャン情報で更新できません:"
"%(err)s"
#, python-format
@@ -709,27 +748,27 @@ msgstr "ストレージ・ボリューム %(name)s は既に存在します"
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
msgstr ""
-"ストレージ・ボリューム %(name)s は、ストレージ・プール %(pool)s に存在しませ"
-"ん"
+"ストレージ・ボリューム %(name)s がストレージ・プール %(pool)s に存在しません"
#, python-format
msgid ""
"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
"not active"
msgstr ""
+"ストレージ・プール %(pool)s がアクティブでないため、ストレージ・ボリューム "
+"%(volume)s を作成できません"
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
msgstr ""
-"ストレージ・ボリューム %(volume)s を作成するためには、%(item)s を指定してくだ"
-"さい"
+"ストレージ・ボリューム %(volume)s を作成するには、%(item)s を指定してください"
#, python-format
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
msgstr ""
-"ストレージ・プール %(pool)s がアクティブではないため、ストレージ・ボリューム"
-"をリストできません"
+"ストレージ・プール %(pool)s がアクティブでないため、ストレージ・ボリュームを"
+"リストできません"
#, python-format
msgid ""
@@ -743,12 +782,12 @@ msgstr ""
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
msgstr ""
-"ストレージ・プール %(pool)s のストレージ・ボリュームをリストできません。詳"
+"ストレージ・プール %(pool)s 内のストレージ・ボリュームをリストできません。詳"
"細: %(err)s"
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
-msgstr "ストレージ・プール %(name)s をワイプできません。詳細: %(err)s"
+msgstr "ストレージ・ボリューム %(name)s をワイプできません。詳細: %(err)s"
#, python-format
msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
@@ -761,7 +800,7 @@ msgstr "ストレージ・ボリューム %(name)s をサイズ変更できま
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
msgstr ""
-"ストレージ・タイプ %(type)s では、ボリューム作成および削除はサポートされてい"
+"ストレージ・タイプ %(type)s ではボリュームの作成および削除はサポートされてい"
"ません"
msgid "Storage volume name must be a string"
@@ -774,6 +813,9 @@ msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
+"ストレージ・ボリューム・フォーマットがサポートされていません。有効なフォー"
+"マットは bochs、cloop、cow、dmg、qcow、qcow2、qed、raw、vmdk、および vpc で"
+"す。"
msgid "Storage volume requires a volume name"
msgstr "ストレージ・ボリュームにはボリューム名が必要です"
@@ -782,53 +824,67 @@ msgstr "ストレージ・ボリュームにはボリューム名が必要です
msgid ""
"Unable to update database with storage volume information due error: %(err)s"
msgstr ""
-"次のエラーのため、データベースをストレージ・ボリューム情報で更新できません: "
+"次のエラーのため、データベースをストレージ・ボリューム情報で更新できません:"
"%(err)s"
#, python-format
msgid "Only one of parameter %(param)s can be specified"
-msgstr ""
+msgstr "1 つのパラメーター %(param)s のみを指定できます"
#, python-format
msgid "Create volume from %(param)s is not supported"
-msgstr ""
+msgstr "%(param)s からのボリュームの作成はサポートされていません"
msgid "Storage volume capacity must be an integer number."
-msgstr ""
+msgstr "ストレージ・ボリューム容量は整数値でなければなりません。"
msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
msgstr ""
+"ストレージ・ボリューム URL は http://、https://、ftp://、または ftps:// でな"
+"ければなりません。"
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
-msgstr ""
+msgstr "ファイル %(url)s にアクセスできません。確認してください。"
#, python-format
msgid ""
"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
"%(err)s"
msgstr ""
+"ストレージ・ボリューム「%(name)s」のクローンをプール「%(pool)s」に作成できま"
+"せん。詳細: %(err)s"
msgid "Specify chunk data and its size to upload a file."
msgstr ""
+"ファイルをアップロードするには、チャンク・データとそのサイズを指定してくださ"
+"い。"
msgid "In order to upload a storage volume, specify the 'upload' parameter."
msgstr ""
+"ストレージ・ボリュームをアップロードするには、「upload」パラメーターを指定し"
+"てください。"
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
msgstr ""
+"要求されたチャンク・サイズに一致しないため、チャンク・データをアップロードで"
+"きません。"
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
msgstr ""
+"ストレージ・ボリューム %(vol)s はアップロード・プロセス中ではありません。"
msgid "The upload chunk data will exceed the storage volume size."
msgstr ""
+"アップロード・チャンク・データはストレージ・ボリューム・サイズを超過します。"
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
msgstr ""
+"チャンク・データをストレージ・ボリュームにアップロードできません。詳細: "
+"%(err)s。"
#, python-format
msgid "Interface %(name)s does not exist"
@@ -845,23 +901,23 @@ msgstr "ネットワーク %(name)s は存在しません"
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
msgstr ""
-"ネットワーク %(network)s 用に指定されているサブネット %(subnet)s は無効です。"
+"ネットワーク %(network)s に指定されたサブネット %(subnet)s は無効です。"
#, python-format
msgid "Specify a network interface to create bridged network %(name)s"
msgstr ""
-"ブリッジ接続ネットワーク %(name)s を作成するには、ネットワーク・インター"
-"フェースを指定してください"
+"ブリッジ・ネットワーク %(name)s を作成するには、ネットワーク・インターフェー"
+"スを指定してください"
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr "アクティブ・ネットワーク %(name)s は削除できません"
+msgstr "アクティブ・ネットワーク %(name)s を削除できません"
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
msgstr ""
-"ネットワーク %(network)s 用に指定されているインターフェース %(iface)s は、既"
-"に使用されています"
+"ネットワーク %(network)s に指定されたインターフェース %(iface)s は既に使用中"
+"です"
msgid "Interface should be bare NIC, bonding or bridge device."
msgstr ""
@@ -874,22 +930,24 @@ msgstr "ネットワーク %(name)s を作成できません。詳細: %(err)s"
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
-msgstr "ネットワーク「%(name)s」のフリー IP アドレスが見つかりません。"
+msgstr "ネットワーク「%(name)s」のフリー IP アドレスが見つかりません"
#, python-format
msgid "The interface %(iface)s already exists."
-msgstr ""
+msgstr "インターフェース %(iface)s は既に存在します。"
msgid "Network name must be a string without slashes (/) or quotes (\")"
msgstr ""
+"ネットワーク名はスラッシュ (/) または引用符 (\") のないストリングでなければな"
+"りません"
msgid "Supported network types are isolated, NAT and bridge"
msgstr "サポートされているネットワーク・タイプは隔離、NAT、およびブリッジです"
msgid "Network subnet must be a string with IP address and prefix or netmask"
msgstr ""
-"ネットワーク・サブネットは、IP アドレスとプレフィックスまたはネットマスクが"
-"入ったストリングでなければなりません"
+"ネットワーク・サブネットは、IP アドレスとプレフィックスまたはネットマスクのあ"
+"るストリングでなければなりません"
msgid "Network interface must be a string"
msgstr "ネットワーク・インターフェースはストリングでなければなりません"
@@ -905,82 +963,87 @@ msgid ""
"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
"and/or templates linked to this network."
msgstr ""
+"ネットワーク %(name)s を削除できません。このネットワークにリンクしている仮想"
+"マシン %(vms)s とテンプレートのいずれかまたは両方がいくつかあります。"
#, python-format
msgid ""
"Unable to deactivate network %(name)s. There are some virtual machines "
"%(vms)s and/or templates linked to this network."
msgstr ""
+"ネットワーク %(name)s を非アクティブにできません。このネットワークにリンクし"
+"ている仮想マシン %(vms)s とテンプレートのいずれかまたは両方がいくつかありま"
+"す。"
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
msgstr ""
-"ブリッジ・デバイス %(name)s を、VLAN のトランク・デバイスにすることはできませ"
-"ん。"
+"ブリッジ・デバイス %(name)s は VLAN のトランク・デバイスにはできません。"
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr "インターフェース %(iface)s の活動化に失敗しました: %(err)s。"
+msgstr "インターフェース %(iface)s のアクティブ化に失敗しました: %(err)s。"
#, python-format
msgid ""
"Failed to activate interface %(iface)s. Please check the physical link "
"status."
msgstr ""
-"インターフェース %(iface)s の活動化に失敗しました。物理リンク状況を確認してく"
-"ださい。"
+"インターフェース %(iface)s のアクティブ化に失敗しました。物理リンク状況を確認"
+"してください。"
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
-msgstr ""
+msgstr "ネットワーク %(name)s の開始に失敗しました。詳細: %(err)s"
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr "デバッグ・レポート %(name)s は存在しません。"
+msgstr "デバッグ・レポート %(name)s は存在しません"
msgid "Debug report tool not found in system"
msgstr "デバッグ・レポート・ツールがシステムに見つかりません"
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
-msgstr "デバッグ・レポート %(name)s を作成できません。詳細: %(err)s"
+msgstr "デバッグ・レポート %(name)s を作成できません。詳細: %(err)s。"
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
-msgstr ""
+msgstr "指定された名前 %(name)s のデバッグ・レポートが見つかりません"
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
msgstr "デバッグ・レポート %(name)s を生成できません。詳細: %(err)s"
msgid "You should give a name for the debug report file."
-msgstr ""
+msgstr "デバッグ・レポート・ファイルに名前を付ける必要があります。"
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
+"デバッグ・レポート名はストリングでなければなりません。文字、数字、下線 "
+"(「_」)、およびハイフン (「-」) のみを使用できます。"
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
msgstr ""
-"名前「%(name)s」のボリューム・グループは既に存在します。論理プールを作成する"
-"には、別の名前を選択してください。"
+"指定の名前「%(name)s」を持つデバッグ・レポートは既に存在します。別の名前を使"
+"用してください。"
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr ""
-"ストレージ・サーバー %(server)s は、Kimchi によって使用されていませんでした"
+msgstr "ストレージ・サーバー %(server)s は Kimchi で使用されていませんでした"
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr "ディストリビューション「%(name)s」は存在しません"
+msgstr "Distro「%(name)s」は存在しません"
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr "パーティション %(name)s は、ホストに存在しません"
+msgstr "パーティション %(name)s はホストに存在しません"
msgid "Unable to shutdown host machine as there are running virtual machines"
msgstr "稼働中の仮想マシンがあるため、ホスト・マシンをシャットダウンできません"
@@ -993,88 +1056,88 @@ msgid "Node device '%(name)s' not found"
msgstr "ノード・デバイス「%(name)s」が見つかりません"
msgid "Conflicting flag filters specified."
-msgstr ""
+msgstr "競合するフラグ・フィルターが指定されました。"
msgid "No packages marked for update"
msgstr "更新の対象としてマークされているパッケージはありません"
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr "パッケージ %(name)s は、更新の対象としてマークされていません。"
+msgstr "パッケージ %(name)s には更新対象のマークが付けられていません。"
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
msgstr ""
-"更新の対象としてマークされたパッケージを取得しているときに、エラーがありまし"
-"た。詳細: %(err)s"
+"更新対象のマークが付けられたパッケージを取得中にエラーが発生しました。詳細: "
+"%(err)s"
msgid "There is no compatible package manager for this system."
msgstr "このシステム用の互換パッケージ・マネージャーがありません。"
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr "%(item)s はデータ・ストアに見つかりません"
+msgstr "%(item)s がデータ・ストアに見つかりません"
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr "無効な URI %(uri)s"
+msgstr "URI %(uri)s が無効です"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
-msgstr ""
-"コマンド「%(cmd)s」を実行していましたが、%(seconds)s 秒を経過してタイムアウト"
-"になりました"
+msgstr "「%(cmd)s」コマンドの実行中、%(seconds)s 秒後にタイムアウトになります"
msgid "Unable to choose a virtual machine name"
-msgstr ""
+msgstr "仮想マシン名を選択できません"
#, python-format
msgid "Invalid data value '%(value)s'"
-msgstr ""
+msgstr "データ値「%(value)s」が無効です"
#, python-format
msgid "Invalid data unit '%(unit)s'"
-msgstr ""
+msgstr "データ単位「%(unit)s」が無効です"
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
msgstr ""
-"ストレージ・タイプが無効です。サポートされているタイプは「cdrom」です。"
+"ストレージ・タイプが無効です。サポートされているタイプは「cdrom」および"
+"「disk」です"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
msgstr ""
+"パス「%(value)s」はデバイスに有効なローカルまたはリモートのパスではありません"
msgid "Only CDROM path can be update."
-msgstr ""
+msgstr "CDROM パスのみが更新可能です。"
#, python-format
msgid ""
"The storage device %(dev_name)s does not exist in the virtual machine "
"%(vm_name)s"
msgstr ""
+"ストレージ・デバイス %(dev_name)s が仮想マシン %(vm_name)s に存在しません"
#, python-format
msgid "Error while creating new storage device: %(error)s"
-msgstr ""
-"新しいストレージ・デバイスを作成しているときに、エラーがありました: %(error)s"
+msgstr "新しいストレージ・デバイスの作成中にエラーが発生しました: %(error)s"
#, python-format
msgid "Error while updating storage device: %(error)s"
-msgstr ""
-"ストレージ・デバイスを更新しているときに、エラーがありました: %(error)s"
+msgstr "ストレージ・デバイスの更新中にエラーが発生しました: %(error)s"
#, python-format
msgid "Error while removing storage device: %(error)s"
-msgstr ""
-"ストレージ・デバイスを削除しているときに、エラーがありました: %(error)s"
+msgstr "ストレージ・デバイスの除去中にエラーが発生しました: %(error)s"
msgid "Do not support IDE device hot plug"
-msgstr ""
+msgstr "IDE デバイス・ホット・プラグはサポートされていません"
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
"disk"
-msgstr "新しい仮想マシン・ディスクに追加するタイプおよびパスを指定します"
+msgstr ""
+"新規仮想マシン・ディスクを追加するには、タイプとパス、またはタイプとプール/ボ"
+"リュームを指定してください"
msgid "Specify path to update virtual machine disk"
msgstr "仮想マシン・ディスクを更新するには、パスを指定してください"
@@ -1082,24 +1145,30 @@ msgstr "仮想マシン・ディスクを更新するには、パスを指定し
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
msgstr ""
+"コントローラー・タイプ %(type)s のデバイスの制限 %(limit)s に達しました"
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
msgstr ""
+"指定のプールまたはボリュームのディスク・パス情報を取得できません: %(error)s"
msgid "Volume already in use by other virtual machine."
-msgstr ""
+msgstr "ボリュームは既に他の仮想マシンで使用中です。"
msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
-msgstr "新しい仮想マシン・ディスクに追加するタイプおよびパスを指定します"
+msgstr ""
+"新規仮想マシン・ディスクを追加するために指定できるのはパスまたはプール/ボ"
+"リュームのうち 1 つだけです"
#, python-format
msgid ""
"Volume chosen with format %(format)s does not fit in the storage type "
"%(type)s"
msgstr ""
+"フォーマット %(format)s で選択されたボリュームがストレージ・タイプ%(type)s に"
+"適合しません"
msgid "YUM Repository ID must be one word only string."
msgstr "YUM リポジトリー ID は、1 ワードのみのストリングでなければなりません"
@@ -1129,7 +1198,7 @@ msgid "Components to DEB repository must be a string"
msgstr "DEB リポジトリーへのコンポーネントは、ストリングでなければなりません"
msgid "Mirror list to repository must be a string"
-msgstr ""
+msgstr "リポジトリーに対するミラー・リストはストリングでなければなりません"
msgid "YUM Repository name must be string."
msgstr "YUM リポジトリー名はストリングでなければなりません。"
@@ -1152,21 +1221,23 @@ msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
"update a YUM repository."
msgstr ""
+"YUM リポジトリーを作成または更新するには、リポジトリー・ベース URL、ミラー・"
+"リスト、またはメタリンクを指定してください。"
msgid "Repository management tool was not recognized for your system."
msgstr "システム用のリポジトリー管理ツールが認識されませんでした。"
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr "リポジトリー %(repo_id)s は既に有効になっています。"
+msgstr "リポジトリー %(repo_id)s は既に使用可能になっています。"
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr "リポジトリー %(repo_id)s は既に無効になっています。"
+msgstr "リポジトリー %(repo_id)s は既に使用不可になっています。"
#, python-format
msgid "Could not remove repository %(repo_id)s."
-msgstr "リポジトリー %(repo_id)s を削除できませんでした。"
+msgstr "リポジトリー %(repo_id)s を除去できませんでした。"
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
@@ -1175,16 +1246,16 @@ msgstr ""
msgid "Specify repository distribution in order to create a DEB repository."
msgstr ""
-"DEB リポジトリーを作成するためには、リポジトリー・ディストリビューションを指"
-"定してください。"
+"DEB リポジトリーを作成するには、リポジトリー・ディストリビューションを指定し"
+"てください。"
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr "リポジトリー %(repo_id)s を有効にできませんでした。"
+msgstr "リポジトリー %(repo_id)s を使用可能にできませんでした。"
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr "リポジトリー %(repo_id)s を無効にできませんでした。"
+msgstr "リポジトリー %(repo_id)s を使用不可にできませんでした。"
msgid "YUM Repository ID already exists"
msgstr "YUM リポジトリー ID は既に存在します"
@@ -1206,76 +1277,94 @@ msgstr "リポジトリーを追加できません。詳細: 「%(err)s」"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr "リポジトリーを削除できません。詳細: 「%(err)s」"
+msgstr "リポジトリーを除去できません。詳細: 「%(err)s」"
#, python-format
msgid ""
"Configuration items: '%(items)s' are not supported by repository manager"
msgstr ""
+"構成アイテム「%(items)s」はリポジトリー・マネージャーでサポートされていません"
msgid "Repository metalink must be an http://, ftp:// or file:// URL."
msgstr ""
+"リポジトリー・メタリンクは http://、ftp://、または file:// URL でなければなり"
+"ません。"
msgid "Cannot specify mirrorlist and metalink at the same time."
-msgstr ""
+msgstr "ミラー・リストとメタリンクを同時に指定することはできません。"
#, python-format
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
msgstr ""
+"仮想マシン「%(vm)s」はそのスナップショットを作成する前に停止しなければなりま"
+"せん。"
#, python-format
msgid ""
"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"仮想マシン「%(vm)s」でスナップショット「%(name)s」を作成できません。詳細: "
+"%(err)s"
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
-msgstr ""
+msgstr "スナップショット「%(name)s」は仮想マシン「%(vm)s」に存在しません。"
#, python-format
msgid ""
"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"仮想マシン「%(vm)s」でスナップショット「%(name)s」を取得できません。詳細: "
+"%(err)s"
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
msgstr ""
+"仮想マシン「%(vm)s」でスナップショットをリストできません。詳細: %(err)s"
#, python-format
msgid ""
"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"仮想マシン「%(vm)s」でスナップショット「%(name)s」を削除できません。詳細: "
+"%(err)s"
#, python-format
msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"仮想マシン「%(vm)s」の最新スナップショットを取得できません。詳細: %(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
msgstr ""
+"仮想マシン「%(vm)s」をスナップショット「%(name)s」に戻すことができません。詳"
+"細: %(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
+"仮想マシン「%(vm)s」にはフォーマット「%(format)s」のディスクが含まれているた"
+"め、この仮想マシンのスナップショットを作成できません。「qcow2」のみがサポート"
+"されています。"
msgid "The number of vCPUs is too large for this system."
-msgstr ""
+msgstr "vCPU がこのシステムには大きすぎます。"
msgid "Invalid vCPU/topology combination."
-msgstr ""
+msgstr "vCPU/トポロジーの組み合わせが無効です。"
msgid "This host (or current configuration) does not allow CPU topology."
-msgstr ""
+msgstr "このホスト (または現行構成) では CPU トポロジーは許可されていません。"
msgid "ERROR CODE"
msgstr "エラー・コード"
@@ -1330,7 +1419,7 @@ msgid "Create"
msgstr "作成"
msgid "Creating..."
-msgstr ""
+msgstr "作成中..."
msgid "Edit Guest"
msgstr "ゲストの編集"
@@ -1345,13 +1434,13 @@ msgid "Interface"
msgstr "インターフェース"
msgid "Permission"
-msgstr "バージョン"
+msgstr "許可"
msgid "Host PCI Device"
-msgstr ""
+msgstr "ホスト PCI デバイス"
msgid "Snapshot"
-msgstr ""
+msgstr "スナップショット"
msgid "Name"
msgstr "名前"
@@ -1360,16 +1449,16 @@ msgid "CPUs"
msgstr "CPU"
msgid "Memory (MB)"
-msgstr "メモリー"
+msgstr "メモリー (MB)"
msgid "Icon"
msgstr "アイコン"
msgid "Device"
-msgstr "デバイス名"
+msgstr "デバイス"
msgid "Path"
-msgstr "NFS パス"
+msgstr "パス"
msgid "Network"
msgstr " ネットワーク"
@@ -1378,37 +1467,37 @@ msgid "Type"
msgstr "タイプ"
msgid "MAC Address"
-msgstr ""
+msgstr "MAC アドレス"
msgid "Available system users and groups"
-msgstr ""
+msgstr "使用可能なシステム・ユーザーおよびグループ"
msgid "Selected system users and groups"
-msgstr ""
+msgstr "選択されたシステム・ユーザーおよびグループ"
msgid "User"
-msgstr ""
+msgstr "ユーザー"
msgid "All"
msgstr "すべて"
msgid "To Add"
-msgstr ""
+msgstr "追加予定"
msgid "Added"
-msgstr ""
+msgstr "追加済み"
msgid "filter"
-msgstr ""
+msgstr "フィルター"
msgid "Product"
-msgstr ""
+msgstr "製品"
msgid "Vendor"
msgstr "ベンダー"
msgid "Created"
-msgstr ""
+msgstr "作成日"
msgid "Save"
msgstr "保存"
@@ -1423,7 +1512,7 @@ msgid "Cancel"
msgstr "取消"
msgid "revert"
-msgstr ""
+msgstr "戻す"
msgid "Add a Storage Device to VM"
msgstr "VM にストレージ・デバイスを追加"
@@ -1432,19 +1521,19 @@ msgid "Device Type"
msgstr "デバイス・タイプ"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "デバイス・タイプ。現在サポートされているのは \"cdrom\" のみです。"
+msgstr "デバイス・タイプ。現在、「cdrom」と「disk」がサポートされています。"
msgid "Storage Pool"
msgstr "ストレージ・プール"
msgid "Storage pool which volume located in"
-msgstr "ストレージ・プール・パスはストリングでなければなりません"
+msgstr "ボリュームが含まれているストレージ・プール"
msgid "Storage Volume"
-msgstr "ストレージ・プール名"
+msgstr "ストレージ・ボリューム"
msgid "Storage volume to be attached"
-msgstr "ストレージ・ボリューム名はストリングでなければなりません"
+msgstr "接続されるストレージ・ボリューム"
msgid "File Path"
msgstr "ファイル・パス"
@@ -1462,13 +1551,13 @@ msgid "Reset"
msgstr "リセット"
msgid "Pause"
-msgstr ""
+msgstr "一時停止"
msgid "Resume"
-msgstr ""
+msgstr "再開"
msgid "Power Off"
-msgstr ""
+msgstr "電源オフ"
msgid "Actions"
msgstr "アクション"
@@ -1477,7 +1566,7 @@ msgid "Connect"
msgstr "接続"
msgid "Clone"
-msgstr ""
+msgstr "クローン"
msgid "Edit"
msgstr "編集"
@@ -1498,7 +1587,7 @@ msgid "Log in"
msgstr "ログイン"
msgid "Logging in..."
-msgstr "ログインしています..."
+msgstr "ログイン中..."
msgid "Host"
msgstr "ホスト"
@@ -1525,14 +1614,14 @@ msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"ホスト・システムに接続できません。ホスト・システムが稼働していて、ネットワー"
-"ク接続が行われていることを確認してください。HTTP 要求応答 %1"
+"ホスト・システムに接続できません。ホスト・システムが稼働しており、ネットワー"
+"クに接続していることを確認してください。HTTP 要求応答 %1。"
msgid "Unable to read file."
-msgstr ""
+msgstr "ファイルを読み取ることができません。"
msgid "Error while uploading file."
-msgstr ""
+msgstr "ファイルのアップロード中にエラーが発生しました。"
msgid "Delete Confirmation"
msgstr "削除の確認"
@@ -1547,13 +1636,13 @@ msgid "Warning"
msgstr "警告"
msgid "Cloning..."
-msgstr ""
+msgstr "クローン作成中..."
msgid "Loading..."
-msgstr "ロードしています..."
+msgstr "ロード中..."
msgid "An error occurred while retrieving system information."
-msgstr ""
+msgstr "システム情報の取得中にエラーが発生しました。"
msgid "Retry"
msgstr "再試行"
@@ -1562,20 +1651,20 @@ msgid "Detailed message:"
msgstr "詳細メッセージ:"
msgid "No ISO found"
-msgstr ""
+msgstr "ISO が見つかりません"
msgid "This is not a valid ISO file."
msgstr "有効な ISO ファイルではありません。"
msgid "This may take a long time. Do you want to continue?"
-msgstr "しばらく時間がかかることがあります。続行しますか?"
+msgstr "これには時間がかかることがあります。続行しますか ?"
msgid "This will permanently delete the template. Would you like to continue?"
-msgstr "テンプレートは完全に削除されます。続行しますか?"
+msgstr "これにより、テンプレートが永続的に削除されます。続行しますか?"
msgid "Unable to shut down system as there are some virtual machines running!"
msgstr ""
-"いくつかの仮想マシンが稼働しているために、システムをシャットダウンできません!"
+"いくつかの仮想マシンが稼働しているため、システムをシャットダウンできません"
msgid "Max:"
msgstr "最大:"
@@ -1666,10 +1755,10 @@ msgid "Update All"
msgstr "すべて更新"
msgid "Updating..."
-msgstr "更新しています..."
+msgstr "更新中..."
msgid "Failed to retrieve packages update information."
-msgstr ""
+msgstr "パッケージ更新情報の取得に失敗しました。"
msgid "Failed to update package(s)."
msgstr "パッケージを更新できませんでした。"
@@ -1690,7 +1779,7 @@ msgid "Generate"
msgstr "生成"
msgid "Generating..."
-msgstr "生成しています..."
+msgstr "生成中..."
msgid "Rename"
msgstr "名前変更"
@@ -1701,102 +1790,118 @@ msgstr "ダウンロード"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
"hyphen ('-')."
-msgstr "レポート名に使用できるのは、英字、数字、およびハイフン (-) のみです。"
+msgstr ""
+"レポート名には文字、数字、下線 (「_」)、およびハイフン (「-」) のみを使用でき"
+"ます。"
msgid "Pending..."
-msgstr "ロードしています..."
+msgstr "保留..."
msgid "Report name is the same as the original one."
-msgstr ""
+msgstr "レポート名はオリジナルの名前と同じです。"
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
"cannot be undone. Would you like to continue?"
msgstr ""
-"仮想マシンとその仮想ディスクが削除されます。この操作は元に戻すことができませ"
-"ん。続行しますか?"
+"これにより、仮想マシンとその仮想ディスクが削除されます。この操作は元に戻すこ"
+"とができません。続行しますか?"
msgid "Power off Confirmation"
-msgstr "削除の確認"
+msgstr "電源オフの確認"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
"cache in the guest. Would you like to continue?"
msgstr ""
+"このアクションにより、フラッシュされていないディスク・キャッシュがゲストにあ"
+"るなどの、望ましくない結果がもたらされる可能性があります。続行しますか?"
msgid "Reset Confirmation"
-msgstr "削除の確認"
+msgstr "リセットの確認"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
"Would you like to continue?"
msgstr ""
+"ゲスト OS をシャットダウンせずにリセットすると、データ損失の危険があります。"
+"続行しますか?"
msgid "Shut Down Confirmation"
-msgstr "削除の確認"
+msgstr "シャットダウンの確認"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
-msgstr "テンプレートは完全に削除されます。続行しますか?"
+msgstr ""
+"ゲスト OS ではこの要求が無視される可能性があることに注意してください。続行し"
+"ますか?"
msgid "Virtual Machine delete Confirmation"
-msgstr ""
+msgstr "仮想マシンの削除確認"
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
msgstr ""
+"この仮想マシンは永続的ではありません。電源オフにより削除されます。続行します"
+"か?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
"default storage pool. The same will happen when the target pool does not "
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
+"ターゲット・ゲストに SCSI ボリュームまたは iSCSI ボリュームがある場合、これら"
+"はデフォルト・ストレージ・プールにクローン作成されます。ボリュームのクローン"
+"を作成するために十分なスペースがターゲット・プールにない場合も同様です。続行"
+"しますか ?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
msgstr ""
-"この CDROM は完全に切り離されますが、再接続できます。切り離しを続行しますか?"
+"この CDROM は永続的に切り離されますが、再接続できます。切り離しを続行します"
+"か?"
msgid "Attaching..."
-msgstr "接続しています..."
+msgstr "接続中..."
msgid "Replacing..."
-msgstr "交換しています..."
+msgstr "交換中..."
msgid "Successfully attached!"
-msgstr "正常に接続しました!"
+msgstr "正常に接続しました"
msgid "Successfully replaced!"
-msgstr "正常に交換しました!"
+msgstr "正常に置換されました"
msgid "Successfully detached!"
-msgstr "正常に切り離しました!"
+msgstr "正常に切り離されました"
msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
msgstr ""
+"このディスクは完全に切り離されますが、再接続できます。切り離しを続行しますか?"
msgid "interface:"
-msgstr ""
+msgstr "インターフェース:"
msgid "address:"
-msgstr ""
+msgstr "アドレス:"
msgid "link_type:"
-msgstr ""
+msgstr "link_type:"
msgid "block:"
-msgstr ""
+msgstr "ブロック:"
msgid "drive_type:"
-msgstr ""
+msgstr "drive_type:"
msgid "model:"
-msgstr ""
+msgstr "モデル:"
msgid "Affected devices:"
-msgstr ""
+msgstr "影響を受けるデバイス:"
msgid "The VLAN id must be between 1 and 4094."
msgstr "VLAN ID は、1 から 4094 まででなければなりません。"
@@ -1818,17 +1923,19 @@ msgid ""
"This network is not persistent. Instead of stop, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"このストレージ・プールは永続的なものではありません。このアクションで、非アク"
-"ティブになるのではなく完全に削除されます。続行しますか?"
+"このネットワークは永続的なものではありません。停止ではなくこのアクションを行"
+"うと、ネットワークは永続的に削除されます。続行しますか?"
msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
+"ブリッジ VLAN タグは NetworkManager が使用可能になっている場合は正しく機能し"
+"ない可能性があります。使用不可にすることを検討してください。"
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
-msgstr "ストレージ・プールは完全に削除されます。続行しますか?"
+msgstr "これにより、ストレージ・プールが永続的に削除されます。続行しますか?"
msgid "This storage pool is empty."
msgstr "このストレージ・プールは空です。"
@@ -1846,13 +1953,13 @@ msgid "No SCSI adapters found."
msgstr "SCSI アダプターが見つかりません。"
msgid "Loading iSCSI targets..."
-msgstr ""
+msgstr "iSCSI ターゲットをロード中..."
msgid "No iSCSI found. Please input one."
-msgstr ""
+msgstr "iSCSI が見つかりません。入力してください。"
msgid "Failed to load iSCSI targets."
-msgstr ""
+msgstr "iSCSI ターゲットのロードに失敗しました。"
msgid "The storage pool name can not be blank."
msgstr "ストレージ・プール名をブランクにすることはできません。"
@@ -1876,10 +1983,10 @@ msgid "Server name can not be blank."
msgstr "サーバー名をブランクにすることはできません。"
msgid "This is not a valid Server Name or IP. Please, modify it."
-msgstr ""
+msgstr "これは有効なサーバー名または IP ではありません。変更してください。"
msgid "Looking for available partitions ..."
-msgstr "愛用可能なパーティションを探しています..."
+msgstr "愛用可能なパーティションを検索中..."
msgid "No available partitions found."
msgstr "使用可能なパーティションが見つかりません。"
@@ -1888,32 +1995,34 @@ msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"このストレージ・プールは永続的なものではありません。このアクションで、非アク"
-"ティブになるのではなく完全に削除されます。続行しますか?"
+"このストレージ・プールは永続的ではありません。非アクティブ化ではなくこのアク"
+"ションを行うと、ストレージ・プールは永続的に削除されます。続行しますか?"
msgid "Unable to retrieve partitions information."
-msgstr "リポジトリー情報を取得できません。詳細: 「%(err)s」"
+msgstr "パーティション情報を取得できません。"
msgid "In progress..."
-msgstr ""
+msgstr "進行中..."
msgid "Failed!"
-msgstr ""
+msgstr "失敗しました"
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
msgstr ""
+"CDROM パスは有効なローカル/リモート・パスでなければならず、ブランクにはできま"
+"せん。"
msgid "Disk pool or volume cannot be blank."
-msgstr "ストレージ・プール名をブランクにすることはできません。"
+msgstr "ディスク・プールまたはボリュームはブランクにはできません。"
msgid "Peers"
-msgstr ""
+msgstr "ピア"
msgid "Searching"
-msgstr ""
+msgstr "検索"
msgid "No peers found."
-msgstr ""
+msgstr "ピアが見つかりません。"
msgid "Help"
msgstr "ヘルプ"
@@ -1928,7 +2037,7 @@ msgid "Version:"
msgstr "バージョン: "
msgid "Session timeout, please re-login."
-msgstr ""
+msgstr "セッションがタイムアウトになりました。再度ログインしてください。"
msgid "User Name"
msgstr "ユーザー名"
@@ -1947,21 +2056,22 @@ msgid ""
"based on current time. Name can contain: letters, digits, underscore (\"_\") "
"and hyphen (\"-\")."
msgstr ""
-"名前はレポートを識別するために使用されます。省略すると、現在時刻に基づいて選"
-"択されます。名前には英字、数字、およびハイフン (-) を使用できます。"
+"名前はレポートの識別に使用されます。省略すると、名前は現在時刻に基づいて選択"
+"されます。名前には文字、数字、下線 (「_」)、およびハイフン (「-」) を使用でき"
+"ます。"
msgid "Rename a Debug Report"
-msgstr "新規デバッグ・レポートの生成"
+msgstr "デバッグ・レポートの名前変更"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
"hyphen (\"-\")."
msgstr ""
-"名前はレポートを識別するために使用されます。省略すると、現在時刻に基づいて選"
-"択されます。名前には英字、数字、およびハイフン (-) を使用できます。"
+"名前はレポートの識別に使用されます。名前には文字、数字、およびハイフン "
+"(「-」) を使用できます。"
msgid "Submit"
-msgstr ""
+msgstr "実行依頼"
msgid "Add a Repository"
msgstr "リポジトリーの追加"
@@ -1983,11 +2093,11 @@ msgstr "必須フィールド"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
msgstr ""
-"リポジトリーの URL で、サポートされているプロトコルは http、ftp、および file "
+"リポジトリーの URL で、サポートされているプロトコルは http、ftp、およびfile "
"です。"
msgid "Repository is a mirror"
-msgstr "リポジトリーはミラーです。"
+msgstr "リポジトリーはミラーです"
msgid "Distribution"
msgstr "ディストリビューション"
@@ -2014,19 +2124,19 @@ msgid "No"
msgstr " いいえ"
msgid "Add a Volume to Storage Pool"
-msgstr ""
+msgstr "ボリュームをストレージ・プールに追加"
msgid "Fetch from remote URL"
-msgstr ""
+msgstr "リモート URL からフェッチ"
msgid "Enter the remote URL here."
-msgstr ""
+msgstr "ここにリモート URL を入力します。"
msgid "Upload a file"
-msgstr ""
+msgstr "ファイルのアップロード"
msgid "Choose the file you want to upload."
-msgstr ""
+msgstr "アップロードしたいファイルを選択してください。"
msgid "Define a New Storage Pool"
msgstr "新規ストレージ・プールの定義"
@@ -2049,8 +2159,7 @@ msgstr "ストレージ・パス"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
msgstr ""
-"ストレージ・プールのパス。それぞれのストレージ・プールに固有のパスが必要で"
-"す。"
+"ストレージ・プールのパス。各ストレージ・プールには固有のパスが必要です。"
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
@@ -2063,8 +2172,7 @@ msgstr "NFS サーバー IP"
msgid "NFS server IP or hostname. It can be input or chosen from history."
msgstr ""
-"NFS サーバー IP またはホスト名。入力することも、ヒストリーから選択することも"
-"できます。"
+"NFS サーバー IP またはホスト名。入力するか、ヒストリーから選択できます。"
msgid "NFS Path"
msgstr "NFS パス"
@@ -2115,7 +2223,7 @@ msgid "Local ISO Image"
msgstr "ローカル ISO イメージ"
msgid "Local Image File"
-msgstr ""
+msgstr "ローカル・イメージ・ファイル"
msgid "Remote ISO Image"
msgstr "リモート ISO イメージ"
@@ -2145,7 +2253,7 @@ msgid "I want to use a specific ISO file"
msgstr "特定の ISO ファイルを使用する"
msgid "Loading default remote ISOs ..."
-msgstr "デフォルトのリモート ISO をロードしています..."
+msgstr "デフォルトのリモート ISO をロード中..."
msgid "Arch: "
msgstr "アーキテクチャー: "
@@ -2163,28 +2271,28 @@ msgid "CDROM"
msgstr "CDROM"
msgid "Image File"
-msgstr ""
+msgstr "イメージ・ファイル"
msgid "Graphics"
msgstr "グラフィックス"
msgid "Disk(GB)"
-msgstr ""
+msgstr "ディスク (GB)"
msgid "Disk Format"
-msgstr ""
+msgstr "ディスク・フォーマット"
msgid "CPU Number"
msgstr "CPU 数"
msgid "Manually set CPU topology"
-msgstr ""
+msgstr "CPU トポロジーを手動で設定"
msgid "Cores"
-msgstr ""
+msgstr "コア"
msgid "Threads"
-msgstr ""
+msgstr "スレッド"
msgid "CPU"
msgstr "CPU"
@@ -2217,7 +2325,7 @@ msgid "OS Code Name"
msgstr "OS コード名"
msgid "CPU(s)"
-msgstr ""
+msgstr "CPU"
msgid "System Statistics"
msgstr "システム統計情報"
@@ -2238,10 +2346,10 @@ msgid "Address Space"
msgstr "アドレス・スペース"
msgid "Name should not contain '/' and '\"'."
-msgstr ""
+msgstr "「/」や「\"」は名前に使用しないでください。"
msgid "Isolated: no external network connection"
-msgstr "隔離: 物理ネットワーク接続なし"
+msgstr "隔離: 外部ネットワーク接続がありません"
msgid "NAT: outbound physical network connection only"
msgstr "NAT: アウトバウンド物理ネットワーク接続のみ"
@@ -2250,22 +2358,22 @@ msgid "Bridged: Virtual machines are connected to physical network directly"
msgstr "ブリッジ: 仮想マシンが直接物理ネットワークに接続される"
msgid "(No interfaces found)"
-msgstr ""
+msgstr "(インターフェースが見つかりません)"
msgid "Destination"
-msgstr "宛先:"
+msgstr "宛先"
msgid "Enable VLAN"
-msgstr "VLAN を使用可能にする:"
+msgstr "VLAN を使用可能にしてください"
msgid "VLAN ID"
-msgstr "VLAN ID:"
+msgstr "VLAN ID"
msgid "Stop"
msgstr "停止"
msgid "%Used"
-msgstr ""
+msgstr "使用率(%)"
msgid "Location"
msgstr "ロケーション"
@@ -2289,19 +2397,19 @@ msgid "Activate"
msgstr "アクティブにする"
msgid "Add Volume"
-msgstr ""
+msgstr "ボリュームの追加"
msgid "Extend"
-msgstr ""
+msgstr "拡張"
msgid "Undefine"
msgstr "定義を解除する"
msgid "Format"
-msgstr "フォーマット:"
+msgstr "フォーマット"
msgid "Allocation"
-msgstr "割り振り:"
+msgstr "割り振り"
msgid "No templates found."
msgstr "テンプレートが見つかりません。"
diff --git a/po/kimchi.pot b/po/kimchi.pot
index 81fac83..1179357 100755
--- a/po/kimchi.pot
+++ b/po/kimchi.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-06-24 09:39-0300\n"
+"POT-Creation-Date: 2015-08-21 09:52-0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL(a)li.org>\n"
@@ -85,6 +85,9 @@ msgstr ""
msgid "\"_passthrough_affected_by\" should be a device name string"
msgstr ""
+msgid "\"_available_only\" should be \"true\" or \"false\""
+msgstr ""
+
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
msgstr ""
diff --git a/po/ko_KR.po b/po/ko_KR.po
index a6e5a80..4504a4b 100644
--- a/po/ko_KR.po
+++ b/po/ko_KR.po
@@ -6,118 +6,99 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-06-24 09:39-0300\n"
+"POT-Creation-Date: 2015-08-21 09:52-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
-"Language: en_US\n"
+"Language: ko_KR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"Plural-Forms: nplurals=1; plural=0;"
+"Plural-Forms: nplurals=1; plural=0;\n"
#, python-format
msgid "Unknown parameter %(value)s"
-msgstr ""
-"알 수 없는 매개변수 %(value)s"
+msgstr "알 수 없는 매개변수 %(value)s"
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr ""
-"%(resource)s의 삭제는 허용되지 않습니다."
+msgstr "%(resource)s의 삭제는 허용되지 않습니다."
#, python-format
msgid "%(resource)s does not implement update method"
-msgstr ""
-"%(resource)s에서는 업데이트 메소드를 구현하지 않습니다."
+msgstr "%(resource)s에서는 업데이트 메소드를 구현하지 않습니다."
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr ""
-"%(resource)s의 작성은 허용되지 않습니다."
+msgstr "%(resource)s의 작성은 허용되지 않습니다."
msgid "Unable to parse JSON request"
-msgstr ""
-"JSON 요청을 구문 분석할 수 없습니다."
+msgstr "JSON 요청을 구문 분석할 수 없습니다."
msgid "This API only supports JSON"
-msgstr ""
-"이 API는 JSON만 지원합니다."
+msgstr "이 API는 JSON만 지원합니다."
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
-msgstr ""
-"매개변수가 스키마의 요구사항과 일치하지 않음: %(err)s"
+msgstr "매개변수가 스키마의 요구사항과 일치하지 않음: %(err)s"
msgid "You don't have permission to perform this operation."
-msgstr ""
-"이 조작을 수행할 수 있는 권한이 없습니다."
+msgstr "이 조작을 수행할 수 있는 권한이 없습니다."
msgid "Datastore is not initiated in the model object."
-msgstr ""
-"데이터 저장소가 모델 오브젝트에서 시작되지 않았습니다."
+msgstr "데이터 저장소가 모델 오브젝트에서 시작되지 않았습니다."
#, python-format
msgid "Unable to start task due error: %(err)s"
-msgstr ""
-"오류 때문에 작업을 시작할 수 없음: %(err)s"
+msgstr "오류 때문에 작업을 시작할 수 없음: %(err)s"
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
-msgstr ""
-"'%(task)s 태스크 실행 중에 %(seconds)s초의 제한시간이 만료되었습니다."
+msgstr "'%(task)s 태스크 실행 중에 %(seconds)s초의 제한시간이 만료되었습니다."
#, python-format
msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
-msgstr ""
-"'%(username)s' 사용자 인증에 실패했습니다. [오류 코드: %(code)s]"
+msgstr "'%(username)s' 사용자 인증에 실패했습니다. [오류 코드: %(code)s]"
msgid "You are not authorized to access Kimchi"
-msgstr ""
-"Kimchi에 액세스할 권한이 없습니다."
+msgstr "Kimchi에 액세스할 권한이 없습니다."
#, python-format
msgid "Specify %(item)s to login into Kimchi"
-msgstr ""
-"Kimchi에 로그인하려면 %(item)s을(를) 지정하십시오."
+msgstr "Kimchi에 로그인하려면 %(item)s을(를) 지정하십시오."
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
-msgstr ""
-"지정한 LDAP 설정에서 %(user_id)s 사용자를 찾지 못했습니다."
+msgstr "지정한 LDAP 설정에서 %(user_id)s 사용자를 찾지 못했습니다."
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
-msgstr ""
-"올바르지 않은 LDAP 구성: %(item)s : %(value)s"
+msgstr "올바르지 않은 LDAP 구성: %(item)s : %(value)s"
msgid "Unknown \"_cap\" specified"
-msgstr ""
-"알 수 없는 \"_cap\"이 지정되었습니다."
+msgstr "알 수 없는 \"_cap\"이 지정되었습니다."
msgid "\"_passthrough\" should be \"true\" or \"false\""
-msgstr ""
-"\"_passthrough\"는 \"true\" 또는 \"false\"여야 합니다."
+msgstr "\"_passthrough\"는 \"true\" 또는 \"false\"여야 합니다."
msgid "\"_passthrough_affected_by\" should be a device name string"
-msgstr ""
-"\"_passthrough_affected_by\"는 장치 이름 문자열이어야 합니다."
+msgstr "\"_passthrough_affected_by\"는 장치 이름 문자열이어야 합니다."
+
+msgid "\"_available_only\" should be \"true\" or \"false\""
+msgstr "\"_available_only\"는 \"true\" 또는 \"false\"여야 합니다."
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
-msgstr ""
-"블록 장치를 가져오는 중에 오류가 발생했습니다. 세부사항: %(err)s"
+msgstr "블록 장치를 가져오는 중에 오류가 발생했습니다. 세부사항: %(err)s"
#, python-format
msgid "Error while getting block device information for %(device)s."
-msgstr ""
-"%(device)s에 대한 블록 장치 정보를 가져오는 중에 오류가 발생했습니다."
+msgstr "%(device)s에 대한 블록 장치 정보를 가져오는 중에 오류가 발생했습니다."
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr ""
-"distro 파일을 찾을 수 없음: %(filename)s"
+msgstr "distro 파일을 찾을 수 없음: %(filename)s"
#, python-format
msgid ""
@@ -127,28 +108,23 @@ msgstr ""
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
-msgstr ""
-"iSCSI 호스트 대상 %(portal)s에 로그인할 수 없습니다. 세부사항: %(err)s"
+msgstr "iSCSI 호스트 대상 %(portal)s에 로그인할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to login to iSCSI host %(host)s target %(target)s"
-msgstr ""
-"iSCSI 호스트 %(host)s 대상 %(target)s에 로그인할 수 없습니다."
+msgstr "iSCSI 호스트 %(host)s 대상 %(target)s에 로그인할 수 없습니다."
#, python-format
msgid "Unable to find ISO file %(filename)s"
-msgstr ""
-"ISO 파일 %(filename)s을(를) 찾을 수 없습니다."
+msgstr "ISO 파일 %(filename)s을(를) 찾을 수 없습니다."
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr ""
-"ISO 파일 %(filename)s은(는) 부트 가능하지 않습니다."
+msgstr "ISO 파일 %(filename)s은(는) 부트 가능하지 않습니다."
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
-msgstr ""
-"ISO 파일 %(filename)s에 유효한 El Torito 부트 레코드가 없습니다."
+msgstr "ISO 파일 %(filename)s에 유효한 El Torito 부트 레코드가 없습니다."
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
@@ -157,18 +133,17 @@ msgstr ""
#, python-format
msgid "Invalid El Torito boot indicator in ISO %(filename)s"
-msgstr ""
-"ISO %(filename)s에 올바르지 않은 El Torito 부트 표시기가 있습니다."
+msgstr "ISO %(filename)s에 올바르지 않은 El Torito 부트 표시기가 있습니다."
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
-msgstr ""
-"ISO %(filename)s에서 기본 볼륨이 예상치 않은 볼륨 유형입니다."
+msgstr "ISO %(filename)s에서 기본 볼륨이 예상치 않은 볼륨 유형입니다."
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
msgstr ""
-"ISO %(filename)s에서 볼륨 디스크립터를 읽는 중에 잘못된 형식이 발견되었습니다."
+"ISO %(filename)s에서 볼륨 디스크립터를 읽는 중에 잘못된 형식이 발견되었습니"
+"다."
#, python-format
msgid ""
@@ -178,88 +153,74 @@ msgid ""
"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
"'path_to_iso'.Details: %(err)s"
msgstr ""
-"하이퍼바이저가 이 ISO %(filename)s을(를) 사용할 권한이 없습니다. "
-"이를 /var/lib/libvirt 아래로 이동시키거나 (가능한 경우) 검색 권한을 "
-"'%(user)s' 사용자의 파일 액세스 제어 목록에 설정하거나 "
-"'%(user)s'을(를) ISO 경로 그룹 또는 (권장하지 않음) 'chmod -R o+x "
-"'path_to_iso'에 추가하십시오. 세부사항: %(err)s"
+"하이퍼바이저가 이 ISO %(filename)s을(를) 사용할 권한이 없습니다. 이를 /var/"
+"lib/libvirt 아래로 이동시키거나 (가능한 경우) 검색 권한을 '%(user)s' 사용자"
+"의 파일 액세스 제어 목록에 설정하거나 '%(user)s'을(를) ISO 경로 그룹 또는 (권"
+"장하지 않음) 'chmod -R o+x 'path_to_iso'에 추가하십시오. 세부사항: %(err)s"
msgid "An error occurred when probing image OS information."
-msgstr ""
-"이미지 OS 정보를 프로브하는 중에 오류가 발생했습니다."
+msgstr "이미지 OS 정보를 프로브하는 중에 오류가 발생했습니다."
msgid "No OS information found in given image."
-msgstr ""
-"지정된 이미지에 OS 정보가 없습니다."
+msgstr "지정된 이미지에 OS 정보가 없습니다."
#, python-format
msgid "Unable to read image file %(filename)s"
-msgstr ""
-"이미지 파일 %(filename)s을(를) 읽을 수 없습니다."
+msgstr "이미지 파일 %(filename)s을(를) 읽을 수 없습니다."
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
msgstr ""
-"이미지 파일은 시스템에 있는 기존 파일이여야 합니다. %(filename)s은(는) 유효하지 않은"
-"입력입니다."
+"이미지 파일은 시스템에 있는 기존 파일이여야 합니다. %(filename)s은(는) 유효하"
+"지 않은입력입니다."
#, python-format
msgid "Virtual machine %(name)s already exists"
-msgstr ""
-"가상 머신 %(name)s이(가) 이미 존재합니다."
+msgstr "가상 머신 %(name)s이(가) 이미 존재합니다."
#, python-format
msgid "Virtual machine %(name)s does not exist"
-msgstr ""
-"가상 머신 %(name)s이(가) 없습니다."
+msgstr "가상 머신 %(name)s이(가) 없습니다."
#, python-format
msgid ""
"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
"in use or the virtual machine is not powered off."
msgstr ""
-"가상 머신 %(name)s의 이름을 바꿀 수 없습니다. %(new_name)s 이름이 이미"
-"사용 중이거나 가상 머신의 전원이 꺼졌습니다."
+"가상 머신 %(name)s의 이름을 바꿀 수 없습니다. %(new_name)s 이름이 이미사용 중"
+"이거나 가상 머신의 전원이 꺼졌습니다."
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
-msgstr ""
-"중지된 가상 머신 %(name)s에 대한 스크린샷을 검색할 수 없습니다."
+msgstr "중지된 가상 머신 %(name)s에 대한 스크린샷을 검색할 수 없습니다."
msgid "Remote ISO image is not supported by this server."
-msgstr ""
-"원격 ISO 이미지는 이 서버에서 지원하지 않습니다."
+msgstr "원격 ISO 이미지는 이 서버에서 지원하지 않습니다."
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
-msgstr ""
-"스크린샷이 가상 머신 %(name)s에서 지원되지 않습니다."
+msgstr "스크린샷이 가상 머신 %(name)s에서 지원되지 않습니다."
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"가상 머신 %(name)s을(를) 작성할 수 없습니다. 세부사항: %(err)s"
+msgstr "가상 머신 %(name)s을(를) 작성할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"가상 머신 %(name)s을(를) 업데이트할 수 없습니다. 세부사항: %(err)s"
+msgstr "가상 머신 %(name)s을(를) 업데이트할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"가상 머신 %(name)s을(를) 검색할 수 없습니다. 세부사항: %(err)s"
+msgstr "가상 머신 %(name)s을(를) 검색할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to connect to powered off virtual machine %(name)s."
-msgstr ""
-"전원이 꺼진 가상 머신 %(name)s에 연결할 수 없습니다."
+msgstr "전원이 꺼진 가상 머신 %(name)s에 연결할 수 없습니다."
msgid "Virtual machine name must be a string without slashes (/)"
-msgstr ""
-"가상 머신 이름은 슬래시(/)를 포함하지 않는 문자열이어야 합니다."
+msgstr "가상 머신 이름은 슬래시(/)를 포함하지 않는 문자열이어야 합니다."
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
@@ -272,86 +233,70 @@ msgstr ""
"가상 머신에 대해 올바르지 않은 스토리지 URI %(value)s이(가) 지정되었습니다."
msgid "Supported virtual machine graphics are Spice or VNC"
-msgstr ""
-"지원되는 가상 머신 그래픽은 Spice 또는 VNC입니다."
+msgstr "지원되는 가상 머신 그래픽은 Spice 또는 VNC입니다."
msgid "Graphics address to listen on must be IPv4 or IPv6"
-msgstr ""
-"청취 대상 그래픽 주소는 IPv4 또는 IPv6여야 합니다."
+msgstr "청취 대상 그래픽 주소는 IPv4 또는 IPv6여야 합니다."
msgid "Specify a template to create a virtual machine from"
-msgstr ""
-"가상 머신을 작성하기 위한 템플리트를 지정하십시오."
+msgstr "가상 머신을 작성하기 위한 템플리트를 지정하십시오."
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"가상 머신 %(name)s을(를) 시작할 수 없습니다. 세부사항: %(err)s"
+msgstr "가상 머신 %(name)s을(를) 시작할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"가상 머신 %(name)s의 전원을 끌 수 없습니다. 세부사항: %(err)s"
+msgstr "가상 머신 %(name)s의 전원을 끌 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"가상 머신 %(name)s을(를) 삭제할 수 없습니다. 세부사항: %(err)s"
+msgstr "가상 머신 %(name)s을(를) 삭제할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"가상 머신 %(name)s을(를) 다시 설정할 수 없습니다. 세부사항: %(err)s"
+msgstr "가상 머신 %(name)s을(를) 다시 설정할 수 없습니다. 세부사항: %(err)s"
msgid "User name list must be an array"
-msgstr ""
-"사용자 이름 목록은 배열이어야 합니다."
+msgstr "사용자 이름 목록은 배열이어야 합니다."
msgid "User name must be a string"
-msgstr ""
-"사용자 이름은 문자열이어야 합니다."
+msgstr "사용자 이름은 문자열이어야 합니다."
msgid "Group name list must be an array"
-msgstr ""
-"그룹 이름 목록은 배열이어야 합니다."
+msgstr "그룹 이름 목록은 배열이어야 합니다."
msgid "Group name must be a string"
-msgstr ""
-"그룹 이름은 문자열이어야 합니다."
+msgstr "그룹 이름은 문자열이어야 합니다."
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr ""
-"사용자 '%(users)s'이(가) 없습니다."
+msgstr "사용자 '%(users)s'이(가) 없습니다."
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr ""
-"그룹 '%(groups)s'이(가) 없습니다."
+msgstr "그룹 '%(groups)s'이(가) 없습니다."
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"가상 머신 %(name)s을(를) 종료할 수 없습니다. 세부사항: %(err)s"
+msgstr "가상 머신 %(name)s을(를) 종료할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"가상 머신 %(name)s의 액세스 권한 메타데이터를 가져올 수 없습니다. 세부사항: %(err)s"
+"가상 머신 %(name)s의 액세스 권한 메타데이터를 가져올 수 없습니다. 세부사항: "
+"%(err)s"
msgid "The guest console password must be a string."
-msgstr ""
-"게스트 콘솔 비밀번호는 문자열이어야 합니다."
+msgstr "게스트 콘솔 비밀번호는 문자열이어야 합니다."
msgid "The life time for the guest console password must be a number."
-msgstr ""
-"게스트 콘솔 비밀번호의 지속 시간은 숫자여야 합니다."
+msgstr "게스트 콘솔 비밀번호의 지속 시간은 숫자여야 합니다."
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
-msgstr ""
-"가상 머신 '%(name)s'은(는) 복제하기 전에 중지해야 합니다."
+msgstr "가상 머신 '%(name)s'은(는) 복제하기 전에 중지해야 합니다."
#, python-format
msgid "Insufficient disk space to clone virtual machine '%(name)s'"
@@ -360,83 +305,73 @@ msgstr ""
#, python-format
msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
-msgstr ""
-"VM '%(name)s'을(를) 복제할 수 없습니다. 세부사항: %(err)s"
+msgstr "VM '%(name)s'을(를) 복제할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
-msgstr ""
-"비지속적 가상 머신 %(name)s에 대해 올바르지 않은 조작입니다."
+msgstr "비지속적 가상 머신 %(name)s에 대해 올바르지 않은 조작입니다."
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
-msgstr ""
-"VM '%(name)s'이(가) 실행 중이 아니므로 일시중단할 수 없습니다."
+msgstr "VM '%(name)s'이(가) 실행 중이 아니므로 일시중단할 수 없습니다."
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
-msgstr ""
-"VM %(name)s을(를) 일시중단할 수 없습니다. 세부사항: %(err)s"
+msgstr "VM %(name)s을(를) 일시중단할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
-msgstr ""
-"VM '%(name)s'이(가) 일시정지되지 않았기 때문에 재개할 수 없습니다."
+msgstr "VM '%(name)s'이(가) 일시정지되지 않았기 때문에 재개할 수 없습니다."
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
-msgstr ""
-"VM '%(name)s'을(를) 재개할 수 없습니다. 세부사항: %(err)s"
+msgstr "VM '%(name)s'을(를) 재개할 수 없습니다. 세부사항: %(err)s"
msgid "Memory assigned is higher then the maximum allowed in the host."
-msgstr ""
-"지정된 메모리가 호스트에서 허용되는 최대 크기보다 큽니다."
+msgstr "지정된 메모리가 호스트에서 허용되는 최대 크기보다 큽니다."
#, python-format
msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
-"VM '%(name)s'에서는 라이브 메모리 업데이트가 지원되지 않습니다. 머신 오프라인 상태로 메모리를 업데이트하여"
-"이 기능을 사용으로 설정하십시오."
+"VM '%(name)s'에서는 라이브 메모리 업데이트가 지원되지 않습니다. 머신 오프라"
+"인 상태로 메모리를 업데이트하여이 기능을 사용으로 설정하십시오."
msgid "Only increase memory is allowed in active VMs"
-msgstr ""
-"활성 VM에서는 메모리 늘리기만 허용됩니다."
+msgstr "활성 VM에서는 메모리 늘리기만 허용됩니다."
msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
msgstr ""
-"라이브 메모리 업데이트의 경우 새 메모리 값은 이전 메모리 값에 1024 Mib의 배수를 더한 값과"
-"같아야 합니다."
+"라이브 메모리 업데이트의 경우 새 메모리 값은 이전 메모리 값에 1024 Mib의 배수"
+"를 더한 값과같아야 합니다."
msgid "There are not enough free slots of 1024 Mib in the guest."
-msgstr ""
-"게스트에 1024Mib의 여유 슬롯이 없습니다."
+msgstr "게스트에 1024Mib의 여유 슬롯이 없습니다."
msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
msgstr ""
-"호스트의 libvirt 버전에서는 메모리 장치를 지원하지 않습니다. Libvirt는"
-"1.2.14이상이어야 합니다."
+"호스트의 libvirt 버전에서는 메모리 장치를 지원하지 않습니다. Libvirt는1.2.14"
+"이상이어야 합니다."
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
-msgstr ""
-"메모리 장치를 연결하는 중 오류가 발생했습니다. 세부사항: %(error)s"
+msgstr "메모리 장치를 연결하는 중 오류가 발생했습니다. 세부사항: %(error)s"
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
-"VM %(vmid)s이(가) 직접 지정된 호스트 장치 %(dev_name)s을(를) 포함하고 있지 않습니다."
+"VM %(vmid)s이(가) 직접 지정된 호스트 장치 %(dev_name)s을(를) 포함하고 있지 않"
+"습니다."
#, python-format
msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
-msgstr ""
-"호스트 장치 %(dev_name)s을(를) 직접 VM에 지정할 수 없습니다."
+msgstr "호스트 장치 %(dev_name)s을(를) 직접 VM에 지정할 수 없습니다."
msgid ""
"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
@@ -446,83 +381,70 @@ msgid ""
"iommu=1."
msgstr ""
"IOMMU 그룹을 찾을 수 없습니다. 올바르게 기능하려면 호스트 PCI pass through에 "
-"IOMMU 그룹이 있어야 합니다. BIOS에서 Intel VT-d 또는 AMD IOMMU를 사용하도록 설정한 후 "
-"커널이 IOMMU 지원으로 컴파일되었는지 확인하십시오. Intel CPU의 경우, "
-"/boot/grub2/grub.conf에 있는 커널 매개변수에 intel_iommu=on을 추가하십시오. AMD CPU의 경우,"
-"iommu=pt iommu=1을 추가하십시오."
+"IOMMU 그룹이 있어야 합니다. BIOS에서 Intel VT-d 또는 AMD IOMMU를 사용하도록 "
+"설정한 후 커널이 IOMMU 지원으로 컴파일되었는지 확인하십시오. Intel CPU의 경"
+"우, /boot/grub2/grub.conf에 있는 커널 매개변수에 intel_iommu=on을 추가하십시"
+"오. AMD CPU의 경우,iommu=pt iommu=1을 추가하십시오."
msgid "\"name\" should be a device name string"
-msgstr ""
-"\"name\"은(는) 장치 이름 문자열이어야 합니다."
+msgstr "\"name\"은(는) 장치 이름 문자열이어야 합니다."
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
msgstr ""
-"%(name)s 장치는 호스트에서 사용 중일 수 있습니다. 게스트에 연결할 수"
-"없습니다."
+"%(name)s 장치는 호스트에서 사용 중일 수 있습니다. 게스트에 연결할 수없습니다."
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
-msgstr ""
-"가상 머신 %(name)s에 %(iface)s 인터페이스가 없습니다."
+msgstr "가상 머신 %(name)s에 %(iface)s 인터페이스가 없습니다."
#, python-format
msgid ""
"Network %(network)s specified for virtual machine %(name)s does not exist"
-msgstr ""
-"가상 머신 %(name)s에 지정된 %(network)s 네트워크가 없습니다."
+msgstr "가상 머신 %(name)s에 지정된 %(network)s 네트워크가 없습니다."
msgid "Supported virtual machine interfaces type is only network"
-msgstr ""
-"지원되는 가상 머신 인터페이스 유형은 네트워크뿐입니다."
+msgstr "지원되는 가상 머신 인터페이스 유형은 네트워크뿐입니다."
msgid "Network name for virtual machine interface must be a string"
-msgstr ""
-"가상 머신 인터페이스의 네트워크 이름은 문자열이어야 합니다."
+msgstr "가상 머신 인터페이스의 네트워크 이름은 문자열이어야 합니다."
msgid "Invalid network model card specified for virtual machine interface"
msgstr ""
-"가상 머신 인터페이스에 대해 올바르지 않은 네트워크 모델 카드가 지정되었습니다."
+"가상 머신 인터페이스에 대해 올바르지 않은 네트워크 모델 카드가 지정되었습니"
+"다."
msgid "Specify type and network to add a new virtual machine interface"
-msgstr ""
-"새 가상 머신 인터페이스를 추가할 유형 및 네트워크를 지정하십시오."
+msgstr "새 가상 머신 인터페이스를 추가할 유형 및 네트워크를 지정하십시오."
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
-msgstr ""
-"MAC 주소는 FF:FF:FF:FF:FF:FF 형식을 준수해야 합니다."
+msgstr "MAC 주소는 FF:FF:FF:FF:FF:FF 형식을 준수해야 합니다."
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
-msgstr ""
-"가상 머신 %(name)s에 MAC 주소 %(mac)s이(가) 이미 존재합니다."
+msgstr "가상 머신 %(name)s에 MAC 주소 %(mac)s이(가) 이미 존재합니다."
msgid "Invalid MAC Address"
-msgstr ""
-"올바르지 않은 MAC 주소입니다."
+msgstr "올바르지 않은 MAC 주소입니다."
msgid "Cannot change MAC address of a running virtual machine"
-msgstr ""
-"실행 중인 가상 머신의 MAC 주소를 변경할 수 없습니다."
+msgstr "실행 중인 가상 머신의 MAC 주소를 변경할 수 없습니다."
#, python-format
msgid "Template %(name)s already exists"
-msgstr ""
-"템플리트 %(name)s이(가) 이미 존재합니다."
+msgstr "템플리트 %(name)s이(가) 이미 존재합니다."
#, python-format
msgid ""
"Network '%(network)s' specified for template %(template)s does not exist"
-msgstr ""
-"%(template)s 템플리트에 지정된 '%(network)s' 네트워크가 없습니다."
+msgstr "%(template)s 템플리트에 지정된 '%(network)s' 네트워크가 없습니다."
#, python-format
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
-msgstr ""
-"%(template)s 템플리트에 지정된 스토리지 풀 %(pool)s이(가) 없습니다."
+msgstr "%(template)s 템플리트에 지정된 스토리지 풀 %(pool)s이(가) 없습니다."
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
@@ -531,41 +453,32 @@ msgstr ""
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr ""
-"CDROM에 대해 올바르지 않은 매개변수 '%(param)s' 이(가) 지정되었습니다."
+msgstr "CDROM에 대해 올바르지 않은 매개변수 '%(param)s' 이(가) 지정되었습니다."
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
-msgstr ""
-"%(template)s 템플리트에 지정된 %(network)s 네트워크가 활성이 아닙니다."
+msgstr "%(template)s 템플리트에 지정된 %(network)s 네트워크가 활성이 아닙니다."
msgid "Template name must be a string"
-msgstr ""
-"템플리트 이름은 문자열이어야 합니다."
+msgstr "템플리트 이름은 문자열이어야 합니다."
msgid "Template icon must be a path to the image"
-msgstr ""
-"템플리트 아이콘은 이미지의 경로여야 합니다."
+msgstr "템플리트 아이콘은 이미지의 경로여야 합니다."
msgid "Template distribution must be a string"
-msgstr ""
-"템플리트 배포는 문자열이어야 합니다."
+msgstr "템플리트 배포는 문자열이어야 합니다."
msgid "Template distribution version must be a string"
-msgstr ""
-"템플리트 배포 버전은 문자열이어야 합니다."
+msgstr "템플리트 배포 버전은 문자열이어야 합니다."
msgid "The number of CPUs must be an integer greater than 0"
-msgstr ""
-"CPU 수는 0보다 큰 정수여야 합니다."
+msgstr "CPU 수는 0보다 큰 정수여야 합니다."
msgid "Amount of memory (MB) must be an integer greater than 512"
-msgstr ""
-"메모리 용량(MB)은 512보다 큰 정수여야 합니다."
+msgstr "메모리 용량(MB)은 512보다 큰 정수여야 합니다."
msgid "Template CDROM must be a local or remote ISO file"
-msgstr ""
-"템플리트 CDROM은 로컬 또는 원격 ISO 파일이어야 합니다."
+msgstr "템플리트 CDROM은 로컬 또는 원격 ISO 파일이어야 합니다."
#, python-format
msgid "Invalid storage pool URI %(value)s specified for template"
@@ -577,120 +490,100 @@ msgstr ""
"템플리트를 작성하려면 ISO 이미지를 CDROM 또는 기본 이미지로 지정하십시오."
msgid "All networks for the template must be specified in a list."
-msgstr ""
-"템플리트의 모든 네트워크가 목록에 지정되어야 합니다."
+msgstr "템플리트의 모든 네트워크가 목록에 지정되어야 합니다."
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
-msgstr ""
-"스토리지 풀이 iSCSI 또는 SCSI인 경우 볼륨을 템플리트에 지정하십시오."
+msgstr "스토리지 풀이 iSCSI 또는 SCSI인 경우 볼륨을 템플리트에 지정하십시오."
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
-msgstr ""
-"%(volume)s 볼륨이 스토리지 풀 %(pool)s에 없습니다."
+msgstr "%(volume)s 볼륨이 스토리지 풀 %(pool)s에 없습니다."
#, python-format
msgid "Unable to create template due error: %(err)s"
-msgstr ""
-"오류 때문에 템플리트를 작성할 수 없음: %(err)s"
+msgstr "오류 때문에 템플리트를 작성할 수 없음: %(err)s"
#, python-format
msgid "Unable to delete template due error: %(err)s"
-msgstr ""
-"오류 때문에 템플리트를 삭제할 수 없음: %(err)s"
+msgstr "오류 때문에 템플리트를 삭제할 수 없음: %(err)s"
msgid "Disk size must be an integer greater than 1GB."
-msgstr ""
-"디스크 크기는 1GB보다 큰 정수여야 합니다."
+msgstr "디스크 크기는 1GB보다 큰 정수여야 합니다."
msgid "Template base image must be a valid local image file"
-msgstr ""
-"템플리트 기본 이미지는 유효한 로컬 이미지 파일이어야 합니다."
+msgstr "템플리트 기본 이미지는 유효한 로컬 이미지 파일이어야 합니다."
#, python-format
msgid "Cannot identify base image %(path)s format"
-msgstr ""
-"기본 이미지 %(path)s 형식을 식별할 수 없습니다."
+msgstr "기본 이미지 %(path)s 형식을 식별할 수 없습니다."
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
-msgstr ""
-"CPU 토폴로지를 지정할 때 VCPU는 소켓, 코어 및 스레드 제품이어야"
-"합니다."
+msgstr "CPU 토폴로지를 지정할 때 VCPU는 소켓, 코어 및 스레드 제품이어야합니다."
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
"zero."
-msgstr ""
-"CPU 토폴로지를 지정할 때 각 요소는 0보다 큰 정수여야"
-"합니다."
+msgstr "CPU 토폴로지를 지정할 때 각 요소는 0보다 큰 정수여야합니다."
msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"올바르지 않은 디스크 이미지 형식입니다. 올바른 형식은 bochs, cloop, cow, dmg, qcow, "
-"qcow2, qed, raw, vmdk, vpc입니다."
+"올바르지 않은 디스크 이미지 형식입니다. 올바른 형식은 bochs, cloop, cow, "
+"dmg, qcow, qcow2, qed, raw, vmdk, vpc입니다."
#, python-format
msgid "Storage pool %(name)s already exists"
-msgstr ""
-"스토리지 풀 %(name)s이(가) 이미 존재합니다."
+msgstr "스토리지 풀 %(name)s이(가) 이미 존재합니다."
#, python-format
msgid "Storage pool %(name)s does not exist"
-msgstr ""
-"스토리지 풀 %(name)s이(가) 없습니다."
+msgstr "스토리지 풀 %(name)s이(가) 없습니다."
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
-msgstr ""
-"스토리지 풀 %(name)s을(를) 작성하려면 %(item)s을(를) 지정하십시오."
+msgstr "스토리지 풀 %(name)s을(를) 작성하려면 %(item)s을(를) 지정하십시오."
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr ""
-"활성 스토리지 풀 %(name)s을(를) 삭제할 수 없습니다."
+msgstr "활성 스토리지 풀 %(name)s을(를) 삭제할 수 없습니다."
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
-msgstr ""
-"스토리지 풀을 나열할 수 없습니다. 세부사항: %(err)s"
+msgstr "스토리지 풀을 나열할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to create storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"스토리지 풀 %(name)s을(를) 작성할 수 없습니다. 세부사항: %(err)s"
+msgstr "스토리지 풀 %(name)s을(를) 작성할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
msgstr ""
-"스토리지 풀 %(name)s에 있는 스토리지 볼륨의 수를 가져올 수 없습니다. 세부사항: "
-"%(err)s"
+"스토리지 풀 %(name)s에 있는 스토리지 볼륨의 수를 가져올 수 없습니다. 세부사"
+"항: %(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"스토리지 풀 %(name)s을(를) 활성화할 수 없습니다. 세부사항: %(err)s"
+msgstr "스토리지 풀 %(name)s을(를) 활성화할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"스토리지 풀 %(name)s을(를) 비활성화할 수 없습니다. 세부사항: %(err)s"
+msgstr "스토리지 풀 %(name)s을(를) 비활성화할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"스토리지 풀 %(name)s을(를) 삭제할 수 없습니다. 세부사항: %(err)s"
+msgstr "스토리지 풀 %(name)s을(를) 삭제할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
msgstr ""
-"내보내기 경로 %(path)s이(가) 마운트 중에 차단될 수 있으므로 NFS 풀을 작성할 수 없습니다."
+"내보내기 경로 %(path)s이(가) 마운트 중에 차단될 수 있으므로 NFS 풀을 작성할 "
+"수 없습니다."
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
@@ -699,101 +592,85 @@ msgstr ""
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr ""
-"지원되지 않는 스토리지 풀 유형: %(type)s"
+msgstr "지원되지 않는 스토리지 풀 유형: %(type)s"
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
-msgstr ""
-"%(pool)s에 대해 스토리지 풀 XML을 검색하는 중에 오류가 발생했습니다."
+msgstr "%(pool)s에 대해 스토리지 풀 XML을 검색하는 중에 오류가 발생했습니다."
msgid "Storage pool name must be a string without slashes (/)"
-msgstr ""
-"스토리지 풀 이름은 슬래시(/)를 포함하지 않는 문자열이어야 합니다."
+msgstr "스토리지 풀 이름은 슬래시(/)를 포함하지 않는 문자열이어야 합니다."
msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
"iso"
msgstr ""
-"지원되는 스토리지 풀 유형은 dir, netfs, logical, iscsi, isci 및 kimchi-"
-"iso입니다."
+"지원되는 스토리지 풀 유형은 dir, netfs, logical, iscsi, isci 및 kimchi-iso입"
+"니다."
msgid "Storage pool path must be a string"
-msgstr ""
-"스토리지 풀 경로는 문자열이어야 합니다."
+msgstr "스토리지 풀 경로는 문자열이어야 합니다."
msgid "Storage pool host must be a IP or hostname"
-msgstr ""
-"스토리지 풀 호스트는 IP 또는 호스트 이름이어야 합니다."
+msgstr "스토리지 풀 호스트는 IP 또는 호스트 이름이어야 합니다."
msgid "Storage pool device must be the absolute path to the block device"
-msgstr ""
-"스토리지 풀 장치는 블록 장치에 대한 절대 경로여야 합니다."
+msgstr "스토리지 풀 장치는 블록 장치에 대한 절대 경로여야 합니다."
msgid "Storage pool devices parameter must be a list"
-msgstr ""
-"스토리지 풀 장치는 목록이어야 합니다."
+msgstr "스토리지 풀 장치는 목록이어야 합니다."
msgid "Target IQN of an iSCSI pool must be a string"
-msgstr ""
-"iSCSI 풀의 대상 IQN은 문자열이어야 합니다."
+msgstr "iSCSI 풀의 대상 IQN은 문자열이어야 합니다."
msgid "Port of a remote storage server must be an integer between 1 and 65535"
-msgstr ""
-"원격 스토리지 서버의 포트는 1과 65535 사이의 정수여야 합니다."
+msgstr "원격 스토리지 서버의 포트는 1과 65535 사이의 정수여야 합니다."
msgid "iSCSI target username must be a string"
-msgstr ""
-"iSCSI 대상 사용자 이름은 문자열이어야 합니다."
+msgstr "iSCSI 대상 사용자 이름은 문자열이어야 합니다."
msgid "iSCSI target password must be a string"
-msgstr ""
-"iSCSI 대상 비밀번호는 문자열이어야 합니다."
+msgstr "iSCSI 대상 비밀번호는 문자열이어야 합니다."
msgid "Specify name and type to create a storage pool"
-msgstr ""
-"스토리지 풀을 작성하려면 이름 및 유형을 지정하십시오."
+msgstr "스토리지 풀을 작성하려면 이름 및 유형을 지정하십시오."
#, python-format
msgid ""
"%(disk)s is not a valid disk/partition. Could not add it to the pool "
"%(pool)s."
msgstr ""
-"%(disk)s은(는) 유효한 디스크/파티션이 아닙니다. 이를 풀"
-"%(pool)s에 추가할 수 없습니다."
+"%(disk)s은(는) 유효한 디스크/파티션이 아닙니다. 이를 풀%(pool)s에 추가할 수 "
+"없습니다."
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
-msgstr ""
-"논리 풀 %(pool)s을(를) 확장할 수 없습니다. 세부사항: %(err)s"
+msgstr "논리 풀 %(pool)s을(를) 확장할 수 없습니다. 세부사항: %(err)s"
msgid "The parameter disks only can be updated for logical storage pool."
-msgstr ""
-"논리 스토리지 풀의 매개변수 디스크만 업데이트할 수 있습니다."
+msgstr "논리 스토리지 풀의 매개변수 디스크만 업데이트할 수 있습니다."
msgid "The SCSI host adapter name must be a string."
-msgstr ""
-"SCSI 호스트 어댑터 이름은 문자열이어야 합니다."
+msgstr "SCSI 호스트 어댑터 이름은 문자열이어야 합니다."
msgid "The storage pool kimchi_isos is reserved for internal use"
-msgstr ""
-"스토리지 풀 kimchi_isos는 내부 용도로 예약되었습니다."
+msgstr "스토리지 풀 kimchi_isos는 내부 용도로 예약되었습니다."
#, python-format
msgid ""
"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"NFS 스토리지 풀 %(name)s을(를) 활성화할 수 없습니다. NFS 서버 %(server)s은(는)"
-"연결할 수 없습니다."
+"NFS 스토리지 풀 %(name)s을(를) 활성화할 수 없습니다. NFS 서버 %(server)s은"
+"(는)연결할 수 없습니다."
#, python-format
msgid ""
"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"NFS 스토리지 풀 %(name)s을(를) 비활성화할 수 없습니다. NFS 서버 %(server)s은(는)"
-"연결할 수 없습니다."
+"NFS 스토리지 풀 %(name)s을(를) 비활성화할 수 없습니다. NFS 서버 %(server)s은"
+"(는)연결할 수 없습니다."
#, python-format
msgid ""
@@ -803,16 +680,15 @@ msgstr ""
#, python-format
msgid "Unable to delete pool %(name)s as it is associated with some templates"
-msgstr ""
-"일부 템플리트와 연관되어 있으므로 %(name)s 풀을 삭제할 수 없습니다."
+msgstr "일부 템플리트와 연관되어 있으므로 %(name)s 풀을 삭제할 수 없습니다."
#, python-format
msgid ""
"A volume group named '%(name)s' already exists. Please, choose another name "
"to create the logical pool."
msgstr ""
-"이름이 '%(name)s'인 볼륨 그룹이 이미 존재합니다. 논리 풀을 작성하려면"
-"다른 이름을 선택하십시오."
+"이름이 '%(name)s'인 볼륨 그룹이 이미 존재합니다. 논리 풀을 작성하려면다른 이"
+"름을 선택하십시오."
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
@@ -821,85 +697,77 @@ msgstr ""
#, python-format
msgid "Storage volume %(name)s already exists"
-msgstr ""
-"스토리지 볼륨 %(name)s이(가) 이미 존재합니다."
+msgstr "스토리지 볼륨 %(name)s이(가) 이미 존재합니다."
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
-msgstr ""
-"스토리지 볼륨 %(name)s이(가) 스토리지 풀 %(pool)s에 없습니다."
+msgstr "스토리지 볼륨 %(name)s이(가) 스토리지 풀 %(pool)s에 없습니다."
#, python-format
msgid ""
"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
"not active"
msgstr ""
-"스토리지 풀 %(pool)s 이(가) 활성이 아니므로 스토리지 볼륨 %(volume)s 을(를)"
-"작성할 수 없습니다."
+"스토리지 풀 %(pool)s이(가) 활성이 아니므로 스토리지 볼륨 %(volume)s을(를)작성"
+"할 수 없습니다."
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
-msgstr ""
-"스토리지 볼륨 %(volume)s 을(를) 작성하려면 %(item)s을(를) 지정하십시오."
+msgstr "스토리지 볼륨 %(volume)s을(를) 작성하려면 %(item)s을(를) 지정하십시오."
#, python-format
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
msgstr ""
-"스토리지 풀 %(pool)s이(가) 활성이 아니므로 스토리지 볼륨을 나열할 수 없습니다."
+"스토리지 풀 %(pool)s이(가) 활성이 아니므로 스토리지 볼륨을 나열할 수 없습니"
+"다."
#, python-format
msgid ""
"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
"%(err)s"
msgstr ""
-"스토리지 볼륨 %(name)s을(를) 스토리지 풀 %(pool)s에 작성할 수 없습니다. 세부사항: "
-"%(err)s"
+"스토리지 볼륨 %(name)s을(를) 스토리지 풀 %(pool)s에 작성할 수 없습니다. 세부"
+"사항: %(err)s"
#, python-format
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
msgstr ""
-"스토리지 풀 %(pool)s에 있는 스토리지 볼륨을 나열할 수 없습니다. 세부사항: %(err)s"
+"스토리지 풀 %(pool)s에 있는 스토리지 볼륨을 나열할 수 없습니다. 세부사항: "
+"%(err)s"
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
-msgstr ""
-"스토리지 볼륨 %(name)s을(를) 삭제할 수 없습니다. 세부사항: %(err)s"
+msgstr "스토리지 볼륨 %(name)s을(를) 삭제할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
-msgstr ""
-"스토리지 볼륨 %(name)s을(를) 삭제할 수 없습니다. 세부사항: %(err)s"
+msgstr "스토리지 볼륨 %(name)s을(를) 삭제할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
-msgstr ""
-"스토리지 볼륨 %(name)s의 크기를 조정할 수 없습니다. 세부사항: %(err)s"
+msgstr "스토리지 볼륨 %(name)s의 크기를 조정할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
-msgstr ""
-"스토리지 유형 %(type)s은(는) 볼륨 작성 및 삭제를 지원하지 않습니다."
+msgstr "스토리지 유형 %(type)s은(는) 볼륨 작성 및 삭제를 지원하지 않습니다."
msgid "Storage volume name must be a string"
-msgstr ""
-"스토리지 볼륨 이름은 문자열이어야 합니다."
+msgstr "스토리지 볼륨 이름은 문자열이어야 합니다."
msgid "Storage volume allocation must be an integer number"
-msgstr ""
-"스토리지 볼륨 할당은 정수여야 합니다."
+msgstr "스토리지 볼륨 할당은 정수여야 합니다."
msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"스토리지 볼륨 형식이 지원되지 않습니다. 올바른 형식은 bochs, cloop, cow, dmg, "
-"qcow, qcow2, qed, raw, vmdk, vpc입니다."
+"스토리지 볼륨 형식이 지원되지 않습니다. 올바른 형식은 bochs, cloop, cow, "
+"dmg, qcow, qcow2, qed, raw, vmdk, vpc입니다."
msgid "Storage volume requires a volume name"
-msgstr ""
-"스토리지 볼륨은 볼륨 이름이 필요합니다."
+msgstr "스토리지 볼륨은 볼륨 이름이 필요합니다."
#, python-format
msgid ""
@@ -909,26 +777,21 @@ msgstr ""
#, python-format
msgid "Only one of parameter %(param)s can be specified"
-msgstr ""
-"하나의 매개변수 %(param)s만 지정할 수 있습니다."
+msgstr "하나의 매개변수 %(param)s만 지정할 수 있습니다."
#, python-format
msgid "Create volume from %(param)s is not supported"
-msgstr ""
-"%(param)s에서의 볼륨 작성은 지원되지 않습니다."
+msgstr "%(param)s에서의 볼륨 작성은 지원되지 않습니다."
msgid "Storage volume capacity must be an integer number."
-msgstr ""
-"스토리지 볼륨 용량은 정수여야 합니다."
+msgstr "스토리지 볼륨 용량은 정수여야 합니다."
msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
-msgstr ""
-"스토리지 볼륨 URL은 http://, https://, ftp:// 또는 ftps://여야 합니다."
+msgstr "스토리지 볼륨 URL은 http://, https://, ftp:// 또는 ftps://여야 합니다."
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
-msgstr ""
-"파일 %(url)s에 액세스할 수 없습니다. 확인하십시오."
+msgstr "파일 %(url)s에 액세스할 수 없습니다. 확인하십시오."
#, python-format
msgid ""
@@ -939,12 +802,10 @@ msgstr ""
"%(err)s"
msgid "Specify chunk data and its size to upload a file."
-msgstr ""
-"파일을 업로드하려면 청크 데이터 및 해당 크기를 지정하십시오."
+msgstr "파일을 업로드하려면 청크 데이터 및 해당 크기를 지정하십시오."
msgid "In order to upload a storage volume, specify the 'upload' parameter."
-msgstr ""
-"스토리지 볼륨을 업로드하기 위해 '업로드' 매개변수를 지정하십시오."
+msgstr "스토리지 볼륨을 업로드하기 위해 '업로드' 매개변수를 지정하십시오."
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
@@ -953,37 +814,30 @@ msgstr ""
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
-msgstr ""
-"스토리지 볼륨 %(vol)s은(는) 업로드 프로세스의 영향을 받지 않습니다."
+msgstr "스토리지 볼륨 %(vol)s은(는) 업로드 프로세스의 영향을 받지 않습니다."
msgid "The upload chunk data will exceed the storage volume size."
-msgstr ""
-"업로드 청크 데이터는 스토리지 볼륨 크기를 초과합니다."
+msgstr "업로드 청크 데이터는 스토리지 볼륨 크기를 초과합니다."
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
-msgstr ""
-"스토리지 볼륨에 청크 데이터를 업로드할 수 없습니다. 세부사항: %(err)s."
+msgstr "스토리지 볼륨에 청크 데이터를 업로드할 수 없습니다. 세부사항: %(err)s."
#, python-format
msgid "Interface %(name)s does not exist"
-msgstr ""
-"%(name)s 인터페이스가 없습니다."
+msgstr "%(name)s 인터페이스가 없습니다."
#, python-format
msgid "Network %(name)s already exists"
-msgstr ""
-"%(name)s 네트워크가 이미 존재합니다."
+msgstr "%(name)s 네트워크가 이미 존재합니다."
#, python-format
msgid "Network %(name)s does not exist"
-msgstr ""
-"%(name)s 네트워크가 없습니다."
+msgstr "%(name)s 네트워크가 없습니다."
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
-msgstr ""
-"%(network)s 네트워크에 지정된 %(subnet)s 서브넷이 유효하지 않습니다."
+msgstr "%(network)s 네트워크에 지정된 %(subnet)s 서브넷이 유효하지 않습니다."
#, python-format
msgid "Specify a network interface to create bridged network %(name)s"
@@ -992,8 +846,7 @@ msgstr ""
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr ""
-"활성 네트워크 %(name)s을(를) 삭제할 수 없습니다."
+msgstr "활성 네트워크 %(name)s을(를) 삭제할 수 없습니다."
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
@@ -1001,189 +854,161 @@ msgstr ""
"%(network)s 네트워크에 지정된 %(iface)s 인터페이스가 이미 사용 중입니다."
msgid "Interface should be bare NIC, bonding or bridge device."
-msgstr ""
-"인터페이스는 순수 NIC, 본딩 또는 브릿지 장치여야 합니다."
+msgstr "인터페이스는 순수 NIC, 본딩 또는 브릿지 장치여야 합니다."
#, python-format
msgid "Unable to create network %(name)s. Details: %(err)s"
-msgstr ""
-"%(name)s 네트워크를 작성할 수 없습니다. 세부사항: %(err)s"
+msgstr "%(name)s 네트워크를 작성할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
-msgstr ""
-"네트워크 '%(name)s'에 대한 여유 IP 주소를 찾을 수 없습니다."
+msgstr "네트워크 '%(name)s'에 대한 여유 IP 주소를 찾을 수 없습니다."
#, python-format
msgid "The interface %(iface)s already exists."
-msgstr ""
-"%(iface)s 인터페이스가 이미 존재합니다."
+msgstr "%(iface)s 인터페이스가 이미 존재합니다."
msgid "Network name must be a string without slashes (/) or quotes (\")"
msgstr ""
-"네트워크 이름은 슬래시(/) 또는 따옴표(\")를 포함하지 않는 문자열이어야 합니다."
+"네트워크 이름은 슬래시(/) 또는 따옴표(\")를 포함하지 않는 문자열이어야 합니"
+"다."
msgid "Supported network types are isolated, NAT and bridge"
-msgstr ""
-"지원되는 네트워크 유형은 격리, NAT 및 브릿지입니다."
+msgstr "지원되는 네트워크 유형은 격리, NAT 및 브릿지입니다."
msgid "Network subnet must be a string with IP address and prefix or netmask"
msgstr ""
"네트워크 서브넷은 IP 주소 및 접두부 또는 넷마스크가 있는 문자열이어야 합니다."
msgid "Network interface must be a string"
-msgstr ""
-"네트워크 인터페이스는 문자열이어야 합니다."
+msgstr "네트워크 인터페이스는 문자열이어야 합니다."
msgid "Network VLAN ID must be an integer between 1 and 4094"
-msgstr ""
-"네트워크 VLAN ID는 1과 4094 사이의 정수여야 합니다."
+msgstr "네트워크 VLAN ID는 1과 4094 사이의 정수여야 합니다."
msgid "Specify name and type to create a Network"
-msgstr ""
-"네트워크를 작성하려면 이름 및 유형을 지정하십시오."
+msgstr "네트워크를 작성하려면 이름 및 유형을 지정하십시오."
#, python-format
msgid ""
"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
"and/or templates linked to this network."
msgstr ""
-"%(name)s 네트워크를 삭제할 수 없습니다. 이 네트워크에 링크된 일부 가상 머신 %(vms)s "
-"및/또는 템플리트가 있습니다."
+"%(name)s 네트워크를 삭제할 수 없습니다. 이 네트워크에 링크된 일부 가상 머신 "
+"%(vms)s 및/또는 템플리트가 있습니다."
#, python-format
msgid ""
"Unable to deactivate network %(name)s. There are some virtual machines "
"%(vms)s and/or templates linked to this network."
msgstr ""
-"%(name)s 네트워크를 비활성화할 수 없습니다. 이 네트워크에 링크된 일부 가상 머신"
-"%(vms)s 및/또는 템플리트가 있습니다."
+"%(name)s 네트워크를 비활성화할 수 없습니다. 이 네트워크에 링크된 일부 가상 머"
+"신%(vms)s 및/또는 템플리트가 있습니다."
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
-msgstr ""
-"브릿지 장치 %(name)s은(는) VLAN의 트렁크 장치가 될 수 없습니다."
+msgstr "브릿지 장치 %(name)s은(는) VLAN의 트렁크 장치가 될 수 없습니다."
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr ""
-"%(iface)s 인터페이스 활성화 실패: %(err)s."
+msgstr "%(iface)s 인터페이스 활성화 실패: %(err)s."
#, python-format
msgid ""
"Failed to activate interface %(iface)s. Please check the physical link "
"status."
msgstr ""
-"%(iface)s 인터페이스를 활성화할 수 없습니다. 물리적 링크 상태를"
-"확인하십시오."
+"%(iface)s 인터페이스를 활성화할 수 없습니다. 물리적 링크 상태를확인하십시오."
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
-msgstr ""
-"%(name)s 네트워크를 시작할 수 없습니다. 세부사항: %(err)s"
+msgstr "%(name)s 네트워크를 시작할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr ""
-"디버그 보고서 %(name)s이(가) 없습니다."
+msgstr "디버그 보고서 %(name)s이(가) 없습니다."
msgid "Debug report tool not found in system"
-msgstr ""
-"디버그 보고서 도구가 시스템에 없습니다."
+msgstr "디버그 보고서 도구가 시스템에 없습니다."
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
-msgstr ""
-"디버그 보고서 %(name)s을(를) 작성할 수 없습니다. 세부사항: %(err)s."
+msgstr "디버그 보고서 %(name)s을(를) 작성할 수 없습니다. 세부사항: %(err)s."
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
-msgstr ""
-"지정된 이름 %(name)s의 디버그 보고서를 찾을 수 없습니다."
+msgstr "지정된 이름 %(name)s의 디버그 보고서를 찾을 수 없습니다."
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
-msgstr ""
-"디버그 보고서 %(name)s을(를) 생성할 수 없습니다. 세부사항: %(err)s"
+msgstr "디버그 보고서 %(name)s을(를) 생성할 수 없습니다. 세부사항: %(err)s"
msgid "You should give a name for the debug report file."
-msgstr ""
-"디버그 보고서 파일의 이름을 제공해야 합니다."
+msgstr "디버그 보고서 파일의 이름을 제공해야 합니다."
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
-"디버그 보고서 이름은 문자열이어야 합니다. 문자, 숫자, 밑줄('_')"
-"및 하이픈('-')만 허용됩니다."
+"디버그 보고서 이름은 문자열이어야 합니다. 문자, 숫자, 밑줄('_')및 하이픈('-')"
+"만 허용됩니다."
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
msgstr ""
-"지정된 이름 \"%(name)s\"의 디버그 보고서가 이미 있습니다. 다른 이름을"
-"사용하십시오."
+"지정된 이름 \"%(name)s\"의 디버그 보고서가 이미 있습니다. 다른 이름을사용하십"
+"시오."
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr ""
-"스토리지 서버 %(server)s은(는) Kimchi에서 사용되지 않았습니다."
+msgstr "스토리지 서버 %(server)s은(는) Kimchi에서 사용되지 않았습니다."
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr ""
-"Distro '%(name)s'이(가) 없습니다."
+msgstr "Distro '%(name)s'이(가) 없습니다."
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr ""
-"파티션 %(name)s이(가) 호스트에 없습니다."
+msgstr "파티션 %(name)s이(가) 호스트에 없습니다."
msgid "Unable to shutdown host machine as there are running virtual machines"
-msgstr ""
-"가상 머신을 실행 중인 호스트 머신을 종료할 수 없습니다."
+msgstr "가상 머신을 실행 중인 호스트 머신을 종료할 수 없습니다."
msgid "Unable to reboot host machine as there are running virtual machines"
-msgstr ""
-"가상 머신을 실행 중인 호스트 머신을 다시 부팅할 수 없습니다."
+msgstr "가상 머신을 실행 중인 호스트 머신을 다시 부팅할 수 없습니다."
#, python-format
msgid "Node device '%(name)s' not found"
-msgstr ""
-"노드 장치 '%(name)s'이(가) 없습니다."
+msgstr "노드 장치 '%(name)s'이(가) 없습니다."
msgid "Conflicting flag filters specified."
-msgstr ""
-"충돌하는 플래그 필터를 지정했습니다."
+msgstr "충돌하는 플래그 필터를 지정했습니다."
msgid "No packages marked for update"
-msgstr ""
-"업데이트 표시된 패키지가 없습니다."
+msgstr "업데이트 표시된 패키지가 없습니다."
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr ""
-"패키지 %(name)s은(는) 업데이트되도록 표시되지 않았습니다."
+msgstr "패키지 %(name)s은(는) 업데이트되도록 표시되지 않았습니다."
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
msgstr ""
-"업데이트되도록 표시된 패키지를 가져오는 중에 오류가 발생했습니다. 세부사항: %(err)s"
+"업데이트되도록 표시된 패키지를 가져오는 중에 오류가 발생했습니다. 세부사항: "
+"%(err)s"
msgid "There is no compatible package manager for this system."
-msgstr ""
-"이 시스템에 대해 호환 가능한 패키지 관리자가 없습니다."
+msgstr "이 시스템에 대해 호환 가능한 패키지 관리자가 없습니다."
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr ""
-"데이터 저장소에서 %(item)s을(를) 찾을 수 없습니다."
+msgstr "데이터 저장소에서 %(item)s을(를) 찾을 수 없습니다."
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr ""
-"올바르지 않은 URI %(uri)s"
+msgstr "올바르지 않은 URI %(uri)s"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
@@ -1191,151 +1016,120 @@ msgstr ""
"%(seconds)s초 후 '%(cmd)s' 명령을 실행하는 중에 제한시간이 초과되었습니다."
msgid "Unable to choose a virtual machine name"
-msgstr ""
-"가상 머신 이름을 선택할 수 없습니다."
+msgstr "가상 머신 이름을 선택할 수 없습니다."
#, python-format
msgid "Invalid data value '%(value)s'"
-msgstr ""
-"올바르지 않은 데이터 값 '%(value)s'입니다."
+msgstr "올바르지 않은 데이터 값 '%(value)s'입니다."
#, python-format
msgid "Invalid data unit '%(unit)s'"
-msgstr ""
-"올바르지 않은 데이터 단위 '%(unit)s'입니다."
+msgstr "올바르지 않은 데이터 단위 '%(unit)s'입니다."
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
-msgstr ""
-"올바르지 않은 스토리지 유형입니다. 지원되는 유형: 'cdrom', 'disk'"
+msgstr "올바르지 않은 스토리지 유형입니다. 지원되는 유형: 'cdrom', 'disk'"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
-msgstr ""
-"'%(value)s' 경로는 장치의 유효한 로컬/원격 경로가 아닙니다."
+msgstr "'%(value)s' 경로는 장치의 유효한 로컬/원격 경로가 아닙니다."
msgid "Only CDROM path can be update."
-msgstr ""
-"CDROM 경로만 업데이트할 수 있습니다."
+msgstr "CDROM 경로만 업데이트할 수 있습니다."
#, python-format
msgid ""
"The storage device %(dev_name)s does not exist in the virtual machine "
"%(vm_name)s"
-msgstr ""
-"스토리지 장치 %(dev_name)s이(가) 가상 머신"
-"%(vm_name)s에 없습니다."
+msgstr "스토리지 장치 %(dev_name)s이(가) 가상 머신%(vm_name)s에 없습니다."
#, python-format
msgid "Error while creating new storage device: %(error)s"
-msgstr ""
-"새 스토리지 장치를 작성하는 중에 오류 발생: %(error)s"
+msgstr "새 스토리지 장치를 작성하는 중에 오류 발생: %(error)s"
#, python-format
msgid "Error while updating storage device: %(error)s"
-msgstr ""
-"스토리지 장치를 업데이트하는 중에 오류 발생: %(error)s"
+msgstr "스토리지 장치를 업데이트하는 중에 오류 발생: %(error)s"
#, python-format
msgid "Error while removing storage device: %(error)s"
-msgstr ""
-"스토리지 장치를 제거하는 중에 오류 발생: %(error)s"
+msgstr "스토리지 장치를 제거하는 중에 오류 발생: %(error)s"
msgid "Do not support IDE device hot plug"
-msgstr ""
-"IDE 장치 핫 플러그를 지원하지 않습니다."
+msgstr "IDE 장치 핫 플러그를 지원하지 않습니다."
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
"disk"
msgstr ""
-"새 가상 머신 디스크를 추가할 유형 및 경로 또는 유형 및 풀/볼륨을 "
-"지정하십시오."
+"새 가상 머신 디스크를 추가할 유형 및 경로 또는 유형 및 풀/볼륨을 지정하십시"
+"오."
msgid "Specify path to update virtual machine disk"
-msgstr ""
-"가상 머신 디스크를 업데이트할 경로를 지정하십시오."
+msgstr "가상 머신 디스크를 업데이트할 경로를 지정하십시오."
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
-msgstr ""
-"장치의 제어기 유형 %(type)s 한계 %(limit)s에 도달했습니다."
+msgstr "장치의 제어기 유형 %(type)s 한계 %(limit)s에 도달했습니다."
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
-msgstr ""
-"지정한 풀/볼륨에 대한 디스크 경로를 검색할 수 없음: %(error)s"
+msgstr "지정한 풀/볼륨에 대한 디스크 경로를 검색할 수 없음: %(error)s"
msgid "Volume already in use by other virtual machine."
-msgstr ""
-"볼륨이 이미 다른 가상 머신에서 사용 중입니다."
+msgstr "볼륨이 이미 다른 가상 머신에서 사용 중입니다."
msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
msgstr ""
-"경로 또는 풀/볼륨 중 하나만 새로운 가상 머신 디스크에 "
-"지정할 수 있습니다."
+"경로 또는 풀/볼륨 중 하나만 새로운 가상 머신 디스크에 지정할 수 있습니다."
#, python-format
msgid ""
"Volume chosen with format %(format)s does not fit in the storage type "
"%(type)s"
msgstr ""
-"%(format)s 형식으로 선택한 볼륨이 스토리지 유형"
-"%(type)s에 적합하지 않습니다."
+"%(format)s 형식으로 선택한 볼륨이 스토리지 유형%(type)s에 적합하지 않습니다."
msgid "YUM Repository ID must be one word only string."
-msgstr ""
-"YUM 저장소 ID는 단일 단어의 문자열이어야 합니다."
+msgstr "YUM 저장소 ID는 단일 단어의 문자열이어야 합니다."
msgid "Repository URL must be an http://, ftp:// or file:// URL."
-msgstr ""
-"저장소 URL은 http://, ftp:// 또는 file:// URL이어야 합니다."
+msgstr "저장소 URL은 http://, ftp:// 또는 file:// URL이어야 합니다."
msgid ""
"Repository configuration is a dictionary with specific values according to "
"repository type."
-msgstr ""
-"저장소 구성은 저장소 유형에 따른 특정 값이 있는 "
-"사전입니다."
+msgstr "저장소 구성은 저장소 유형에 따른 특정 값이 있는 사전입니다."
msgid "Distribution to DEB repository must be a string"
-msgstr ""
-"DEB 저장소에 대한 배포는 문자열이어야 합니다."
+msgstr "DEB 저장소에 대한 배포는 문자열이어야 합니다."
msgid "Components to DEB repository must be listed in a array"
-msgstr ""
-"DEB 저장소에 대한 구성요소는 배열에 나열되어야 합니다."
+msgstr "DEB 저장소에 대한 구성요소는 배열에 나열되어야 합니다."
msgid "Components to DEB repository must be a string"
-msgstr ""
-"DEB 저장소에 대한 구성요소는 문자열이어야 합니다."
+msgstr "DEB 저장소에 대한 구성요소는 문자열이어야 합니다."
msgid "Mirror list to repository must be a string"
-msgstr ""
-"저장소에 대한 미러 목록은 문자열이어야 합니다."
+msgstr "저장소에 대한 미러 목록은 문자열이어야 합니다."
msgid "YUM Repository name must be string."
-msgstr ""
-"YUM 저장소 이름은 문자열이어야 합니다."
+msgstr "YUM 저장소 이름은 문자열이어야 합니다."
msgid "GPG check must be a boolean value."
-msgstr ""
-"GPG 검사는 부울 값이어야 합니다."
+msgstr "GPG 검사는 부울 값이어야 합니다."
msgid "GPG key must be a URL pointing to the ASCII-armored file."
-msgstr ""
-"GPG 키는 ASCII 보호 파일을 가리키는 URL이어야 합니다."
+msgstr "GPG 키는 ASCII 보호 파일을 가리키는 URL이어야 합니다."
#, python-format
msgid "Could not update repository %(repo_id)s."
-msgstr ""
-"'%(repo_id)s' 저장소를 업데이트하지 못했습니다."
+msgstr "'%(repo_id)s' 저장소를 업데이트하지 못했습니다."
#, python-format
msgid "Repository %(repo_id)s does not exist."
-msgstr ""
-"%(repo_id)s 저장소가 없습니다."
+msgstr "%(repo_id)s 저장소가 없습니다."
msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
@@ -1345,90 +1139,72 @@ msgstr ""
"metalink를 지정하십시오."
msgid "Repository management tool was not recognized for your system."
-msgstr ""
-"해당 시스템에 대한 저장소 관리 도구가 인식되지 않았습니다."
+msgstr "해당 시스템에 대한 저장소 관리 도구가 인식되지 않았습니다."
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr ""
-"%(repo_id)s 저장소가 이미 사용으로 설정되어 있습니다."
+msgstr "%(repo_id)s 저장소가 이미 사용으로 설정되어 있습니다."
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr ""
-"%(repo_id)s 저장소가 이미 사용 안함으로 설정되어 있습니다."
+msgstr "%(repo_id)s 저장소가 이미 사용 안함으로 설정되어 있습니다."
#, python-format
msgid "Could not remove repository %(repo_id)s."
-msgstr ""
-"%(repo_id)s 저장소를 제거하지 못했습니다."
+msgstr "%(repo_id)s 저장소를 제거하지 못했습니다."
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
-msgstr ""
-"저장소 구성 파일 %(repo_file)s을(를) 작성할 수 없습니다."
+msgstr "저장소 구성 파일 %(repo_file)s을(를) 작성할 수 없습니다."
msgid "Specify repository distribution in order to create a DEB repository."
-msgstr ""
-"DEB 저장소를 작성하려면 저장소 배포를 지정하십시오."
+msgstr "DEB 저장소를 작성하려면 저장소 배포를 지정하십시오."
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr ""
-"%(repo_id)s 저장소를 사용으로 설정하지 못했습니다."
+msgstr "%(repo_id)s 저장소를 사용으로 설정하지 못했습니다."
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr ""
-"%(repo_id)s 저장소를 사용 안함으로 설정하지 못했습니다."
+msgstr "%(repo_id)s 저장소를 사용 안함으로 설정하지 못했습니다."
msgid "YUM Repository ID already exists"
-msgstr ""
-"YUM 저장소 ID가 이미 존재합니다."
+msgstr "YUM 저장소 ID가 이미 존재합니다."
msgid "YUM Repository name must be a string"
-msgstr ""
-"YUM 저장소 이름은 문자열이어야 합니다."
+msgstr "YUM 저장소 이름은 문자열이어야 합니다."
#, python-format
msgid "Unable to list repositories. Details: '%(err)s'"
-msgstr ""
-"저장소를 나열할 수 없습니다. 세부사항: '%(err)s'"
+msgstr "저장소를 나열할 수 없습니다. 세부사항: '%(err)s'"
#, python-format
msgid "Unable to retrieve repository information. Details: '%(err)s'"
-msgstr ""
-"저장소 정보를 검색할 수 없습니다. 세부사항: '%(err)s'"
+msgstr "저장소 정보를 검색할 수 없습니다. 세부사항: '%(err)s'"
#, python-format
msgid "Unable to add repository. Details: '%(err)s'"
-msgstr ""
-"저장소를 추가할 수 없습니다. 세부사항: '%(err)s'"
+msgstr "저장소를 추가할 수 없습니다. 세부사항: '%(err)s'"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr ""
-"저장소를 제거할 수 없습니다. 세부사항: '%(err)s'"
+msgstr "저장소를 제거할 수 없습니다. 세부사항: '%(err)s'"
#, python-format
msgid ""
"Configuration items: '%(items)s' are not supported by repository manager"
-msgstr ""
-"구성 항목: '%(items)s'은(는) 저장소 관리자에 의해 지원되지 않습니다."
+msgstr "구성 항목: '%(items)s'은(는) 저장소 관리자에 의해 지원되지 않습니다."
msgid "Repository metalink must be an http://, ftp:// or file:// URL."
-msgstr ""
-"저장소 metalink는 http://, ftp:// 또는 file:// URL이어야 합니다."
+msgstr "저장소 metalink는 http://, ftp:// 또는 file:// URL이어야 합니다."
msgid "Cannot specify mirrorlist and metalink at the same time."
-msgstr ""
-"mirrorlist 및 metalink를 동시에 지정할 수 없습니다."
+msgstr "mirrorlist 및 metalink를 동시에 지정할 수 없습니다."
#, python-format
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
-msgstr ""
-"가상 머신 '%(vm)s'은(는) 스냅샷을 작성하기 전에 중지해야 합니다."
+msgstr "가상 머신 '%(vm)s'은(는) 스냅샷을 작성하기 전에 중지해야 합니다."
#, python-format
msgid ""
@@ -1440,8 +1216,7 @@ msgstr ""
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
-msgstr ""
-"가상 머신 '%(vm)s'에 '%(name)s' 스냅샷이 없습니다."
+msgstr "가상 머신 '%(vm)s'에 '%(name)s' 스냅샷이 없습니다."
#, python-format
msgid ""
@@ -1453,8 +1228,7 @@ msgstr ""
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
-msgstr ""
-"가상 머신 '%(vm)s'에 스냅샷을 나열할 수 없습니다. 세부사항: %(err)s"
+msgstr "가상 머신 '%(vm)s'에 스냅샷을 나열할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid ""
@@ -1469,624 +1243,484 @@ msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"가상 머신 '%(vm)s'의 현재 스냅샷을 검색할 수 없습니다. 세부사항: "
-"%(err)s"
+"가상 머신 '%(vm)s'의 현재 스냅샷을 검색할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
msgstr ""
-"'%(name)s' 스냅샷에 대한 가상 머신 '%(vm)s'을(를) 검색할 수 없습니다. 세부사항: "
-"%(err)s"
+"'%(name)s' 스냅샷에 대한 가상 머신 '%(vm)s'을(를) 검색할 수 없습니다. 세부사"
+"항: %(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
-"'%(format)s' 형식의 디스크가 포함되어 있기 때문에"
-"가상 머신 '%(vm)s'의 스냅샷을 작성할 수 없습니다. 'qcow2'만 지원됩니다."
+"'%(format)s' 형식의 디스크가 포함되어 있기 때문에가상 머신 '%(vm)s'의 스냅샷"
+"을 작성할 수 없습니다. 'qcow2'만 지원됩니다."
msgid "The number of vCPUs is too large for this system."
-msgstr ""
-"이 시스템의 vCPU 수가 너무 큽니다."
+msgstr "이 시스템의 vCPU 수가 너무 큽니다."
msgid "Invalid vCPU/topology combination."
-msgstr ""
-"올바르지 않은 vCPU/토폴로지 조합입니다."
+msgstr "올바르지 않은 vCPU/토폴로지 조합입니다."
msgid "This host (or current configuration) does not allow CPU topology."
-msgstr ""
-"이 호스트(또는 현재 구성)에서는 CPU 토폴로지가 허용되지 않습니다."
+msgstr "이 호스트(또는 현재 구성)에서는 CPU 토폴로지가 허용되지 않습니다."
msgid "ERROR CODE"
-msgstr ""
-"오류 코드"
+msgstr "오류 코드"
msgid "REASON"
-msgstr ""
-"이유"
+msgstr "이유"
msgid "STACK"
-msgstr ""
-"스택"
+msgstr "스택"
msgid "Go to Homepage"
-msgstr ""
-"홈 페이지로 이동"
+msgstr "홈 페이지로 이동"
msgid "Create a New Virtual Machine"
-msgstr ""
-"새 가상 머신 작성"
+msgstr "새 가상 머신 작성"
msgid "Virtual Machine Name"
-msgstr ""
-"가상 머신 이름"
+msgstr "가상 머신 이름"
msgid ""
"The name used to identify the virtual machine. If omitted, a name will be "
"chosen based on the template used."
msgstr ""
-"가상 머신을 식별하는 데 사용되는 이름입니다. 생략되면 이름은 "
-"사용된 템플리트를 기반으로 선택됩니다."
+"가상 머신을 식별하는 데 사용되는 이름입니다. 생략되면 이름은 사용된 템플리트"
+"를 기반으로 선택됩니다."
msgid "Template"
-msgstr ""
-"템플리트"
+msgstr "템플리트"
msgid "Please create a template first."
-msgstr ""
-"템플리트를 먼저 작성하십시오."
+msgstr "템플리트를 먼저 작성하십시오."
msgid "Create a Template"
-msgstr ""
-"템플리트 작성"
+msgstr "템플리트 작성"
msgid "Please choose a template."
-msgstr ""
-"템플리트를 선택하십시오."
+msgstr "템플리트를 선택하십시오."
msgid "OS"
-msgstr ""
-"OS"
+msgstr "OS"
msgid "OS Version"
-msgstr ""
-"OS 버전"
+msgstr "OS 버전"
msgid "CPUS"
-msgstr ""
-"CPUS"
+msgstr "CPUS"
msgid "Memory"
-msgstr ""
-"메모리"
+msgstr "메모리"
msgid "Create"
-msgstr ""
-"작성"
+msgstr "작성"
msgid "Creating..."
-msgstr ""
-"작성 중..."
+msgstr "작성 중..."
msgid "Edit Guest"
-msgstr ""
-"게스트 편집"
+msgstr "게스트 편집"
msgid "General"
-msgstr ""
-"일반"
+msgstr "일반"
msgid "Storage"
-msgstr ""
-"스토리지"
+msgstr "스토리지"
msgid "Interface"
-msgstr ""
-"인터페이스"
+msgstr "인터페이스"
msgid "Permission"
-msgstr ""
-"권한"
+msgstr "권한"
msgid "Host PCI Device"
-msgstr ""
-"호스트 PCI 장치"
+msgstr "호스트 PCI 장치"
msgid "Snapshot"
-msgstr ""
-"스냅샷"
+msgstr "스냅샷"
msgid "Name"
-msgstr ""
-"이름"
+msgstr "이름"
msgid "CPUs"
-msgstr ""
-"CPU"
+msgstr "CPU"
msgid "Memory (MB)"
-msgstr ""
-"메모리(MB)"
+msgstr "메모리(MB)"
msgid "Icon"
-msgstr ""
-"아이콘"
+msgstr "아이콘"
msgid "Device"
-msgstr ""
-"장치"
+msgstr "장치"
msgid "Path"
-msgstr ""
-"경로"
+msgstr "경로"
msgid "Network"
-msgstr ""
-"네트워크"
+msgstr "네트워크"
msgid "Type"
-msgstr ""
-"유형"
+msgstr "유형"
msgid "MAC Address"
-msgstr ""
-"MAC 주소"
+msgstr "MAC 주소"
msgid "Available system users and groups"
-msgstr ""
-"사용 가능한 시스템 사용자 및 그룹"
+msgstr "사용 가능한 시스템 사용자 및 그룹"
msgid "Selected system users and groups"
-msgstr ""
-"선택한 시스템 사용자 및 그룹"
+msgstr "선택한 시스템 사용자 및 그룹"
msgid "User"
-msgstr ""
-"사용자"
+msgstr "사용자"
msgid "All"
-msgstr ""
-"모두"
+msgstr "모두"
msgid "To Add"
-msgstr ""
-"추가 대상"
+msgstr "추가 대상"
msgid "Added"
-msgstr ""
-"추가됨"
+msgstr "추가됨"
msgid "filter"
-msgstr ""
-"필터"
+msgstr "필터"
msgid "Product"
-msgstr ""
-"제품"
+msgstr "제품"
msgid "Vendor"
-msgstr ""
-"공급업체"
+msgstr "공급업체"
msgid "Created"
-msgstr ""
-"작성됨"
+msgstr "작성됨"
msgid "Save"
-msgstr ""
-"저장"
+msgstr "저장"
msgid "Replace"
-msgstr ""
-"교체"
+msgstr "교체"
msgid "Detach"
-msgstr ""
-"분리"
+msgstr "분리"
msgid "Cancel"
-msgstr ""
-"취소"
+msgstr "취소"
msgid "revert"
-msgstr ""
-"되돌리기"
+msgstr "되돌리기"
msgid "Add a Storage Device to VM"
-msgstr ""
-"스토리지 장치를 VM에 추가"
+msgstr "스토리지 장치를 VM에 추가"
msgid "Device Type"
-msgstr ""
-"장치 유형"
+msgstr "장치 유형"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr ""
-"장치 유형. 현재 \"cdrom\" 및 \"disk\"가 지원됩니다."
+msgstr "장치 유형. 현재 \"cdrom\" 및 \"disk\"가 지원됩니다."
msgid "Storage Pool"
-msgstr ""
-"스토리지 풀"
+msgstr "스토리지 풀"
msgid "Storage pool which volume located in"
-msgstr ""
-"볼륨이 위치한 스토리지 풀"
+msgstr "볼륨이 위치한 스토리지 풀"
msgid "Storage Volume"
-msgstr ""
-"스토리지 볼륨"
+msgstr "스토리지 볼륨"
msgid "Storage volume to be attached"
-msgstr ""
-"연결될 스토리지 볼륨"
+msgstr "연결될 스토리지 볼륨"
msgid "File Path"
-msgstr ""
-"파일 경로"
+msgstr "파일 경로"
msgid "The ISO file path in the server for CDROM."
-msgstr ""
-"CDROM을 위한 서버의 ISO 파일 경로입니다."
+msgstr "CDROM을 위한 서버의 ISO 파일 경로입니다."
msgid "Attach"
-msgstr ""
-"연결"
+msgstr "연결"
msgid "Start"
-msgstr ""
-"시작"
+msgstr "시작"
msgid "Reset"
-msgstr ""
-"다시 설정"
+msgstr "다시 설정"
msgid "Pause"
-msgstr ""
-"일시정지"
+msgstr "일시정지"
msgid "Resume"
-msgstr ""
-"재개"
+msgstr "재개"
msgid "Power Off"
-msgstr ""
-"전원 끄기"
+msgstr "전원 끄기"
msgid "Actions"
-msgstr ""
-"조치"
+msgstr "조치"
msgid "Connect"
-msgstr ""
-"연결"
+msgstr "연결"
msgid "Clone"
-msgstr ""
-"복제"
+msgstr "복제"
msgid "Edit"
-msgstr ""
-"편집"
+msgstr "편집"
msgid "Shut Down"
-msgstr ""
-"종료"
+msgstr "종료"
msgid "Delete"
-msgstr ""
-"삭제"
+msgstr "삭제"
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
"입력한 사용자 이름 또는 비밀번호가 올바르지 않습니다. 다시 시도하십시오."
msgid "This field is required."
-msgstr ""
-"이 필드는 필수입니다."
+msgstr "이 필드는 필수입니다."
msgid "Log in"
-msgstr ""
-"로그인"
+msgstr "로그인"
msgid "Logging in..."
-msgstr ""
-"로그인 중..."
+msgstr "로그인 중..."
msgid "Host"
-msgstr ""
-"호스트"
+msgstr "호스트"
msgid "Guests"
-msgstr ""
-"게스트"
+msgstr "게스트"
msgid "Templates"
-msgstr ""
-"템플리트"
+msgstr "템플리트"
msgid "Failed to get application configuration"
-msgstr ""
-"애플리케이션 구성을 가져오지 못했습니다."
+msgstr "애플리케이션 구성을 가져오지 못했습니다."
msgid "This is not a valid Linux path"
-msgstr ""
-"올바른 Linux 경로가 아닙니다."
+msgstr "올바른 Linux 경로가 아닙니다."
msgid "This is not a valid URL."
-msgstr ""
-"올바른 URL이 아닙니다."
+msgstr "올바른 URL이 아닙니다."
msgid "No such data available."
-msgstr ""
-"해당 데이터가 없습니다."
+msgstr "해당 데이터가 없습니다."
msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"호스트 시스템에 접속할 수 없습니다. 호스트 시스템이 가동되었고 "
-"이에 대한 네트워크 연결이 있는지 확인하십시오. HTTP 요청 응답 %1입니다. "
+"호스트 시스템에 접속할 수 없습니다. 호스트 시스템이 가동되었고 이에 대한 네트"
+"워크 연결이 있는지 확인하십시오. HTTP 요청 응답 %1입니다. "
msgid "Unable to read file."
-msgstr ""
-"파일을 읽을 수 없습니다. "
+msgstr "파일을 읽을 수 없습니다. "
msgid "Error while uploading file."
-msgstr ""
-"파일을 업로드하는 중에 오류가 발생했습니다."
+msgstr "파일을 업로드하는 중에 오류가 발생했습니다."
msgid "Delete Confirmation"
-msgstr ""
-"삭제 확인"
+msgstr "삭제 확인"
msgid "OK"
-msgstr ""
-"확인"
+msgstr "확인"
msgid "Confirm"
-msgstr ""
-"확인"
+msgstr "확인"
msgid "Warning"
-msgstr ""
-"경고"
+msgstr "경고"
msgid "Cloning..."
-msgstr ""
-"복제 중..."
+msgstr "복제 중..."
msgid "Loading..."
-msgstr ""
-"로드 중..."
+msgstr "로드 중..."
msgid "An error occurred while retrieving system information."
-msgstr ""
-"시스템 정보를 검색하는 중에 오류가 발생했습니다."
+msgstr "시스템 정보를 검색하는 중에 오류가 발생했습니다."
msgid "Retry"
-msgstr ""
-"재시도"
+msgstr "재시도"
msgid "Detailed message:"
-msgstr ""
-"세부 메시지:"
+msgstr "세부 메시지:"
msgid "No ISO found"
-msgstr ""
-"ISO가 없습니다."
+msgstr "ISO가 없습니다."
msgid "This is not a valid ISO file."
-msgstr ""
-"올바른 ISO 파일이 아닙니다."
+msgstr "올바른 ISO 파일이 아닙니다."
msgid "This may take a long time. Do you want to continue?"
-msgstr ""
-"시간이 오래 걸릴 수 있습니다. 계속하시겠습니까?"
+msgstr "시간이 오래 걸릴 수 있습니다. 계속하시겠습니까?"
msgid "This will permanently delete the template. Would you like to continue?"
-msgstr ""
-"템플리트가 영구적으로 삭제됩니다. 계속하시겠습니까?"
+msgstr "템플리트가 영구적으로 삭제됩니다. 계속하시겠습니까?"
msgid "Unable to shut down system as there are some virtual machines running!"
-msgstr ""
-"일부 가상 머신이 실행 중이므로 시스템을 종료할 수 없습니다."
+msgstr "일부 가상 머신이 실행 중이므로 시스템을 종료할 수 없습니다."
msgid "Max:"
-msgstr ""
-"최대:"
+msgstr "최대:"
msgid "Utilization"
-msgstr ""
-"이용률"
+msgstr "이용률"
msgid "Available"
-msgstr ""
-"사용 가능"
+msgstr "사용 가능"
msgid "Read Rate"
-msgstr ""
-"읽기 속도"
+msgstr "읽기 속도"
msgid "Write Rate"
-msgstr ""
-"쓰기 속도"
+msgstr "쓰기 속도"
msgid "Received"
-msgstr ""
-"받음"
+msgstr "받음"
msgid "Sent"
-msgstr ""
-"보냄"
+msgstr "보냄"
msgid ""
"Shutting down or restarting host will cause unsaved work lost. Continue to "
"shut down/restarting?"
msgstr ""
-"호스트를 종료하거나 다시 시작하면 저장되지 않은 작업이 손실됩니다. 시스템 종료/다시 시작을 "
-"계속하시겠습니까?"
+"호스트를 종료하거나 다시 시작하면 저장되지 않은 작업이 손실됩니다. 시스템 종"
+"료/다시 시작을 계속하시겠습니까?"
msgid ""
"Repository will be removed permanently and can't be recovered. Do you want "
"to continue?"
-msgstr ""
-"저장소가 영구적으로 제거되어 복구할 수 없습니다. "
-"계속하시겠습니까?"
+msgstr "저장소가 영구적으로 제거되어 복구할 수 없습니다. 계속하시겠습니까?"
msgid "Repositories"
-msgstr ""
-"저장소"
+msgstr "저장소"
msgid "ID"
-msgstr ""
-"ID"
+msgstr "ID"
msgid "Base URL"
-msgstr ""
-"기본 URL"
+msgstr "기본 URL"
msgid "Is Mirror"
-msgstr ""
-"미러임"
+msgstr "미러임"
msgid "URL Args"
-msgstr ""
-"URL 인수"
+msgstr "URL 인수"
msgid "Enabled"
-msgstr ""
-"사용함"
+msgstr "사용함"
msgid "GPG Check"
-msgstr ""
-"GPG 검사"
+msgstr "GPG 검사"
msgid "GPG Key"
-msgstr ""
-"GPG 키"
+msgstr "GPG 키"
msgid "Add"
-msgstr ""
-"추가"
+msgstr "추가"
msgid "Remove"
-msgstr ""
-"제거"
+msgstr "제거"
msgid "Enable"
-msgstr ""
-"사용"
+msgstr "사용"
msgid "Disable"
-msgstr ""
-"사용 안함"
+msgstr "사용 안함"
msgid "Software Updates"
-msgstr ""
-"소프트웨어 업데이트"
+msgstr "소프트웨어 업데이트"
msgid "Package Name"
-msgstr ""
-"패키지 이름"
+msgstr "패키지 이름"
msgid "Version"
-msgstr ""
-"버전"
+msgstr "버전"
msgid "Architecture"
-msgstr ""
-"아키텍처"
+msgstr "아키텍처"
msgid "Repository"
-msgstr ""
-"저장소"
+msgstr "저장소"
msgid "Update All"
-msgstr ""
-"모두 업데이트"
+msgstr "모두 업데이트"
msgid "Updating..."
-msgstr ""
-"업데이트 중..."
+msgstr "업데이트 중..."
msgid "Failed to retrieve packages update information."
-msgstr ""
-"패키지 업데이트 정보가 검색되지 않았습니다."
+msgstr "패키지 업데이트 정보가 검색되지 않았습니다."
msgid "Failed to update package(s)."
-msgstr ""
-"패키지를 업데이트하지 못했습니다."
+msgstr "패키지를 업데이트하지 못했습니다."
msgid ""
"Debug report will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"디버그 보고서가 영구적으로 제거되어 복구할 수 없습니다. "
-"계속하시겠습니까?"
+"디버그 보고서가 영구적으로 제거되어 복구할 수 없습니다. 계속하시겠습니까?"
msgid "Debug Reports"
-msgstr ""
-"디버그 보고서"
+msgstr "디버그 보고서"
msgid "Generated Time"
-msgstr ""
-"생성 시간"
+msgstr "생성 시간"
msgid "Generate"
-msgstr ""
-"생성"
+msgstr "생성"
msgid "Generating..."
-msgstr ""
-"생성 중..."
+msgstr "생성 중..."
msgid "Rename"
-msgstr ""
-"이름 바꾸기"
+msgstr "이름 바꾸기"
msgid "Download"
-msgstr ""
-"다운로드"
+msgstr "다운로드"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
"hyphen ('-')."
msgstr ""
-"보고서 이름에는 문자, 숫자, 밑줄('_') 및 또는"
-"하이픈('-')만 포함되어야 합니다."
+"보고서 이름에는 문자, 숫자, 밑줄('_') 및 또는하이픈('-')만 포함되어야 합니다."
msgid "Pending..."
-msgstr ""
-"보류 중..."
+msgstr "보류 중..."
msgid "Report name is the same as the original one."
-msgstr ""
-"보고서 이름은 원본과 동일합니다."
+msgstr "보고서 이름은 원본과 동일합니다."
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
"cannot be undone. Would you like to continue?"
msgstr ""
-"가상 머신 및 해당 가상 디스크가 삭제됩니다. 이 조작은 "
-"실행 취소할 수 없습니다. 계속하시겠습니까?"
+"가상 머신 및 해당 가상 디스크가 삭제됩니다. 이 조작은 실행 취소할 수 없습니"
+"다. 계속하시겠습니까?"
msgid "Power off Confirmation"
-msgstr ""
-"전원 끄기 확인"
+msgstr "전원 끄기 확인"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
"cache in the guest. Would you like to continue?"
msgstr ""
-"이 조치는 원하지 않은 결과를 생성할 수 있습니다(예: 게스트에 비워지지 않은 "
-"디스크 캐시가 있음). 계속하시겠습니까?"
+"이 조치는 원하지 않은 결과를 생성할 수 있습니다(예: 게스트에 비워지지 않은 디"
+"스크 캐시가 있음). 계속하시겠습니까?"
msgid "Reset Confirmation"
-msgstr ""
-"다시 설정 확인"
+msgstr "다시 설정 확인"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
@@ -2096,746 +1730,578 @@ msgstr ""
"계속하시겠습니까?"
msgid "Shut Down Confirmation"
-msgstr ""
-"종료 확인"
+msgstr "종료 확인"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
-msgstr ""
-"게스트 OS가 이 요청을 무시할 수 있음을 참고하십시오. 계속하시겠습니까?"
+msgstr "게스트 OS가 이 요청을 무시할 수 있음을 참고하십시오. 계속하시겠습니까?"
msgid "Virtual Machine delete Confirmation"
-msgstr ""
-"가상 머신 삭제 확인"
+msgstr "가상 머신 삭제 확인"
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
msgstr ""
-"이 가상 머신은 지속적이지 않습니다. 전원을 끄면 삭제됩니다. 계속하시겠습니까?"
+"이 가상 머신은 지속적이지 않습니다. 전원을 끄면 삭제됩니다. 계속하시겠습니"
+"까?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
"default storage pool. The same will happen when the target pool does not "
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
-"대상 게스트에 SCSI 또는 iSCSI 볼륨이 있으면 기본 스토리지 풀에"
-"복제됩니다. 대상 풀에 볼륨을 복제할 수 있는 공간이 충분하지 않은 경우에도"
-"마찬가지입니다. 계속하시겠습니까?"
+"대상 게스트에 SCSI 또는 iSCSI 볼륨이 있으면 기본 스토리지 풀에복제됩니다. 대"
+"상 풀에 볼륨을 복제할 수 있는 공간이 충분하지 않은 경우에도마찬가지입니다. 계"
+"속하시겠습니까?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
msgstr ""
-"이 CDROM은 영구적으로 분리되며 다시 연결할 수 있습니다. 분리를 "
-"계속하시겠습니까?"
+"이 CDROM은 영구적으로 분리되며 다시 연결할 수 있습니다. 분리를 계속하시겠습니"
+"까?"
msgid "Attaching..."
-msgstr ""
-"연결 중..."
+msgstr "연결 중..."
msgid "Replacing..."
-msgstr ""
-"교체 중..."
+msgstr "교체 중..."
msgid "Successfully attached!"
-msgstr ""
-"연결되었습니다."
+msgstr "연결되었습니다."
msgid "Successfully replaced!"
-msgstr ""
-"교체되었습니다."
+msgstr "교체되었습니다."
msgid "Successfully detached!"
-msgstr ""
-"분리되었습니다."
+msgstr "분리되었습니다."
msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
msgstr ""
-"이 디스크는 영구적으로 분리되고 다시 연결할 수 있습니다. 분리를 "
-"계속하시겠습니까?"
+"이 디스크는 영구적으로 분리되고 다시 연결할 수 있습니다. 분리를 계속하시겠습"
+"니까?"
msgid "interface:"
-msgstr ""
-"인터페이스:"
+msgstr "인터페이스:"
msgid "address:"
-msgstr ""
-"주소:"
+msgstr "주소:"
msgid "link_type:"
-msgstr ""
-"link_type:"
+msgstr "link_type:"
msgid "block:"
-msgstr ""
-"블록:"
+msgstr "블록:"
msgid "drive_type:"
-msgstr ""
-"drive_type:"
+msgstr "drive_type:"
msgid "model:"
-msgstr ""
-"모델:"
+msgstr "모델:"
msgid "Affected devices:"
-msgstr ""
-"관련 장치:"
+msgstr "관련 장치:"
msgid "The VLAN id must be between 1 and 4094."
-msgstr ""
-"VLAN ID는 1과 4094 사이여야 합니다."
+msgstr "VLAN ID는 1과 4094 사이여야 합니다."
msgid "unavailable"
-msgstr ""
-"사용 불가능"
+msgstr "사용 불가능"
msgid ""
"This action will interrupt network connectivity for any virtual machine that "
"depend on this network."
msgstr ""
-"이 조치는 이 네트워크에 의존하는 가상 머신의 네트워크 연결을 "
-"인터럽트합니다."
+"이 조치는 이 네트워크에 의존하는 가상 머신의 네트워크 연결을 인터럽트합니다."
msgid "Create a network"
-msgstr ""
-"네트워크 작성"
+msgstr "네트워크 작성"
msgid ""
"This network is not persistent. Instead of stop, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"이 네트워크는 지속적이지 않습니다. 이 조치는 중지하는 대신 "
-"영구적으로 삭제합니다. 계속하시겠습니까?"
+"이 네트워크는 지속적이지 않습니다. 이 조치는 중지하는 대신 영구적으로 삭제합"
+"니다. 계속하시겠습니까?"
msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
-"NetworkManager를 사용으로 설정하여 브릿지된 VLAN 태그가 잘 작동하지 않을 수 있습니다. 사용 안함으로"
-"설정하는 것이 좋습니다."
+"NetworkManager를 사용으로 설정하여 브릿지된 VLAN 태그가 잘 작동하지 않을 수 "
+"있습니다. 사용 안함으로설정하는 것이 좋습니다."
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
-msgstr ""
-"스토리지 풀이 영구적으로 삭제됩니다. 계속하시겠습니까?"
+msgstr "스토리지 풀이 영구적으로 삭제됩니다. 계속하시겠습니까?"
msgid "This storage pool is empty."
-msgstr ""
-"이 스토리지 풀은 비어 있습니다."
+msgstr "이 스토리지 풀은 비어 있습니다."
msgid ""
"It will format your disk and you will loose any data in there, are you sure "
"to continue? "
-msgstr ""
-"디스크가 포맷되고 데이터가 손실됩니다. "
-"계속하시겠습니까? "
+msgstr "디스크가 포맷되고 데이터가 손실됩니다. 계속하시겠습니까? "
msgid "SCSI Fibre Channel"
-msgstr ""
-"SCSI 파이버 채널"
+msgstr "SCSI 파이버 채널"
msgid "No SCSI adapters found."
-msgstr ""
-"SCSI 어댑터가 없습니다."
+msgstr "SCSI 어댑터가 없습니다."
msgid "Loading iSCSI targets..."
-msgstr ""
-"iSCSI 대상 로드 중..."
+msgstr "iSCSI 대상 로드 중..."
msgid "No iSCSI found. Please input one."
-msgstr ""
-"iSCSI가 없습니다. 입력하십시오."
+msgstr "iSCSI가 없습니다. 입력하십시오."
msgid "Failed to load iSCSI targets."
-msgstr ""
-"iSCSI 대상을 로드하지 못했습니다."
+msgstr "iSCSI 대상을 로드하지 못했습니다."
msgid "The storage pool name can not be blank."
-msgstr ""
-"스토리지 풀 이름은 비워둘 수 없습니다."
+msgstr "스토리지 풀 이름은 비워둘 수 없습니다."
msgid "The storage pool path can not be blank."
-msgstr ""
-"스토리지 풀 경로는 비워둘 수 없습니다."
+msgstr "스토리지 풀 경로는 비워둘 수 없습니다."
msgid "NFS server mount path can not be blank."
-msgstr ""
-"NFS 서버 마운트 경로는 비워둘 수 없습니다."
+msgstr "NFS 서버 마운트 경로는 비워둘 수 없습니다."
msgid "Invalid NFS mount path."
-msgstr ""
-"올바르지 않은 NFS 마운트 경로입니다."
+msgstr "올바르지 않은 NFS 마운트 경로입니다."
msgid "No logical device selected."
-msgstr ""
-"논리 장치가 선택되지 않았습니다."
+msgstr "논리 장치가 선택되지 않았습니다."
msgid "The iSCSI target can not be blank."
-msgstr ""
-"iSCSI 대상은 비워둘 수 없습니다."
+msgstr "iSCSI 대상은 비워둘 수 없습니다."
msgid "Server name can not be blank."
-msgstr ""
-"서버 이름은 비워둘 수 없습니다."
+msgstr "서버 이름은 비워둘 수 없습니다."
msgid "This is not a valid Server Name or IP. Please, modify it."
-msgstr ""
-"유효한 서버 이름 또는 IP가 아닙니다. 수정하십시오."
+msgstr "유효한 서버 이름 또는 IP가 아닙니다. 수정하십시오."
msgid "Looking for available partitions ..."
-msgstr ""
-"사용 가능한 파티션을 찾는 중..."
+msgstr "사용 가능한 파티션을 찾는 중..."
msgid "No available partitions found."
-msgstr ""
-"사용 가능한 파티션이 없습니다."
+msgstr "사용 가능한 파티션이 없습니다."
msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"이 스토리지 풀은 지속적이지 않습니다. 이 조치는 풀을 비활성화하지 않고 "
-"영구적으로 삭제합니다. 계속하시겠습니까?"
+"이 스토리지 풀은 지속적이지 않습니다. 이 조치는 풀을 비활성화하지 않고 영구적"
+"으로 삭제합니다. 계속하시겠습니까?"
msgid "Unable to retrieve partitions information."
-msgstr ""
-"파티션 정보를 검색할 수 없습니다. "
+msgstr "파티션 정보를 검색할 수 없습니다. "
msgid "In progress..."
-msgstr ""
-"처리 중..."
+msgstr "처리 중..."
msgid "Failed!"
-msgstr ""
-"실패함!"
+msgstr "실패함!"
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
-msgstr ""
-"CDROM 경로는 올바른 로컬/원격 경로여야 하며 비워둘 수 없습니다."
+msgstr "CDROM 경로는 올바른 로컬/원격 경로여야 하며 비워둘 수 없습니다."
msgid "Disk pool or volume cannot be blank."
-msgstr ""
-"디스크 풀 또는 볼륨은 비워둘 수 없습니다."
+msgstr "디스크 풀 또는 볼륨은 비워둘 수 없습니다."
msgid "Peers"
-msgstr ""
-"피어"
+msgstr "피어"
msgid "Searching"
-msgstr ""
-"검색 중"
+msgstr "검색 중"
msgid "No peers found."
-msgstr ""
-"피어가 없습니다."
+msgstr "피어가 없습니다."
msgid "Help"
-msgstr ""
-"도움말"
+msgstr "도움말"
msgid "About"
-msgstr ""
-"정보"
+msgstr "정보"
msgid "Log out"
-msgstr ""
-"로그아웃"
+msgstr "로그아웃"
msgid "Version:"
-msgstr ""
-"버전: "
+msgstr "버전: "
msgid "Session timeout, please re-login."
-msgstr ""
-"세션 제한시간이 초과되었습니다. 다시 로그인하십시오."
+msgstr "세션 제한시간이 초과되었습니다. 다시 로그인하십시오."
msgid "User Name"
-msgstr ""
-"사용자 이름"
+msgstr "사용자 이름"
msgid "Password"
-msgstr ""
-"비밀번호"
+msgstr "비밀번호"
msgid "Generate a New Debug Report"
-msgstr ""
-"새 디버그 보고서 생성"
+msgstr "새 디버그 보고서 생성"
msgid "Report Name"
-msgstr ""
-"보고서 이름"
+msgstr "보고서 이름"
msgid ""
"The name used to identify the report. If omitted, a name will be chosen "
"based on current time. Name can contain: letters, digits, underscore (\"_\") "
"and hyphen (\"-\")."
msgstr ""
-"보고서를 식별하는 데 사용되는 이름입니다. 생략되면 이름은 "
-"현재 시간을 기반으로 선택됩니다. 이름에는 문자, 숫자, 밑줄(\"_\")"
-"및 하이픈(\"-\")을 포함할 수 있습니다."
+"보고서를 식별하는 데 사용되는 이름입니다. 생략되면 이름은 현재 시간을 기반으"
+"로 선택됩니다. 이름에는 문자, 숫자, 밑줄(\"_\")및 하이픈(\"-\")을 포함할 수 "
+"있습니다."
msgid "Rename a Debug Report"
-msgstr ""
-"디버그 보고서 이름 바꾸기"
+msgstr "디버그 보고서 이름 바꾸기"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
"hyphen (\"-\")."
msgstr ""
-"보고서를 식별하는 데 사용하는 이름입니다. 이름에는 문자, 숫자 및"
-"하이픈(\"-\")을 포함할 수 있습니다."
+"보고서를 식별하는 데 사용하는 이름입니다. 이름에는 문자, 숫자 및하이픈(\"-\")"
+"을 포함할 수 있습니다."
msgid "Submit"
-msgstr ""
-"제출"
+msgstr "제출"
msgid "Add a Repository"
-msgstr ""
-"저장소 추가"
+msgstr "저장소 추가"
msgid "Identifier"
-msgstr ""
-"ID"
+msgstr "ID"
msgid "Single word, unique identifier for the repository."
-msgstr ""
-"저장소에 대한 단일 단어의 고유 ID입니다."
+msgstr "저장소에 대한 단일 단어의 고유 ID입니다."
msgid "Textual name for the repository."
-msgstr ""
-"저장소에 대한 텍스트 이름입니다."
+msgstr "저장소에 대한 텍스트 이름입니다."
msgid "URL"
-msgstr ""
-"URL"
+msgstr "URL"
msgid "Required Field"
-msgstr ""
-"필수 필드"
+msgstr "필수 필드"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
-msgstr ""
-"저장소에 대한 URL입니다. 지원되는 프로토콜은 http, ftp 및 file입니다."
+msgstr "저장소에 대한 URL입니다. 지원되는 프로토콜은 http, ftp 및 file입니다."
msgid "Repository is a mirror"
-msgstr ""
-"저장소가 미러입니다."
+msgstr "저장소가 미러입니다."
msgid "Distribution"
-msgstr ""
-"배포"
+msgstr "배포"
msgid "Distribution of the DEB repository."
-msgstr ""
-"DEB 저장소의 배포입니다."
+msgstr "DEB 저장소의 배포입니다."
msgid "Components"
-msgstr ""
-"구성요소"
+msgstr "구성요소"
msgid "List of components in DEB repository."
-msgstr ""
-"DEB 저장소의 구성요소 목록입니다."
+msgstr "DEB 저장소의 구성요소 목록입니다."
msgid "Edit Repository"
-msgstr ""
-"저장소 편집"
+msgstr "저장소 편집"
msgid "Mirror List URL"
-msgstr ""
-"미러 목록 URL"
+msgstr "미러 목록 URL"
msgid "Yes"
-msgstr ""
-"예"
+msgstr "예"
msgid "No"
-msgstr ""
-"아니오"
+msgstr "아니오"
msgid "Add a Volume to Storage Pool"
-msgstr ""
-"스토리지 풀에 볼륨 추가"
+msgstr "스토리지 풀에 볼륨 추가"
msgid "Fetch from remote URL"
-msgstr ""
-"원격 URL에서 페치"
+msgstr "원격 URL에서 페치"
msgid "Enter the remote URL here."
-msgstr ""
-"여기에 원격 URL을 입력하십시오."
+msgstr "여기에 원격 URL을 입력하십시오."
msgid "Upload a file"
-msgstr ""
-"파일 업로드"
+msgstr "파일 업로드"
msgid "Choose the file you want to upload."
-msgstr ""
-"업로드할 파일을 선택하십시오."
+msgstr "업로드할 파일을 선택하십시오."
msgid "Define a New Storage Pool"
-msgstr ""
-"새 스토리지 풀 정의"
+msgstr "새 스토리지 풀 정의"
msgid "Storage Pool Name"
-msgstr ""
-"스토리지 풀 이름"
+msgstr "스토리지 풀 이름"
msgid ""
"The name used to identify the storage pools, and it should not be empty."
-msgstr ""
-"스토리지 풀을 식별하는 데 사용되는 이름이며 비어 있지 않아야 합니다."
+msgstr "스토리지 풀을 식별하는 데 사용되는 이름이며 비어 있지 않아야 합니다."
msgid "Storage Pool Type"
-msgstr ""
-"스토리지 풀 유형"
+msgstr "스토리지 풀 유형"
msgid "Storage Path"
-msgstr ""
-"스토리지 경로"
+msgstr "스토리지 경로"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
-msgstr ""
-"스토리지 풀의 경로입니다. 각 스토리지 풀은 고유 경로를 가져야 합니다."
+msgstr "스토리지 풀의 경로입니다. 각 스토리지 풀은 고유 경로를 가져야 합니다."
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
"your system."
msgstr ""
-"디렉토리가 시스템에 이미 존재하지 않으면 Kimchi가 디렉토리 작성을 "
-"시도합니다."
+"디렉토리가 시스템에 이미 존재하지 않으면 Kimchi가 디렉토리 작성을 시도합니다."
msgid "NFS Server IP"
-msgstr ""
-"NFS 서버 IP"
+msgstr "NFS 서버 IP"
msgid "NFS server IP or hostname. It can be input or chosen from history."
msgstr ""
-"NFS 서버 IP 또는 호스트 이름입니다. 이것은 입력하거나 히스토리에서 선택할 수 있습니다."
+"NFS 서버 IP 또는 호스트 이름입니다. 이것은 입력하거나 히스토리에서 선택할 수 "
+"있습니다."
msgid "NFS Path"
-msgstr ""
-"NFS 경로"
+msgstr "NFS 경로"
msgid "The NFS exported path on NFS server."
-msgstr ""
-"NFS 서버에서 NFS의 내보낸 경로입니다."
+msgstr "NFS 서버에서 NFS의 내보낸 경로입니다."
msgid "Device path"
-msgstr ""
-"장치 경로"
+msgstr "장치 경로"
msgid "iSCSI Server"
-msgstr ""
-"iSCSI 서버"
+msgstr "iSCSI 서버"
msgid "iSCSI server IP or hostname. It should not be empty."
-msgstr ""
-"iSCSI 서버 IP 또는 호스트 이름입니다. 비어 있지 않아야 합니다."
+msgstr "iSCSI 서버 IP 또는 호스트 이름입니다. 비어 있지 않아야 합니다."
msgid "Server"
-msgstr ""
-"서버"
+msgstr "서버"
msgid "Port"
-msgstr ""
-"포트"
+msgstr "포트"
msgid "Target"
-msgstr ""
-"대상"
+msgstr "대상"
msgid "The iSCSI target on iSCSI server"
-msgstr ""
-"iSCSI 서버의 iSCSI 대상"
+msgstr "iSCSI 서버의 iSCSI 대상"
msgid "Add iSCSI Authentication"
-msgstr ""
-"iSCSI 인증 추가"
+msgstr "iSCSI 인증 추가"
msgid "iSCSI Authentication"
-msgstr ""
-"iSCSI 인증"
+msgstr "iSCSI 인증"
msgid "SCSI Adapter"
-msgstr ""
-"SCSI 어댑터"
+msgstr "SCSI 어댑터"
msgid "Please, wait..."
-msgstr ""
-"잠시 기다려 주십시오."
+msgstr "잠시 기다려 주십시오."
msgid "Add Template"
-msgstr ""
-"템플리트 추가"
+msgstr "템플리트 추가"
msgid "Where is the source media for this template? "
-msgstr ""
-"이 템플리트의 소스 매체는 어디에 있습니까?"
+msgstr "이 템플리트의 소스 매체는 어디에 있습니까?"
msgid "Local ISO Image"
-msgstr ""
-"로컬 ISO 이미지"
+msgstr "로컬 ISO 이미지"
msgid "Local Image File"
-msgstr ""
-"로컬 이미지 파일"
+msgstr "로컬 이미지 파일"
msgid "Remote ISO Image"
-msgstr ""
-"원격 ISO 이미지"
+msgstr "원격 ISO 이미지"
msgid "Search ISOs"
-msgstr ""
-"ISO 검색"
+msgstr "ISO 검색"
msgid "The following ISOs are available:"
-msgstr ""
-"다음 ISO가 사용 가능합니다."
+msgstr "다음 ISO가 사용 가능합니다."
msgid "OS: "
-msgstr ""
-"OS: "
+msgstr "OS: "
msgid "Version: "
-msgstr ""
-"버전: "
+msgstr "버전: "
msgid "Size: "
-msgstr ""
-"크기: "
+msgstr "크기: "
msgid "Search more ISOs"
-msgstr ""
-"추가 ISO 검색"
+msgstr "추가 ISO 검색"
msgid "Create Templates from Selected ISO"
-msgstr ""
-"선택한 ISO로부터 템플리트 작성"
+msgstr "선택한 ISO로부터 템플리트 작성"
msgid "I want to use a specific ISO file"
-msgstr ""
-"특정 ISO 파일을 사용하려고 합니다."
+msgstr "특정 ISO 파일을 사용하려고 합니다."
msgid "Loading default remote ISOs ..."
-msgstr ""
-"기본 원격 ISO 로드 중..."
+msgstr "기본 원격 ISO 로드 중..."
msgid "Arch: "
-msgstr ""
-"Arch: "
+msgstr "Arch: "
msgid "I want to use a custom URL"
-msgstr ""
-"사용자 정의 URL을 사용하려고 합니다."
+msgstr "사용자 정의 URL을 사용하려고 합니다."
msgid "Edit Template"
-msgstr ""
-"템플리트 편집"
+msgstr "템플리트 편집"
msgid "Processor"
-msgstr ""
-"프로세서"
+msgstr "프로세서"
msgid "CDROM"
-msgstr ""
-"CDROM"
+msgstr "CDROM"
msgid "Image File"
-msgstr ""
-"이미지 파일"
+msgstr "이미지 파일"
msgid "Graphics"
-msgstr ""
-"그래픽"
+msgstr "그래픽"
msgid "Disk(GB)"
-msgstr ""
-"디스크(GB)"
+msgstr "디스크(GB)"
msgid "Disk Format"
-msgstr ""
-"디스크 형식"
+msgstr "디스크 형식"
msgid "CPU Number"
-msgstr ""
-"CPU 번호"
+msgstr "CPU 번호"
msgid "Manually set CPU topology"
-msgstr ""
-"CPU 토폴로지 수동 설정"
+msgstr "CPU 토폴로지 수동 설정"
msgid "Cores"
-msgstr ""
-"코어"
+msgstr "코어"
msgid "Threads"
-msgstr ""
-"스레드"
+msgstr "스레드"
msgid "CPU"
-msgstr ""
-"CPU"
+msgstr "CPU"
msgid "Disk I/O"
-msgstr ""
-"디스크 I/O"
+msgstr "디스크 I/O"
msgid "Network I/O"
-msgstr ""
-"네트워크 I/O"
+msgstr "네트워크 I/O"
msgid "Livetile"
-msgstr ""
-"라이브타일"
+msgstr "라이브타일"
msgid "No guests found."
-msgstr ""
-"게스트가 없습니다."
+msgstr "게스트가 없습니다."
msgid "Shut down"
-msgstr ""
-"시스템 종료"
+msgstr "시스템 종료"
msgid "Restart"
-msgstr ""
-"다시 시작"
+msgstr "다시 시작"
msgid "Basic Information"
-msgstr ""
-"기본 정보"
+msgstr "기본 정보"
msgid "OS Distro"
-msgstr ""
-"OS Distro"
+msgstr "OS Distro"
msgid "OS Code Name"
-msgstr ""
-"OS 코드 이름"
+msgstr "OS 코드 이름"
msgid "CPU(s)"
-msgstr ""
-"CPU"
+msgstr "CPU"
msgid "System Statistics"
-msgstr ""
-"시스템 통계"
+msgstr "시스템 통계"
msgid "Update Progress"
-msgstr ""
-"진행상태 업데이트"
+msgstr "진행상태 업데이트"
msgid "Network Name"
-msgstr ""
-"네트워크 이름"
+msgstr "네트워크 이름"
msgid "State"
-msgstr ""
-"상태"
+msgstr "상태"
msgid "Network Type"
-msgstr ""
-"네트워크 유형"
+msgstr "네트워크 유형"
msgid "Address Space"
-msgstr ""
-"주소 공간"
+msgstr "주소 공간"
msgid "Name should not contain '/' and '\"'."
-msgstr ""
-"이름에는 '/' 및 '\"'를 포함하지 않아야 합니다."
+msgstr "이름에는 '/' 및 '\"'를 포함하지 않아야 합니다."
msgid "Isolated: no external network connection"
-msgstr ""
-"격리됨: 외부 네트워크 연결 없음"
+msgstr "격리됨: 외부 네트워크 연결 없음"
msgid "NAT: outbound physical network connection only"
-msgstr ""
-"NAT: 아웃바운드 물리적 네트워크 연결만"
+msgstr "NAT: 아웃바운드 물리적 네트워크 연결만"
msgid "Bridged: Virtual machines are connected to physical network directly"
-msgstr ""
-"브릿지됨: 가상 머신이 물리적 네트워크에 직접 연결됨"
+msgstr "브릿지됨: 가상 머신이 물리적 네트워크에 직접 연결됨"
msgid "(No interfaces found)"
-msgstr ""
-"(인터페이스를 찾을 수 없음)"
+msgstr "(인터페이스를 찾을 수 없음)"
msgid "Destination"
-msgstr ""
-"목적지"
+msgstr "목적지"
msgid "Enable VLAN"
-msgstr ""
-"VLAN 사용"
+msgstr "VLAN 사용"
msgid "VLAN ID"
-msgstr ""
-"VLAN ID"
+msgstr "VLAN ID"
msgid "Stop"
-msgstr ""
-"중지"
+msgstr "중지"
msgid "%Used"
-msgstr ""
-"%Used"
+msgstr "%Used"
msgid "Location"
-msgstr ""
-"위치"
+msgstr "위치"
msgid "Capacity"
-msgstr ""
-"용량"
+msgstr "용량"
msgid "Allocated"
-msgstr ""
-"할당됨"
+msgstr "할당됨"
msgid "active"
-msgstr ""
-"활성"
+msgstr "활성"
msgid "inactive"
-msgstr ""
-"비활성"
+msgstr "비활성"
msgid "Deactivate"
-msgstr ""
-"비활성화"
+msgstr "비활성화"
msgid "Activate"
-msgstr ""
-"활성화"
+msgstr "활성화"
msgid "Add Volume"
-msgstr ""
-"볼륨 추가"
+msgstr "볼륨 추가"
msgid "Extend"
-msgstr ""
-"확장"
+msgstr "확장"
msgid "Undefine"
-msgstr ""
-"정의 취소"
+msgstr "정의 취소"
msgid "Format"
-msgstr ""
-"형식"
+msgstr "형식"
msgid "Allocation"
-msgstr ""
-"할당"
+msgstr "할당"
msgid "No templates found."
-msgstr ""
-"템플리트가 없습니다."
-
-# ENGL1SH_VERS10N 28617_40 DO NOT REMOVE OR CHANGE THIS LINE
-# T9N_SRC_ID 92
-# T9N_SH1P_STR1NG KV310AAP001 1
+msgstr "템플리트가 없습니다."
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 5f44740..61ffe9e 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -1,77 +1,62 @@
-# i18n portable object for kimchi.
-# Copyright (C) IBM, Corp. 2013-2014
-# ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>, 2013-04-18.
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+# English translations for kimchi package.
+# Copyright (C) 2013 ORGANIZATION
+# Adam Litke <agl(a)us.ibm.com>, 2013.
#
msgid ""
msgstr ""
-"Project-Id-Version: kimchi 1.0\n"
+"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-06-24 09:39-0300\n"
-"PO-Revision-Date: 2015-03-23 12:57+0000\n"
-"Last-Translator: Crístian Deives dos Santos Viana <cristiandeives@gmail."
-"com>\n"
-"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/"
-"kimchi/language/pt_BR/)\n"
+"POT-Creation-Date: 2015-08-21 09:52-0300\n"
+"PO-Revision-Date: 2013-07-11 17:32-0400\n"
+"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
+"Language-Team: English\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"Generated-By: pygettext.py 1.5\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#, python-format
msgid "Unknown parameter %(value)s"
-msgstr "Parâmetro desconhecido: %(value)s"
+msgstr "Parâmetro desconhecido %(value)s "
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr "Método de remoção não é permitido em %(resource)s"
+msgstr "A exclusão não é permitida para %(resource)s "
#, python-format
msgid "%(resource)s does not implement update method"
-msgstr "%(resource)s não implementa método de atualização"
+msgstr "%(resource)s não implementa o método de atualização"
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr "Método de criação não é permitido em %(resource)s"
+msgstr "A criação não é permitida para %(resource)s "
msgid "Unable to parse JSON request"
-msgstr "Não é possível realizar a leitura da requisição do JSON"
+msgstr "Não é possível analisar a solicitação JSON"
msgid "This API only supports JSON"
-msgstr "Essa API suporta apenas JSON"
+msgstr "Esta API suporta somente JSON"
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
-msgstr "Parâmetros não correspondem à especificação do esquema: %(err)s"
+msgstr "Os parâmetros não correspondem ao requisito no esquema: %(err)s"
msgid "You don't have permission to perform this operation."
-msgstr "Você não tem permissão para executar esta operação."
+msgstr "Você não tem permissão para executar essa operação."
msgid "Datastore is not initiated in the model object."
-msgstr "Datastore não está inicializado no objeto modelo."
+msgstr "O armazenamento de dados não é iniciado no objeto modelo."
#, python-format
msgid "Unable to start task due error: %(err)s"
-msgstr "Não foi possível iniciar a tarefa devido a um erro: %(err)s"
+msgstr "Não é possível iniciar a tarefa devido ao erro: %(err)s "
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
msgstr ""
-"Limite de tempo de %(seconds)s segundos expirado ao executar a tarefa "
+"Tempo limite de %(seconds)s segundos expirou durante a execução da tarefa "
"'%(task)s'."
#, python-format
@@ -80,19 +65,20 @@ msgstr ""
"Autenticação falhou para o usuário '%(username)s'. [Código de erro: %(code)s]"
msgid "You are not authorized to access Kimchi"
-msgstr "Você não está autorizado para acessar o Kimchi"
+msgstr "Você não está autorizado a acessar o Kimchi"
#, python-format
msgid "Specify %(item)s to login into Kimchi"
-msgstr "Especifique %(item)s para autenticar no Kimchi"
+msgstr "Especifique %(item)s para efetuar login no Kimchi"
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
-msgstr "Usuário %(user_id)s não encontrado com as configurações LDAP dadas."
+msgstr ""
+"Usuário %(user_id)s não localizado com as configurações de LDAP fornecidas."
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
-msgstr "Configurações LDAP inválidas: %(item)s : %(value)s"
+msgstr "Configuração de LDAP inválida: %(item)s: %(value)s "
msgid "Unknown \"_cap\" specified"
msgstr "\"_cap\" desconhecido especificado"
@@ -101,64 +87,72 @@ msgid "\"_passthrough\" should be \"true\" or \"false\""
msgstr "\"_passthrough\" deve ser \"true\" ou \"false\""
msgid "\"_passthrough_affected_by\" should be a device name string"
-msgstr "\"_passthrough_affected_by\" deve ser um texto do nome do dispositivo"
+msgstr ""
+"\"_passthrough_affected_by\" deve ser uma sequência de nome do dispositivo"
+
+msgid "\"_available_only\" should be \"true\" or \"false\""
+msgstr "\"_available_only\" deve ser \"true\" ou \"false\""
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
-msgstr "Erro ao consultar block devices. Detalhes %(err)s"
+msgstr "Erro ao obter dispositivos de bloco. Detalhes: %(err)s "
#, python-format
msgid "Error while getting block device information for %(device)s."
-msgstr "Erro ao consultar informações de block devices para %(device)s."
+msgstr ""
+"Erro ao obter informações sobre o dispositivo de bloco para %(device)s."
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr "Não foi possível encontrar o arquivo da distribuição: %(filename)s"
+msgstr "Não é possível localizar o arquivo distro: %(filename)s "
#, python-format
msgid ""
"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
msgstr ""
-"Não foi possível ler o arquivo da distribuição: %(filename)s. Confirme se é "
-"um arquivo JSON."
+"Não é possível analisar o arquivo distro: %(filename)s. Certifique-se de que "
+"seja um arquivo JSON."
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
msgstr ""
-"Não foi possível logar na máquina alvo do iSCSI %(portal)s. Detalhes: %(err)s"
+"Não é possível efetuar login no destino do host iSCSI %(portal)s. Detalhes: "
+"%(err)s "
#, python-format
msgid "Unable to login to iSCSI host %(host)s target %(target)s"
-msgstr "Não foi possível logar na máquina %(host)s alvo %(target)s do iSCSI"
+msgstr ""
+"Não é possível efetuar login no destino %(target)s do host %(host)s iSCSI"
#, python-format
msgid "Unable to find ISO file %(filename)s"
-msgstr "Não foi possível encontrar a ISO %(filename)s"
+msgstr "Não é possível localizar o arquivo ISO %(filename)s "
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr "A ISO %(filename)s não é bootável"
+msgstr "O arquivo ISO %(filename)s não é inicializável"
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
-msgstr "A ISO %(filename)s não possui uma gravação válida de boot El Torito"
+msgstr ""
+"O arquivo ISO %(filename)s não possui um registro de inicialização El Torito "
+"válido"
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
-msgstr "Validação El Torito inválida na ISO %(filename)s"
+msgstr "Entrada de validação El Torito inválida no ISO %(filename)s "
#, python-format
msgid "Invalid El Torito boot indicator in ISO %(filename)s"
-msgstr "Indicador de boot El Torito inválido na ISO %(filename)s"
+msgstr "Indicador de inicialização El Torito inválido no ISO %(filename)s "
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
-msgstr ""
-"Tipo de volume não esperado para um volume primário na ISO %(filename)s"
+msgstr "Tipo de volume inesperado para o volume primário no ISO %(filename)s "
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
-msgstr "Formato errado na leitura do descritor de volume na ISO %(filename)s"
+msgstr "Formato inválido ao ler o descritor de volume no ISO %(filename)s "
#, python-format
msgid ""
@@ -168,228 +162,234 @@ msgid ""
"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
"'path_to_iso'.Details: %(err)s"
msgstr ""
-"O servidor não tem permissão para acessar a ISO %(filename)s. Considere mudá-"
-"la para o diretório /var/lib/libvirt, ou mude as permissões para que o "
-"usuário '%(user)s' tenha acesso, ou, adicione o usuário '%(user)s' no grupo "
-"do caminho da ISO, ou (não recomendado) 'chmod -R o+x 'caminho_para_iso'. "
-"Detalhes: %(err)s"
+"O hypervisor não possui permissão para usar este ISO %(filename)s. Considere "
+"movê-lo sob /var/lib/libvirt ou configure a permissão de procura para listas "
+"de controle de acesso de arquivo para o usuário '%(user)s', se possível, ou "
+"inclua o '%(user)s' no grupo de caminhos ISO ou (não recomendado) 'chmod -R o"
+"+x 'path_to_iso'.Detalhes: %(err)s "
msgid "An error occurred when probing image OS information."
-msgstr "Ocorreu um erro ao identificar o sistema operacional da imagem."
+msgstr "Ocorreu um erro com a imagem de análise das informações de S.O."
msgid "No OS information found in given image."
-msgstr ""
-"Nenhuma informação de sistema operacional encontrada na imagem fornecida."
+msgstr "Nenhuma informação de S.O. localizada na imagem fornecida."
#, python-format
msgid "Unable to read image file %(filename)s"
-msgstr "Não foi possível ler o arquivo de imagem %(filename)s."
+msgstr "Não é possível ler o arquivo de imagem %(filename)s "
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
msgstr ""
-"Arquivo de imagem deve ser um arquivo existente no sistema. %(filename)s não "
-"é uma entrada válida."
+"O arquivo de imagem deve ser um arquivo existente no sistema. %(filename)s "
+"não é uma entrada válida."
#, python-format
msgid "Virtual machine %(name)s already exists"
-msgstr "Máquina virtual %(name)s já existe"
+msgstr "A máquina virtual %(name)s já existe"
#, python-format
msgid "Virtual machine %(name)s does not exist"
-msgstr "Máquina virtual %(name)s não existe"
+msgstr "A máquina virtual %(name)s não existe"
#, python-format
msgid ""
"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
"in use or the virtual machine is not powered off."
msgstr ""
-"Não foi possível renomear a máquina virtual %(name)s. O nome %(new_name)s já "
-"está em uso ou a máquina virtual não está ligada."
+"Não é possível renomear a máquina virtual %(name)s. O nome %(new_name)s já "
+"existeem uso ou a máquina virtual não está desligada."
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
msgstr ""
-"Não foi possível tirar uma foto da tela para a máquina virtual %(name)s que "
-"está desligada"
+"Não é possível recuperar a captura de tela para a máquina virtual "
+"interrompida %(name)s "
msgid "Remote ISO image is not supported by this server."
-msgstr "Imagem de ISO remota não é suportada por esse servidor."
+msgstr "A imagem ISO remota não é suportada por este servidor."
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
-msgstr "Foto da tela não é suportado na máquina virtual %(name)s"
+msgstr "A captura de tela não é suportada em máquina virtual %(name)s "
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
-msgstr "Não foi possível criar a máquina virtual %(name)s. Detalhes: %(err)s"
+msgstr "Não é possível criar a máquina virtual %(name)s. Detalhes: %(err)s"
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Não foi possível atualizar a máquina virtual %(name)s. Detalhes: %(err)s"
+msgstr "Não é possível atualizar a máquina virtual %(name)s. Detalhes: %(err)s"
#, python-format
msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Não foi possível encontrar a máquina virtual %(name)s. Detalhes: %(err)s"
+"Não é possível recuperar a máquina virtual %(name)s. Detalhes: %(err)s "
#, python-format
msgid "Unable to connect to powered off virtual machine %(name)s."
-msgstr "Não foi possível conectar à máquina virtual desligada %(name)s."
+msgstr "Não é possível se conectar à máquina virtual desligada %(name)s. "
msgid "Virtual machine name must be a string without slashes (/)"
-msgstr ""
+msgstr "O nome da máquina virtual deve ser uma sequência sem barras (/)"
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
-msgstr "URI do Modelo inválida %(value)s especificada para máquina virtual"
+msgstr "URI do modelo %(value)s inválido especificado para máquina virtual"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for virtual machine"
msgstr ""
-"URI do Storage pool URI inválida %(value)s especificada para máquina virtual"
+"URI do conjunto de armazenamentos %(value)s inválido especificado para "
+"máquina virtual"
msgid "Supported virtual machine graphics are Spice or VNC"
-msgstr "Gráficos suportados para a máquina virtual são Spice ou VNC"
+msgstr "Os gráficos de máquina virtual suportados são Spice ou VNC"
msgid "Graphics address to listen on must be IPv4 or IPv6"
-msgstr "Endereço para receber eventos gráficos deve ser IPv4 ou IPv6"
+msgstr "O endereço do gráfico para atendimento deve ser IPv4 ou IPv6"
msgid "Specify a template to create a virtual machine from"
-msgstr "Especifique um modelo para ser base da criação da máquina virtual"
+msgstr "Especifique um modelo para criar uma máquina virtual a partir dele"
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
-msgstr "Não foi possível iniciar a máquina virtual %(name)s. Detalhes: %(err)s"
+msgstr "Não é possível iniciar a máquina virtual %(name)s. Detalhes: %(err)s "
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Não foi possível forçar o desligamento da máquina virtual %(name)s. "
-"Detalhes: %(err)s"
+msgstr "Não é possível desligar a máquina virtual %(name)s. Detalhes: %(err)s "
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
-msgstr "Não foi possível remover a máquina virtual %(name)s. Detalhes: %(err)s"
+msgstr "Não é possível excluir a máquina virtual %(name)s. Detalhes: %(err)s "
#, python-format
msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Não foi possível reiniciar a máquina virtual %(name)s. Detalhes: %(err)s"
+"Não é possível reconfigurar a máquina virtual %(name)s. Detalhes: %(err)s "
msgid "User name list must be an array"
-msgstr "Lista de nomes de usuário deve ser um array"
+msgstr "A lista de nomes de usuário deve ser uma matriz"
msgid "User name must be a string"
-msgstr "Nome de usuário deve ser um texto"
+msgstr "O nome de usuário deve ser uma sequência"
msgid "Group name list must be an array"
-msgstr "Lista de nomes de grupo deve ser um array"
+msgstr "A lista de nomes grupo deve ser uma matriz"
msgid "Group name must be a string"
-msgstr "Nome de grupo deve ser um texto"
+msgstr "O nome do grupo deve ser uma sequência"
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr "Usuário(s) '%(users)s' não existe(m)"
+msgstr "O(s) usuário(s) '%(users)s' não existem"
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr "Grupo(s) '%(groups)s' não existe(m)"
+msgstr "O(s) grupo(s) '%(groups)s' não existem"
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Não foi possível desligar a máquina virtual %(name)s. Detalhes: %(err)s"
+msgstr "Não é possível encerrar a máquina virtual %(name)s. Detalhes: %(err)s "
#, python-format
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Não foi possível acessar os metadados da máquina virtual %(name)s. Detalhes: "
-"%(err)s"
+"Não é possível obter metadados de acesso da máquina virtual %(name)s. "
+"Detalhes: %(err)s "
msgid "The guest console password must be a string."
-msgstr "A senha para o console do guest deve ser um texto."
+msgstr "A senha do console do convidado deve ser uma sequência."
msgid "The life time for the guest console password must be a number."
-msgstr "O tempo de vida da senha do console do guest deve ser um número."
+msgstr ""
+"O tempo de vida para a senha do console do convidado deve ser um número."
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
-msgstr "A máquina virtual '%(name)s' deve estar parada antes de cloná-la."
+msgstr ""
+"A máquina virtual '%(name)s' deve ser interrompida antes que seja clonada."
#, python-format
msgid "Insufficient disk space to clone virtual machine '%(name)s'"
-msgstr "Espaço em disco insuficiente para clonar a máquina virtual '%(name)s'"
+msgstr "Espaço em disco insuficiente para clonar a máquina virtual '%(name)s'."
#, python-format
msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
-msgstr "Não foi possível clonar a VM '%(name)s'. Detalhes: %(err)s"
+msgstr "Não é possível clonar a VM '%(name)s'. Detalhes: %(err)s "
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
-msgstr "Operação inválida para máquina virtual não-persistente %(name)s"
+msgstr "Operação inválida para máquina virtual não persistente %(name)s "
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
msgstr ""
+"Não é possível suspender a VM '%(name)s' porque ela não está em execução."
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
-msgstr ""
+msgstr "Não é possível suspender a VM '%(name)s'. Detalhes: %(err)s "
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
-msgstr ""
+msgstr "Não é possível continuar a VM '%(name)s' porque ela não está pausada."
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
-msgstr ""
+msgstr "Não é possível continuar a VM %(name)s. Detalhes: %(err)s "
msgid "Memory assigned is higher then the maximum allowed in the host."
-msgstr ""
+msgstr "Memória designada é mais alta do que o máximo permitido no host."
#, python-format
msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
+"A VM '%(name)s' não suporta atualização de memória em tempo real. Atualize a "
+"memória com a máquina off-line para ativar esse recurso."
msgid "Only increase memory is allowed in active VMs"
-msgstr ""
+msgstr "Somente aumentar memória é permitido em VMs ativas"
msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
msgstr ""
+"Para atualização de memória em tempo real, o novo valor de memória deve ser "
+"igual ao valor de memória antigo mais múltiplos de 1024 Mib"
msgid "There are not enough free slots of 1024 Mib in the guest."
-msgstr ""
+msgstr "Não há slots livres de 1024 Mib suficientes no convidado."
msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
msgstr ""
+"A versão libvirt do host não suporta dispositivos de memória. Libvirt deve "
+"ser >= 1.2.14"
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
-msgstr ""
+msgstr "Erro ao anexar dispositivo de memória. Detalhes: %(error)s "
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
-"A VM %(vmid)s não contém o dispositivo de host atribuído diretamente "
+"A VM %(vmid)s não contém o dispositivo host diretamente designado "
"%(dev_name)s."
#, python-format
msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
msgstr ""
-"Não é permitido atribuir diretamente o dispositivo de host %(dev_name)s."
+"O dispositivo host %(dev_name)s não tem permissão para designar diretamente "
+"para a VM."
msgid ""
"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
@@ -398,110 +398,122 @@ msgid ""
"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
"iommu=1."
msgstr ""
-"Nenhum grupo IOMMU encontrado. Passthrough de host PCI necessita do grupo "
-"IOMMU para funcionar corretamente. Por favor, habilite o suporte ao Intel VT-"
-"d ou AMD IOMMU. Para uma CPU Intel, adicione \"intel_iommu=on\" nos seus "
-"parâmetros de kernel em \"/boot/grub2/grub.conf\". Para uma CPU AMD, "
-"adicione \"iommu=pt iommu=1\"."
+"Nenhum grupo IOMMU localizado. A passagem do PCI (Peripheral Component "
+"Interconnect) host precisa do grupo IOMMU para funcionar corretamente. Ative "
+"Intel VT-d ou AMD IOMMU em seu BIOS, e verifique se o Kernel está compilado "
+"com suporte a IOMMU. Para a CPU (unidade central de processamento) Intel, "
+"inclua intel_iommu=on em seu parâmetro do Kernel em /boot/grub2/grub.conf. "
+"Para a CPU (unidade central de processamento) AMD, inclua iommu=pt iommu=1."
msgid "\"name\" should be a device name string"
-msgstr "\"nome\" deve ser um texto do nome do dispositivo."
+msgstr "\"name\" deve ser uma sequência de nome do dispositivo"
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
msgstr ""
+"O dispositivo %(name)s provavelmente está em uso pelo host. Não é possível "
+"conectá-lo ao convidado."
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
-msgstr "Interface %(iface)s não existe na máquina virtual %(name)s"
+msgstr "A interface %(iface)s não existe na máquina virtual %(name)s"
#, python-format
msgid ""
"Network %(network)s specified for virtual machine %(name)s does not exist"
msgstr ""
-"Rede %(network)s especificada para a máquina virtual %(name)s não existe"
+"A rede %(network)s especificada para máquina virtual %(name)s não existe"
msgid "Supported virtual machine interfaces type is only network"
-msgstr "Tipo de interface suportado das máquinas virtuais é somente rede"
+msgstr "O tipo de interface de máquina virtual suportado é somente rede"
msgid "Network name for virtual machine interface must be a string"
-msgstr "Nome da rede para a interface da máquina virtual deve ser texto"
+msgstr "O nome da rede para a interface de máquina virtual deve ser um texto"
msgid "Invalid network model card specified for virtual machine interface"
-msgstr "Modelo de placa de rede inválido para a interface da máquina virtual"
+msgstr ""
+"Placa do modelo de rede inválida especificada para a interface de máquina "
+"virtual"
msgid "Specify type and network to add a new virtual machine interface"
msgstr ""
-"Especifique o tipo e a rede para adicionar uma nova interface da máquina "
+"Especifique o tipo e a rede para incluir uma nova interface de máquina "
"virtual"
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
-msgstr ""
+msgstr "O Endereço MAC deve respeitar esse formato FF:FF:FF:FF:FF:FF"
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
-msgstr ""
+msgstr "O Endereço MAC %(mac)s já existe na máquina virtual %(name)s "
msgid "Invalid MAC Address"
-msgstr ""
+msgstr "Endereço MAC inválido"
msgid "Cannot change MAC address of a running virtual machine"
-msgstr ""
+msgstr "Não é possível mudar o endereço MAC de uma máquina virtual em execução"
#, python-format
msgid "Template %(name)s already exists"
-msgstr "Modelo %(name)s já existe"
+msgstr "O modelo %(name)s já existe"
#, python-format
msgid ""
"Network '%(network)s' specified for template %(template)s does not exist"
-msgstr "Rede '%(network)s' especificada para o modelo %(template)s não existe"
+msgstr ""
+"A rede '%(network)s' especificada para o modelo %(template)s não existe"
#, python-format
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
msgstr ""
-"Storage pool %(pool)s especificado para o modelo %(template)s não existe"
+"O conjunto de armazenamentos %(pool)s especificado para o modelo "
+"%(template)s não existe"
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
msgstr ""
-"Storage pool %(pool)s especificado para o modelo %(template)s não está ativo"
+"O conjunto de armazenamentos %(pool)s especificado para o modelo "
+"%(template)s não está ativo"
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr "Parâmetro inválido '%(param)s' especificado para CDROM"
+msgstr "Parâmetro inválido '%(param)s' especificado para CDROM."
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
-msgstr "Rede %(network)s especificada para modelo %(template)s não está ativa"
+msgstr ""
+"Rede %(network)s especificada para o modelo %(template)s não está ativa"
msgid "Template name must be a string"
-msgstr "Nome do modelo deve ser um texto"
+msgstr "O nome de modelo deve ser um texto"
msgid "Template icon must be a path to the image"
-msgstr "Ícone do modelo deve ser um caminho para uma imagem"
+msgstr "O ícone de modelo deve ser um caminho para a imagem"
msgid "Template distribution must be a string"
-msgstr "Distribuição do modelo deve ser um texto"
+msgstr "A distribuição do modelo deve ser um texto"
msgid "Template distribution version must be a string"
-msgstr "Versão da distribuição do modelo deve ser um texto"
+msgstr "A versão de distribuição do modelo deve ser um texto"
msgid "The number of CPUs must be an integer greater than 0"
-msgstr "O número de CPUs deve ser um inteiro maior do que 0"
+msgstr ""
+"O número de CPUs (unidades centrais de processamento) deve ser um número "
+"inteiro maior que 0"
msgid "Amount of memory (MB) must be an integer greater than 512"
-msgstr "Quantidade de memória (MB) deve ser um inteiro maior que 512"
+msgstr "A quantia de memória (MB) deve ser um número inteiro maior que 512"
msgid "Template CDROM must be a local or remote ISO file"
-msgstr "Modelo do CDROM deve ser um arquivo ISO local ou remoto"
+msgstr "O modelo CD-ROM deve ser um arquivo ISO local ou remoto"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for template"
-msgstr "URI de storage pool inválido %(value)s especificado para modelo"
+msgstr ""
+"URI do conjunto de armazenamentos %(value)s inválido especificado para modelo"
msgid "Specify an ISO image as CDROM or a base image to create a template"
msgstr ""
@@ -509,155 +521,168 @@ msgstr ""
"modelo"
msgid "All networks for the template must be specified in a list."
-msgstr "Todas redes para o modelo devem ser especificadas em uma lista"
+msgstr "Todas as redes para o modelo devem ser especificadas em uma lista."
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
msgstr ""
-"Especifique um volume para o template quando o storage pool for iSCSI or SCSI"
+"Especifique um volume para um modelo quando o conjunto de armazenamentos for "
+"iSCSI ou SCSI"
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
-msgstr "O volume %(volume)s não está no storage pool %(pool)s"
+msgstr "O volume %(volume)s não está no conjunto de armazenamentos %(pool)s "
#, python-format
msgid "Unable to create template due error: %(err)s"
-msgstr "Não foi possível criar o modelo devido a um erro: %(err)s"
+msgstr "Não é possível criar o modelo devido ao erro: %(err)s "
#, python-format
msgid "Unable to delete template due error: %(err)s"
-msgstr "Não foi possível remover o modelo devido a um erro: %(err)s"
+msgstr "Não é possível excluir o modelo devido ao erro: %(err)s "
msgid "Disk size must be an integer greater than 1GB."
-msgstr "O tamanho do disco deve ser um número inteiro maior que 1GB."
+msgstr "O tamanho do disco deve ser um número inteiro maior que 1 GB."
msgid "Template base image must be a valid local image file"
-msgstr "Imagem base do modelo deve ser um arquivo de imagem local válido"
+msgstr "A imagem base do modelo deve ser um arquivo de imagem local válido"
#, python-format
msgid "Cannot identify base image %(path)s format"
-msgstr "Não foi possível identificar o formato da imagem base %(path)s"
+msgstr "Não é possível identificar o formato da imagem base %(path)s "
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
msgstr ""
-"Ao especificar a topologia de CPU, VCPUs deve ser um produto de sockets, "
-"cores e threads."
+"Ao especificar a topologia da CPU, as VCPUs devem ser um produto de "
+"soquetes, núcleos e encadeamentos."
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
"zero."
msgstr ""
-"Ao especificar a topologia de CPU, cada elemento deve ser um número inteiro "
-"maior do que zero."
+"Ao especificar a topologia da CPU, cada elemento deve ser um número inteiro "
+"maior quezero."
msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"Formato de imagem de disco inválido. Formatos válidos: bochs, cloop, cow, "
+"Formato da imagem do disco inválido.Formatos válidos: bochs, cloop, cow, "
"dmg, qcow, qcow2, qed, raw, vmdk, vpc."
#, python-format
msgid "Storage pool %(name)s already exists"
-msgstr "Storage pool %(name)s já existe"
+msgstr "O conjunto de armazenamentos %(name)s já existe"
#, python-format
msgid "Storage pool %(name)s does not exist"
-msgstr "Storage pool %(name)s não existe"
+msgstr "O conjunto de armazenamentos %(name)s não existe"
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
-msgstr "Especifique %(item)s para criar o storage pool %(name)s"
+msgstr "Especifique %(item)s para criar o conjunto de armazenamentos %(name)s "
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr "Não foi possível remover o storage pool ativo %(name)s"
+msgstr "Não é possível excluir o conjunto de armazenamentos ativo %(name)s "
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
-msgstr "Não foi possível listar os storage pools. Detalhes: %(err)s"
+msgstr ""
+"Não é possível listar os conjuntos de armazenamentos. Detalhes: %(err)s "
#, python-format
msgid "Unable to create storage pool %(name)s. Details: %(err)s"
-msgstr "Não foi possível criar o storage pool %(name)s. Detalhes: %(err)s"
+msgstr ""
+"Não é possível criar o conjunto de armazenamentos %(name)s. Detalhes: "
+"%(err)s "
#, python-format
msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
msgstr ""
-"Não foi possível saber o número de volumes no storage pool %(name)s. "
-"Detalhes: %(err)s"
+"Não é possível obter o número de volumes de armazenamento no conjunto de "
+"armazenamentos %(name)s. Detalhes: %(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
-msgstr "Não foi possivel ativar o storage pool %(name)s. Detalhes: %(err)s"
+msgstr ""
+"Não é possível ativar o conjunto de armazenamentos %(name)s. Detalhes: "
+"%(err)s "
#, python-format
msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
-msgstr "Não foi possivel desativar o storage pool %(name)s. Detalhes: %(err)s"
+msgstr ""
+"Não é possível desativar o conjunto de armazenamentos %(name)s. Detalhes: "
+"%(err)s "
#, python-format
msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
-msgstr "Não foi possivel remover o storage pool %(name)s. Detalhes: %(err)s"
+msgstr ""
+"Não é possível excluir o conjunto de armazenamentos %(name)s. Detalhes: "
+"%(err)s "
#, python-format
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
msgstr ""
-"Não foi possível criar Pool NFS uma vez que o caminho de exportação %(path)s "
+"Não é possível criar o Conjunto NFS porque o caminho de exportação %(path)s "
"pode bloquear durante a montagem"
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
msgstr ""
-"Não foi possível criar NFS Pool uma vez que a montagem do caminho de "
+"Não é possível criar o Conjunto NFS porque a montagem do caminho de "
"exportação %(path)s falhou"
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr "Tipo de storage pool não suportado: %(type)s"
+msgstr "Tipo de conjunto de armazenamentos não suportado: %(type)s "
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
-msgstr "Erro durante a leitura do XML do storage pool %(pool)s"
+msgstr "Erro ao recuperar o conjunto de armazenamentos XML para %(pool)s "
msgid "Storage pool name must be a string without slashes (/)"
msgstr ""
+"O nome do conjunto de armazenamentos deve ser uma sequência sem barras (/)"
msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
"iso"
msgstr ""
-"Tipos de storage pool supportados são dir, netfs, logical, iscsi, scsi e "
-"kimchi-iso"
+"Os tipos de conjunto de armazenamentos suportados são dir, netfs, lógico, "
+"iscsi, isci e kimchiiso"
msgid "Storage pool path must be a string"
-msgstr "Caminho para storage pool deve ser um texto"
+msgstr "O caminho do storage pool deve ser um texto"
msgid "Storage pool host must be a IP or hostname"
-msgstr "Host do storage pool deve ser um IP ou um hostname"
+msgstr "O host do storage pool deve ser um IP ou nome do host"
msgid "Storage pool device must be the absolute path to the block device"
msgstr ""
-"Dispositivo do storage pool deve ser o caminho absoluto para o block device"
+"O dispositivo do conjunto de armazenamentos deve ser o caminho absoluto para "
+"o dispositivo de bloco"
msgid "Storage pool devices parameter must be a list"
-msgstr "Parâmetro dos dispositivos do storage pool devem ser uma lista"
+msgstr "O parâmetro de dispositivos do storage pool deve ser uma lista"
msgid "Target IQN of an iSCSI pool must be a string"
-msgstr "Alvo IQN de um pool iSCSI deve ser um texto"
+msgstr "O IQN de destino de um conjunto iSCSI deve ser um texto"
msgid "Port of a remote storage server must be an integer between 1 and 65535"
msgstr ""
-"Porta de um servidor remoto de storage deve ser um inteiro entre 1 e 65535"
+"A porta de um servidor de armazenamento remoto deve ser um número inteiro "
+"entre 1 e 65535"
msgid "iSCSI target username must be a string"
-msgstr "Usuário do iSCSI target deve ser um texto"
+msgstr "O nome do usuário de destino iSCSI deve ser uma sequência"
msgid "iSCSI target password must be a string"
-msgstr "Senha do iSCSI target deve ser um texto"
+msgstr "A senha de destino iSCSI deve ser uma sequência"
msgid "Specify name and type to create a storage pool"
msgstr "Especifique o nome e o tipo para criar um storage pool"
@@ -667,507 +692,530 @@ msgid ""
"%(disk)s is not a valid disk/partition. Could not add it to the pool "
"%(pool)s."
msgstr ""
-"%(disk)s não é um disco/partição válido. Não foi possível adicioná-lo ao "
-"pool %(pool)s."
+"%(disk)s não é um disco/partição válido. Não foi possível incluí-lo no "
+"conjunto %(pool)s."
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
-msgstr "Não foi possível extender o pool lógico %(pool)s. Detalhes: %(err)s"
+msgstr "Não é possível estender o conjunto lógico %(pool)s. Detalhes: %(err)s "
msgid "The parameter disks only can be updated for logical storage pool."
-msgstr ""
-"O parâmetro discos somente pode ser atualizado para storage pool lógicos."
+msgstr "O parâmetro disks só pode ser atualizado para o storage pool lógico."
msgid "The SCSI host adapter name must be a string."
-msgstr "O nome do adaptador SCSI host deve ser um texto"
+msgstr "O nome do adaptador de host SCSI deve ser um texto."
msgid "The storage pool kimchi_isos is reserved for internal use"
-msgstr "O storage pool kimchi_isos é reservado para uso interno"
+msgstr "O storage pool kimchi_isos está reservado para uso interno"
#, python-format
msgid ""
"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"Não foi possível ativar o storage pool NFS %(name)s. Servidor NFS %(server)s "
-"está inacessível."
+"Não é possível ativar o conjunto de armazenamentos NFS %(name)s. O servidor "
+"NFS %(server)s é inacessível."
#, python-format
msgid ""
"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"Não foi possível desativar o storage pool NFS %(name)s. Servidor NFS "
-"%(server)s está inacessível."
+"Não é possível desativar o conjunto de armazenamentos NFS %(name)s. O "
+"servidor NFS %(server)s é inacessível."
#, python-format
msgid ""
"Unable to deactivate pool %(name)s as it is associated with some templates"
msgstr ""
-"Não foi possível desativar o pool %(name)s uma vez que ele está associado "
-"com algum dos modelos"
+"Não é possível desativar o conjunto %(name)s porque ele está associado com "
+"alguns modelos"
#, python-format
msgid "Unable to delete pool %(name)s as it is associated with some templates"
msgstr ""
-"Não foi possível remover o pool %(name)s uma vez que ele está associado com "
-"algum dos modelos"
+"Não é possível excluir o conjunto %(name)s porque ele está associado com "
+"alguns modelos"
#, python-format
msgid ""
"A volume group named '%(name)s' already exists. Please, choose another name "
"to create the logical pool."
msgstr ""
-"Um grupo de volume chamado '%(name)s' já existe. Por favor, escolha outro "
-"nome para criar o pool lógico."
+"Um grupo de volumes nomeado '%(name)s' já existe. Escolha outro nomepara "
+"criar o conjunto lógico."
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
msgstr ""
-"Não foi possível atualizar a base de dados com informações de mais ISOs "
-"devido a um erro: %(err)s"
+"Não é possível atualizar o banco de dados com informações de varredura "
+"completas devido ao erro: %(err)s "
#, python-format
msgid "Storage volume %(name)s already exists"
-msgstr "Volume de storage %(name)s já existe"
+msgstr "O volume de armazenamento %(name)s já existe"
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
-msgstr "Volume de storage %(name)s não existe no storage pool %(pool)s"
+msgstr ""
+"O volume de armazenamento %(name)s não existe no conjunto de armazenamentos "
+"%(pool)s "
#, python-format
msgid ""
"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
"not active"
msgstr ""
-"Não foi possível criar o storaget volume %(volume)s pois o storage pool "
-"%(pool)s não está ativo"
+"Não é possível criar o volume de armazenamento %(volume)s porque o conjunto "
+"de armazenamentos %(pool)s não está ativo"
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
-msgstr "Especifique %(item)s para poder criar o volume %(volume)s"
+msgstr "Especifique %(item)s para criar o volume de armazenamentos %(volume)s"
#, python-format
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
msgstr ""
-"Não foi possível listar volumes pois o storage pool %(pool)s não está ativo"
+"Não é possível listar os volumes de armazenamento porque o conjunto de "
+"armazenamentos %(pool)s não está ativo"
#, python-format
msgid ""
"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
"%(err)s"
msgstr ""
-"Não foi possível criar o volume %(name)s no storage pool %(pool)s. Detalhes: "
-"%(err)s"
+"Não é possível criar o volume de armazenamento %(name)s no conjunto de "
+"armazenamentos %(pool)s. Detalhes: %(err)s"
#, python-format
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
msgstr ""
-"Não foi possível listar os volumes do storage pool %(pool)s. Detalhes: "
-"%(err)s"
+"Não é possível listar volumes de armazenamento no conjunto de armazenamentos "
+"%(pool)s. Detalhes: %(err)s "
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
-msgstr "Não foi possível limpar o volume %(name)s. Detalhes: %(err)s"
+msgstr ""
+"Não é possível limpar volumes de armazenamento %(name)s. Detalhes: %(err)s "
#, python-format
msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
-msgstr "Não foi possível remover o volume %(name)s. Detalhes: %(err)s"
+msgstr ""
+"Não é possível excluir o volume de armazenamento %(name)s. Detalhes: %(err)s "
#, python-format
msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
-msgstr "Não foi possível redimensionar o volume %(name)s. Detalhes: %(err)s"
+msgstr ""
+"Não é possível redimensionar o volume de armazenamento %(name)s. Detalhes: "
+"%(err)s "
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
-msgstr "Storage do tipo %(type)s não suporta criação ou remoção de volume"
+msgstr ""
+"O tipo de armazenamento %(type)s não suporta a criação e a exclusão de volume"
msgid "Storage volume name must be a string"
-msgstr "Nome do volume deve ser um texto"
+msgstr "O nome do volume de armazenamento deve ser um texto"
msgid "Storage volume allocation must be an integer number"
-msgstr "Alocação do volume de storage deve ser um número inteiro"
+msgstr "A alocação do volume de armazenamento deve ser um número inteiro"
msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"Formato de volume de storage inválido. Formatos válidos: bochs, cloop, cow, "
-"dmg, qcow, qcow2, qed, raw, vmdk, vpc."
+"Formato do volume de armazenamento não suportado. Formatos válidos: bochs, "
+"cloop, cow, dmg, qcow, qcow2, qed, raw, vmdk, vpc."
msgid "Storage volume requires a volume name"
-msgstr "Volume de storage requer um nome"
+msgstr "O volume de armazenamento requer um nome de volume"
#, python-format
msgid ""
"Unable to update database with storage volume information due error: %(err)s"
msgstr ""
-"Não foi possível atualizar a base de dados com informações de volume de "
-"storage devido a um erro: %(err)s"
+"Não é possível atualizar o banco de dados com informações de volume de "
+"armazenamento devido ao erro: %(err)s "
#, python-format
msgid "Only one of parameter %(param)s can be specified"
-msgstr "Somente um parâmetro %(param)s pode ser especificado"
+msgstr "Somente um dos parâmetros %(param)s pode ser especificado"
#, python-format
msgid "Create volume from %(param)s is not supported"
-msgstr "Criar um volume a partir de %(param)s não é suportado"
+msgstr "Criação de volume a partir de %(param)s não é suportada"
msgid "Storage volume capacity must be an integer number."
-msgstr "A capacidade do storage volume deve ser um número inteiro."
+msgstr "A capacidade do volume de armazenamento deve ser um número inteiro."
msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
msgstr ""
-"URL para o storage volume deve ser http://, https://, ftp:// ou ftps://."
+"A URL do volume de armazenamento deve ser http://, https://, ftp:// ou "
+"ftps://."
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
-msgstr "Erro ao acessar arquivo %(url)s. Por favor, verifique isso."
+msgstr "Não é possível acessar o arquivo %(url)s. Verifique."
#, python-format
msgid ""
"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
"%(err)s"
msgstr ""
-"Não foi possível clonar o volume de storage '%(name)s' no pool '%(pool)s'. "
-"Detalhes: %(err)s"
+"Não é possível clonar o volume de armazenamento '%(name)s' no conjunto "
+"'%(pool)s'. Detalhes: %(err)s"
msgid "Specify chunk data and its size to upload a file."
msgstr ""
+"Especifique os dados de chunk e seu tamanho para fazer o upload de um "
+"arquivo."
msgid "In order to upload a storage volume, specify the 'upload' parameter."
msgstr ""
+"Para fazer o upload de um volume de armazenamento, especifique o parâmetro "
+"'upload'."
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
msgstr ""
+"Não é possível fazer upload dos dados de chunk porque eles não correspondem "
+"ao tamanho de chunk solicitado."
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
-msgstr ""
+msgstr "O volume de armazenamento %(vol)s não está sob um processo de upload."
msgid "The upload chunk data will exceed the storage volume size."
msgstr ""
+"Os dados de chunk de upload irão exceder o tamanho do volume de "
+"armazenamento."
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
msgstr ""
+"Não é possível fazer upload dos dados de chunk para o volume de "
+"armazenamento. Detalhes: %(err)s."
#, python-format
msgid "Interface %(name)s does not exist"
-msgstr "Interface %(name)s não existe"
+msgstr "A interface %(name)s não existe"
#, python-format
msgid "Network %(name)s already exists"
-msgstr "Rede %(name)s já existe"
+msgstr "A rede %(name)s já existe"
#, python-format
msgid "Network %(name)s does not exist"
-msgstr "Rede %(name)s não existe"
+msgstr "A rede %(name)s não existe"
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
msgstr ""
-"A subrede %(subnet)s especificada para a rede %(network)s não é válida."
+"A sub-rede %(subnet)s especificada para a rede %(network)s não é válida."
#, python-format
msgid "Specify a network interface to create bridged network %(name)s"
-msgstr "Especifique uma interface de rede para criar a rede de bridge %(name)s"
+msgstr ""
+"Especifique uma interface de rede para criar uma rede em bridge %(name)s "
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr "Não foi possível remover a rede ativa %(name)s"
+msgstr "Não é possível excluir a rede ativa %(name)s "
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
msgstr ""
-"A interface %(iface)s especificada para a rede %(network)s já está em uso"
+"A interface %(iface)s especificada para a rede %(network)s já está em uso."
msgid "Interface should be bare NIC, bonding or bridge device."
-msgstr "Interface deve ser 'bare NIC', 'bonding' ou 'dispositivo de bridge'."
+msgstr "A interface deve ser um dispositivo bare NIC, de ligação ou bridge."
#, python-format
msgid "Unable to create network %(name)s. Details: %(err)s"
-msgstr "Não foi possível criar a rede %(name)s. Detalhes: %(err)s"
+msgstr "Não é possível criar a rede %(name)s. Detalhes: %(err)s "
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
-msgstr "Não foi possível encontrar um endereço IP livre para a rede '%(name)s'"
+msgstr "Não é possível localizar um endereço IP livre para a rede '%(name)s'"
#, python-format
msgid "The interface %(iface)s already exists."
-msgstr "A interface %(iface)s já existe"
+msgstr "A interface %(iface)s já existe."
msgid "Network name must be a string without slashes (/) or quotes (\")"
-msgstr ""
+msgstr "O nome da rede deve ser uma sequência sem barras (/) ou aspas (\")"
msgid "Supported network types are isolated, NAT and bridge"
-msgstr "Tipos de rede suportados são isolada, NAT e bridge"
+msgstr "Os tipos de rede suportados são isolado, NAT e ponte"
msgid "Network subnet must be a string with IP address and prefix or netmask"
msgstr ""
-"Subrede deve ser um texto com endereço IP e prefixo, ou máscara de rede"
+"A sub-rede da rede deve ser um texto com endereço IP e prefixo ou máscara de "
+"rede"
msgid "Network interface must be a string"
-msgstr "Interface de rede deve ser um texto"
+msgstr "A interface de rede deve ser um texto"
msgid "Network VLAN ID must be an integer between 1 and 4094"
-msgstr "ID da rede VLAN deve ser um inteiro entre 1 e 4094"
+msgstr "O ID de VLAN da rede deve ser um número inteiro entre 1 e 4094"
msgid "Specify name and type to create a Network"
-msgstr "Especifique o nome e o tipo para criar uma rede"
+msgstr "Especifique o nome e o tipo para criar uma Rede"
#, python-format
msgid ""
"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
"and/or templates linked to this network."
msgstr ""
-"Não foi possível desativar a rede %(name)s. Há alguma máquina virtual "
-"%(vms)s e/ou modelo associados a esta rede."
+"Não é possível excluir a rede %(name)s. Existem algumas máquinas virtuais "
+"%(vms)s e/ou modelos vinculados a essa rede."
#, python-format
msgid ""
"Unable to deactivate network %(name)s. There are some virtual machines "
"%(vms)s and/or templates linked to this network."
msgstr ""
-"Não foi possível desativar a rede %(name)s. Há alguma máquina virtual "
-"%(vms)s e/ou modelo associados a esta rede."
+"Não é possível desativar a rede %(name)s. Existem algumas máquinas virtuais "
+"%(vms)s e/ou modelos vinculados a essa rede."
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
msgstr ""
-"Dispositivo da bridge %(name)s não pode ser um dispositivo vinculado a uma "
+"O dispositivo de ponte %(name)s não pode ser o dispositivo de tronco de uma "
"VLAN."
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr "Não foi possível ativar a interface %(iface)s: %(err)s."
+msgstr "Falha ao ativar a interface %(iface)s: %(err)s."
#, python-format
msgid ""
"Failed to activate interface %(iface)s. Please check the physical link "
"status."
-msgstr ""
-"Não foi possível ativar a interface %(iface)s. Por favor, verifique o status "
-"da conexão física."
+msgstr "Falha ao ativar a interface %(iface)s. Verifique o link físico físico."
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
-msgstr "Não foi possível iniciar a rede %(name)s. Detalhes: %(err)s"
+msgstr "Falha ao iniciar a rede %(name)s. Detalhes: %(err)s "
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr "Relatório de debug %(name)s não existe"
+msgstr "O relatório de depuração %(name)s não existe"
msgid "Debug report tool not found in system"
-msgstr "Ferramenta de relatório de debug não encontrada no sistema"
+msgstr "Ferramenta de relatório de depuração não localizada no sistema"
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
msgstr ""
-"Não foi possível criar o relatório de debug %(name)s. Detalhes: %(err)s."
+"Não é possível criar o relatório de depuração %(name)s. Detalhes: %(err)s."
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
-msgstr "Não foi possível encontrar nenhum relatório com o nome %(name)s"
+msgstr ""
+"Não é possível localizar nenhum relatório de depuração com o nome fornecido "
+"%(name)s "
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
msgstr ""
-"Não foi possível gerar o relatório de debug %(name)s. Detalhes: %(err)s"
+"Não é possível gerar o relatório de depuração %(name)s. Detalhes: %(err)s "
msgid "You should give a name for the debug report file."
-msgstr "Você deve dar um nome para o arquivo do relatório de debug."
+msgstr ""
+"É necessário fornecer um nome para o relatório de arquivo de depuração."
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
-"Nome do relatório deve ser um texto. Somente letras, digitos, underscore "
-"('_') e hífem ('-') são permitidos."
+"O nome do relatório de depuração deve ser uma sequência. Somente letras, "
+"dígitos, sublinhado ('_') e hífen ('-') são permitidos."
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
msgstr ""
-"O relatório de debug com o nome especificado \"%(name)s\" já existe. Por "
-"favor, use outro nome."
+"O relatório de depuração com o nome especificado \"%(name)s\" já existe. "
+"Utilize outro relatório."
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr "Servidor de storage %(server)s não foi usado pelo Kimchi"
+msgstr "O servidor de armazenamento %(server)s não foi usado pelo Kimchi"
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr "Distribuição '%(name)s' não existe"
+msgstr "Distro '%(name)s' não existe"
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr "Partição %(name)s não existe no host"
+msgstr "A partição %(name)s não existe no host"
msgid "Unable to shutdown host machine as there are running virtual machines"
msgstr ""
-"Não foi possível desligar o host uma vez que há máquinas virtuais ligadas"
+"Não é possível encerrar a máquina host porque há máquinas virtuais em "
+"execução"
msgid "Unable to reboot host machine as there are running virtual machines"
msgstr ""
-"Não foi possível resetar o host uma vez que há máquinas virtuais ligadas"
+"Não é possível reinicializar a máquina host porque há máquinas virtuais em "
+"execução"
#, python-format
msgid "Node device '%(name)s' not found"
-msgstr "Dispositivo de nó '%(name)s' não encontrado"
+msgstr "Dispositivo de nó '%(name)s' não localizado"
msgid "Conflicting flag filters specified."
-msgstr "Foram especificados filtros de flag com conflito."
+msgstr "Filtros de sinalização conflitantes especificados."
msgid "No packages marked for update"
msgstr "Nenhum pacote marcado para atualização"
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr "Pacote %(name)s não está marcado para atualização."
+msgstr "O pacote %(name)s não está marcado para ser atualizado."
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
-msgstr "Erro ao buscar pacotes marcados para atualização. Detalhes: %(err)s"
+msgstr "Erro ao obter pacotes marcados para atualização. Detalhes: %(err)s "
msgid "There is no compatible package manager for this system."
-msgstr "Não há gerenciador de pacotes compatível para este sistema."
+msgstr "Não há nenhum gerenciador de pacotes compatível para este sistema."
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr "Não foi possível encontrar %(item)s no datastore"
+msgstr "Não é possível localizar %(item)s no armazenamento de dados"
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr "URI %(uri)s inválida"
+msgstr "URI inválida %(uri)s"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
msgstr ""
-"Fim do limite de tempo ao rodar comando '%(cmd)s' após %(seconds)s segundos"
+"Tempo limite durante execução do comando '%(cmd)s' após %(seconds)s segundos"
msgid "Unable to choose a virtual machine name"
-msgstr "Não foi possível escolher um nome para a máquina virtual"
+msgstr "Não é possível escolher um nome de máquina virtual"
#, python-format
msgid "Invalid data value '%(value)s'"
-msgstr "Valor inválido '%(value)s'"
+msgstr "Valor dos dados inválido '%(value)s'"
#, python-format
msgid "Invalid data unit '%(unit)s'"
-msgstr "Unidade inválida '%(unit)s'"
+msgstr "Unidade de dados inválida '%(unit)s'"
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
-msgstr "Tipo de storage inválido. Tipos suportados: 'cdrom', 'disco'"
+msgstr "Tipo de armazenamento inválido. Tipos suportados: 'cdrom', 'disk'"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
msgstr ""
-"O caminho '%(value)s' não é um caminho local/remoto válido para este "
-"dispositivo"
+"O caminho '%(value)s' não é um caminho local/remoto válido para o dispositivo"
msgid "Only CDROM path can be update."
-msgstr "Apenas o caminho do CD-ROM pode ser atualizado."
+msgstr "Somente o caminho CDROM pode ser atualizado."
#, python-format
msgid ""
"The storage device %(dev_name)s does not exist in the virtual machine "
"%(vm_name)s"
-msgstr "O disco %(dev_name)s não existe na máquina virtual %(vm_name)s"
+msgstr ""
+"O dispositivo de armazenamento %(dev_name)s não existe na máquina virtual"
+"%(vm_name)s"
#, python-format
msgid "Error while creating new storage device: %(error)s"
-msgstr "Erro ao criar novo dispositivo de storage: %(error)s"
+msgstr "Erro ao criar o novo dispositivo de armazenamento: %(error)s "
#, python-format
msgid "Error while updating storage device: %(error)s"
-msgstr "Erro ao atualizar dispositivo de storage: %(error)s"
+msgstr "Erro ao atualizar o dispositivo de armazenamento: %(error)s "
#, python-format
msgid "Error while removing storage device: %(error)s"
-msgstr "Erro ao remover dispositivo de storage: %(error)s"
+msgstr "Erro ao remover o dispositivo de armazenamento: %(error)s "
msgid "Do not support IDE device hot plug"
-msgstr "Dispositivo IDE hot plug não é suportado"
+msgstr "Não suportar hot plug de dispositivo IDE"
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
"disk"
msgstr ""
-"Especifique o tipo e o caminho, ou o tipo e o pool/volume, para adicionar um "
-"novo disco da máquina virtual"
+"Especificar tipo e caminho ou tipo e conjunto/volume para incluir um novo "
+"disco de máquina virtual"
msgid "Specify path to update virtual machine disk"
-msgstr "Especifique o caminho para atualizar o disco da máquina virtual"
+msgstr "Especifique o caminho para atualizar o disco de máquina virtual"
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
msgstr ""
-"Limitação do tipo do controlador %(type)s de %(limit)s dispositivos foi "
-"alcançada"
+"Limitação de tipo de controlador %(type)s de %(limit)s dispositivos atingidos"
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
msgstr ""
-"Não foi possível buscar informações do caminho do disco para o pool/volume "
-"dado: %(error)s"
+"Não é possível recuperar informações de caminho do disco para o conjunto/"
+"volume fornecido: %(error)s "
msgid "Volume already in use by other virtual machine."
-msgstr "Volume já em uso por outra máquina virtual."
+msgstr "O volume já está sendo usado por outra máquina virtual."
msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
msgstr ""
-"Somente um caminho ou pool/volume pode ser especificado para adicionar um "
-"novo disco da máquina virtual."
+"Apenas um caminho ou conjunto/volume podem ser especificados para inclusão "
+"de um novo disco de máquina virtual"
#, python-format
msgid ""
"Volume chosen with format %(format)s does not fit in the storage type "
"%(type)s"
msgstr ""
-"Volume escolhido com formato %(format)s não se enquadra no tipo de storage "
-"%(type)s"
+"O volume escolhido com o formato %(format)s não se ajusta no tipo de "
+"armazenamento%(type)s"
msgid "YUM Repository ID must be one word only string."
-msgstr "ID do repositório YUM deve ser apenas uma palavra."
+msgstr "O ID do Repositório YUM deve ser um texto de apenas uma palavra."
msgid "Repository URL must be an http://, ftp:// or file:// URL."
-msgstr "URL do repositório deve ser uma URL http://, ftp:// ou file://."
+msgstr "A URL do repositório deve ser uma URL http://, ftp:// ou file://."
msgid ""
"Repository configuration is a dictionary with specific values according to "
"repository type."
msgstr ""
-"Configuração do repositório é um dicionário com valores específicos de "
-"acordo com o tipo do repositório."
+"A configuração de repositório é um dicionário com valores específicos de "
+"acordo com o tipo de repositório."
msgid "Distribution to DEB repository must be a string"
-msgstr "Distribuição para o repositório DEB deve ser um texto"
+msgstr "A distribuição para o repositório DEB deve ser um texto"
msgid "Components to DEB repository must be listed in a array"
-msgstr "Componentes para o repositório DEB deve ser um array"
+msgstr "Os componentes para o repositório DEB devem ser listados em uma matriz"
msgid "Components to DEB repository must be a string"
-msgstr "Componentes para o repositório DEB deve ser um texto"
+msgstr "Os componentes para o repositório DEB devem ser um texto"
msgid "Mirror list to repository must be a string"
-msgstr ""
+msgstr "A lista de espelhos para o repositório deve ser uma sequência"
msgid "YUM Repository name must be string."
-msgstr "Nome do repositório YUM deve ser um texto."
+msgstr "O nome do Repositório YUM deve ser um texto."
msgid "GPG check must be a boolean value."
-msgstr "Verificação de GPG deve ser um valor booleano."
+msgstr "A verificação de GPG deve ser um valor booleano."
msgid "GPG key must be a URL pointing to the ASCII-armored file."
msgstr ""
-"Chave GPG deve ser uma URL apontando para o arquivo no formato ASCII-armor."
+"A chave de GPG deve ser uma URL apontando para o arquivo em ASCII-armor."
#, python-format
msgid "Could not update repository %(repo_id)s."
@@ -1175,25 +1223,27 @@ msgstr "Não foi possível atualizar o repositório %(repo_id)s."
#, python-format
msgid "Repository %(repo_id)s does not exist."
-msgstr "Repositório %(repo_id)s não existe."
+msgstr "O repositório %(repo_id)s não existe."
msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
"update a YUM repository."
msgstr ""
+"Especifique a URL base do repositório, lista de espelhos ou metalink para "
+"criar ou atualizar um repositório YUM."
msgid "Repository management tool was not recognized for your system."
msgstr ""
-"Ferramenta de gerenciamento de repositório não foi reconhecida no seu "
+"A ferramenta de gerenciamento de repositório não foi reconhecida por seu "
"sistema."
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr "Repositório %(repo_id)s já está habilitado."
+msgstr "O repositório %(repo_id)s já está ativado."
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr "Repositório %(repo_id)s já está desabilitado."
+msgstr "O repositório %(repo_id)s já está desativado."
#, python-format
msgid "Could not remove repository %(repo_id)s."
@@ -1202,26 +1252,26 @@ msgstr "Não foi possível remover o repositório %(repo_id)s."
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
msgstr ""
-"Não foi possível gravar o arquivo de configuração do repositório "
+"Não foi possível gravar o arquivo de configuração de repositório "
"%(repo_file)s"
msgid "Specify repository distribution in order to create a DEB repository."
msgstr ""
-"Especificar o repositório de distribuição para poder criar o repositório DEB."
+"Especifique a distribuição de repositório para criar um repositório DEB."
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr "Não foi possível habilitar o repositório %(repo_id)s."
+msgstr "Não foi possível ativar o repositório %(repo_id)s."
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr "Não foi possível desabilitar o repositório %(repo_id)s."
+msgstr "Não foi possível desativar o repositório %(repo_id)s."
msgid "YUM Repository ID already exists"
-msgstr "ID do repositório YUM já existe"
+msgstr "O ID do Repositório YUM já existe"
msgid "YUM Repository name must be a string"
-msgstr "Nome do repositório YUM deve ser um texto"
+msgstr "O nome do Repositório YUM deve ser um texto"
#, python-format
msgid "Unable to list repositories. Details: '%(err)s'"
@@ -1230,101 +1280,106 @@ msgstr "Não é possível listar os repositórios. Detalhes: '%(err)s'"
#, python-format
msgid "Unable to retrieve repository information. Details: '%(err)s'"
msgstr ""
-"Não foi possível carregar as informações do repositório. Detalhes: '%(err)s'"
+"Não é possível recuperar as informações do repositório. Detalhes: '%(err)s'"
#, python-format
msgid "Unable to add repository. Details: '%(err)s'"
-msgstr "Não foi possível adicionar o repositório. Detalhes: '%(err)s'"
+msgstr "Não é possível incluir repositório. Detalhes: '%(err)s'"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr "Não foi possível remover o repositório. Detalhes: '%(err)s'"
+msgstr "Não é possível remover repositório. Detalhes: '%(err)s'"
#, python-format
msgid ""
"Configuration items: '%(items)s' are not supported by repository manager"
msgstr ""
-"Itens de configuração '%(items)s' não são suportados pelo gerenciador de "
-"repositórios."
+"Itens de configuração: '%(items)s' não são suportados pelo gerenciador de "
+"repositório"
msgid "Repository metalink must be an http://, ftp:// or file:// URL."
msgstr ""
+"O metalink do repositório deve ser uma URL de http://, ftp:// ou file://."
msgid "Cannot specify mirrorlist and metalink at the same time."
msgstr ""
+"Não é possível especificar lista de espelhos e metalink ao mesmo tempo."
#, python-format
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
msgstr ""
-"A máquina virtual '%(vm)s' deve estar parada antes de criar um snapshot dela"
+"A máquina virtual '%(vm)s' deve ser interrompida antes da criação de uma "
+"captura instantânea nela."
#, python-format
msgid ""
"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Não foi possível criar o snapshot '%(name)s' na máquina virtual '%(vm)s'. "
-"Detalhes: %(err)s"
+"Não é possível criar captura instantânea '%(name)s' na máquina virtual "
+"'%(vm)s'. Detalhes: %(err)s"
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
-msgstr "O snapshot '%(name)s' não existe na máquina virtual '%(vm)s'."
+msgstr ""
+"A captura instantânea '%(name)s' não existe na máquina virtual '%(vm)s'."
#, python-format
msgid ""
"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Não foi possível recuperar o snapshot '%(name)s' da máquina virtual "
+"Não é possível recuperar a captura instantânea '%(name)s' na máquina virtual "
"'%(vm)s'. Detalhes: %(err)s"
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
msgstr ""
-"Não foi possível listar os snapshots da máquina virtual '%(vm)s'. Detalhes: "
-"%(err)s"
+"Não é possível listar capturas instantâneas na máquina virtual '%(vm)s'. "
+"Detalhes: %(err)s "
#, python-format
msgid ""
"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Não foi possível remover o snapshot '%(name)s' da máquina virtual '%(vm)s'. "
-"Detalhes: %(err)s"
+"Não é possível excluir a captura instantânea '%(name)s' na máquina virtual "
+"'%(vm)s'. Detalhes: %(err)s"
#, python-format
msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Não foi possível recuperar o snapshot atual da máquina virtual '%(vm)s'. "
-"Detalhes: %(err)s."
+"Não é possível recuperar a captura instantânea atual da máquina virtual "
+"'%(vm)s'. Detalhes: %(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
msgstr ""
-"Não foi possível reverter a máquina virtual '%(vm)s' para o snapshot "
-"'%(name)s'. Detalhes: %(err)s"
+"Não é possível reverter a máquina virtual '%(vm)s' para a captura "
+"instantânea '%(name)s'. Detalhes: %(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
-"Não foi possível criar o snapshot para a máquina virtual '%(vm)s' porque ela "
-"contém discos no formato '%(format)s'; somente 'qcow2' é suportado."
+"Não é possível criar a captura instantânea da máquina virtual '%(vm)s' "
+"porque ela contém um disco com o formato '%(format)s'; somente 'qcow2' é "
+"suportado."
msgid "The number of vCPUs is too large for this system."
-msgstr "O número de VCPUs é grande demais para esse sistema."
+msgstr "O número de vCPUs é muito grande para esse sistema."
msgid "Invalid vCPU/topology combination."
-msgstr "Combinação inválida de VCPU/topologia."
+msgstr "Combinação inválida de vCPU/topologia."
msgid "This host (or current configuration) does not allow CPU topology."
-msgstr "Este host (ou configuração atual) não permite topologia de CPU."
+msgstr "Esse host (ou configuração atual) não permite topologia de CPU."
msgid "ERROR CODE"
msgstr "CÓDIGO DE ERRO"
@@ -1336,38 +1391,38 @@ msgid "STACK"
msgstr "PILHA"
msgid "Go to Homepage"
-msgstr "Ir para a Página Inicial"
+msgstr "Acessar Página Inicial"
msgid "Create a New Virtual Machine"
-msgstr "Criar nova Máquina Virtual"
+msgstr "Criar uma nova máquina virtual"
msgid "Virtual Machine Name"
-msgstr "Nome da Máquina Virtual"
+msgstr "Nome da máquina virtual"
msgid ""
"The name used to identify the virtual machine. If omitted, a name will be "
"chosen based on the template used."
msgstr ""
-"O nome usado para identificar a máquina virtual. Se ele for omitido, a "
-"escolha será baseada no modelo selecionado."
+"O nome usado para identificar a máquina virtual. Se omitido, um nome será "
+"escolhido com base no modelo usado."
msgid "Template"
msgstr "Modelo"
msgid "Please create a template first."
-msgstr "Por favor, crie um modelo primeiro."
+msgstr "Crie um modelo primeiro."
msgid "Create a Template"
-msgstr "Criar um Modelo"
+msgstr "Criar um modelo"
msgid "Please choose a template."
-msgstr "Por favor, escolha um modelo."
+msgstr "Escolha um modelo."
msgid "OS"
-msgstr "Sistema Operacional"
+msgstr "S.O."
msgid "OS Version"
-msgstr "Versão do Sistema Speracional"
+msgstr "Versão do S.O."
msgid "CPUS"
msgstr "CPUS"
@@ -1382,13 +1437,13 @@ msgid "Creating..."
msgstr "Criando..."
msgid "Edit Guest"
-msgstr "Editar Guest"
+msgstr "Editar convidado"
msgid "General"
msgstr "Geral"
msgid "Storage"
-msgstr "Storage"
+msgstr "Armazenamento"
msgid "Interface"
msgstr "Interface"
@@ -1397,10 +1452,10 @@ msgid "Permission"
msgstr "Permissão"
msgid "Host PCI Device"
-msgstr "Dispositivo de host PCI"
+msgstr "Dispositivo PCI do host"
msgid "Snapshot"
-msgstr "Snapshot"
+msgstr "Captura instantânea"
msgid "Name"
msgstr "Nome"
@@ -1409,7 +1464,7 @@ msgid "CPUs"
msgstr "CPUs"
msgid "Memory (MB)"
-msgstr "Memória (MB)"
+msgstr "Memória (megabyte)"
msgid "Icon"
msgstr "Ícone"
@@ -1427,13 +1482,13 @@ msgid "Type"
msgstr "Tipo"
msgid "MAC Address"
-msgstr ""
+msgstr "Endereço MAC"
msgid "Available system users and groups"
-msgstr "Usuários e grupos de sistema disponíveis"
+msgstr "Usuários e grupos do sistema disponível"
msgid "Selected system users and groups"
-msgstr "Usuários e grupos de sistema selecionados"
+msgstr "Usuários e grupos do sistema selecionado"
msgid "User"
msgstr "Usuário"
@@ -1442,10 +1497,10 @@ msgid "All"
msgstr "Todos"
msgid "To Add"
-msgstr "Para adicionar"
+msgstr "Para Incluir"
msgid "Added"
-msgstr "Adicionado"
+msgstr "Incluído(a)"
msgid "filter"
msgstr "filtro"
@@ -1454,7 +1509,7 @@ msgid "Product"
msgstr "Produto"
msgid "Vendor"
-msgstr "Vendor"
+msgstr "Fornecedor"
msgid "Created"
msgstr "Criado"
@@ -1466,44 +1521,44 @@ msgid "Replace"
msgstr "Substituir"
msgid "Detach"
-msgstr "Remover"
+msgstr "Desanexar"
msgid "Cancel"
msgstr "Cancelar"
msgid "revert"
-msgstr "Reverter"
+msgstr "reverter"
msgid "Add a Storage Device to VM"
-msgstr "Adicionar um dispositivo de storage à VM"
+msgstr "Incluir um Dispositivo de Armazenamento na VM"
msgid "Device Type"
-msgstr "Tipo do Dispositivo"
+msgstr "Tipo de Dispositivo"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
msgstr ""
-"O tipo do dispositivo. Atualmente, \"cdrom\" e \"disco\" são suportados."
+"O tipo de dispositivo. Atualmente, \"cdrom\" e \"disk\" são suportados."
msgid "Storage Pool"
-msgstr "Storage Pool"
+msgstr "storage pool"
msgid "Storage pool which volume located in"
-msgstr "Storage pool no qual o volume está localizado"
+msgstr "Conjunto de armazenamentos no qual o volume está localizado"
msgid "Storage Volume"
-msgstr "Volume de storage"
+msgstr "Volume de Armazenamento"
msgid "Storage volume to be attached"
-msgstr "Volume de storage a ser adicionado"
+msgstr "Volume de armazenamento a ser conectado"
msgid "File Path"
-msgstr "Caminho do Arquivo"
+msgstr "Caminho do arquivo"
msgid "The ISO file path in the server for CDROM."
-msgstr "O caminho do arquivo ISO para o CDROM no servidor."
+msgstr "O caminho do arquivo ISO no servidor para o CDROM."
msgid "Attach"
-msgstr "Adicionar"
+msgstr "Anexar"
msgid "Start"
msgstr "Iniciar"
@@ -1512,13 +1567,13 @@ msgid "Reset"
msgstr "Reiniciar"
msgid "Pause"
-msgstr ""
+msgstr "Pausar"
msgid "Resume"
-msgstr ""
+msgstr "Continuar"
msgid "Power Off"
-msgstr "Forçar desligamento"
+msgstr "Desligar"
msgid "Actions"
msgstr "Ações"
@@ -1533,61 +1588,60 @@ msgid "Edit"
msgstr "Editar"
msgid "Shut Down"
-msgstr "Desligar"
+msgstr "Encerrar"
msgid "Delete"
-msgstr "Remover"
+msgstr "Excluir"
msgid "The username or password you entered is incorrect. Please try again."
-msgstr ""
-"O usuário ou senha inseridos estão incorretos. Por favor, tente novamente."
+msgstr "O nome de usuário ou senha inserido está incorreto. Tente novamente."
msgid "This field is required."
-msgstr "Esse campo é obrigatório."
+msgstr "Este campo é obrigatório."
msgid "Log in"
-msgstr "Entrar"
+msgstr "Efetuar login"
msgid "Logging in..."
-msgstr "Entrando..."
+msgstr "Efetuando login..."
msgid "Host"
msgstr "Host"
msgid "Guests"
-msgstr "Guests"
+msgstr "Máquinas Virtuais"
msgid "Templates"
msgstr "Modelos"
msgid "Failed to get application configuration"
-msgstr "Não foi possível carregar as configurações da aplicação"
+msgstr "Falha ao obter a configuração do aplicativo"
msgid "This is not a valid Linux path"
-msgstr "Este não é um caminho válido no Linux"
+msgstr "Este não é um caminho do Linux válido"
msgid "This is not a valid URL."
-msgstr "Essa não é uma URL válida."
+msgstr "Esta não é uma URL válida."
msgid "No such data available."
-msgstr "Não há dados disponíveis."
+msgstr "Nenhum dado desse tipo disponível."
msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"Não foi possível contactar o sistema host. Verique se o sistema do host está "
-"ligado e se você possui conectividade de rede com ele. Resposta da "
-"requisição HTTP %1. "
+"Não é possível entrar em contato com o sistema host. Verifique se o sistema "
+"host está ativo e se você tem conectividade de rede com ele. Resposta da "
+"solicitação de HTTP %1. "
msgid "Unable to read file."
-msgstr ""
+msgstr "Não é possível ler o arquivo."
msgid "Error while uploading file."
-msgstr ""
+msgstr "Erro ao fazer upload do arquivo."
msgid "Delete Confirmation"
-msgstr "Confirmação de remoção"
+msgstr "Confirmação de exclusão"
msgid "OK"
msgstr "OK"
@@ -1599,7 +1653,7 @@ msgid "Warning"
msgstr "Aviso"
msgid "Cloning..."
-msgstr ""
+msgstr "Clonando..."
msgid "Loading..."
msgstr "Carregando..."
@@ -1614,24 +1668,24 @@ msgid "Detailed message:"
msgstr "Mensagem detalhada:"
msgid "No ISO found"
-msgstr "Nenhuma ISO encontrada"
+msgstr "Nenhum ISO localizado"
msgid "This is not a valid ISO file."
-msgstr "Esse não é um arquivo ISO válido."
+msgstr "Este não é um arquivo ISO válido."
msgid "This may take a long time. Do you want to continue?"
-msgstr "Isso vai levar um longo tempo. Deseja continuar?"
+msgstr "Isso pode demorar. Deseja continuar?"
msgid "This will permanently delete the template. Would you like to continue?"
-msgstr "O modelo vai ser permanentemente removido. Deseja continuar?"
+msgstr "Isso excluirá permanentemente o modelo. Deseja continuar?"
msgid "Unable to shut down system as there are some virtual machines running!"
msgstr ""
-"Não foi possível desligar o sistema porque algumas máquinas virtuais estão "
-"ligadas!"
+"Não é possível encerrar o sistema porque há algumas máquinas virtuais em "
+"execução!"
msgid "Max:"
-msgstr "Máximo:"
+msgstr "Máx.:"
msgid "Utilization"
msgstr "Utilização"
@@ -1643,7 +1697,7 @@ msgid "Read Rate"
msgstr "Taxa de leitura"
msgid "Write Rate"
-msgstr "Taxa de escrita"
+msgstr "Taxa de gravação"
msgid "Received"
msgstr "Recebido"
@@ -1655,14 +1709,14 @@ msgid ""
"Shutting down or restarting host will cause unsaved work lost. Continue to "
"shut down/restarting?"
msgstr ""
-"Desligar ou reiniciar o host causará perda de trabalho que não foi salvo. "
-"Continuar o processo de desligar/reiniciar?"
+"Encerrar ou reiniciar o host causará a perda de trabalho não salvo. "
+"Continuar a encerrar/reiniciar?"
msgid ""
"Repository will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"Repositório será removido permanentemente e não poderá ser recuperado. "
+"O repositório será removido permanentemente e não pode ser recuperado. "
"Deseja continuar?"
msgid "Repositories"
@@ -1672,25 +1726,25 @@ msgid "ID"
msgstr "ID"
msgid "Base URL"
-msgstr "URL Base"
+msgstr "URL base"
msgid "Is Mirror"
-msgstr "É mirror"
+msgstr "É espelho"
msgid "URL Args"
-msgstr "Argumentos da URL"
+msgstr "Argumentos de URL"
msgid "Enabled"
msgstr "Ativado"
msgid "GPG Check"
-msgstr "Verificação GPG"
+msgstr "Verificação de GPG"
msgid "GPG Key"
-msgstr "Chave GPG"
+msgstr "Chave de GPG"
msgid "Add"
-msgstr "Adicionar"
+msgstr "Incluir"
msgid "Remove"
msgstr "Remover"
@@ -1723,23 +1777,23 @@ msgid "Updating..."
msgstr "Atualizando..."
msgid "Failed to retrieve packages update information."
-msgstr "Não foi possível recuperar as informações de atualização de pacoates."
+msgstr "Falha ao recuperar informações de atualização dos pacotes."
msgid "Failed to update package(s)."
-msgstr "Erro ao atualizar pacote(s)."
+msgstr "Falha ao atualizar pacote(s)."
msgid ""
"Debug report will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"Relatório de debug será permanentemente removido e não poderá ser "
+"O relatório de depuração será removido permanentemente e não pode ser "
"recuperado. Deseja continuar?"
msgid "Debug Reports"
-msgstr "Relatórios de Debug"
+msgstr "Relatórios de depuração"
msgid "Generated Time"
-msgstr "Tempo gerado"
+msgstr "Tempo de geração"
msgid "Generate"
msgstr "Gerar"
@@ -1751,89 +1805,89 @@ msgid "Rename"
msgstr "Renomear"
msgid "Download"
-msgstr "Baixar"
+msgstr "Fazer o download"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
"hyphen ('-')."
msgstr ""
-"Nome do relatório deve apenas conter letras, números, underscore ('_') e/ou "
-"hífen ('-')."
+"O nome do relatório deve conter somente letras, dígitos, sublinhado ('_') e/"
+"ouhífen ('-')."
msgid "Pending..."
msgstr "Pendente..."
msgid "Report name is the same as the original one."
-msgstr "Nome do relatório é o mesmo que o original."
+msgstr "O nome do relatório é o mesmo do original."
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
"cannot be undone. Would you like to continue?"
msgstr ""
-"A máquina virtual vai ser removida com todos seus discos. Essa operação é "
-"irreversível. Deseja continuar?"
+"Isso excluirá a máquina virtual e seus discos virtuais. Esta operação não é "
+"possível desfazer. Deseja continuar?"
msgid "Power off Confirmation"
-msgstr "Confirmação de desligamento forçado"
+msgstr "Confirmação de Desligamento"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
"cache in the guest. Would you like to continue?"
msgstr ""
-"Essa ação pode produzir resultados não desejáveis, como por exemplo cache de "
-"disco não-atualizado no guest. Deseja continuar?"
+"Essa ação pode produzir resultados indesejáveis, por exemplo, cache de disco "
+"não alinhado armazenar em cache no convidado.Deseja continuar?"
msgid "Reset Confirmation"
-msgstr "Confirmação de reinicialização"
+msgstr "Confirmação de Reconfiguração"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
"Would you like to continue?"
msgstr ""
-"Existe um risco de perda de dados causado pela reinicialização sem o "
-"desligamento do sistema operacional do guest. Deseja continuar?"
+"Há um risco de perda de dados causado por reconfigurar sem o encerramento do "
+"sistema operacional guest. Deseja continuar?"
msgid "Shut Down Confirmation"
-msgstr "Confirmação de desligamento"
+msgstr "Confirmação de Encerramento"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
msgstr ""
-"O sistema operacional do guest pode ignorar essa requisição. Deseja "
-"continuar?"
+"Note que o S.O. convidado pode ignorar essa solicitação. Deseja continuar?"
msgid "Virtual Machine delete Confirmation"
-msgstr "Confirmação de Remoção da Máquina Virtual"
+msgstr "Confirmação de exclusão de máquina virtual"
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
msgstr ""
-"Essa máquina virtual não é persistente. O desligamento irá removê-la. Deseja "
-"continuar?"
+"Essa máquina virtual não é persistente. O desligamento irá excluí-lo. "
+"Continuar?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
"default storage pool. The same will happen when the target pool does not "
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
-"Quando o guest de destino tiver volumes SCSI ou iSCSI, eles serão clonados "
-"no storage pool padrão. O mesmo vai acontecer quando o pool de destino não "
-"tiver espaço suficiente para clonar os volumes. Você deseja continuar?"
+"Quando o convidado de destino tiver volumes SCSI ou iSCSI, eles serão "
+"clonados no conjunto de armazenamentos padrão.O mesmo ocorrerá quando o "
+"conjunto de destino nãotiver espaço suficiente para clonar os volumes. "
+"Deseja continuar?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
msgstr ""
-"Esse CDROM será desconectado permanentemente e você pode reconectá-lo. "
-"Deseja continuar a remoção? "
+"Este CD-ROM será removido permanentemente e é possível reconectá-lo. "
+"Continuar a removê-lo?"
msgid "Attaching..."
-msgstr "Adicionando..."
+msgstr "Conectando..."
msgid "Replacing..."
msgstr "Substituindo..."
msgid "Successfully attached!"
-msgstr "Adicionado com sucesso!"
+msgstr "Conectado com sucesso!"
msgid "Successfully replaced!"
msgstr "Substituído com sucesso!"
@@ -1845,23 +1899,23 @@ msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
msgstr ""
-"Esse disco será desconectado permanentemente e você pode reconectá-lo. "
-"Deseja continuar a remoção? "
+"Este disco será removido permanentemente e é possível reconectá-lo. "
+"Continuar a remoção?"
msgid "interface:"
msgstr "interface:"
msgid "address:"
-msgstr "endereço:"
+msgstr "endereço: "
msgid "link_type:"
-msgstr "tipo do link:"
+msgstr "link_type:"
msgid "block:"
msgstr "bloco:"
msgid "drive_type:"
-msgstr "tipo do drive:"
+msgstr "drive_type:"
msgid "model:"
msgstr "modelo:"
@@ -1870,7 +1924,7 @@ msgid "Affected devices:"
msgstr "Dispositivos afetados:"
msgid "The VLAN id must be between 1 and 4094."
-msgstr "ID da VLAN deve ser um número entre 1 e 4094."
+msgstr "O ID de VLAN deve ser entre 1 e 4094."
msgid "unavailable"
msgstr "indisponível"
@@ -1879,8 +1933,8 @@ msgid ""
"This action will interrupt network connectivity for any virtual machine that "
"depend on this network."
msgstr ""
-"Esta ação irá interromper a conectividade da rede para qualquer máquina "
-"virtual que depende dessa rede."
+"Esta ação interromperá a conectividade de rede para qualquer máquina virtual "
+"que depender desta rede."
msgid "Create a network"
msgstr "Criar uma rede"
@@ -1889,51 +1943,54 @@ msgid ""
"This network is not persistent. Instead of stop, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Essa rede não é persistente. Ao invés de parar, essa ação irá removê-la "
-"permantemente. Deseja continuar?"
+"Essa rede não é persistente. Em vez de parar, essa ação o excluirá "
+"permanentemente. Deseja continuar?"
msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
+"A identificação de VLAN em ponte pode não funcionar bem com o NetworkManager "
+"ativado. Você deve considerar desativá-lo."
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
-msgstr "O storage pool vai ser permanentemente removido. Deseja continuar?"
+msgstr ""
+"Isso excluirá permanentemente o conjunto de armazenamentos. Deseja continuar?"
msgid "This storage pool is empty."
-msgstr "Esse storage pool está vazio."
+msgstr "Este storage pool está vazio."
msgid ""
"It will format your disk and you will loose any data in there, are you sure "
"to continue? "
msgstr ""
-"Isso formatará seu disco e você perderá toda informação, você tem certeza "
-"que quer continuar?"
+"Isso formatará seu disco e você perderá quaisquer dados contidos nele, tem "
+"certeza de que deseja continuar? "
msgid "SCSI Fibre Channel"
-msgstr "SCSI Fibre Channel"
+msgstr "Fibre Channel SCSI"
msgid "No SCSI adapters found."
-msgstr "Nenhum adaptador SCSI encontrado."
+msgstr "Nenhum adaptador SCSI localizado."
msgid "Loading iSCSI targets..."
-msgstr "Carregando iSCSI targets..."
+msgstr "Carregando destinos iSCSI..."
msgid "No iSCSI found. Please input one."
-msgstr "Nenhum iSCSI encontrado. Por favor, forneça um."
+msgstr "Nenhum iSCSI localizado. Insira um."
msgid "Failed to load iSCSI targets."
-msgstr "Erro ao carregar iSCSI targets."
+msgstr "Falha ao carregar destinos iSCSI."
msgid "The storage pool name can not be blank."
-msgstr "O nome do storage pool não pode ser vazio."
+msgstr "O nome do storage pool não pode ser em branco."
msgid "The storage pool path can not be blank."
-msgstr "O caminho do storage pool não pode ser vazio."
+msgstr "O caminho do storage pool não pode ser em branco."
msgid "NFS server mount path can not be blank."
-msgstr "Caminho de montagem do servidor de NFS não pode ser vazio."
+msgstr "O caminho de montagem do servidor NFS não pode ser em branco."
msgid "Invalid NFS mount path."
msgstr "Caminho de montagem do NFS inválido."
@@ -1942,42 +1999,43 @@ msgid "No logical device selected."
msgstr "Nenhum dispositivo lógico selecionado."
msgid "The iSCSI target can not be blank."
-msgstr "O alvo iSCSI não pode ser vazio."
+msgstr "O destino iSCSI não pode ser em branco."
msgid "Server name can not be blank."
-msgstr "Nome do servidor não pode ser vazio."
+msgstr "O nome do servidor não pode ser em branco."
msgid "This is not a valid Server Name or IP. Please, modify it."
-msgstr "Este não é um nome ou IP de servidor válido. Por favor, modifique-o."
+msgstr "Este não é um Nome de Servidor ou IP válido. Modifique-o."
msgid "Looking for available partitions ..."
-msgstr "Procurando por partições disponíveis ..."
+msgstr "Procurando partições disponíveis..."
msgid "No available partitions found."
-msgstr "Nenhuma partição disponível encontrada."
+msgstr "Nenhuma partição disponível localizada."
msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"O storage pool não é persistente. Ao invés de desativar, essa ação vai "
-"removê-lo permanentemente. Deseja continuar?"
+"Este storage pool não é persistente. Em vez de desativar, esta ação o "
+"excluirá permanentemente. Deseja continuar?"
msgid "Unable to retrieve partitions information."
-msgstr "Não foi possível recuperar as informações das partições."
+msgstr "Não é possível recuperar as informações da partição. "
msgid "In progress..."
-msgstr "Em progresso..."
+msgstr "Em andamento..."
msgid "Failed!"
msgstr "Falhou!"
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
msgstr ""
-"Caminho do CDROM precisa ser um caminho local válido e não pode ser vazio."
+"O caminho CDROM precisa ser um caminho local/remote válido e não pode estar "
+"em branco."
msgid "Disk pool or volume cannot be blank."
-msgstr "Pool ou volume do disco não pode ser vazio."
+msgstr "O volume ou conjunto de discos não pode estar em branco."
msgid "Peers"
msgstr "Peers"
@@ -1986,7 +2044,7 @@ msgid "Searching"
msgstr "Procurando"
msgid "No peers found."
-msgstr "Nenhum peer encontrado."
+msgstr "Nenhum peer localizado."
msgid "Help"
msgstr "Ajuda"
@@ -1995,25 +2053,25 @@ msgid "About"
msgstr "Sobre"
msgid "Log out"
-msgstr "Sair"
+msgstr "Efetuar logout"
msgid "Version:"
msgstr "Versão:"
msgid "Session timeout, please re-login."
-msgstr "Fim do limite do tempo da sessão, por favor se autentique novamente."
+msgstr "A sessão atingiu o tempo limite, efetue login novamente."
msgid "User Name"
-msgstr "Usuário"
+msgstr "Nome de usuário"
msgid "Password"
msgstr "Senha"
msgid "Generate a New Debug Report"
-msgstr "Gerar um novo Relatório de Debug"
+msgstr "Gerar um novo relatório de depuração"
msgid "Report Name"
-msgstr "Nome do Relatório"
+msgstr "Nome do relatório"
msgid ""
"The name used to identify the report. If omitted, a name will be chosen "
@@ -2021,11 +2079,11 @@ msgid ""
"and hyphen (\"-\")."
msgstr ""
"O nome usado para identificar o relatório. Se omitido, um nome será "
-"escolhido baseado no horário atual. O nome pode conter: letras, números, "
-"underscore ('_') e hífen ('-')."
+"escolhido com base no tempo atual. O nome pode conter: letras, dígitos, "
+"sublinhado (\"_\") e hífen (\"-\")."
msgid "Rename a Debug Report"
-msgstr "Renomear um Relatório de Debug"
+msgstr "Renomeie um relatório de depuração"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
@@ -2038,13 +2096,13 @@ msgid "Submit"
msgstr "Enviar"
msgid "Add a Repository"
-msgstr "Adicionar um Repositório"
+msgstr "Incluir um repositório"
msgid "Identifier"
msgstr "Identificador"
msgid "Single word, unique identifier for the repository."
-msgstr "Uma única palavra, identificador único para o repositório."
+msgstr "Identificador exclusivo com uma única palavra para o repositório."
msgid "Textual name for the repository."
msgstr "Nome textual para o repositório."
@@ -2053,31 +2111,32 @@ msgid "URL"
msgstr "URL"
msgid "Required Field"
-msgstr "Campo Obrigatório"
+msgstr "Campo obrigatório"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
-msgstr "URL para o repositório. Protocolos suportados são http, ftp e file."
+msgstr ""
+"URL para o repositório. Os protocolos suportados são http, ftp e arquivo."
msgid "Repository is a mirror"
-msgstr "Repositório é um mirror"
+msgstr "O repositório é um espelho"
msgid "Distribution"
msgstr "Distribuição"
msgid "Distribution of the DEB repository."
-msgstr "Distribuição para o repositório DEB."
+msgstr "Distribuição do repositório DEB."
msgid "Components"
msgstr "Componentes"
msgid "List of components in DEB repository."
-msgstr "Lista de componentes para o repositório DEB."
+msgstr "Lista de componentes no repositório DEB."
msgid "Edit Repository"
-msgstr "Editar Repositório"
+msgstr "Editar repositório"
msgid "Mirror List URL"
-msgstr "URL para a lista de mirror"
+msgstr "URL da lista de espelho"
msgid "Yes"
msgstr "Sim"
@@ -2086,59 +2145,62 @@ msgid "No"
msgstr "Não"
msgid "Add a Volume to Storage Pool"
-msgstr "Adicionar um volume ao Storage Pool"
+msgstr "Incluir um volume no conjunto de armazenamentos"
msgid "Fetch from remote URL"
-msgstr "Fazer download de uma URL remota"
+msgstr "Buscar a partir da URL remota"
msgid "Enter the remote URL here."
-msgstr "Digite a URL remota aqui."
+msgstr "Inserir a URL remota aqui."
msgid "Upload a file"
msgstr "Fazer upload de um arquivo"
msgid "Choose the file you want to upload."
-msgstr "Escolha o arquivo que você quer fazer upload."
+msgstr "Escolher o arquivo do qual você deseja fazer upload."
msgid "Define a New Storage Pool"
-msgstr "Definir novo Storage Pool"
+msgstr "Definir um novo storage pool"
msgid "Storage Pool Name"
-msgstr "Nome do Storage Pool"
+msgstr "Nome do storage pool"
msgid ""
"The name used to identify the storage pools, and it should not be empty."
-msgstr "O nome usado para identificar o storage pool e não deve ser vazio."
+msgstr ""
+"O nome usado para identificar os conjuntos de armazenamentos e não deve ser "
+"vazio."
msgid "Storage Pool Type"
-msgstr "Tipo do Storage Pool"
+msgstr "Tipo do storage pool"
msgid "Storage Path"
-msgstr "Caminho do storage"
+msgstr "Caminho do armazenamento"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
msgstr ""
-"O caminho do Storage Pool. Cada Storage Pool deve ter um caminho único."
+"O caminho do storage pool. Cada storage pool deve ter um caminho exclusivo."
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
"your system."
msgstr ""
-"O Kimchi vai tentar criar o diretório se ainda não existir no seu sistema."
+"Kimchi tentará criar o diretório quando ele não existir em seu sistema."
msgid "NFS Server IP"
msgstr "IP do servidor NFS"
msgid "NFS server IP or hostname. It can be input or chosen from history."
msgstr ""
-"IP ou hostname do servidor NFS. Pode ser inserido ou escolhido do histórico."
+"IP ou nome do servidor NFS. Ele pode ser inserido ou escolhido a partir do "
+"histórico."
msgid "NFS Path"
-msgstr "Caminho do NFS"
+msgstr "Caminho de NFS"
msgid "The NFS exported path on NFS server."
-msgstr "O caminho exportado do servidor NFS."
+msgstr "O caminho exportado de NFS no servidor NFS."
msgid "Device path"
msgstr "Caminho do dispositivo"
@@ -2147,7 +2209,7 @@ msgid "iSCSI Server"
msgstr "Servidor iSCSI"
msgid "iSCSI server IP or hostname. It should not be empty."
-msgstr "IP ou hostname do servidor iSCSI. Não deve ser vazio."
+msgstr "IP ou nome do servidor iSCSI. Ele não deve ser vazio."
msgid "Server"
msgstr "Servidor"
@@ -2156,46 +2218,46 @@ msgid "Port"
msgstr "Porta"
msgid "Target"
-msgstr "Alvo"
+msgstr "Destino"
msgid "The iSCSI target on iSCSI server"
-msgstr "O alvo iSCSI no servidor iSCSI"
+msgstr "O destino iSCSI no servidor iSCSI"
msgid "Add iSCSI Authentication"
-msgstr "Adicionar as credenciais do iSCSI"
+msgstr "Incluir autenticação de iSCSI"
msgid "iSCSI Authentication"
-msgstr "Credenciais do iSCSI"
+msgstr "Autenticação de iSCSI"
msgid "SCSI Adapter"
msgstr "Adaptador SCSI"
msgid "Please, wait..."
-msgstr "Por favor, aguarde..."
+msgstr "Aguarde..."
msgid "Add Template"
-msgstr "Adicionar Modelo"
+msgstr "Incluir modelo"
msgid "Where is the source media for this template? "
-msgstr "Onde está a mídia de origem desse modelo? "
+msgstr "Onde está a mídia de origem para este modelo? "
msgid "Local ISO Image"
-msgstr "Imagem ISO Local"
+msgstr "Imagem ISO local"
msgid "Local Image File"
-msgstr "Arquivo de Imagem Local"
+msgstr "Arquivo da imagem local"
msgid "Remote ISO Image"
-msgstr "Imagem ISO Remota"
+msgstr "Imagem ISO remota"
msgid "Search ISOs"
msgstr "Procurar ISOs"
msgid "The following ISOs are available:"
-msgstr "As seguintes ISOs estão disponíveis:"
+msgstr "Os ISOs a seguir estão disponíveis:"
msgid "OS: "
-msgstr "Sistema Operacional: "
+msgstr "S.O.: "
msgid "Version: "
msgstr "Versão: "
@@ -2204,25 +2266,25 @@ msgid "Size: "
msgstr "Tamanho: "
msgid "Search more ISOs"
-msgstr "Procurar por mais ISOs"
+msgstr "Procurar mais ISOs"
msgid "Create Templates from Selected ISO"
-msgstr "Criar Modelos a partir das ISOs selecionadas"
+msgstr "Criar modelos a partir do ISO selecionado"
msgid "I want to use a specific ISO file"
-msgstr "Eu quero usar um arquivo ISO específico"
+msgstr "Eu desejo usar um arquivo ISO específico"
msgid "Loading default remote ISOs ..."
-msgstr "Carregando ISOs remotas ..."
+msgstr "Carregando ISOs remotos padrão..."
msgid "Arch: "
-msgstr "Arquitetura: "
+msgstr "Arq.: "
msgid "I want to use a custom URL"
-msgstr "Eu quero usar uma URL personalizada"
+msgstr "Eu desejo usar uma URL customizada"
msgid "Edit Template"
-msgstr "Editar Modelo"
+msgstr "Editar modelo"
msgid "Processor"
msgstr "Processador"
@@ -2231,7 +2293,7 @@ msgid "CDROM"
msgstr "CD-ROM"
msgid "Image File"
-msgstr "Arquivo de imagem"
+msgstr "Arquivo de imagem "
msgid "Graphics"
msgstr "Gráficos"
@@ -2240,37 +2302,37 @@ msgid "Disk(GB)"
msgstr "Disco (GB)"
msgid "Disk Format"
-msgstr ""
+msgstr "Formato do disco"
msgid "CPU Number"
-msgstr "Quantidade de CPUs"
+msgstr "Número de CPU"
msgid "Manually set CPU topology"
-msgstr "Configurar manualmente a topologia de CPU"
+msgstr "Configurar manualmente a topologia da CPU"
msgid "Cores"
-msgstr "Cores"
+msgstr "Núcleos"
msgid "Threads"
-msgstr "Threads"
+msgstr "Encadeamentos"
msgid "CPU"
msgstr "CPU"
msgid "Disk I/O"
-msgstr "Disco E/S"
+msgstr "E/S de disco"
msgid "Network I/O"
-msgstr "Rede E/S"
+msgstr "E/S de Rede"
msgid "Livetile"
-msgstr "Tela ao vivo"
+msgstr "Livetile"
msgid "No guests found."
-msgstr "Nenhum guest encontrado."
+msgstr "Nenhum convidado localizado."
msgid "Shut down"
-msgstr "Desligar"
+msgstr "Encerrar"
msgid "Restart"
msgstr "Reiniciar"
@@ -2279,10 +2341,10 @@ msgid "Basic Information"
msgstr "Informações básicas"
msgid "OS Distro"
-msgstr "Distribuição"
+msgstr "Distribuição do S.O."
msgid "OS Code Name"
-msgstr "Nome-código do sistema operacional"
+msgstr "Nome-código do S.O."
msgid "CPU(s)"
msgstr "CPU(s)"
@@ -2300,44 +2362,43 @@ msgid "State"
msgstr "Estado"
msgid "Network Type"
-msgstr "Tipo da rede"
+msgstr "Tipo de rede"
msgid "Address Space"
msgstr "Espaço de endereço"
msgid "Name should not contain '/' and '\"'."
-msgstr "O nome não deve conter '/' and '\"'."
+msgstr "O nome não deve conter '/' e '\"'."
msgid "Isolated: no external network connection"
-msgstr "Isolada: nenhuma conexão externa"
+msgstr "Isolado: nenhuma conexão de rede externa"
msgid "NAT: outbound physical network connection only"
msgstr "NAT: somente conexão de rede física de saída"
msgid "Bridged: Virtual machines are connected to physical network directly"
-msgstr ""
-"Bridged: Máquinas virtuais estão conectadas diretamente com a rede física"
+msgstr "bridged: As máquinas virtuais são conectadas à rede física diretamente"
msgid "(No interfaces found)"
-msgstr "(Nenhuma interface encontrada)"
+msgstr "(Nenhuma interface localizada)"
msgid "Destination"
msgstr "Destino"
msgid "Enable VLAN"
-msgstr "Habilitar VLAN"
+msgstr "Ativar VLAN"
msgid "VLAN ID"
-msgstr "ID da VLAN"
+msgstr "ID de VLAN"
msgid "Stop"
msgstr "Parar"
msgid "%Used"
-msgstr ""
+msgstr "%Usado"
msgid "Location"
-msgstr "Localização"
+msgstr "Local"
msgid "Capacity"
msgstr "Capacidade"
@@ -2358,10 +2419,10 @@ msgid "Activate"
msgstr "Ativar"
msgid "Add Volume"
-msgstr "Adicionar volume"
+msgstr "Incluir volume"
msgid "Extend"
-msgstr "Aumentar"
+msgstr "Estender"
msgid "Undefine"
msgstr "Indefinir"
@@ -2373,4 +2434,4 @@ msgid "Allocation"
msgstr "Alocação"
msgid "No templates found."
-msgstr "Nenhum modelo encontrado."
+msgstr "Nenhum modelo localizado."
diff --git a/po/ru_RU.po b/po/ru_RU.po
index b2d4586..804ff61 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -6,67 +6,57 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-06-24 09:39-0300\n"
+"POT-Creation-Date: 2015-08-21 09:52-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
-"Language: en_US\n"
+"Language: ru_RU\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#, python-format
msgid "Unknown parameter %(value)s"
-msgstr ""
-"Неизвестный параметр %(value)s"
+msgstr "Неизвестный параметр %(value)s"
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr ""
-"Удаление запрещено для %(resource)s"
+msgstr "Удаление запрещено для %(resource)s"
#, python-format
msgid "%(resource)s does not implement update method"
-msgstr ""
-"%(resource)s не имеет реализации метода обновления"
+msgstr "%(resource)s не имеет реализации метода обновления"
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr ""
-"Создание запрещено для %(resource)s"
+msgstr "Создание запрещено для %(resource)s"
msgid "Unable to parse JSON request"
-msgstr ""
-"Ошибка анализа запроса JSON"
+msgstr "Ошибка анализа запроса JSON"
msgid "This API only supports JSON"
-msgstr ""
-"Эта функция API поддерживает только JSON"
+msgstr "Эта функция API поддерживает только JSON"
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
-msgstr ""
-"Параметры не соответствуют требованиям схемы: %(err)s"
+msgstr "Параметры не соответствуют требованиям схемы: %(err)s"
msgid "You don't have permission to perform this operation."
-msgstr ""
-"Недостаточно прав доступа для выполнения этой операции."
+msgstr "Недостаточно прав доступа для выполнения этой операции."
msgid "Datastore is not initiated in the model object."
-msgstr ""
-"Хранилище данных в объекте модели не инициализировано."
+msgstr "Хранилище данных в объекте модели не инициализировано."
#, python-format
msgid "Unable to start task due error: %(err)s"
-msgstr ""
-"Не удалось запустить задачу из-за ошибки: %(err)s"
+msgstr "Не удалось запустить задачу из-за ошибки: %(err)s"
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
-msgstr ""
-"Во время выполнения задачи %(task)s истек тайм-аут (%(seconds)s с)."
+msgstr "Во время выполнения задачи %(task)s истек тайм-аут (%(seconds)s с)."
#, python-format
msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
@@ -74,50 +64,44 @@ msgstr ""
"Сбой идентификации для пользователя %(username)s. [Код ошибки: %(code)s]"
msgid "You are not authorized to access Kimchi"
-msgstr ""
-"Нет прав доступа к Kimchi"
+msgstr "Нет прав доступа к Kimchi"
#, python-format
msgid "Specify %(item)s to login into Kimchi"
-msgstr ""
-"Укажите %(item)s для входа в Kimchi"
+msgstr "Укажите %(item)s для входа в Kimchi"
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
-msgstr ""
-"Пользователь %(user_id)s не найден с указанными параметрами LDAP."
+msgstr "Пользователь %(user_id)s не найден с указанными параметрами LDAP."
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
-msgstr ""
-"Недопустимая конфигурация LDAP: %(item)s : %(value)s"
+msgstr "Недопустимая конфигурация LDAP: %(item)s : %(value)s"
msgid "Unknown \"_cap\" specified"
-msgstr ""
-"Указано неизвестное значение \"_cap\""
+msgstr "Указано неизвестное значение \"_cap\""
msgid "\"_passthrough\" should be \"true\" or \"false\""
-msgstr ""
-"Значение \"_passthrough\" должно быть \"true\" или \"false\""
+msgstr "Значение \"_passthrough\" должно быть \"true\" или \"false\""
msgid "\"_passthrough_affected_by\" should be a device name string"
msgstr ""
"Значение \"_passthrough_affected_by\" должно быть строкой с именем устройства"
+msgid "\"_available_only\" should be \"true\" or \"false\""
+msgstr "Значение \"_available_only\" должно быть \"true\" или \"false\""
+
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
-msgstr ""
-"Ошибка получения блочных устройств. Сведения: %(err)s"
+msgstr "Ошибка получения блочных устройств. Сведения: %(err)s"
#, python-format
msgid "Error while getting block device information for %(device)s."
-msgstr ""
-"Ошибка получения информации о блочных устройствах для %(device)s."
+msgstr "Ошибка получения информации о блочных устройствах для %(device)s."
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr ""
-"Не найден файл варианта ОС: %(filename)s"
+msgstr "Не найден файл варианта ОС: %(filename)s"
#, python-format
msgid ""
@@ -127,23 +111,19 @@ msgstr ""
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
-msgstr ""
-"Не удалось войти в целевой %(portal)s хоста iSCSI. Сведения: %(err)s"
+msgstr "Не удалось войти в целевой %(portal)s хоста iSCSI. Сведения: %(err)s"
#, python-format
msgid "Unable to login to iSCSI host %(host)s target %(target)s"
-msgstr ""
-"Не удалось войти в целевой %(target)s хоста %(host)s iSCSI"
+msgstr "Не удалось войти в целевой %(target)s хоста %(host)s iSCSI"
#, python-format
msgid "Unable to find ISO file %(filename)s"
-msgstr ""
-"Не найден файл ISO %(filename)s"
+msgstr "Не найден файл ISO %(filename)s"
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr ""
-"Файл ISO %(filename)s не загрузочный"
+msgstr "Файл ISO %(filename)s не загрузочный"
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
@@ -152,23 +132,19 @@ msgstr ""
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
-msgstr ""
-"Недопустимая запись проверки El Torito в образе ISO %(filename)s"
+msgstr "Недопустимая запись проверки El Torito в образе ISO %(filename)s"
#, python-format
msgid "Invalid El Torito boot indicator in ISO %(filename)s"
-msgstr ""
-"Недопустимый индикатор загрузки El Torito в образе ISO %(filename)s"
+msgstr "Недопустимый индикатор загрузки El Torito в образе ISO %(filename)s"
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
-msgstr ""
-"Неожиданный тип главного тома в образе ISO %(filename)s"
+msgstr "Неожиданный тип главного тома в образе ISO %(filename)s"
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
-msgstr ""
-"Неверный формат дескриптора тома в образе ISO %(filename)s"
+msgstr "Неверный формат дескриптора тома в образе ISO %(filename)s"
#, python-format
msgid ""
@@ -178,42 +154,37 @@ msgid ""
"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
"'path_to_iso'.Details: %(err)s"
msgstr ""
-"У гипервизора нет прав доступа для использования этого образа ISO %(filename)s."
-"Переместите его в каталог /var/lib/libvirt, добавьте разрешение на поиск "
-"в списки контроля доступа для пользователя %(user)s, если это возможно, добавьте "
-"%(user)s в группу пути к образу ISO или (не рекомендуется) выполните команду 'chmod -R o+x"
-"путь-к-iso'. Сведения: %(err)s"
+"У гипервизора нет прав доступа для использования этого образа ISO "
+"%(filename)s.Переместите его в каталог /var/lib/libvirt, добавьте разрешение "
+"на поиск в списки контроля доступа для пользователя %(user)s, если это "
+"возможно, добавьте %(user)s в группу пути к образу ISO или (не "
+"рекомендуется) выполните команду 'chmod -R o+xпуть-к-iso'. Сведения: %(err)s"
msgid "An error occurred when probing image OS information."
-msgstr ""
-"Ошибка проверки информации об ОС образа."
+msgstr "Ошибка проверки информации об ОС образа."
msgid "No OS information found in given image."
-msgstr ""
-"В данном образе не найдена информация об ОС."
+msgstr "В данном образе не найдена информация об ОС."
#, python-format
msgid "Unable to read image file %(filename)s"
-msgstr ""
-"Не удалось прочитать файл образа %(filename)s"
+msgstr "Не удалось прочитать файл образа %(filename)s"
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
msgstr ""
-"Файл образа должен существовать в системе. Имя файла %(filename)s не является допустимым "
-"вводом."
+"Файл образа должен существовать в системе. Имя файла %(filename)s не "
+"является допустимым вводом."
#, python-format
msgid "Virtual machine %(name)s already exists"
-msgstr ""
-"Виртуальная машина %(name)s уже существует"
+msgstr "Виртуальная машина %(name)s уже существует"
#, python-format
msgid "Virtual machine %(name)s does not exist"
-msgstr ""
-"Виртуальная машина %(name)s не существует"
+msgstr "Виртуальная машина %(name)s не существует"
#, python-format
msgid ""
@@ -226,36 +197,31 @@ msgstr ""
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
msgstr ""
-"Не удалось получить снимок экрана для остановленной виртуальной машины %(name)s"
+"Не удалось получить снимок экрана для остановленной виртуальной машины "
+"%(name)s"
msgid "Remote ISO image is not supported by this server."
-msgstr ""
-"Удаленный образ ISO не поддерживается этим сервером."
+msgstr "Удаленный образ ISO не поддерживается этим сервером."
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
-msgstr ""
-"Снимки экрана не поддерживаются в виртуальной машине %(name)s"
+msgstr "Снимки экрана не поддерживаются в виртуальной машине %(name)s"
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось создать виртуальную машину %(name)s. Сведения: %(err)s"
+msgstr "Не удалось создать виртуальную машину %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось обновить виртуальную машину %(name)s. Сведения: %(err)s"
+msgstr "Не удалось обновить виртуальную машину %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось получить виртуальную машину %(name)s. Сведения: %(err)s"
+msgstr "Не удалось получить виртуальную машину %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to connect to powered off virtual machine %(name)s."
-msgstr ""
-"Не удалось подключиться к выключенной виртуальной машине %(name)s."
+msgstr "Не удалось подключиться к выключенной виртуальной машине %(name)s."
msgid "Virtual machine name must be a string without slashes (/)"
msgstr ""
@@ -263,71 +229,57 @@ msgstr ""
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
-msgstr ""
-"Для виртуальной машины указан недопустимый URI шаблона %(value)s"
+msgstr "Для виртуальной машины указан недопустимый URI шаблона %(value)s"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for virtual machine"
-msgstr ""
-"Для виртуальной машины указан недопустимый URI пула памяти %(value)s"
+msgstr "Для виртуальной машины указан недопустимый URI пула памяти %(value)s"
msgid "Supported virtual machine graphics are Spice or VNC"
-msgstr ""
-"Поддерживаемые графические подсистемы виртуальной машины: Spice, VNC"
+msgstr "Поддерживаемые графические подсистемы виртуальной машины: Spice, VNC"
msgid "Graphics address to listen on must be IPv4 or IPv6"
msgstr ""
"Адрес приема запросов для графической подсистемы должен быть IPv4 или IPv6"
msgid "Specify a template to create a virtual machine from"
-msgstr ""
-"Укажите шаблон для создания виртуальной машины"
+msgstr "Укажите шаблон для создания виртуальной машины"
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось запустить виртуальную машину %(name)s. Сведения: %(err)s"
+msgstr "Не удалось запустить виртуальную машину %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось выключить виртуальную машину %(name)s. Сведения: %(err)s"
+msgstr "Не удалось выключить виртуальную машину %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось удалить виртуальную машину %(name)s. Сведения: %(err)s"
+msgstr "Не удалось удалить виртуальную машину %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось сбросить виртуальную машину %(name)s. Сведения: %(err)s"
+msgstr "Не удалось сбросить виртуальную машину %(name)s. Сведения: %(err)s"
msgid "User name list must be an array"
-msgstr ""
-"Список имен пользователей должен быть массивом"
+msgstr "Список имен пользователей должен быть массивом"
msgid "User name must be a string"
-msgstr ""
-"Имя пользователя должно быть строкой"
+msgstr "Имя пользователя должно быть строкой"
msgid "Group name list must be an array"
-msgstr ""
-"Список имен групп должен быть массивом"
+msgstr "Список имен групп должен быть массивом"
msgid "Group name must be a string"
-msgstr ""
-"Имя группы должно быть строкой"
+msgstr "Имя группы должно быть строкой"
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr ""
-"Следующие пользователи не существуют: %(users)s"
+msgstr "Следующие пользователи не существуют: %(users)s"
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr ""
-"Следующие группы не существуют: %(groups)s"
+msgstr "Следующие группы не существуют: %(groups)s"
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
@@ -338,15 +290,14 @@ msgstr ""
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Не удалось получить доступ к метаданным виртуальной машины %(name)s. Сведения: %(err)s"
+"Не удалось получить доступ к метаданным виртуальной машины %(name)s. "
+"Сведения: %(err)s"
msgid "The guest console password must be a string."
-msgstr ""
-"Пароль консоли гостевой системы должен быть строкой."
+msgstr "Пароль консоли гостевой системы должен быть строкой."
msgid "The life time for the guest console password must be a number."
-msgstr ""
-"Срок действия пароля консоли гостевой системы должен быть числом."
+msgstr "Срок действия пароля консоли гостевой системы должен быть числом."
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
@@ -365,13 +316,13 @@ msgstr ""
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
-msgstr ""
-"Недопустимая операция для непостоянной виртуальной машины %(name)s"
+msgstr "Недопустимая операция для непостоянной виртуальной машины %(name)s"
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
msgstr ""
-"Невозможно приостановить виртуальную машину '%(name)s', поскольку она не работает."
+"Невозможно приостановить виртуальную машину '%(name)s', поскольку она не "
+"работает."
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
@@ -381,12 +332,14 @@ msgstr ""
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
msgstr ""
-"Невозможно возобновить выполнение виртуальной машины '%(name)s', поскольку она не приостановлена."
+"Невозможно возобновить выполнение виртуальной машины '%(name)s', поскольку "
+"она не приостановлена."
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
msgstr ""
-"Не удалось возобновить выполнение виртуальной машины '%(name)s'. Сведения: %(err)s"
+"Не удалось возобновить выполнение виртуальной машины '%(name)s'. Сведения: "
+"%(err)s"
msgid "Memory assigned is higher then the maximum allowed in the host."
msgstr ""
@@ -397,41 +350,40 @@ msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
-"Виртуальная машина '%(name)s' не поддерживает оперативное изменение объема памяти. Измените объем памяти, "
-"когда машина отключена, чтобы включить эту функцию."
+"Виртуальная машина '%(name)s' не поддерживает оперативное изменение объема "
+"памяти. Измените объем памяти, когда машина отключена, чтобы включить эту "
+"функцию."
msgid "Only increase memory is allowed in active VMs"
-msgstr ""
-"В активных виртуальных машинах объем памяти можно только увеличивать"
+msgstr "В активных виртуальных машинах объем памяти можно только увеличивать"
msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
msgstr ""
-"Для оперативного изменения объема памяти новое значение объема памяти должно быть равно текущему объему памяти плюс "
-"величина, кратная 1024 МиБ"
+"Для оперативного изменения объема памяти новое значение объема памяти должно "
+"быть равно текущему объему памяти плюс величина, кратная 1024 МиБ"
msgid "There are not enough free slots of 1024 Mib in the guest."
-msgstr ""
-"Недостаточно свободных разъемов размером 1024 МиБ в гостевой системе."
+msgstr "Недостаточно свободных разъемов размером 1024 МиБ в гостевой системе."
msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
msgstr ""
-"Версия библиотеки libvirt хоста не поддерживает устройства памяти. Версия библиотеки libvirt должна быть >= "
-"1.2.14"
+"Версия библиотеки libvirt хоста не поддерживает устройства памяти. Версия "
+"библиотеки libvirt должна быть >= 1.2.14"
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
-msgstr ""
-"Ошибка подключения устройства памяти. Сведения: %(error)s"
+msgstr "Ошибка подключения устройства памяти. Сведения: %(error)s"
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
-"Виртуальная машина %(vmid)s не содержит непосредственно присвоенного устройства хоста %(dev_name)s."
+"Виртуальная машина %(vmid)s не содержит непосредственно присвоенного "
+"устройства хоста %(dev_name)s."
#, python-format
msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
@@ -445,28 +397,26 @@ msgid ""
"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
"iommu=1."
msgstr ""
-"Не найдены группы IOMMU. Для правильного функционирования сквозной передачи PCI хоста требуется группа IOMMU. "
-"В BIOS включите поддержку Intel VT-d или AMD IOMMU и проверьте, "
-"скомпилировано ли ядро ОС с поддержкой IOMMU. Для процессора Intel добавьте intel_iommu=on "
-"в параметры ядра в файле /boot/grub2/grub.conf. Для процессора AMD добавьте iommu=pt "
-"iommu=1."
+"Не найдены группы IOMMU. Для правильного функционирования сквозной передачи "
+"PCI хоста требуется группа IOMMU. В BIOS включите поддержку Intel VT-d или "
+"AMD IOMMU и проверьте, скомпилировано ли ядро ОС с поддержкой IOMMU. Для "
+"процессора Intel добавьте intel_iommu=on в параметры ядра в файле /boot/"
+"grub2/grub.conf. Для процессора AMD добавьте iommu=pt iommu=1."
msgid "\"name\" should be a device name string"
-msgstr ""
-"Значение \"name\" должно быть строкой с именем устройства"
+msgstr "Значение \"name\" должно быть строкой с именем устройства"
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
msgstr ""
-"Возможно, устройство %(name)s используется хостом. Его невозможно подключить к "
-"гостевой системе."
+"Возможно, устройство %(name)s используется хостом. Его невозможно подключить "
+"к гостевой системе."
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
-msgstr ""
-"Интерфейс %(iface)s не существует в виртуальной машине %(name)s"
+msgstr "Интерфейс %(iface)s не существует в виртуальной машине %(name)s"
#, python-format
msgid ""
@@ -475,241 +425,201 @@ msgstr ""
"Сеть %(network)s, указанная для виртуальной машины %(name)s, не существует"
msgid "Supported virtual machine interfaces type is only network"
-msgstr ""
-"Поддерживается только один тип интерфейсов виртуальной машины - сеть"
+msgstr "Поддерживается только один тип интерфейсов виртуальной машины - сеть"
msgid "Network name for virtual machine interface must be a string"
-msgstr ""
-"Имя сети для интерфейса виртуальной машины должно быть строкой"
+msgstr "Имя сети для интерфейса виртуальной машины должно быть строкой"
msgid "Invalid network model card specified for virtual machine interface"
msgstr ""
"Указана недопустимая карта модели сети для интерфейса виртуальной машины"
msgid "Specify type and network to add a new virtual machine interface"
-msgstr ""
-"Укажите тип и сеть для добавления нового интерфейса виртуальной машины"
+msgstr "Укажите тип и сеть для добавления нового интерфейса виртуальной машины"
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
-msgstr ""
-"MAC-адрес должен иметь формат FF:FF:FF:FF:FF:FF"
+msgstr "MAC-адрес должен иметь формат FF:FF:FF:FF:FF:FF"
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
-msgstr ""
-"MAC-адрес %(mac)s уже существует в виртуальной машине %(name)s"
+msgstr "MAC-адрес %(mac)s уже существует в виртуальной машине %(name)s"
msgid "Invalid MAC Address"
-msgstr ""
-"Недопустимый MAC-адрес"
+msgstr "Недопустимый MAC-адрес"
msgid "Cannot change MAC address of a running virtual machine"
-msgstr ""
-"Нельзя изменить MAC-адрес работающей виртуальной машины"
+msgstr "Нельзя изменить MAC-адрес работающей виртуальной машины"
#, python-format
msgid "Template %(name)s already exists"
-msgstr ""
-"Шаблон %(name)s уже существует"
+msgstr "Шаблон %(name)s уже существует"
#, python-format
msgid ""
"Network '%(network)s' specified for template %(template)s does not exist"
-msgstr ""
-"Сеть '%(network)s', указанная для шаблона %(template)s, не существует"
+msgstr "Сеть '%(network)s', указанная для шаблона %(template)s, не существует"
#, python-format
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
-msgstr ""
-"Пул памяти %(pool)s, указанный для шаблона %(template)s, не существует"
+msgstr "Пул памяти %(pool)s, указанный для шаблона %(template)s, не существует"
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
-msgstr ""
-"Пул памяти %(pool)s, указанный для шаблона %(template)s, неактивен"
+msgstr "Пул памяти %(pool)s, указанный для шаблона %(template)s, неактивен"
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr ""
-"Указан недопустимый параметр %(param)s для CDROM."
+msgstr "Указан недопустимый параметр %(param)s для CDROM."
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
-msgstr ""
-"Сеть %(network)s, указанная для шаблона %(template)s, неактивна"
+msgstr "Сеть %(network)s, указанная для шаблона %(template)s, неактивна"
msgid "Template name must be a string"
-msgstr ""
-"Имя шаблона должно быть строкой"
+msgstr "Имя шаблона должно быть строкой"
msgid "Template icon must be a path to the image"
-msgstr ""
-"Значок шаблона должен быть путем к образу"
+msgstr "Значок шаблона должен быть путем к образу"
msgid "Template distribution must be a string"
-msgstr ""
-"Вариант шаблона должен быть строкой"
+msgstr "Вариант шаблона должен быть строкой"
msgid "Template distribution version must be a string"
-msgstr ""
-"Версия варианта шаблона должна быть строкой"
+msgstr "Версия варианта шаблона должна быть строкой"
msgid "The number of CPUs must be an integer greater than 0"
-msgstr ""
-"Число процессоров должно быть целым числом, большим 0"
+msgstr "Число процессоров должно быть целым числом, большим 0"
msgid "Amount of memory (MB) must be an integer greater than 512"
-msgstr ""
-"Объем памяти (МБ) должен быть целым числом больше 512"
+msgstr "Объем памяти (МБ) должен быть целым числом больше 512"
msgid "Template CDROM must be a local or remote ISO file"
-msgstr ""
-"CDROM шаблона должен быть локальным или удаленным файлом ISO"
+msgstr "CDROM шаблона должен быть локальным или удаленным файлом ISO"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for template"
-msgstr ""
-"Для шаблона указан недопустимый URI пула памяти %(value)s"
+msgstr "Для шаблона указан недопустимый URI пула памяти %(value)s"
msgid "Specify an ISO image as CDROM or a base image to create a template"
msgstr ""
"Укажите образ ISO в качестве CDROM или базового образа для создания шаблона"
msgid "All networks for the template must be specified in a list."
-msgstr ""
-"Все сети для шаблона должны быть указаны в списке."
+msgstr "Все сети для шаблона должны быть указаны в списке."
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
-msgstr ""
-"Укажите том для шаблона, когда пул памяти - iSCSI или SCSI"
+msgstr "Укажите том для шаблона, когда пул памяти - iSCSI или SCSI"
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
-msgstr ""
-"Том %(volume)s отсутствует в пуле памяти %(pool)s"
+msgstr "Том %(volume)s отсутствует в пуле памяти %(pool)s"
#, python-format
msgid "Unable to create template due error: %(err)s"
-msgstr ""
-"Не удалось создать шаблон из-за следующей ошибки: %(err)s"
+msgstr "Не удалось создать шаблон из-за следующей ошибки: %(err)s"
#, python-format
msgid "Unable to delete template due error: %(err)s"
-msgstr ""
-"Не удалось удалить шаблон из-за следующей ошибки: %(err)s"
+msgstr "Не удалось удалить шаблон из-за следующей ошибки: %(err)s"
msgid "Disk size must be an integer greater than 1GB."
-msgstr ""
-"Размер диска должен быть целым числом больше 1 ГБ."
+msgstr "Размер диска должен быть целым числом больше 1 ГБ."
msgid "Template base image must be a valid local image file"
-msgstr ""
-"Базовый образ шаблона должен быть правильным локальным файлом образа"
+msgstr "Базовый образ шаблона должен быть правильным локальным файлом образа"
#, python-format
msgid "Cannot identify base image %(path)s format"
-msgstr ""
-"Не удалось идентифицировать формат %(path)s базового образа"
+msgstr "Не удалось идентифицировать формат %(path)s базового образа"
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
msgstr ""
-"При указании топологии процессоров количество виртуальных процессоров должно быть произведением числа сокетов, ядер и "
-"нитей."
+"При указании топологии процессоров количество виртуальных процессоров должно "
+"быть произведением числа сокетов, ядер и нитей."
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
"zero."
msgstr ""
-"При указании топологии процессоров каждый элемент должен быть целым числом больше "
-"нуля."
+"При указании топологии процессоров каждый элемент должен быть целым числом "
+"больше нуля."
msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"Недопустимый формат образа диска. Допустимые форматы: bochs, cloop, cow, dmg, qcow, "
-"qcow2, qed, raw, vmdk, vpc."
+"Недопустимый формат образа диска. Допустимые форматы: bochs, cloop, cow, "
+"dmg, qcow, qcow2, qed, raw, vmdk, vpc."
#, python-format
msgid "Storage pool %(name)s already exists"
-msgstr ""
-"Пул памяти %(name)s уже существует"
+msgstr "Пул памяти %(name)s уже существует"
#, python-format
msgid "Storage pool %(name)s does not exist"
-msgstr ""
-"Пул памяти %(name)s не существует"
+msgstr "Пул памяти %(name)s не существует"
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
-msgstr ""
-"Укажите %(item)s, чтобы создать пул памяти %(name)s"
+msgstr "Укажите %(item)s, чтобы создать пул памяти %(name)s"
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr ""
-"Не удалось удалить пул памяти %(name)s"
+msgstr "Не удалось удалить пул памяти %(name)s"
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
-msgstr ""
-"Не удалось вывести список пулов памяти. Сведения: %(err)s"
+msgstr "Не удалось вывести список пулов памяти. Сведения: %(err)s"
#, python-format
msgid "Unable to create storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось создать пул памяти %(name)s. Сведения: %(err)s"
+msgstr "Не удалось создать пул памяти %(name)s. Сведения: %(err)s"
#, python-format
msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
msgstr ""
-"Не удалось получить число томов в пуле памяти %(name)s. Сведения: "
-"%(err)s"
+"Не удалось получить число томов в пуле памяти %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось активировать пул памяти %(name)s. Сведения: %(err)s"
+msgstr "Не удалось активировать пул памяти %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось деактивировать пул памяти %(name)s. Сведения: %(err)s"
+msgstr "Не удалось деактивировать пул памяти %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось удалить пул памяти %(name)s. Сведения: %(err)s"
+msgstr "Не удалось удалить пул памяти %(name)s. Сведения: %(err)s"
#, python-format
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
msgstr ""
-"Не удалось создать пул NFS: экспортированный путь %(path)s мог быть заблокирован во время монтирования"
+"Не удалось создать пул NFS: экспортированный путь %(path)s мог быть "
+"заблокирован во время монтирования"
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
msgstr ""
-"Не удалось создать пул NFS: не удалось смонтировать экспортированный путь %(path)s"
+"Не удалось создать пул NFS: не удалось смонтировать экспортированный путь "
+"%(path)s"
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr ""
-"Неподдерживаемый тип пула памяти: %(type)s"
+msgstr "Неподдерживаемый тип пула памяти: %(type)s"
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
-msgstr ""
-"Ошибка получения XML пула памяти для %(pool)s"
+msgstr "Ошибка получения XML пула памяти для %(pool)s"
msgid "Storage pool name must be a string without slashes (/)"
-msgstr ""
-"Имя пула памяти должно быть строкой без символов косой черты (/)"
+msgstr "Имя пула памяти должно быть строкой без символов косой черты (/)"
msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
@@ -719,65 +629,53 @@ msgstr ""
"iso"
msgid "Storage pool path must be a string"
-msgstr ""
-"Путь к пулу памяти должен быть строкой"
+msgstr "Путь к пулу памяти должен быть строкой"
msgid "Storage pool host must be a IP or hostname"
-msgstr ""
-"Хост пула памяти должен быть IP-адресом или именем хоста"
+msgstr "Хост пула памяти должен быть IP-адресом или именем хоста"
msgid "Storage pool device must be the absolute path to the block device"
msgstr ""
"Устройство пула памяти должно быть абсолютным путем к блочному устройству"
msgid "Storage pool devices parameter must be a list"
-msgstr ""
-"Параметр устройств пула памяти должен быть списком"
+msgstr "Параметр устройств пула памяти должен быть списком"
msgid "Target IQN of an iSCSI pool must be a string"
-msgstr ""
-"Целевой IQN пула iSCSI должен быть строкой"
+msgstr "Целевой IQN пула iSCSI должен быть строкой"
msgid "Port of a remote storage server must be an integer between 1 and 65535"
-msgstr ""
-"Порт удаленного сервера памяти должен быть целым числом от 1 до 65535"
+msgstr "Порт удаленного сервера памяти должен быть целым числом от 1 до 65535"
msgid "iSCSI target username must be a string"
-msgstr ""
-"Имя пользователя целевого объекта iSCSI должно быть строкой"
+msgstr "Имя пользователя целевого объекта iSCSI должно быть строкой"
msgid "iSCSI target password must be a string"
-msgstr ""
-"Пароль целевого объекта iSCSI должен быть строкой"
+msgstr "Пароль целевого объекта iSCSI должен быть строкой"
msgid "Specify name and type to create a storage pool"
-msgstr ""
-"Укажите имя и тип для создания пула памяти"
+msgstr "Укажите имя и тип для создания пула памяти"
#, python-format
msgid ""
"%(disk)s is not a valid disk/partition. Could not add it to the pool "
"%(pool)s."
msgstr ""
-"%(disk)s не является допустимым диском/разделом. Его не удалось добавить в пул "
-"%(pool)s."
+"%(disk)s не является допустимым диском/разделом. Его не удалось добавить в "
+"пул %(pool)s."
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
-msgstr ""
-"Не удалось расширить логический пул %(pool)s. Сведения: %(err)s"
+msgstr "Не удалось расширить логический пул %(pool)s. Сведения: %(err)s"
msgid "The parameter disks only can be updated for logical storage pool."
-msgstr ""
-"Диски параметров можно обновлять только для логического пула памяти."
+msgstr "Диски параметров можно обновлять только для логического пула памяти."
msgid "The SCSI host adapter name must be a string."
-msgstr ""
-"Имя адаптера хоста SCSI должно быть строкой."
+msgstr "Имя адаптера хоста SCSI должно быть строкой."
msgid "The storage pool kimchi_isos is reserved for internal use"
-msgstr ""
-"kimchi_isos пула памяти зарезервирован для внутреннего использования"
+msgstr "kimchi_isos пула памяти зарезервирован для внутреннего использования"
#, python-format
msgid ""
@@ -798,36 +696,33 @@ msgstr ""
#, python-format
msgid ""
"Unable to deactivate pool %(name)s as it is associated with some templates"
-msgstr ""
-"Не удалось деактивировать пул %(name)s: пул связан с шаблонами"
+msgstr "Не удалось деактивировать пул %(name)s: пул связан с шаблонами"
#, python-format
msgid "Unable to delete pool %(name)s as it is associated with some templates"
-msgstr ""
-"Не удалось удалить пул %(name)s: пул связан с шаблонами"
+msgstr "Не удалось удалить пул %(name)s: пул связан с шаблонами"
#, python-format
msgid ""
"A volume group named '%(name)s' already exists. Please, choose another name "
"to create the logical pool."
msgstr ""
-"Группа томов с именем '%(name)s' уже существует. Выберите другое имя "
-"для создания логического пула."
+"Группа томов с именем '%(name)s' уже существует. Выберите другое имя для "
+"создания логического пула."
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
msgstr ""
-"Не удалось обновить базу данных информацией глубокого сканирования из-за следующей ошибки: %(err)s"
+"Не удалось обновить базу данных информацией глубокого сканирования из-за "
+"следующей ошибки: %(err)s"
#, python-format
msgid "Storage volume %(name)s already exists"
-msgstr ""
-"Том памяти %(name)s уже существует"
+msgstr "Том памяти %(name)s уже существует"
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
-msgstr ""
-"Том памяти %(name)s не существует в пуле памяти %(pool)s"
+msgstr "Том памяти %(name)s не существует в пуле памяти %(pool)s"
#, python-format
msgid ""
@@ -839,14 +734,12 @@ msgstr ""
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
-msgstr ""
-"Укажите %(item)s, чтобы создать том памяти %(volume)s"
+msgstr "Укажите %(item)s, чтобы создать том памяти %(volume)s"
#, python-format
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
-msgstr ""
-"Не удалось вывести список томов: пул памяти %(pool)s неактивен"
+msgstr "Не удалось вывести список томов: пул памяти %(pool)s неактивен"
#, python-format
msgid ""
@@ -860,75 +753,65 @@ msgstr ""
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
msgstr ""
-"Не удалось вывести список томов памяти в пуле памяти %(pool)s. Сведения: %(err)s"
+"Не удалось вывести список томов памяти в пуле памяти %(pool)s. Сведения: "
+"%(err)s"
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось стереть тома памяти %(name)s. Сведения: %(err)s"
+msgstr "Не удалось стереть тома памяти %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось удалить том памяти %(name)s. Сведения: %(err)s"
+msgstr "Не удалось удалить том памяти %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось изменить размер тома памяти %(name)s. Сведения: %(err)s"
+msgstr "Не удалось изменить размер тома памяти %(name)s. Сведения: %(err)s"
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
-msgstr ""
-"Тип памяти %(type)s не поддерживает создание и удаление томов"
+msgstr "Тип памяти %(type)s не поддерживает создание и удаление томов"
msgid "Storage volume name must be a string"
-msgstr ""
-"Имя тома должно быть строкой"
+msgstr "Имя тома должно быть строкой"
msgid "Storage volume allocation must be an integer number"
-msgstr ""
-"Выделение тома должно быть целым числом"
+msgstr "Выделение тома должно быть целым числом"
msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"Формат тома памяти не поддерживается. Допустимые форматы: bochs, cloop, cow, dmg, "
-"qcow, qcow2, qed, raw, vmdk, vpc."
+"Формат тома памяти не поддерживается. Допустимые форматы: bochs, cloop, cow, "
+"dmg, qcow, qcow2, qed, raw, vmdk, vpc."
msgid "Storage volume requires a volume name"
-msgstr ""
-"Тому требуется имя"
+msgstr "Тому требуется имя"
#, python-format
msgid ""
"Unable to update database with storage volume information due error: %(err)s"
msgstr ""
-"Не удалось обновить базу данных информацией о томах памяти из-за следующей ошибки: %(err)s"
+"Не удалось обновить базу данных информацией о томах памяти из-за следующей "
+"ошибки: %(err)s"
#, python-format
msgid "Only one of parameter %(param)s can be specified"
-msgstr ""
-"Можно указать только один параметр %(param)s"
+msgstr "Можно указать только один параметр %(param)s"
#, python-format
msgid "Create volume from %(param)s is not supported"
-msgstr ""
-"Создание тома из %(param)s не поддерживается"
+msgstr "Создание тома из %(param)s не поддерживается"
msgid "Storage volume capacity must be an integer number."
-msgstr ""
-"Емкость тома памяти должна быть целым числом."
+msgstr "Емкость тома памяти должна быть целым числом."
msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
-msgstr ""
-"URL тома памяти должен быть http://, https://, ftp:// или ftps://."
+msgstr "URL тома памяти должен быть http://, https://, ftp:// или ftps://."
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
-msgstr ""
-"Нет доступа к файлу %(url)s. Проверьте его."
+msgstr "Нет доступа к файлу %(url)s. Проверьте его."
#, python-format
msgid ""
@@ -939,26 +822,23 @@ msgstr ""
"%(err)s"
msgid "Specify chunk data and its size to upload a file."
-msgstr ""
-"Укажите данные блока и его размер для передачи файла."
+msgstr "Укажите данные блока и его размер для передачи файла."
msgid "In order to upload a storage volume, specify the 'upload' parameter."
-msgstr ""
-"Для передачи тома памяти укажите параметр upload."
+msgstr "Для передачи тома памяти укажите параметр upload."
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
msgstr ""
-"Не удалось передать данные блока, поскольку они не соответствуют запрошенному размеру блока."
+"Не удалось передать данные блока, поскольку они не соответствуют "
+"запрошенному размеру блока."
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
-msgstr ""
-"Том памяти %(vol)s не находится в процессе передачи."
+msgstr "Том памяти %(vol)s не находится в процессе передачи."
msgid "The upload chunk data will exceed the storage volume size."
-msgstr ""
-"Данные блока передачи превысят размер тома памяти."
+msgstr "Данные блока передачи превысят размер тома памяти."
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
@@ -967,23 +847,19 @@ msgstr ""
#, python-format
msgid "Interface %(name)s does not exist"
-msgstr ""
-"Интерфейс %(name)s не существует"
+msgstr "Интерфейс %(name)s не существует"
#, python-format
msgid "Network %(name)s already exists"
-msgstr ""
-"Сеть %(name)s уже существует"
+msgstr "Сеть %(name)s уже существует"
#, python-format
msgid "Network %(name)s does not exist"
-msgstr ""
-"Сеть %(name)s не существует"
+msgstr "Сеть %(name)s не существует"
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
-msgstr ""
-"Подсеть %(subnet)s, указанная для сети %(network)s, недопустима."
+msgstr "Подсеть %(subnet)s, указанная для сети %(network)s, недопустима."
#, python-format
msgid "Specify a network interface to create bridged network %(name)s"
@@ -992,72 +868,64 @@ msgstr ""
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr ""
-"Не удалось удалить активную сеть %(name)s"
+msgstr "Не удалось удалить активную сеть %(name)s"
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
-msgstr ""
-"Интерфейс %(iface)s, указанный для сети %(network)s, уже используется"
+msgstr "Интерфейс %(iface)s, указанный для сети %(network)s, уже используется"
msgid "Interface should be bare NIC, bonding or bridge device."
msgstr ""
-"Интерфейс должен быть сетевой картой, устройством моста или связующим устройством."
+"Интерфейс должен быть сетевой картой, устройством моста или связующим "
+"устройством."
#, python-format
msgid "Unable to create network %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось создать сеть %(name)s. Сведения: %(err)s"
+msgstr "Не удалось создать сеть %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
-msgstr ""
-"Не найден свободный IP-адрес для сети %(name)s"
+msgstr "Не найден свободный IP-адрес для сети %(name)s"
#, python-format
msgid "The interface %(iface)s already exists."
-msgstr ""
-"Интерфейс %(iface)s уже существует."
+msgstr "Интерфейс %(iface)s уже существует."
msgid "Network name must be a string without slashes (/) or quotes (\")"
msgstr ""
"Имя сети должно быть строкой без символов косой черты (/) и кавычек (\")"
msgid "Supported network types are isolated, NAT and bridge"
-msgstr ""
-"Поддерживаемые типы сетей: isolated, NAT и bridge"
+msgstr "Поддерживаемые типы сетей: isolated, NAT и bridge"
msgid "Network subnet must be a string with IP address and prefix or netmask"
msgstr ""
"Подсеть сети должна быть строкой, содержащей IP-адрес, префикс или маску сети"
msgid "Network interface must be a string"
-msgstr ""
-"Сетевой интерфейс должен быть строкой"
+msgstr "Сетевой интерфейс должен быть строкой"
msgid "Network VLAN ID must be an integer between 1 and 4094"
-msgstr ""
-"Сетевой ИД VLAN должен быть целым числом от 1 до 4094"
+msgstr "Сетевой ИД VLAN должен быть целым числом от 1 до 4094"
msgid "Specify name and type to create a Network"
-msgstr ""
-"Укажите имя и тип для создания сети"
+msgstr "Укажите имя и тип для создания сети"
#, python-format
msgid ""
"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
"and/or templates linked to this network."
msgstr ""
-"Не удалось удалить сеть %(name)s. Есть виртуальные машины %(vms)s "
-"или шаблоны, связанные с данной сетью."
+"Не удалось удалить сеть %(name)s. Есть виртуальные машины %(vms)s или "
+"шаблоны, связанные с данной сетью."
#, python-format
msgid ""
"Unable to deactivate network %(name)s. There are some virtual machines "
"%(vms)s and/or templates linked to this network."
msgstr ""
-"Не удалось деактивировать сеть %(name)s. Есть виртуальные машины "
-"%(vms)s или шаблоны, связанные с данной сетью."
+"Не удалось деактивировать сеть %(name)s. Есть виртуальные машины %(vms)s или "
+"шаблоны, связанные с данной сетью."
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
@@ -1066,124 +934,103 @@ msgstr ""
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr ""
-"Не удалось активировать интерфейс %(iface)s: %(err)s."
+msgstr "Не удалось активировать интерфейс %(iface)s: %(err)s."
#, python-format
msgid ""
"Failed to activate interface %(iface)s. Please check the physical link "
"status."
msgstr ""
-"Не удалось активировать интерфейс %(iface)s. Проверьте физическую линию связи "
-""
+"Не удалось активировать интерфейс %(iface)s. Проверьте физическую линию "
+"связи "
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось запустить сеть %(name)s. Сведения: %(err)s"
+msgstr "Не удалось запустить сеть %(name)s. Сведения: %(err)s"
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr ""
-"Отладочный отчет %(name)s не существует"
+msgstr "Отладочный отчет %(name)s не существует"
msgid "Debug report tool not found in system"
-msgstr ""
-"Инструмент отладочного отчета не найден в системе"
+msgstr "Инструмент отладочного отчета не найден в системе"
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
-msgstr ""
-"Не удалось создать отладочный отчет %(name)s. Сведения: %(err)s."
+msgstr "Не удалось создать отладочный отчет %(name)s. Сведения: %(err)s."
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
-msgstr ""
-"Не найден отладочный отчет с именем %(name)s"
+msgstr "Не найден отладочный отчет с именем %(name)s"
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
-msgstr ""
-"Не удалось создать отладочный отчет %(name)s. Сведения: %(err)s"
+msgstr "Не удалось создать отладочный отчет %(name)s. Сведения: %(err)s"
msgid "You should give a name for the debug report file."
-msgstr ""
-"Необходимо присвоить имя файлу отладочного отчета."
+msgstr "Необходимо присвоить имя файлу отладочного отчета."
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
-"Имя отладочного отчета должно быть строкой. Только буквы, цифры, подчеркивание ('_') "
-"и дефис ('-') допустимы."
+"Имя отладочного отчета должно быть строкой. Только буквы, цифры, "
+"подчеркивание ('_') и дефис ('-') допустимы."
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
msgstr ""
-"Отладочный отчет с именем \"%(name)s\" уже существует. Укажите "
-"другое имя."
+"Отладочный отчет с именем \"%(name)s\" уже существует. Укажите другое имя."
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr ""
-"Сервер памяти %(server)s не использовался Kimchi"
+msgstr "Сервер памяти %(server)s не использовался Kimchi"
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr ""
-"Вариант ОС '%(name)s' не существует"
+msgstr "Вариант ОС '%(name)s' не существует"
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr ""
-"Раздел %(name)s не существует на хосте"
+msgstr "Раздел %(name)s не существует на хосте"
msgid "Unable to shutdown host machine as there are running virtual machines"
msgstr ""
"Не удалось завершить работу системы хоста: выполняются виртуальные машины"
msgid "Unable to reboot host machine as there are running virtual machines"
-msgstr ""
-"Не удалось перезагрузить систему хоста: выполняются виртуальные машины"
+msgstr "Не удалось перезагрузить систему хоста: выполняются виртуальные машины"
#, python-format
msgid "Node device '%(name)s' not found"
-msgstr ""
-"Устройство узла '%(name)s' не найдено"
+msgstr "Устройство узла '%(name)s' не найдено"
msgid "Conflicting flag filters specified."
-msgstr ""
-"Фильтры конфликтующих меток указаны."
+msgstr "Фильтры конфликтующих меток указаны."
msgid "No packages marked for update"
-msgstr ""
-"Нет пакетов, помеченных для обновления"
+msgstr "Нет пакетов, помеченных для обновления"
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr ""
-"Пакет %(name)s не помечен для обновления."
+msgstr "Пакет %(name)s не помечен для обновления."
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
-msgstr ""
-"Ошибка получения пакетов, помеченных для обновления. Сведения: %(err)s"
+msgstr "Ошибка получения пакетов, помеченных для обновления. Сведения: %(err)s"
msgid "There is no compatible package manager for this system."
-msgstr ""
-"Нет совместимого администратора пакетов для этой системы."
+msgstr "Нет совместимого администратора пакетов для этой системы."
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr ""
-"Не найден %(item)s в хранилище данных"
+msgstr "Не найден %(item)s в хранилище данных"
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr ""
-"Недопустимый URI %(uri)s"
+msgstr "Недопустимый URI %(uri)s"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
@@ -1191,31 +1038,27 @@ msgstr ""
"Истек тайм-аут во время выполнения команды '%(cmd)s' через %(seconds)s с"
msgid "Unable to choose a virtual machine name"
-msgstr ""
-"Не удалось выбрать имя виртуальной машины"
+msgstr "Не удалось выбрать имя виртуальной машины"
#, python-format
msgid "Invalid data value '%(value)s'"
-msgstr ""
-"Недопустимое значение данных '%(value)s'"
+msgstr "Недопустимое значение данных '%(value)s'"
#, python-format
msgid "Invalid data unit '%(unit)s'"
-msgstr ""
-"Недопустимая единица измерения данных '%(unit)s'"
+msgstr "Недопустимая единица измерения данных '%(unit)s'"
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
-msgstr ""
-"Недопустимый тип памяти. Поддерживаемые типы: 'cdrom', 'disk'"
+msgstr "Недопустимый тип памяти. Поддерживаемые типы: 'cdrom', 'disk'"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
msgstr ""
-"Путь '%(value)s' не является допустимым локальным/удаленным путем для устройства"
+"Путь '%(value)s' не является допустимым локальным/удаленным путем для "
+"устройства"
msgid "Only CDROM path can be update."
-msgstr ""
-"Можно изменить только путь к CDROM."
+msgstr "Можно изменить только путь к CDROM."
#, python-format
msgid ""
@@ -1227,70 +1070,64 @@ msgstr ""
#, python-format
msgid "Error while creating new storage device: %(error)s"
-msgstr ""
-"Ошибка создания устройства хранения: %(error)s"
+msgstr "Ошибка создания устройства хранения: %(error)s"
#, python-format
msgid "Error while updating storage device: %(error)s"
-msgstr ""
-"Ошибка обновления устройства хранения: %(error)s"
+msgstr "Ошибка обновления устройства хранения: %(error)s"
#, python-format
msgid "Error while removing storage device: %(error)s"
-msgstr ""
-"Ошибка удаления устройства хранения: %(error)s"
+msgstr "Ошибка удаления устройства хранения: %(error)s"
msgid "Do not support IDE device hot plug"
-msgstr ""
-"Не поддерживается оперативное подключение устройств IDE"
+msgstr "Не поддерживается оперативное подключение устройств IDE"
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
"disk"
msgstr ""
-"Укажите тип и путь, либо тип и пул/том для добавления нового диска виртуальной "
-"машины"
+"Укажите тип и путь, либо тип и пул/том для добавления нового диска "
+"виртуальной машины"
msgid "Specify path to update virtual machine disk"
-msgstr ""
-"Укажите путь для обновления диска виртуальной машины"
+msgstr "Укажите путь для обновления диска виртуальной машины"
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
msgstr ""
-"Достигнуто ограничение на число устройств (%(limit)s) для типа контроллера %(type)s"
+"Достигнуто ограничение на число устройств (%(limit)s) для типа контроллера "
+"%(type)s"
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
msgstr ""
-"Не удалось получить информацию о пути к диску для данного пула/тома: %(error)s"
+"Не удалось получить информацию о пути к диску для данного пула/тома: "
+"%(error)s"
msgid "Volume already in use by other virtual machine."
-msgstr ""
-"Том уже используется другой виртуальной машиной."
+msgstr "Том уже используется другой виртуальной машиной."
msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
msgstr ""
-"При добавлении нового диска виртуальной машины укажите либо путь, "
-"либо пул и том"
+"При добавлении нового диска виртуальной машины укажите либо путь, либо пул и "
+"том"
#, python-format
msgid ""
"Volume chosen with format %(format)s does not fit in the storage type "
"%(type)s"
msgstr ""
-"Выбранный том с форматом %(format)s не подходит для типа памяти "
-"%(type)s"
+"Выбранный том с форматом %(format)s не подходит для типа памяти %(type)s"
msgid "YUM Repository ID must be one word only string."
msgstr ""
"ИД хранилища YUM должен быть строкой, состоящей только из одного слова."
msgid "Repository URL must be an http://, ftp:// or file:// URL."
-msgstr ""
-"URL хранилища должен быть http://, ftp:// или file:// ."
+msgstr "URL хранилища должен быть http://, ftp:// или file:// ."
msgid ""
"Repository configuration is a dictionary with specific values according to "
@@ -1300,42 +1137,35 @@ msgstr ""
"типом хранилища."
msgid "Distribution to DEB repository must be a string"
-msgstr ""
-"Вариант для хранилища DEB должен быть строкой"
+msgstr "Вариант для хранилища DEB должен быть строкой"
msgid "Components to DEB repository must be listed in a array"
-msgstr ""
-"Компоненты для хранилища DEB должны быть перечислены в массиве"
+msgstr "Компоненты для хранилища DEB должны быть перечислены в массиве"
msgid "Components to DEB repository must be a string"
-msgstr ""
-"Компоненты для хранилища DEB должны быть строкой"
+msgstr "Компоненты для хранилища DEB должны быть строкой"
msgid "Mirror list to repository must be a string"
-msgstr ""
-"Список зеркальных копий для хранилища должен быть строкой"
+msgstr "Список зеркальных копий для хранилища должен быть строкой"
msgid "YUM Repository name must be string."
-msgstr ""
-"Имя хранилища YUM должно быть строкой."
+msgstr "Имя хранилища YUM должно быть строкой."
msgid "GPG check must be a boolean value."
-msgstr ""
-"Проверка GPG должна быть булевским значением."
+msgstr "Проверка GPG должна быть булевским значением."
msgid "GPG key must be a URL pointing to the ASCII-armored file."
msgstr ""
-"Ключ GPG должен быть URL, указывающим на защищенный файл с кодированием ASCII."
+"Ключ GPG должен быть URL, указывающим на защищенный файл с кодированием "
+"ASCII."
#, python-format
msgid "Could not update repository %(repo_id)s."
-msgstr ""
-"Не удалось обновить хранилище %(repo_id)s."
+msgstr "Не удалось обновить хранилище %(repo_id)s."
#, python-format
msgid "Repository %(repo_id)s does not exist."
-msgstr ""
-"Хранилище %(repo_id)s не существует."
+msgstr "Хранилище %(repo_id)s не существует."
msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
@@ -1345,70 +1175,56 @@ msgstr ""
"изменения хранилища YUM."
msgid "Repository management tool was not recognized for your system."
-msgstr ""
-"Не распознан инструмент управления хранилищем для системы."
+msgstr "Не распознан инструмент управления хранилищем для системы."
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr ""
-"Хранилище %(repo_id)s уже включено."
+msgstr "Хранилище %(repo_id)s уже включено."
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr ""
-"Хранилище %(repo_id)s уже выключено."
+msgstr "Хранилище %(repo_id)s уже выключено."
#, python-format
msgid "Could not remove repository %(repo_id)s."
-msgstr ""
-"Не удалось удалить хранилище %(repo_id)s."
+msgstr "Не удалось удалить хранилище %(repo_id)s."
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
-msgstr ""
-"Не удалось записать в файл конфигурации хранилища %(repo_file)s"
+msgstr "Не удалось записать в файл конфигурации хранилища %(repo_file)s"
msgid "Specify repository distribution in order to create a DEB repository."
-msgstr ""
-"Укажите вариант хранилища для создания хранилища DEB."
+msgstr "Укажите вариант хранилища для создания хранилища DEB."
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr ""
-"Не удалось включить хранилище %(repo_id)s."
+msgstr "Не удалось включить хранилище %(repo_id)s."
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr ""
-"Не удалось выключить хранилище %(repo_id)s."
+msgstr "Не удалось выключить хранилище %(repo_id)s."
msgid "YUM Repository ID already exists"
-msgstr ""
-"ИД хранилища YUM уже существует"
+msgstr "ИД хранилища YUM уже существует"
msgid "YUM Repository name must be a string"
-msgstr ""
-"Имя хранилища YUM должно быть строкой"
+msgstr "Имя хранилища YUM должно быть строкой"
#, python-format
msgid "Unable to list repositories. Details: '%(err)s'"
-msgstr ""
-"Не удалось вывести список хранилищ. Сведения: %(err)s"
+msgstr "Не удалось вывести список хранилищ. Сведения: %(err)s"
#, python-format
msgid "Unable to retrieve repository information. Details: '%(err)s'"
-msgstr ""
-"Не удалось получить информацию хранилища. Сведения: %(err)s"
+msgstr "Не удалось получить информацию хранилища. Сведения: %(err)s"
#, python-format
msgid "Unable to add repository. Details: '%(err)s'"
-msgstr ""
-"Не удалось добавить хранилище. Сведения: %(err)s"
+msgstr "Не удалось добавить хранилище. Сведения: %(err)s"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr ""
-"Не удалось удалить хранилище. Сведения: %(err)s"
+msgstr "Не удалось удалить хранилище. Сведения: %(err)s"
#, python-format
msgid ""
@@ -1417,26 +1233,25 @@ msgstr ""
"Элементы конфигурации '%(items)s' не поддерживаются администратором хранилища"
msgid "Repository metalink must be an http://, ftp:// or file:// URL."
-msgstr ""
-"Метассылка хранилища должна быть URL http://, ftp:// или file://."
+msgstr "Метассылка хранилища должна быть URL http://, ftp:// или file://."
msgid "Cannot specify mirrorlist and metalink at the same time."
-msgstr ""
-"Список зеркал и метассылку нельзя указывать одновременно."
+msgstr "Список зеркал и метассылку нельзя указывать одновременно."
#, python-format
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
msgstr ""
-"Виртуальная машина '%(vm)s' должна быть остановлена перед созданием ее моментальной копии."
+"Виртуальная машина '%(vm)s' должна быть остановлена перед созданием ее "
+"моментальной копии."
#, python-format
msgid ""
"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Не удалось создать моментальную копию '%(name)s' виртуальной машины '%(vm)s'. Сведения: "
-"%(err)s"
+"Не удалось создать моментальную копию '%(name)s' виртуальной машины "
+"'%(vm)s'. Сведения: %(err)s"
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
@@ -1448,608 +1263,478 @@ msgid ""
"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Не удалось получить моментальную копию '%(name)s' виртуальной машины '%(vm)s'. Сведения: "
-"%(err)s"
+"Не удалось получить моментальную копию '%(name)s' виртуальной машины "
+"'%(vm)s'. Сведения: %(err)s"
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
msgstr ""
-"Не удалось вывести список моментальных копий виртуальной машины '%(vm)s'. Сведения: %(err)s"
+"Не удалось вывести список моментальных копий виртуальной машины '%(vm)s'. "
+"Сведения: %(err)s"
#, python-format
msgid ""
"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Не удалось удалить моментальную копию '%(name)s' виртуальной машины '%(vm)s'. Сведения: "
-"%(err)s"
+"Не удалось удалить моментальную копию '%(name)s' виртуальной машины "
+"'%(vm)s'. Сведения: %(err)s"
#, python-format
msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
-"Не удалось получить текущую моментальную копию виртуальной машины '%(vm)s'. Сведения: "
-"%(err)s"
+"Не удалось получить текущую моментальную копию виртуальной машины '%(vm)s'. "
+"Сведения: %(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
msgstr ""
-"Не удалось восстановить состояние виртуальной машины '%(vm)s' из моментальной копии '%(name)s'. Сведения: "
-"%(err)s"
+"Не удалось восстановить состояние виртуальной машины '%(vm)s' из "
+"моментальной копии '%(name)s'. Сведения: %(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
-"Не удалось создать моментальную копию виртуальной машины '%(vm)s', поскольку она содержит "
-"диск в формате %(format)s. Поддерживается только формат qcow2."
+"Не удалось создать моментальную копию виртуальной машины '%(vm)s', поскольку "
+"она содержит диск в формате %(format)s. Поддерживается только формат qcow2."
msgid "The number of vCPUs is too large for this system."
-msgstr ""
-"Число виртуальных процессоров слишком велико для этой системы."
+msgstr "Число виртуальных процессоров слишком велико для этой системы."
msgid "Invalid vCPU/topology combination."
-msgstr ""
-"Недопустимое сочетание виртуальных процессоров и топологии."
+msgstr "Недопустимое сочетание виртуальных процессоров и топологии."
msgid "This host (or current configuration) does not allow CPU topology."
msgstr ""
-"На этом хосте (или в текущей конфигурации) не разрешена топология процессоров."
+"На этом хосте (или в текущей конфигурации) не разрешена топология "
+"процессоров."
msgid "ERROR CODE"
-msgstr ""
-"Код ошибки"
+msgstr "Код ошибки"
msgid "REASON"
-msgstr ""
-"ПРИЧИНА"
+msgstr "ПРИЧИНА"
msgid "STACK"
-msgstr ""
-"Стек"
+msgstr "Стек"
msgid "Go to Homepage"
-msgstr ""
-"Перейти на домашнюю страницу"
+msgstr "Перейти на домашнюю страницу"
msgid "Create a New Virtual Machine"
-msgstr ""
-"Создать новую виртуальную машину"
+msgstr "Создать новую виртуальную машину"
msgid "Virtual Machine Name"
-msgstr ""
-"Имя виртуальной машины"
+msgstr "Имя виртуальной машины"
msgid ""
"The name used to identify the virtual machine. If omitted, a name will be "
"chosen based on the template used."
msgstr ""
-"Имя для идентификации виртуальной машины. Если не указано, имя будет "
-"выбрано в зависимости от используемого шаблона."
+"Имя для идентификации виртуальной машины. Если не указано, имя будет выбрано "
+"в зависимости от используемого шаблона."
msgid "Template"
-msgstr ""
-"Шаблон"
+msgstr "Шаблон"
msgid "Please create a template first."
-msgstr ""
-"Сначала создайте шаблон."
+msgstr "Сначала создайте шаблон."
msgid "Create a Template"
-msgstr ""
-"Создать шаблон"
+msgstr "Создать шаблон"
msgid "Please choose a template."
-msgstr ""
-"Выберите шаблон."
+msgstr "Выберите шаблон."
msgid "OS"
-msgstr ""
-"ОС"
+msgstr "ОС"
msgid "OS Version"
-msgstr ""
-"Версия ОС"
+msgstr "Версия ОС"
msgid "CPUS"
-msgstr ""
-"Процессоры"
+msgstr "Процессоры"
msgid "Memory"
-msgstr ""
-"Память"
+msgstr "Память"
msgid "Create"
-msgstr ""
-"Создать"
+msgstr "Создать"
msgid "Creating..."
-msgstr ""
-"Создание..."
+msgstr "Создание..."
msgid "Edit Guest"
-msgstr ""
-"Изменить гостевую систему"
+msgstr "Изменить гостевую систему"
msgid "General"
-msgstr ""
-"Общие"
+msgstr "Общие"
msgid "Storage"
-msgstr ""
-"Дисковая память"
+msgstr "Дисковая память"
msgid "Interface"
-msgstr ""
-"Интерфейс"
+msgstr "Интерфейс"
msgid "Permission"
-msgstr ""
-"Права доступа"
+msgstr "Права доступа"
msgid "Host PCI Device"
-msgstr ""
-"Устройство PCI хоста"
+msgstr "Устройство PCI хоста"
msgid "Snapshot"
-msgstr ""
-"Моментальная копия"
+msgstr "Моментальная копия"
msgid "Name"
-msgstr ""
-"Имя"
+msgstr "Имя"
msgid "CPUs"
-msgstr ""
-"Процессоры"
+msgstr "Процессоры"
msgid "Memory (MB)"
-msgstr ""
-"Объем памяти (МБ)"
+msgstr "Объем памяти (МБ)"
msgid "Icon"
-msgstr ""
-"Значок"
+msgstr "Значок"
msgid "Device"
-msgstr ""
-"Устройство"
+msgstr "Устройство"
msgid "Path"
-msgstr ""
-"Путь"
+msgstr "Путь"
msgid "Network"
-msgstr ""
-"Сеть"
+msgstr "Сеть"
msgid "Type"
-msgstr ""
-"Тип"
+msgstr "Тип"
msgid "MAC Address"
-msgstr ""
-"MAC-адрес"
+msgstr "MAC-адрес"
msgid "Available system users and groups"
-msgstr ""
-"Доступные системные пользователи и группы"
+msgstr "Доступные системные пользователи и группы"
msgid "Selected system users and groups"
-msgstr ""
-"Выбранные системные пользователи и группы"
+msgstr "Выбранные системные пользователи и группы"
msgid "User"
-msgstr ""
-"Пользователь"
+msgstr "Пользователь"
msgid "All"
-msgstr ""
-"Все"
+msgstr "Все"
msgid "To Add"
-msgstr ""
-"Добавить"
+msgstr "Добавить"
msgid "Added"
-msgstr ""
-"Добавлено"
+msgstr "Добавлено"
msgid "filter"
-msgstr ""
-"фильтр"
+msgstr "фильтр"
msgid "Product"
-msgstr ""
-"Продукт"
+msgstr "Продукт"
msgid "Vendor"
-msgstr ""
-"Вендор"
+msgstr "Вендор"
msgid "Created"
-msgstr ""
-"Дата создания"
+msgstr "Дата создания"
msgid "Save"
-msgstr ""
-"Сохранить"
+msgstr "Сохранить"
msgid "Replace"
-msgstr ""
-"Заменить"
+msgstr "Заменить"
msgid "Detach"
-msgstr ""
-"Отключить"
+msgstr "Отключить"
msgid "Cancel"
-msgstr ""
-"Отмена"
+msgstr "Отмена"
msgid "revert"
-msgstr ""
-"восстановить"
+msgstr "восстановить"
msgid "Add a Storage Device to VM"
-msgstr ""
-"Добавить устройство хранения в VM"
+msgstr "Добавить устройство хранения в VM"
msgid "Device Type"
-msgstr ""
-"Тип устройства"
+msgstr "Тип устройства"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr ""
-"Тип устройства. В данный момент поддерживается \"cdrom\" и \"disk\"."
+msgstr "Тип устройства. В данный момент поддерживается \"cdrom\" и \"disk\"."
msgid "Storage Pool"
-msgstr ""
-"Пул памяти"
+msgstr "Пул памяти"
msgid "Storage pool which volume located in"
-msgstr ""
-"Том пула памяти находится в"
+msgstr "Том пула памяти находится в"
msgid "Storage Volume"
-msgstr ""
-"Том памяти"
+msgstr "Том памяти"
msgid "Storage volume to be attached"
-msgstr ""
-"Том подключен"
+msgstr "Том подключен"
msgid "File Path"
-msgstr ""
-"Путь к файлу"
+msgstr "Путь к файлу"
msgid "The ISO file path in the server for CDROM."
-msgstr ""
-"Путь к файлу ISO для CDROM на сервере."
+msgstr "Путь к файлу ISO для CDROM на сервере."
msgid "Attach"
-msgstr ""
-"Подключить"
+msgstr "Подключить"
msgid "Start"
-msgstr ""
-"Запустить"
+msgstr "Запустить"
msgid "Reset"
-msgstr ""
-"Сброс"
+msgstr "Сброс"
msgid "Pause"
-msgstr ""
-"Приостановить"
+msgstr "Приостановить"
msgid "Resume"
-msgstr ""
-"Возобновить"
+msgstr "Возобновить"
msgid "Power Off"
-msgstr ""
-"Выключить питание"
+msgstr "Выключить питание"
msgid "Actions"
-msgstr ""
-"Действия"
+msgstr "Действия"
msgid "Connect"
-msgstr ""
-"Подключить"
+msgstr "Подключить"
msgid "Clone"
-msgstr ""
-"Дублировать"
+msgstr "Дублировать"
msgid "Edit"
-msgstr ""
-"Изменить"
+msgstr "Изменить"
msgid "Shut Down"
-msgstr ""
-"Завершить работу"
+msgstr "Завершить работу"
msgid "Delete"
-msgstr ""
-"Удалить"
+msgstr "Удалить"
msgid "The username or password you entered is incorrect. Please try again."
-msgstr ""
-"Указано неверное имя пользователя или пароль. Введите еще раз."
+msgstr "Указано неверное имя пользователя или пароль. Введите еще раз."
msgid "This field is required."
-msgstr ""
-"Это обязательное поле."
+msgstr "Это обязательное поле."
msgid "Log in"
-msgstr ""
-"Вход в систему"
+msgstr "Вход в систему"
msgid "Logging in..."
-msgstr ""
-"Вход..."
+msgstr "Вход..."
msgid "Host"
-msgstr ""
-"Хост"
+msgstr "Хост"
msgid "Guests"
-msgstr ""
-"Гостевые системы"
+msgstr "Гостевые системы"
msgid "Templates"
-msgstr ""
-"Шаблоны"
+msgstr "Шаблоны"
msgid "Failed to get application configuration"
-msgstr ""
-"Не удалось получить конфигурацию приложения"
+msgstr "Не удалось получить конфигурацию приложения"
msgid "This is not a valid Linux path"
-msgstr ""
-"Этот недопустимый путь в Linux"
+msgstr "Этот недопустимый путь в Linux"
msgid "This is not a valid URL."
-msgstr ""
-"Это недопустимый URL."
+msgstr "Это недопустимый URL."
msgid "No such data available."
-msgstr ""
-"Нет таких данных."
+msgstr "Нет таких данных."
msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"Нет связи с системой хоста. Убедитесь, что система хоста работает и "
-"доступна для подключения. Ответ на запрос HTTP: %1. "
+"Нет связи с системой хоста. Убедитесь, что система хоста работает и доступна "
+"для подключения. Ответ на запрос HTTP: %1. "
msgid "Unable to read file."
-msgstr ""
-"Не удалось прочитать файл."
+msgstr "Не удалось прочитать файл."
msgid "Error while uploading file."
-msgstr ""
-"Ошибка передачи файла."
+msgstr "Ошибка передачи файла."
msgid "Delete Confirmation"
-msgstr ""
-"Подтверждение удаления"
+msgstr "Подтверждение удаления"
msgid "OK"
-msgstr ""
-"OK"
+msgstr "OK"
msgid "Confirm"
-msgstr ""
-"Подтвердить"
+msgstr "Подтвердить"
msgid "Warning"
-msgstr ""
-"Предупреждение"
+msgstr "Предупреждение"
msgid "Cloning..."
-msgstr ""
-"Дублирование..."
+msgstr "Дублирование..."
msgid "Loading..."
-msgstr ""
-"Загружается..."
+msgstr "Загружается..."
msgid "An error occurred while retrieving system information."
-msgstr ""
-"Ошибка получения системной информации."
+msgstr "Ошибка получения системной информации."
msgid "Retry"
-msgstr ""
-"Повторить"
+msgstr "Повторить"
msgid "Detailed message:"
-msgstr ""
-"Подробное сообщение:"
+msgstr "Подробное сообщение:"
msgid "No ISO found"
-msgstr ""
-"Не найден образ ISO"
+msgstr "Не найден образ ISO"
msgid "This is not a valid ISO file."
-msgstr ""
-"Этот файл не является допустимым образом ISO."
+msgstr "Этот файл не является допустимым образом ISO."
msgid "This may take a long time. Do you want to continue?"
-msgstr ""
-"Это может занять много времени. Продолжить?"
+msgstr "Это может занять много времени. Продолжить?"
msgid "This will permanently delete the template. Would you like to continue?"
-msgstr ""
-"Шаблон будет безвозвратно удален. Продолжить?"
+msgstr "Шаблон будет безвозвратно удален. Продолжить?"
msgid "Unable to shut down system as there are some virtual machines running!"
msgstr ""
-"Невозможно завершить работу системы, поскольку в ней работают виртуальные машины!"
+"Невозможно завершить работу системы, поскольку в ней работают виртуальные "
+"машины!"
msgid "Max:"
-msgstr ""
-"Макс.:"
+msgstr "Макс.:"
msgid "Utilization"
-msgstr ""
-"Использование"
+msgstr "Использование"
msgid "Available"
-msgstr ""
-"Доступно"
+msgstr "Доступно"
msgid "Read Rate"
-msgstr ""
-"Скорость чтения"
+msgstr "Скорость чтения"
msgid "Write Rate"
-msgstr ""
-"Скорость записи"
+msgstr "Скорость записи"
msgid "Received"
-msgstr ""
-"Получено"
+msgstr "Получено"
msgid "Sent"
-msgstr ""
-"Отправлено"
+msgstr "Отправлено"
msgid ""
"Shutting down or restarting host will cause unsaved work lost. Continue to "
"shut down/restarting?"
msgstr ""
-"Завершение работы и перезапуск хоста приведут к потере несохраненной работы. Продолжить "
-"завершение работы/перезапуск?"
+"Завершение работы и перезапуск хоста приведут к потере несохраненной работы. "
+"Продолжить завершение работы/перезапуск?"
msgid ""
"Repository will be removed permanently and can't be recovered. Do you want "
"to continue?"
-msgstr ""
-"Хранилище будет удалено без возможности восстановления. "
-"Продолжить?"
+msgstr "Хранилище будет удалено без возможности восстановления. Продолжить?"
msgid "Repositories"
-msgstr ""
-"Хранилища"
+msgstr "Хранилища"
msgid "ID"
-msgstr ""
-"ИД"
+msgstr "ИД"
msgid "Base URL"
-msgstr ""
-"Базовый URL"
+msgstr "Базовый URL"
msgid "Is Mirror"
-msgstr ""
-"Зеркальная копия"
+msgstr "Зеркальная копия"
msgid "URL Args"
-msgstr ""
-"Аргументы URL"
+msgstr "Аргументы URL"
msgid "Enabled"
-msgstr ""
-"Включено"
+msgstr "Включено"
msgid "GPG Check"
-msgstr ""
-"Проверка GPG"
+msgstr "Проверка GPG"
msgid "GPG Key"
-msgstr ""
-"Ключ GPG"
+msgstr "Ключ GPG"
msgid "Add"
-msgstr ""
-"Добавить"
+msgstr "Добавить"
msgid "Remove"
-msgstr ""
-"Удалить"
+msgstr "Удалить"
msgid "Enable"
-msgstr ""
-"Включить"
+msgstr "Включить"
msgid "Disable"
-msgstr ""
-"Выключить"
+msgstr "Выключить"
msgid "Software Updates"
-msgstr ""
-"Обновления программного обеспечения"
+msgstr "Обновления программного обеспечения"
msgid "Package Name"
-msgstr ""
-"Имя пакета"
+msgstr "Имя пакета"
msgid "Version"
-msgstr ""
-"Версия"
+msgstr "Версия"
msgid "Architecture"
-msgstr ""
-"Архитектура"
+msgstr "Архитектура"
msgid "Repository"
-msgstr ""
-"Хранилище"
+msgstr "Хранилище"
msgid "Update All"
-msgstr ""
-"Обновить все"
+msgstr "Обновить все"
msgid "Updating..."
-msgstr ""
-"Обновление..."
+msgstr "Обновление..."
msgid "Failed to retrieve packages update information."
-msgstr ""
-"Ошибка получения информации для обновления пакетов."
+msgstr "Ошибка получения информации для обновления пакетов."
msgid "Failed to update package(s)."
-msgstr ""
-"Не удалось обновить пакеты."
+msgstr "Не удалось обновить пакеты."
msgid ""
"Debug report will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"Отладочный отчет будет удален без возможности восстановления. "
-"Продолжить?"
+"Отладочный отчет будет удален без возможности восстановления. Продолжить?"
msgid "Debug Reports"
-msgstr ""
-"Отладочные отчеты"
+msgstr "Отладочные отчеты"
msgid "Generated Time"
-msgstr ""
-"Время создания"
+msgstr "Время создания"
msgid "Generate"
-msgstr ""
-"Создать"
+msgstr "Создать"
msgid "Generating..."
-msgstr ""
-"Создание..."
+msgstr "Создание..."
msgid "Rename"
-msgstr ""
-"Переименовать"
+msgstr "Переименовать"
msgid "Download"
-msgstr ""
-"Загрузить"
+msgstr "Загрузить"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
@@ -2059,34 +1744,30 @@ msgstr ""
"дефисы ('-')."
msgid "Pending..."
-msgstr ""
-"Ожидание..."
+msgstr "Ожидание..."
msgid "Report name is the same as the original one."
-msgstr ""
-"Имя отчета совпадает с исходным."
+msgstr "Имя отчета совпадает с исходным."
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
"cannot be undone. Would you like to continue?"
msgstr ""
-"Виртуальная машина будет удалена вместе со своими виртуальными дисками. Эта операция "
-"необратима. Продолжить?"
+"Виртуальная машина будет удалена вместе со своими виртуальными дисками. Эта "
+"операция необратима. Продолжить?"
msgid "Power off Confirmation"
-msgstr ""
-"Подтверждение отключения питания"
+msgstr "Подтверждение отключения питания"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
"cache in the guest. Would you like to continue?"
msgstr ""
-"Это действие может привести к нежелательным последствиям. Например, несброшенный дисковый "
-"кэш в гостевой системе. Продолжить?"
+"Это действие может привести к нежелательным последствиям. Например, "
+"несброшенный дисковый кэш в гостевой системе. Продолжить?"
msgid "Reset Confirmation"
-msgstr ""
-"Подтверждение сброса"
+msgstr "Подтверждение сброса"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
@@ -2096,100 +1777,84 @@ msgstr ""
"Продолжить?"
msgid "Shut Down Confirmation"
-msgstr ""
-"Подтверждение завершения работы"
+msgstr "Подтверждение завершения работы"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
msgstr ""
-"Обратите внимание, что гостевая ОС может проигнорировать этот запрос. Продолжить?"
+"Обратите внимание, что гостевая ОС может проигнорировать этот запрос. "
+"Продолжить?"
msgid "Virtual Machine delete Confirmation"
-msgstr ""
-"Подтверждение удаления виртуальной машины"
+msgstr "Подтверждение удаления виртуальной машины"
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
msgstr ""
-"Эта виртуальная машина не постоянная. Выключение приведет к ее удалению. Продолжить?"
+"Эта виртуальная машина не постоянная. Выключение приведет к ее удалению. "
+"Продолжить?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
"default storage pool. The same will happen when the target pool does not "
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
-"Если у целевой гостевой системы есть тома SCSI или iSCSI, они будут скопированы "
-"в пул памяти по умолчанию. То же самое произойдет, если в целевом пуле "
-"недостаточно свободного места для дублирования томов. Продолжить?"
+"Если у целевой гостевой системы есть тома SCSI или iSCSI, они будут "
+"скопированы в пул памяти по умолчанию. То же самое произойдет, если в "
+"целевом пуле недостаточно свободного места для дублирования томов. "
+"Продолжить?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
msgstr ""
-"Этот CDROM будет отключен. Его можно будет снова подключить. "
-"Отключить?"
+"Этот CDROM будет отключен. Его можно будет снова подключить. Отключить?"
msgid "Attaching..."
-msgstr ""
-"Подключение..."
+msgstr "Подключение..."
msgid "Replacing..."
-msgstr ""
-"Замена..."
+msgstr "Замена..."
msgid "Successfully attached!"
-msgstr ""
-"Успешно подключен!"
+msgstr "Успешно подключен!"
msgid "Successfully replaced!"
-msgstr ""
-"Успешно заменен!"
+msgstr "Успешно заменен!"
msgid "Successfully detached!"
-msgstr ""
-"Успешно отключен!"
+msgstr "Успешно отключен!"
msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
-msgstr ""
-"Этот диск будет отключен. Его можно будет снова подключить. "
-"Отключить?"
+msgstr "Этот диск будет отключен. Его можно будет снова подключить. Отключить?"
msgid "interface:"
-msgstr ""
-"интерфейс:"
+msgstr "интерфейс:"
msgid "address:"
-msgstr ""
-"адрес:"
+msgstr "адрес:"
msgid "link_type:"
-msgstr ""
-"тип линии связи:"
+msgstr "тип линии связи:"
msgid "block:"
-msgstr ""
-"блок:"
+msgstr "блок:"
msgid "drive_type:"
-msgstr ""
-"тип накопителя:"
+msgstr "тип накопителя:"
msgid "model:"
-msgstr ""
-"модель:"
+msgstr "модель:"
msgid "Affected devices:"
-msgstr ""
-"Затронутые устройства:"
+msgstr "Затронутые устройства:"
msgid "The VLAN id must be between 1 and 4094."
-msgstr ""
-"ИД VLAN должен быть от 1 до 4094."
+msgstr "ИД VLAN должен быть от 1 до 4094."
msgid "unavailable"
-msgstr ""
-"недоступно"
+msgstr "недоступно"
msgid ""
"This action will interrupt network connectivity for any virtual machine that "
@@ -2199,643 +1864,495 @@ msgstr ""
"зависят от этой сети."
msgid "Create a network"
-msgstr ""
-"Создать сеть"
+msgstr "Создать сеть"
msgid ""
"This network is not persistent. Instead of stop, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Эта сеть не постоянная. Вместо остановки, это действие "
-"безвозвратно удалит ее. Продолжить?"
+"Эта сеть не постоянная. Вместо остановки, это действие безвозвратно удалит "
+"ее. Продолжить?"
msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
-"Тег комплексной VLAN может работать неправильно с включенным NetworkManager. "
-"Его рекомендуется выключить."
+"Тег комплексной VLAN может работать неправильно с включенным "
+"NetworkManager. Его рекомендуется выключить."
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
-msgstr ""
-"Пул памяти будет безвозвратно удален. Продолжить?"
+msgstr "Пул памяти будет безвозвратно удален. Продолжить?"
msgid "This storage pool is empty."
-msgstr ""
-"Этот пул памяти пустой."
+msgstr "Этот пул памяти пустой."
msgid ""
"It will format your disk and you will loose any data in there, are you sure "
"to continue? "
msgstr ""
-"Диск будет отформатирован, и все данные на нем будут потеряны. Вы действительно хотите "
-"продолжить? "
+"Диск будет отформатирован, и все данные на нем будут потеряны. Вы "
+"действительно хотите продолжить? "
msgid "SCSI Fibre Channel"
-msgstr ""
-"SCSI Fibre Channel"
+msgstr "SCSI Fibre Channel"
msgid "No SCSI adapters found."
-msgstr ""
-"Не найдены адаптеры SCSI."
+msgstr "Не найдены адаптеры SCSI."
msgid "Loading iSCSI targets..."
-msgstr ""
-"Загрузка целевых объектов iSCSI..."
+msgstr "Загрузка целевых объектов iSCSI..."
msgid "No iSCSI found. Please input one."
-msgstr ""
-"Не найден iSCSI. Введите."
+msgstr "Не найден iSCSI. Введите."
msgid "Failed to load iSCSI targets."
-msgstr ""
-"Не удалось загрузить целевые объекты iSCSI."
+msgstr "Не удалось загрузить целевые объекты iSCSI."
msgid "The storage pool name can not be blank."
-msgstr ""
-"Не указано имя пула памяти."
+msgstr "Не указано имя пула памяти."
msgid "The storage pool path can not be blank."
-msgstr ""
-"Не указан путь к пулу памяти."
+msgstr "Не указан путь к пулу памяти."
msgid "NFS server mount path can not be blank."
-msgstr ""
-"Не указан путь монтирования сервера NFS."
+msgstr "Не указан путь монтирования сервера NFS."
msgid "Invalid NFS mount path."
-msgstr ""
-"Недопустимый путь монтирования NFS."
+msgstr "Недопустимый путь монтирования NFS."
msgid "No logical device selected."
-msgstr ""
-"Не выбрано логическое устройство."
+msgstr "Не выбрано логическое устройство."
msgid "The iSCSI target can not be blank."
-msgstr ""
-"Не указан целевой объект iSCSI."
+msgstr "Не указан целевой объект iSCSI."
msgid "Server name can not be blank."
-msgstr ""
-"Не указано имя сервера."
+msgstr "Не указано имя сервера."
msgid "This is not a valid Server Name or IP. Please, modify it."
-msgstr ""
-"Это не допустимое имя или IP-адрес сервера. Измените его."
+msgstr "Это не допустимое имя или IP-адрес сервера. Измените его."
msgid "Looking for available partitions ..."
-msgstr ""
-"Поиск доступных разделов..."
+msgstr "Поиск доступных разделов..."
msgid "No available partitions found."
-msgstr ""
-"Не найдены доступные разделы."
+msgstr "Не найдены доступные разделы."
msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Этот пул памяти не постоянный. Вместо деактивации, это действие "
-"безвозвратно удалит его. Продолжить?"
+"Этот пул памяти не постоянный. Вместо деактивации, это действие безвозвратно "
+"удалит его. Продолжить?"
msgid "Unable to retrieve partitions information."
-msgstr ""
-"Не удалось получить информацию о разделах."
+msgstr "Не удалось получить информацию о разделах."
msgid "In progress..."
-msgstr ""
-"Выполнение..."
+msgstr "Выполнение..."
msgid "Failed!"
-msgstr ""
-"Сбой!"
+msgstr "Сбой!"
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
msgstr ""
-"Путь к CDROM должен быть правильным локальным или удаленным путем и не может быть пустым."
+"Путь к CDROM должен быть правильным локальным или удаленным путем и не может "
+"быть пустым."
msgid "Disk pool or volume cannot be blank."
-msgstr ""
-"Не указан пул или том диска."
+msgstr "Не указан пул или том диска."
msgid "Peers"
-msgstr ""
-"Равноправные узлы"
+msgstr "Равноправные узлы"
msgid "Searching"
-msgstr ""
-"Поиск"
+msgstr "Поиск"
msgid "No peers found."
-msgstr ""
-"Не найдены равноправные узлы."
+msgstr "Не найдены равноправные узлы."
msgid "Help"
-msgstr ""
-"Справка"
+msgstr "Справка"
msgid "About"
-msgstr ""
-"О программе"
+msgstr "О программе"
msgid "Log out"
-msgstr ""
-"Закрыть сеанс"
+msgstr "Закрыть сеанс"
msgid "Version:"
-msgstr ""
-"Версия:"
+msgstr "Версия:"
msgid "Session timeout, please re-login."
-msgstr ""
-"Тайм-аут сеанса. Пожалуйста, войдите заново."
+msgstr "Тайм-аут сеанса. Пожалуйста, войдите заново."
msgid "User Name"
-msgstr ""
-"Имя пользователя"
+msgstr "Имя пользователя"
msgid "Password"
-msgstr ""
-"Пароль"
+msgstr "Пароль"
msgid "Generate a New Debug Report"
-msgstr ""
-"Создать новый отладочный отчет"
+msgstr "Создать новый отладочный отчет"
msgid "Report Name"
-msgstr ""
-"Имя отчета"
+msgstr "Имя отчета"
msgid ""
"The name used to identify the report. If omitted, a name will be chosen "
"based on current time. Name can contain: letters, digits, underscore (\"_\") "
"and hyphen (\"-\")."
msgstr ""
-"Имя для идентификации отчета. Если не указано, имя будет "
-"сформировано на основе текущего времени. Имя может включать буквы, цифры, подчеркивания (\"_\") "
-"и дефисы (\"-\")."
+"Имя для идентификации отчета. Если не указано, имя будет сформировано на "
+"основе текущего времени. Имя может включать буквы, цифры, подчеркивания (\"_"
+"\") и дефисы (\"-\")."
msgid "Rename a Debug Report"
-msgstr ""
-"Переименовать отладочный отчет"
+msgstr "Переименовать отладочный отчет"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
"hyphen (\"-\")."
msgstr ""
-"Имя, используемое для идентификации отчета. Имя может включать буквы, цифры и "
-"подчеркивания (\"-\")."
+"Имя, используемое для идентификации отчета. Имя может включать буквы, цифры "
+"и подчеркивания (\"-\")."
msgid "Submit"
-msgstr ""
-"Отправить"
+msgstr "Отправить"
msgid "Add a Repository"
-msgstr ""
-"Добавить хранилище"
+msgstr "Добавить хранилище"
msgid "Identifier"
-msgstr ""
-"Идентификатор"
+msgstr "Идентификатор"
msgid "Single word, unique identifier for the repository."
-msgstr ""
-"Одиночное слово - уникальный идентификатор хранилища."
+msgstr "Одиночное слово - уникальный идентификатор хранилища."
msgid "Textual name for the repository."
-msgstr ""
-"Текстовое имя хранилища."
+msgstr "Текстовое имя хранилища."
msgid "URL"
-msgstr ""
-"URL"
+msgstr "URL"
msgid "Required Field"
-msgstr ""
-"Обязательное поле"
+msgstr "Обязательное поле"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
-msgstr ""
-"URL хранилища. Поддерживаемые протоколы: http, ftp, file."
+msgstr "URL хранилища. Поддерживаемые протоколы: http, ftp, file."
msgid "Repository is a mirror"
-msgstr ""
-"Хранилище является зеркальной копией"
+msgstr "Хранилище является зеркальной копией"
msgid "Distribution"
-msgstr ""
-"Вариант"
+msgstr "Вариант"
msgid "Distribution of the DEB repository."
-msgstr ""
-"Вариант хранилища DEB."
+msgstr "Вариант хранилища DEB."
msgid "Components"
-msgstr ""
-"Компоненты"
+msgstr "Компоненты"
msgid "List of components in DEB repository."
-msgstr ""
-"Список компонентов в хранилище DEB."
+msgstr "Список компонентов в хранилище DEB."
msgid "Edit Repository"
-msgstr ""
-"Изменить хранилище"
+msgstr "Изменить хранилище"
msgid "Mirror List URL"
-msgstr ""
-"URL списка зеркальных копий"
+msgstr "URL списка зеркальных копий"
msgid "Yes"
-msgstr ""
-"Да"
+msgstr "Да"
msgid "No"
-msgstr ""
-"Нет"
+msgstr "Нет"
msgid "Add a Volume to Storage Pool"
-msgstr ""
-"Добавить том в пул памяти"
+msgstr "Добавить том в пул памяти"
msgid "Fetch from remote URL"
-msgstr ""
-"Загрузить с удаленного URL"
+msgstr "Загрузить с удаленного URL"
msgid "Enter the remote URL here."
-msgstr ""
-"Введите сюда удаленный URL."
+msgstr "Введите сюда удаленный URL."
msgid "Upload a file"
-msgstr ""
-"Передать файл"
+msgstr "Передать файл"
msgid "Choose the file you want to upload."
-msgstr ""
-"Выберите файл для передачи."
+msgstr "Выберите файл для передачи."
msgid "Define a New Storage Pool"
-msgstr ""
-"Создать пул памяти"
+msgstr "Создать пул памяти"
msgid "Storage Pool Name"
-msgstr ""
-"Имя пула памяти"
+msgstr "Имя пула памяти"
msgid ""
"The name used to identify the storage pools, and it should not be empty."
-msgstr ""
-"Имя для идентификации пулов памяти. Не может быть пустым."
+msgstr "Имя для идентификации пулов памяти. Не может быть пустым."
msgid "Storage Pool Type"
-msgstr ""
-"Тип пула памяти"
+msgstr "Тип пула памяти"
msgid "Storage Path"
-msgstr ""
-"Путь к диску"
+msgstr "Путь к диску"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
-msgstr ""
-"Путь к пулу памяти. Каждый пул памяти должен иметь уникальный путь."
+msgstr "Путь к пулу памяти. Каждый пул памяти должен иметь уникальный путь."
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
"your system."
-msgstr ""
-"Kimchi попытается создать каталог, если он не существует "
-"в системе."
+msgstr "Kimchi попытается создать каталог, если он не существует в системе."
msgid "NFS Server IP"
-msgstr ""
-"IP-адрес сервера NFS"
+msgstr "IP-адрес сервера NFS"
msgid "NFS server IP or hostname. It can be input or chosen from history."
msgstr ""
-"IP-адрес или имя хоста сервера NFS. Его можно ввести или выбрать в хронологии."
+"IP-адрес или имя хоста сервера NFS. Его можно ввести или выбрать в "
+"хронологии."
msgid "NFS Path"
-msgstr ""
-"Путь NFS"
+msgstr "Путь NFS"
msgid "The NFS exported path on NFS server."
-msgstr ""
-"Экспортированный путь NFS на сервере NFS."
+msgstr "Экспортированный путь NFS на сервере NFS."
msgid "Device path"
-msgstr ""
-"Путь к устройству"
+msgstr "Путь к устройству"
msgid "iSCSI Server"
-msgstr ""
-"Сервер iSCSI"
+msgstr "Сервер iSCSI"
msgid "iSCSI server IP or hostname. It should not be empty."
-msgstr ""
-"IP-адрес или имя хоста сервера iSCSI. Не может быть пустым."
+msgstr "IP-адрес или имя хоста сервера iSCSI. Не может быть пустым."
msgid "Server"
-msgstr ""
-"Сервер"
+msgstr "Сервер"
msgid "Port"
-msgstr ""
-"Порт"
+msgstr "Порт"
msgid "Target"
-msgstr ""
-"Целевой объект"
+msgstr "Целевой объект"
msgid "The iSCSI target on iSCSI server"
-msgstr ""
-"Целевой объект iSCSI на сервере iSCSI"
+msgstr "Целевой объект iSCSI на сервере iSCSI"
msgid "Add iSCSI Authentication"
-msgstr ""
-"Добавить идентификацию iSCSI"
+msgstr "Добавить идентификацию iSCSI"
msgid "iSCSI Authentication"
-msgstr ""
-"Идентификация iSCSI"
+msgstr "Идентификация iSCSI"
msgid "SCSI Adapter"
-msgstr ""
-"Адаптер SCSI"
+msgstr "Адаптер SCSI"
msgid "Please, wait..."
-msgstr ""
-"Подождите..."
+msgstr "Подождите..."
msgid "Add Template"
-msgstr ""
-"Добавить шаблон"
+msgstr "Добавить шаблон"
msgid "Where is the source media for this template? "
-msgstr ""
-"Где находится исходный носитель для этого шаблона? "
+msgstr "Где находится исходный носитель для этого шаблона? "
msgid "Local ISO Image"
-msgstr ""
-"Локальный образ ISO"
+msgstr "Локальный образ ISO"
msgid "Local Image File"
-msgstr ""
-"Локальный файл образа"
+msgstr "Локальный файл образа"
msgid "Remote ISO Image"
-msgstr ""
-"Удаленный образ ISO"
+msgstr "Удаленный образ ISO"
msgid "Search ISOs"
-msgstr ""
-"Поиск образов ISO"
+msgstr "Поиск образов ISO"
msgid "The following ISOs are available:"
-msgstr ""
-"Доступные образы ISO:"
+msgstr "Доступные образы ISO:"
msgid "OS: "
-msgstr ""
-"ОС: "
+msgstr "ОС: "
msgid "Version: "
-msgstr ""
-"Версия: "
+msgstr "Версия: "
msgid "Size: "
-msgstr ""
-"Размер: "
+msgstr "Размер: "
msgid "Search more ISOs"
-msgstr ""
-"Поиск дополнительных образов ISO"
+msgstr "Поиск дополнительных образов ISO"
msgid "Create Templates from Selected ISO"
-msgstr ""
-"Создать шаблоны из выбранных образов ISO"
+msgstr "Создать шаблоны из выбранных образов ISO"
msgid "I want to use a specific ISO file"
-msgstr ""
-"Использовать конкретный файл ISO"
+msgstr "Использовать конкретный файл ISO"
msgid "Loading default remote ISOs ..."
-msgstr ""
-"Загрузка удаленных ISO по умолчанию..."
+msgstr "Загрузка удаленных ISO по умолчанию..."
msgid "Arch: "
-msgstr ""
-"Архитектура: "
+msgstr "Архитектура: "
msgid "I want to use a custom URL"
-msgstr ""
-"Использовать другой URL"
+msgstr "Использовать другой URL"
msgid "Edit Template"
-msgstr ""
-"Изменить шаблон"
+msgstr "Изменить шаблон"
msgid "Processor"
-msgstr ""
-"Процессор"
+msgstr "Процессор"
msgid "CDROM"
-msgstr ""
-"CDROM"
+msgstr "CDROM"
msgid "Image File"
-msgstr ""
-"Файл образа"
+msgstr "Файл образа"
msgid "Graphics"
-msgstr ""
-"Графика"
+msgstr "Графика"
msgid "Disk(GB)"
-msgstr ""
-"Диск (ГБ)"
+msgstr "Диск (ГБ)"
msgid "Disk Format"
-msgstr ""
-"Формат диска"
+msgstr "Формат диска"
msgid "CPU Number"
-msgstr ""
-"Количество процессоров"
+msgstr "Количество процессоров"
msgid "Manually set CPU topology"
-msgstr ""
-"Вручную настроить топологию процессоров"
+msgstr "Вручную настроить топологию процессоров"
msgid "Cores"
-msgstr ""
-"Ядра"
+msgstr "Ядра"
msgid "Threads"
-msgstr ""
-"Нити"
+msgstr "Нити"
msgid "CPU"
-msgstr ""
-"Процессор"
+msgstr "Процессор"
msgid "Disk I/O"
-msgstr ""
-"Дисковый ввод-вывод"
+msgstr "Дисковый ввод-вывод"
msgid "Network I/O"
-msgstr ""
-"Сетевой ввод-вывод"
+msgstr "Сетевой ввод-вывод"
msgid "Livetile"
-msgstr ""
-"Livetile"
+msgstr "Livetile"
msgid "No guests found."
-msgstr ""
-"Не найдены гостевые системы."
+msgstr "Не найдены гостевые системы."
msgid "Shut down"
-msgstr ""
-"Выключен"
+msgstr "Выключен"
msgid "Restart"
-msgstr ""
-"Перезапуск"
+msgstr "Перезапуск"
msgid "Basic Information"
-msgstr ""
-"Базовая информация"
+msgstr "Базовая информация"
msgid "OS Distro"
-msgstr ""
-"Вариант ОС"
+msgstr "Вариант ОС"
msgid "OS Code Name"
-msgstr ""
-"Кодовое имя ОС"
+msgstr "Кодовое имя ОС"
msgid "CPU(s)"
-msgstr ""
-"Процессоры"
+msgstr "Процессоры"
msgid "System Statistics"
-msgstr ""
-"Системная статистика"
+msgstr "Системная статистика"
msgid "Update Progress"
-msgstr ""
-"Ход обновления"
+msgstr "Ход обновления"
msgid "Network Name"
-msgstr ""
-"Имя сети"
+msgstr "Имя сети"
msgid "State"
-msgstr ""
-"Состояние"
+msgstr "Состояние"
msgid "Network Type"
-msgstr ""
-"Тип сети"
+msgstr "Тип сети"
msgid "Address Space"
-msgstr ""
-"Адресное пространство"
+msgstr "Адресное пространство"
msgid "Name should not contain '/' and '\"'."
-msgstr ""
-"Имя не должно содержать '/' и '\"'."
+msgstr "Имя не должно содержать '/' и '\"'."
msgid "Isolated: no external network connection"
-msgstr ""
-"Изолированный: без внешних сетевых соединений"
+msgstr "Изолированный: без внешних сетевых соединений"
msgid "NAT: outbound physical network connection only"
-msgstr ""
-"NAT (только исходящее физическое сетевое соединение)"
+msgstr "NAT (только исходящее физическое сетевое соединение)"
msgid "Bridged: Virtual machines are connected to physical network directly"
-msgstr ""
-"Через мост (прямое подключение виртуальных машин к физической сети)"
+msgstr "Через мост (прямое подключение виртуальных машин к физической сети)"
msgid "(No interfaces found)"
-msgstr ""
-"(Интерфейсы не найдены)"
+msgstr "(Интерфейсы не найдены)"
msgid "Destination"
-msgstr ""
-"Целевое расположение"
+msgstr "Целевое расположение"
msgid "Enable VLAN"
-msgstr ""
-"Включить VLAN"
+msgstr "Включить VLAN"
msgid "VLAN ID"
-msgstr ""
-"Идентификатор VLAN"
+msgstr "Идентификатор VLAN"
msgid "Stop"
-msgstr ""
-"Завершить"
+msgstr "Завершить"
msgid "%Used"
-msgstr ""
-"%Используется"
+msgstr "%Используется"
msgid "Location"
-msgstr ""
-"Расположение"
+msgstr "Расположение"
msgid "Capacity"
-msgstr ""
-"Емкость"
+msgstr "Емкость"
msgid "Allocated"
-msgstr ""
-"Выделено"
+msgstr "Выделено"
msgid "active"
-msgstr ""
-"активен"
+msgstr "активен"
msgid "inactive"
-msgstr ""
-"неактивен"
+msgstr "неактивен"
msgid "Deactivate"
-msgstr ""
-"Выключить"
+msgstr "Выключить"
msgid "Activate"
-msgstr ""
-"Активировать"
+msgstr "Активировать"
msgid "Add Volume"
-msgstr ""
-"Добавить том"
+msgstr "Добавить том"
msgid "Extend"
-msgstr ""
-"Расширить"
+msgstr "Расширить"
msgid "Undefine"
-msgstr ""
-"Удалить"
+msgstr "Удалить"
msgid "Format"
-msgstr ""
-"Формат"
+msgstr "Формат"
msgid "Allocation"
-msgstr ""
-"Выделение"
+msgstr "Выделение"
msgid "No templates found."
-msgstr ""
-"Не найдены шаблоны."
-
-# ENGL1SH_VERS10N 28617_40 DO NOT REMOVE OR CHANGE THIS LINE
-# T9N_SRC_ID 92
-# T9N_SH1P_STR1NG KV310AAP001 1
+msgstr "Не найдены шаблоны."
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 718036e..7d3723b 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -6,169 +6,140 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-06-24 09:39-0300\n"
+"POT-Creation-Date: 2015-08-21 09:52-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
-"Language: en_US\n"
+"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"Plural-Forms: nplurals=1; plural=0;"
+"Plural-Forms: nplurals=1; plural=0;\n"
#, python-format
msgid "Unknown parameter %(value)s"
-msgstr ""
-"未知参数 %(value)s"
+msgstr "未知参数 %(value)s"
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr ""
-"不允许删除 %(resource)s"
+msgstr "不允许删除 %(resource)s"
#, python-format
msgid "%(resource)s does not implement update method"
-msgstr ""
-"%(resource)s 未实现更新方法"
+msgstr "%(resource)s 未实现更新方法"
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr ""
-"不允许创建 %(resource)s"
+msgstr "不允许创建 %(resource)s"
msgid "Unable to parse JSON request"
-msgstr ""
-"无法解析 JSON 请求"
+msgstr "无法解析 JSON 请求"
msgid "This API only supports JSON"
-msgstr ""
-"此 API 仅支持 JSON"
+msgstr "此 API 仅支持 JSON"
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
-msgstr ""
-"参数与模式中的需求不匹配:%(err)s"
+msgstr "参数与模式中的需求不匹配:%(err)s"
msgid "You don't have permission to perform this operation."
-msgstr ""
-"您不具有执行此操作的许可权。"
+msgstr "您不具有执行此操作的许可权。"
msgid "Datastore is not initiated in the model object."
-msgstr ""
-"未在模型对象中启动数据存储器。"
+msgstr "未在模型对象中启动数据存储器。"
#, python-format
msgid "Unable to start task due error: %(err)s"
-msgstr ""
-"无法启动任务,因为发生了错误:%(err)s"
+msgstr "无法启动任务,因为发生了错误:%(err)s"
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
-msgstr ""
-"运行以下任务时,%(seconds)s 秒的超时已到期:%(task)s。"
+msgstr "运行以下任务时,%(seconds)s 秒的超时已到期:%(task)s。"
#, python-format
msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
-msgstr ""
-"对用户“%(username)s”的认证失败。[错误代码:%(code)s]"
+msgstr "对用户“%(username)s”的认证失败。[错误代码:%(code)s]"
msgid "You are not authorized to access Kimchi"
-msgstr ""
-"您无权访问 Kimchi"
+msgstr "您无权访问 Kimchi"
#, python-format
msgid "Specify %(item)s to login into Kimchi"
-msgstr ""
-"指定 %(item)s 以登录 Kimchi"
+msgstr "指定 %(item)s 以登录 Kimchi"
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
-msgstr ""
-"找不到具有给定 LDAP 设置的用户 %(user_id)s。"
+msgstr "找不到具有给定 LDAP 设置的用户 %(user_id)s。"
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
-msgstr ""
-"无效 LDAP 配置:%(item)s : %(value)s"
+msgstr "无效 LDAP 配置:%(item)s : %(value)s"
msgid "Unknown \"_cap\" specified"
-msgstr ""
-"指定了未知“_cap”"
+msgstr "指定了未知“_cap”"
msgid "\"_passthrough\" should be \"true\" or \"false\""
-msgstr ""
-"“_passthrough”应该为“true”或“false”"
+msgstr "“_passthrough”应该为“true”或“false”"
msgid "\"_passthrough_affected_by\" should be a device name string"
-msgstr ""
-"“_passthrough_affected_by”应该为设备名字符串"
+msgstr "“_passthrough_affected_by”应该为设备名字符串"
+
+msgid "\"_available_only\" should be \"true\" or \"false\""
+msgstr "“_available_only”应该为“true”或“false”"
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
-msgstr ""
-"获取块设备时出错。详细信息:%(err)s"
+msgstr "获取块设备时出错。详细信息:%(err)s"
#, python-format
msgid "Error while getting block device information for %(device)s."
-msgstr ""
-"获取 %(device)s 的块设备信息时出错。"
+msgstr "获取 %(device)s 的块设备信息时出错。"
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr ""
-"找不到 Distro 文件:%(filename)s"
+msgstr "找不到 Distro 文件:%(filename)s"
#, python-format
msgid ""
"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
-msgstr ""
-"无法解析 Distro 文件:%(filename)s。请确保该文件是 JSON 文件。"
+msgstr "无法解析 Distro 文件:%(filename)s。请确保该文件是 JSON 文件。"
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
-msgstr ""
-"无法登录 iSCSI 主机目标 %(portal)s。详细信息:%(err)s"
+msgstr "无法登录 iSCSI 主机目标 %(portal)s。详细信息:%(err)s"
#, python-format
msgid "Unable to login to iSCSI host %(host)s target %(target)s"
-msgstr ""
-"无法登录 iSCSI 主机 %(host)s 目标 %(target)s"
+msgstr "无法登录 iSCSI 主机 %(host)s 目标 %(target)s"
#, python-format
msgid "Unable to find ISO file %(filename)s"
-msgstr ""
-"找不到 ISO 文件 %(filename)s"
+msgstr "找不到 ISO 文件 %(filename)s"
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr ""
-"ISO 文件 %(filename)s 不可引导"
+msgstr "ISO 文件 %(filename)s 不可引导"
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
-msgstr ""
-"ISO 文件 %(filename)s 没有有效的 EI Torito 引导记录"
+msgstr "ISO 文件 %(filename)s 没有有效的 EI Torito 引导记录"
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
-msgstr ""
-"ISO %(filename)s 中的 El Torito 验证条目无效"
+msgstr "ISO %(filename)s 中的 El Torito 验证条目无效"
#, python-format
msgid "Invalid El Torito boot indicator in ISO %(filename)s"
-msgstr ""
-"ISO %(filename)s 中的 El Torito 引导指示符无效"
+msgstr "ISO %(filename)s 中的 El Torito 引导指示符无效"
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
-msgstr ""
-"ISO %(filename)s 中的主卷具有意外的卷类型"
+msgstr "ISO %(filename)s 中的主卷具有意外的卷类型"
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
-msgstr ""
-"在 ISO %(filename)s 中读取卷描述符时格式不正确"
+msgstr "在 ISO %(filename)s 中读取卷描述符时格式不正确"
#, python-format
msgid ""
@@ -178,265 +149,211 @@ msgid ""
"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
"'path_to_iso'.Details: %(err)s"
msgstr ""
-"管理程序不具使用此 ISO %(filename)s 的许可权。"
-"请考虑将其移至 /var/lib/libvirt 下,或者"
-"为“%(user)s”用户设置对文件访问控制表的搜索许可权(如果可以设置),"
-"或者将“%(user)s”添加至 ISO 路径组,或者(不建议)执行“chmod -R o+x "
+"管理程序不具使用此 ISO %(filename)s 的许可权。请考虑将其移至 /var/lib/"
+"libvirt 下,或者为“%(user)s”用户设置对文件访问控制表的搜索许可权(如果可以设"
+"置),或者将“%(user)s”添加至 ISO 路径组,或者(不建议)执行“chmod -R o+x "
"path_to_iso”。详细信息:%(err)s"
msgid "An error occurred when probing image OS information."
-msgstr ""
-"探测映像操作系统信息时发生错误。"
+msgstr "探测映像操作系统信息时发生错误。"
msgid "No OS information found in given image."
-msgstr ""
-"在给定映像中找不到操作系统信息。"
+msgstr "在给定映像中找不到操作系统信息。"
#, python-format
msgid "Unable to read image file %(filename)s"
-msgstr ""
-"无法读取映像文件 %(filename)s"
+msgstr "无法读取映像文件 %(filename)s"
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
-msgstr ""
-"映像文件必须是系统上的现有文件。%(filename)s 不是有效"
-"输入。"
+msgstr "映像文件必须是系统上的现有文件。%(filename)s 不是有效输入。"
#, python-format
msgid "Virtual machine %(name)s already exists"
-msgstr ""
-"虚拟机 %(name)s 已存在"
+msgstr "虚拟机 %(name)s 已存在"
#, python-format
msgid "Virtual machine %(name)s does not exist"
-msgstr ""
-"虚拟机 %(name)s 不存在"
+msgstr "虚拟机 %(name)s 不存在"
#, python-format
msgid ""
"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
"in use or the virtual machine is not powered off."
msgstr ""
-"无法对虚拟机 %(name)s 进行重命名。名称 %(new_name)s 已"
-"在使用中,或者该虚拟机未关闭电源。"
+"无法对虚拟机 %(name)s 进行重命名。名称 %(new_name)s 已在使用中,或者该虚拟机"
+"未关闭电源。"
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
-msgstr ""
-"无法检索已停止虚拟机 %(name)s 的屏幕快照"
+msgstr "无法检索已停止虚拟机 %(name)s 的屏幕快照"
msgid "Remote ISO image is not supported by this server."
-msgstr ""
-"远程 ISO 映像不受此服务器支持。"
+msgstr "远程 ISO 映像不受此服务器支持。"
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
-msgstr ""
-"屏幕快照在虚拟机 %(name)s 上不受支持"
+msgstr "屏幕快照在虚拟机 %(name)s 上不受支持"
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"无法创建虚拟机 %(name)s。详细信息:%(err)s"
+msgstr "无法创建虚拟机 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"无法更新虚拟机 %(name)s。详细信息:%(err)s"
+msgstr "无法更新虚拟机 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"无法检索虚拟机 %(name)s。详细信息:%(err)s"
+msgstr "无法检索虚拟机 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to connect to powered off virtual machine %(name)s."
-msgstr ""
-"无法连接到已关闭电源的虚拟机 %(name)s。"
+msgstr "无法连接到已关闭电源的虚拟机 %(name)s。"
msgid "Virtual machine name must be a string without slashes (/)"
-msgstr ""
-"虚拟机名称必须是不带斜杠 (/) 的字符串"
+msgstr "虚拟机名称必须是不带斜杠 (/) 的字符串"
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
-msgstr ""
-"为虚拟机指定的模板 URI %(value)s 无效"
+msgstr "为虚拟机指定的模板 URI %(value)s 无效"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for virtual machine"
-msgstr ""
-"为虚拟机指定的存储池 URI %(value)s 无效"
+msgstr "为虚拟机指定的存储池 URI %(value)s 无效"
msgid "Supported virtual machine graphics are Spice or VNC"
-msgstr ""
-"受支持的虚拟机图形为 Spice 或 VNC"
+msgstr "受支持的虚拟机图形为 Spice 或 VNC"
msgid "Graphics address to listen on must be IPv4 or IPv6"
-msgstr ""
-"要侦听的图形地址必须是 IPv4 或 IPv6"
+msgstr "要侦听的图形地址必须是 IPv4 或 IPv6"
msgid "Specify a template to create a virtual machine from"
-msgstr ""
-"指定要从其创建虚拟机的模板"
+msgstr "指定要从其创建虚拟机的模板"
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"无法启动虚拟机 %(name)s。详细信息:%(err)s"
+msgstr "无法启动虚拟机 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"无法关闭虚拟机 %(name)s 的电源。详细信息:%(err)s"
+msgstr "无法关闭虚拟机 %(name)s 的电源。详细信息:%(err)s"
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"无法删除虚拟机 %(name)s。详细信息:%(err)s"
+msgstr "无法删除虚拟机 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"无法重置虚拟机 %(name)s。详细信息:%(err)s"
+msgstr "无法重置虚拟机 %(name)s。详细信息:%(err)s"
msgid "User name list must be an array"
-msgstr ""
-"用户名列表必须是数组"
+msgstr "用户名列表必须是数组"
msgid "User name must be a string"
-msgstr ""
-"用户名必须是字符串"
+msgstr "用户名必须是字符串"
msgid "Group name list must be an array"
-msgstr ""
-"组名列表必须是数组"
+msgstr "组名列表必须是数组"
msgid "Group name must be a string"
-msgstr ""
-"组名必须是字符串"
+msgstr "组名必须是字符串"
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr ""
-"用户“%(users)s”不存在"
+msgstr "用户“%(users)s”不存在"
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr ""
-"组“%(groups)s”不存在"
+msgstr "组“%(groups)s”不存在"
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"无法关闭虚拟机 %(name)s。详细信息:%(err)s"
+msgstr "无法关闭虚拟机 %(name)s。详细信息:%(err)s"
#, python-format
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"无法访问虚拟机 %(name)s 的元数据。详细信息:%(err)s"
+msgstr "无法访问虚拟机 %(name)s 的元数据。详细信息:%(err)s"
msgid "The guest console password must be a string."
-msgstr ""
-"访客控制台密码必须是字符串。"
+msgstr "访客控制台密码必须是字符串。"
msgid "The life time for the guest console password must be a number."
-msgstr ""
-"访客控制台密码的有效期必须是数字。"
+msgstr "访客控制台密码的有效期必须是数字。"
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
-msgstr ""
-"在对虚拟机“%(name)s”进行克隆之前,必须将其停止。"
+msgstr "在对虚拟机“%(name)s”进行克隆之前,必须将其停止。"
#, python-format
msgid "Insufficient disk space to clone virtual machine '%(name)s'"
-msgstr ""
-"没有足够的磁盘空间,无法对虚拟机“%(name)s”进行克隆"
+msgstr "没有足够的磁盘空间,无法对虚拟机“%(name)s”进行克隆"
#, python-format
msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
-msgstr ""
-"无法对 VM“%(name)s”进行克隆。详细信息:%(err)s"
+msgstr "无法对 VM“%(name)s”进行克隆。详细信息:%(err)s"
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
-msgstr ""
-"对非持久性虚拟机 %(name)s 的操作无效"
+msgstr "对非持久性虚拟机 %(name)s 的操作无效"
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
-msgstr ""
-"无法暂挂 VM“%(name)s”,因为它未在运行。"
+msgstr "无法暂挂 VM“%(name)s”,因为它未在运行。"
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
-msgstr ""
-"无法暂挂 VM“%(name)s”。详细信息:%(err)s"
+msgstr "无法暂挂 VM“%(name)s”。详细信息:%(err)s"
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
-msgstr ""
-"无法恢复 VM“%(name)s”,因为它未暂停。"
+msgstr "无法恢复 VM“%(name)s”,因为它未暂停。"
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
-msgstr ""
-"无法恢复 VM“%(name)s”。详细信息:%(err)s"
+msgstr "无法恢复 VM“%(name)s”。详细信息:%(err)s"
msgid "Memory assigned is higher then the maximum allowed in the host."
-msgstr ""
-"分配的内存超过了主机中允许的最大内存。"
+msgstr "分配的内存超过了主机中允许的最大内存。"
#, python-format
msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
-"VM“%(name)s”不支持实时内存更新。请在机器脱机的情况下"
-"更新内存以启用此功能。"
+"VM“%(name)s”不支持实时内存更新。请在机器脱机的情况下更新内存以启用此功能。"
msgid "Only increase memory is allowed in active VMs"
-msgstr ""
-"仅允许在活动 VM 中增加内存"
+msgstr "仅允许在活动 VM 中增加内存"
msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
-msgstr ""
-"对于实时内存更新,新内存值必须等于旧内存值加上 "
-"1024 Mib 的倍数"
+msgstr "对于实时内存更新,新内存值必须等于旧内存值加上 1024 Mib 的倍数"
msgid "There are not enough free slots of 1024 Mib in the guest."
-msgstr ""
-"访客中没有足够的可用插槽(大小为 1024 Mib)。"
+msgstr "访客中没有足够的可用插槽(大小为 1024 Mib)。"
msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
-msgstr ""
-"主机的 Libvirt 版本不支持内存设备。Libvirt 必须 >= "
-"1.2.14"
+msgstr "主机的 Libvirt 版本不支持内存设备。Libvirt 必须 >= 1.2.14"
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
-msgstr ""
-"连接内存设备时出错。详细信息:%(error)s"
+msgstr "连接内存设备时出错。详细信息:%(error)s"
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
-msgstr ""
-"VM %(vmid)s 不包含直接分配的主机设备 %(dev_name)s。"
+msgstr "VM %(vmid)s 不包含直接分配的主机设备 %(dev_name)s。"
#, python-format
msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
-msgstr ""
-"不允许将主机设备 %(dev_name)s 直接分配给 VM。"
+msgstr "不允许将主机设备 %(dev_name)s 直接分配给 VM。"
msgid ""
"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
@@ -445,2397 +362,1835 @@ msgid ""
"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
"iommu=1."
msgstr ""
-"找不到任何 IOMMU 组。主机 PCI 联通需要 IOMMU 组才能"
-"正常工作。请在 BIOS 中启用 Intel VT-d 或 AMD IOMMU,"
-"然后验证“内核”是否已使用 IOMMU 支持编译。对于 Intel CPU,请将 intel_iommu=on "
-"添加至 /boot/grub2/grub.conf 中的内核参数。对于 AMD CPU,请添加 iommu=pt "
-"iommu=1。"
+"找不到任何 IOMMU 组。主机 PCI 联通需要 IOMMU 组才能正常工作。请在 BIOS 中启"
+"用 Intel VT-d 或 AMD IOMMU,然后验证“内核”是否已使用 IOMMU 支持编译。对于 "
+"Intel CPU,请将 intel_iommu=on 添加至 /boot/grub2/grub.conf 中的内核参数。对"
+"于 AMD CPU,请添加 iommu=pt iommu=1。"
msgid "\"name\" should be a device name string"
-msgstr ""
-"“name”应该为设备名字符串"
+msgstr "“name”应该为设备名字符串"
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
-msgstr ""
-"主机可能正在使用设备 %(name)s。无法将该设备连接到"
-"访客。"
+msgstr "主机可能正在使用设备 %(name)s。无法将该设备连接到访客。"
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
-msgstr ""
-"接口 %(iface)s 在虚拟机 %(name)s 中不存在"
+msgstr "接口 %(iface)s 在虚拟机 %(name)s 中不存在"
#, python-format
msgid ""
"Network %(network)s specified for virtual machine %(name)s does not exist"
-msgstr ""
-"为以下虚拟机指定的网络 %(network)s 不存在:%(name)s"
+msgstr "为以下虚拟机指定的网络 %(network)s 不存在:%(name)s"
msgid "Supported virtual machine interfaces type is only network"
-msgstr ""
-"受支持的虚拟机接口类型只有网络"
+msgstr "受支持的虚拟机接口类型只有网络"
msgid "Network name for virtual machine interface must be a string"
-msgstr ""
-"虚拟机接口的网络名必须是字符串"
+msgstr "虚拟机接口的网络名必须是字符串"
msgid "Invalid network model card specified for virtual machine interface"
-msgstr ""
-"为虚拟机接口所指定的网络模型卡无效"
+msgstr "为虚拟机接口所指定的网络模型卡无效"
msgid "Specify type and network to add a new virtual machine interface"
-msgstr ""
-"指定类型和网络以添加新虚拟机接口"
+msgstr "指定类型和网络以添加新虚拟机接口"
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
-msgstr ""
-"MAC 地址必须遵循格式 FF:FF:FF:FF:FF:FF"
+msgstr "MAC 地址必须遵循格式 FF:FF:FF:FF:FF:FF"
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
-msgstr ""
-"MAC 地址 %(mac)s 已在虚拟机 %(name)s 中存在"
+msgstr "MAC 地址 %(mac)s 已在虚拟机 %(name)s 中存在"
msgid "Invalid MAC Address"
-msgstr ""
-"无效 MAC 地址"
+msgstr "无效 MAC 地址"
msgid "Cannot change MAC address of a running virtual machine"
-msgstr ""
-"无法更改正在运行的虚拟机的 MAC 地址"
+msgstr "无法更改正在运行的虚拟机的 MAC 地址"
#, python-format
msgid "Template %(name)s already exists"
-msgstr ""
-"模板 %(name)s 已存在"
+msgstr "模板 %(name)s 已存在"
#, python-format
msgid ""
"Network '%(network)s' specified for template %(template)s does not exist"
-msgstr ""
-"为以下模板指定的网络“%(network)s”不存在:%(template)s"
+msgstr "为以下模板指定的网络“%(network)s”不存在:%(template)s"
#, python-format
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
-msgstr ""
-"为以下模板指定的存储池 %(pool)s 不存在:%(template)s"
+msgstr "为以下模板指定的存储池 %(pool)s 不存在:%(template)s"
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
-msgstr ""
-"为以下模板指定的存储池 %(pool)s 未处于活动状态:%(template)s"
+msgstr "为以下模板指定的存储池 %(pool)s 未处于活动状态:%(template)s"
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr ""
-"为 CDROM 指定的参数“%(param)s”无效。"
+msgstr "为 CDROM 指定的参数“%(param)s”无效。"
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
-msgstr ""
-"为以下模板指定的网络 %(network)s 未处于活动状态:%(template)s"
+msgstr "为以下模板指定的网络 %(network)s 未处于活动状态:%(template)s"
msgid "Template name must be a string"
-msgstr ""
-"模板名称必须是字符串"
+msgstr "模板名称必须是字符串"
msgid "Template icon must be a path to the image"
-msgstr ""
-"模板图标必须是映像的路径"
+msgstr "模板图标必须是映像的路径"
msgid "Template distribution must be a string"
-msgstr ""
-"模板分发版必须是字符串"
+msgstr "模板分发版必须是字符串"
msgid "Template distribution version must be a string"
-msgstr ""
-"模板分发版版本必须是字符串"
+msgstr "模板分发版版本必须是字符串"
msgid "The number of CPUs must be an integer greater than 0"
-msgstr ""
-"CPU 的数目必须是一个大于 0 的整数"
+msgstr "CPU 的数目必须是一个大于 0 的整数"
msgid "Amount of memory (MB) must be an integer greater than 512"
-msgstr ""
-"内存量 (MB) 必须是一个大于 512 的整数"
+msgstr "内存量 (MB) 必须是一个大于 512 的整数"
msgid "Template CDROM must be a local or remote ISO file"
-msgstr ""
-"模板 CDROM 必须是一个本地或远程 ISO 文件"
+msgstr "模板 CDROM 必须是一个本地或远程 ISO 文件"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for template"
-msgstr ""
-"为模板指定的存储池 URI %(value)s 无效"
+msgstr "为模板指定的存储池 URI %(value)s 无效"
msgid "Specify an ISO image as CDROM or a base image to create a template"
-msgstr ""
-"指定 ISO 映像作为 CDROM 或基本映像以创建模板"
+msgstr "指定 ISO 映像作为 CDROM 或基本映像以创建模板"
msgid "All networks for the template must be specified in a list."
-msgstr ""
-"必须指定列表中模板的所有网络。"
+msgstr "必须指定列表中模板的所有网络。"
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
-msgstr ""
-"当存储池为 iSCSI 或 SCSI 时,请对模板指定卷。"
+msgstr "当存储池为 iSCSI 或 SCSI 时,请对模板指定卷。"
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
-msgstr ""
-"卷 %(volume)s 不在存储池 %(pool)s 中"
+msgstr "卷 %(volume)s 不在存储池 %(pool)s 中"
#, python-format
msgid "Unable to create template due error: %(err)s"
-msgstr ""
-"无法创建模板,因为发生了错误:%(err)s"
+msgstr "无法创建模板,因为发生了错误:%(err)s"
#, python-format
msgid "Unable to delete template due error: %(err)s"
-msgstr ""
-"无法删除模板,因为发生了错误:%(err)s"
+msgstr "无法删除模板,因为发生了错误:%(err)s"
msgid "Disk size must be an integer greater than 1GB."
-msgstr ""
-"磁盘大小必须是大于 1 GB 的整数。"
+msgstr "磁盘大小必须是大于 1 GB 的整数。"
msgid "Template base image must be a valid local image file"
-msgstr ""
-"模板基本映像必须是有效的本地映像文件"
+msgstr "模板基本映像必须是有效的本地映像文件"
#, python-format
msgid "Cannot identify base image %(path)s format"
-msgstr ""
-"无法识别基本映像 %(path)s 格式"
+msgstr "无法识别基本映像 %(path)s 格式"
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
-msgstr ""
-"指定 CPU 拓扑时,vCPU 数必须是套接字数、核心数和"
-"线程数的乘积。"
+msgstr "指定 CPU 拓扑时,vCPU 数必须是套接字数、核心数和线程数的乘积。"
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
"zero."
-msgstr ""
-"指定 CPU 拓扑时,每个元素都必须是大于"
-"零的整数。"
+msgstr "指定 CPU 拓扑时,每个元素都必须是大于零的整数。"
msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"无效磁盘映像格式。有效格式:bochs、cloop、cow、dmg、qcow、"
-"qcow2、qed、raw、vmdk 和 vpc。"
+"无效磁盘映像格式。有效格式:bochs、cloop、cow、dmg、qcow、qcow2、qed、raw、"
+"vmdk 和 vpc。"
#, python-format
msgid "Storage pool %(name)s already exists"
-msgstr ""
-"存储池 %(name)s 已存在"
+msgstr "存储池 %(name)s 已存在"
#, python-format
msgid "Storage pool %(name)s does not exist"
-msgstr ""
-"存储池 %(name)s 不存在"
+msgstr "存储池 %(name)s 不存在"
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
-msgstr ""
-"指定 %(item)s 以创建存储池 %(name)s"
+msgstr "指定 %(item)s 以创建存储池 %(name)s"
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr ""
-"无法删除活动存储池 %(name)s"
+msgstr "无法删除活动存储池 %(name)s"
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
-msgstr ""
-"无法列示存储池。详细信息:%(err)s"
+msgstr "无法列示存储池。详细信息:%(err)s"
#, python-format
msgid "Unable to create storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"无法创建存储池 %(name)s。详细信息:%(err)s"
+msgstr "无法创建存储池 %(name)s。详细信息:%(err)s"
#, python-format
msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
-msgstr ""
-"无法获取存储池 %(name)s 中存储卷的数目。详细信息:"
-"%(err)s"
+msgstr "无法获取存储池 %(name)s 中存储卷的数目。详细信息:%(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"无法激活存储池 %(name)s。详细信息:%(err)s"
+msgstr "无法激活存储池 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"无法取消激活存储池 %(name)s。详细信息:%(err)s"
+msgstr "无法取消激活存储池 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"无法删除存储池 %(name)s。详细信息:%(err)s"
+msgstr "无法删除存储池 %(name)s。详细信息:%(err)s"
#, python-format
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
-msgstr ""
-"无法创建 NFS 池,因为导出路径 %(path)s 可能在安装期间被阻塞"
+msgstr "无法创建 NFS 池,因为导出路径 %(path)s 可能在安装期间被阻塞"
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
-msgstr ""
-"无法创建 NFS 池,因为安装导出路径 %(path)s 失败"
+msgstr "无法创建 NFS 池,因为安装导出路径 %(path)s 失败"
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr ""
-"不受支持的存储池类型:%(type)s"
+msgstr "不受支持的存储池类型:%(type)s"
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
-msgstr ""
-"将存储池 XML 检索至 %(pool)s 时出错"
+msgstr "将存储池 XML 检索至 %(pool)s 时出错"
msgid "Storage pool name must be a string without slashes (/)"
-msgstr ""
-"存储池名称必须是不带斜杠 (/) 的字符串"
+msgstr "存储池名称必须是不带斜杠 (/) 的字符串"
msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
"iso"
-msgstr ""
-"受支持的存储池类型为 dir、netfs、logical、iscsi、isci 和 kimchi-"
-"iso"
+msgstr "受支持的存储池类型为 dir、netfs、logical、iscsi、isci 和 kimchi-iso"
msgid "Storage pool path must be a string"
-msgstr ""
-"存储池路径必须是字符串"
+msgstr "存储池路径必须是字符串"
msgid "Storage pool host must be a IP or hostname"
-msgstr ""
-"存储池主机必须是一个 IP 或主机名"
+msgstr "存储池主机必须是一个 IP 或主机名"
msgid "Storage pool device must be the absolute path to the block device"
-msgstr ""
-"存储池设备必须是块设备的绝对路径"
+msgstr "存储池设备必须是块设备的绝对路径"
msgid "Storage pool devices parameter must be a list"
-msgstr ""
-"存储池设备参数必须是一个列表"
+msgstr "存储池设备参数必须是一个列表"
msgid "Target IQN of an iSCSI pool must be a string"
-msgstr ""
-"iSCSI 池的目标 IQN 必须是字符串"
+msgstr "iSCSI 池的目标 IQN 必须是字符串"
msgid "Port of a remote storage server must be an integer between 1 and 65535"
-msgstr ""
-"远程存储服务器的端口必须是一个介于 1 到 65535 之间的整数"
+msgstr "远程存储服务器的端口必须是一个介于 1 到 65535 之间的整数"
msgid "iSCSI target username must be a string"
-msgstr ""
-"iSCSI 目标用户名必须是字符串"
+msgstr "iSCSI 目标用户名必须是字符串"
msgid "iSCSI target password must be a string"
-msgstr ""
-"iSCSI 目标密码必须是字符串"
+msgstr "iSCSI 目标密码必须是字符串"
msgid "Specify name and type to create a storage pool"
-msgstr ""
-"指定名称和类型以创建存储池"
+msgstr "指定名称和类型以创建存储池"
#, python-format
msgid ""
"%(disk)s is not a valid disk/partition. Could not add it to the pool "
"%(pool)s."
-msgstr ""
-"%(disk)s 不是有效磁盘/分区。无法将其添加至池"
-"%(pool)s。"
+msgstr "%(disk)s 不是有效磁盘/分区。无法将其添加至池%(pool)s。"
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
-msgstr ""
-"无法扩展逻辑池 %(pool)s。详细信息:%(err)s"
+msgstr "无法扩展逻辑池 %(pool)s。详细信息:%(err)s"
msgid "The parameter disks only can be updated for logical storage pool."
-msgstr ""
-"只能更新逻辑存储池的参数磁盘。"
+msgstr "只能更新逻辑存储池的参数磁盘。"
msgid "The SCSI host adapter name must be a string."
-msgstr ""
-"SCSI 主机适配器名称必须是字符串。"
+msgstr "SCSI 主机适配器名称必须是字符串。"
msgid "The storage pool kimchi_isos is reserved for internal use"
-msgstr ""
-"存储池 kimchi_isos 已保留供内部使用"
+msgstr "存储池 kimchi_isos 已保留供内部使用"
#, python-format
msgid ""
"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
-msgstr ""
-"无法激活 NFS 存储池 %(name)s。NFS 服务器 %(server)s"
-"不可访问。"
+msgstr "无法激活 NFS 存储池 %(name)s。NFS 服务器 %(server)s不可访问。"
#, python-format
msgid ""
"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
-msgstr ""
-"无法取消激活 NFS 存储池 %(name)s。NFS 服务器 %(server)s"
-"不可访问。"
+msgstr "无法取消激活 NFS 存储池 %(name)s。NFS 服务器 %(server)s不可访问。"
#, python-format
msgid ""
"Unable to deactivate pool %(name)s as it is associated with some templates"
-msgstr ""
-"无法取消激活池 %(name)s,因为它与某些模板相关联"
+msgstr "无法取消激活池 %(name)s,因为它与某些模板相关联"
#, python-format
msgid "Unable to delete pool %(name)s as it is associated with some templates"
-msgstr ""
-"无法删除池 %(name)s,因为它与某些模板相关联"
+msgstr "无法删除池 %(name)s,因为它与某些模板相关联"
#, python-format
msgid ""
"A volume group named '%(name)s' already exists. Please, choose another name "
"to create the logical pool."
-msgstr ""
-"名为“%(name)s”的卷组已存在。请选择其他名称"
-"以创建逻辑池。"
+msgstr "名为“%(name)s”的卷组已存在。请选择其他名称以创建逻辑池。"
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
-msgstr ""
-"无法使用深度扫描信息更新数据库,因为发生了错误:%(err)s"
+msgstr "无法使用深度扫描信息更新数据库,因为发生了错误:%(err)s"
#, python-format
msgid "Storage volume %(name)s already exists"
-msgstr ""
-"存储卷 %(name)s 已存在"
+msgstr "存储卷 %(name)s 已存在"
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
-msgstr ""
-"存储卷 %(name)s 在存储池 %(pool)s 中不存在"
+msgstr "存储卷 %(name)s 在存储池 %(pool)s 中不存在"
#, python-format
msgid ""
"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
"not active"
-msgstr ""
-"无法创建存储卷 %(volume)s,因为存储池 %(pool)s"
-"未处于活动状态"
+msgstr "无法创建存储卷 %(volume)s,因为存储池 %(pool)s未处于活动状态"
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
-msgstr ""
-"指定 %(item)s 以创建存储卷 %(volume)s"
+msgstr "指定 %(item)s 以创建存储卷 %(volume)s"
#, python-format
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
-msgstr ""
-"无法列示存储卷,因为存储池 %(pool)s 未处于活动状态"
+msgstr "无法列示存储卷,因为存储池 %(pool)s 未处于活动状态"
#, python-format
msgid ""
"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
"%(err)s"
-msgstr ""
-"无法在以下存储池中创建存储卷 %(name)s:%(pool)s。详细信息:"
-"%(err)s"
+msgstr "无法在以下存储池中创建存储卷 %(name)s:%(pool)s。详细信息:%(err)s"
#, python-format
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
-msgstr ""
-"无法列示存储池 %(pool)s 中的存储卷。详细信息:%(err)s"
+msgstr "无法列示存储池 %(pool)s 中的存储卷。详细信息:%(err)s"
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
-msgstr ""
-"无法清除存储卷 %(name)s。详细信息:%(err)s"
+msgstr "无法清除存储卷 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
-msgstr ""
-"无法删除存储卷 %(name)s。详细信息:%(err)s"
+msgstr "无法删除存储卷 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
-msgstr ""
-"无法调整存储卷 %(name)s 的大小。详细信息:%(err)s"
+msgstr "无法调整存储卷 %(name)s 的大小。详细信息:%(err)s"
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
-msgstr ""
-"存储类型 %(type)s 不支持创建和删除卷"
+msgstr "存储类型 %(type)s 不支持创建和删除卷"
msgid "Storage volume name must be a string"
-msgstr ""
-"存储卷名称必须是字符串"
+msgstr "存储卷名称必须是字符串"
msgid "Storage volume allocation must be an integer number"
-msgstr ""
-"存储卷分配必须是一个整数数字"
+msgstr "存储卷分配必须是一个整数数字"
msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"存储卷格式不受支持。有效格式:bochs、cloop、cow、dmg、"
-"qcow‘qcow2、qed、raw、vmdk 和 vpc。"
+"存储卷格式不受支持。有效格式:bochs、cloop、cow、dmg、qcow‘qcow2、qed、raw、"
+"vmdk 和 vpc。"
msgid "Storage volume requires a volume name"
-msgstr ""
-"存储卷需要一个卷名"
+msgstr "存储卷需要一个卷名"
#, python-format
msgid ""
"Unable to update database with storage volume information due error: %(err)s"
-msgstr ""
-"无法使用存储卷信息更新数据库,因为发生了错误:%(err)s"
+msgstr "无法使用存储卷信息更新数据库,因为发生了错误:%(err)s"
#, python-format
msgid "Only one of parameter %(param)s can be specified"
-msgstr ""
-"只能指定一个 %(param)s 参数"
+msgstr "只能指定一个 %(param)s 参数"
#, python-format
msgid "Create volume from %(param)s is not supported"
-msgstr ""
-"不支持根据 %(param)s 创建卷"
+msgstr "不支持根据 %(param)s 创建卷"
msgid "Storage volume capacity must be an integer number."
-msgstr ""
-"存储卷容量必须是整数数字。"
+msgstr "存储卷容量必须是整数数字。"
msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
-msgstr ""
-"存储卷 URL 必须是 http://、https://、ftp:// 或 ftps://。"
+msgstr "存储卷 URL 必须是 http://、https://、ftp:// 或 ftps://。"
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
-msgstr ""
-"无法访问文件 %(url)s。请检查该文件。"
+msgstr "无法访问文件 %(url)s。请检查该文件。"
#, python-format
msgid ""
"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
"%(err)s"
msgstr ""
-"无法对以下池中的存储卷“%(name)s”进行克隆:“%(pool)s”。详细信息:"
-"%(err)s"
+"无法对以下池中的存储卷“%(name)s”进行克隆:“%(pool)s”。详细信息:%(err)s"
msgid "Specify chunk data and its size to upload a file."
-msgstr ""
-"指定区块数据及其大小以上载文件。"
+msgstr "指定区块数据及其大小以上载文件。"
msgid "In order to upload a storage volume, specify the 'upload' parameter."
-msgstr ""
-"要上载存储卷,请指定“upload”参数。"
+msgstr "要上载存储卷,请指定“upload”参数。"
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
-msgstr ""
-"无法上载区块数据,因为它与所请求的区块大小不匹配。"
+msgstr "无法上载区块数据,因为它与所请求的区块大小不匹配。"
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
-msgstr ""
-"存储卷 %(vol)s 未包括在上载过程中。"
+msgstr "存储卷 %(vol)s 未包括在上载过程中。"
msgid "The upload chunk data will exceed the storage volume size."
-msgstr ""
-"上载区块数据将超过存储卷大小。"
+msgstr "上载区块数据将超过存储卷大小。"
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
-msgstr ""
-"无法将区块数据上载至存储卷。详细信息:%(err)s。"
+msgstr "无法将区块数据上载至存储卷。详细信息:%(err)s。"
#, python-format
msgid "Interface %(name)s does not exist"
-msgstr ""
-"接口 %(name)s 不存在"
+msgstr "接口 %(name)s 不存在"
#, python-format
msgid "Network %(name)s already exists"
-msgstr ""
-"网络 %(name)s 已存在"
+msgstr "网络 %(name)s 已存在"
#, python-format
msgid "Network %(name)s does not exist"
-msgstr ""
-"网络 %(name)s 不存在"
+msgstr "网络 %(name)s 不存在"
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
-msgstr ""
-"为以下网络指定的子网 %(subnet)s 无效:%(network)s。"
+msgstr "为以下网络指定的子网 %(subnet)s 无效:%(network)s。"
#, python-format
msgid "Specify a network interface to create bridged network %(name)s"
-msgstr ""
-"指定网络接口以创建桥接网络 %(name)s"
+msgstr "指定网络接口以创建桥接网络 %(name)s"
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr ""
-"无法删除活动网络 %(name)s"
+msgstr "无法删除活动网络 %(name)s"
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
-msgstr ""
-"为以下网络指定的接口 %(iface)s 已在使用中:%(network)s"
+msgstr "为以下网络指定的接口 %(iface)s 已在使用中:%(network)s"
msgid "Interface should be bare NIC, bonding or bridge device."
-msgstr ""
-"接口应该是空的 NIC、绑定或网桥设备。"
+msgstr "接口应该是空的 NIC、绑定或网桥设备。"
#, python-format
msgid "Unable to create network %(name)s. Details: %(err)s"
-msgstr ""
-"无法创建网络 %(name)s。详细信息:%(err)s"
+msgstr "无法创建网络 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
-msgstr ""
-"找不到网络“%(name)s”的可用 IP 地址"
+msgstr "找不到网络“%(name)s”的可用 IP 地址"
#, python-format
msgid "The interface %(iface)s already exists."
-msgstr ""
-"接口 %(iface)s 已存在。"
+msgstr "接口 %(iface)s 已存在。"
msgid "Network name must be a string without slashes (/) or quotes (\")"
-msgstr ""
-"网络名必须是不带斜杠 (/) 或引号 (\") 的字符串"
+msgstr "网络名必须是不带斜杠 (/) 或引号 (\") 的字符串"
msgid "Supported network types are isolated, NAT and bridge"
-msgstr ""
-"受支持的网络类型为隔离、NAT 和桥接"
+msgstr "受支持的网络类型为隔离、NAT 和桥接"
msgid "Network subnet must be a string with IP address and prefix or netmask"
-msgstr ""
-"网络子网是一个具有 IP 地址以及前缀或网络掩码的字符串"
+msgstr "网络子网是一个具有 IP 地址以及前缀或网络掩码的字符串"
msgid "Network interface must be a string"
-msgstr ""
-"网络接口必须是字符串"
+msgstr "网络接口必须是字符串"
msgid "Network VLAN ID must be an integer between 1 and 4094"
-msgstr ""
-"网络 VLAN 标识必须是一个介于 1 到 4094 之间的整数"
+msgstr "网络 VLAN 标识必须是一个介于 1 到 4094 之间的整数"
msgid "Specify name and type to create a Network"
-msgstr ""
-"指定名称和类型以创建网络"
+msgstr "指定名称和类型以创建网络"
#, python-format
msgid ""
"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
"and/or templates linked to this network."
-msgstr ""
-"无法删除网络 %(name)s。一些虚拟机 %(vms)s "
-"和/或模板已链接至此网络。"
+msgstr "无法删除网络 %(name)s。一些虚拟机 %(vms)s 和/或模板已链接至此网络。"
#, python-format
msgid ""
"Unable to deactivate network %(name)s. There are some virtual machines "
"%(vms)s and/or templates linked to this network."
msgstr ""
-"无法取消激活网络 %(name)s。一些虚拟机 "
-"%(vms)s 和/或模板已链接至此网络。"
+"无法取消激活网络 %(name)s。一些虚拟机 %(vms)s 和/或模板已链接至此网络。"
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
-msgstr ""
-"网桥设备 %(name)s 不能是 VLAN 的主要设备。"
+msgstr "网桥设备 %(name)s 不能是 VLAN 的主要设备。"
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr ""
-"未能激活接口 %(iface)s:%(err)s。"
+msgstr "未能激活接口 %(iface)s:%(err)s。"
#, python-format
msgid ""
"Failed to activate interface %(iface)s. Please check the physical link "
"status."
-msgstr ""
-"未能激活接口 %(iface)s。请检查物理链路"
-"状态。"
+msgstr "未能激活接口 %(iface)s。请检查物理链路状态。"
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
-msgstr ""
-"未能启动网络 %(name)s。详细信息:%(err)s"
+msgstr "未能启动网络 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr ""
-"调试报告 %(name)s 不存在"
+msgstr "调试报告 %(name)s 不存在"
msgid "Debug report tool not found in system"
-msgstr ""
-"系统中找不到调试报告工具"
+msgstr "系统中找不到调试报告工具"
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
-msgstr ""
-"无法创建调试报告 %(name)s。详细信息:%(err)s。"
+msgstr "无法创建调试报告 %(name)s。详细信息:%(err)s。"
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
-msgstr ""
-"找不到具有给定名称 %(name)s 的任何调试报告"
+msgstr "找不到具有给定名称 %(name)s 的任何调试报告"
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
-msgstr ""
-"无法生成调试报告 %(name)s。详细信息:%(err)s"
+msgstr "无法生成调试报告 %(name)s。详细信息:%(err)s"
msgid "You should give a name for the debug report file."
-msgstr ""
-"您应该为调试报告文件指定名称。"
+msgstr "您应该为调试报告文件指定名称。"
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
-"调试报告名称必须是字符串。只允许包含字母、数字、下划线(“_”)"
-"和连字符(“-”)。"
+"调试报告名称必须是字符串。只允许包含字母、数字、下划线(“_”)和连字符"
+"(“-”)。"
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
-msgstr ""
-"具有指定名称“%(name)s”的调试报告已存在。请使用"
-"另一个名称。"
+msgstr "具有指定名称“%(name)s”的调试报告已存在。请使用另一个名称。"
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr ""
-"Kimchi 未使用存储服务器 %(server)s"
+msgstr "Kimchi 未使用存储服务器 %(server)s"
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr ""
-"Distro“%(name)s”不存在"
+msgstr "Distro“%(name)s”不存在"
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr ""
-"分区 %(name)s 在主机中不存在"
+msgstr "分区 %(name)s 在主机中不存在"
msgid "Unable to shutdown host machine as there are running virtual machines"
-msgstr ""
-"由于存在正在运行的虚拟机而无法关闭主机"
+msgstr "由于存在正在运行的虚拟机而无法关闭主机"
msgid "Unable to reboot host machine as there are running virtual machines"
-msgstr ""
-"由于存在正在运行的虚拟机而无法重新引导主机"
+msgstr "由于存在正在运行的虚拟机而无法重新引导主机"
#, python-format
msgid "Node device '%(name)s' not found"
-msgstr ""
-"找不到节点设备“%(name)s”"
+msgstr "找不到节点设备“%(name)s”"
msgid "Conflicting flag filters specified."
-msgstr ""
-"指定的标志过滤器有冲突。"
+msgstr "指定的标志过滤器有冲突。"
msgid "No packages marked for update"
-msgstr ""
-"未标记要更新的任何软件包"
+msgstr "未标记要更新的任何软件包"
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr ""
-"软件包 %(name)s 未标记为要进行更新。"
+msgstr "软件包 %(name)s 未标记为要进行更新。"
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
-msgstr ""
-"获取已标记为要进行更新的软件包时出错。详细信息:%(err)s"
+msgstr "获取已标记为要进行更新的软件包时出错。详细信息:%(err)s"
msgid "There is no compatible package manager for this system."
-msgstr ""
-"此系统不存在任何兼容的软件包管理器。"
+msgstr "此系统不存在任何兼容的软件包管理器。"
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr ""
-"在数据存储器中找不到 %(item)s"
+msgstr "在数据存储器中找不到 %(item)s"
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr ""
-"无效 URI %(uri)s"
+msgstr "无效 URI %(uri)s"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
-msgstr ""
-"运行命令“%(cmd)s”时,在 %(seconds)s 秒后超时"
+msgstr "运行命令“%(cmd)s”时,在 %(seconds)s 秒后超时"
msgid "Unable to choose a virtual machine name"
-msgstr ""
-"无法选择虚拟机名称"
+msgstr "无法选择虚拟机名称"
#, python-format
msgid "Invalid data value '%(value)s'"
-msgstr ""
-"无效数据值“%(value)s”"
+msgstr "无效数据值“%(value)s”"
#, python-format
msgid "Invalid data unit '%(unit)s'"
-msgstr ""
-"无效数据单元“%(unit)s”"
+msgstr "无效数据单元“%(unit)s”"
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
-msgstr ""
-"存储类型无效。受支持的类型:“cdrom”和“disk”"
+msgstr "存储类型无效。受支持的类型:“cdrom”和“disk”"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
-msgstr ""
-"路径“%(value)s”不是设备的有效本地/远程路径"
+msgstr "路径“%(value)s”不是设备的有效本地/远程路径"
msgid "Only CDROM path can be update."
-msgstr ""
-"只能更新 CDROM 路径。"
+msgstr "只能更新 CDROM 路径。"
#, python-format
msgid ""
"The storage device %(dev_name)s does not exist in the virtual machine "
"%(vm_name)s"
-msgstr ""
-"存储设备 %(dev_name)s 在虚拟机 "
-"%(vm_name)s 中不存在"
+msgstr "存储设备 %(dev_name)s 在虚拟机 %(vm_name)s 中不存在"
#, python-format
msgid "Error while creating new storage device: %(error)s"
-msgstr ""
-"创建新存储设备时出错:%(error)s"
+msgstr "创建新存储设备时出错:%(error)s"
#, python-format
msgid "Error while updating storage device: %(error)s"
-msgstr ""
-"更新存储设备时出错:%(error)s"
+msgstr "更新存储设备时出错:%(error)s"
#, python-format
msgid "Error while removing storage device: %(error)s"
-msgstr ""
-"移除存储设备时出错:%(error)s"
+msgstr "移除存储设备时出错:%(error)s"
msgid "Do not support IDE device hot plug"
-msgstr ""
-"不支持 IDE 设备热插拔"
+msgstr "不支持 IDE 设备热插拔"
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
"disk"
-msgstr ""
-"指定类型和路径或输入池/卷以以添加新虚拟机"
-"磁盘"
+msgstr "指定类型和路径或输入池/卷以以添加新虚拟机磁盘"
msgid "Specify path to update virtual machine disk"
-msgstr ""
-"指定路径以更新虚拟机磁盘"
+msgstr "指定路径以更新虚拟机磁盘"
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
-msgstr ""
-"已达到控制器类型 %(type)s 限制 %(limit)s"
+msgstr "已达到控制器类型 %(type)s 限制 %(limit)s"
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
-msgstr ""
-"无法检索给定池/卷的磁盘路径信息:%(error)s"
+msgstr "无法检索给定池/卷的磁盘路径信息:%(error)s"
msgid "Volume already in use by other virtual machine."
-msgstr ""
-"其他虚拟机已在使用该卷。"
+msgstr "其他虚拟机已在使用该卷。"
msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
-msgstr ""
-"仅能指定一个路径或池/卷以添加至 "
-"虚拟机磁盘"
+msgstr "仅能指定一个路径或池/卷以添加至 虚拟机磁盘"
#, python-format
msgid ""
"Volume chosen with format %(format)s does not fit in the storage type "
"%(type)s"
-msgstr ""
-"选择的格式为 %(format)s 的卷不适合于存储类型 "
-"%(type)s"
+msgstr "选择的格式为 %(format)s 的卷不适合于存储类型 %(type)s"
msgid "YUM Repository ID must be one word only string."
-msgstr ""
-"Yum 存储库标识必须是一个单词的唯一字符串。"
+msgstr "Yum 存储库标识必须是一个单词的唯一字符串。"
msgid "Repository URL must be an http://, ftp:// or file:// URL."
-msgstr ""
-"存储库 URL 必须是 http://、ftp:// 或 file:// URL。"
+msgstr "存储库 URL 必须是 http://、ftp:// 或 file:// URL。"
msgid ""
"Repository configuration is a dictionary with specific values according to "
"repository type."
-msgstr ""
-"存储库配置是具有针对存储库类型的特定值的"
-"字典。"
+msgstr "存储库配置是具有针对存储库类型的特定值的字典。"
msgid "Distribution to DEB repository must be a string"
-msgstr ""
-"DEB 存储库的分发版必须是字符串"
+msgstr "DEB 存储库的分发版必须是字符串"
msgid "Components to DEB repository must be listed in a array"
-msgstr ""
-"DEB 存储库的组件必须列示在数组中"
+msgstr "DEB 存储库的组件必须列示在数组中"
msgid "Components to DEB repository must be a string"
-msgstr ""
-"DEB 存储库的组件必须是字符串"
+msgstr "DEB 存储库的组件必须是字符串"
msgid "Mirror list to repository must be a string"
-msgstr ""
-"存储库的镜像列表必须是字符串"
+msgstr "存储库的镜像列表必须是字符串"
msgid "YUM Repository name must be string."
-msgstr ""
-"Yum 存储库名称必须是字符串。"
+msgstr "Yum 存储库名称必须是字符串。"
msgid "GPG check must be a boolean value."
-msgstr ""
-"GPG 检查必须是一个布尔值。"
+msgstr "GPG 检查必须是一个布尔值。"
msgid "GPG key must be a URL pointing to the ASCII-armored file."
-msgstr ""
-"GPG 密钥必须是指向 ASCII 编码文件的 URL。"
+msgstr "GPG 密钥必须是指向 ASCII 编码文件的 URL。"
#, python-format
msgid "Could not update repository %(repo_id)s."
-msgstr ""
-"无法更新存储库 %(repo_id)s。"
+msgstr "无法更新存储库 %(repo_id)s。"
#, python-format
msgid "Repository %(repo_id)s does not exist."
-msgstr ""
-"存储库 %(repo_id)s 不存在。"
+msgstr "存储库 %(repo_id)s 不存在。"
msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
"update a YUM repository."
-msgstr ""
-"指定存储库基本 URL、镜像列表或元链接以创建或"
-"更新 Yum 存储库。"
+msgstr "指定存储库基本 URL、镜像列表或元链接以创建或更新 Yum 存储库。"
msgid "Repository management tool was not recognized for your system."
-msgstr ""
-"未识别您的系统的存储库管理工具。"
+msgstr "未识别您的系统的存储库管理工具。"
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr ""
-"已启用存储库 %(repo_id)s。"
+msgstr "已启用存储库 %(repo_id)s。"
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr ""
-"已禁用存储库 %(repo_id)s。"
+msgstr "已禁用存储库 %(repo_id)s。"
#, python-format
msgid "Could not remove repository %(repo_id)s."
-msgstr ""
-"无法移除存储库 %(repo_id)s。"
+msgstr "无法移除存储库 %(repo_id)s。"
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
-msgstr ""
-"无法写入存储库配置文件 %(repo_file)s"
+msgstr "无法写入存储库配置文件 %(repo_file)s"
msgid "Specify repository distribution in order to create a DEB repository."
-msgstr ""
-"指定存储库分发版以创建 DEB 存储库。"
+msgstr "指定存储库分发版以创建 DEB 存储库。"
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr ""
-"无法启用存储库 %(repo_id)s。"
+msgstr "无法启用存储库 %(repo_id)s。"
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr ""
-"无法禁用存储库 %(repo_id)s。"
+msgstr "无法禁用存储库 %(repo_id)s。"
msgid "YUM Repository ID already exists"
-msgstr ""
-"Yum 存储库标识已存在"
+msgstr "Yum 存储库标识已存在"
msgid "YUM Repository name must be a string"
-msgstr ""
-"Yum 存储库名称必须是字符串"
+msgstr "Yum 存储库名称必须是字符串"
#, python-format
msgid "Unable to list repositories. Details: '%(err)s'"
-msgstr ""
-"无法列示存储库。详细信息:“%(err)s”"
+msgstr "无法列示存储库。详细信息:“%(err)s”"
#, python-format
msgid "Unable to retrieve repository information. Details: '%(err)s'"
-msgstr ""
-"无法检索存储库信息。详细信息:“%(err)s”"
+msgstr "无法检索存储库信息。详细信息:“%(err)s”"
#, python-format
msgid "Unable to add repository. Details: '%(err)s'"
-msgstr ""
-"无法添加存储库。详细信息:“%(err)s”"
+msgstr "无法添加存储库。详细信息:“%(err)s”"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr ""
-"无法移除存储库。详细信息:“%(err)s”"
+msgstr "无法移除存储库。详细信息:“%(err)s”"
#, python-format
msgid ""
"Configuration items: '%(items)s' are not supported by repository manager"
-msgstr ""
-"配置项:“%(items)s”不受存储库管理器支持"
+msgstr "配置项:“%(items)s”不受存储库管理器支持"
msgid "Repository metalink must be an http://, ftp:// or file:// URL."
-msgstr ""
-"存储库元链接必须是 http://、ftp:// 或 file:// URL。"
+msgstr "存储库元链接必须是 http://、ftp:// 或 file:// URL。"
msgid "Cannot specify mirrorlist and metalink at the same time."
-msgstr ""
-"不能同时指定镜像列表和元链接。"
+msgstr "不能同时指定镜像列表和元链接。"
#, python-format
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
-msgstr ""
-"在创建虚拟机“%(vm)s”的快照之前,必须将其停止。"
+msgstr "在创建虚拟机“%(vm)s”的快照之前,必须将其停止。"
#, python-format
msgid ""
"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
-msgstr ""
-"无法在以下虚拟机上创建快照“%(name)s”:“%(vm)s”。详细信息:"
-"%(err)s"
+msgstr "无法在以下虚拟机上创建快照“%(name)s”:“%(vm)s”。详细信息:%(err)s"
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
-msgstr ""
-"快照“%(name)s”在虚拟机“%(vm)s”上不存在。"
+msgstr "快照“%(name)s”在虚拟机“%(vm)s”上不存在。"
#, python-format
msgid ""
"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
-msgstr ""
-"无法在以下虚拟机上检索快照“%(name)s”:“%(vm)s”。详细信息:"
-"%(err)s"
+msgstr "无法在以下虚拟机上检索快照“%(name)s”:“%(vm)s”。详细信息:%(err)s"
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
-msgstr ""
-"无法列示虚拟机“%(vm)s”上的快照。详细信息:%(err)s"
+msgstr "无法列示虚拟机“%(vm)s”上的快照。详细信息:%(err)s"
#, python-format
msgid ""
"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
-msgstr ""
-"无法删除以下虚拟机上的快照“%(name)s”:“%(vm)s”。详细信息:"
-"%(err)s"
+msgstr "无法删除以下虚拟机上的快照“%(name)s”:“%(vm)s”。详细信息:%(err)s"
#, python-format
msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
-msgstr ""
-"无法检索虚拟机“%(vm)s”的当前快照。详细信息:"
-"%(err)s"
+msgstr "无法检索虚拟机“%(vm)s”的当前快照。详细信息:%(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
-msgstr ""
-"无法将虚拟机“%(vm)s”还原到快照“%(name)s”。详细信息:"
-"%(err)s"
+msgstr "无法将虚拟机“%(vm)s”还原到快照“%(name)s”。详细信息:%(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
-"无法创建虚拟机“%(vm)s”的快照,因为它包含"
-"格式为“%(format)s”的磁盘;仅“qcow2”受支持。"
+"无法创建虚拟机“%(vm)s”的快照,因为它包含格式为“%(format)s”的磁盘;仅“qcow2”受"
+"支持。"
msgid "The number of vCPUs is too large for this system."
-msgstr ""
-"vCPU 数对于此系统太大。"
+msgstr "vCPU 数对于此系统太大。"
msgid "Invalid vCPU/topology combination."
-msgstr ""
-"无效 vCPU/拓扑组合。"
+msgstr "无效 vCPU/拓扑组合。"
msgid "This host (or current configuration) does not allow CPU topology."
-msgstr ""
-"此主机(或当前配置)不允许使用 CPU 拓扑。"
+msgstr "此主机(或当前配置)不允许使用 CPU 拓扑。"
msgid "ERROR CODE"
-msgstr ""
-"错误代码"
+msgstr "错误代码"
msgid "REASON"
-msgstr ""
-"原因"
+msgstr "原因"
msgid "STACK"
-msgstr ""
-"堆栈"
+msgstr "堆栈"
msgid "Go to Homepage"
-msgstr ""
-"转至主页"
+msgstr "转至主页"
msgid "Create a New Virtual Machine"
-msgstr ""
-"创建新虚拟机"
+msgstr "创建新虚拟机"
msgid "Virtual Machine Name"
-msgstr ""
-"虚拟机名称"
+msgstr "虚拟机名称"
msgid ""
"The name used to identify the virtual machine. If omitted, a name will be "
"chosen based on the template used."
-msgstr ""
-"用于标识虚拟机的名称。如果省略,那么将根据所使用的模板选择"
-"一个名称。"
+msgstr "用于标识虚拟机的名称。如果省略,那么将根据所使用的模板选择一个名称。"
msgid "Template"
-msgstr ""
-"模板"
+msgstr "模板"
msgid "Please create a template first."
-msgstr ""
-"请先创建模板。"
+msgstr "请先创建模板。"
msgid "Create a Template"
-msgstr ""
-"创建模板"
+msgstr "创建模板"
msgid "Please choose a template."
-msgstr ""
-"请选择一个模板。"
+msgstr "请选择一个模板。"
msgid "OS"
-msgstr ""
-"操作系统"
+msgstr "操作系统"
msgid "OS Version"
-msgstr ""
-"操作系统版本"
+msgstr "操作系统版本"
msgid "CPUS"
-msgstr ""
-"CPUS"
+msgstr "CPUS"
msgid "Memory"
-msgstr ""
-"内存"
+msgstr "内存"
msgid "Create"
-msgstr ""
-"创建"
+msgstr "创建"
msgid "Creating..."
-msgstr ""
-"正在创建..."
+msgstr "正在创建..."
msgid "Edit Guest"
-msgstr ""
-"编辑访客"
+msgstr "编辑访客"
msgid "General"
-msgstr ""
-"常规"
+msgstr "常规"
msgid "Storage"
-msgstr ""
-"存储器"
+msgstr "存储器"
msgid "Interface"
-msgstr ""
-"接口"
+msgstr "接口"
msgid "Permission"
-msgstr ""
-"许可权"
+msgstr "许可权"
msgid "Host PCI Device"
-msgstr ""
-"主机 PCI 设备"
+msgstr "主机 PCI 设备"
msgid "Snapshot"
-msgstr ""
-"快照"
+msgstr "快照"
msgid "Name"
-msgstr ""
-"名称"
+msgstr "名称"
msgid "CPUs"
-msgstr ""
-"CPU 数"
+msgstr "CPU 数"
msgid "Memory (MB)"
-msgstr ""
-"内存(MB)"
+msgstr "内存(MB)"
msgid "Icon"
-msgstr ""
-"图标"
+msgstr "图标"
msgid "Device"
-msgstr ""
-"设备"
+msgstr "设备"
msgid "Path"
-msgstr ""
-"路径"
+msgstr "路径"
msgid "Network"
-msgstr ""
-"网络"
+msgstr "网络"
msgid "Type"
-msgstr ""
-"类型"
+msgstr "类型"
msgid "MAC Address"
-msgstr ""
-"MAC 地址"
+msgstr "MAC 地址"
msgid "Available system users and groups"
-msgstr ""
-"可用系统用户和组"
+msgstr "可用系统用户和组"
msgid "Selected system users and groups"
-msgstr ""
-"所选系统用户和组"
+msgstr "所选系统用户和组"
msgid "User"
-msgstr ""
-"用户"
+msgstr "用户"
msgid "All"
-msgstr ""
-"全部"
+msgstr "全部"
msgid "To Add"
-msgstr ""
-"待添加"
+msgstr "待添加"
msgid "Added"
-msgstr ""
-"已添加"
+msgstr "已添加"
msgid "filter"
-msgstr ""
-"过滤器"
+msgstr "过滤器"
msgid "Product"
-msgstr ""
-"产品"
+msgstr "产品"
msgid "Vendor"
-msgstr ""
-"供应商"
+msgstr "供应商"
msgid "Created"
-msgstr ""
-"已创建"
+msgstr "已创建"
msgid "Save"
-msgstr ""
-"保存"
+msgstr "保存"
msgid "Replace"
-msgstr ""
-"替换"
+msgstr "替换"
msgid "Detach"
-msgstr ""
-"拆离"
+msgstr "拆离"
msgid "Cancel"
-msgstr ""
-"取消"
+msgstr "取消"
msgid "revert"
-msgstr ""
-"还原"
+msgstr "还原"
msgid "Add a Storage Device to VM"
-msgstr ""
-"将存储设备添加至 VM"
+msgstr "将存储设备添加至 VM"
msgid "Device Type"
-msgstr ""
-"设备类型"
+msgstr "设备类型"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr ""
-"设备类型。当前支持“cdrom”和“disk”。"
+msgstr "设备类型。当前支持“cdrom”和“disk”。"
msgid "Storage Pool"
-msgstr ""
-"存储池"
+msgstr "存储池"
msgid "Storage pool which volume located in"
-msgstr ""
-"卷位于以下位置的存储池"
+msgstr "卷位于以下位置的存储池"
msgid "Storage Volume"
-msgstr ""
-"存储卷"
+msgstr "存储卷"
msgid "Storage volume to be attached"
-msgstr ""
-"要连接的存储卷"
+msgstr "要连接的存储卷"
msgid "File Path"
-msgstr ""
-"文件路径"
+msgstr "文件路径"
msgid "The ISO file path in the server for CDROM."
-msgstr ""
-"CDROM 服务器中的 ISO 文件。"
+msgstr "CDROM 服务器中的 ISO 文件。"
msgid "Attach"
-msgstr ""
-"连接"
+msgstr "连接"
msgid "Start"
-msgstr ""
-"启动"
+msgstr "启动"
msgid "Reset"
-msgstr ""
-"重置"
+msgstr "重置"
msgid "Pause"
-msgstr ""
-"暂停"
+msgstr "暂停"
msgid "Resume"
-msgstr ""
-"恢复"
+msgstr "恢复"
msgid "Power Off"
-msgstr ""
-"关闭电源"
+msgstr "关闭电源"
msgid "Actions"
-msgstr ""
-"操作"
+msgstr "操作"
msgid "Connect"
-msgstr ""
-"连接"
+msgstr "连接"
msgid "Clone"
-msgstr ""
-"克隆"
+msgstr "克隆"
msgid "Edit"
-msgstr ""
-"编辑"
+msgstr "编辑"
msgid "Shut Down"
-msgstr ""
-"关闭"
+msgstr "关闭"
msgid "Delete"
-msgstr ""
-"删除"
+msgstr "删除"
msgid "The username or password you entered is incorrect. Please try again."
-msgstr ""
-"您所输入的用户名或密码不正确。请重试。"
+msgstr "您所输入的用户名或密码不正确。请重试。"
msgid "This field is required."
-msgstr ""
-"此字段是必填字段。"
+msgstr "此字段是必填字段。"
msgid "Log in"
-msgstr ""
-"登录名"
+msgstr "登录名"
msgid "Logging in..."
-msgstr ""
-"正在登录..."
+msgstr "正在登录..."
msgid "Host"
-msgstr ""
-"主机"
+msgstr "主机"
msgid "Guests"
-msgstr ""
-"访客"
+msgstr "访客"
msgid "Templates"
-msgstr ""
-"模板"
+msgstr "模板"
msgid "Failed to get application configuration"
-msgstr ""
-"未能获取应用程序配置"
+msgstr "未能获取应用程序配置"
msgid "This is not a valid Linux path"
-msgstr ""
-"这不是有效的 Linux 路径"
+msgstr "这不是有效的 Linux 路径"
msgid "This is not a valid URL."
-msgstr ""
-"这不是有效的 URL。"
+msgstr "这不是有效的 URL。"
msgid "No such data available."
-msgstr ""
-"没有此类数据可用。"
+msgstr "没有此类数据可用。"
msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"无法连接主机系统。请验证主机系统是否已启动以及"
-"您是否与其具有网络连接。HTTP 请求响应 %1。"
+"无法连接主机系统。请验证主机系统是否已启动以及您是否与其具有网络连接。HTTP 请"
+"求响应 %1。"
msgid "Unable to read file."
-msgstr ""
-"无法读取文件。"
+msgstr "无法读取文件。"
msgid "Error while uploading file."
-msgstr ""
-"上载文件时出错。"
+msgstr "上载文件时出错。"
msgid "Delete Confirmation"
-msgstr ""
-"删除确认"
+msgstr "删除确认"
msgid "OK"
-msgstr ""
-"确定"
+msgstr "确定"
msgid "Confirm"
-msgstr ""
-"确认"
+msgstr "确认"
msgid "Warning"
-msgstr ""
-"警告"
+msgstr "警告"
msgid "Cloning..."
-msgstr ""
-"正在克隆..."
+msgstr "正在克隆..."
msgid "Loading..."
-msgstr ""
-"正在装入..."
+msgstr "正在装入..."
msgid "An error occurred while retrieving system information."
-msgstr ""
-"检索系统信息时发生错误。"
+msgstr "检索系统信息时发生错误。"
msgid "Retry"
-msgstr ""
-"重试"
+msgstr "重试"
msgid "Detailed message:"
-msgstr ""
-"详细消息:"
+msgstr "详细消息:"
msgid "No ISO found"
-msgstr ""
-"找不到 ISO"
+msgstr "找不到 ISO"
msgid "This is not a valid ISO file."
-msgstr ""
-"这不是有效的 ISO 文件。"
+msgstr "这不是有效的 ISO 文件。"
msgid "This may take a long time. Do you want to continue?"
-msgstr ""
-"这可能需要较长时间。要继续吗?"
+msgstr "这可能需要较长时间。要继续吗?"
msgid "This will permanently delete the template. Would you like to continue?"
-msgstr ""
-"这将永久删除该模板。要继续吗?"
+msgstr "这将永久删除该模板。要继续吗?"
msgid "Unable to shut down system as there are some virtual machines running!"
-msgstr ""
-"由于存在一些正在运行的虚拟机而无法关闭系统!"
+msgstr "由于存在一些正在运行的虚拟机而无法关闭系统!"
msgid "Max:"
-msgstr ""
-"最大值:"
+msgstr "最大值:"
msgid "Utilization"
-msgstr ""
-"利用率"
+msgstr "利用率"
msgid "Available"
-msgstr ""
-"可用"
+msgstr "可用"
msgid "Read Rate"
-msgstr ""
-"读速率"
+msgstr "读速率"
msgid "Write Rate"
-msgstr ""
-"写速率"
+msgstr "写速率"
msgid "Received"
-msgstr ""
-"已接收"
+msgstr "已接收"
msgid "Sent"
-msgstr ""
-"已发送"
+msgstr "已发送"
msgid ""
"Shutting down or restarting host will cause unsaved work lost. Continue to "
"shut down/restarting?"
-msgstr ""
-"关闭或重新启动主机将导致未保存的工作丢失。要继续"
-"关闭/重新启动吗?"
+msgstr "关闭或重新启动主机将导致未保存的工作丢失。要继续关闭/重新启动吗?"
msgid ""
"Repository will be removed permanently and can't be recovered. Do you want "
"to continue?"
-msgstr ""
-"存储库将被永久除去并且无法恢复。要"
-"继续吗?"
+msgstr "存储库将被永久除去并且无法恢复。要继续吗?"
msgid "Repositories"
-msgstr ""
-"存储库"
+msgstr "存储库"
msgid "ID"
-msgstr ""
-"标识"
+msgstr "标识"
msgid "Base URL"
-msgstr ""
-"基本 URL"
+msgstr "基本 URL"
msgid "Is Mirror"
-msgstr ""
-"是镜像"
+msgstr "是镜像"
msgid "URL Args"
-msgstr ""
-"URL 参数"
+msgstr "URL 参数"
msgid "Enabled"
-msgstr ""
-"已启用"
+msgstr "已启用"
msgid "GPG Check"
-msgstr ""
-"GPG 检查"
+msgstr "GPG 检查"
msgid "GPG Key"
-msgstr ""
-"GPG 密钥"
+msgstr "GPG 密钥"
msgid "Add"
-msgstr ""
-"添加"
+msgstr "添加"
msgid "Remove"
-msgstr ""
-"除去"
+msgstr "除去"
msgid "Enable"
-msgstr ""
-"启用"
+msgstr "启用"
msgid "Disable"
-msgstr ""
-"禁用"
+msgstr "禁用"
msgid "Software Updates"
-msgstr ""
-"软件更新"
+msgstr "软件更新"
msgid "Package Name"
-msgstr ""
-"软件包名称"
+msgstr "软件包名称"
msgid "Version"
-msgstr ""
-"版本"
+msgstr "版本"
msgid "Architecture"
-msgstr ""
-"体系结构"
+msgstr "体系结构"
msgid "Repository"
-msgstr ""
-"存储库"
+msgstr "存储库"
msgid "Update All"
-msgstr ""
-"全部更新"
+msgstr "全部更新"
msgid "Updating..."
-msgstr ""
-"正在更新..."
+msgstr "正在更新..."
msgid "Failed to retrieve packages update information."
-msgstr ""
-"未能检索软件包更新信息。"
+msgstr "未能检索软件包更新信息。"
msgid "Failed to update package(s)."
-msgstr ""
-"未能更新软件包。"
+msgstr "未能更新软件包。"
msgid ""
"Debug report will be removed permanently and can't be recovered. Do you want "
"to continue?"
-msgstr ""
-"调试报告将被永久除去并且无法恢复。要"
-"继续吗?"
+msgstr "调试报告将被永久除去并且无法恢复。要继续吗?"
msgid "Debug Reports"
-msgstr ""
-"调试报告"
+msgstr "调试报告"
msgid "Generated Time"
-msgstr ""
-"生成时间"
+msgstr "生成时间"
msgid "Generate"
-msgstr ""
-"生成"
+msgstr "生成"
msgid "Generating..."
-msgstr ""
-"正在生成..."
+msgstr "正在生成..."
msgid "Rename"
-msgstr ""
-"重命名"
+msgstr "重命名"
msgid "Download"
-msgstr ""
-"下载"
+msgstr "下载"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
"hyphen ('-')."
-msgstr ""
-"报告名称应该只包含字母、数字、下划线(“_”)和/或"
-"连字符(“-”)。"
+msgstr "报告名称应该只包含字母、数字、下划线(“_”)和/或连字符(“-”)。"
msgid "Pending..."
-msgstr ""
-"正在暂挂..."
+msgstr "正在暂挂..."
msgid "Report name is the same as the original one."
-msgstr ""
-"报告名称与原始报告名称相同。"
+msgstr "报告名称与原始报告名称相同。"
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
"cannot be undone. Would you like to continue?"
-msgstr ""
-"这将删除虚拟机及其虚拟盘。此操作"
-"无法撤销。要继续吗?"
+msgstr "这将删除虚拟机及其虚拟盘。此操作无法撤销。要继续吗?"
msgid "Power off Confirmation"
-msgstr ""
-"关闭电源确认"
+msgstr "关闭电源确认"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
"cache in the guest. Would you like to continue?"
msgstr ""
-"此操作可能会产生不需要的结果,例如,"
-"在访客中留下未清空的高速缓存。要继续吗?"
+"此操作可能会产生不需要的结果,例如,在访客中留下未清空的高速缓存。要继续吗?"
msgid "Reset Confirmation"
-msgstr ""
-"重置确认"
+msgstr "重置确认"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
"Would you like to continue?"
-msgstr ""
-"如果不关闭访客操作系统,那么会有数据丢失的风险。"
-"要继续吗?"
+msgstr "如果不关闭访客操作系统,那么会有数据丢失的风险。要继续吗?"
msgid "Shut Down Confirmation"
-msgstr ""
-"关闭确认"
+msgstr "关闭确认"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
-msgstr ""
-"注意,访客操作系统可能会忽略此请求。要继续吗?"
+msgstr "注意,访客操作系统可能会忽略此请求。要继续吗?"
msgid "Virtual Machine delete Confirmation"
-msgstr ""
-"虚拟机删除确认"
+msgstr "虚拟机删除确认"
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
-msgstr ""
-"此虚拟机不是持久虚拟机。关闭电源会将其删除。是否继续?"
+msgstr "此虚拟机不是持久虚拟机。关闭电源会将其删除。是否继续?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
"default storage pool. The same will happen when the target pool does not "
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
-"当目标访客具有 SCSI 或 iSCSI 卷时,将在缺省存储池中"
-"对这些卷进行克隆。当目标池不具有对这些卷进行克隆的"
-"足够空间时,将发生同样的情况。要继续吗?"
+"当目标访客具有 SCSI 或 iSCSI 卷时,将在缺省存储池中对这些卷进行克隆。当目标池"
+"不具有对这些卷进行克隆的足够空间时,将发生同样的情况。要继续吗?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
-msgstr ""
-"此 CDROM 将被永久拆离但您可以对其进行重新连接。要"
-"继续拆离吗?"
+msgstr "此 CDROM 将被永久拆离但您可以对其进行重新连接。要继续拆离吗?"
msgid "Attaching..."
-msgstr ""
-"正在连接..."
+msgstr "正在连接..."
msgid "Replacing..."
-msgstr ""
-"正在替换..."
+msgstr "正在替换..."
msgid "Successfully attached!"
-msgstr ""
-"已成功连接!"
+msgstr "已成功连接!"
msgid "Successfully replaced!"
-msgstr ""
-"已成功替换!"
+msgstr "已成功替换!"
msgid "Successfully detached!"
-msgstr ""
-"已成功拆离!"
+msgstr "已成功拆离!"
msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
-msgstr ""
-"此磁盘将被永久拆离但您可以对其进行重新连接。"
-"要继续拆离吗?"
+msgstr "此磁盘将被永久拆离但您可以对其进行重新连接。要继续拆离吗?"
msgid "interface:"
-msgstr ""
-"接口:"
+msgstr "接口:"
msgid "address:"
-msgstr ""
-"地址:"
+msgstr "地址:"
msgid "link_type:"
-msgstr ""
-"链接类型:"
+msgstr "链接类型:"
msgid "block:"
-msgstr ""
-"块:"
+msgstr "块:"
msgid "drive_type:"
-msgstr ""
-"驱动类型:"
+msgstr "驱动类型:"
msgid "model:"
-msgstr ""
-"模型:"
+msgstr "模型:"
msgid "Affected devices:"
-msgstr ""
-"受影响的设备:"
+msgstr "受影响的设备:"
msgid "The VLAN id must be between 1 and 4094."
-msgstr ""
-"VLAN 标识必须介于 1 到 4094 之间。"
+msgstr "VLAN 标识必须介于 1 到 4094 之间。"
msgid "unavailable"
-msgstr ""
-"不可用"
+msgstr "不可用"
msgid ""
"This action will interrupt network connectivity for any virtual machine that "
"depend on this network."
-msgstr ""
-"此操作将中断依赖于此网络的任何虚拟机"
-"的网络连接。"
+msgstr "此操作将中断依赖于此网络的任何虚拟机的网络连接。"
msgid "Create a network"
-msgstr ""
-"创建网络"
+msgstr "创建网络"
msgid ""
"This network is not persistent. Instead of stop, this action will "
"permanently delete it. Would you like to continue?"
-msgstr ""
-"此网络不是持久的。此操作会将其永久"
-"删除,而不是将其停止。要继续吗?"
+msgstr "此网络不是持久的。此操作会将其永久删除,而不是将其停止。要继续吗?"
msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
-"在启用了网络管理器的情况下,桥接 VLAN 标记的工作情况可能不良。您"
-"应该考虑禁用网络管理器。"
+"在启用了网络管理器的情况下,桥接 VLAN 标记的工作情况可能不良。您应该考虑禁用"
+"网络管理器。"
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
-msgstr ""
-"这将永久删除该存储池。要继续吗?"
+msgstr "这将永久删除该存储池。要继续吗?"
msgid "This storage pool is empty."
-msgstr ""
-"此存储池为空。"
+msgstr "此存储池为空。"
msgid ""
"It will format your disk and you will loose any data in there, are you sure "
"to continue? "
-msgstr ""
-"这将对磁盘进行格式化并且您将丢失其中的任何数据,确定要"
-"继续吗?"
+msgstr "这将对磁盘进行格式化并且您将丢失其中的任何数据,确定要继续吗?"
msgid "SCSI Fibre Channel"
-msgstr ""
-"SCSI 光纤通道"
+msgstr "SCSI 光纤通道"
msgid "No SCSI adapters found."
-msgstr ""
-"找不到任何 SCSI 适配器。"
+msgstr "找不到任何 SCSI 适配器。"
msgid "Loading iSCSI targets..."
-msgstr ""
-"正在装入 iSCSI 目标..."
+msgstr "正在装入 iSCSI 目标..."
msgid "No iSCSI found. Please input one."
-msgstr ""
-"找不到 iSCSI。请输入一个 iSCSI。"
+msgstr "找不到 iSCSI。请输入一个 iSCSI。"
msgid "Failed to load iSCSI targets."
-msgstr ""
-"未能装入 iSCSI 目标。"
+msgstr "未能装入 iSCSI 目标。"
msgid "The storage pool name can not be blank."
-msgstr ""
-"存储池名称不能为空白。"
+msgstr "存储池名称不能为空白。"
msgid "The storage pool path can not be blank."
-msgstr ""
-"存储池路径不能为空白。"
+msgstr "存储池路径不能为空白。"
msgid "NFS server mount path can not be blank."
-msgstr ""
-"NFS 服务器安装路径不能为空白。"
+msgstr "NFS 服务器安装路径不能为空白。"
msgid "Invalid NFS mount path."
-msgstr ""
-"NFS 安装路径无效。"
+msgstr "NFS 安装路径无效。"
msgid "No logical device selected."
-msgstr ""
-"未选择任何逻辑设备。"
+msgstr "未选择任何逻辑设备。"
msgid "The iSCSI target can not be blank."
-msgstr ""
-"此 iscsi 目标不能为空白。"
+msgstr "此 iscsi 目标不能为空白。"
msgid "Server name can not be blank."
-msgstr ""
-"服务器名称不能为空白。"
+msgstr "服务器名称不能为空白。"
msgid "This is not a valid Server Name or IP. Please, modify it."
-msgstr ""
-"这不是有效的服务器名称或 IP。请对其进行修改。"
+msgstr "这不是有效的服务器名称或 IP。请对其进行修改。"
msgid "Looking for available partitions ..."
-msgstr ""
-"正在查找可用分区..."
+msgstr "正在查找可用分区..."
msgid "No available partitions found."
-msgstr ""
-"找不到任何可用分区。"
+msgstr "找不到任何可用分区。"
msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"此存储池不是持久存储池。此操作会将其永久删除,"
-"而不是将其取消激活。要继续吗?"
+"此存储池不是持久存储池。此操作会将其永久删除,而不是将其取消激活。要继续吗?"
msgid "Unable to retrieve partitions information."
-msgstr ""
-"无法检索分区信息。"
+msgstr "无法检索分区信息。"
msgid "In progress..."
-msgstr ""
-"正在进行中..."
+msgstr "正在进行中..."
msgid "Failed!"
-msgstr ""
-"失败!"
+msgstr "失败!"
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
-msgstr ""
-"CDROM 路径必须是有效的本地/远程路径,并且不能为空白。"
+msgstr "CDROM 路径必须是有效的本地/远程路径,并且不能为空白。"
msgid "Disk pool or volume cannot be blank."
-msgstr ""
-"磁盘池或卷不能为空白。"
+msgstr "磁盘池或卷不能为空白。"
msgid "Peers"
-msgstr ""
-"同级"
+msgstr "同级"
msgid "Searching"
-msgstr ""
-"正在搜索"
+msgstr "正在搜索"
msgid "No peers found."
-msgstr ""
-"找不到同级。"
+msgstr "找不到同级。"
msgid "Help"
-msgstr ""
-"帮助"
+msgstr "帮助"
msgid "About"
-msgstr ""
-"关于"
+msgstr "关于"
msgid "Log out"
-msgstr ""
-"注销"
+msgstr "注销"
msgid "Version:"
-msgstr ""
-"版本:"
+msgstr "版本:"
msgid "Session timeout, please re-login."
-msgstr ""
-"会话超时,请重新登录。"
+msgstr "会话超时,请重新登录。"
msgid "User Name"
-msgstr ""
-"用户名"
+msgstr "用户名"
msgid "Password"
-msgstr ""
-"密码"
+msgstr "密码"
msgid "Generate a New Debug Report"
-msgstr ""
-"生成新调试报告"
+msgstr "生成新调试报告"
msgid "Report Name"
-msgstr ""
-"报告名称"
+msgstr "报告名称"
msgid ""
"The name used to identify the report. If omitted, a name will be chosen "
"based on current time. Name can contain: letters, digits, underscore (\"_\") "
"and hyphen (\"-\")."
msgstr ""
-"用于标识报告的名称。如果省略,那么将根据当前时间"
-"选择名称。名称可以包含:字母、数字、下划线(“_”)"
-"和连字符(“-”)。"
+"用于标识报告的名称。如果省略,那么将根据当前时间选择名称。名称可以包含:字"
+"母、数字、下划线(“_”)和连字符(“-”)。"
msgid "Rename a Debug Report"
-msgstr ""
-"重命名调试报告"
+msgstr "重命名调试报告"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
"hyphen (\"-\")."
-msgstr ""
-"用于标识报告的名称。名称可以包含:字母、数字和"
-"连字符(“-”)。"
+msgstr "用于标识报告的名称。名称可以包含:字母、数字和连字符(“-”)。"
msgid "Submit"
-msgstr ""
-"提交"
+msgstr "提交"
msgid "Add a Repository"
-msgstr ""
-"添加存储库"
+msgstr "添加存储库"
msgid "Identifier"
-msgstr ""
-"标识"
+msgstr "标识"
msgid "Single word, unique identifier for the repository."
-msgstr ""
-"一个字,存储库的唯一标识。"
+msgstr "一个字,存储库的唯一标识。"
msgid "Textual name for the repository."
-msgstr ""
-"存储库的文本名称。"
+msgstr "存储库的文本名称。"
msgid "URL"
-msgstr ""
-"URL"
+msgstr "URL"
msgid "Required Field"
-msgstr ""
-"必填字段"
+msgstr "必填字段"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
-msgstr ""
-"存储库的 URL。受支持的协议为 http、ftp 和 file。"
+msgstr "存储库的 URL。受支持的协议为 http、ftp 和 file。"
msgid "Repository is a mirror"
-msgstr ""
-"存储库是一个镜像"
+msgstr "存储库是一个镜像"
msgid "Distribution"
-msgstr ""
-"分发"
+msgstr "分发"
msgid "Distribution of the DEB repository."
-msgstr ""
-"DEB 存储库的分发版。"
+msgstr "DEB 存储库的分发版。"
msgid "Components"
-msgstr ""
-"组件"
+msgstr "组件"
msgid "List of components in DEB repository."
-msgstr ""
-"DEB 存储库中组件的列表。"
+msgstr "DEB 存储库中组件的列表。"
msgid "Edit Repository"
-msgstr ""
-"编辑存储库"
+msgstr "编辑存储库"
msgid "Mirror List URL"
-msgstr ""
-"镜像列表 URL"
+msgstr "镜像列表 URL"
msgid "Yes"
-msgstr ""
-"是"
+msgstr "是"
msgid "No"
-msgstr ""
-"否"
+msgstr "否"
msgid "Add a Volume to Storage Pool"
-msgstr ""
-"将卷添加至存储池"
+msgstr "将卷添加至存储池"
msgid "Fetch from remote URL"
-msgstr ""
-"从远程 URL 中访存"
+msgstr "从远程 URL 中访存"
msgid "Enter the remote URL here."
-msgstr ""
-"在此处输入远程 URL。"
+msgstr "在此处输入远程 URL。"
msgid "Upload a file"
-msgstr ""
-"上载文件"
+msgstr "上载文件"
msgid "Choose the file you want to upload."
-msgstr ""
-"选择要上载的文件。"
+msgstr "选择要上载的文件。"
msgid "Define a New Storage Pool"
-msgstr ""
-"定义新存储池"
+msgstr "定义新存储池"
msgid "Storage Pool Name"
-msgstr ""
-"存储池名称"
+msgstr "存储池名称"
msgid ""
"The name used to identify the storage pools, and it should not be empty."
-msgstr ""
-"用于标识存储池的名称,且该名称不能为空。"
+msgstr "用于标识存储池的名称,且该名称不能为空。"
msgid "Storage Pool Type"
-msgstr ""
-"存储池类型"
+msgstr "存储池类型"
msgid "Storage Path"
-msgstr ""
-"存储路径"
+msgstr "存储路径"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
-msgstr ""
-"存储池的路径。每个存储池都必须具有唯一路径。"
+msgstr "存储池的路径。每个存储池都必须具有唯一路径。"
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
"your system."
-msgstr ""
-"Kimchi 将尝试在目录在系统中尚不存在时"
-"对其进行创建。"
+msgstr "Kimchi 将尝试在目录在系统中尚不存在时对其进行创建。"
msgid "NFS Server IP"
-msgstr ""
-"NFS 服务器 IP"
+msgstr "NFS 服务器 IP"
msgid "NFS server IP or hostname. It can be input or chosen from history."
-msgstr ""
-"NFS 服务器 IP 或主机名。可以输入该值,也可以从历史记录中选择。"
+msgstr "NFS 服务器 IP 或主机名。可以输入该值,也可以从历史记录中选择。"
msgid "NFS Path"
-msgstr ""
-"NFS 路径"
+msgstr "NFS 路径"
msgid "The NFS exported path on NFS server."
-msgstr ""
-"NFS 服务器中 NFS 已导出路径。"
+msgstr "NFS 服务器中 NFS 已导出路径。"
msgid "Device path"
-msgstr ""
-"设备路径"
+msgstr "设备路径"
msgid "iSCSI Server"
-msgstr ""
-"iSCSI 服务器"
+msgstr "iSCSI 服务器"
msgid "iSCSI server IP or hostname. It should not be empty."
-msgstr ""
-"iSCSI 服务器 IP 或主机名。它不应为空。"
+msgstr "iSCSI 服务器 IP 或主机名。它不应为空。"
msgid "Server"
-msgstr ""
-"服务器"
+msgstr "服务器"
msgid "Port"
-msgstr ""
-"端口"
+msgstr "端口"
msgid "Target"
-msgstr ""
-"目标"
+msgstr "目标"
msgid "The iSCSI target on iSCSI server"
-msgstr ""
-"iSCSI 服务器上的 iSCSI 目标"
+msgstr "iSCSI 服务器上的 iSCSI 目标"
msgid "Add iSCSI Authentication"
-msgstr ""
-"添加 iSCSI 认证"
+msgstr "添加 iSCSI 认证"
msgid "iSCSI Authentication"
-msgstr ""
-"iSCSI 认证"
+msgstr "iSCSI 认证"
msgid "SCSI Adapter"
-msgstr ""
-"SCSI 适配器"
+msgstr "SCSI 适配器"
msgid "Please, wait..."
-msgstr ""
-"请稍等..."
+msgstr "请稍等..."
msgid "Add Template"
-msgstr ""
-"添加模板"
+msgstr "添加模板"
msgid "Where is the source media for this template? "
-msgstr ""
-"此模板的源介质在哪里?"
+msgstr "此模板的源介质在哪里?"
msgid "Local ISO Image"
-msgstr ""
-"本地 ISO 映像"
+msgstr "本地 ISO 映像"
msgid "Local Image File"
-msgstr ""
-"本地映像文件"
+msgstr "本地映像文件"
msgid "Remote ISO Image"
-msgstr ""
-"远程 ISO 映像"
+msgstr "远程 ISO 映像"
msgid "Search ISOs"
-msgstr ""
-"搜索 ISO"
+msgstr "搜索 ISO"
msgid "The following ISOs are available:"
-msgstr ""
-"以下 ISO 可用:"
+msgstr "以下 ISO 可用:"
msgid "OS: "
-msgstr ""
-"操作系统:"
+msgstr "操作系统:"
msgid "Version: "
-msgstr ""
-"版本:"
+msgstr "版本:"
msgid "Size: "
-msgstr ""
-"大小:"
+msgstr "大小:"
msgid "Search more ISOs"
-msgstr ""
-"搜索更多 ISO"
+msgstr "搜索更多 ISO"
msgid "Create Templates from Selected ISO"
-msgstr ""
-"从所选 ISO 创建模板"
+msgstr "从所选 ISO 创建模板"
msgid "I want to use a specific ISO file"
-msgstr ""
-"我要使用特定 ISO 文件"
+msgstr "我要使用特定 ISO 文件"
msgid "Loading default remote ISOs ..."
-msgstr ""
-"正在装入缺省远程 ISO..."
+msgstr "正在装入缺省远程 ISO..."
msgid "Arch: "
-msgstr ""
-"归档:"
+msgstr "归档:"
msgid "I want to use a custom URL"
-msgstr ""
-"我要使用定制 URL"
+msgstr "我要使用定制 URL"
msgid "Edit Template"
-msgstr ""
-"编辑模板"
+msgstr "编辑模板"
msgid "Processor"
-msgstr ""
-"处理器"
+msgstr "处理器"
msgid "CDROM"
-msgstr ""
-"CDROM"
+msgstr "CDROM"
msgid "Image File"
-msgstr ""
-"映象文件"
+msgstr "映象文件"
msgid "Graphics"
-msgstr ""
-"图形"
+msgstr "图形"
msgid "Disk(GB)"
-msgstr ""
-"磁盘 (GB)"
+msgstr "磁盘 (GB)"
msgid "Disk Format"
-msgstr ""
-"磁盘格式"
+msgstr "磁盘格式"
msgid "CPU Number"
-msgstr ""
-"CPU 数"
+msgstr "CPU 数"
msgid "Manually set CPU topology"
-msgstr ""
-"手动设置 CPU 拓扑"
+msgstr "手动设置 CPU 拓扑"
msgid "Cores"
-msgstr ""
-"核心"
+msgstr "核心"
msgid "Threads"
-msgstr ""
-"线程"
+msgstr "线程"
msgid "CPU"
-msgstr ""
-"CPU"
+msgstr "CPU"
msgid "Disk I/O"
-msgstr ""
-"磁盘 I/O"
+msgstr "磁盘 I/O"
msgid "Network I/O"
-msgstr ""
-"网络 I/O"
+msgstr "网络 I/O"
msgid "Livetile"
-msgstr ""
-"Livetile"
+msgstr "Livetile"
msgid "No guests found."
-msgstr ""
-"找不到访客。"
+msgstr "找不到访客。"
msgid "Shut down"
-msgstr ""
-"关闭"
+msgstr "关闭"
msgid "Restart"
-msgstr ""
-"重新启动"
+msgstr "重新启动"
msgid "Basic Information"
-msgstr ""
-"基本信息"
+msgstr "基本信息"
msgid "OS Distro"
-msgstr ""
-"操作系统 Distro"
+msgstr "操作系统 Distro"
msgid "OS Code Name"
-msgstr ""
-"操作系统代码名称"
+msgstr "操作系统代码名称"
msgid "CPU(s)"
-msgstr ""
-"CPU"
+msgstr "CPU"
msgid "System Statistics"
-msgstr ""
-"系统统计信息"
+msgstr "系统统计信息"
msgid "Update Progress"
-msgstr ""
-"更新进度"
+msgstr "更新进度"
msgid "Network Name"
-msgstr ""
-"网络名"
+msgstr "网络名"
msgid "State"
-msgstr ""
-"状态"
+msgstr "状态"
msgid "Network Type"
-msgstr ""
-"网络类型"
+msgstr "网络类型"
msgid "Address Space"
-msgstr ""
-"地址空间"
+msgstr "地址空间"
msgid "Name should not contain '/' and '\"'."
-msgstr ""
-"名称不应包含“/”和“\"”。"
+msgstr "名称不应包含“/”和“\"”。"
msgid "Isolated: no external network connection"
-msgstr ""
-"隔离:没有外部网络连接"
+msgstr "隔离:没有外部网络连接"
msgid "NAT: outbound physical network connection only"
-msgstr ""
-"NAT:仅适用于出站物理网络连接"
+msgstr "NAT:仅适用于出站物理网络连接"
msgid "Bridged: Virtual machines are connected to physical network directly"
-msgstr ""
-"桥接:虚拟机将直接连接到物理网络"
+msgstr "桥接:虚拟机将直接连接到物理网络"
msgid "(No interfaces found)"
-msgstr ""
-"(找不到任何接口)"
+msgstr "(找不到任何接口)"
msgid "Destination"
-msgstr ""
-"目的地"
+msgstr "目的地"
msgid "Enable VLAN"
-msgstr ""
-"启用 VLAN"
+msgstr "启用 VLAN"
msgid "VLAN ID"
-msgstr ""
-"VLAN 标识"
+msgstr "VLAN 标识"
msgid "Stop"
-msgstr ""
-"停止"
+msgstr "停止"
msgid "%Used"
-msgstr ""
-"已用百分比"
+msgstr "已用百分比"
msgid "Location"
-msgstr ""
-"位置 "
+msgstr "位置 "
msgid "Capacity"
-msgstr ""
-"容量"
+msgstr "容量"
msgid "Allocated"
-msgstr ""
-"已分配"
+msgstr "已分配"
msgid "active"
-msgstr ""
-"活动"
+msgstr "活动"
msgid "inactive"
-msgstr ""
-"非活动"
+msgstr "非活动"
msgid "Deactivate"
-msgstr ""
-"取消激活"
+msgstr "取消激活"
msgid "Activate"
-msgstr ""
-"激活"
+msgstr "激活"
msgid "Add Volume"
-msgstr ""
-"添加卷"
+msgstr "添加卷"
msgid "Extend"
-msgstr ""
-"扩展"
+msgstr "扩展"
msgid "Undefine"
-msgstr ""
-"取消定义"
+msgstr "取消定义"
msgid "Format"
-msgstr ""
-"格式"
+msgstr "格式"
msgid "Allocation"
-msgstr ""
-"分配"
+msgstr "分配"
msgid "No templates found."
-msgstr ""
-"找不到任何模板。"
-
-# ENGL1SH_VERS10N 28617_40 DO NOT REMOVE OR CHANGE THIS LINE
-# T9N_SRC_ID 92
-# T9N_SH1P_STR1NG KV310AAP001 1
+msgstr "找不到任何模板。"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 33755d7..c772f99 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -6,169 +6,141 @@ msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-06-24 09:39-0300\n"
+"POT-Creation-Date: 2015-08-21 09:52-0300\n"
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
-"Language: en_US\n"
+"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"Plural-Forms: nplurals=1; plural=0;"
+"Plural-Forms: nplurals=1; plural=0;\n"
#, python-format
msgid "Unknown parameter %(value)s"
-msgstr ""
-"不明參數 %(value)s"
+msgstr "不明參數 %(value)s"
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr ""
-"不容許針對 %(resource)s 執行刪除作業"
+msgstr "不容許針對 %(resource)s 執行刪除作業"
#, python-format
msgid "%(resource)s does not implement update method"
-msgstr ""
-"%(resource)s 未實作更新方法"
+msgstr "%(resource)s 未實作更新方法"
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr ""
-"不容許針對 %(resource)s 執行建立作業"
+msgstr "不容許針對 %(resource)s 執行建立作業"
msgid "Unable to parse JSON request"
-msgstr ""
-"無法剖析 JSON 要求"
+msgstr "無法剖析 JSON 要求"
msgid "This API only supports JSON"
-msgstr ""
-"此 API 僅支援 JSON"
+msgstr "此 API 僅支援 JSON"
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
-msgstr ""
-"參數與綱目中的需求不符:%(err)s"
+msgstr "參數與綱目中的需求不符:%(err)s"
msgid "You don't have permission to perform this operation."
-msgstr ""
-"您無權執行這項作業。"
+msgstr "您無權執行這項作業。"
msgid "Datastore is not initiated in the model object."
-msgstr ""
-"未在模型物件中起始資料儲存庫。"
+msgstr "未在模型物件中起始資料儲存庫。"
#, python-format
msgid "Unable to start task due error: %(err)s"
-msgstr ""
-"由於發生錯誤,無法開始工作:%(err)s"
+msgstr "由於發生錯誤,無法開始工作:%(err)s"
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
-msgstr ""
-"執行作業 '%(task)s' 時,超過逾時值 %(seconds)s 秒。"
+msgstr "執行作業 '%(task)s' 時,超過逾時值 %(seconds)s 秒。"
#, python-format
msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
-msgstr ""
-"針對使用者 '%(username)s' 的鑑別失敗。[錯誤碼:%(code)s]"
+msgstr "針對使用者 '%(username)s' 的鑑別失敗。[錯誤碼:%(code)s]"
msgid "You are not authorized to access Kimchi"
-msgstr ""
-"您未獲授權來存取 Kimchi"
+msgstr "您未獲授權來存取 Kimchi"
#, python-format
msgid "Specify %(item)s to login into Kimchi"
-msgstr ""
-"指定 %(item)s 以登入 Kimchi"
+msgstr "指定 %(item)s 以登入 Kimchi"
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
-msgstr ""
-"找不到具有給定 LDAP 設定的使用者 %(user_id)s。"
+msgstr "找不到具有給定 LDAP 設定的使用者 %(user_id)s。"
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
-msgstr ""
-"LDAP 配置無效:%(item)s:%(value)s"
+msgstr "LDAP 配置無效:%(item)s:%(value)s"
msgid "Unknown \"_cap\" specified"
-msgstr ""
-"指定的 \"_cap\" 不明"
+msgstr "指定的 \"_cap\" 不明"
msgid "\"_passthrough\" should be \"true\" or \"false\""
-msgstr ""
-"\"_passthrough\" 應該是 \"true\" 或 \"false\""
+msgstr "\"_passthrough\" 應該是 \"true\" 或 \"false\""
msgid "\"_passthrough_affected_by\" should be a device name string"
-msgstr ""
-"\"_passthrough_affected_by\" 應該是裝置名稱字串"
+msgstr "\"_passthrough_affected_by\" 應該是裝置名稱字串"
+
+#, fuzzy
+msgid "\"_available_only\" should be \"true\" or \"false\""
+msgstr "\"_passthrough\" 應該是 \"true\" 或 \"false\""
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
-msgstr ""
-"取得區塊裝置時發生錯誤。詳細資料:%(err)s"
+msgstr "取得區塊裝置時發生錯誤。詳細資料:%(err)s"
#, python-format
msgid "Error while getting block device information for %(device)s."
-msgstr ""
-"取得 %(device)s 的區塊裝置資訊時發生錯誤。"
+msgstr "取得 %(device)s 的區塊裝置資訊時發生錯誤。"
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr ""
-"找不到 distro 檔:%(filename)s"
+msgstr "找不到 distro 檔:%(filename)s"
#, python-format
msgid ""
"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
-msgstr ""
-"無法剖析 distro 檔:%(filename)s。請確保該檔案是 JSON 檔。"
+msgstr "無法剖析 distro 檔:%(filename)s。請確保該檔案是 JSON 檔。"
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
-msgstr ""
-"無法登入 iSCSI 主機目標 %(portal)s。詳細資料:%(err)s"
+msgstr "無法登入 iSCSI 主機目標 %(portal)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to login to iSCSI host %(host)s target %(target)s"
-msgstr ""
-"無法登入 iSCSI 主機 %(host)s 目標 %(target)s"
+msgstr "無法登入 iSCSI 主機 %(host)s 目標 %(target)s"
#, python-format
msgid "Unable to find ISO file %(filename)s"
-msgstr ""
-"找不到 ISO 檔 %(filename)s"
+msgstr "找不到 ISO 檔 %(filename)s"
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr ""
-"ISO 檔 %(filename)s 不可啟動"
+msgstr "ISO 檔 %(filename)s 不可啟動"
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
-msgstr ""
-"ISO 檔 %(filename)s 沒有有效的 El Torito 啟動記錄"
+msgstr "ISO 檔 %(filename)s 沒有有效的 El Torito 啟動記錄"
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
-msgstr ""
-"ISO %(filename)s 中有無效的 El Torito 驗證項目"
+msgstr "ISO %(filename)s 中有無效的 El Torito 驗證項目"
#, python-format
msgid "Invalid El Torito boot indicator in ISO %(filename)s"
-msgstr ""
-"ISO %(filename)s 中有無效的 El Torito 啟動指示器"
+msgstr "ISO %(filename)s 中有無效的 El Torito 啟動指示器"
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
-msgstr ""
-"ISO %(filename)s 中有主要磁碟區的非預期磁區類型"
+msgstr "ISO %(filename)s 中有主要磁碟區的非預期磁區類型"
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
-msgstr ""
-"讀取 ISO %(filename)s 中的磁區描述子時遇到不當的格式"
+msgstr "讀取 ISO %(filename)s 中的磁區描述子時遇到不當的格式"
#, python-format
msgid ""
@@ -178,265 +150,212 @@ msgid ""
"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
"'path_to_iso'.Details: %(err)s"
msgstr ""
-"Hypervisor 無權使用此 ISO %(filename)s。"
-"請考量將其移動至 /var/lib/libvirt 下、將搜尋許可權設為"
-"'%(user)s' 使用者的檔案存取控制清單(若有可能)、"
-"將 '%(user)s' 新增至 ISO 路徑群組或(建議不要執行此動作)"
-"'chmod -R o+x 'path_to_iso'。詳細資料:%(err)s"
+"Hypervisor 無權使用此 ISO %(filename)s。請考量將其移動至 /var/lib/libvirt "
+"下、將搜尋許可權設為'%(user)s' 使用者的檔案存取控制清單(若有可能)、將 "
+"'%(user)s' 新增至 ISO 路徑群組或(建議不要執行此動作)'chmod -R o+x "
+"'path_to_iso'。詳細資料:%(err)s"
msgid "An error occurred when probing image OS information."
-msgstr ""
-"探測映像檔 OS 資訊時發生錯誤。"
+msgstr "探測映像檔 OS 資訊時發生錯誤。"
msgid "No OS information found in given image."
-msgstr ""
-"在給定的映像檔中,找不到 OS 資訊。"
+msgstr "在給定的映像檔中,找不到 OS 資訊。"
#, python-format
msgid "Unable to read image file %(filename)s"
-msgstr ""
-"無法讀取映像檔 %(filename)s"
+msgstr "無法讀取映像檔 %(filename)s"
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
-msgstr ""
-"映像檔必須是系統上的現有檔案。%(filename)s 不是有效的"
-"輸入。"
+msgstr "映像檔必須是系統上的現有檔案。%(filename)s 不是有效的輸入。"
#, python-format
msgid "Virtual machine %(name)s already exists"
-msgstr ""
-"虛擬機器 %(name)s 已經存在"
+msgstr "虛擬機器 %(name)s 已經存在"
#, python-format
msgid "Virtual machine %(name)s does not exist"
-msgstr ""
-"虛擬機器 %(name)s 不存在"
+msgstr "虛擬機器 %(name)s 不存在"
#, python-format
msgid ""
"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
"in use or the virtual machine is not powered off."
msgstr ""
-"無法重新命名虛擬機器 %(name)s。名稱 %(new_name)s 已經"
-"在使用中,或者未關閉該虛擬機器的電源。"
+"無法重新命名虛擬機器 %(name)s。名稱 %(new_name)s 已經在使用中,或者未關閉該虛"
+"擬機器的電源。"
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
-msgstr ""
-"無法擷取已停止虛擬機器 %(name)s 的畫面"
+msgstr "無法擷取已停止虛擬機器 %(name)s 的畫面"
msgid "Remote ISO image is not supported by this server."
-msgstr ""
-"此伺服器不支援遠端 ISO 映像檔。"
+msgstr "此伺服器不支援遠端 ISO 映像檔。"
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
-msgstr ""
-"擷取畫面在虛擬機器 %(name)s 上不受支援"
+msgstr "擷取畫面在虛擬機器 %(name)s 上不受支援"
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"無法建立虛擬機器 %(name)s。詳細資料:%(err)s"
+msgstr "無法建立虛擬機器 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"無法更新虛擬機器 %(name)s。詳細資料:%(err)s"
+msgstr "無法更新虛擬機器 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"無法擷取虛擬機器 %(name)s。詳細資料:%(err)s"
+msgstr "無法擷取虛擬機器 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to connect to powered off virtual machine %(name)s."
-msgstr ""
-"無法連接至已關閉電源的虛擬機器 %(name)s。"
+msgstr "無法連接至已關閉電源的虛擬機器 %(name)s。"
msgid "Virtual machine name must be a string without slashes (/)"
-msgstr ""
-"虛擬機器名稱必須是不含斜線 (/) 的字串"
+msgstr "虛擬機器名稱必須是不含斜線 (/) 的字串"
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
-msgstr ""
-"為虛擬機器指定的範本 URI %(value)s 無效"
+msgstr "為虛擬機器指定的範本 URI %(value)s 無效"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for virtual machine"
-msgstr ""
-"為虛擬機器指定的儲存區 URI %(value)s 無效"
+msgstr "為虛擬機器指定的儲存區 URI %(value)s 無效"
msgid "Supported virtual machine graphics are Spice or VNC"
-msgstr ""
-"受支援的虛擬機器圖形是 Spice 或 VNC"
+msgstr "受支援的虛擬機器圖形是 Spice 或 VNC"
msgid "Graphics address to listen on must be IPv4 or IPv6"
-msgstr ""
-"要接聽的圖形卡位址必須是 IPv4 或 IPv6"
+msgstr "要接聽的圖形卡位址必須是 IPv4 或 IPv6"
msgid "Specify a template to create a virtual machine from"
-msgstr ""
-"指定用於建立虛擬機器的範本"
+msgstr "指定用於建立虛擬機器的範本"
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"無法啟動虛擬機器 %(name)s。詳細資料:%(err)s"
+msgstr "無法啟動虛擬機器 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"無法關閉虛擬機器 %(name)s 的電源。詳細資料:%(err)s"
+msgstr "無法關閉虛擬機器 %(name)s 的電源。詳細資料:%(err)s"
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"無法刪除虛擬機器 %(name)s。詳細資料:%(err)s"
+msgstr "無法刪除虛擬機器 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"無法重設虛擬機器 %(name)s。詳細資料:%(err)s"
+msgstr "無法重設虛擬機器 %(name)s。詳細資料:%(err)s"
msgid "User name list must be an array"
-msgstr ""
-"使用者名稱清單必須是陣列"
+msgstr "使用者名稱清單必須是陣列"
msgid "User name must be a string"
-msgstr ""
-"使用者名稱必須是字串"
+msgstr "使用者名稱必須是字串"
msgid "Group name list must be an array"
-msgstr ""
-"群組名稱清單必須是陣列"
+msgstr "群組名稱清單必須是陣列"
msgid "Group name must be a string"
-msgstr ""
-"群組名稱必須是字串"
+msgstr "群組名稱必須是字串"
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr ""
-"使用者 '%(users)s' 不存在"
+msgstr "使用者 '%(users)s' 不存在"
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr ""
-"群組 '%(groups)s' 不存在"
+msgstr "群組 '%(groups)s' 不存在"
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"無法關閉虛擬機器 %(name)s。詳細資料:%(err)s"
+msgstr "無法關閉虛擬機器 %(name)s。詳細資料:%(err)s"
#, python-format
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr ""
-"無法取得虛擬機器 %(name)s 的存取 meta 資料。詳細資料:%(err)s"
+msgstr "無法取得虛擬機器 %(name)s 的存取 meta 資料。詳細資料:%(err)s"
msgid "The guest console password must be a string."
-msgstr ""
-"客體主控台密碼必須是字串。"
+msgstr "客體主控台密碼必須是字串。"
msgid "The life time for the guest console password must be a number."
-msgstr ""
-"客體主控台密碼的生命期限必須是數字。"
+msgstr "客體主控台密碼的生命期限必須是數字。"
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
-msgstr ""
-"必須先停止虛擬機器 '%(name)s',然後再複製該虛擬機器。"
+msgstr "必須先停止虛擬機器 '%(name)s',然後再複製該虛擬機器。"
#, python-format
msgid "Insufficient disk space to clone virtual machine '%(name)s'"
-msgstr ""
-"磁碟空間不足,無法複製虛擬機器 '%(name)s'"
+msgstr "磁碟空間不足,無法複製虛擬機器 '%(name)s'"
#, python-format
msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
-msgstr ""
-"無法複製 VM '%(name)s'。詳細資料:%(err)s"
+msgstr "無法複製 VM '%(name)s'。詳細資料:%(err)s"
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
-msgstr ""
-"針對非持續性虛擬機器 %(name)s 的作業無效"
+msgstr "針對非持續性虛擬機器 %(name)s 的作業無效"
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
-msgstr ""
-"無法暫停 VM '%(name)s',因為該 VM 未處於執行中狀態。"
+msgstr "無法暫停 VM '%(name)s',因為該 VM 未處於執行中狀態。"
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
-msgstr ""
-"無法暫停 VM '%(name)s'。詳細資料:%(err)s"
+msgstr "無法暫停 VM '%(name)s'。詳細資料:%(err)s"
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
-msgstr ""
-"無法回復 VM '%(name)s',因為該 VM 未處於暫停狀態。"
+msgstr "無法回復 VM '%(name)s',因為該 VM 未處於暫停狀態。"
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
-msgstr ""
-"無法回復 VM '%(name)s'。詳細資料:%(err)s"
+msgstr "無法回復 VM '%(name)s'。詳細資料:%(err)s"
msgid "Memory assigned is higher then the maximum allowed in the host."
-msgstr ""
-"所指派的記憶體高於主機中所容許使用的上限。"
+msgstr "所指派的記憶體高於主機中所容許使用的上限。"
#, python-format
msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
-"VM '%(name)s' 不支援即時記憶體更新。請在機器處於離線狀態時"
-"更新記憶體,以啟用此功能。"
+"VM '%(name)s' 不支援即時記憶體更新。請在機器處於離線狀態時更新記憶體,以啟用"
+"此功能。"
msgid "Only increase memory is allowed in active VMs"
-msgstr ""
-"作用中的 VM 只容許增加記憶體"
+msgstr "作用中的 VM 只容許增加記憶體"
msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
-msgstr ""
-"對於即時記憶體更新,新的記憶體值必須等於舊記憶體值加上"
-"1024 Mib 的倍數"
+msgstr "對於即時記憶體更新,新的記憶體值必須等於舊記憶體值加上1024 Mib 的倍數"
msgid "There are not enough free slots of 1024 Mib in the guest."
-msgstr ""
-"客體中可用的 1024 Mib 插槽不足。"
+msgstr "客體中可用的 1024 Mib 插槽不足。"
msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
-msgstr ""
-"主機的 libvirt 版本不支援記憶體裝置。Libvirt 必須大於等於"
-"1.2.14"
+msgstr "主機的 libvirt 版本不支援記憶體裝置。Libvirt 必須大於等於1.2.14"
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
-msgstr ""
-"連接記憶體裝置時發生錯誤。詳細資料:%(error)s"
+msgstr "連接記憶體裝置時發生錯誤。詳細資料:%(error)s"
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
-msgstr ""
-"VM %(vmid)s 不包含直接指派的主機裝置 %(dev_name)s。"
+msgstr "VM %(vmid)s 不包含直接指派的主機裝置 %(dev_name)s。"
#, python-format
msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
-msgstr ""
-"不容許將主機裝置 %(dev_name)s 直接指派給 VM。"
+msgstr "不容許將主機裝置 %(dev_name)s 直接指派給 VM。"
msgid ""
"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
@@ -445,2397 +364,1835 @@ msgid ""
"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
"iommu=1."
msgstr ""
-"找不到 IOMMU 群組。主機 PCI 透通需要 IOMMU 群組才能"
-"正常運作。請在 BIOS 中啟用 Intel VT-d 或 AMD IOMMU,然後驗證"
-"是否使用 IOMMU 支援編譯了核心。若為 Intel CPU,請將 intel_iommu=on "
-"新增至 /boot/grub2/grub.conf 中的核心參數。若為 AMD CPU,請新增 iommu=pt "
-"iommu=1。"
+"找不到 IOMMU 群組。主機 PCI 透通需要 IOMMU 群組才能正常運作。請在 BIOS 中啟"
+"用 Intel VT-d 或 AMD IOMMU,然後驗證是否使用 IOMMU 支援編譯了核心。若為 "
+"Intel CPU,請將 intel_iommu=on 新增至 /boot/grub2/grub.conf 中的核心參數。若"
+"為 AMD CPU,請新增 iommu=pt iommu=1。"
msgid "\"name\" should be a device name string"
-msgstr ""
-"\"name\" 應該是裝置名稱字串"
+msgstr "\"name\" 應該是裝置名稱字串"
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
-msgstr ""
-"主機可能正在使用裝置 %(name)s。無法將該裝置連接至"
-"客體。"
+msgstr "主機可能正在使用裝置 %(name)s。無法將該裝置連接至客體。"
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
-msgstr ""
-"介面 %(iface)s 不在虛擬機器 %(name)s 中"
+msgstr "介面 %(iface)s 不在虛擬機器 %(name)s 中"
#, python-format
msgid ""
"Network %(network)s specified for virtual machine %(name)s does not exist"
-msgstr ""
-"為虛擬機器 %(name)s 指定的網路 %(network)s 不存在"
+msgstr "為虛擬機器 %(name)s 指定的網路 %(network)s 不存在"
msgid "Supported virtual machine interfaces type is only network"
-msgstr ""
-"唯一受支援的虛擬機器介面類型是網路"
+msgstr "唯一受支援的虛擬機器介面類型是網路"
msgid "Network name for virtual machine interface must be a string"
-msgstr ""
-"虛擬機器介面的網路名稱必須是字串"
+msgstr "虛擬機器介面的網路名稱必須是字串"
msgid "Invalid network model card specified for virtual machine interface"
-msgstr ""
-"為虛擬機器介面指定的網路模型卡無效"
+msgstr "為虛擬機器介面指定的網路模型卡無效"
msgid "Specify type and network to add a new virtual machine interface"
-msgstr ""
-"指定類型和網路以新增虛擬機器介面"
+msgstr "指定類型和網路以新增虛擬機器介面"
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
-msgstr ""
-"「MAC 位址」必須遵循下列格式:FF:FF:FF:FF:FF:FF"
+msgstr "「MAC 位址」必須遵循下列格式:FF:FF:FF:FF:FF:FF"
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
-msgstr ""
-"「MAC 位址」%(mac)s 已經存在於虛擬機器 %(name)s 中"
+msgstr "「MAC 位址」%(mac)s 已經存在於虛擬機器 %(name)s 中"
msgid "Invalid MAC Address"
-msgstr ""
-"MAC 位址無效"
+msgstr "MAC 位址無效"
msgid "Cannot change MAC address of a running virtual machine"
-msgstr ""
-"無法變更執行中虛擬機器的 MAC 位址"
+msgstr "無法變更執行中虛擬機器的 MAC 位址"
#, python-format
msgid "Template %(name)s already exists"
-msgstr ""
-"範本 %(name)s 已經存在"
+msgstr "範本 %(name)s 已經存在"
#, python-format
msgid ""
"Network '%(network)s' specified for template %(template)s does not exist"
-msgstr ""
-"為範本 %(template)s 指定的網路 '%(network)s' 不存在"
+msgstr "為範本 %(template)s 指定的網路 '%(network)s' 不存在"
#, python-format
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
-msgstr ""
-"為範本 %(template)s 指定的儲存區 %(pool)s 不存在"
+msgstr "為範本 %(template)s 指定的儲存區 %(pool)s 不存在"
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
-msgstr ""
-"為範本 %(template)s 指定的儲存區 %(pool)s 處於非作用中狀態"
+msgstr "為範本 %(template)s 指定的儲存區 %(pool)s 處於非作用中狀態"
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr ""
-"為 CDROM 指定的參數 '%(param)s' 無效。"
+msgstr "為 CDROM 指定的參數 '%(param)s' 無效。"
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
-msgstr ""
-"為範本 %(template)s 指定的網路 %(network)s 處於非作用中狀態"
+msgstr "為範本 %(template)s 指定的網路 %(network)s 處於非作用中狀態"
msgid "Template name must be a string"
-msgstr ""
-"範本名稱必須是字串"
+msgstr "範本名稱必須是字串"
msgid "Template icon must be a path to the image"
-msgstr ""
-"範本圖示必須是影像的路徑"
+msgstr "範本圖示必須是影像的路徑"
msgid "Template distribution must be a string"
-msgstr ""
-"範本發行套件必須是字串"
+msgstr "範本發行套件必須是字串"
msgid "Template distribution version must be a string"
-msgstr ""
-"範本發行版本必須是字串"
+msgstr "範本發行版本必須是字串"
msgid "The number of CPUs must be an integer greater than 0"
-msgstr ""
-"CPU 數目必須是大於 0 的整數"
+msgstr "CPU 數目必須是大於 0 的整數"
msgid "Amount of memory (MB) must be an integer greater than 512"
-msgstr ""
-"記憶體數量 (MB) 必須是大於 512 的整數"
+msgstr "記憶體數量 (MB) 必須是大於 512 的整數"
msgid "Template CDROM must be a local or remote ISO file"
-msgstr ""
-"範本 CDROM 必須是本端或遠端 ISO 檔案"
+msgstr "範本 CDROM 必須是本端或遠端 ISO 檔案"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for template"
-msgstr ""
-"為範本指定的儲存區 URI %(value)s 無效"
+msgstr "為範本指定的儲存區 URI %(value)s 無效"
msgid "Specify an ISO image as CDROM or a base image to create a template"
-msgstr ""
-"指定 ISO 映像檔作為 CDROM 或基本映像檔,以建立範本"
+msgstr "指定 ISO 映像檔作為 CDROM 或基本映像檔,以建立範本"
msgid "All networks for the template must be specified in a list."
-msgstr ""
-"範本的所有網路都必須在清單中指定。"
+msgstr "範本的所有網路都必須在清單中指定。"
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
-msgstr ""
-"當儲存區是 iSCSI 或 SCSI 時,請將磁區指定給範本"
+msgstr "當儲存區是 iSCSI 或 SCSI 時,請將磁區指定給範本"
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
-msgstr ""
-"磁區 %(volume)s 不在儲存區 %(pool)s 中"
+msgstr "磁區 %(volume)s 不在儲存區 %(pool)s 中"
#, python-format
msgid "Unable to create template due error: %(err)s"
-msgstr ""
-"由於發生錯誤,無法建立範本:%(err)s"
+msgstr "由於發生錯誤,無法建立範本:%(err)s"
#, python-format
msgid "Unable to delete template due error: %(err)s"
-msgstr ""
-"由於發生錯誤,無法刪除範本:%(err)s"
+msgstr "由於發生錯誤,無法刪除範本:%(err)s"
msgid "Disk size must be an integer greater than 1GB."
-msgstr ""
-"磁碟大小必須是大於 1 GB 的整數。"
+msgstr "磁碟大小必須是大於 1 GB 的整數。"
msgid "Template base image must be a valid local image file"
-msgstr ""
-"範本基本映像檔必須是有效的本端映像檔"
+msgstr "範本基本映像檔必須是有效的本端映像檔"
#, python-format
msgid "Cannot identify base image %(path)s format"
-msgstr ""
-"無法識別基本映像檔 %(path)s 格式"
+msgstr "無法識別基本映像檔 %(path)s 格式"
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
-msgstr ""
-"指定 CPU 拓蹼時,VCPU 必須是 Socket、核心及"
-"執行緒的產品。"
+msgstr "指定 CPU 拓蹼時,VCPU 必須是 Socket、核心及執行緒的產品。"
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
"zero."
-msgstr ""
-"指定 CPU 拓蹼時,每一個元素都必須是大於 0 的"
-"整數。"
+msgstr "指定 CPU 拓蹼時,每一個元素都必須是大於 0 的整數。"
msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"磁碟映像檔格式無效。有效的格式:bochs、cloop、cow、dmg、qcow、"
-"qcow2、qed、raw、vmdk 和 vpc。"
+"磁碟映像檔格式無效。有效的格式:bochs、cloop、cow、dmg、qcow、qcow2、qed、"
+"raw、vmdk 和 vpc。"
#, python-format
msgid "Storage pool %(name)s already exists"
-msgstr ""
-"儲存區 %(name)s 已經存在"
+msgstr "儲存區 %(name)s 已經存在"
#, python-format
msgid "Storage pool %(name)s does not exist"
-msgstr ""
-"儲存區 %(name)s 不存在"
+msgstr "儲存區 %(name)s 不存在"
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
-msgstr ""
-"指定 %(item)s 以建立儲存區 %(name)s"
+msgstr "指定 %(item)s 以建立儲存區 %(name)s"
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr ""
-"無法刪除作用中的儲存區 %(name)s"
+msgstr "無法刪除作用中的儲存區 %(name)s"
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
-msgstr ""
-"無法列出儲存區。詳細資料:%(err)s"
+msgstr "無法列出儲存區。詳細資料:%(err)s"
#, python-format
msgid "Unable to create storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"無法建立儲存區 %(name)s。詳細資料:%(err)s"
+msgstr "無法建立儲存區 %(name)s。詳細資料:%(err)s"
#, python-format
msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
-msgstr ""
-"無法取得儲存區 %(name)s 中的儲存磁區數目。詳細資料:"
-"%(err)s"
+msgstr "無法取得儲存區 %(name)s 中的儲存磁區數目。詳細資料:%(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"無法啟動儲存區 %(name)s。詳細資料:%(err)s"
+msgstr "無法啟動儲存區 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"無法取消啟動儲存區 %(name)s。詳細資料:%(err)s"
+msgstr "無法取消啟動儲存區 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
-msgstr ""
-"無法刪除儲存區 %(name)s。詳細資料:%(err)s"
+msgstr "無法刪除儲存區 %(name)s。詳細資料:%(err)s"
#, python-format
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
-msgstr ""
-"無法建立 NFS 儲存區,因為在裝載期間,匯出路徑 %(path)s 可能會封鎖"
+msgstr "無法建立 NFS 儲存區,因為在裝載期間,匯出路徑 %(path)s 可能會封鎖"
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
-msgstr ""
-"無法建立 NFS 儲存區,因為匯出路徑 %(path)s 裝載失敗"
+msgstr "無法建立 NFS 儲存區,因為匯出路徑 %(path)s 裝載失敗"
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr ""
-"不受支援的儲存區類型:%(type)s"
+msgstr "不受支援的儲存區類型:%(type)s"
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
-msgstr ""
-"擷取儲存區 XML 至 %(pool)s 時發生錯誤"
+msgstr "擷取儲存區 XML 至 %(pool)s 時發生錯誤"
msgid "Storage pool name must be a string without slashes (/)"
-msgstr ""
-"儲存區名稱必須是不含斜線 (/) 的字串"
+msgstr "儲存區名稱必須是不含斜線 (/) 的字串"
msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
"iso"
-msgstr ""
-"受支援的儲存區類型是 dir、netfs、邏輯、iscsi、isci 和 kimchi-"
-"iso"
+msgstr "受支援的儲存區類型是 dir、netfs、邏輯、iscsi、isci 和 kimchi-iso"
msgid "Storage pool path must be a string"
-msgstr ""
-"儲存區路徑必須是字串"
+msgstr "儲存區路徑必須是字串"
msgid "Storage pool host must be a IP or hostname"
-msgstr ""
-"儲存區主機必須是 IP 或主機名稱"
+msgstr "儲存區主機必須是 IP 或主機名稱"
msgid "Storage pool device must be the absolute path to the block device"
-msgstr ""
-"儲存區裝置必須是區塊裝置的絕對路徑"
+msgstr "儲存區裝置必須是區塊裝置的絕對路徑"
msgid "Storage pool devices parameter must be a list"
-msgstr ""
-"儲存區裝置參數必須是清單"
+msgstr "儲存區裝置參數必須是清單"
msgid "Target IQN of an iSCSI pool must be a string"
-msgstr ""
-"iSCSI 儲存區的目標 IQN 必須是字串"
+msgstr "iSCSI 儲存區的目標 IQN 必須是字串"
msgid "Port of a remote storage server must be an integer between 1 and 65535"
-msgstr ""
-"遠端儲存體伺服器的埠必須是介於 1 和 65535 之間的整數"
+msgstr "遠端儲存體伺服器的埠必須是介於 1 和 65535 之間的整數"
msgid "iSCSI target username must be a string"
-msgstr ""
-"iSCSI 目標使用者名稱必須是字串"
+msgstr "iSCSI 目標使用者名稱必須是字串"
msgid "iSCSI target password must be a string"
-msgstr ""
-"iSCSI 目標密碼必須是字串"
+msgstr "iSCSI 目標密碼必須是字串"
msgid "Specify name and type to create a storage pool"
-msgstr ""
-"指定名稱和類型以建立儲存區"
+msgstr "指定名稱和類型以建立儲存區"
#, python-format
msgid ""
"%(disk)s is not a valid disk/partition. Could not add it to the pool "
"%(pool)s."
-msgstr ""
-"%(disk)s 不是有效的磁碟/分割區。無法將其新增至儲存區"
-"%(pool)s。"
+msgstr "%(disk)s 不是有效的磁碟/分割區。無法將其新增至儲存區%(pool)s。"
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
-msgstr ""
-"無法延伸邏輯儲存區 %(pool)s。詳細資料:%(err)s"
+msgstr "無法延伸邏輯儲存區 %(pool)s。詳細資料:%(err)s"
msgid "The parameter disks only can be updated for logical storage pool."
-msgstr ""
-"只能針對邏輯儲存區更新「僅限磁碟」參數。"
+msgstr "只能針對邏輯儲存區更新「僅限磁碟」參數。"
msgid "The SCSI host adapter name must be a string."
-msgstr ""
-"SCSI 主機配接卡名稱必須是字串。"
+msgstr "SCSI 主機配接卡名稱必須是字串。"
msgid "The storage pool kimchi_isos is reserved for internal use"
-msgstr ""
-"儲存區 kimchi_isos 保留供內部使用"
+msgstr "儲存區 kimchi_isos 保留供內部使用"
#, python-format
msgid ""
"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
-msgstr ""
-"無法啟動 NFS 儲存區 %(name)s。NFS 伺服器 %(server)s"
-"無法連線。"
+msgstr "無法啟動 NFS 儲存區 %(name)s。NFS 伺服器 %(server)s無法連線。"
#, python-format
msgid ""
"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
-msgstr ""
-"無法取消啟動 NFS 儲存區 %(name)s。NFS 伺服器 %(server)s"
-"無法連線。"
+msgstr "無法取消啟動 NFS 儲存區 %(name)s。NFS 伺服器 %(server)s無法連線。"
#, python-format
msgid ""
"Unable to deactivate pool %(name)s as it is associated with some templates"
-msgstr ""
-"無法取消啟動儲存區 %(name)s,因為它與部分範本相關聯"
+msgstr "無法取消啟動儲存區 %(name)s,因為它與部分範本相關聯"
#, python-format
msgid "Unable to delete pool %(name)s as it is associated with some templates"
-msgstr ""
-"無法刪除儲存區 %(name)s,因為它與部分範本相關聯"
+msgstr "無法刪除儲存區 %(name)s,因為它與部分範本相關聯"
#, python-format
msgid ""
"A volume group named '%(name)s' already exists. Please, choose another name "
"to create the logical pool."
-msgstr ""
-"名為 '%(name)s' 的磁區群組已存在。請選擇另一個名稱"
-"以建立邏輯儲存區。"
+msgstr "名為 '%(name)s' 的磁區群組已存在。請選擇另一個名稱以建立邏輯儲存區。"
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
-msgstr ""
-"由於下列錯誤,無法使用深層掃描資訊來更新資料庫:%(err)s"
+msgstr "由於下列錯誤,無法使用深層掃描資訊來更新資料庫:%(err)s"
#, python-format
msgid "Storage volume %(name)s already exists"
-msgstr ""
-"儲存磁區 %(name)s 已經存在"
+msgstr "儲存磁區 %(name)s 已經存在"
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
-msgstr ""
-"儲存磁區 %(name)s 不在儲存區 %(pool)s 中"
+msgstr "儲存磁區 %(name)s 不在儲存區 %(pool)s 中"
#, python-format
msgid ""
"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
"not active"
-msgstr ""
-"無法建立儲存磁區 %(volume)s,因為儲存區 %(pool)s"
-"未處於作用中狀態"
+msgstr "無法建立儲存磁區 %(volume)s,因為儲存區 %(pool)s未處於作用中狀態"
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
-msgstr ""
-"指定 %(item)s 以建立儲存磁區 %(volume)s"
+msgstr "指定 %(item)s 以建立儲存磁區 %(volume)s"
#, python-format
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
-msgstr ""
-"無法列出儲存磁區,因為儲存區 %(pool)s 未處於作用中狀態"
+msgstr "無法列出儲存磁區,因為儲存區 %(pool)s 未處於作用中狀態"
#, python-format
msgid ""
"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
"%(err)s"
-msgstr ""
-"無法在儲存區 %(pool)s 中建立儲存磁區 %(name)s。詳細資料:"
-"%(err)s"
+msgstr "無法在儲存區 %(pool)s 中建立儲存磁區 %(name)s。詳細資料:%(err)s"
#, python-format
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
-msgstr ""
-"無法列出儲存區 %(pool)s 中的儲存磁區。詳細資料:%(err)s"
+msgstr "無法列出儲存區 %(pool)s 中的儲存磁區。詳細資料:%(err)s"
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
-msgstr ""
-"無法清除儲存磁區 %(name)s。詳細資料:%(err)s"
+msgstr "無法清除儲存磁區 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
-msgstr ""
-"無法刪除儲存磁區 %(name)s。詳細資料:%(err)s"
+msgstr "無法刪除儲存磁區 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
-msgstr ""
-"無法調整儲存磁區 %(name)s 的大小。詳細資料:%(err)s"
+msgstr "無法調整儲存磁區 %(name)s 的大小。詳細資料:%(err)s"
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
-msgstr ""
-"儲存體類型 %(type)s 不支援磁區建立和刪除"
+msgstr "儲存體類型 %(type)s 不支援磁區建立和刪除"
msgid "Storage volume name must be a string"
-msgstr ""
-"儲存磁區名稱必須是字串"
+msgstr "儲存磁區名稱必須是字串"
msgid "Storage volume allocation must be an integer number"
-msgstr ""
-"儲存磁區配置必須是整數"
+msgstr "儲存磁區配置必須是整數"
msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"儲存磁區格式不受支援。有效的格式:bochs、cloop、cow、dmg、"
-"qcow、qcow2、qed、raw、vmdk 和 vpc。"
+"儲存磁區格式不受支援。有效的格式:bochs、cloop、cow、dmg、qcow、qcow2、qed、"
+"raw、vmdk 和 vpc。"
msgid "Storage volume requires a volume name"
-msgstr ""
-"儲存磁區需要磁區名稱"
+msgstr "儲存磁區需要磁區名稱"
#, python-format
msgid ""
"Unable to update database with storage volume information due error: %(err)s"
-msgstr ""
-"由於下列錯誤,無法使用儲存磁區資訊來更新資料庫:%(err)s"
+msgstr "由於下列錯誤,無法使用儲存磁區資訊來更新資料庫:%(err)s"
#, python-format
msgid "Only one of parameter %(param)s can be specified"
-msgstr ""
-"只能指定其中一個參數 %(param)s"
+msgstr "只能指定其中一個參數 %(param)s"
#, python-format
msgid "Create volume from %(param)s is not supported"
-msgstr ""
-"不支援從 %(param)s 建立磁區"
+msgstr "不支援從 %(param)s 建立磁區"
msgid "Storage volume capacity must be an integer number."
-msgstr ""
-"儲存磁區容量必須是整數。"
+msgstr "儲存磁區容量必須是整數。"
msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
-msgstr ""
-"儲存磁區 URL 必須是 http://、https://、ftp:// 或 ftps://。"
+msgstr "儲存磁區 URL 必須是 http://、https://、ftp:// 或 ftps://。"
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
-msgstr ""
-"無法存取檔案 %(url)s。請檢查該檔案。"
+msgstr "無法存取檔案 %(url)s。請檢查該檔案。"
#, python-format
msgid ""
"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
"%(err)s"
-msgstr ""
-"無法複製儲存區 '%(pool)s' 中的儲存磁區 '%(name)s'。詳細資料:"
-"%(err)s"
+msgstr "無法複製儲存區 '%(pool)s' 中的儲存磁區 '%(name)s'。詳細資料:%(err)s"
msgid "Specify chunk data and its size to upload a file."
-msgstr ""
-"指定區塊資料及其大小以上傳檔案。"
+msgstr "指定區塊資料及其大小以上傳檔案。"
msgid "In order to upload a storage volume, specify the 'upload' parameter."
-msgstr ""
-"若要上傳儲存磁區,請指定 'upload' 參數。"
+msgstr "若要上傳儲存磁區,請指定 'upload' 參數。"
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
-msgstr ""
-"無法上傳區塊資料,因為該區塊資料與所要求的區塊大小不符。"
+msgstr "無法上傳區塊資料,因為該區塊資料與所要求的區塊大小不符。"
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
-msgstr ""
-"儲存磁區 %(vol)s 未在上傳過程中。"
+msgstr "儲存磁區 %(vol)s 未在上傳過程中。"
msgid "The upload chunk data will exceed the storage volume size."
-msgstr ""
-"上傳區塊資料將超過儲存磁區大小。"
+msgstr "上傳區塊資料將超過儲存磁區大小。"
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
-msgstr ""
-"無法將區塊資料上傳至儲存磁區。詳細資料:%(err)s。"
+msgstr "無法將區塊資料上傳至儲存磁區。詳細資料:%(err)s。"
#, python-format
msgid "Interface %(name)s does not exist"
-msgstr ""
-"介面 %(name)s 不存在"
+msgstr "介面 %(name)s 不存在"
#, python-format
msgid "Network %(name)s already exists"
-msgstr ""
-"網路 %(name)s 已經存在"
+msgstr "網路 %(name)s 已經存在"
#, python-format
msgid "Network %(name)s does not exist"
-msgstr ""
-"網路 %(name)s 不存在"
+msgstr "網路 %(name)s 不存在"
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
-msgstr ""
-"為網路 %(network)s 指定的子網路 %(subnet)s 無效。"
+msgstr "為網路 %(network)s 指定的子網路 %(subnet)s 無效。"
#, python-format
msgid "Specify a network interface to create bridged network %(name)s"
-msgstr ""
-"指定網路介面,以建立橋接網路 %(name)s"
+msgstr "指定網路介面,以建立橋接網路 %(name)s"
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr ""
-"無法刪除作用中的網路 %(name)s"
+msgstr "無法刪除作用中的網路 %(name)s"
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
-msgstr ""
-"為網路 %(network)s 指定的介面 %(iface)s 已在使用中。"
+msgstr "為網路 %(network)s 指定的介面 %(iface)s 已在使用中。"
msgid "Interface should be bare NIC, bonding or bridge device."
-msgstr ""
-"介面應該是裸露 NIC、接合裝置或橋接器裝置。"
+msgstr "介面應該是裸露 NIC、接合裝置或橋接器裝置。"
#, python-format
msgid "Unable to create network %(name)s. Details: %(err)s"
-msgstr ""
-"無法建立網路 %(name)s。詳細資料:%(err)s"
+msgstr "無法建立網路 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
-msgstr ""
-"找不到網路 '%(name)s' 的可用 IP 位址"
+msgstr "找不到網路 '%(name)s' 的可用 IP 位址"
#, python-format
msgid "The interface %(iface)s already exists."
-msgstr ""
-"介面 %(iface)s 已經存在。"
+msgstr "介面 %(iface)s 已經存在。"
msgid "Network name must be a string without slashes (/) or quotes (\")"
-msgstr ""
-"網路名稱必須是不含斜線 (/) 或引號 (\") 的字串"
+msgstr "網路名稱必須是不含斜線 (/) 或引號 (\") 的字串"
msgid "Supported network types are isolated, NAT and bridge"
-msgstr ""
-"受支援的網路類型是隔離式、NAT 和橋接器"
+msgstr "受支援的網路類型是隔離式、NAT 和橋接器"
msgid "Network subnet must be a string with IP address and prefix or netmask"
-msgstr ""
-"網路的子網路必須是含有 IP 位址、字首或網路遮罩的字串"
+msgstr "網路的子網路必須是含有 IP 位址、字首或網路遮罩的字串"
msgid "Network interface must be a string"
-msgstr ""
-"網路介面必須是字串"
+msgstr "網路介面必須是字串"
msgid "Network VLAN ID must be an integer between 1 and 4094"
-msgstr ""
-"網路 VLAN ID 必須是介於 1 和 4094 之間的整數"
+msgstr "網路 VLAN ID 必須是介於 1 和 4094 之間的整數"
msgid "Specify name and type to create a Network"
-msgstr ""
-"指定名稱和類型以建立網路"
+msgstr "指定名稱和類型以建立網路"
#, python-format
msgid ""
"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
"and/or templates linked to this network."
msgstr ""
-"無法刪除網路 %(name)s。有一些虛擬機器 %(vms)s "
-"及/或範本已鏈結至此網路。"
+"無法刪除網路 %(name)s。有一些虛擬機器 %(vms)s 及/或範本已鏈結至此網路。"
#, python-format
msgid ""
"Unable to deactivate network %(name)s. There are some virtual machines "
"%(vms)s and/or templates linked to this network."
msgstr ""
-"無法取消啟動網路 %(name)s。有一些虛擬機器"
-"%(vms)s 及/或範本已鏈結至此網路。"
+"無法取消啟動網路 %(name)s。有一些虛擬機器%(vms)s 及/或範本已鏈結至此網路。"
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
-msgstr ""
-"橋接器裝置 %(name)s 不能是 VLAN 的幹線裝置。"
+msgstr "橋接器裝置 %(name)s 不能是 VLAN 的幹線裝置。"
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr ""
-"無法啟動介面 %(iface)s:%(err)s。"
+msgstr "無法啟動介面 %(iface)s:%(err)s。"
#, python-format
msgid ""
"Failed to activate interface %(iface)s. Please check the physical link "
"status."
-msgstr ""
-"無法啟動介面 %(iface)s。請檢查實際鏈結"
-"狀態。"
+msgstr "無法啟動介面 %(iface)s。請檢查實際鏈結狀態。"
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
-msgstr ""
-"無法啟動網路 %(name)s。詳細資料:%(err)s"
+msgstr "無法啟動網路 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr ""
-"除錯報告 %(name)s 不存在"
+msgstr "除錯報告 %(name)s 不存在"
msgid "Debug report tool not found in system"
-msgstr ""
-"在系統中找不到除錯報告工具"
+msgstr "在系統中找不到除錯報告工具"
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
-msgstr ""
-"無法建立除錯報告 %(name)s。詳細資料:%(err)s。"
+msgstr "無法建立除錯報告 %(name)s。詳細資料:%(err)s。"
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
-msgstr ""
-"找不到具有給定名稱 %(name)s 的任何除錯報告"
+msgstr "找不到具有給定名稱 %(name)s 的任何除錯報告"
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
-msgstr ""
-"無法產生除錯報告 %(name)s。詳細資料:%(err)s"
+msgstr "無法產生除錯報告 %(name)s。詳細資料:%(err)s"
msgid "You should give a name for the debug report file."
-msgstr ""
-"應該命名除錯報告檔。"
+msgstr "應該命名除錯報告檔。"
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
-"除錯報告名稱必須是字串。只容許使用字母、數字、底線 ('_') "
-"及連字號 ('-')。"
+"除錯報告名稱必須是字串。只容許使用字母、數字、底線 ('_') 及連字號 ('-')。"
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
-msgstr ""
-"具有指定名稱 \"%(name)s\" 的除錯報告已經存在。請使用"
-"另一個名稱。"
+msgstr "具有指定名稱 \"%(name)s\" 的除錯報告已經存在。請使用另一個名稱。"
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr ""
-"Kimchi 未使用儲存體伺服器 %(server)s"
+msgstr "Kimchi 未使用儲存體伺服器 %(server)s"
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr ""
-"Distro '%(name)s' 不存在"
+msgstr "Distro '%(name)s' 不存在"
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr ""
-"分割區 %(name)s 不在主機中"
+msgstr "分割區 %(name)s 不在主機中"
msgid "Unable to shutdown host machine as there are running virtual machines"
-msgstr ""
-"無法關閉主機,因為有一些虛擬機器正在執行中"
+msgstr "無法關閉主機,因為有一些虛擬機器正在執行中"
msgid "Unable to reboot host machine as there are running virtual machines"
-msgstr ""
-"無法將主機重新開機,因為有一些虛擬機器正在執行中"
+msgstr "無法將主機重新開機,因為有一些虛擬機器正在執行中"
#, python-format
msgid "Node device '%(name)s' not found"
-msgstr ""
-"找不到節點裝置 '%(name)s'"
+msgstr "找不到節點裝置 '%(name)s'"
msgid "Conflicting flag filters specified."
-msgstr ""
-"指定的旗標過濾器有衝突。"
+msgstr "指定的旗標過濾器有衝突。"
msgid "No packages marked for update"
-msgstr ""
-"沒有套件標示為要進行更新"
+msgstr "沒有套件標示為要進行更新"
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr ""
-"套件 %(name)s 未標示為要進行更新。"
+msgstr "套件 %(name)s 未標示為要進行更新。"
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
-msgstr ""
-"取得標示為要進行更新的套件時發生錯誤。詳細資料:%(err)s"
+msgstr "取得標示為要進行更新的套件時發生錯誤。詳細資料:%(err)s"
msgid "There is no compatible package manager for this system."
-msgstr ""
-"沒有此系統的相容套件管理程式。"
+msgstr "沒有此系統的相容套件管理程式。"
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr ""
-"在資料儲存庫中找不到 %(item)s"
+msgstr "在資料儲存庫中找不到 %(item)s"
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr ""
-"無效的 URI %(uri)s"
+msgstr "無效的 URI %(uri)s"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
-msgstr ""
-"執行指令 '%(cmd)s' 時,在 %(seconds)s 秒之後逾時"
+msgstr "執行指令 '%(cmd)s' 時,在 %(seconds)s 秒之後逾時"
msgid "Unable to choose a virtual machine name"
-msgstr ""
-"無法選擇虛擬機器名稱"
+msgstr "無法選擇虛擬機器名稱"
#, python-format
msgid "Invalid data value '%(value)s'"
-msgstr ""
-"無效的資料值 '%(value)s'"
+msgstr "無效的資料值 '%(value)s'"
#, python-format
msgid "Invalid data unit '%(unit)s'"
-msgstr ""
-"無效的資料單元 '%(unit)s'"
+msgstr "無效的資料單元 '%(unit)s'"
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
-msgstr ""
-"儲存體類型無效。支援的類型:'cdrom' 和 'disk'"
+msgstr "儲存體類型無效。支援的類型:'cdrom' 和 'disk'"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
-msgstr ""
-"路徑 '%(value)s' 不是該裝置的有效本端/遠端路徑"
+msgstr "路徑 '%(value)s' 不是該裝置的有效本端/遠端路徑"
msgid "Only CDROM path can be update."
-msgstr ""
-"只能更新 CDROM 路徑。"
+msgstr "只能更新 CDROM 路徑。"
#, python-format
msgid ""
"The storage device %(dev_name)s does not exist in the virtual machine "
"%(vm_name)s"
-msgstr ""
-"儲存裝置 %(dev_name)s 不在下列虛擬機器中:"
-"%(vm_name)s"
+msgstr "儲存裝置 %(dev_name)s 不在下列虛擬機器中:%(vm_name)s"
#, python-format
msgid "Error while creating new storage device: %(error)s"
-msgstr ""
-"建立新的儲存裝置時發生錯誤:%(error)s"
+msgstr "建立新的儲存裝置時發生錯誤:%(error)s"
#, python-format
msgid "Error while updating storage device: %(error)s"
-msgstr ""
-"更新儲存裝置時發生錯誤:%(error)s"
+msgstr "更新儲存裝置時發生錯誤:%(error)s"
#, python-format
msgid "Error while removing storage device: %(error)s"
-msgstr ""
-"移除儲存裝置時發生錯誤:%(error)s"
+msgstr "移除儲存裝置時發生錯誤:%(error)s"
msgid "Do not support IDE device hot plug"
-msgstr ""
-"請勿支援 IDE 裝置熱插拔"
+msgstr "請勿支援 IDE 裝置熱插拔"
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
"disk"
-msgstr ""
-"指定類型和路徑,或者鍵入儲存區/磁區,以新增虛擬機器"
-"磁碟"
+msgstr "指定類型和路徑,或者鍵入儲存區/磁區,以新增虛擬機器磁碟"
msgid "Specify path to update virtual machine disk"
-msgstr ""
-"指定路徑以更新虛擬機器磁碟"
+msgstr "指定路徑以更新虛擬機器磁碟"
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
-msgstr ""
-"已達到控制器類型 %(type)s 限制:%(limit)s 個裝置"
+msgstr "已達到控制器類型 %(type)s 限制:%(limit)s 個裝置"
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
-msgstr ""
-"無法擷取給定儲存區/磁區的磁碟路徑資訊:%(error)s"
+msgstr "無法擷取給定儲存區/磁區的磁碟路徑資訊:%(error)s"
msgid "Volume already in use by other virtual machine."
-msgstr ""
-"其他虛擬機器已在使用該磁區。"
+msgstr "其他虛擬機器已在使用該磁區。"
msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
-msgstr ""
-"僅可以指定一個路徑或集區/磁區以新增到"
-"虛擬機器磁碟"
+msgstr "僅可以指定一個路徑或集區/磁區以新增到虛擬機器磁碟"
#, python-format
msgid ""
"Volume chosen with format %(format)s does not fit in the storage type "
"%(type)s"
-msgstr ""
-"所選格式為 %(format)s 的磁區不適合儲存體類型"
-"%(type)s"
+msgstr "所選格式為 %(format)s 的磁區不適合儲存體類型%(type)s"
msgid "YUM Repository ID must be one word only string."
-msgstr ""
-"YUM 儲存庫 ID 必須是僅限一個單字的字串。"
+msgstr "YUM 儲存庫 ID 必須是僅限一個單字的字串。"
msgid "Repository URL must be an http://, ftp:// or file:// URL."
-msgstr ""
-"儲存庫 URL 必須是 http://、ftp:// 或 file:// URL。"
+msgstr "儲存庫 URL 必須是 http://、ftp:// 或 file:// URL。"
msgid ""
"Repository configuration is a dictionary with specific values according to "
"repository type."
-msgstr ""
-"儲存庫配置是字典,其中包含於"
-"儲存庫類型對應的特定值。"
+msgstr "儲存庫配置是字典,其中包含於儲存庫類型對應的特定值。"
msgid "Distribution to DEB repository must be a string"
-msgstr ""
-"DEB 儲存庫的發行套件必須是字串"
+msgstr "DEB 儲存庫的發行套件必須是字串"
msgid "Components to DEB repository must be listed in a array"
-msgstr ""
-"DEB 儲存庫的元件必須以陣列的形式列出"
+msgstr "DEB 儲存庫的元件必須以陣列的形式列出"
msgid "Components to DEB repository must be a string"
-msgstr ""
-"DEB 儲存庫的元件必須是字串"
+msgstr "DEB 儲存庫的元件必須是字串"
msgid "Mirror list to repository must be a string"
-msgstr ""
-"儲存庫的鏡映清單必須是字串"
+msgstr "儲存庫的鏡映清單必須是字串"
msgid "YUM Repository name must be string."
-msgstr ""
-"YUM 儲存庫名稱必須是字串。"
+msgstr "YUM 儲存庫名稱必須是字串。"
msgid "GPG check must be a boolean value."
-msgstr ""
-"GPG 檢查必須是布林值。"
+msgstr "GPG 檢查必須是布林值。"
msgid "GPG key must be a URL pointing to the ASCII-armored file."
-msgstr ""
-"GPG 金鑰必須是指向 ASCII 裝甲檔案的 URL。"
+msgstr "GPG 金鑰必須是指向 ASCII 裝甲檔案的 URL。"
#, python-format
msgid "Could not update repository %(repo_id)s."
-msgstr ""
-"無法更新儲存庫 %(repo_id)s。"
+msgstr "無法更新儲存庫 %(repo_id)s。"
#, python-format
msgid "Repository %(repo_id)s does not exist."
-msgstr ""
-"儲存庫 %(repo_id)s 不存在。"
+msgstr "儲存庫 %(repo_id)s 不存在。"
msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
"update a YUM repository."
-msgstr ""
-"指定儲存庫基本 URL、鏡映清單或 meta 鏈結以建立或"
-"更新 Yum 儲存庫。"
+msgstr "指定儲存庫基本 URL、鏡映清單或 meta 鏈結以建立或更新 Yum 儲存庫。"
msgid "Repository management tool was not recognized for your system."
-msgstr ""
-"未能辨識系統的儲存庫管理工具。"
+msgstr "未能辨識系統的儲存庫管理工具。"
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr ""
-"已啟用儲存庫 %(repo_id)s。"
+msgstr "已啟用儲存庫 %(repo_id)s。"
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr ""
-"已停用儲存庫 %(repo_id)s。"
+msgstr "已停用儲存庫 %(repo_id)s。"
#, python-format
msgid "Could not remove repository %(repo_id)s."
-msgstr ""
-"無法移除儲存庫 %(repo_id)s。"
+msgstr "無法移除儲存庫 %(repo_id)s。"
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
-msgstr ""
-"無法寫入儲存庫配置檔 %(repo_file)s"
+msgstr "無法寫入儲存庫配置檔 %(repo_file)s"
msgid "Specify repository distribution in order to create a DEB repository."
-msgstr ""
-"指定儲存庫發行套件以建立 DEB 儲存庫。"
+msgstr "指定儲存庫發行套件以建立 DEB 儲存庫。"
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr ""
-"無法啟用儲存庫 %(repo_id)s。"
+msgstr "無法啟用儲存庫 %(repo_id)s。"
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr ""
-"無法停用儲存庫 %(repo_id)s。"
+msgstr "無法停用儲存庫 %(repo_id)s。"
msgid "YUM Repository ID already exists"
-msgstr ""
-"YUM 儲存庫 ID 已存在"
+msgstr "YUM 儲存庫 ID 已存在"
msgid "YUM Repository name must be a string"
-msgstr ""
-"YUM 儲存庫名稱必須是字串"
+msgstr "YUM 儲存庫名稱必須是字串"
#, python-format
msgid "Unable to list repositories. Details: '%(err)s'"
-msgstr ""
-"無法列出儲存庫。詳細資料:'%(err)s'"
+msgstr "無法列出儲存庫。詳細資料:'%(err)s'"
#, python-format
msgid "Unable to retrieve repository information. Details: '%(err)s'"
-msgstr ""
-"無法擷取儲存庫資訊。詳細資料:'%(err)s'"
+msgstr "無法擷取儲存庫資訊。詳細資料:'%(err)s'"
#, python-format
msgid "Unable to add repository. Details: '%(err)s'"
-msgstr ""
-"無法新增儲存庫。詳細資料:'%(err)s'"
+msgstr "無法新增儲存庫。詳細資料:'%(err)s'"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr ""
-"無法移除儲存庫。詳細資料:'%(err)s'"
+msgstr "無法移除儲存庫。詳細資料:'%(err)s'"
#, python-format
msgid ""
"Configuration items: '%(items)s' are not supported by repository manager"
-msgstr ""
-"儲存庫管理程式不支援配置項目:'%(items)s'"
+msgstr "儲存庫管理程式不支援配置項目:'%(items)s'"
msgid "Repository metalink must be an http://, ftp:// or file:// URL."
-msgstr ""
-"儲存庫 meta 鏈結必須是 http://、ftp:// 或 file:// URL。"
+msgstr "儲存庫 meta 鏈結必須是 http://、ftp:// 或 file:// URL。"
msgid "Cannot specify mirrorlist and metalink at the same time."
-msgstr ""
-"無法同時指定鏡映清單及 meta 鏈結。"
+msgstr "無法同時指定鏡映清單及 meta 鏈結。"
#, python-format
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
-msgstr ""
-"必須先停止虛擬機器 '%(vm)s',然後再建立該虛擬機器的 Snapshot。"
+msgstr "必須先停止虛擬機器 '%(vm)s',然後再建立該虛擬機器的 Snapshot。"
#, python-format
msgid ""
"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
-msgstr ""
-"無法在虛擬機器 '%(vm)s' 上建立 Snapshot '%(name)s'。詳細資料:"
-"%(err)s"
+msgstr "無法在虛擬機器 '%(vm)s' 上建立 Snapshot '%(name)s'。詳細資料:%(err)s"
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
-msgstr ""
-"Snapshot '%(name)s' 不在虛擬機器 '%(vm)s' 上。"
+msgstr "Snapshot '%(name)s' 不在虛擬機器 '%(vm)s' 上。"
#, python-format
msgid ""
"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
-msgstr ""
-"無法擷取虛擬機器 '%(vm)s' 上的 Snapshot '%(name)s'。詳細資料:"
-"%(err)s"
+msgstr "無法擷取虛擬機器 '%(vm)s' 上的 Snapshot '%(name)s'。詳細資料:%(err)s"
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
-msgstr ""
-"無法列出虛擬機器 '%(vm)s' 上的 Snapshot。詳細資料:%(err)s"
+msgstr "無法列出虛擬機器 '%(vm)s' 上的 Snapshot。詳細資料:%(err)s"
#, python-format
msgid ""
"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
-msgstr ""
-"無法刪除虛擬機器 '%(vm)s' 上的 Snapshot '%(name)s'。詳細資料:"
-"%(err)s"
+msgstr "無法刪除虛擬機器 '%(vm)s' 上的 Snapshot '%(name)s'。詳細資料:%(err)s"
#, python-format
msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
-msgstr ""
-"無法擷取虛擬機器 '%(vm)s' 的現行 Snapshot。詳細資料:"
-"%(err)s"
+msgstr "無法擷取虛擬機器 '%(vm)s' 的現行 Snapshot。詳細資料:%(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
-msgstr ""
-"無法將虛擬機器 '%(vm)s' 回復至 Snapshot '%(name)s'。詳細資料:"
-"%(err)s"
+msgstr "無法將虛擬機器 '%(vm)s' 回復至 Snapshot '%(name)s'。詳細資料:%(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
-"無法建立虛擬機器 '%(vm)s' 的 Snapshot,因為該虛擬機器包含"
-"格式為 '%(format)s' 的磁碟;僅支援 'qcow2'。"
+"無法建立虛擬機器 '%(vm)s' 的 Snapshot,因為該虛擬機器包含格式為 '%(format)s' "
+"的磁碟;僅支援 'qcow2'。"
msgid "The number of vCPUs is too large for this system."
-msgstr ""
-"這個系統的 vCPU 數目太大。"
+msgstr "這個系統的 vCPU 數目太大。"
msgid "Invalid vCPU/topology combination."
-msgstr ""
-"vCPU/拓蹼組合無效。"
+msgstr "vCPU/拓蹼組合無效。"
msgid "This host (or current configuration) does not allow CPU topology."
-msgstr ""
-"此主機(或現行配置)不容許使用 CPU 拓蹼。"
+msgstr "此主機(或現行配置)不容許使用 CPU 拓蹼。"
msgid "ERROR CODE"
-msgstr ""
-"錯誤碼"
+msgstr "錯誤碼"
msgid "REASON"
-msgstr ""
-"原因"
+msgstr "原因"
msgid "STACK"
-msgstr ""
-"堆疊"
+msgstr "堆疊"
msgid "Go to Homepage"
-msgstr ""
-"跳至首頁"
+msgstr "跳至首頁"
msgid "Create a New Virtual Machine"
-msgstr ""
-"建立新的虛擬機器"
+msgstr "建立新的虛擬機器"
msgid "Virtual Machine Name"
-msgstr ""
-"虛擬機器名稱"
+msgstr "虛擬機器名稱"
msgid ""
"The name used to identify the virtual machine. If omitted, a name will be "
"chosen based on the template used."
-msgstr ""
-"用來識別虛擬機器的名稱。如果省略,則會"
-"根據所用的範本選擇名稱。"
+msgstr "用來識別虛擬機器的名稱。如果省略,則會根據所用的範本選擇名稱。"
msgid "Template"
-msgstr ""
-"範本"
+msgstr "範本"
msgid "Please create a template first."
-msgstr ""
-"請先建立範本。"
+msgstr "請先建立範本。"
msgid "Create a Template"
-msgstr ""
-"建立範本"
+msgstr "建立範本"
msgid "Please choose a template."
-msgstr ""
-"請選擇範本。"
+msgstr "請選擇範本。"
msgid "OS"
-msgstr ""
-"OS"
+msgstr "OS"
msgid "OS Version"
-msgstr ""
-"OS 版本"
+msgstr "OS 版本"
msgid "CPUS"
-msgstr ""
-"CPUS"
+msgstr "CPUS"
msgid "Memory"
-msgstr ""
-"記憶體"
+msgstr "記憶體"
msgid "Create"
-msgstr ""
-"建立"
+msgstr "建立"
msgid "Creating..."
-msgstr ""
-"正在建立..."
+msgstr "正在建立..."
msgid "Edit Guest"
-msgstr ""
-"編輯客體"
+msgstr "編輯客體"
msgid "General"
-msgstr ""
-"一般"
+msgstr "一般"
msgid "Storage"
-msgstr ""
-"儲存體"
+msgstr "儲存體"
msgid "Interface"
-msgstr ""
-"介面"
+msgstr "介面"
msgid "Permission"
-msgstr ""
-"許可權"
+msgstr "許可權"
msgid "Host PCI Device"
-msgstr ""
-"主機 PCI 裝置"
+msgstr "主機 PCI 裝置"
msgid "Snapshot"
-msgstr ""
-"Snapshot"
+msgstr "Snapshot"
msgid "Name"
-msgstr ""
-"名稱"
+msgstr "名稱"
msgid "CPUs"
-msgstr ""
-"CPU"
+msgstr "CPU"
msgid "Memory (MB)"
-msgstr ""
-"記憶體 (MB)"
+msgstr "記憶體 (MB)"
msgid "Icon"
-msgstr ""
-"圖示"
+msgstr "圖示"
msgid "Device"
-msgstr ""
-"裝置"
+msgstr "裝置"
msgid "Path"
-msgstr ""
-"路徑"
+msgstr "路徑"
msgid "Network"
-msgstr ""
-"網路"
+msgstr "網路"
msgid "Type"
-msgstr ""
-"類型"
+msgstr "類型"
msgid "MAC Address"
-msgstr ""
-"MAC 位址"
+msgstr "MAC 位址"
msgid "Available system users and groups"
-msgstr ""
-"可用的系統使用者及群組"
+msgstr "可用的系統使用者及群組"
msgid "Selected system users and groups"
-msgstr ""
-"選定的系統使用者及群組"
+msgstr "選定的系統使用者及群組"
msgid "User"
-msgstr ""
-"使用者"
+msgstr "使用者"
msgid "All"
-msgstr ""
-"全部"
+msgstr "全部"
msgid "To Add"
-msgstr ""
-"要新增"
+msgstr "要新增"
msgid "Added"
-msgstr ""
-"已新增"
+msgstr "已新增"
msgid "filter"
-msgstr ""
-"過濾器"
+msgstr "過濾器"
msgid "Product"
-msgstr ""
-"產品"
+msgstr "產品"
msgid "Vendor"
-msgstr ""
-"供應商"
+msgstr "供應商"
msgid "Created"
-msgstr ""
-"已建立"
+msgstr "已建立"
msgid "Save"
-msgstr ""
-"儲存"
+msgstr "儲存"
msgid "Replace"
-msgstr ""
-"取代"
+msgstr "取代"
msgid "Detach"
-msgstr ""
-"分離"
+msgstr "分離"
msgid "Cancel"
-msgstr ""
-"取消 "
+msgstr "取消 "
msgid "revert"
-msgstr ""
-"回復"
+msgstr "回復"
msgid "Add a Storage Device to VM"
-msgstr ""
-"將儲存裝置新增至 VM"
+msgstr "將儲存裝置新增至 VM"
msgid "Device Type"
-msgstr ""
-"裝置類型"
+msgstr "裝置類型"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr ""
-"裝置類型。目前支援 \"cdrom\" 和 \"disk\"。"
+msgstr "裝置類型。目前支援 \"cdrom\" 和 \"disk\"。"
msgid "Storage Pool"
-msgstr ""
-"儲存區"
+msgstr "儲存區"
msgid "Storage pool which volume located in"
-msgstr ""
-"磁區所在的儲存區"
+msgstr "磁區所在的儲存區"
msgid "Storage Volume"
-msgstr ""
-"儲存磁區"
+msgstr "儲存磁區"
msgid "Storage volume to be attached"
-msgstr ""
-"要連接的儲存磁區"
+msgstr "要連接的儲存磁區"
msgid "File Path"
-msgstr ""
-"檔案路徑"
+msgstr "檔案路徑"
msgid "The ISO file path in the server for CDROM."
-msgstr ""
-"CDROM 的 ISO 檔案路徑在伺服器中。"
+msgstr "CDROM 的 ISO 檔案路徑在伺服器中。"
msgid "Attach"
-msgstr ""
-"連接"
+msgstr "連接"
msgid "Start"
-msgstr ""
-"開始"
+msgstr "開始"
msgid "Reset"
-msgstr ""
-"重設"
+msgstr "重設"
msgid "Pause"
-msgstr ""
-"暫停"
+msgstr "暫停"
msgid "Resume"
-msgstr ""
-"回復"
+msgstr "回復"
msgid "Power Off"
-msgstr ""
-"關閉電源"
+msgstr "關閉電源"
msgid "Actions"
-msgstr ""
-"動作"
+msgstr "動作"
msgid "Connect"
-msgstr ""
-"連接"
+msgstr "連接"
msgid "Clone"
-msgstr ""
-"複製"
+msgstr "複製"
msgid "Edit"
-msgstr ""
-"編輯"
+msgstr "編輯"
msgid "Shut Down"
-msgstr ""
-"關閉"
+msgstr "關閉"
msgid "Delete"
-msgstr ""
-"刪除"
+msgstr "刪除"
msgid "The username or password you entered is incorrect. Please try again."
-msgstr ""
-"您輸入的使用者名稱或密碼不正確。請重試。"
+msgstr "您輸入的使用者名稱或密碼不正確。請重試。"
msgid "This field is required."
-msgstr ""
-"此欄位是必要的。"
+msgstr "此欄位是必要的。"
msgid "Log in"
-msgstr ""
-"登入"
+msgstr "登入"
msgid "Logging in..."
-msgstr ""
-"正在登入..."
+msgstr "正在登入..."
msgid "Host"
-msgstr ""
-"主機"
+msgstr "主機"
msgid "Guests"
-msgstr ""
-"客體"
+msgstr "客體"
msgid "Templates"
-msgstr ""
-"範本"
+msgstr "範本"
msgid "Failed to get application configuration"
-msgstr ""
-"無法取得應用程式配置"
+msgstr "無法取得應用程式配置"
msgid "This is not a valid Linux path"
-msgstr ""
-"這是無效的 Linux 路徑"
+msgstr "這是無效的 Linux 路徑"
msgid "This is not a valid URL."
-msgstr ""
-"這是無效的 URL。"
+msgstr "這是無效的 URL。"
msgid "No such data available."
-msgstr ""
-"沒有此類可用資料。"
+msgstr "沒有此類可用資料。"
msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"無法連接至主機系統。請驗證主機系統是否已啟動,以及"
-"您是否具有與它的連線。HTTP 要求回應為 %1。 "
+"無法連接至主機系統。請驗證主機系統是否已啟動,以及您是否具有與它的連線。HTTP "
+"要求回應為 %1。 "
msgid "Unable to read file."
-msgstr ""
-"無法讀取檔案。"
+msgstr "無法讀取檔案。"
msgid "Error while uploading file."
-msgstr ""
-"上傳檔案時發生錯誤。"
+msgstr "上傳檔案時發生錯誤。"
msgid "Delete Confirmation"
-msgstr ""
-"刪除確認"
+msgstr "刪除確認"
msgid "OK"
-msgstr ""
-"確定"
+msgstr "確定"
msgid "Confirm"
-msgstr ""
-"確認"
+msgstr "確認"
msgid "Warning"
-msgstr ""
-"警告"
+msgstr "警告"
msgid "Cloning..."
-msgstr ""
-"正在複製..."
+msgstr "正在複製..."
msgid "Loading..."
-msgstr ""
-"正在載入..."
+msgstr "正在載入..."
msgid "An error occurred while retrieving system information."
-msgstr ""
-"擷取系統資訊時發生錯誤。"
+msgstr "擷取系統資訊時發生錯誤。"
msgid "Retry"
-msgstr ""
-"重試"
+msgstr "重試"
msgid "Detailed message:"
-msgstr ""
-"詳細的訊息:"
+msgstr "詳細的訊息:"
msgid "No ISO found"
-msgstr ""
-"找不到 ISO"
+msgstr "找不到 ISO"
msgid "This is not a valid ISO file."
-msgstr ""
-"這是無效的 ISO 檔案。"
+msgstr "這是無效的 ISO 檔案。"
msgid "This may take a long time. Do you want to continue?"
-msgstr ""
-"這可能花費較長時間。您要繼續嗎?"
+msgstr "這可能花費較長時間。您要繼續嗎?"
msgid "This will permanently delete the template. Would you like to continue?"
-msgstr ""
-"這將永久刪除範本。您要繼續嗎?"
+msgstr "這將永久刪除範本。您要繼續嗎?"
msgid "Unable to shut down system as there are some virtual machines running!"
-msgstr ""
-"無法關閉系統,因為有幾個虛擬機器正在執行中!"
+msgstr "無法關閉系統,因為有幾個虛擬機器正在執行中!"
msgid "Max:"
-msgstr ""
-"上限:"
+msgstr "上限:"
msgid "Utilization"
-msgstr ""
-"使用率"
+msgstr "使用率"
msgid "Available"
-msgstr ""
-"可用"
+msgstr "可用"
msgid "Read Rate"
-msgstr ""
-"讀取速率"
+msgstr "讀取速率"
msgid "Write Rate"
-msgstr ""
-"寫入速率"
+msgstr "寫入速率"
msgid "Received"
-msgstr ""
-"已接收"
+msgstr "已接收"
msgid "Sent"
-msgstr ""
-"已傳送"
+msgstr "已傳送"
msgid ""
"Shutting down or restarting host will cause unsaved work lost. Continue to "
"shut down/restarting?"
-msgstr ""
-"關閉或重新啟動主機將導致未儲存的工作遺失。要繼續"
-"關閉/重新啟動嗎?"
+msgstr "關閉或重新啟動主機將導致未儲存的工作遺失。要繼續關閉/重新啟動嗎?"
msgid ""
"Repository will be removed permanently and can't be recovered. Do you want "
"to continue?"
-msgstr ""
-"將會永久地移除儲存庫並且無法回復。"
-"要繼續嗎?"
+msgstr "將會永久地移除儲存庫並且無法回復。要繼續嗎?"
msgid "Repositories"
-msgstr ""
-"儲存庫"
+msgstr "儲存庫"
msgid "ID"
-msgstr ""
-"ID"
+msgstr "ID"
msgid "Base URL"
-msgstr ""
-"基本 URL"
+msgstr "基本 URL"
msgid "Is Mirror"
-msgstr ""
-"是鏡映"
+msgstr "是鏡映"
msgid "URL Args"
-msgstr ""
-"URL 引數"
+msgstr "URL 引數"
msgid "Enabled"
-msgstr ""
-"已啟用"
+msgstr "已啟用"
msgid "GPG Check"
-msgstr ""
-"GPG 檢查"
+msgstr "GPG 檢查"
msgid "GPG Key"
-msgstr ""
-"GPG 金鑰"
+msgstr "GPG 金鑰"
msgid "Add"
-msgstr ""
-"新增"
+msgstr "新增"
msgid "Remove"
-msgstr ""
-"移除"
+msgstr "移除"
msgid "Enable"
-msgstr ""
-"啟用"
+msgstr "啟用"
msgid "Disable"
-msgstr ""
-"停用"
+msgstr "停用"
msgid "Software Updates"
-msgstr ""
-"軟體更新"
+msgstr "軟體更新"
msgid "Package Name"
-msgstr ""
-"套件名稱"
+msgstr "套件名稱"
msgid "Version"
-msgstr ""
-"版本"
+msgstr "版本"
msgid "Architecture"
-msgstr ""
-"架構"
+msgstr "架構"
msgid "Repository"
-msgstr ""
-"儲存庫"
+msgstr "儲存庫"
msgid "Update All"
-msgstr ""
-"全部更新"
+msgstr "全部更新"
msgid "Updating..."
-msgstr ""
-"正在更新..."
+msgstr "正在更新..."
msgid "Failed to retrieve packages update information."
-msgstr ""
-"無法擷取套件更新資訊。"
+msgstr "無法擷取套件更新資訊。"
msgid "Failed to update package(s)."
-msgstr ""
-"無法更新套件。"
+msgstr "無法更新套件。"
msgid ""
"Debug report will be removed permanently and can't be recovered. Do you want "
"to continue?"
-msgstr ""
-"將會永久地移除除錯報告並且無法回復。"
-"要繼續嗎?"
+msgstr "將會永久地移除除錯報告並且無法回復。要繼續嗎?"
msgid "Debug Reports"
-msgstr ""
-"除錯報告"
+msgstr "除錯報告"
msgid "Generated Time"
-msgstr ""
-"產生時間"
+msgstr "產生時間"
msgid "Generate"
-msgstr ""
-"產生"
+msgstr "產生"
msgid "Generating..."
-msgstr ""
-"正在產生..."
+msgstr "正在產生..."
msgid "Rename"
-msgstr ""
-"重新命名"
+msgstr "重新命名"
msgid "Download"
-msgstr ""
-"下載"
+msgstr "下載"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
"hyphen ('-')."
-msgstr ""
-"報告名稱只應該包含字母、數字、底線 ('_') 及/或"
-"連字號 ('-')。"
+msgstr "報告名稱只應該包含字母、數字、底線 ('_') 及/或連字號 ('-')。"
msgid "Pending..."
-msgstr ""
-"擱置中..."
+msgstr "擱置中..."
msgid "Report name is the same as the original one."
-msgstr ""
-"報告名稱與原始名稱相同。"
+msgstr "報告名稱與原始名稱相同。"
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
"cannot be undone. Would you like to continue?"
-msgstr ""
-"此動作將會刪除虛擬機器及其虛擬磁碟。此作業"
-"無法復原。您要繼續嗎?"
+msgstr "此動作將會刪除虛擬機器及其虛擬磁碟。此作業無法復原。您要繼續嗎?"
msgid "Power off Confirmation"
-msgstr ""
-"確認關閉電源"
+msgstr "確認關閉電源"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
"cache in the guest. Would you like to continue?"
-msgstr ""
-"這個動作可能會產生非預期結果,例如客體中未清除的磁碟"
-"快取。您要繼續嗎?"
+msgstr "這個動作可能會產生非預期結果,例如客體中未清除的磁碟快取。您要繼續嗎?"
msgid "Reset Confirmation"
-msgstr ""
-"確認重設"
+msgstr "確認重設"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
"Would you like to continue?"
msgstr ""
-"如果在不關閉客體 OS 的情況下進行重設,則可能會導致資料流失。"
-"您要繼續嗎?"
+"如果在不關閉客體 OS 的情況下進行重設,則可能會導致資料流失。您要繼續嗎?"
msgid "Shut Down Confirmation"
-msgstr ""
-"確認關閉"
+msgstr "確認關閉"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
-msgstr ""
-"請注意,客體 OS 可能會忽略此要求。您要繼續嗎?"
+msgstr "請注意,客體 OS 可能會忽略此要求。您要繼續嗎?"
msgid "Virtual Machine delete Confirmation"
-msgstr ""
-"虛擬機器刪除確認"
+msgstr "虛擬機器刪除確認"
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
-msgstr ""
-"此虛擬機器不是持續性的。「關閉電源」會將其刪除。您要繼續嗎?"
+msgstr "此虛擬機器不是持續性的。「關閉電源」會將其刪除。您要繼續嗎?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
"default storage pool. The same will happen when the target pool does not "
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
-"當目標客體具有 SCSI 或 iSCSI 磁區時,將在預設儲存區上"
-"複製這些磁區。當目標儲存區沒有足夠的空間來複製磁區時,"
-"也會發生相同的情況。您要繼續嗎?"
+"當目標客體具有 SCSI 或 iSCSI 磁區時,將在預設儲存區上複製這些磁區。當目標儲存"
+"區沒有足夠的空間來複製磁區時,也會發生相同的情況。您要繼續嗎?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
msgstr ""
-"將會永久地分離此 CDROM,但是您可以將其重新連接。要繼續"
-"分離此 CDROM 嗎?"
+"將會永久地分離此 CDROM,但是您可以將其重新連接。要繼續分離此 CDROM 嗎?"
msgid "Attaching..."
-msgstr ""
-"正在連接..."
+msgstr "正在連接..."
msgid "Replacing..."
-msgstr ""
-"正在取代..."
+msgstr "正在取代..."
msgid "Successfully attached!"
-msgstr ""
-"已順利連接!"
+msgstr "已順利連接!"
msgid "Successfully replaced!"
-msgstr ""
-"已順利取代!"
+msgstr "已順利取代!"
msgid "Successfully detached!"
-msgstr ""
-"已順利分離!"
+msgstr "已順利分離!"
msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
-msgstr ""
-"將會永久地分離此磁碟,但是您可以將其重新連接。要繼續"
-"分離操作嗎?"
+msgstr "將會永久地分離此磁碟,但是您可以將其重新連接。要繼續分離操作嗎?"
msgid "interface:"
-msgstr ""
-"介面:"
+msgstr "介面:"
msgid "address:"
-msgstr ""
-"位址:"
+msgstr "位址:"
msgid "link_type:"
-msgstr ""
-"鏈結類型:"
+msgstr "鏈結類型:"
msgid "block:"
-msgstr ""
-"區塊:"
+msgstr "區塊:"
msgid "drive_type:"
-msgstr ""
-"磁碟機類型:"
+msgstr "磁碟機類型:"
msgid "model:"
-msgstr ""
-"模型:"
+msgstr "模型:"
msgid "Affected devices:"
-msgstr ""
-"受影響的裝置:"
+msgstr "受影響的裝置:"
msgid "The VLAN id must be between 1 and 4094."
-msgstr ""
-"VLAN ID 必須介於 1 和 4094 之間。"
+msgstr "VLAN ID 必須介於 1 和 4094 之間。"
msgid "unavailable"
-msgstr ""
-"無法使用"
+msgstr "無法使用"
msgid ""
"This action will interrupt network connectivity for any virtual machine that "
"depend on this network."
-msgstr ""
-"此動作將會岔斷依賴於此網路之所有虛擬機器的"
-"網路連線功能。"
+msgstr "此動作將會岔斷依賴於此網路之所有虛擬機器的網路連線功能。"
msgid "Create a network"
-msgstr ""
-"建立網路"
+msgstr "建立網路"
msgid ""
"This network is not persistent. Instead of stop, this action will "
"permanently delete it. Would you like to continue?"
-msgstr ""
-"此網路不是持續性的。此動作不會將其停止,而會"
-"永久將其刪除。您要繼續嗎?"
+msgstr "此網路不是持續性的。此動作不會將其停止,而會永久將其刪除。您要繼續嗎?"
msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
-"啟用 NetworkManager 時,橋接 VLAN 標籤可能不正常工作。您"
-"應該考量將其停用。"
+"啟用 NetworkManager 時,橋接 VLAN 標籤可能不正常工作。您應該考量將其停用。"
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
-msgstr ""
-"這將永久刪除儲存區。您要繼續嗎?"
+msgstr "這將永久刪除儲存區。您要繼續嗎?"
msgid "This storage pool is empty."
-msgstr ""
-"此儲存區是空的。"
+msgstr "此儲存區是空的。"
msgid ""
"It will format your disk and you will loose any data in there, are you sure "
"to continue? "
-msgstr ""
-"此動作會格式化您的磁碟,而您將會遺失磁碟中的所有資料。確定"
-"要繼續嗎?"
+msgstr "此動作會格式化您的磁碟,而您將會遺失磁碟中的所有資料。確定要繼續嗎?"
msgid "SCSI Fibre Channel"
-msgstr ""
-"SCSI 光纖通道"
+msgstr "SCSI 光纖通道"
msgid "No SCSI adapters found."
-msgstr ""
-"找不到 SCSI 配接卡。"
+msgstr "找不到 SCSI 配接卡。"
msgid "Loading iSCSI targets..."
-msgstr ""
-"正在載入 iSCSI 目標..."
+msgstr "正在載入 iSCSI 目標..."
msgid "No iSCSI found. Please input one."
-msgstr ""
-"找不到 iSCSI。請輸入一個。"
+msgstr "找不到 iSCSI。請輸入一個。"
msgid "Failed to load iSCSI targets."
-msgstr ""
-"無法載入 iSCSI 目標。"
+msgstr "無法載入 iSCSI 目標。"
msgid "The storage pool name can not be blank."
-msgstr ""
-"儲存區名稱不能空白。"
+msgstr "儲存區名稱不能空白。"
msgid "The storage pool path can not be blank."
-msgstr ""
-"儲存區路徑不能空白。"
+msgstr "儲存區路徑不能空白。"
msgid "NFS server mount path can not be blank."
-msgstr ""
-"NFS 伺服器裝載路徑不能空白。"
+msgstr "NFS 伺服器裝載路徑不能空白。"
msgid "Invalid NFS mount path."
-msgstr ""
-"NFS 裝載路徑無效。"
+msgstr "NFS 裝載路徑無效。"
msgid "No logical device selected."
-msgstr ""
-"未選取邏輯裝置。"
+msgstr "未選取邏輯裝置。"
msgid "The iSCSI target can not be blank."
-msgstr ""
-"iSCSI 目標不能空白。"
+msgstr "iSCSI 目標不能空白。"
msgid "Server name can not be blank."
-msgstr ""
-"伺服器名稱不能空白。"
+msgstr "伺服器名稱不能空白。"
msgid "This is not a valid Server Name or IP. Please, modify it."
-msgstr ""
-"這不是有效的「伺服器名稱」或 IP。請進行修改。"
+msgstr "這不是有效的「伺服器名稱」或 IP。請進行修改。"
msgid "Looking for available partitions ..."
-msgstr ""
-"正在尋找可用的分割區 ..."
+msgstr "正在尋找可用的分割區 ..."
msgid "No available partitions found."
-msgstr ""
-"找不到可用的分割區。"
+msgstr "找不到可用的分割區。"
msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"此儲存區不是持續性的。此動作不是會將其取消啟動,而是會"
-"永久將其刪除。您要繼續嗎?"
+"此儲存區不是持續性的。此動作不是會將其取消啟動,而是會永久將其刪除。您要繼續"
+"嗎?"
msgid "Unable to retrieve partitions information."
-msgstr ""
-"無法擷取分割區資訊。"
+msgstr "無法擷取分割區資訊。"
msgid "In progress..."
-msgstr ""
-"進行中..."
+msgstr "進行中..."
msgid "Failed!"
-msgstr ""
-"失敗!"
+msgstr "失敗!"
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
-msgstr ""
-"CDROM 路徑需要是有效的本端/遠端路徑,並且不能空白。"
+msgstr "CDROM 路徑需要是有效的本端/遠端路徑,並且不能空白。"
msgid "Disk pool or volume cannot be blank."
-msgstr ""
-"磁碟儲存區或磁區不能空白。"
+msgstr "磁碟儲存區或磁區不能空白。"
msgid "Peers"
-msgstr ""
-"同層級"
+msgstr "同層級"
msgid "Searching"
-msgstr ""
-"正在搜尋"
+msgstr "正在搜尋"
msgid "No peers found."
-msgstr ""
-"找不到同層級。"
+msgstr "找不到同層級。"
msgid "Help"
-msgstr ""
-"說明"
+msgstr "說明"
msgid "About"
-msgstr ""
-"相關"
+msgstr "相關"
msgid "Log out"
-msgstr ""
-"登出"
+msgstr "登出"
msgid "Version:"
-msgstr ""
-"版本:"
+msgstr "版本:"
msgid "Session timeout, please re-login."
-msgstr ""
-"階段作業逾時,請重新登入。"
+msgstr "階段作業逾時,請重新登入。"
msgid "User Name"
-msgstr ""
-"使用者名稱"
+msgstr "使用者名稱"
msgid "Password"
-msgstr ""
-"密碼"
+msgstr "密碼"
msgid "Generate a New Debug Report"
-msgstr ""
-"產生新的除錯報告"
+msgstr "產生新的除錯報告"
msgid "Report Name"
-msgstr ""
-"報告名稱"
+msgstr "報告名稱"
msgid ""
"The name used to identify the report. If omitted, a name will be chosen "
"based on current time. Name can contain: letters, digits, underscore (\"_\") "
"and hyphen (\"-\")."
msgstr ""
-"用來識別報告的名稱。如果省略,則會"
-"基於現行時間來選擇名稱。名稱可以包含:字母、數字、底線 (\"_\")"
-"及連字號 (\"-\")。"
+"用來識別報告的名稱。如果省略,則會基於現行時間來選擇名稱。名稱可以包含:字"
+"母、數字、底線 (\"_\")及連字號 (\"-\")。"
msgid "Rename a Debug Report"
-msgstr ""
-"重新命名除錯報告"
+msgstr "重新命名除錯報告"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
"hyphen (\"-\")."
-msgstr ""
-"用於識別報告的名稱。名稱可以包含:字母、數字及"
-"連字號 (\"-\")。"
+msgstr "用於識別報告的名稱。名稱可以包含:字母、數字及連字號 (\"-\")。"
msgid "Submit"
-msgstr ""
-"提交"
+msgstr "提交"
msgid "Add a Repository"
-msgstr ""
-"新增儲存庫"
+msgstr "新增儲存庫"
msgid "Identifier"
-msgstr ""
-"ID"
+msgstr "ID"
msgid "Single word, unique identifier for the repository."
-msgstr ""
-"單字,儲存庫的唯一 ID。"
+msgstr "單字,儲存庫的唯一 ID。"
msgid "Textual name for the repository."
-msgstr ""
-"儲存庫的文字名稱。"
+msgstr "儲存庫的文字名稱。"
msgid "URL"
-msgstr ""
-"URL"
+msgstr "URL"
msgid "Required Field"
-msgstr ""
-"必要欄位"
+msgstr "必要欄位"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
-msgstr ""
-"儲存庫的 URL。受支援的通訊協定包括 http、ftp 和 file。"
+msgstr "儲存庫的 URL。受支援的通訊協定包括 http、ftp 和 file。"
msgid "Repository is a mirror"
-msgstr ""
-"儲存庫是鏡映"
+msgstr "儲存庫是鏡映"
msgid "Distribution"
-msgstr ""
-"發行套件"
+msgstr "發行套件"
msgid "Distribution of the DEB repository."
-msgstr ""
-"DEB 儲存庫的發行套件。"
+msgstr "DEB 儲存庫的發行套件。"
msgid "Components"
-msgstr ""
-"元件"
+msgstr "元件"
msgid "List of components in DEB repository."
-msgstr ""
-"DEB 儲存庫中的元件清單。"
+msgstr "DEB 儲存庫中的元件清單。"
msgid "Edit Repository"
-msgstr ""
-"編輯儲存庫"
+msgstr "編輯儲存庫"
msgid "Mirror List URL"
-msgstr ""
-"鏡映清單 URL"
+msgstr "鏡映清單 URL"
msgid "Yes"
-msgstr ""
-"是"
+msgstr "是"
msgid "No"
-msgstr ""
-"否"
+msgstr "否"
msgid "Add a Volume to Storage Pool"
-msgstr ""
-"將磁區新增至儲存區"
+msgstr "將磁區新增至儲存區"
msgid "Fetch from remote URL"
-msgstr ""
-"從遠端 URL 提取"
+msgstr "從遠端 URL 提取"
msgid "Enter the remote URL here."
-msgstr ""
-"在這裡輸入遠端 URL。"
+msgstr "在這裡輸入遠端 URL。"
msgid "Upload a file"
-msgstr ""
-"上傳檔案"
+msgstr "上傳檔案"
msgid "Choose the file you want to upload."
-msgstr ""
-"選擇要上傳的檔案。"
+msgstr "選擇要上傳的檔案。"
msgid "Define a New Storage Pool"
-msgstr ""
-"定義新的儲存區"
+msgstr "定義新的儲存區"
msgid "Storage Pool Name"
-msgstr ""
-"儲存區名稱"
+msgstr "儲存區名稱"
msgid ""
"The name used to identify the storage pools, and it should not be empty."
-msgstr ""
-"用來識別儲存區的名稱,不應該是空的。"
+msgstr "用來識別儲存區的名稱,不應該是空的。"
msgid "Storage Pool Type"
-msgstr ""
-"儲存區類型"
+msgstr "儲存區類型"
msgid "Storage Path"
-msgstr ""
-"儲存體路徑"
+msgstr "儲存體路徑"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
-msgstr ""
-"儲存區的路徑。每一個儲存區都必須有一個唯一的路徑。"
+msgstr "儲存區的路徑。每一個儲存區都必須有一個唯一的路徑。"
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
"your system."
-msgstr ""
-"Kimchi 將嘗試建立該目錄(當該目錄尚不存在"
-"於系統中時)。"
+msgstr "Kimchi 將嘗試建立該目錄(當該目錄尚不存在於系統中時)。"
msgid "NFS Server IP"
-msgstr ""
-"NFS 伺服器 IP"
+msgstr "NFS 伺服器 IP"
msgid "NFS server IP or hostname. It can be input or chosen from history."
-msgstr ""
-"NFS 伺服器 IP 或主機名稱。可以直接輸入,也可以從歷程中選擇。"
+msgstr "NFS 伺服器 IP 或主機名稱。可以直接輸入,也可以從歷程中選擇。"
msgid "NFS Path"
-msgstr ""
-"NFS 路徑"
+msgstr "NFS 路徑"
msgid "The NFS exported path on NFS server."
-msgstr ""
-"NFS 伺服器上 NFS 匯出的路徑。"
+msgstr "NFS 伺服器上 NFS 匯出的路徑。"
msgid "Device path"
-msgstr ""
-"裝置路徑"
+msgstr "裝置路徑"
msgid "iSCSI Server"
-msgstr ""
-"iSCSI 伺服器"
+msgstr "iSCSI 伺服器"
msgid "iSCSI server IP or hostname. It should not be empty."
-msgstr ""
-"iSCSI 伺服器 IP 或主機名稱。它不應該是空的。"
+msgstr "iSCSI 伺服器 IP 或主機名稱。它不應該是空的。"
msgid "Server"
-msgstr ""
-"伺服器"
+msgstr "伺服器"
msgid "Port"
-msgstr ""
-"埠"
+msgstr "埠"
msgid "Target"
-msgstr ""
-"目標"
+msgstr "目標"
msgid "The iSCSI target on iSCSI server"
-msgstr ""
-"iSCSI 伺服器上的 iSCSI 目標"
+msgstr "iSCSI 伺服器上的 iSCSI 目標"
msgid "Add iSCSI Authentication"
-msgstr ""
-"新增 iSCSI 鑑別"
+msgstr "新增 iSCSI 鑑別"
msgid "iSCSI Authentication"
-msgstr ""
-"iSCSI 鑑別"
+msgstr "iSCSI 鑑別"
msgid "SCSI Adapter"
-msgstr ""
-"SCSI 配接卡"
+msgstr "SCSI 配接卡"
msgid "Please, wait..."
-msgstr ""
-"請稍候..."
+msgstr "請稍候..."
msgid "Add Template"
-msgstr ""
-"新增範本"
+msgstr "新增範本"
msgid "Where is the source media for this template? "
-msgstr ""
-"此範本的來源媒體位於何處?"
+msgstr "此範本的來源媒體位於何處?"
msgid "Local ISO Image"
-msgstr ""
-"本端 ISO 映像檔"
+msgstr "本端 ISO 映像檔"
msgid "Local Image File"
-msgstr ""
-"本端映像檔"
+msgstr "本端映像檔"
msgid "Remote ISO Image"
-msgstr ""
-"遠端 ISO 映像檔"
+msgstr "遠端 ISO 映像檔"
msgid "Search ISOs"
-msgstr ""
-"搜尋 ISO"
+msgstr "搜尋 ISO"
msgid "The following ISOs are available:"
-msgstr ""
-"下列 ISO 可用:"
+msgstr "下列 ISO 可用:"
msgid "OS: "
-msgstr ""
-"OS:"
+msgstr "OS:"
msgid "Version: "
-msgstr ""
-"版本:"
+msgstr "版本:"
msgid "Size: "
-msgstr ""
-"大小:"
+msgstr "大小:"
msgid "Search more ISOs"
-msgstr ""
-"搜尋更多 ISO"
+msgstr "搜尋更多 ISO"
msgid "Create Templates from Selected ISO"
-msgstr ""
-"從所選 ISO 建立範本"
+msgstr "從所選 ISO 建立範本"
msgid "I want to use a specific ISO file"
-msgstr ""
-"我想使用特定的 ISO 檔案"
+msgstr "我想使用特定的 ISO 檔案"
msgid "Loading default remote ISOs ..."
-msgstr ""
-"正在載入預設遠端 ISO ..."
+msgstr "正在載入預設遠端 ISO ..."
msgid "Arch: "
-msgstr ""
-"架構:"
+msgstr "架構:"
msgid "I want to use a custom URL"
-msgstr ""
-"我想使用自訂 URL"
+msgstr "我想使用自訂 URL"
msgid "Edit Template"
-msgstr ""
-"編輯範本"
+msgstr "編輯範本"
msgid "Processor"
-msgstr ""
-"處理器"
+msgstr "處理器"
msgid "CDROM"
-msgstr ""
-"CDROM"
+msgstr "CDROM"
msgid "Image File"
-msgstr ""
-"映像檔"
+msgstr "映像檔"
msgid "Graphics"
-msgstr ""
-"圖形卡"
+msgstr "圖形卡"
msgid "Disk(GB)"
-msgstr ""
-"磁碟 (GB)"
+msgstr "磁碟 (GB)"
msgid "Disk Format"
-msgstr ""
-"磁碟格式"
+msgstr "磁碟格式"
msgid "CPU Number"
-msgstr ""
-"CPU 數目"
+msgstr "CPU 數目"
msgid "Manually set CPU topology"
-msgstr ""
-"手動設定 CPU 拓蹼"
+msgstr "手動設定 CPU 拓蹼"
msgid "Cores"
-msgstr ""
-"核心"
+msgstr "核心"
msgid "Threads"
-msgstr ""
-"執行緒"
+msgstr "執行緒"
msgid "CPU"
-msgstr ""
-"CPU"
+msgstr "CPU"
msgid "Disk I/O"
-msgstr ""
-"磁碟 I/O"
+msgstr "磁碟 I/O"
msgid "Network I/O"
-msgstr ""
-"網路 I/O"
+msgstr "網路 I/O"
msgid "Livetile"
-msgstr ""
-"Livetile"
+msgstr "Livetile"
msgid "No guests found."
-msgstr ""
-"找不到客體。"
+msgstr "找不到客體。"
msgid "Shut down"
-msgstr ""
-"關閉"
+msgstr "關閉"
msgid "Restart"
-msgstr ""
-"重新啟動"
+msgstr "重新啟動"
msgid "Basic Information"
-msgstr ""
-"基本資訊"
+msgstr "基本資訊"
msgid "OS Distro"
-msgstr ""
-"OS Distro"
+msgstr "OS Distro"
msgid "OS Code Name"
-msgstr ""
-"OS 程式碼名稱"
+msgstr "OS 程式碼名稱"
msgid "CPU(s)"
-msgstr ""
-"CPU"
+msgstr "CPU"
msgid "System Statistics"
-msgstr ""
-"系統統計資料"
+msgstr "系統統計資料"
msgid "Update Progress"
-msgstr ""
-"更新進度"
+msgstr "更新進度"
msgid "Network Name"
-msgstr ""
-"網路名稱"
+msgstr "網路名稱"
msgid "State"
-msgstr ""
-"狀態"
+msgstr "狀態"
msgid "Network Type"
-msgstr ""
-"網路類型"
+msgstr "網路類型"
msgid "Address Space"
-msgstr ""
-"位址空間"
+msgstr "位址空間"
msgid "Name should not contain '/' and '\"'."
-msgstr ""
-"名稱不應包含 '/' 及 '\"'。"
+msgstr "名稱不應包含 '/' 及 '\"'。"
msgid "Isolated: no external network connection"
-msgstr ""
-"已隔離:沒有外部網路連線"
+msgstr "已隔離:沒有外部網路連線"
msgid "NAT: outbound physical network connection only"
-msgstr ""
-"NAT:僅限出埠實體網路連線"
+msgstr "NAT:僅限出埠實體網路連線"
msgid "Bridged: Virtual machines are connected to physical network directly"
-msgstr ""
-"已橋接:虛擬機器直接已連接至實體網路"
+msgstr "已橋接:虛擬機器直接已連接至實體網路"
msgid "(No interfaces found)"
-msgstr ""
-"(找不到介面)"
+msgstr "(找不到介面)"
msgid "Destination"
-msgstr ""
-"目的地"
+msgstr "目的地"
msgid "Enable VLAN"
-msgstr ""
-"啟用 VLAN"
+msgstr "啟用 VLAN"
msgid "VLAN ID"
-msgstr ""
-"VLAN ID"
+msgstr "VLAN ID"
msgid "Stop"
-msgstr ""
-"停止"
+msgstr "停止"
msgid "%Used"
-msgstr ""
-"已使用的百分比"
+msgstr "已使用的百分比"
msgid "Location"
-msgstr ""
-"位置"
+msgstr "位置"
msgid "Capacity"
-msgstr ""
-"容量"
+msgstr "容量"
msgid "Allocated"
-msgstr ""
-"已配置"
+msgstr "已配置"
msgid "active"
-msgstr ""
-"作用中"
+msgstr "作用中"
msgid "inactive"
-msgstr ""
-"非作用中"
+msgstr "非作用中"
msgid "Deactivate"
-msgstr ""
-"取消啟動"
+msgstr "取消啟動"
msgid "Activate"
-msgstr ""
-"啟動"
+msgstr "啟動"
msgid "Add Volume"
-msgstr ""
-"新增磁區"
+msgstr "新增磁區"
msgid "Extend"
-msgstr ""
-"延伸"
+msgstr "延伸"
msgid "Undefine"
-msgstr ""
-"取消定義"
+msgstr "取消定義"
msgid "Format"
-msgstr ""
-"格式"
+msgstr "格式"
msgid "Allocation"
-msgstr ""
-"配置"
+msgstr "配置"
msgid "No templates found."
-msgstr ""
-"找不到範本。"
-
-# ENGL1SH_VERS10N 28617_40 DO NOT REMOVE OR CHANGE THIS LINE
-# T9N_SRC_ID 92
-# T9N_SH1P_STR1NG KV310AAP001 1
+msgstr "找不到範本。"
--
2.1.0
2
2
Hi all,
As we have agreed on moving the Kimchi Host tab to Ginger community and
creating a new plugin (ginger-basic), I want to list step-by-step what
we need to do *on Kimchi side*.
1) Will we call this new plugin as ginger-basic? Any other suggestion?
2) Create the new plugin structure into wok branch, ie, create a
directory named ginger-basic (?) and all it is needed to launch it as a
wok plugin, including building and packaging details.
In this first moment, the entire Host tab will be part of the
ginger-basic - just to move the discussion as soon as possible to Ginger
community.
3) Add ginger-basic plugin as a Kimchi dependency.
Once we have those items done, I will create a new repository for
ginger-basic under kimchi-project organization in Github.
After that, the discussion *will be moved to Ginger community*, ie, all
patches and discussion must be sent to the Ginger mailing list
(https://lists.nongnu.org/mailman/listinfo/ginger-dev-list)
I have sent to Ginger community the next steps to be done there. Please,
check: "[Ginger-dev-list] [RFC] Inheriting Kimchi's Host tab"
Let me know what you think about that.
Regards,
Aline Manera
9
18
1
1
Hello team,
I had some discussions on the fonts and am interested in the current
status.
*Some background for non-UI persons:*
First we need to distinguish between the server and the client.
The server contains the Kimchi/Ginger-webserver and the
Kimchi/Ginger-installation with functional and UI code.
The client contains a browser instance connected to the
Kimchi/Ginger-webserver and displays the UI.
Per default the browser uses fonts which are installed on the client.
Five generic fonts are available on each client operating system and are
used as a default.
In CSS/HTML you specify a list of fonts starting with the most preferred
one and ending with a generic one (default).
You can also provide fonts via the server. This ensures that your
preferred font is available at the client. Such fonts are part of the
Kimchi/Ginger-installation on the server (no additional rpm).
*My opinion on the font discussion:*
1) Icon Font Awesome
This font is very useful as it provides a lot of scalable icons. We
should use/package this font
2) Fonts like "Open Sans" and/or TeXGyreHeros as open source replacement
for "Helvetica Neue"
The sizes of graphical elements vary much more depending on the
language than on the font. Our layout must be flexible enough to support
this.
My recommendation is to use fonts which are already installed on the
client.
Kind regards
Jan
From: Samuel Henrique De Oliveira Guimaraes
<samuel.guimaraes(a)eldorado.org.br>
To: Kevin Zander <klzander(a)linux.vnet.ibm.com>, Aline Manera
<alinefm(a)linux.vnet.ibm.com>, "kimchi-devel(a)ovirt.org"
<kimchi-devel(a)ovirt.org>, "donspang(a)us.ibm.com" <donspang(a)us.ibm.com>
Date: 08/11/2015 07:13 PM
Subject: Re: [Kimchi-devel] New-UI Helvetica Font
Sent by: kimchi-devel-bounces(a)ovirt.org
------------------------------------------------------------------------
I thought that since we are packaging Font-Awesome, Elusive and other
font files as icons it was ok to distribute Open Sans with Kimchi. I
proposed moving to an open source and redistributable font family
instead of a font stack because a text with Arial Unicode on Windows
doesn’t fill the same space in pixels as a text with Helvetica Neue on
OS X and iOS. Open Sans was an alternative because it has the same
variations as Helvetica Neue and almost the same size (I mean letter
spacing / tracking, kerning, body width, leading and height), we
wouldn’t have “condensed” styles in one system and plain and regular
bold and normal text in other systems.
Samuel
*From:* Kevin Zander [mailto:klzander@linux.vnet.ibm.com] *
Sent:* terça-feira, 11 de agosto de 2015 13:31*
To:* Aline Manera <alinefm(a)linux.vnet.ibm.com>; Samuel Henrique De
Oliveira Guimaraes <samuel.guimaraes(a)eldorado.org.br>;
kimchi-devel(a)ovirt.org; donspang(a)us.ibm.com*
Subject:* Re: [Kimchi-devel] New-UI Helvetica Font
On Tue, 2015-08-11 at 12:01 -0300, Aline Manera wrote:
On 10/08/2015 09:58, Samuel Henrique De Oliveira Guimaraes wrote:
Hi team,
I’m sending some screenshots to compare different fonts so we can decide
if we are going to replace Helvetica Neue for Open Sans and/or
TeXGyreHeros.
I also found out that Open Sans doesn’t have all the character glyphs
for simplified and traditional Chinese, Japanese and Korean languages
(wok_current.png file, you can see that these texts have jagged edges).
The equivalent font for these languages is called Noto Sans CJK which is
licensed under SIL Open Font License (OFL). The downside is that Noto
Sans is very heavy (~88MB each language set) so we would have to figure
a way to load these font files only when the user has changed the locale
in the front-end.
OH! Wait... The idea is to use an open source and wide used font, which
means, Kimchi will not package any font file.
Isn’t there an open source and wide used font which works with all
languages?
_http://www.cssfontstack.com/_
Which of these has the best unicode support though, I cannot answer.
_https://en.wikipedia.org/wiki/Unicode_font#List_of_Unicode_fonts_
Thanks,
Samuel Guimaraes
*From:* Aline Manera [_mailto:alinefm@linux.vnet.ibm.com_] *
Sent:* quarta-feira, 5 de agosto de 2015 15:24*
To:* Samuel Henrique De Oliveira Guimaraes
_<samuel.guimaraes(a)eldorado.org.br>_
<mailto:samuel.guimaraes@eldorado.org.br>; _kimchi-devel(a)ovirt.org_
<mailto:kimchi-devel@ovirt.org>; _donspang(a)us.ibm.com_
<mailto:donspang@us.ibm.com>*
Subject:* Re: [Kimchi-devel] New-UI Helvetica Font
On 16/07/2015 13:09, Samuel Henrique De Oliveira Guimaraes wrote:
Hi team,
I noticed that the new-ui design pattern for typography specifies
Helvetica Neue family in four different styles. This font family is
shipped with the latest versions of Mac OS X and iOS but it is not
available for free on Windows and Linux distributions.
I believe this might conflict with Kimchi license. Even if we buy or
rent a webfont license we can’t distribute the TTF, EOT, WOFF and SVG
files in our repositories. I think that we can’t even use a webfont
license in this case (pointing to a remote location or service like
Adobe Typekit or MyFonts) because most font-licensing services are
charging based on pre-paid pageviews.
Usually for web apps, mobile web apps and cloud based services we have
to buy a server license to store the webfont files within our servers,
but since Kimchi is an open-source project that anyone can check out and
run, every kimchi instance would have to buy their own font license.
We can set Helvetica as the default font-family in the CSS and if the
user doesn’t have this font installed the browser will load the next
available font (Arial or any other Sans-Serif) but since each font has
different sizes, some elements may not fit in the screen exactly like
they were seen in the mockups.
Hrm... we should build the new UI with responsive web design in mind
which means changing the font, font size, resizing the browser or
whatever will not impact in the final layout.
Also, the UI specs recommends Helvetica Neue in 5 different styles
(Light, Roman, Regular, Medium and Bold), most system fonts only have 3.
We don’t have something like “Arial Light” for instance.
My suggestion is that we replace Helvetica Neue for Open Sans because it
covers all the style specifications and it is licensed under Apache 2.0.
Any thoughts?
Could you provide a screenshot with the Open Sans font so we can see how
it will look like?
In first hand, I am OK to change to Open Sans.
I am copying Don who originally designed the new UI with the Helvetica
Neue font to check if he has any advice to do.
Thanks,
Samuel Guimarães
_______________________________________________
Kimchi-devel mailing list
_Kimchi-devel(a)ovirt.org_ <mailto:Kimchi-devel@ovirt.org>
_http://lists.ovirt.org/mailman/listinfo/kimchi-devel_
_______________________________________________
Kimchi-devel mailing list
_Kimchi-devel(a)ovirt.org_ <mailto:Kimchi-devel@ovirt.org>
_http://lists.ovirt.org/mailman/listinfo/kimchi-devel______________________…
Kimchi-devel mailing list
Kimchi-devel(a)ovirt.org
http://lists.ovirt.org/mailman/listinfo/kimchi-devel
1
0
Hello team,
I had some discussions on the fonts and am interested in the current
status.
*Some background for non-UI persons:*
First we need to distinguish between the server and the client.
The server contains the Kimchi/Ginger-webserver and the
Kimchi/Ginger-installation with functional and UI code.
The client contains a browser instance connected to the
Kimchi/Ginger-webserver and displays the UI.
Per default the browser uses fonts which are installed on the client.
Five generic fonts are available on each client operating system and are
used as a default.
In CSS/HTML you specify a list of fonts starting with the most preferred
one and ending with a generic one (default).
You can also provide fonts via the server. This ensures that your
preferred font is available at the client. Such fonts are part of the
Kimchi/Ginger-installation on the server (no additional rpm).
*My opinion on the font discussion:*
1) Icon Font Awesome
This font is very useful as it provides a lot of scalable icons. We
should use/package this font
2) Fonts like "Open Sans" and/or TeXGyreHeros as open source replacement
for "Helvetica Neue"
The sizes of graphical elements vary much more depending on the
language than on the font. Our layout must be flexible enough to support
this.
My recommendation is to use fonts which are already installed on the
client.
Kind regards
Jan
From: Samuel Henrique De Oliveira Guimaraes
<samuel.guimaraes(a)eldorado.org.br>
To: Kevin Zander <klzander(a)linux.vnet.ibm.com>, Aline Manera
<alinefm(a)linux.vnet.ibm.com>, "kimchi-devel(a)ovirt.org"
<kimchi-devel(a)ovirt.org>, "donspang(a)us.ibm.com" <donspang(a)us.ibm.com>
Date: 08/11/2015 07:13 PM
Subject: Re: [Kimchi-devel] New-UI Helvetica Font
Sent by: kimchi-devel-bounces(a)ovirt.org
------------------------------------------------------------------------
I thought that since we are packaging Font-Awesome, Elusive and other
font files as icons it was ok to distribute Open Sans with Kimchi. I
proposed moving to an open source and redistributable font family
instead of a font stack because a text with Arial Unicode on Windows
doesn’t fill the same space in pixels as a text with Helvetica Neue on
OS X and iOS. Open Sans was an alternative because it has the same
variations as Helvetica Neue and almost the same size (I mean letter
spacing / tracking, kerning, body width, leading and height), we
wouldn’t have “condensed” styles in one system and plain and regular
bold and normal text in other systems.
Samuel
*From:* Kevin Zander [mailto:klzander@linux.vnet.ibm.com] *
Sent:* terça-feira, 11 de agosto de 2015 13:31*
To:* Aline Manera <alinefm(a)linux.vnet.ibm.com>; Samuel Henrique De
Oliveira Guimaraes <samuel.guimaraes(a)eldorado.org.br>;
kimchi-devel(a)ovirt.org; donspang(a)us.ibm.com*
Subject:* Re: [Kimchi-devel] New-UI Helvetica Font
On Tue, 2015-08-11 at 12:01 -0300, Aline Manera wrote:
On 10/08/2015 09:58, Samuel Henrique De Oliveira Guimaraes wrote:
Hi team,
I’m sending some screenshots to compare different fonts so we can decide
if we are going to replace Helvetica Neue for Open Sans and/or
TeXGyreHeros.
I also found out that Open Sans doesn’t have all the character glyphs
for simplified and traditional Chinese, Japanese and Korean languages
(wok_current.png file, you can see that these texts have jagged edges).
The equivalent font for these languages is called Noto Sans CJK which is
licensed under SIL Open Font License (OFL). The downside is that Noto
Sans is very heavy (~88MB each language set) so we would have to figure
a way to load these font files only when the user has changed the locale
in the front-end.
OH! Wait... The idea is to use an open source and wide used font, which
means, Kimchi will not package any font file.
Isn’t there an open source and wide used font which works with all
languages?
_http://www.cssfontstack.com/_
Which of these has the best unicode support though, I cannot answer.
_https://en.wikipedia.org/wiki/Unicode_font#List_of_Unicode_fonts_
Thanks,
Samuel Guimaraes
*From:* Aline Manera [_mailto:alinefm@linux.vnet.ibm.com_] *
Sent:* quarta-feira, 5 de agosto de 2015 15:24*
To:* Samuel Henrique De Oliveira Guimaraes
_<samuel.guimaraes(a)eldorado.org.br>_
<mailto:samuel.guimaraes@eldorado.org.br>; _kimchi-devel(a)ovirt.org_
<mailto:kimchi-devel@ovirt.org>; _donspang(a)us.ibm.com_
<mailto:donspang@us.ibm.com>*
Subject:* Re: [Kimchi-devel] New-UI Helvetica Font
On 16/07/2015 13:09, Samuel Henrique De Oliveira Guimaraes wrote:
Hi team,
I noticed that the new-ui design pattern for typography specifies
Helvetica Neue family in four different styles. This font family is
shipped with the latest versions of Mac OS X and iOS but it is not
available for free on Windows and Linux distributions.
I believe this might conflict with Kimchi license. Even if we buy or
rent a webfont license we can’t distribute the TTF, EOT, WOFF and SVG
files in our repositories. I think that we can’t even use a webfont
license in this case (pointing to a remote location or service like
Adobe Typekit or MyFonts) because most font-licensing services are
charging based on pre-paid pageviews.
Usually for web apps, mobile web apps and cloud based services we have
to buy a server license to store the webfont files within our servers,
but since Kimchi is an open-source project that anyone can check out and
run, every kimchi instance would have to buy their own font license.
We can set Helvetica as the default font-family in the CSS and if the
user doesn’t have this font installed the browser will load the next
available font (Arial or any other Sans-Serif) but since each font has
different sizes, some elements may not fit in the screen exactly like
they were seen in the mockups.
Hrm... we should build the new UI with responsive web design in mind
which means changing the font, font size, resizing the browser or
whatever will not impact in the final layout.
Also, the UI specs recommends Helvetica Neue in 5 different styles
(Light, Roman, Regular, Medium and Bold), most system fonts only have 3.
We don’t have something like “Arial Light” for instance.
My suggestion is that we replace Helvetica Neue for Open Sans because it
covers all the style specifications and it is licensed under Apache 2.0.
Any thoughts?
Could you provide a screenshot with the Open Sans font so we can see how
it will look like?
In first hand, I am OK to change to Open Sans.
I am copying Don who originally designed the new UI with the Helvetica
Neue font to check if he has any advice to do.
Thanks,
Samuel Guimarães
_______________________________________________
Kimchi-devel mailing list
_Kimchi-devel(a)ovirt.org_ <mailto:Kimchi-devel@ovirt.org>
_http://lists.ovirt.org/mailman/listinfo/kimchi-devel_
_______________________________________________
Kimchi-devel mailing list
_Kimchi-devel(a)ovirt.org_ <mailto:Kimchi-devel@ovirt.org>
_http://lists.ovirt.org/mailman/listinfo/kimchi-devel______________________…
Kimchi-devel mailing list
Kimchi-devel(a)ovirt.org
http://lists.ovirt.org/mailman/listinfo/kimchi-devel
1
0
From: Jan Schneider/Germany/IBM
To: "Kimchi Devel" <kimchi-devel(a)ovirt.org>
Date: 08/26/2015 04:51 PM
Subject: Re: [Kimchi-devel] New-UI Helvetica Font
------------------------------------------------------------------------
Hello team,
I had some discussions on the fonts and am interested in the current
status.
*Some background for non-UI persons:*
First we need to distinguish between the server and the client.
The server contains the Kimchi/Ginger-webserver and the
Kimchi/Ginger-installation with functional and UI code.
The client contains a browser instance connected to the
Kimchi/Ginger-webserver and displays the UI.
Per default the browser uses fonts which are installed on the client.
Five generic fonts are available on each client operating system and are
used as a default.
In HTML/CSS you specify a list of fonts starting with the most preferred
one and ending with a generic one (default).
You can also provide fonts via the server. This ensures that your
preferred font is available at the client. Such fonts are part of the
Kimchi/Ginger-installation on the server (no additional rpm).
*My opinion on the font discussion:*
1) Icon Font Awesome
This font is very useful as it provides a lot of scalable icons. We
should use/package this font
2) Fonts like "Open Sans" and/or TeXGyreHeros as open source replacement
for "Helvetica Neue"
The sizes of graphical elements vary much more depending on the
language than on the font. Our layout must be flexible enough to support
this.
My recommendation is to use fonts which are already installed on the
client.
Kind regards
Jan
From: Samuel Henrique De Oliveira Guimaraes
<samuel.guimaraes(a)eldorado.org.br>
To: Kevin Zander <klzander(a)linux.vnet.ibm.com>, Aline Manera
<alinefm(a)linux.vnet.ibm.com>, "kimchi-devel(a)ovirt.org"
<kimchi-devel(a)ovirt.org>, "donspang(a)us.ibm.com" <donspang(a)us.ibm.com>
Date: 08/11/2015 07:13 PM
Subject: Re: [Kimchi-devel] New-UI Helvetica Font
Sent by: kimchi-devel-bounces(a)ovirt.org
------------------------------------------------------------------------
I thought that since we are packaging Font-Awesome, Elusive and other
font files as icons it was ok to distribute Open Sans with Kimchi. I
proposed moving to an open source and redistributable font family
instead of a font stack because a text with Arial Unicode on Windows
doesn’t fill the same space in pixels as a text with Helvetica Neue on
OS X and iOS. Open Sans was an alternative because it has the same
variations as Helvetica Neue and almost the same size (I mean letter
spacing / tracking, kerning, body width, leading and height), we
wouldn’t have “condensed” styles in one system and plain and regular
bold and normal text in other systems.
Samuel
*From:* Kevin Zander [mailto:klzander@linux.vnet.ibm.com] *
Sent:* terça-feira, 11 de agosto de 2015 13:31*
To:* Aline Manera <alinefm(a)linux.vnet.ibm.com>; Samuel Henrique De
Oliveira Guimaraes <samuel.guimaraes(a)eldorado.org.br>;
kimchi-devel(a)ovirt.org; donspang(a)us.ibm.com*
Subject:* Re: [Kimchi-devel] New-UI Helvetica Font
On Tue, 2015-08-11 at 12:01 -0300, Aline Manera wrote:
On 10/08/2015 09:58, Samuel Henrique De Oliveira Guimaraes wrote:
Hi team,
I’m sending some screenshots to compare different fonts so we can decide
if we are going to replace Helvetica Neue for Open Sans and/or
TeXGyreHeros.
I also found out that Open Sans doesn’t have all the character glyphs
for simplified and traditional Chinese, Japanese and Korean languages
(wok_current.png file, you can see that these texts have jagged edges).
The equivalent font for these languages is called Noto Sans CJK which is
licensed under SIL Open Font License (OFL). The downside is that Noto
Sans is very heavy (~88MB each language set) so we would have to figure
a way to load these font files only when the user has changed the locale
in the front-end.
OH! Wait... The idea is to use an open source and wide used font, which
means, Kimchi will not package any font file.
Isn’t there an open source and wide used font which works with all
languages?
_http://www.cssfontstack.com/_
Which of these has the best unicode support though, I cannot answer.
_https://en.wikipedia.org/wiki/Unicode_font#List_of_Unicode_fonts_
Thanks,
Samuel Guimaraes
*From:* Aline Manera [_mailto:alinefm@linux.vnet.ibm.com_] *
Sent:* quarta-feira, 5 de agosto de 2015 15:24*
To:* Samuel Henrique De Oliveira Guimaraes
_<samuel.guimaraes(a)eldorado.org.br>_
<mailto:samuel.guimaraes@eldorado.org.br>; _kimchi-devel(a)ovirt.org_
<mailto:kimchi-devel@ovirt.org>; _donspang(a)us.ibm.com_
<mailto:donspang@us.ibm.com>*
Subject:* Re: [Kimchi-devel] New-UI Helvetica Font
On 16/07/2015 13:09, Samuel Henrique De Oliveira Guimaraes wrote:
Hi team,
I noticed that the new-ui design pattern for typography specifies
Helvetica Neue family in four different styles. This font family is
shipped with the latest versions of Mac OS X and iOS but it is not
available for free on Windows and Linux distributions.
I believe this might conflict with Kimchi license. Even if we buy or
rent a webfont license we can’t distribute the TTF, EOT, WOFF and SVG
files in our repositories. I think that we can’t even use a webfont
license in this case (pointing to a remote location or service like
Adobe Typekit or MyFonts) because most font-licensing services are
charging based on pre-paid pageviews.
Usually for web apps, mobile web apps and cloud based services we have
to buy a server license to store the webfont files within our servers,
but since Kimchi is an open-source project that anyone can check out and
run, every kimchi instance would have to buy their own font license.
We can set Helvetica as the default font-family in the CSS and if the
user doesn’t have this font installed the browser will load the next
available font (Arial or any other Sans-Serif) but since each font has
different sizes, some elements may not fit in the screen exactly like
they were seen in the mockups.
Hrm... we should build the new UI with responsive web design in mind
which means changing the font, font size, resizing the browser or
whatever will not impact in the final layout.
Also, the UI specs recommends Helvetica Neue in 5 different styles
(Light, Roman, Regular, Medium and Bold), most system fonts only have 3.
We don’t have something like “Arial Light” for instance.
My suggestion is that we replace Helvetica Neue for Open Sans because it
covers all the style specifications and it is licensed under Apache 2.0.
Any thoughts?
Could you provide a screenshot with the Open Sans font so we can see how
it will look like?
In first hand, I am OK to change to Open Sans.
I am copying Don who originally designed the new UI with the Helvetica
Neue font to check if he has any advice to do.
Thanks,
Samuel Guimarães
_______________________________________________
Kimchi-devel mailing list
_Kimchi-devel(a)ovirt.org_ <mailto:Kimchi-devel@ovirt.org>
_http://lists.ovirt.org/mailman/listinfo/kimchi-devel_
_______________________________________________
Kimchi-devel mailing list
_Kimchi-devel(a)ovirt.org_ <mailto:Kimchi-devel@ovirt.org>
_http://lists.ovirt.org/mailman/listinfo/kimchi-devel______________________…
Kimchi-devel mailing list
Kimchi-devel(a)ovirt.org
http://lists.ovirt.org/mailman/listinfo/kimchi-devel
1
0
[PATCH] [WOK] Adding a css class name to ginger tab and main template (including wok toolbar)
by sguimaraes943@yahoo.com 25 Aug '15
by sguimaraes943@yahoo.com 25 Aug '15
25 Aug '15
From: sguimaraes943 <sguimaraes943(a)yahoo.com>
Signed-off-by: samhenri <samuel.guimaraes(a)eldorado.org.br>
---
ui/config/tab-ext.xml | 1 +
ui/pages/host-admin.html.tmpl | 9 +++++++--
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/ui/config/tab-ext.xml b/ui/config/tab-ext.xml
index d58327f..651434d 100644
--- a/ui/config/tab-ext.xml
+++ b/ui/config/tab-ext.xml
@@ -22,6 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
<access role="user" mode="none"/>
<title>Administration</title>
+ <css>administration</css>
<path>plugins/ginger/host-admin.html</path>
</tab>
</tabs-ext>
diff --git a/ui/pages/host-admin.html.tmpl b/ui/pages/host-admin.html.tmpl
index 238ab9f..4ebd17b 100644
--- a/ui/pages/host-admin.html.tmpl
+++ b/ui/pages/host-admin.html.tmpl
@@ -28,8 +28,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
<script type="text/javascript" src="plugins/ginger/js/host-admin.js"></script>
</head>
<body>
-<div class="ginger">
-
+<div id="administration-root-container" class="ginger">
+<div class="toolbar">
+ <div class="container">
+ <div class="tools pull-right">
+ </div>
+ </div>
+</div>
<div id="gingerHostAdmin" class="host-admin">
<h3 class="firmware-ppc-enabled">$_("Firmware Update")</h3>
<div class="content-area">
--
1.9.3
1
0
Hello,
I started a Kimchi GUI Prototype with the Pencil tool.
First topic I would like to discuss is the base navigation proposal
shown below
1) There is a horizontal main navigation area which contains 'Host' and
'Virtualization'. 'Containers' is an example for a future plugin.
2) There is a vertical sub navigation area. Each item in the sub
navigation has an icon and a label (1 or 2 lines).
I am very interested in your feedback and would like to come to an
agreement on this.
I will discuss with Aline if we can store the Kimchi GUI Prototype at a
central place. It is packed in a single file PencilGuiPrototype.zip
Please extract this file and read ./readme.txt
To view the Kimchi GUI Prototype open file ./htmlExport/index.html in
your browser and navigate by clicking on navigation tabs/buttons.
If you want to edit the Kimchi GUI Prototype you will find further
information in ./readme.txt
Kind regards
Jan
Alternate design with the same navigation
�PNG
4
6
20 Aug '15
The default template configuration is defined in the template.conf file.
This file is parsed on server start up and the result is always returned
in the osinfo.lookup() method. That means when creating a new
VMTemplate instance it will already contain all the default values to
use for the Template creation.
The disks are in a dict format like below:
[{u'index': 0, u'size': 10, u'format': u'qcow2'}]
Each disk has its own size and format and we just need to use them.
We don't need to parse the template.conf file again in order to get the right
values.
Also adjust the tests according to those changes.
Signed-off-by: Aline Manera <alinefm(a)linux.vnet.ibm.com>
---
src/kimchi/vmtemplate.py | 40 ++++++++++++++++++----------------------
tests/test_model.py | 9 ++++++---
tests/test_template.py | 8 ++++----
3 files changed, 28 insertions(+), 29 deletions(-)
diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py
index a165a5d..56a0de8 100644
--- a/src/kimchi/vmtemplate.py
+++ b/src/kimchi/vmtemplate.py
@@ -23,13 +23,11 @@ import time
import urlparse
import uuid
-from configobj import ConfigObj
from lxml import etree
from lxml.builder import E
from kimchi import imageinfo
from kimchi import osinfo
-from kimchi.config import paths
from kimchi.exception import InvalidParameter, IsoFormatError, MissingParameter
from kimchi.exception import ImageFormatError, OperationFailed
from kimchi.isoinfo import IsoImage
@@ -64,23 +62,31 @@ class VMTemplate(object):
entry = osinfo.lookup(os_distro, os_version)
self.info.update(entry)
- # Auto-generate a template name and no one is passed
+ # Auto-generate a template name if no one is passed
if 'name' not in args or args['name'] == '':
args['name'] = self._gen_name(distro, version)
self.name = args['name']
- # Override with the passed in parameters
+ # Merge graphics settings
graph_args = args.get('graphics')
if graph_args:
graphics = dict(self.info['graphics'])
graphics.update(graph_args)
args['graphics'] = graphics
- self.info.update(args)
- # Assign right disk format to logical and [i]scsi storagepools
- if self._get_storage_type() in ['logical', 'iscsi', 'scsi']:
- for i, disk in enumerate(self.info['disks']):
- self.info['disks'][i]['format'] = 'raw'
+ # Merge disks dict
+ default_disk = self.info['disks'][0]
+ for i, d in enumerate(args.get('disks', [])):
+ disk = dict(default_disk)
+ disk.update(d)
+
+ # Assign right disk format to logical and [i]scsi storagepools
+ if self._get_storage_type() in ['logical', 'iscsi', 'scsi']:
+ disk['format'] = 'raw'
+ args['disks'][i] = disk
+
+ # Override template values according to 'args'
+ self.info.update(args)
def _get_os_info(self, args, scan):
distro = version = 'unknown'
@@ -159,14 +165,6 @@ class VMTemplate(object):
dev, xml = get_disk_xml(params)
return xml
- @staticmethod
- def get_default_disk0_format():
- config_file = os.path.join(paths.conf_dir, 'template.conf')
- config = ConfigObj(config_file)
-
- default_vol_format = config['storage']['disk.0'].get('format', 'qcow2')
- return default_vol_format
-
def _get_disks_xml(self, vm_uuid):
# Current implementation just allows to create disk in one single
# storage pool, so we cannot mix the types (scsi volumes vs img file)
@@ -174,8 +172,7 @@ class VMTemplate(object):
storage_path = self._get_storage_path()
base_disk_params = {'type': 'disk', 'disk': 'file',
- 'bus': self.info['disk_bus'],
- 'format': self.get_default_disk0_format()}
+ 'bus': self.info['disk_bus']}
logical_disk_params = {'format': 'raw'}
iscsi_disk_params = {'disk': 'block', 'format': 'raw'}
@@ -187,7 +184,7 @@ class VMTemplate(object):
pool_name = pool_name_from_uri(self.info['storagepool'])
for index, disk in enumerate(self.info['disks']):
params = dict(base_disk_params)
- params['format'] = disk.get('format', params['format'])
+ params['format'] = disk['format']
params.update(locals().get('%s_disk_params' % storage_type, {}))
params['index'] = index
@@ -203,7 +200,6 @@ class VMTemplate(object):
return unicode(disks_xml, 'utf-8')
def to_volume_list(self, vm_uuid):
- default_vol_format = self.get_default_disk0_format()
storage_path = self._get_storage_path()
ret = []
for i, d in enumerate(self.info['disks']):
@@ -212,7 +208,7 @@ class VMTemplate(object):
info = {'name': volume,
'capacity': d['size'],
- 'format': d.get('format', default_vol_format),
+ 'format': d['format'],
'path': '%s/%s' % (storage_path, volume)}
if 'logical' == self._get_storage_type() or \
diff --git a/tests/test_model.py b/tests/test_model.py
index 717b9bc..7ca823a 100644
--- a/tests/test_model.py
+++ b/tests/test_model.py
@@ -32,11 +32,11 @@ import iso_gen
import kimchi.objectstore
import utils
from kimchi import netinfo
+from kimchi import osinfo
from kimchi.basemodel import Singleton
from kimchi.config import config, paths
from kimchi.exception import InvalidOperation
from kimchi.exception import InvalidParameter, NotFoundError, OperationFailed
-from kimchi.osinfo import get_template_default
from kimchi.model import model
from kimchi.model.libvirtconnection import LibvirtConnection
from kimchi.model.vms import VMModel
@@ -386,7 +386,7 @@ class ModelTests(unittest.TestCase):
def test_vm_disk(self):
disk_path = os.path.join(TMP_DIR, 'existent2.iso')
open(disk_path, 'w').close()
- modern_disk_bus = get_template_default('modern', 'disk_bus')
+ modern_disk_bus = osinfo.get_template_default('modern', 'disk_bus')
def _attach_disk(expect_bus=modern_disk_bus):
disk_args = {"type": "disk",
@@ -485,7 +485,7 @@ class ModelTests(unittest.TestCase):
rollback.prependDefer(inst.vm_delete, vm_name)
# Need to check the right disk_bus for old distro
- disk = _attach_disk(get_template_default('old', 'disk_bus'))
+ disk = _attach_disk(osinfo.get_template_default('old', 'disk_bus'))
inst.vmstorage_delete('kimchi-ide-bus-vm', disk)
# Hot plug IDE bus disk does not work
@@ -620,11 +620,14 @@ class ModelTests(unittest.TestCase):
with open(config_file, 'w') as f:
f.write(conf_file_data)
+ osinfo.defaults = osinfo._get_tmpl_defaults()
+
def _restore_template_conf_file(self):
config_file = os.path.join(paths.conf_dir, 'template.conf')
config_bkp_file = \
os.path.join(paths.conf_dir, 'template.conf-unit_test_bkp')
os.rename(config_bkp_file, config_file)
+ osinfo.defaults = osinfo._get_tmpl_defaults()
def _get_disk_format_from_vm(self, vm, conn):
dom = VMModel.get_vm(vm, conn)
diff --git a/tests/test_template.py b/tests/test_template.py
index 83561c1..48ef229 100644
--- a/tests/test_template.py
+++ b/tests/test_template.py
@@ -24,7 +24,7 @@ import unittest
from functools import partial
-from kimchi.vmtemplate import VMTemplate
+from kimchi import osinfo
from kimchi.config import READONLY_POOL_TYPE
from kimchi.mockmodel import MockModel
from utils import get_free_port, patch_auth, request, run_server
@@ -88,7 +88,7 @@ class TemplateTests(unittest.TestCase):
self.assertEquals(sorted(tmpl.keys()), sorted(keys))
# Verify if default disk format was configured
- default_disk_format = VMTemplate.get_default_disk0_format()
+ default_disk_format = osinfo.defaults['disks'][0]['format']
self.assertEquals(tmpl['disks'][0]['format'], default_disk_format)
# Clone a template
@@ -199,8 +199,8 @@ class TemplateTests(unittest.TestCase):
self.assertEquals(update_tmpl['cdrom'], cdrom_data['cdrom'])
# Update disks
- disk_data = {'disks': [{'index': 0, 'size': 10},
- {'index': 1, 'size': 20}]}
+ disk_data = {'disks': [{'index': 0, 'size': 10, 'format': 'raw'},
+ {'index': 1, 'size': 20, 'format': 'raw'}]}
resp = self.request(new_tmpl_uri, json.dumps(disk_data), 'PUT')
self.assertEquals(200, resp.status)
resp = self.request(new_tmpl_uri)
--
2.1.0
2
2
Commit aaa60fae added PKG_CONFIG as dependency and now the m4/pkg.m4
file is auto-generated an each build.
Add it to .gitignore to avoid untracked files.
Signed-off-by: Aline Manera <alinefm(a)linux.vnet.ibm.com>
---
.gitignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/.gitignore b/.gitignore
index b3988b6..4757cf7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@ autom4te.cache
Makefile
Makefile.in
aclocal.m4
+m4/pkg.m4
build-aux/compile
build-aux/config.guess
build-aux/config.sub
--
2.1.0
2
2
[PATCH] Issues #682/#684/#685: Change some code errors when start, shutdown or poweroff vms
by Ramon Medeiros 19 Aug '15
by Ramon Medeiros 19 Aug '15
19 Aug '15
When trying to start a running vm, shutoff or poweroff a shutdown vm,
the retrieved error was 500 (Internal Server Error). A better error
would be 400 (Invalid Request).
Signed-off-by: Ramon Medeiros <ramonn(a)linux.vnet.ibm.com>
---
src/kimchi/model/vms.py | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/src/kimchi/model/vms.py b/src/kimchi/model/vms.py
index 106e9bc..d3020b6 100644
--- a/src/kimchi/model/vms.py
+++ b/src/kimchi/model/vms.py
@@ -1105,7 +1105,12 @@ class VMModel(object):
try:
dom.create()
except libvirt.libvirtError as e:
- raise OperationFailed("KCHVM0019E",
+ # vm already running: return error 403
+ if DOM_STATE_MAP[dom.info()[0]] == "running":
+ raise InvalidOperation("KCHVM0019E",
+ {'name': name, 'err': e.get_error_message()})
+ else:
+ raise OperationFailed("KCHVM0019E",
{'name': name, 'err': e.get_error_message()})
def poweroff(self, name):
@@ -1113,7 +1118,12 @@ class VMModel(object):
try:
dom.destroy()
except libvirt.libvirtError as e:
- raise OperationFailed("KCHVM0020E",
+ # vm already powered off: return error 403
+ if DOM_STATE_MAP[dom.info()[0]] == "shutoff":
+ raise InvalidOperation("KCHVM0020E",
+ {'name': name, 'err': e.get_error_message()})
+ else:
+ raise OperationFailed("KCHVM0020E",
{'name': name, 'err': e.get_error_message()})
def shutdown(self, name):
@@ -1121,7 +1131,12 @@ class VMModel(object):
try:
dom.shutdown()
except libvirt.libvirtError as e:
- raise OperationFailed("KCHVM0029E",
+ # vm already powered off: return error 403
+ if DOM_STATE_MAP[dom.info()[0]] == "shutoff":
+ raise InvalidOperation("KCHVM0029E",
+ {'name': name, 'err': e.get_error_message()})
+ else:
+ raise OperationFailed("KCHVM0029E",
{'name': name, 'err': e.get_error_message()})
def reset(self, name):
--
2.1.0
1
0
Hi,
today I was looking for an Open Source GUI Prototyping Tool.
Harshal already used
Pencil http://pencil.evolus.vn/
which is also the best I found.
Pencil is an Open Source tool supporting multi platforms (Windows,
Linux, Mac). It looks like development of Pencil stopped in 2013.
I installed it and made some basic tests. In my opinion it is sufficient
for visualizing general UI concepts in Kimchi/Ginmger but not for more.
My recommendation is to use it for these aspects.
What is your opinion? Do you know other tools?
Kind regards
Jan
4
5
Commit aaa60fae added PKG_CONFIG as dependency. So the autoconf need the
m4/pkg.m4 file in order to properly do the build.
Signed-off-by: Aline Manera <alinefm(a)linux.vnet.ibm.com>
---
m4/pkg.m4 | 214 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 214 insertions(+)
create mode 100644 m4/pkg.m4
diff --git a/m4/pkg.m4 b/m4/pkg.m4
new file mode 100644
index 0000000..c5b26b5
--- /dev/null
+++ b/m4/pkg.m4
@@ -0,0 +1,214 @@
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+# serial 1 (pkg-config-0.24)
+#
+# Copyright © 2004 Scott James Remnant <scott(a)netsplit.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
+m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=m4_default([$1], [0.9.0])
+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ PKG_CONFIG=""
+ fi
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists. Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+# only at the first occurence in configure.ac, so if the first place
+# it's called might be skipped (such as if it is within an "if", you
+# have to call PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+ m4_default([$2], [:])
+m4_ifvaln([$3], [else
+ $3])dnl
+fi])
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+ pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+ PKG_CHECK_EXISTS([$3],
+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes ],
+ [pkg_failed=yes])
+ else
+ pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+ AC_MSG_RESULT([no])
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
+ else
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+ m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])[]dnl
+ ])
+elif test $pkg_failed = untried; then
+ AC_MSG_RESULT([no])
+ m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+ ])
+else
+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+ AC_MSG_RESULT([yes])
+ $3
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+
+# PKG_INSTALLDIR(DIRECTORY)
+# -------------------------
+# Substitutes the variable pkgconfigdir as the location where a module
+# should install pkg-config .pc files. By default the directory is
+# $libdir/pkgconfig, but the default can be changed by passing
+# DIRECTORY. The user can override through the --with-pkgconfigdir
+# parameter.
+AC_DEFUN([PKG_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+ [pkg-config installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([pkgconfigdir],
+ [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
+ [with_pkgconfigdir=]pkg_default)
+AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+]) dnl PKG_INSTALLDIR
+
+
+# PKG_NOARCH_INSTALLDIR(DIRECTORY)
+# -------------------------
+# Substitutes the variable noarch_pkgconfigdir as the location where a
+# module should install arch-independent pkg-config .pc files. By
+# default the directory is $datadir/pkgconfig, but the default can be
+# changed by passing DIRECTORY. The user can override through the
+# --with-noarch-pkgconfigdir parameter.
+AC_DEFUN([PKG_NOARCH_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+ [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([noarch-pkgconfigdir],
+ [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
+ [with_noarch_pkgconfigdir=]pkg_default)
+AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+]) dnl PKG_NOARCH_INSTALLDIR
+
+
+# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# -------------------------------------------
+# Retrieves the value of the pkg-config variable for the given module.
+AC_DEFUN([PKG_CHECK_VAR],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
+
+_PKG_CONFIG([$1], [variable="][$3]["], [$2])
+AS_VAR_COPY([$1], [pkg_cv_][$1])
+
+AS_VAR_IF([$1], [""], [$5], [$4])dnl
+])# PKG_CHECK_VAR
--
2.1.0
2
3
18 Aug '15
Hi team,
I'm trying to add Bootstrap.min.css file do Kimchi plugin but I think I have to edit the Makefiles to include them in the server. If I edit wok-ui.html.tmpl it doesn't render anything and throws a 404 error. If I remove the line that I'm using to include Bootstrap or any other CSS or JS file that I've added, it goes back to normal.
Where do I edit to include my new assets?
Thanks,
Samuel
2
3
13 Aug '15
Oh, I see. Well, coincidently today I saw two articles evaluating the usability of the hamburger button:
http://deep.design/the-hamburger-menu/
https://medium.com/mobile-growth/who-moved-my-hamburger-d237860bc589
-Most sites and applications are redesign or realigning their structure and getting rid of the hamburger button going back to… Tabs!
I think the navbar should have some contextual changes when browsing the API documentation and sample plugin compared to the current new-ui proposed for Wok. I need to validate some ui patterns first. I still need to present some mockups for low resolution screens with the navbar in the new-ui, adding more tabs doesn’t seem like a good option. Once the new-ui is stable I’ll work on some mockups and share with ML.
Thanks,
Samuel
From: Harshal Patil [mailto:harshal.patil@in.ibm.com]
Sent: quinta-feira, 13 de agosto de 2015 01:28
To: Samuel Henrique De Oliveira Guimaraes <samuel.guimaraes(a)eldorado.org.br>
Cc: alinefm(a)linux.vnet.ibm.com; kimchi-devel(a)ovirt.org; socorro(a)linux.vnet.ibm.com
Subject: Re: RE: RE: [Kimchi-devel] Wok index page mock up
Not sure if I got you correctly there. I wasn't just referring to the API documentation, I was talking about overall layout of wok with all it's plugins loaded.
----- Original message -----
From: Samuel Henrique De Oliveira Guimaraes <samuel.guimaraes(a)eldorado.org.br<mailto:samuel.guimaraes@eldorado.org.br>>
To: Harshal Patil/India/IBM@IBMIN
Cc: "alinefm(a)linux.vnet.ibm.com<mailto:alinefm@linux.vnet.ibm.com>" <alinefm(a)linux.vnet.ibm.com<mailto:alinefm@linux.vnet.ibm.com>>, "kimchi-devel(a)ovirt.org<mailto:kimchi-devel@ovirt.org>" <kimchi-devel(a)ovirt.org<mailto:kimchi-devel@ovirt.org>>, "socorro(a)linux.vnet.ibm.com<mailto:socorro@linux.vnet.ibm.com>" <socorro(a)linux.vnet.ibm.com<mailto:socorro@linux.vnet.ibm.com>>
Subject: RE: RE: [Kimchi-devel] Wok index page mock up
Date: Thu, Aug 13, 2015 1:48 AM
Yes, I think this pattern with fixed top, menu icon and search field is very good for the purpose of a documentation tool.
For the mockup I’ve edited a HTML page, captured it and added the logo with Gimp.
Samuel
From: Harshal Patil [mailto:harshal.patil@in.ibm.com]
Sent: quarta-feira, 12 de agosto de 2015 01:02
To: Samuel Henrique De Oliveira Guimaraes <samuel.guimaraes(a)eldorado.org.br<mailto:samuel.guimaraes@eldorado.org.br>>
Cc: alinefm(a)linux.vnet.ibm.com<mailto:alinefm@linux.vnet.ibm.com>; kimchi-devel(a)ovirt.org<mailto:kimchi-devel@ovirt.org>; socorro(a)linux.vnet.ibm.com<mailto:socorro@linux.vnet.ibm.com>
Subject: Re: RE: [Kimchi-devel] Wok index page mock up
Hi,
Thanks for your comments. I liked the API explorer you have proposed.
For the hamburger and logo bar, do you want to keep a static bar or do you want to consider a dynamically changing contextual bar? I have attached the example of later here.
So depending upon which context you are it changes it's colour and items in the bar. The screenshots are from 'Inbox for Gmail'. We can keep the logo somewhere there but we can also show which 'plugin' the is interacting with and change the color scheme accordingly. E.g if user selects 'Kimchi' plugin from hamburger menu we can display 'Kimchi' next to that hamburger menu (while continue to display 'Wok' in the center or something like that). This way we can get rid of 'tabs'. The top bar serves that purpose.
Let me know what do you think.
BTW, which mock up tool you used to create that mockup page of wok?
Harshal
----- Original message -----
From: Samuel Henrique De Oliveira Guimaraes <samuel.guimaraes(a)eldorado.org.br<mailto:samuel.guimaraes@eldorado.org.br>>
To: Harshal Patil/India/IBM@IBMIN, "alinefm(a)linux.vnet.ibm.com<mailto:alinefm@linux.vnet.ibm.com>" <alinefm(a)linux.vnet.ibm.com<mailto:alinefm@linux.vnet.ibm.com>>
Cc: "kimchi-devel(a)ovirt.org<mailto:kimchi-devel@ovirt.org>" <kimchi-devel(a)ovirt.org<mailto:kimchi-devel@ovirt.org>>, "socorro(a)linux.vnet.ibm.com<mailto:socorro@linux.vnet.ibm.com>" <socorro(a)linux.vnet.ibm.com<mailto:socorro@linux.vnet.ibm.com>>
Subject: RE: [Kimchi-devel] Wok index page mock up
Date: Wed, Aug 12, 2015 3:06 AM
Hi Harshal,
I liked the mockup. It looks good and I think that for Wok service we should have a clean interface since we are going to provide API documentation, it should feature different elements than Kimchi and Ginger but maintain the same design language. I think this is a good direction because if you look to several products Wikis and docs, they are adding some of the same elements that we can see in this mockup like the Hamburger Icon and an off-canvas menu. For the REST API documentation I was thinking in something similar to the attached image and this link: http://petstore.swagger.io/
However, that part would need user authentication for security reasons.
Regarding the logo, I believe it should be large and centered in the index page. Kimchi logo is good enough, maybe a flat version of it:
From: Harshal Patil [mailto:harshal.patil@in.ibm.com]
Sent: terça-feira, 11 de agosto de 2015 16:49
To: alinefm(a)linux.vnet.ibm.com<mailto:alinefm@linux.vnet.ibm.com>
Cc: kimchi-devel(a)ovirt.org<mailto:kimchi-devel@ovirt.org>; Samuel Henrique De Oliveira Guimaraes <samuel.guimaraes(a)eldorado.org.br<mailto:samuel.guimaraes@eldorado.org.br>>; socorro(a)linux.vnet.ibm.com<mailto:socorro@linux.vnet.ibm.com>
Subject: Re: [Kimchi-devel] Wok index page mock up
Opps sorry Aline, forgot to answer your questions..
1. It was inspired from Android's hamburger menu design. It's also your in 'Inbox for Gmail's desktop page. But of course, this is not a final design. We can improve it further, if required.
2. IMHO, user doesn't need to login just to see the index page. There is nothing in there which needs to be protected behind a login page.
3. It could be right next to hamburger menu or on the RHS.
----- Original message -----
From: Aline Manera <alinefm(a)linux.vnet.ibm.com<mailto:alinefm@linux.vnet.ibm.com>>
To: Harshal Patil/India/IBM@IBMIN, kimchi-devel(a)ovirt.org<mailto:kimchi-devel@ovirt.org>, Samuel Henrique De Oliveira Guimaraes <samuel.guimaraes(a)eldorado.org.br<mailto:samuel.guimaraes@eldorado.org.br>>, Socorro Stoppler <socorro(a)linux.vnet.ibm.com<mailto:socorro@linux.vnet.ibm.com>>
Cc:
Subject: Re: [Kimchi-devel] Wok index page mock up
Date: Tue, Aug 11, 2015 8:47 PM
Hi Harshal,
Thanks for sending this mockup!
In general it looks good for me. Only some comments/doubts:
1) What is 3 lines button on the left corner? Does this represent a menu or something?
2) Will the welcome page be shown as the first page or user will need to login to get the welcome page?
3) Will wok have a logo? Where in page will we display it?
Maybe Socorro and Samuel can help us more on the page layout as they are UI experts =)
Regards,
Aline Manera
On 10/08/2015 07:43, Harshal Patil wrote:
Hi,
Working on issue #718 ,https://github.com/kimchi-project/kimchi/issues/718
Just some initial mock up about page layouts. Please let me know what do you think about it. These mock ups are only for showing the layout, so please ignore things like color scheme, font types etc.
Here is the pdf, https://drive.google.com/file/d/0B3vI9LCU26KEN19kcjZtbTVyOGM/view?usp=shari…
I am using Pencil to create that, so if you want to edit something here is pencil file,
https://drive.google.com/file/d/0B3vI9LCU26KETm52bU00V1hDZ00/view?usp=shari…
Thanks
_______________________________________________
Kimchi-devel mailing list
Kimchi-devel(a)ovirt.org<mailto:Kimchi-devel@ovirt.org>
http://lists.ovirt.org/mailman/listinfo/kimchi-devel
1
0
Following the Helvetica Neue topic previously discussed in the mailing list, I think we have another issue with fonts here.
In the current [wok] branch there's a folder called "Fontello" within the ui assets with some ttf, svg, woff and eot files. Fontello is a service that allows you to choose characters from different font families.
According to Fedora Fonts Policy:
1. Fonts released upstream in separate archives MUST be packaged in separate source packages (src.rpm), unless they belong to the same font family.
2. Packagers SHOULD ask upstream to release each font family in a separate versioned archive, when it bundles in a common release archive:
1. fonts with other material such as application code, or
2. different font families.
? As an exception, when a project is the upstream of several font families, which are all licensed the same way, and released on the same date, with the same version, the use of a common release archive is tolerated.
3. Packagers MUST package each font family in a separate (noarch.rpm) (sub)package, notwithstanding on how they applied the previous source package (src.rpm) rules. The only admitted exceptions are:
0. source packages that only include one font family and no other code or content (font documentation excepted), in which case a simple package is fine,
1. font families which are designed to extend other font families with larger Unicode coverage (for example Arial Unicode, Droid Sans Fallback), in which case grouping the font family and its extension in a single (sub)package is acceptable.
? such cases should be notified to the fontconfig maintainer and the Fedora fonts list<https://fedoraproject.org/wiki/Fonts_SIG_mailing_lists>, so the font family split can be eventually hidden from users.
2. fonts that use a format that bundles different font families in a single file.
4. On the other hand, the different faces of a font family MUST be packaged together in a common (noarch.rpm) (sub)package, and not spread over different (sub)packages[3]<https://fedoraproject.org/wiki/Packaging:FontsPolicy#cite_note-2>.
https://fedoraproject.org/wiki/Packaging:FontsPolicy
And Web Assets Packaging:
All system fonts (available in %{_datadir}/fonts) are automatically made available in %{_webassetdir}/fonts/ via a symlink. For more information on packaging system fonts, see the font guidelines<https://fedoraproject.org/wiki/Packaging:FontsPolicy>. Please note that [Web_Assets/Fonts|only fonts available in the Fedora package collection are made available on HTTP servers by default].
Please note that those guidelines prohibit packaging fonts elsewhere. There is no compelling reason to support other font formats, as most browsers that support web fonts support the TTF or OTF formats used by system fonts, therefore alternative web font formats like WOFF are prohibited.
https://fedoraproject.org/wiki/Packaging:Web_Assets#Fonts
So, instead of putting font files within Kimchi project, we have to use a package. From the list of icons used to build this Fontello.ttf file, only Font Awesome has a Fedora Package. The problem is that this font uses trademarked icons such as Windows, Spotify, Skype, Facebook, Twitter and other brands when you download it, not sure if they removed from their RPM.
We would also have to provide a service that exposes the TTF and OTF files in the same URL, protocol and port that Kimchi is running, something like https://localhost:8001/fonts/font-awesome.ttf for instance.
As for TTF and OTF support, according to this support table, we got all A-grade browsers: http://caniuse.com/#feat=ttf
The same goes for Open Sans font and an alternative to Traditional Chinese and Simplified Chinese from Adobe called Source Han Sans:
https://apps.fedoraproject.org/packages/open-sans-fonts/overview/
https://apps.fedoraproject.org/packages/adobe-source-han-sans-tw-fonts
https://apps.fedoraproject.org/packages/adobe-source-han-sans-cn-fonts
The other solution for our icons would be export each glyph we want to use in SVG format (and keep font-awesome license within). It seems that this is ok with Font-Awesome but not with the other fonts available in Fontello.
So, for now I'm removing all font files from [wok] branch and I'll submit a patch later.
What are your thoughts? Any advice?
Regards,
Samuel
1
0
13 Aug '15
Yes, I think this pattern with fixed top, menu icon and search field is very good for the purpose of a documentation tool.
For the mockup I’ve edited a HTML page, captured it and added the logo with Gimp.
Samuel
From: Harshal Patil [mailto:harshal.patil@in.ibm.com]
Sent: quarta-feira, 12 de agosto de 2015 01:02
To: Samuel Henrique De Oliveira Guimaraes <samuel.guimaraes(a)eldorado.org.br>
Cc: alinefm(a)linux.vnet.ibm.com; kimchi-devel(a)ovirt.org; socorro(a)linux.vnet.ibm.com
Subject: Re: RE: [Kimchi-devel] Wok index page mock up
Hi,
Thanks for your comments. I liked the API explorer you have proposed.
For the hamburger and logo bar, do you want to keep a static bar or do you want to consider a dynamically changing contextual bar? I have attached the example of later here.
[cid:image003.png@01D0D522.DEB4CE60][cid:image004.png@01D0D522.DEB4CE60][cid:image005.png@01D0D522.DEB4CE60]
So depending upon which context you are it changes it's colour and items in the bar. The screenshots are from 'Inbox for Gmail'. We can keep the logo somewhere there but we can also show which 'plugin' the is interacting with and change the color scheme accordingly. E.g if user selects 'Kimchi' plugin from hamburger menu we can display 'Kimchi' next to that hamburger menu (while continue to display 'Wok' in the center or something like that). This way we can get rid of 'tabs'. The top bar serves that purpose.
Let me know what do you think.
BTW, which mock up tool you used to create that mockup page of wok?
Harshal
----- Original message -----
From: Samuel Henrique De Oliveira Guimaraes <samuel.guimaraes(a)eldorado.org.br<mailto:samuel.guimaraes@eldorado.org.br>>
To: Harshal Patil/India/IBM@IBMIN, "alinefm(a)linux.vnet.ibm.com<mailto:alinefm@linux.vnet.ibm.com>" <alinefm(a)linux.vnet.ibm.com<mailto:alinefm@linux.vnet.ibm.com>>
Cc: "kimchi-devel(a)ovirt.org<mailto:kimchi-devel@ovirt.org>" <kimchi-devel(a)ovirt.org<mailto:kimchi-devel@ovirt.org>>, "socorro(a)linux.vnet.ibm.com<mailto:socorro@linux.vnet.ibm.com>" <socorro(a)linux.vnet.ibm.com<mailto:socorro@linux.vnet.ibm.com>>
Subject: RE: [Kimchi-devel] Wok index page mock up
Date: Wed, Aug 12, 2015 3:06 AM
Hi Harshal,
I liked the mockup. It looks good and I think that for Wok service we should have a clean interface since we are going to provide API documentation, it should feature different elements than Kimchi and Ginger but maintain the same design language. I think this is a good direction because if you look to several products Wikis and docs, they are adding some of the same elements that we can see in this mockup like the Hamburger Icon and an off-canvas menu. For the REST API documentation I was thinking in something similar to the attached image and this link: http://petstore.swagger.io/
[cid:image006.png@01D0D522.DEB4CE60]
However, that part would need user authentication for security reasons.
Regarding the logo, I believe it should be large and centered in the index page. Kimchi logo is good enough, maybe a flat version of it:
[cid:image007.png@01D0D522.DEB4CE60]
From: Harshal Patil [mailto:harshal.patil@in.ibm.com]
Sent: terça-feira, 11 de agosto de 2015 16:49
To: alinefm(a)linux.vnet.ibm.com<mailto:alinefm@linux.vnet.ibm.com>
Cc: kimchi-devel(a)ovirt.org<mailto:kimchi-devel@ovirt.org>; Samuel Henrique De Oliveira Guimaraes <samuel.guimaraes(a)eldorado.org.br<mailto:samuel.guimaraes@eldorado.org.br>>; socorro(a)linux.vnet.ibm.com<mailto:socorro@linux.vnet.ibm.com>
Subject: Re: [Kimchi-devel] Wok index page mock up
Opps sorry Aline, forgot to answer your questions..
1. It was inspired from Android's hamburger menu design. It's also your in 'Inbox for Gmail's desktop page. But of course, this is not a final design. We can improve it further, if required.
2. IMHO, user doesn't need to login just to see the index page. There is nothing in there which needs to be protected behind a login page.
3. It could be right next to hamburger menu or on the RHS.
----- Original message -----
From: Aline Manera <alinefm(a)linux.vnet.ibm.com<mailto:alinefm@linux.vnet.ibm.com>>
To: Harshal Patil/India/IBM@IBMIN, kimchi-devel(a)ovirt.org<mailto:kimchi-devel@ovirt.org>, Samuel Henrique De Oliveira Guimaraes <samuel.guimaraes(a)eldorado.org.br<mailto:samuel.guimaraes@eldorado.org.br>>, Socorro Stoppler <socorro(a)linux.vnet.ibm.com<mailto:socorro@linux.vnet.ibm.com>>
Cc:
Subject: Re: [Kimchi-devel] Wok index page mock up
Date: Tue, Aug 11, 2015 8:47 PM
Hi Harshal,
Thanks for sending this mockup!
In general it looks good for me. Only some comments/doubts:
1) What is 3 lines button on the left corner? Does this represent a menu or something?
2) Will the welcome page be shown as the first page or user will need to login to get the welcome page?
3) Will wok have a logo? Where in page will we display it?
Maybe Socorro and Samuel can help us more on the page layout as they are UI experts =)
Regards,
Aline Manera
On 10/08/2015 07:43, Harshal Patil wrote:
Hi,
Working on issue #718 ,https://github.com/kimchi-project/kimchi/issues/718
Just some initial mock up about page layouts. Please let me know what do you think about it. These mock ups are only for showing the layout, so please ignore things like color scheme, font types etc.
Here is the pdf, https://drive.google.com/file/d/0B3vI9LCU26KEN19kcjZtbTVyOGM/view?usp=shari…
I am using Pencil to create that, so if you want to edit something here is pencil file,
https://drive.google.com/file/d/0B3vI9LCU26KETm52bU00V1hDZ00/view?usp=shari…
Thanks
_______________________________________________
Kimchi-devel mailing list
Kimchi-devel(a)ovirt.org<mailto:Kimchi-devel@ovirt.org>
http://lists.ovirt.org/mailman/listinfo/kimchi-devel
2
1
Hi team,
In the new UI design spec the navbar displays the plugins / tabs in the navbar even when the user is logged out. I was studying wok JS files and I've tried to load the tabs in the DOM tree in the login page with no success. Then It occurred to me: Is it right to show the tabs and hostname when the user is not logged in? I question this because in the tabs-ext.xml we can see the access roles and some tabs clearly are not supposed to be seen by non-admin users.
What are your thoughts?
Thanks,
Samuel
3
3
Re: [Kimchi-devel] Fw: [Ginger-dev-list] [RFC] Inheriting Kimchi's Host tab
by Archana Singh 12 Aug '15
by Archana Singh 12 Aug '15
12 Aug '15
Please find my comment inline.
>
> From: Aline Manera <alinefm(a)linux.vnet.ibm.com>
> To: ginger-dev-list(a)nongnu.org
> Date: 08/11/2015 08:12 PM
> Subject: [Ginger-dev-list] [RFC] Inheriting Kimchi's Host tab
> Sent by: ginger-dev-list-bounces+archanasingh=in.ibm.com(a)nongnu.org
> ------------------------------------------------------------------------
>
>
>
> Hi all,
>
> As we have agreed on Kimchi mailing list, the Ginger community will be
> responsible for the Host tab (today part of Kimchi) in a way of 2
> different plugins: ginger-basic and ginger.
> ginger-basic will provide host basic information, host statistics and
> debug reports support. And among the current Ginger features, it will
> also provide software updates and repositories management.
>
> For Kimchi perspective, we need to transform part of the Host tab into
> the ginger-basic plugin and add it as a Kimchi dependency.
> To move the discussion as soon as possible to Ginger community, my
> suggestion is to move the entire Host tab into ginger-basic plugin in
> the first moment.
> Once we do that, we can move software update and repositories management
> APIs to Ginger.
>
> Here is my proposal:
>
> 1) Create ginger-basic plugin which will launch the Host tab as it is
> today.
> It will be done on Kimchi community.
>
> 2) Move software update and repositories management *APIs* from
> ginger-basic to ginger.
> Only the API will be updated. The UI will keep the same.
>
> 3) Add ginger-basic as a Ginger dependency.
> In this step, Ginger standalone will launch 2 tabs: Host and
> Administration.
>
> All that can be done by the end of September.
>
> Once we have the new UI widgets done, Samuel will start working on
> merging those 2 tabs into one as we just need the update how UI is built.
> The idea is to release Ginger as one single Host tab in the December
@Samuel: As I was looking into current UI implementation to understand
how to merge two plugins into one tab. But now it does not make sense to
spend time on understanding this in exiting UI, as the plan is to do
this on new UI.
As I am not expert on bootstrap, is bootstrap already has some feature
to merge two plugins into one tab?
If not, then do you think it is better to consider this point while
implementing new UI, so that merging(two plugins into one tab) can be
easier wherever required.
Or do you think still it make sense to spend some time to understand how
can this be done in exiting UI?
I hope I make sense to you. Please let me know your input.
Or spending some time in current UI implementation on how to merge will
be required?
> release - in addition to wok and Kimchi as a plugin.
>
> Let me know what you think about it.
>
> Regards,
> Aline Manera
>
>
3
2
'undefined' value displayed in url and page was getting refreshed after logged into wok page
Signed-off-by: Atreyee <atreyee(a)linux.vnet.ibm.com>
---
ui/css/theme-default/message.css | 10 ++++++++++
ui/js/src/wok.main.js | 15 +++++++++++++--
2 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/ui/css/theme-default/message.css b/ui/css/theme-default/message.css
index 28c392b..7cce15b 100644
--- a/ui/css/theme-default/message.css
+++ b/ui/css/theme-default/message.css
@@ -133,3 +133,13 @@
border: 2px solid #444;
color: #444;
}
+
+.noPluginMessage{
+ font-size: 18px;
+ height: 48px;
+ line-height: 48px;
+ text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff;
+ padding-left: 10px;
+ padding-top:10px;
+
+}
diff --git a/ui/js/src/wok.main.js b/ui/js/src/wok.main.js
index f4c9940..0d9baec 100644
--- a/ui/js/src/wok.main.js
+++ b/ui/js/src/wok.main.js
@@ -102,10 +102,15 @@ wok.main = function() {
var defaultTab = tabs[0]
var defaultTabPath = defaultTab && defaultTab['path']
+
+ //redirect to empty page when no plugin installed
+ if(tabs.length===0){
+ DEFAULT_HASH = 'wok-empty';
+ }else{
// Remove file extension from 'defaultTabPath'
DEFAULT_HASH = defaultTabPath &&
defaultTabPath.substring(0, defaultTabPath.lastIndexOf('.'))
-
+ }
$('#nav-menu').append(genTabs(tabs));
callback && callback();
@@ -136,11 +141,16 @@ wok.main = function() {
* and clear location.hash to jump to home page.
*/
var tab = $('#nav-menu a[href="' + url + '"]');
- if (tab.length === 0) {
+ if (tab.length === 0 && url!='wok-empty.html') {
location.hash = '';
return;
}
+ //Remove the tab arrow indicator for no plugin
+ if(url=='wok-empty.html'){
+ $('.menu-arrow').hide();
+ $('#main').html('No plugins installed currently.You can download the available plugins <a href="https://github.com/kimchi-project/kimchi">Kimchi</a> and <a href="https://github.com/kimchi-project/ginger">Ginger</a> from Github').addClass('noPluginMessage');
+ }else{
// Animate arrow indicator.
var left = $(tab).parent().position().left;
var width = $(tab).parent().width();
@@ -163,6 +173,7 @@ wok.main = function() {
}
// Load page content.
loadPage(url);
+ }
};
/**
--
2.1.0
3
3
12 Aug '15
Hi Harshal,
I liked the mockup. It looks good and I think that for Wok service we should have a clean interface since we are going to provide API documentation, it should feature different elements than Kimchi and Ginger but maintain the same design language. I think this is a good direction because if you look to several products Wikis and docs, they are adding some of the same elements that we can see in this mockup like the Hamburger Icon and an off-canvas menu. For the REST API documentation I was thinking in something similar to the attached image and this link: http://petstore.swagger.io/
[cid:image001.png@01D0D460.E60DAFF0]
However, that part would need user authentication for security reasons.
Regarding the logo, I believe it should be large and centered in the index page. Kimchi logo is good enough, maybe a flat version of it:
[cid:image002.png@01D0D464.2E266270]
From: Harshal Patil [mailto:harshal.patil@in.ibm.com]
Sent: terça-feira, 11 de agosto de 2015 16:49
To: alinefm(a)linux.vnet.ibm.com
Cc: kimchi-devel(a)ovirt.org; Samuel Henrique De Oliveira Guimaraes <samuel.guimaraes(a)eldorado.org.br>; socorro(a)linux.vnet.ibm.com
Subject: Re: [Kimchi-devel] Wok index page mock up
Opps sorry Aline, forgot to answer your questions..
1. It was inspired from Android's hamburger menu design. It's also your in 'Inbox for Gmail's desktop page. But of course, this is not a final design. We can improve it further, if required.
2. IMHO, user doesn't need to login just to see the index page. There is nothing in there which needs to be protected behind a login page.
3. It could be right next to hamburger menu or on the RHS.
----- Original message -----
From: Aline Manera <alinefm(a)linux.vnet.ibm.com<mailto:alinefm@linux.vnet.ibm.com>>
To: Harshal Patil/India/IBM@IBMIN, kimchi-devel(a)ovirt.org<mailto:kimchi-devel@ovirt.org>, Samuel Henrique De Oliveira Guimaraes <samuel.guimaraes(a)eldorado.org.br<mailto:samuel.guimaraes@eldorado.org.br>>, Socorro Stoppler <socorro(a)linux.vnet.ibm.com<mailto:socorro@linux.vnet.ibm.com>>
Cc:
Subject: Re: [Kimchi-devel] Wok index page mock up
Date: Tue, Aug 11, 2015 8:47 PM
Hi Harshal,
Thanks for sending this mockup!
In general it looks good for me. Only some comments/doubts:
1) What is 3 lines button on the left corner? Does this represent a menu or something?
2) Will the welcome page be shown as the first page or user will need to login to get the welcome page?
3) Will wok have a logo? Where in page will we display it?
Maybe Socorro and Samuel can help us more on the page layout as they are UI experts =)
Regards,
Aline Manera
On 10/08/2015 07:43, Harshal Patil wrote:
Hi,
Working on issue #718 ,https://github.com/kimchi-project/kimchi/issues/718
Just some initial mock up about page layouts. Please let me know what do you think about it. These mock ups are only for showing the layout, so please ignore things like color scheme, font types etc.
Here is the pdf, https://drive.google.com/file/d/0B3vI9LCU26KEN19kcjZtbTVyOGM/view?usp=shari…
I am using Pencil to create that, so if you want to edit something here is pencil file,
https://drive.google.com/file/d/0B3vI9LCU26KETm52bU00V1hDZ00/view?usp=shari…
Thanks
_______________________________________________
Kimchi-devel mailing list
Kimchi-devel(a)ovirt.org<mailto:Kimchi-devel@ovirt.org>
http://lists.ovirt.org/mailman/listinfo/kimchi-devel
2
1
2
4
We have developed functional verification regression test suite for
Kimchi/Ginger in order to verify the REST API's calls currently available
on 1.5.
Our proposal is to create the following folder structure in the main stream
of Kimchi/Ginger for FVT. From this week we will be submitting the patches.
tests-fvt
|
-----tests-restapi
|
-----tests-ui
Please provide feedback if you have any !!!
Thanks in advance.
Chandra
3
5
[PATCH] Fix SLES 11 reg exp to recognize SLE-11-SP4-SAP-DVD-ppc64-GM-DVD1.iso
by Ramon Medeiros 11 Aug '15
by Ramon Medeiros 11 Aug '15
11 Aug '15
Signed-off-by: Ramon Medeiros <ramonn(a)linux.vnet.ibm.com>
---
src/kimchi/isoinfo.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/kimchi/isoinfo.py b/src/kimchi/isoinfo.py
index 6fb0f38..58dddcd 100644
--- a/src/kimchi/isoinfo.py
+++ b/src/kimchi/isoinfo.py
@@ -97,7 +97,7 @@ iso_dir = [
'|HRM_CENNA_X64FREV|HRM_CENNA_X64CHKV|HRM_CENA_X64FREV' +
'|HRM_CENA_X64CHKV|HRM_CPRA_X64FREV|HRM_CPRNA_X64FREV')),
('sles', '10', 'SLES10|SUSE-Linux-Enterprise-Server.001'),
- ('sles', '11', 'SUSE_SLES-11-0-0'),
+ ('sles', '11', 'SUSE_SLES-11-0-0|SLE-11'),
('sles', '12', 'SLE-12'),
('sles', lambda m: "11sp%s" % m.group(1), 'SLES-11-SP(\d+)'),
('opensuse', lambda m: m.group(1), 'openSUSE[ -](\d+\.\d+)'),
--
2.1.0
3
2
Re: [Kimchi-devel] Fwd: Proposal for moving functionality from Kimchi to Ginger
by Daniel Henrique Barboza 11 Aug '15
by Daniel Henrique Barboza 11 Aug '15
11 Aug '15
On 08/07/2015 11:12 AM, Daniel Henrique Barboza wrote:
>
>
> On 08/07/2015 05:53 AM, Walter Niklaus wrote:
>> Aline,
>>
>> the goal of my mail wasn't a scrum summary only, I was rather trying
>> to get us into a design thinking mode: looking at the problem from a
>> user point of view, what would a user expect to exploit in the
>> various use cases. I'll keep focusing on this aspect in our future
>> discussions :-)
>>
>> I like your proposal from an overall point because for making
>> progress now it is the best solution.
>> When it comes to plugins-priority and implentation I have a simpler
>> proposal:
>> - Instead of this smart logic you are proposing implement the
>> following:
>> - whenever common-host plugin is available it will get
>> installed and create a Host tab with the functionality 2,3 and 6
>> - when Ginger plugin is getting installed it will simply
>> extend the Host tab with all the other functionalties
>
> Why get rid of the 'Administration' tab from Ginger? We can use the
> 'Host' tab to provide basic
> information + debug reports and the Administration tab to manage the
> host itself. We can even
> rename the 'Host' tab to 'Host status' to clarify even further.
>
> Get rid of the Ginger tab can, and will, confuse the existing users.
> They will install the plug-in,
> they will not see the Administration tab and will think that Ginger
> installation failed.
>
> Besides that, the current engine does not support a plug-in that
> extends an existing tab from
> another plug-in. I have no idea of the amount of work this can take.
>
>>
>>
>>
>> On 06.08.2015 17:11, Aline Manera wrote:
>>>
>>> Thanks, Walter, to send the scrum meeting summary here!
>>>
>>> Here are my thoughts on all that.
>>>
>>> First, let me clarify the proposal of each piece of cake! =)
>>>
>>> A) Wok is a *generic web server framework based on plugins*.
>>> By generic, I mean it should only expose APIs and
>>> functionalities required for a web server. Login, logout, plugins
>>> support, i18n support, message error handling and much more.
>>>
>>> B) Kimchi is a wok plugin for virtual machine management.
>>> And it is independent system platform: x86, Power or Z.
>>>
>>> C) Ginger is a wok plugin for host management.
>>> And it is independent system platform: x86, Power or Z.
>>>
>>> By now, it is all we have. So I'd like to concentrate our effort on it.
>>>
>>> Now thinking about which features from Kimchi Host tab can be moved
>>> to Ginger.
>>> Let do it item by item. The Host Tab is composed by:
>>>
>>> 1) Restart, Shutdown, Connect operations
>>> I don't see those functionalities close related to virtual
>>> machines management. So for me, it is fine and good to move them to
>>> Ginger.
>>>
>>> 2) Basic Information
>>> The kind of information may be very useful to user while manage
>>> virtual machine. Specially by the amount of memory and number of CPUs.
>>> With that information the user can properly balance his/her
>>> virtual machines configuration to have better system performance.
>>>
>>> 3) Host statistics
>>> The same I described on item 2.
>>>
>>> 4) Software Update
>>> I don't see this functionality close related to virtual machines
>>> management. So for me, it is fine and good to move them to Ginger.
>>>
>>> 5) Repository management
>>> I don't see this functionality close related to virtual machines
>>> management. So for me, it is fine and good to move them to Ginger.
>>>
>>> 6) Debug reports
>>> This functionality may be interesting for virtual machine
>>> management when some of them represents a problem or bad performance.
>>> So user can easily grab the system logs to check what is going
>>> wrong.
>>>
>>> So if no one opposes, we can start moving 1, 4 and 5 to Ginger.
>>> As we have 2 different open source communities we need to coordinate
>>> that work. Initially the patch for Kimchi will be for removing those
>>> features and to Ginger to add them.
>>> The Kimchi patch must be simpler but it will require more work on
>>> Ginger side.
>>>
>>> About 2, 3 and 6: I really understand how those information are
>>> important for virtual machine management and also for host
>>> management, i.e, Kimchi and Ginger.
>>> (And I hope you all do the same :-) )
>>>
>>> So in my mind, we are discussing a solution to expose those
>>> information on both, Kimchi and Ginger, without making it duplicated
>>> somehow to user.
>>>
>>> As per discussion (see item A), wok is a generic framework and
>>> should not handle those kind of APIs. (Agree?)
>>> And also it should not have any default plugin (otherwise, we could
>>> continue having Kimchi as default without the need to have the wok
>>> framework)
>>> While loading wok without any plugin, it should display a simple
>>> page "Welcome to wok" or something like that but without any
>>> functionality.
>>>
>>> So my proposal is to create a new and simple plugin (let's call it
>>> as common-host plugin) that expose those APIs without any UI.
>>>
>>> Kimchi and Ginger will have a dependency on this common-host plugin
>>> and will provide the proper UI for it.
>>>
>>> To do not duplicate information while loading Kimchi and Ginger
>>> together, I propose to add a smart logic for it:
>>>
>>> - Kimchi will always load the Host tab with the common-host plugin
>>> (as it is today).
>>> - Ginger will load the common-host plugin *only and if only* it is
>>> running standalone.
>>>
>>> What do you think about it?
>>>
>>> Regards,
>>> Aline Manera
>>>
>>> On 06/08/2015 11:15, Walter Niklaus wrote:
>>>> Picking up the discussion from the Scrum meeting about where (which
>>>> plugin) certain functionalities should be.
>>>>
>>>> To make sure we don't miss this aspect, I'm re-iterating on the
>>>> high level use cases.
>>>> Currently I see the following major usecases now and in the near
>>>> future (next year):
>>>> 1. A user wants to perform base Linux management only.
>>>> - here he needs all the generic Host-Management
>>>> functionality + the platform specific stuff like:
>>>> Power-FW code update, Energy Management on Power or
>>>> IO-Device Management on System z
>>>> 2. A user wants to manage KVM Virtual Machines.
>>>> - his primary scope are VMs. How much of the Host and
>>>> Platform specific Management functionality is required here ?
>>>> 3. A user wants to manage Containers.
>>>> - his primary scope are Container. How much of the Host and
>>>> Platform specific Management functionality is required here ?
>>>> 4. A user wants to manage Containers and KVM Virtual Machines .
>>>> - his primary scope are Container and VMs. How much of the
>>>> Host and Platform specific Management functionality is required here ?
>>>>
>>>> Our current discussion now is for the usecases 2,3 and 4: How much
>>>> of the Host and Platform specific Management functionality is
>>>> required and what's the best way to organize and package it.
>>>> One possibility could be to have all Host-Management functionality
>>>> looked at being part of the default/basic functionset and delivery
>>>> and have the Platform specifc functionality as optional plugins.
>>>> The disadvantage of this approach would be that all the following
>>>> functionality:
>>>> Basic Information, System Statistics, Network (Host NICs,DNS ...),
>>>> Storage/SAN (Host Storage), User Management, Configuration Backup,
>>>> Software Updates, Repositories, Debug Reports would be present in
>>>> the Container and VM usecases by default.
>>>> Do we know what a user really needs and wants in the usecases 2,3
>>>> and 4 ? I guess this depends to a large degree of the toolset
>>>> she/he is using beside Kimchi and Ginger. If there is no other
>>>> tooling available she/he may be happy about the shipped
>>>> functionset, but for sure there are other situation where she/he
>>>> may not be interested in some of the functionality.
>>>>
>>>> What could be the reasons a user would want to pick selectively ?
>>>> a. functionality not required or maybe even conflicting with
>>>> some other tooling: for example Software Updates
>>>> are managed from some central instance
>>>> b. installing a reduced functionset could reduce the external
>>>> package dependencies and could reduce the amount of updates
>>>> c. simplification on the UI by eliminating unrequired stuff
>>>>
>>>> Ideally the user could choose on an individual functionality base
>>>> and configure the tool based on his needs.
>>>> I guess satisfying the reasons a. and c. from above could be
>>>> implemented via UI customisation even on an individual
>>>> Kimchi/Ginger user base.
>>>> Reason b. can be probably achieved only by segregating the set of
>>>> fuctionality in separate plugins.
>>>>
>>>>
>>>>
>>>> On 04.08.2015 17:26, Walter Niklaus wrote:
>>>>> ... Daniel sorry for the duplicate send, I missed to reply to all
>>>>> so the mail didn't go to the mailing list.
>>>>>
>>>>> On 04.08.2015 14:39, Daniel Henrique Barboza wrote:
>>>>>>
>>>>>>
>>>>>> On 08/04/2015 04:56 AM, Walter Niklaus wrote:
>>>>>>> Hi Daniel,
>>>>>>>
>>>>>>> sorry for missing the thread where this topic was discussed.
>>>>>>>
>>>>>>> I can fully understand the point about Basic Information and
>>>>>>> System Statistics being relevant for Virtualization management
>>>>>>> as well and I like the idea of potentially making it part of the
>>>>>>> base framework because they would be very usefull for other
>>>>>>> plugins, like Container-Management as well.
>>>>>>> The interesting question is then if some of the other functions
>>>>>>> wouldn't make sense to be part of the basic framework as well.
>>>>>>> Debug reports would be a classical candidate from my point of
>>>>>>> view, but wouldn't some of the other functions be usefull in the
>>>>>>> base as well ?
>>>>>>
>>>>>> If we're really going in that approach (putting basic features in
>>>>>> WoK), I agree. We would have to
>>>>>> discuss each existing feature and evaluate if it belongs to
>>>>>> kimchi, ginger or wok.
>>>>>
>>>>> I guess we really need to have a discussion on the individual
>>>>> features but I would like to start this one from a user
>>>>> requirements point of view.
>>>>> Currently I see the following major usecases now and in the near
>>>>> feature:
>>>>> 1. A user wants to perform base Linux management only.
>>>>> 2. A user wants to manage KVM Virtual Machines.
>>>>> 3. A user wants to manage Containers.
>>>>> 4. A user wants to manage Containers and KVM Virtual Machines .
>>>>>
>>>>> For the usecases 2, 3 and 4 the user needs usecase 1 as well in
>>>>> order to prepare and manage the Host machine.
>>>>>
>>>>> I'm not proposing to make the Linux Host Management part of the
>>>>> base framework because we just separated out Kimchi of it, but I
>>>>> think it makes a lot of sense to deliver the Host Management
>>>>> plugin by default with the base framework.
>>>>>
>>>>>>
>>>>>>>
>>>>>>> Looking at the problem form a different angle: wouldn't it make
>>>>>>> sense to package and deliver the base framework with the Ginger
>>>>>>> plugin by default because the Host-functionality Ginger is
>>>>>>> offering would be usefull for the other plugins like
>>>>>>> Virtualization and Containers ?
>>>>>>>
>>>>>>> What I missed in my previous mail is the aspect about platform
>>>>>>> specific functionality. This functionality, like PPC firmware
>>>>>>> update or IO-device management for Linux on z should be made
>>>>>>> available as individual plugins.
>>>>>>
>>>>>> At this moment Ginger can handle multi-arch features fairly well.
>>>>>> For example, Firmware
>>>>>> Update does not appear when running the plug-in in an Intel
>>>>>> computer. The feature you mentioned,
>>>>>> IO-device management for Linux on Z, would be available only when
>>>>>> running Ginger in a Linux
>>>>>> for Z host.
>>>>>>
>>>>>> There's absolutely nothing holding you from making a brand new
>>>>>> plug-in for the Z features instead
>>>>>> of adding them to Ginger, but it is important to know that Ginger
>>>>>> is designed for these scenarios.
>>>>>> You can even create a new UI tab in Ginger, something like 'Z
>>>>>> management' which would contain all Z related features. This tab
>>>>>> would only appear in a Linux on Z host. From the UI perspective
>>>>>> it looks
>>>>>> like a brand new plug-in working together with Ginger common
>>>>>> features in the 'Administration' tab.
>>>>>>
>>>>>>>
>>>>>>> Please let me know what you think about this option.
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Walter.
>>>>>>>
>>>>>>>
>>>>>>> On 03.08.2015 18:51, Daniel Henrique Barboza wrote:
>>>>>>>> Hi Walter,
>>>>>>>>
>>>>>>>> We've had this discussion with the community a few months ago
>>>>>>>> in the thread
>>>>>>>>
>>>>>>>> "[RFC] Moving some features of Host tab to Ginger"
>>>>>>>>
>>>>>>>> And we agreed to start it by moving only Software Update,
>>>>>>>> Repositories and
>>>>>>>> Debug Reports from Kimchi to Ginger.
>>>>>>>>
>>>>>>>> The Basic Information and System Statistics can't be taken away
>>>>>>>> from Kimchi because there
>>>>>>>> are relevant information for the creation of VMs there, such as
>>>>>>>> Memory Available. But I agree
>>>>>>>> that these information fits nicely in Ginger too.
>>>>>>>>
>>>>>>>> One alternative (just came in my head now) is to move these
>>>>>>>> "neutral" functions
>>>>>>>> to a "Basic System Info" in WoK. That way both Kimchi and
>>>>>>>> Ginger users can access
>>>>>>>> the information.
>>>>>>>>
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>
>>>>>>>>
>>>>>>>> Daniel
>>>>>>>>
>>>>>>>> On 08/03/2015 12:15 PM, Walter Niklaus wrote:
>>>>>>>>>
>>>>>>>>> After separating out Kimchi as an indvidual plugin from the base
>>>>>>>>> framework it would be great to have a clean separation between
>>>>>>>>> Host- and
>>>>>>>>> Virtualization Management functions. I'm planning to work on
>>>>>>>>> this topic
>>>>>>>>> in the next few weeks and have prepared a proposal of the
>>>>>>>>> functionsplit.
>>>>>>>>> Plugin functionality:
>>>>>>>>> - Ginger:
>>>>>>>>> - Basic Information
>>>>>>>>> - System Statistics
>>>>>>>>> - Network (Host NICs)
>>>>>>>>> - Storage/SAN (Host Storage)
>>>>>>>>> - User Management
>>>>>>>>> - Configuration Backup
>>>>>>>>> - Software Updates
>>>>>>>>> - Repositories
>>>>>>>>> - Debug Reports
>>>>>>>>> - PPC related functions: Firmware Update & Power
>>>>>>>>> Management
>>>>>>>>> - Kimchi:
>>>>>>>>> - Templates
>>>>>>>>> - Guests
>>>>>>>>> - Networks (virtual)
>>>>>>>>> - Storage (Pools for VMs)
>>>>>>>>>
>>>>>>>>> Since there are plans to restructure the UI for one of the next
>>>>>>>>> releases, I'm proposing to do only some minimal investments in
>>>>>>>>> reflecting this new finctionsplit. Therefore I'm proposing to
>>>>>>>>> make the
>>>>>>>>> Host tab as the one and only Tab for Ginger and move
>>>>>>>>> everything from the
>>>>>>>>> Administration Tab into the Host Tab. This would be just an
>>>>>>>>> intermediate solution till we implement the new UI design.
>>>>>>>>> Please see
>>>>>>>>> the attached PDF.
>>>>>>>>> Thanks in advance for your feedback.
>>>>>>>>>
>>>>>>>>> Walter.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Kimchi-devel mailing list
>>>>>>>>> Kimchi-devel(a)ovirt.org
>>>>>>>>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Kimchi-devel mailing list
>>>>>>>> Kimchi-devel(a)ovirt.org
>>>>>>>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Kimchi-devel mailing list
>>>> Kimchi-devel(a)ovirt.org
>>>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>>
>>
>>
>>
>> _______________________________________________
>> Kimchi-devel mailing list
>> Kimchi-devel(a)ovirt.org
>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>
4
10
[PATCH 1/2] Adding new-ui distributable prototypes and widgets
by sguimaraes943@gmail.com 10 Aug '15
by sguimaraes943@gmail.com 10 Aug '15
10 Aug '15
From: samhenri <samuel.guimaraes(a)eldorado.org.br>
Signed-off-by: samhenri <samuel.guimaraes(a)eldorado.org.br>
---
ui/new-ui-samples/android-chrome-144x144.png | Bin 0 -> 9965 bytes
ui/new-ui-samples/android-chrome-192x192.png | Bin 0 -> 15190 bytes
ui/new-ui-samples/android-chrome-36x36.png | Bin 0 -> 1663 bytes
ui/new-ui-samples/android-chrome-48x48.png | Bin 0 -> 2322 bytes
ui/new-ui-samples/android-chrome-72x72.png | Bin 0 -> 3915 bytes
ui/new-ui-samples/android-chrome-96x96.png | Bin 0 -> 5684 bytes
ui/new-ui-samples/apple-touch-icon-114x114.png | Bin 0 -> 9159 bytes
ui/new-ui-samples/apple-touch-icon-120x120.png | Bin 0 -> 9860 bytes
ui/new-ui-samples/apple-touch-icon-144x144.png | Bin 0 -> 12771 bytes
ui/new-ui-samples/apple-touch-icon-152x152.png | Bin 0 -> 13861 bytes
ui/new-ui-samples/apple-touch-icon-180x180.png | Bin 0 -> 15806 bytes
ui/new-ui-samples/apple-touch-icon-57x57.png | Bin 0 -> 3613 bytes
ui/new-ui-samples/apple-touch-icon-60x60.png | Bin 0 -> 3839 bytes
ui/new-ui-samples/apple-touch-icon-72x72.png | Bin 0 -> 4862 bytes
ui/new-ui-samples/apple-touch-icon-76x76.png | Bin 0 -> 5193 bytes
ui/new-ui-samples/apple-touch-icon-precomposed.png | Bin 0 -> 16413 bytes
ui/new-ui-samples/apple-touch-icon.png | Bin 0 -> 15806 bytes
ui/new-ui-samples/browserconfig.xml | 12 +
ui/new-ui-samples/css/button-flat.css | 271 +
ui/new-ui-samples/css/checkbox-flat.css | 50 +
ui/new-ui-samples/css/fontello.css | 1137 ++
ui/new-ui-samples/css/main.css | 9157 ++++++++++
ui/new-ui-samples/css/menu-flat.css | 179 +
ui/new-ui-samples/css/radio-flat.css | 60 +
ui/new-ui-samples/css/selectmenu-flat.css | 177 +
ui/new-ui-samples/css/textbox-flat.css | 44 +
ui/new-ui-samples/css/vendor.css | 1801 ++
ui/new-ui-samples/favicon-16x16.png | Bin 0 -> 1301 bytes
ui/new-ui-samples/favicon-194x194.png | Bin 0 -> 21106 bytes
ui/new-ui-samples/favicon-32x32.png | Bin 0 -> 2165 bytes
ui/new-ui-samples/favicon-96x96.png | Bin 0 -> 8147 bytes
ui/new-ui-samples/favicon.ico | Bin 0 -> 15086 bytes
ui/new-ui-samples/fonts/fontawesome-webfont.eot | Bin 0 -> 60767 bytes
ui/new-ui-samples/fonts/fontawesome-webfont.svg | 565 +
ui/new-ui-samples/fonts/fontawesome-webfont.ttf | Bin 0 -> 122092 bytes
ui/new-ui-samples/fonts/fontawesome-webfont.woff | Bin 0 -> 71508 bytes
ui/new-ui-samples/fonts/fontawesome-webfont.woff2 | Bin 0 -> 56780 bytes
ui/new-ui-samples/fonts/fontello.eot | Bin 0 -> 42700 bytes
ui/new-ui-samples/fonts/fontello.svg | 220 +
ui/new-ui-samples/fonts/fontello.ttf | Bin 0 -> 42532 bytes
ui/new-ui-samples/fonts/fontello.woff | Bin 0 -> 24196 bytes
.../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes
.../fonts/glyphicons-halflings-regular.svg | 288 +
.../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes
.../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes
.../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes
ui/new-ui-samples/images/high.png | Bin 0 -> 812 bytes
ui/new-ui-samples/images/icon-centos.png | Bin 0 -> 4734 bytes
ui/new-ui-samples/images/icon-debian.png | Bin 0 -> 4239 bytes
ui/new-ui-samples/images/icon-fedora.png | Bin 0 -> 4449 bytes
ui/new-ui-samples/images/icon-gentoo.png | Bin 0 -> 15307 bytes
ui/new-ui-samples/images/icon-opensuse.png | Bin 0 -> 3046 bytes
ui/new-ui-samples/images/icon-ubuntu.png | Bin 0 -> 4818 bytes
ui/new-ui-samples/images/icon-vm.png | Bin 0 -> 2976 bytes
ui/new-ui-samples/images/logo-white.png | Bin 0 -> 7438 bytes
ui/new-ui-samples/images/logo.ico | Bin 0 -> 1214 bytes
ui/new-ui-samples/images/logo.png | Bin 0 -> 17195 bytes
ui/new-ui-samples/images/logo.svg | 26 +
ui/new-ui-samples/images/low.png | Bin 0 -> 813 bytes
ui/new-ui-samples/images/med.png | Bin 0 -> 873 bytes
ui/new-ui-samples/index.html | 134 +
ui/new-ui-samples/js/button-flat.js | 419 +
ui/new-ui-samples/js/checkbox-flat.js | 86 +
ui/new-ui-samples/js/main.js | 1 +
ui/new-ui-samples/js/menu-flat.js | 98 +
ui/new-ui-samples/js/radio-flat.js | 86 +
ui/new-ui-samples/js/selectmenu-flat.js | 130 +
ui/new-ui-samples/js/textbox-flat.js | 39 +
ui/new-ui-samples/js/vendor.js | 5523 ++++++
ui/new-ui-samples/js/vendor/bootstrap.js | 2345 +++
ui/new-ui-samples/js/vendor/jquery-ui.js | 16617 +++++++++++++++++++
ui/new-ui-samples/js/vendor/jquery.js | 9210 ++++++++++
ui/new-ui-samples/js/vendor/modernizr.js | 1406 ++
ui/new-ui-samples/manifest.json | 41 +
ui/new-ui-samples/mstile-144x144.png | Bin 0 -> 4103 bytes
ui/new-ui-samples/mstile-150x150.png | Bin 0 -> 3891 bytes
ui/new-ui-samples/mstile-310x150.png | Bin 0 -> 4172 bytes
ui/new-ui-samples/mstile-310x310.png | Bin 0 -> 5531 bytes
ui/new-ui-samples/mstile-70x70.png | Bin 0 -> 2602 bytes
ui/new-ui-samples/robots.txt | 4 +
ui/new-ui-samples/widgets/action_button.html | 186 +
ui/new-ui-samples/widgets/dialog.html | 78 +
ui/new-ui-samples/widgets/dialog_bootstrap.html | 102 +
ui/new-ui-samples/widgets/gauge-flat.html | 53 +
ui/new-ui-samples/widgets/grid.html | 80 +
ui/new-ui-samples/widgets/line.html | 168 +
ui/new-ui-samples/widgets/list.html | 46 +
.../menu-button-radio-checkbox-text-select.html | 166 +
ui/new-ui-samples/widgets/message.html | 49 +
ui/new-ui-samples/widgets/messagebar-flat.html | 49 +
ui/new-ui-samples/widgets/tabs.html | 68 +
91 files changed, 51171 insertions(+)
create mode 100644 ui/new-ui-samples/android-chrome-144x144.png
create mode 100644 ui/new-ui-samples/android-chrome-192x192.png
create mode 100644 ui/new-ui-samples/android-chrome-36x36.png
create mode 100644 ui/new-ui-samples/android-chrome-48x48.png
create mode 100644 ui/new-ui-samples/android-chrome-72x72.png
create mode 100644 ui/new-ui-samples/android-chrome-96x96.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-114x114.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-120x120.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-144x144.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-152x152.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-180x180.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-57x57.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-60x60.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-72x72.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-76x76.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-precomposed.png
create mode 100644 ui/new-ui-samples/apple-touch-icon.png
create mode 100644 ui/new-ui-samples/browserconfig.xml
create mode 100755 ui/new-ui-samples/css/button-flat.css
create mode 100644 ui/new-ui-samples/css/checkbox-flat.css
create mode 100644 ui/new-ui-samples/css/fontello.css
create mode 100755 ui/new-ui-samples/css/main.css
create mode 100644 ui/new-ui-samples/css/menu-flat.css
create mode 100644 ui/new-ui-samples/css/radio-flat.css
create mode 100644 ui/new-ui-samples/css/selectmenu-flat.css
create mode 100644 ui/new-ui-samples/css/textbox-flat.css
create mode 100644 ui/new-ui-samples/css/vendor.css
create mode 100644 ui/new-ui-samples/favicon-16x16.png
create mode 100644 ui/new-ui-samples/favicon-194x194.png
create mode 100644 ui/new-ui-samples/favicon-32x32.png
create mode 100644 ui/new-ui-samples/favicon-96x96.png
create mode 100644 ui/new-ui-samples/favicon.ico
create mode 100644 ui/new-ui-samples/fonts/fontawesome-webfont.eot
create mode 100644 ui/new-ui-samples/fonts/fontawesome-webfont.svg
create mode 100644 ui/new-ui-samples/fonts/fontawesome-webfont.ttf
create mode 100644 ui/new-ui-samples/fonts/fontawesome-webfont.woff
create mode 100644 ui/new-ui-samples/fonts/fontawesome-webfont.woff2
create mode 100644 ui/new-ui-samples/fonts/fontello.eot
create mode 100644 ui/new-ui-samples/fonts/fontello.svg
create mode 100644 ui/new-ui-samples/fonts/fontello.ttf
create mode 100644 ui/new-ui-samples/fonts/fontello.woff
create mode 100644 ui/new-ui-samples/fonts/glyphicons-halflings-regular.eot
create mode 100644 ui/new-ui-samples/fonts/glyphicons-halflings-regular.svg
create mode 100644 ui/new-ui-samples/fonts/glyphicons-halflings-regular.ttf
create mode 100644 ui/new-ui-samples/fonts/glyphicons-halflings-regular.woff
create mode 100644 ui/new-ui-samples/fonts/glyphicons-halflings-regular.woff2
create mode 100644 ui/new-ui-samples/images/high.png
create mode 100644 ui/new-ui-samples/images/icon-centos.png
create mode 100644 ui/new-ui-samples/images/icon-debian.png
create mode 100644 ui/new-ui-samples/images/icon-fedora.png
create mode 100644 ui/new-ui-samples/images/icon-gentoo.png
create mode 100644 ui/new-ui-samples/images/icon-opensuse.png
create mode 100644 ui/new-ui-samples/images/icon-ubuntu.png
create mode 100644 ui/new-ui-samples/images/icon-vm.png
create mode 100644 ui/new-ui-samples/images/logo-white.png
create mode 100644 ui/new-ui-samples/images/logo.ico
create mode 100644 ui/new-ui-samples/images/logo.png
create mode 100644 ui/new-ui-samples/images/logo.svg
create mode 100644 ui/new-ui-samples/images/low.png
create mode 100644 ui/new-ui-samples/images/med.png
create mode 100755 ui/new-ui-samples/index.html
create mode 100755 ui/new-ui-samples/js/button-flat.js
create mode 100644 ui/new-ui-samples/js/checkbox-flat.js
create mode 100755 ui/new-ui-samples/js/main.js
create mode 100644 ui/new-ui-samples/js/menu-flat.js
create mode 100644 ui/new-ui-samples/js/radio-flat.js
create mode 100644 ui/new-ui-samples/js/selectmenu-flat.js
create mode 100644 ui/new-ui-samples/js/textbox-flat.js
create mode 100644 ui/new-ui-samples/js/vendor.js
create mode 100644 ui/new-ui-samples/js/vendor/bootstrap.js
create mode 100644 ui/new-ui-samples/js/vendor/jquery-ui.js
create mode 100644 ui/new-ui-samples/js/vendor/jquery.js
create mode 100644 ui/new-ui-samples/js/vendor/modernizr.js
create mode 100644 ui/new-ui-samples/manifest.json
create mode 100644 ui/new-ui-samples/mstile-144x144.png
create mode 100644 ui/new-ui-samples/mstile-150x150.png
create mode 100644 ui/new-ui-samples/mstile-310x150.png
create mode 100644 ui/new-ui-samples/mstile-310x310.png
create mode 100644 ui/new-ui-samples/mstile-70x70.png
create mode 100755 ui/new-ui-samples/robots.txt
create mode 100644 ui/new-ui-samples/widgets/action_button.html
create mode 100644 ui/new-ui-samples/widgets/dialog.html
create mode 100644 ui/new-ui-samples/widgets/dialog_bootstrap.html
create mode 100644 ui/new-ui-samples/widgets/gauge-flat.html
create mode 100644 ui/new-ui-samples/widgets/grid.html
create mode 100644 ui/new-ui-samples/widgets/line.html
create mode 100644 ui/new-ui-samples/widgets/list.html
create mode 100644 ui/new-ui-samples/widgets/menu-button-radio-checkbox-text-select.html
create mode 100644 ui/new-ui-samples/widgets/message.html
create mode 100644 ui/new-ui-samples/widgets/messagebar-flat.html
create mode 100644 ui/new-ui-samples/widgets/tabs.html
diff --git a/ui/new-ui-samples/android-chrome-144x144.png b/ui/new-ui-samples/android-chrome-144x144.png
new file mode 100644
index 0000000000000000000000000000000000000000..f6e28d098a966800c1d07015467b517d825a5fdf
GIT binary patch
literal 9965
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/android-chrome-192x192.png b/ui/new-ui-samples/android-chrome-192x192.png
new file mode 100644
index 0000000000000000000000000000000000000000..040a33d566357cc4dea75cebc527968271516faa
GIT binary patch
literal 15190
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/android-chrome-36x36.png b/ui/new-ui-samples/android-chrome-36x36.png
new file mode 100644
index 0000000000000000000000000000000000000000..c949db775e1c3019a74d4e9af6e3c675a2c7ef65
GIT binary patch
literal 1663
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
JPDHLkV1kV~37!A|
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/android-chrome-48x48.png b/ui/new-ui-samples/android-chrome-48x48.png
new file mode 100644
index 0000000000000000000000000000000000000000..10727b708d4f42e506c5612a572c1a48d92f3220
GIT binary patch
literal 2322
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/android-chrome-72x72.png b/ui/new-ui-samples/android-chrome-72x72.png
new file mode 100644
index 0000000000000000000000000000000000000000..881f75cc8454921d096e322b19fdadd11c67abdf
GIT binary patch
literal 3915
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
ZD=;!TFfa&WKOX=9002ovPDHLkV1ndqRn!0g
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/android-chrome-96x96.png b/ui/new-ui-samples/android-chrome-96x96.png
new file mode 100644
index 0000000000000000000000000000000000000000..97a151cedaf0e81f72938f640c5abfbe28ae06d0
GIT binary patch
literal 5684
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ΠtuuRo})vmv(eVF6p95R<6Bc2_agoDBjd=3b*{i;%Rn<3C8
zRE~sDJQ2bAaYYsokA=f)E97nr)p+^*kWVyB0<3aSb-%0Asw-7ytcRqcEP}GZKwU)}
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
KSe3ll$NvX^`M%=-
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-114x114.png b/ui/new-ui-samples/apple-touch-icon-114x114.png
new file mode 100644
index 0000000000000000000000000000000000000000..33b5bb3ffe03a0670a5cc03a6668c92d04fe2ce4
GIT binary patch
literal 9159
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
K)K3YM;Qs@*ScfA3
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-120x120.png b/ui/new-ui-samples/apple-touch-icon-120x120.png
new file mode 100644
index 0000000000000000000000000000000000000000..6d0ce2746897c9f75b493595f5356cfaab91f025
GIT binary patch
literal 9860
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
ZH1qub4Y{B6?EefPQeyI=)xw6r{{eZSqyzu}
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-144x144.png b/ui/new-ui-samples/apple-touch-icon-144x144.png
new file mode 100644
index 0000000000000000000000000000000000000000..71f3e19ec3dc29ba452fe395b11f2dcebefe9bfb
GIT binary patch
literal 12771
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
aSzCDj{{%VjOq^c?U@{Vl;?<%?LH`A(w0495
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-152x152.png b/ui/new-ui-samples/apple-touch-icon-152x152.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc4ffe25d1e6bb1da5c91cad03ff70c6e608d1bc
GIT binary patch
literal 13861
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-180x180.png b/ui/new-ui-samples/apple-touch-icon-180x180.png
new file mode 100644
index 0000000000000000000000000000000000000000..68f6b0810347c268ad67d9a28d028c4c5078d358
GIT binary patch
literal 15806
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
IM6N<$f@3((RsaA1
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-57x57.png b/ui/new-ui-samples/apple-touch-icon-57x57.png
new file mode 100644
index 0000000000000000000000000000000000000000..da48961409abf3541aac7f903b82d34ca53e1c41
GIT binary patch
literal 3613
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-60x60.png b/ui/new-ui-samples/apple-touch-icon-60x60.png
new file mode 100644
index 0000000000000000000000000000000000000000..511e9caba56c8e2d7b134daed93455df156accb0
GIT binary patch
literal 3839
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
B4j=#k
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-72x72.png b/ui/new-ui-samples/apple-touch-icon-72x72.png
new file mode 100644
index 0000000000000000000000000000000000000000..59a498c7b14870da4bf3642604e53411de735141
GIT binary patch
literal 4862
zcmZ{oWl$8}*T;A1kXS$@SC%EEmJ;bsX%Gp4rMpW)I+mpygoPyqr9n_YTvCy4rBgbV
zl2ZQsUOq3LbLX7TobQ?M%$d1w?%a4?ZB;T71`+@OK&Gyyq<>Gf|B{H{zP>nUQoRSB
zgS?hJ0ML*^dTWJ$-?P}L>1zQ1K^y=;cr*ZTeJ_P?0|0(70ALpm07&El0FOKi+VrIE
z2L#s7Rh8~}A6JU)VfP^RR5S4b07$9-OCaEF0o}bw=&P=!Ot?%)LM<qqHKbSy0DunE
zmE;Xy&m9y5CYrwt#Dp!2Z!NVBb>uZTNG-LlXfjFKHdq5AQhO=&f$YSRG^UgZhFL9C
zI1jT*qK(|-E3>$qqap#s<A&C5#cWQD3XTeD3f7+f-?UvF*4WogmOBCmzx*kv3tQM4
zc%5)SKcAu7IX;g1bJ)JMcpAKX)p-=^07|BOA$@j4vSPYI0*BU9RUXenGB7O1bjLm`
zvf*0*rHy(D@Wp$wcciank3lP}EN_oy3ar#4+%U5dX5qV<YC^aVFbpdm5dk>ZkmW0r
zY`jbGu?bvkV@`y6jA6xoW%sIcGBEoNC_}za3$j&dZHw=4LCNU#rIbg5D8hF>{wyR)
z9BNn-=5GarJuo!CNs?tbGJ2=gSj=G{%Lolb6WeG|QhX`wt`I`K{IedEa7wn?w}HY)
zW3)=%^F$os=If{q?`Bn5k_m<mva}6S_Mvirf;40QXf?u=eXZh^A2YL<>dTN>R<bxK
zLBsGndVn6#KSn-ZXEo`+`cd>)29p>har^TrCCc~0dm|EvO*H<#EKR&PD7h=$f{qlt
z+Emw|V_@HBRG>&imr^@IBY2fbL1%_Ap6dplY<Tt=1Y7WCNEtKF6j&e}kWvowy775%
zH%VRwrVjA6V((vp8N<kJcoCH8nb){bHji2Z<LRrlY4Viyqkp3R4r`*{U7&3;)M&kH
z8fXhB?++xCwXBs?vOase@j2qDo1BDwO}U_F43q+Ai`RgHTsUZwzod#puYuadrdo-J
zwhIu6=rTFhBdozjpJA}T9mA;O<v*o&*OuF*?J#v@11)P@FS#`#KhECRC-Z8Erv3H|
zGh50L$NZ<HZa)tUd3By!(^H8PqCo9*a#6a@Ktk^^JuW{R*TgiYM7#(&3p`zU%4cW)
z1lgq8i}o!$6aHe~{0xev!{tx`>Ec?PP|ek`<1i{h6xNB7_`1TwoCRv??!voOYrm0K
zqqHWCB(!_hdwOf4*eGVXRNf$rmFDH7;55TDWJm@b+P7>;48GiYcjJXavY!)XmO~z1
zZLZT<PZ`ssIM0KFNlVn8AV8D@Kx8;wudyeH!<+6=8u?3g_b+j4Kg!j1GNm2*P`eLR
zHH3^ygZ4r-zkehEuzMsCDifO^-zn4XmYJZ+UX<^h4<d|wnQFy@FD9?|>ZlGEV?nA<
zxE+xtT;UtxytJj@QZN>*aFZK&3^oKIbAMX9MYzs}c6Ubod|43WkSC0u8;v6h7Gj-^
zM+|f|i>k4syE0-V)Ss&Jpjg!3XY%h>{8`+CHK1x$Irqve|A}oZeS;Yb4Ie|GlyhmF
ztgLiipD0&DVuw!@vLRJ*Q;Lr5Z$Qy>P`D|*gkJuOo8Nffb=ankz<tgjmy%mfBjxGR
zC29qhXj*j%bzyqWEcG8b{P15z<{DOhvsQlPvYiRX8I~*-SQRWv&`O@7tv=FFLJkjA
zy{^hRw)({CeX_7%S8(;{*U{)ym%OGG-X~}dv~t3yU!s26;ii(D>P7C>Zi$Eiw|as|
z9qb(IAVai%toftyhLV(%3Se8^EA=Te38u5dFCv}iikdUM7LDWqSM0s{Gd45)J%$p+
zlu(>G4dQ9_+Y9rufZO!5<eP#1cb*J3iiyPFGyp;711;Xd@Y;Ro;hy+S_}dgMIV~UP
zuaSaEd)rQVo_v-dyENq^Ms$d}K#QbGi49)N`>C)HLZ><OX>1Dh*PV~K|6<_D|Edi!
zXM7k`6Y}+-i(1RV^MeGjjKjH<$p@v}3M3E+8)z3#AY#JIGRkBk*dJI$QP#eP5JL=@
zw>o3uqD3_I<|Y*HiagjXX0Rpaw!svshv2e3(jtzfkQ3k+8fy}d&s2PmszO&e-p&Wu
zq;pWQiugDhj43E#lXCPr{w00G3$+J|N?Y~X^g^t4$v$7$`jOPt)?a2kqU7U8)q{Z&
zvX}mA31UOLGRT*mB(2WeNq4v01Gw|YH*s>f{!X%eA1rmQ=ESUM{YP8!5F_8SQOL{q
z=wcn&h~;dn>OL2Zw_1?FnDVdyP#>9eQ)iV){1ems?i8JHirhnfO`X|-$F>e0QHk(^
z!F6hyBeSxp?JtL~kXuD|&r;jZH8^W0#Q(I}KlPb;MEk&BJ`sT*!|MVcjo%5HL_&oY
z1w8UZS>nmu1A&6+gwg5aew&Td44XOmLtVq9*jRE?<_uVQZXsgir9j@-?8>-Q^xI7m
zURq6v><9%5VssC~8?f!K)7+udalKEGA2Vms=->{W@>e{OvSv`zgOyY1n?`5OvY;L*
zI052=o=yLg<&<;xinx4X$DqT^W@_5+U-%ay;$^3Kqymer52LjFOU6;F_ztdt6N969
zCbuKC-NDe-!h&7Ps0(Xx|CicaSlM_d(4zlyVL1J32VKLdL$PQc=IDkybXJUIF`1iQ
z^B2S}PKmrM`YkDX>rL+AAg17wP`Z}j#a`i}B5?*;`3GC$#mD0>WZGoEZ5eS{Oe+c*
z4i}Yefl_-HKZ$yL<NYajeVKD?6A(p^c#aT7JZA}xKE6GTo?)2?kY2M`sA4LY&wCkq
zvHfhh(<PI6l-P-<f`*a6sEe@G*Xt^Fq_pJX_n{Yg$SEW{Y;9U8!Gghpcj_Wl$`{u#
zEW#WvXii{&1kFb{6YjR7PwX}Cg1f-79&hN-=pO+`(%+Zw-~#K^g6umS6}TX^%E|Wn
z0n0BApxIa6uixXu%=O&F=NKVwbUe^cIn``ZG8XQ*SGX4xqIMEf74W?lD}B*UAc-a9
zPS~th`@B`#@phA6=WWKDL`|-ScrU8;UXZ%d04;rfeaLwW<buhSIf7n7!1Ovj5*JSE
z$})HP4sGuEe4H(u0u2Nympowpng#Rb^mH`{p+lRsCS&(?k)r<BhK2hyyxAp5KhHx}
zlHI1S+;7wq%v<oAHW(BX$2p?eM!gkgMwms32s?EuWiHmjCo}{1e-Vs<{k~HVPAcP7
zHy|Xyb0+U*&Q2FEGT00;wH@STDPu&A!e}P~2(I@!*?M%b+4%l;^FAp9n`*2sl4_2D
zh7t%R;EYXkM$Zs+yz2F>i%UMAT-2O=K*pU4F%rZl93XG@Z>H74^)|Y{+*Vaeg`3On
z$5)j!tP1;hk|~F`hRUz-C;h+--xbqV<b_#qiB}$23pZa-M*nUA5__)hQl(9XFd<>3
zOx?7{kb3mwgh|1<&!H5hklNI=yPbQPUeP0BgkCQ(Tl?5dgbgmvr`K+r&uJNihKX#2
z<+$a0eD%5qc}k0c!_J6ixA)DEG~6F4NXLh6hcYtg=>%kl`x|^6axTqzbPK8L<5&(M
zj$Hw2C|RWkdiq_SzeL;$(?r>h)e2s^!)e188z2(3IyaoKT|;Ei6tZp0kj}DOPbK^s
zwm$GB>B{}jz;m^6+mjgo1Z|h(75NZGU4qc)ybOY5A-4S4^W)!Iq{Qh|-vtbDN@x{<
z@02Slcx3}U6YWogu(tgXd$vL0VL?xo8IdDgBDwS;VEjrtdYLvmcE*?4YKn7*_CWkZ
ziE3I;n$M@J#D^iizMc7@`m8O9JHG(Vr&g}0U&C`?zOoeq^bL&no3HW~-`+~ok#Wz7
zj3R@nz-yt0N>E;WXTP48?#n$HH}+z`-&Aa1rl_YTR-r`n`{_I^yQ-7n_9PY%ys2Oj
zt?{xLd)gn5q6z?%n1_r(mkaGV<E^mLO-5Tt&xaCum?_$pN2-aU^Q?4npV1AgpJw`W
zsActWDl`2k?`wAdKEKpw%^;%T4o4_d^W&Hb397Eo@F}xD>I=4?(L-t}r^Za*dXsgq
z#la<U8b<}1s6^MG)US(Ry6LAPP-S?)%hTWq7DB2bg$3vPzbZm@(PA=NG1S(A(u}&I
zj&B}ca@Zm{Xs2Z~myc|+!vJ1!?~-(K^$cSO{iiN}q^SIAfp*7`ux}xtef`AN`D|0h
zO}xilAA$lGuiZ7U3sjpvX%%(eHxZ+7=+B8@T;>bJnX?*E#{77dDkML;l5jE*IN^0D
zXaMF!c`wRlpL_|f_;k>TIYvPJllA4j^i(+foI{z+a&1rL@?7}$*Kao;N+6Rpy7Uku
z;QH)3?{CKr^kO>oRVRWY0-X-p=O}&cIl|4IzuW<CF4!^u(TH(59x}FKW#K7DeReyf
z_dt`sS6UKJ`z6NC#iV_Ee=~kJG_xo<B-XSeLm3;y&l6hMXd<$At?gvk!(asu9Qr(H
zvlLvug{gG7t8^$cMW<!M{2^IXXMU2jMobCq3BFmsrQ#1V%T`q#_1L{Z2L7p0t5!z&
zVg<}{aZ2H}jpZL)>5aXN=ED@|wfxg|+1R&WBf?Cf!%u3Ja?QoU=%v$(j5{j!-K2<~
zt|a#4AsC`WdU~t(ZfkHv()Tyu7erng^&H()88G$k%l~BHhNzXp`cok>c^YM7YAddA
z5{pTbSxE=d-G?d@7(-p8it$SHnv*d__LFDgS7~QoYHogQ9kKHp7x>T(%p&kU4%x|!
z6ab{nM=wVrI4Gv{-?RGC@P0sM5Ar078M0n4?7O>)klwnAY`$H}9m!BTNUo3!to9=9
zn&#?Pt`@y2yMWJ)CO4%VJCJR!n)YuMRbka86<t#!fw=Qcn7icWPag`gRm#d1pdwQN
z@Cc5j<X9Q2!VccsN<5YH16NdA-g_xUNV4Y$JaK?C3kQT!61sWjY82ityjk=|^z~1k
z7ApBJIaih+4jn-+4hJ%4lzwowv0BhGmOOI$fMa9v>n&dAORZlyc%7e`eHX0$RTRNl
z=X)Ytd4kg=oxTItB74N6K3-jmP#R`6o*ASTHj&=1`6J3Nh1-<N1i`0-lLq8LY&?`r
z=N6k1=64~<k+8~oD4|r3W0A#8aWjF*aDp?|_YjFfZ}mJPBG$&ep6iY_8T`TaZctRc
zbs)mB@#~YM4Yp^A3eSAufykv4BxE%$^tH@NpQEpC9n++SgSq_p&?>snmCRzzt3MT6
zEdz4m#F-sb#cV(Z`6|ZZhm6~vE73`5tJjUv8o`;Ei`@e$kqa_?NsVGxgiV)9<VScS
z>jXG#T<*89=8Uq3Nc&Eo56;vO%{fUNl@8UMdPVqqAYoUeSfnW$o=272eAPJ2WP4cB
z8~&5Y(L-0}RU@yo%JSUuE!n*DGHXIV7Y#2zfzAAB&-`8;jgIay{bldisOb}b_u_xm
zfEq43*19rvxf&K{%Hh=w)h@z;Q4=7KWAWlc3chYpx5wbj)F-IClhw#ozi+Tz^<3-V
z^|&&uJTh&dYv_1sPWu64CS@k?3lZ*yvSxZtA2V}l9=S&^S&hV3tFphnz39htK6$K<
z|6+jJAWp?(F14b#xxE5MhV<+b^X*4$K=y%P&eZI!MgN)lS|r>&IE-un=%h`ggxw|1
zn{W;c^27Z*9^(^<8^|Ud`2JB1x0%fS8!JFJq(`ycQCKk_?1taGNqkTe@39qm8d6^Y
zEP5R>*u+m7QVYNAX)O0-s>^c5t*dG29=c3bAo@HLtvQg+l&miKto4jm!@uj*m8Qgr
zxvus=I<e>C8fzNS^6T1>kv7gINWiJy_m}6-1_q1yXPz#Q7{ePtwfyu;mfi*H8_G83
zs>H<jjjkkP3-0vd&EySaBq0@-y^Woh!PQ)y&b6KZ0_H1P!FR5^Q0S}HvhTkS5t4Cc
z3&MqsO*`~1+%+OA=JT6oT_(jF(O{nHWU`!W-kcm}+=f-#$OELAN^7-EnD^uNEpAaK
z+~N!;FLGsGC^#FNccha(IqLr5^ecZ;P;Xim_%BVo7FB2WV<~&<bA^NDdrbm%x?)=&
z*mIknweR)Ms3Z~#PA13U>oTF@|0tS=h-UIy_<nFY+d9cj=6>uGYpmK*%ye7c3C{o&
zNgbFO6maXE?>pZXs8)1p4exjT3>ireDyF3MabGnhkXTaaDrgzlpENUgfV0fDj9g`J
zcSuFpxm`U8TKAKh?MR6lK6pL6%~xw>hZUmz<R?(wR@lzw#u4S<A6y{J1-T4)_G(CP
z-Wf%Zw*=k_VB}@yi*u_N5q4c%l<^|{jQksxQMP!I(rN<uI=?}tZJ*I<BNw^sMoomd
z1A=*8wc?Fg@ZSFgvHL0;``TLh+DX`W+uZ{o1QQhHgNgA8!VCq)B}Bv}L<M<ZLJ~08
iAvzoRe++IOwodke|G%N=FaOhf13+C_Td7t79{E2j8vq;t
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-76x76.png b/ui/new-ui-samples/apple-touch-icon-76x76.png
new file mode 100644
index 0000000000000000000000000000000000000000..c145ad38c0e5c77b76e9277498eaebdcb3200d44
GIT binary patch
literal 5193
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
Bn#=$I
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-precomposed.png b/ui/new-ui-samples/apple-touch-icon-precomposed.png
new file mode 100644
index 0000000000000000000000000000000000000000..7c7bdee612920f195195e8cf566a6467bb8e38ef
GIT binary patch
literal 16413
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon.png b/ui/new-ui-samples/apple-touch-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..68f6b0810347c268ad67d9a28d028c4c5078d358
GIT binary patch
literal 15806
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
IM6N<$f@3((RsaA1
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/browserconfig.xml b/ui/new-ui-samples/browserconfig.xml
new file mode 100644
index 0000000..f947e3b
--- /dev/null
+++ b/ui/new-ui-samples/browserconfig.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<browserconfig>
+ <msapplication>
+ <tile>
+ <square70x70logo src="/mstile-70x70.png"/>
+ <square150x150logo src="/mstile-150x150.png"/>
+ <square310x310logo src="/mstile-310x310.png"/>
+ <wide310x150logo src="/mstile-310x150.png"/>
+ <TileColor>#4d4d4d</TileColor>
+ </tile>
+ </msapplication>
+</browserconfig>
diff --git a/ui/new-ui-samples/css/button-flat.css b/ui/new-ui-samples/css/button-flat.css
new file mode 100755
index 0000000..9df6935
--- /dev/null
+++ b/ui/new-ui-samples/css/button-flat.css
@@ -0,0 +1,271 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.ui-button {
+ display: inline-block;
+ position: relative;
+ color: #FFFFFF;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ border-radius: 3px;
+ border: 1px none;
+ background: #4e4d4f;
+ font-weight: normal;
+ overflow: visible; /* removes extra width in IE */
+}
+.ui-button:hover{
+ background: #000000;
+ font-weight: normal;
+}
+.ui-button:active {
+ background: #4e4d4f;
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+}
+
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+.ui-button-icons-only {
+ width: 3.4em;
+}
+button.ui-button-icons-only {
+ width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+ padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+ margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.ui-button {
+ display: inline-block;
+ position: relative;
+ color: #FFFFFF;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ border-radius: 3px;
+ border: 1px none;
+ background: #4e4d4f;
+ font-weight: normal;
+ overflow: visible; /* removes extra width in IE */
+}
+.ui-button:hover{
+ background: #000000;
+ font-weight: normal;
+}
+.ui-button:active {
+ background: #4e4d4f;
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+}
+
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+.ui-button-icons-only {
+ width: 3.4em;
+}
+button.ui-button-icons-only {
+ width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+ padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+ margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
diff --git a/ui/new-ui-samples/css/checkbox-flat.css b/ui/new-ui-samples/css/checkbox-flat.css
new file mode 100644
index 0000000..39c8d22
--- /dev/null
+++ b/ui/new-ui-samples/css/checkbox-flat.css
@@ -0,0 +1,50 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ .checkbox-item {
+ cursor: pointer;
+ }
+
+ .checkbox-inline {
+ display: inline-block;
+ }
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ .checkbox-item {
+ cursor: pointer;
+ }
+
+ .checkbox-inline {
+ display: inline-block;
+ }
\ No newline at end of file
diff --git a/ui/new-ui-samples/css/fontello.css b/ui/new-ui-samples/css/fontello.css
new file mode 100644
index 0000000..3ba2c51
--- /dev/null
+++ b/ui/new-ui-samples/css/fontello.css
@@ -0,0 +1,1137 @@
+@charset "UTF-8";
+/*
+ * A partial implementation of the Ruby list functions from Compass:
+ * https://github.com/Compass/compass/blob/stable/lib/compass/sass_extensions/…
+ */
+/*
+ * A partial implementation of the Ruby constants functions from Compass:
+ * https://github.com/Compass/compass/blob/stable/lib/compass/sass_extensions/…
+ */
+/*
+ * A partial implementation of the Ruby display functions from Compass:
+ * https://github.com/Compass/compass/blob/stable/core/lib/compass/core/sass_e…
+ */
+@font-face {
+ font-family: 'fontello';
+ src: url("../fonts/fontello.eot");
+ src: url("../fonts/fontello.eot#iefix") format("embedded-opentype"), url("../fonts/fontello.woff") format("woff"), url("../fonts/fontello.ttf") format("truetype"), url("../fonts/fontello.svg#fontello") format("svg");
+ font-weight: normal;
+ font-style: normal;
+}
+
+/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
+/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
+/*
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+ @font-face {
+ font-family: 'fontello';
+ src: url('../font/fontello.svg?99320945#fontello') format('svg');
+ }
+}
+*/
+[class^="icon-"]:before, [class*=" icon-"]:before {
+ font-family: "fontello";
+ font-style: normal;
+ font-weight: normal;
+ speak: none;
+ display: inline-block;
+ text-decoration: inherit;
+ width: 1em;
+ margin-right: .2em;
+ text-align: center;
+ /* opacity: .8; */
+ /* For safety - reset parent styles, that can break glyph codes*/
+ font-variant: normal;
+ text-transform: none;
+ /* fix buttons height, for twitter bootstrap */
+ line-height: 1em;
+ /* Animation center compensation - margins should be symmetric */
+ /* remove if not needed */
+ margin-left: .2em;
+ /* you can be more comfortable with increased icons size */
+ /* font-size: 120%; */
+ /* Uncomment for 3D effect */
+ /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
+}
+
+.icon-user:before {
+ content: '\e800';
+}
+
+/* '' */
+.icon-help-circled:before {
+ content: '\e801';
+}
+
+/* '' */
+.icon-search:before {
+ content: '\e802';
+}
+
+/* '' */
+.icon-tag:before {
+ content: '\e803';
+}
+
+/* '' */
+.icon-dot-2:before {
+ content: '\e804';
+}
+
+/* '' */
+.icon-arrows-cw:before {
+ content: '\e805';
+}
+
+/* '' */
+.icon-print:before {
+ content: '\e806';
+}
+
+/* '' */
+.icon-cancel-circled:before {
+ content: '\e807';
+}
+
+/* '' */
+.icon-edit-alt:before {
+ content: '\e808';
+}
+
+/* '' */
+.icon-login:before {
+ content: '\e809';
+}
+
+/* '' */
+.icon-logout:before {
+ content: '\e80a';
+}
+
+/* '' */
+.icon-download:before {
+ content: '\e80b';
+}
+
+/* '' */
+.icon-th-large:before {
+ content: '\e80c';
+}
+
+/* '' */
+.icon-th:before {
+ content: '\e80d';
+}
+
+/* '' */
+.icon-th-list:before {
+ content: '\e80e';
+}
+
+/* '' */
+.icon-star:before {
+ content: '\e80f';
+}
+
+/* '' */
+.icon-star-empty:before {
+ content: '\e810';
+}
+
+/* '' */
+.icon-users:before {
+ content: '\e811';
+}
+
+/* '' */
+.icon-upload:before {
+ content: '\e812';
+}
+
+/* '' */
+.icon-circle-thin:before {
+ content: '\e813';
+}
+
+/* '' */
+.icon-dot-circled:before {
+ content: '\e814';
+}
+
+/* '' */
+.icon-ok:before {
+ content: '\e815';
+}
+
+/* '' */
+.icon-check-empty-1:before {
+ content: '\e816';
+}
+
+/* '' */
+.icon-clock-2:before {
+ content: '\e817';
+}
+
+/* '' */
+.icon-ok-squared:before {
+ content: '\e818';
+}
+
+/* '' */
+.icon-pin:before {
+ content: '\e820';
+}
+
+/* '' */
+.icon-eye:before {
+ content: '\e821';
+}
+
+/* '' */
+.icon-attach:before {
+ content: '\e824';
+}
+
+/* '' */
+.icon-unlink:before {
+ content: '\e825';
+}
+
+/* '' */
+.icon-link:before {
+ content: '\e826';
+}
+
+/* '' */
+.icon-home:before {
+ content: '\e827';
+}
+
+/* '' */
+.icon-info:before {
+ content: '\e828';
+}
+
+/* '' */
+.icon-info-circled:before {
+ content: '\e829';
+}
+
+/* '' */
+.icon-export:before {
+ content: '\e82f';
+}
+
+/* '' */
+.icon-export-alt:before {
+ content: '\e830';
+}
+
+/* '' */
+.icon-share:before {
+ content: '\e831';
+}
+
+/* '' */
+.icon-share-squared:before {
+ content: '\e832';
+}
+
+/* '' */
+.icon-retweet:before {
+ content: '\e836';
+}
+
+/* '' */
+.icon-attention-alt:before {
+ content: '\e837';
+}
+
+/* '' */
+.icon-attention:before {
+ content: '\e838';
+}
+
+/* '' */
+.icon-attention-circled:before {
+ content: '\e839';
+}
+
+/* '' */
+.icon-location:before {
+ content: '\e83a';
+}
+
+/* '' */
+.icon-trash:before {
+ content: '\e83b';
+}
+
+/* '' */
+.icon-doc:before {
+ content: '\e83c';
+}
+
+/* '' */
+.icon-docs:before {
+ content: '\e83d';
+}
+
+/* '' */
+.icon-doc-text:before {
+ content: '\e83e';
+}
+
+/* '' */
+.icon-doc-inv:before {
+ content: '\e83f';
+}
+
+/* '' */
+.icon-doc-text-inv:before {
+ content: '\e840';
+}
+
+/* '' */
+.icon-file-pdf:before {
+ content: '\e841';
+}
+
+/* '' */
+.icon-file-word:before {
+ content: '\e842';
+}
+
+/* '' */
+.icon-file-excel:before {
+ content: '\e843';
+}
+
+/* '' */
+.icon-file-powerpoint:before {
+ content: '\e844';
+}
+
+/* '' */
+.icon-file-image:before {
+ content: '\e845';
+}
+
+/* '' */
+.icon-cog:before {
+ content: '\e84b';
+}
+
+/* '' */
+.icon-cog-alt:before {
+ content: '\e84c';
+}
+
+/* '' */
+.icon-wrench:before {
+ content: '\e84d';
+}
+
+/* '' */
+.icon-calendar:before {
+ content: '\e84e';
+}
+
+/* '' */
+.icon-calendar-empty:before {
+ content: '\e84f';
+}
+
+/* '' */
+.icon-clock:before {
+ content: '\e852';
+}
+
+/* '' */
+.icon-block:before {
+ content: '\e853';
+}
+
+/* '' */
+.icon-zoom-in:before {
+ content: '\e857';
+}
+
+/* '' */
+.icon-zoom-out:before {
+ content: '\e858';
+}
+
+/* '' */
+.icon-down-circled2:before {
+ content: '\e859';
+}
+
+/* '' */
+.icon-up-circled2:before {
+ content: '\e85a';
+}
+
+/* '' */
+.icon-left-circled2:before {
+ content: '\e85b';
+}
+
+/* '' */
+.icon-right-circled2:before {
+ content: '\e85c';
+}
+
+/* '' */
+.icon-down-dir:before {
+ content: '\e85d';
+}
+
+/* '' */
+.icon-up-dir:before {
+ content: '\e85e';
+}
+
+/* '' */
+.icon-left-dir:before {
+ content: '\e85f';
+}
+
+/* '' */
+.icon-right-dir:before {
+ content: '\e860';
+}
+
+/* '' */
+.icon-down-open:before {
+ content: '\e861';
+}
+
+/* '' */
+.icon-left-open:before {
+ content: '\e862';
+}
+
+/* '' */
+.icon-right-open:before {
+ content: '\e863';
+}
+
+/* '' */
+.icon-up-open:before {
+ content: '\e864';
+}
+
+/* '' */
+.icon-angle-left:before {
+ content: '\e865';
+}
+
+/* '' */
+.icon-angle-right:before {
+ content: '\e866';
+}
+
+/* '' */
+.icon-angle-up:before {
+ content: '\e867';
+}
+
+/* '' */
+.icon-angle-down:before {
+ content: '\e868';
+}
+
+/* '' */
+.icon-angle-circled-left:before {
+ content: '\e869';
+}
+
+/* '' */
+.icon-angle-circled-right:before {
+ content: '\e86a';
+}
+
+/* '' */
+.icon-angle-circled-up:before {
+ content: '\e86b';
+}
+
+/* '' */
+.icon-angle-circled-down:before {
+ content: '\e86c';
+}
+
+/* '' */
+.icon-angle-double-left:before {
+ content: '\e86d';
+}
+
+/* '' */
+.icon-angle-double-right:before {
+ content: '\e86e';
+}
+
+/* '' */
+.icon-angle-double-up:before {
+ content: '\e86f';
+}
+
+/* '' */
+.icon-angle-double-down:before {
+ content: '\e870';
+}
+
+/* '' */
+.icon-down-big:before {
+ content: '\e871';
+}
+
+/* '' */
+.icon-left-big:before {
+ content: '\e872';
+}
+
+/* '' */
+.icon-right-big:before {
+ content: '\e873';
+}
+
+/* '' */
+.icon-up-big:before {
+ content: '\e874';
+}
+
+/* '' */
+.icon-left-circled:before {
+ content: '\e875';
+}
+
+/* '' */
+.icon-right-circled:before {
+ content: '\e876';
+}
+
+/* '' */
+.icon-up-circled:before {
+ content: '\e877';
+}
+
+/* '' */
+.icon-down-circled:before {
+ content: '\e878';
+}
+
+/* '' */
+.icon-cw:before {
+ content: '\e879';
+}
+
+/* '' */
+.icon-ccw:before {
+ content: '\e87a';
+}
+
+/* '' */
+.icon-level-up:before {
+ content: '\e87c';
+}
+
+/* '' */
+.icon-level-down:before {
+ content: '\e87d';
+}
+
+/* '' */
+.icon-shuffle:before {
+ content: '\e87e';
+}
+
+/* '' */
+.icon-exchange:before {
+ content: '\e87f';
+}
+
+/* '' */
+.icon-history:before {
+ content: '\e880';
+}
+
+/* '' */
+.icon-expand:before {
+ content: '\e881';
+}
+
+/* '' */
+.icon-collapse:before {
+ content: '\e882';
+}
+
+/* '' */
+.icon-expand-right:before {
+ content: '\e883';
+}
+
+/* '' */
+.icon-collapse-left:before {
+ content: '\e884';
+}
+
+/* '' */
+.icon-play:before {
+ content: '\e885';
+}
+
+/* '' */
+.icon-play-circled2:before {
+ content: '\e886';
+}
+
+/* '' */
+.icon-play-circled:before {
+ content: '\e887';
+}
+
+/* '' */
+.icon-stop:before {
+ content: '\e888';
+}
+
+/* '' */
+.icon-cloud:before {
+ content: '\e889';
+}
+
+/* '' */
+.icon-table:before {
+ content: '\e88a';
+}
+
+/* '' */
+.icon-off:before {
+ content: '\e88b';
+}
+
+/* '' */
+.icon-check:before {
+ content: '\e88c';
+}
+
+/* '' */
+.icon-asterisk:before {
+ content: '\e88e';
+}
+
+/* '' */
+.icon-chart-bar:before {
+ content: '\e88f';
+}
+
+/* '' */
+.icon-bug:before {
+ content: '\e890';
+}
+
+/* '' */
+.icon-certificate:before {
+ content: '\e891';
+}
+
+/* '' */
+.icon-tasks:before {
+ content: '\e892';
+}
+
+/* '' */
+.icon-sort-up:before {
+ content: '\e893';
+}
+
+/* '' */
+.icon-sort-down:before {
+ content: '\e894';
+}
+
+/* '' */
+.icon-sort:before {
+ content: '\e895';
+}
+
+/* '' */
+.icon-gauge:before {
+ content: '\e896';
+}
+
+/* '' */
+.icon-spinner:before {
+ content: '\e897';
+}
+
+/* '' */
+.icon-database:before {
+ content: '\e898';
+}
+
+/* '' */
+.icon-lifebuoy:before {
+ content: '\e899';
+}
+
+/* '' */
+.icon-cubes:before {
+ content: '\e89a';
+}
+
+/* '' */
+.icon-cube:before {
+ content: '\e89b';
+}
+
+/* '' */
+.icon-bullseye:before {
+ content: '\e89c';
+}
+
+/* '' */
+.icon-windows:before {
+ content: '\e89d';
+}
+
+/* '' */
+.icon-cancel-circled-1:before {
+ content: '\e89e';
+}
+
+/* '' */
+.icon-plus-1:before {
+ content: '\e8a0';
+}
+
+/* '' */
+.icon-plus-circled-1:before {
+ content: '\e8a1';
+}
+
+/* '' */
+.icon-minus-1:before {
+ content: '\e8a3';
+}
+
+/* '' */
+.icon-minus-circled-1:before {
+ content: '\e8a4';
+}
+
+/* '' */
+.icon-help-circled-1:before {
+ content: '\e8a7';
+}
+
+/* '' */
+.icon-heart-empty-1:before {
+ content: '\e8aa';
+}
+
+/* '' */
+.icon-mail-1:before {
+ content: '\e8ab';
+}
+
+/* '' */
+.icon-star-1:before {
+ content: '\e8ac';
+}
+
+/* '' */
+.icon-star-empty-1:before {
+ content: '\e8ad';
+}
+
+/* '' */
+.icon-link-1:before {
+ content: '\e8ae';
+}
+
+/* '' */
+.icon-attach-1:before {
+ content: '\e8af';
+}
+
+/* '' */
+.icon-eye-1:before {
+ content: '\e8b2';
+}
+
+/* '' */
+.icon-attention-1:before {
+ content: '\e8b3';
+}
+
+/* '' */
+.icon-doc-text-1:before {
+ content: '\e8b4';
+}
+
+/* '' */
+.icon-doc-text-inv-1:before {
+ content: '\e8b5';
+}
+
+/* '' */
+.icon-share-1:before {
+ content: '\e8b7';
+}
+
+/* '' */
+.icon-shareable:before {
+ content: '\e8b8';
+}
+
+/* '' */
+.icon-ccw-1:before {
+ content: '\e8cc';
+}
+
+/* '' */
+.icon-cw-1:before {
+ content: '\e8cd';
+}
+
+/* '' */
+.icon-arrows-ccw:before {
+ content: '\e8ce';
+}
+
+/* '' */
+.icon-play-1:before {
+ content: '\e8cf';
+}
+
+/* '' */
+.icon-pause:before {
+ content: '\e8d0';
+}
+
+/* '' */
+.icon-record:before {
+ content: '\e8d1';
+}
+
+/* '' */
+.icon-stop-1:before {
+ content: '\e8d2';
+}
+
+/* '' */
+.icon-switch:before {
+ content: '\e8d3';
+}
+
+/* '' */
+.icon-loop:before {
+ content: '\e8d4';
+}
+
+/* '' */
+.icon-cloud-1:before {
+ content: '\e8d5';
+}
+
+/* '' */
+.icon-certificate-outline:before {
+ content: '\e8db';
+}
+
+/* '' */
+.icon-certificate-1:before {
+ content: '\e8dc';
+}
+
+/* '' */
+.icon-windows-1:before {
+ content: '\e8dd';
+}
+
+/* '' */
+.icon-spin5:before {
+ content: '\e8df';
+}
+
+/* '' */
+.icon-spin2:before {
+ content: '\e8e0';
+}
+
+/* '' */
+.icon-picture:before {
+ content: '\e8e4';
+}
+
+/* '' */
+.icon-menu:before {
+ content: '\e8e5';
+}
+
+/* '' */
+.icon-sliders:before {
+ content: '\e8e6';
+}
+
+/* '' */
+.icon-list-alt:before {
+ content: '\e8e7';
+}
+
+/* '' */
+.icon-ajust:before {
+ content: '\e8e8';
+}
+
+/* '' */
+.icon-circle:before {
+ content: '\e8e9';
+}
+
+/* '' */
+.icon-circle-empty:before {
+ content: '\e8ea';
+}
+
+/* '' */
+.icon-circle-notch:before {
+ content: '\e8ec';
+}
+
+/* '' */
+.icon-fork:before {
+ content: '\e8ed';
+}
+
+/* '' */
+.icon-sitemap:before {
+ content: '\e8ee';
+}
+
+/* '' */
+.icon-stethoscope:before {
+ content: '\e8ef';
+}
+
+/* '' */
+.icon-shield:before {
+ content: '\e8f0';
+}
+
+/* '' */
+.icon-heart-1:before {
+ content: '\e8f1';
+}
+
+/* '' */
+.icon-search-1:before {
+ content: '\e8f2';
+}
+
+/* '' */
+.icon-menu-1:before {
+ content: '\e8f3';
+}
+
+/* '' */
+.icon-back:before {
+ content: '\e8f6';
+}
+
+/* '' */
+.icon-home-1:before {
+ content: '\e8f7';
+}
+
+/* '' */
+.icon-pencil-1:before {
+ content: '\e8f8';
+}
+
+/* '' */
+.icon-location-1:before {
+ content: '\e8f9';
+}
+
+/* '' */
+.icon-logout-1:before {
+ content: '\e8fb';
+}
+
+/* '' */
+.icon-login-1:before {
+ content: '\e8fc';
+}
+
+/* '' */
+.icon-publish:before {
+ content: '\e8fd';
+}
+
+/* '' */
+.icon-window:before {
+ content: '\e8fe';
+}
+
+/* '' */
+.icon-chart-pie:before {
+ content: '\e8ff';
+}
+
+/* '' */
+.icon-chart-line:before {
+ content: '\e900';
+}
+
+/* '' */
+.icon-chart-area:before {
+ content: '\e901';
+}
+
+/* '' */
+.icon-chart-bar-1:before {
+ content: '\e902';
+}
+
+/* '' */
+.icon-air:before {
+ content: '\e905';
+}
+
+/* '' */
+.icon-database-1:before {
+ content: '\e906';
+}
+
+/* '' */
+.icon-flow-cascade:before {
+ content: '\e907';
+}
+
+/* '' */
+.icon-flow-tree:before {
+ content: '\e908';
+}
+
+/* '' */
+.icon-flow-line:before {
+ content: '\e909';
+}
+
+/* '' */
+.icon-flow-branch:before {
+ content: '\e90a';
+}
+
+/* '' */
+.icon-flow-parallel-1:before {
+ content: '\e90f';
+}
+
+/* '' */
+.icon-dot:before {
+ content: '\e910';
+}
+
+/* '' */
+.icon-dot-3:before {
+ content: '\e911';
+}
+
+/* '' */
+.icon-cd:before {
+ content: '\e912';
+}
+
+/* '' */
+.icon-back-in-time:before {
+ content: '\e913';
+}
+
+/* '' */
+.icon-list:before {
+ content: '\e914';
+}
+
+/* '' */
+.icon-list-add:before {
+ content: '\e915';
+}
+
+/* '' */
+.icon-progress-0:before {
+ content: '\e919';
+}
+
+/* '' */
+.icon-pencil-2:before {
+ content: '\e91d';
+}
+
+/* '' */
+.icon-cog-2:before {
+ content: '\e91f';
+}
+
+/* '' */
+.icon-cog-circled:before {
+ content: '\e920';
+}
+
+/* '' */
+.icon-cogs:before {
+ content: '\e921';
+}
+
+/* '' */
+.icon-calendar-1:before {
+ content: '\e924';
+}
+
+/* '' */
+.icon-doc-new:before {
+ content: '\e925';
+}
+
+/* '' */
+/*
+ Animation example, for spinners
+*/
+.animate-spin {
+ -webkit-animation: spin 2s infinite linear;
+ animation: spin 2s infinite linear;
+ display: inline-block;
+}
+
+@-webkit-keyframes spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ -ms-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ -ms-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+
+@keyframes spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ -ms-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ -ms-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvbnRlbGxvLmNzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvZnVuY3Rpb25zL19saXN0cy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy9mdW5jdGlvbnMvX2NvbnN0YW50cy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy9mdW5jdGlvbnMvX2Rpc3BsYXkuc2NzcyIsIm1vZHVsZXMvX2ZvbnRlbGxvLnNjc3MiLCJtb2R1bGVzL19hbmltYXRpb24uc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX3ZlbmRvci1wcmVmaXhlcy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy9jc3MzL19zaGFyZWQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUNBakI7OztHQUdHO0FDSEg7OztHQUdHO0FDSEg7OztHQUdHO0FDSEg7RUFDRSx3QkFBd0I7RUFDeEIsa0NBQVE7RUFDUix3TkFHMEQ7RUFDMUQsb0JBQW9CO0VBQ3BCLG1CQUFtQjtDSldwQjs7QUlQRCxpR0FBaUc7QUFDakcsNEZBQTRGO0FBQzVGOzs7Ozs7O0VBT0U7QUpVRjtFSVBFLHdCQUF3QjtFQUN4QixtQkFBbUI7RUFDbkIsb0JBQW9CO0VBQ3BCLFlBQVk7RUFFWixzQkFBc0I7RUFDdEIseUJBQXlCO0VBQ3pCLFdBQVc7RUFDWCxtQkFBbUI7RUFDbkIsbUJBQW1CO0VBQ25CLGtCQUFrQjtFQUVsQixpRUFBaUU7RUFDakUscUJBQXFCO0VBQ3JCLHFCQUFxQjtFQUVyQiwrQ0FBK0M7RUFDL0MsaUJBQWlCO0VBRWpCLGlFQUFpRTtFQUNqRSwwQkFBMEI7RUFDMUIsa0JBQWtCO0VBRWxCLDJEQUEyRDtFQUMzRCxzQkFBc0I7RUFFdEIsNkJBQTZCO0VBQzdCLHdEQUF3RDtDQTVCTjs7QUErQjFDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ25DO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzFCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3BDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzFCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3BCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzVCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzVCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3BDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ25DO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzFCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ25DO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzFCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3BDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzFCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzVCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzFCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzVCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3BDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ25DO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ25DO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzVCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ25CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ25DO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ25DO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzVCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzVCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3BDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzVCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3hCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FDdFE1Qzs7RUFFRTtBQUNGO0VDZ0JFLDJDRGYwQztFQ2lCbEMsbUNEakJrQztFQUMxQyxzQkFBc0I7Q0FGVDs7QUFJZjtFQUNFO0lFTXVELGdDRkw1QjtJRVFnQyw0QkZSaEM7SUVVb0Msd0JGVnBDO0dMcWxDMUI7RUtubENEO0lFR3VELGtDRkY1QjtJRUtnQyw4QkZMaEM7SUVPb0MsMEJGUHBDO0dMeWxDMUI7Q0FDRjs7QUsvbENEO0VBQ0U7SUVNdUQsZ0NGTDVCO0lFUWdDLDRCRlJoQztJRVVvQyx3QkZWcEM7R0xxbEMxQjtFS25sQ0Q7SUVHdUQsa0NGRjVCO0lFS2dDLDhCRkxoQztJRU9vQywwQkZQcEM7R0x5bEMxQjtDQUNGIiwiZmlsZSI6ImZvbnRlbGxvLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qXG4gKiBBIHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJ1YnkgbGlzdCBmdW5jdGlvbnMgZnJvbSBDb21wYXNzOlxuICogaHR0cHM6Ly9naXRodWIuY29tL0NvbXBhc3MvY29tcGFzcy9ibG9iL3N0YWJsZS9saWIvY29tcGFzcy9zYXNzX2V4dGVuc2lvbnMvZnVuY3Rpb25zL2xpc3RzLnJiXG4gKi9cbi8qXG4gKiBBIHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJ1YnkgY29uc3RhbnRzIGZ1bmN0aW9ucyBmcm9tIENvbXBhc3M6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vQ29tcGFzcy9jb21wYXNzL2Jsb2Ivc3RhYmxlL2xpYi9jb21wYXNzL3Nhc3NfZXh0ZW5zaW9ucy9mdW5jdGlvbnMvY29uc3RhbnRzLnJiXG4gKi9cbi8qXG4gKiBBIHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJ1YnkgZGlzcGxheSBmdW5jdGlvbnMgZnJvbSBDb21wYXNzOlxuICogaHR0cHM6Ly9naXRodWIuY29tL0NvbXBhc3MvY29tcGFzcy9ibG9iL3N0YWJsZS9jb3JlL2xpYi9jb21wYXNzL2NvcmUvc2Fzc19leHRlbnNpb25zL2Z1bmN0aW9ucy9kaXNwbGF5LnJiXG4gKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ2ZvbnRlbGxvJztcbiAgc3JjOiB1cmwoXCIuLi9mb250cy9mb250ZWxsby5lb3RcIik7XG4gIHNyYzogdXJsKFwiLi4vZm9udHMvZm9udGVsbG8uZW90I2llZml4XCIpIGZvcm1hdChcImVtYmVkZGVkLW9wZW50eXBlXCIpLCB1cmwoXCIuLi9mb250cy9mb250ZWxsby53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksIHVybChcIi4uL2ZvbnRzL2ZvbnRlbGxvLnR0ZlwiKSBmb3JtYXQoXCJ0cnVldHlwZVwiKSwgdXJsKFwiLi4vZm9udHMvZm9udGVsbG8uc3ZnI2ZvbnRlbGxvXCIpIGZvcm1hdChcInN2Z1wiKTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG4vKiBDaHJvbWUgaGFjazogU1ZHIGlzIHJlbmRlcmVkIG1vcmUgc21vb3RoIGluIFdpbmRvenplLiAxMDAlIG1hZ2ljLCB1bmNvbW1lbnQgaWYgeW91IG5lZWQgaXQuICovXG4vKiBOb3RlLCB0aGF0IHdpbGwgYnJlYWsgaGludGluZyEgSW4gb3RoZXIgT1MtZXMgZm9udCB3aWxsIGJlIG5vdCBhcyBzaGFycCBhcyBpdCBjb3VsZCBiZSAqL1xuLypcbkBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkge1xuICBAZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ2ZvbnRlbGxvJztcbiAgICBzcmM6IHVybCgnLi4vZm9udC9mb250ZWxsby5zdmc/OTkzMjA5NDUjZm9udGVsbG8nKSBmb3JtYXQoJ3N2ZycpO1xuICB9XG59XG4qL1xuW2NsYXNzXj1cImljb24tXCJdOmJlZm9yZSwgW2NsYXNzKj1cIiBpY29uLVwiXTpiZWZvcmUge1xuICBmb250LWZhbWlseTogXCJmb250ZWxsb1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIHNwZWFrOiBub25lO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRleHQtZGVjb3JhdGlvbjogaW5oZXJpdDtcbiAgd2lkdGg6IDFlbTtcbiAgbWFyZ2luLXJpZ2h0OiAuMmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIC8qIG9wYWNpdHk6IC44OyAqL1xuICAvKiBGb3Igc2FmZXR5IC0gcmVzZXQgcGFyZW50IHN0eWxlcywgdGhhdCBjYW4gYnJlYWsgZ2x5cGggY29kZXMqL1xuICBmb250LXZhcmlhbnQ6IG5vcm1hbDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIC8qIGZpeCBidXR0b25zIGhlaWdodCwgZm9yIHR3aXR0ZXIgYm9vdHN0cmFwICovXG4gIGxpbmUtaGVpZ2h0OiAxZW07XG4gIC8qIEFuaW1hdGlvbiBjZW50ZXIgY29tcGVuc2F0aW9uIC0gbWFyZ2lucyBzaG91bGQgYmUgc3ltbWV0cmljICovXG4gIC8qIHJlbW92ZSBpZiBub3QgbmVlZGVkICovXG4gIG1hcmdpbi1sZWZ0OiAuMmVtO1xuICAvKiB5b3UgY2FuIGJlIG1vcmUgY29tZm9ydGFibGUgd2l0aCBpbmNyZWFzZWQgaWNvbnMgc2l6ZSAqL1xuICAvKiBmb250LXNpemU6IDEyMCU7ICovXG4gIC8qIFVuY29tbWVudCBmb3IgM0QgZWZmZWN0ICovXG4gIC8qIHRleHQtc2hhZG93OiAxcHggMXB4IDFweCByZ2JhKDEyNywgMTI3LCAxMjcsIDAuMyk7ICovXG59XG5cbi5pY29uLXVzZXI6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgwMCc7XG59XG5cbi8qICfuoIAnICovXG4uaWNvbi1oZWxwLWNpcmNsZWQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgwMSc7XG59XG5cbi8qICfuoIEnICovXG4uaWNvbi1zZWFyY2g6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgwMic7XG59XG5cbi8qICfuoIInICovXG4uaWNvbi10YWc6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgwMyc7XG59XG5cbi8qICfuoIMnICovXG4uaWNvbi1kb3QtMjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODA0Jztcbn1cblxuLyogJ+6ghCcgKi9cbi5pY29uLWFycm93cy1jdzpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODA1Jztcbn1cblxuLyogJ+6ghScgKi9cbi5pY29uLXByaW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MDYnO1xufVxuXG4vKiAn7qCGJyAqL1xuLmljb24tY2FuY2VsLWNpcmNsZWQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgwNyc7XG59XG5cbi8qICfuoIcnICovXG4uaWNvbi1lZGl0LWFsdDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODA4Jztcbn1cblxuLyogJ+6giCcgKi9cbi5pY29uLWxvZ2luOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MDknO1xufVxuXG4vKiAn7qCJJyAqL1xuLmljb24tbG9nb3V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MGEnO1xufVxuXG4vKiAn7qCKJyAqL1xuLmljb24tZG93bmxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgwYic7XG59XG5cbi8qICfuoIsnICovXG4uaWNvbi10aC1sYXJnZTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODBjJztcbn1cblxuLyogJ+6gjCcgKi9cbi5pY29uLXRoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MGQnO1xufVxuXG4vKiAn7qCNJyAqL1xuLmljb24tdGgtbGlzdDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODBlJztcbn1cblxuLyogJ+6gjicgKi9cbi5pY29uLXN0YXI6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgwZic7XG59XG5cbi8qICfuoI8nICovXG4uaWNvbi1zdGFyLWVtcHR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MTAnO1xufVxuXG4vKiAn7qCQJyAqL1xuLmljb24tdXNlcnM6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgxMSc7XG59XG5cbi8qICfuoJEnICovXG4uaWNvbi11cGxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgxMic7XG59XG5cbi8qICfuoJInICovXG4uaWNvbi1jaXJjbGUtdGhpbjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODEzJztcbn1cblxuLyogJ+6gkycgKi9cbi5pY29uLWRvdC1jaXJjbGVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MTQnO1xufVxuXG4vKiAn7qCUJyAqL1xuLmljb24tb2s6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgxNSc7XG59XG5cbi8qICfuoJUnICovXG4uaWNvbi1jaGVjay1lbXB0eS0xOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MTYnO1xufVxuXG4vKiAn7qCWJyAqL1xuLmljb24tY2xvY2stMjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODE3Jztcbn1cblxuLyogJ+6glycgKi9cbi5pY29uLW9rLXNxdWFyZWQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgxOCc7XG59XG5cbi8qICfuoJgnICovXG4uaWNvbi1waW46YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgyMCc7XG59XG5cbi8qICfuoKAnICovXG4uaWNvbi1leWU6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgyMSc7XG59XG5cbi8qICfuoKEnICovXG4uaWNvbi1hdHRhY2g6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgyNCc7XG59XG5cbi8qICfuoKQnICovXG4uaWNvbi11bmxpbms6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgyNSc7XG59XG5cbi8qICfuoKUnICovXG4uaWNvbi1saW5rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MjYnO1xufVxuXG4vKiAn7qCmJyAqL1xuLmljb24taG9tZTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODI3Jztcbn1cblxuLyogJ+6gpycgKi9cbi5pY29uLWluZm86YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgyOCc7XG59XG5cbi8qICfuoKgnICovXG4uaWNvbi1pbmZvLWNpcmNsZWQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgyOSc7XG59XG5cbi8qICfuoKknICovXG4uaWNvbi1leHBvcnQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgyZic7XG59XG5cbi8qICfuoK8nICovXG4uaWNvbi1leHBvcnQtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MzAnO1xufVxuXG4vKiAn7qCwJyAqL1xuLmljb24tc2hhcmU6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgzMSc7XG59XG5cbi8qICfuoLEnICovXG4uaWNvbi1zaGFyZS1zcXVhcmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MzInO1xufVxuXG4vKiAn7qCyJyAqL1xuLmljb24tcmV0d2VldDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODM2Jztcbn1cblxuLyogJ+6gticgKi9cbi5pY29uLWF0dGVudGlvbi1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgzNyc7XG59XG5cbi8qICfuoLcnICovXG4uaWNvbi1hdHRlbnRpb246YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgzOCc7XG59XG5cbi8qICfuoLgnICovXG4uaWNvbi1hdHRlbnRpb24tY2lyY2xlZDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODM5Jztcbn1cblxuLyogJ+6guScgKi9cbi5pY29uLWxvY2F0aW9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4M2EnO1xufVxuXG4vKiAn7qC6JyAqL1xuLmljb24tdHJhc2g6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgzYic7XG59XG5cbi8qICfuoLsnICovXG4uaWNvbi1kb2M6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgzYyc7XG59XG5cbi8qICfuoLwnICovXG4uaWNvbi1kb2NzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4M2QnO1xufVxuXG4vKiAn7qC9JyAqL1xuLmljb24tZG9jLXRleHQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgzZSc7XG59XG5cbi8qICfuoL4nICovXG4uaWNvbi1kb2MtaW52OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4M2YnO1xufVxuXG4vKiAn7qC/JyAqL1xuLmljb24tZG9jLXRleHQtaW52OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NDAnO1xufVxuXG4vKiAn7qGAJyAqL1xuLmljb24tZmlsZS1wZGY6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg0MSc7XG59XG5cbi8qICfuoYEnICovXG4uaWNvbi1maWxlLXdvcmQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg0Mic7XG59XG5cbi8qICfuoYInICovXG4uaWNvbi1maWxlLWV4Y2VsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NDMnO1xufVxuXG4vKiAn7qGDJyAqL1xuLmljb24tZmlsZS1wb3dlcnBvaW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NDQnO1xufVxuXG4vKiAn7qGEJyAqL1xuLmljb24tZmlsZS1pbWFnZTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODQ1Jztcbn1cblxuLyogJ+6hhScgKi9cbi5pY29uLWNvZzpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODRiJztcbn1cblxuLyogJ+6hiycgKi9cbi5pY29uLWNvZy1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg0Yyc7XG59XG5cbi8qICfuoYwnICovXG4uaWNvbi13cmVuY2g6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg0ZCc7XG59XG5cbi8qICfuoY0nICovXG4uaWNvbi1jYWxlbmRhcjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODRlJztcbn1cblxuLyogJ+6hjicgKi9cbi5pY29uLWNhbGVuZGFyLWVtcHR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NGYnO1xufVxuXG4vKiAn7qGPJyAqL1xuLmljb24tY2xvY2s6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg1Mic7XG59XG5cbi8qICfuoZInICovXG4uaWNvbi1ibG9jazpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODUzJztcbn1cblxuLyogJ+6hkycgKi9cbi5pY29uLXpvb20taW46YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg1Nyc7XG59XG5cbi8qICfuoZcnICovXG4uaWNvbi16b29tLW91dDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODU4Jztcbn1cblxuLyogJ+6hmCcgKi9cbi5pY29uLWRvd24tY2lyY2xlZDI6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg1OSc7XG59XG5cbi8qICfuoZknICovXG4uaWNvbi11cC1jaXJjbGVkMjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODVhJztcbn1cblxuLyogJ+6hmicgKi9cbi5pY29uLWxlZnQtY2lyY2xlZDI6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg1Yic7XG59XG5cbi8qICfuoZsnICovXG4uaWNvbi1yaWdodC1jaXJjbGVkMjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODVjJztcbn1cblxuLyogJ+6hnCcgKi9cbi5pY29uLWRvd24tZGlyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NWQnO1xufVxuXG4vKiAn7qGdJyAqL1xuLmljb24tdXAtZGlyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NWUnO1xufVxuXG4vKiAn7qGeJyAqL1xuLmljb24tbGVmdC1kaXI6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg1Zic7XG59XG5cbi8qICfuoZ8nICovXG4uaWNvbi1yaWdodC1kaXI6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2MCc7XG59XG5cbi8qICfuoaAnICovXG4uaWNvbi1kb3duLW9wZW46YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2MSc7XG59XG5cbi8qICfuoaEnICovXG4uaWNvbi1sZWZ0LW9wZW46YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2Mic7XG59XG5cbi8qICfuoaInICovXG4uaWNvbi1yaWdodC1vcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NjMnO1xufVxuXG4vKiAn7qGjJyAqL1xuLmljb24tdXAtb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODY0Jztcbn1cblxuLyogJ+6hpCcgKi9cbi5pY29uLWFuZ2xlLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2NSc7XG59XG5cbi8qICfuoaUnICovXG4uaWNvbi1hbmdsZS1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODY2Jztcbn1cblxuLyogJ+6hpicgKi9cbi5pY29uLWFuZ2xlLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NjcnO1xufVxuXG4vKiAn7qGnJyAqL1xuLmljb24tYW5nbGUtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODY4Jztcbn1cblxuLyogJ+6hqCcgKi9cbi5pY29uLWFuZ2xlLWNpcmNsZWQtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODY5Jztcbn1cblxuLyogJ+6hqScgKi9cbi5pY29uLWFuZ2xlLWNpcmNsZWQtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2YSc7XG59XG5cbi8qICfuoaonICovXG4uaWNvbi1hbmdsZS1jaXJjbGVkLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NmInO1xufVxuXG4vKiAn7qGrJyAqL1xuLmljb24tYW5nbGUtY2lyY2xlZC1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NmMnO1xufVxuXG4vKiAn7qGsJyAqL1xuLmljb24tYW5nbGUtZG91YmxlLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2ZCc7XG59XG5cbi8qICfuoa0nICovXG4uaWNvbi1hbmdsZS1kb3VibGUtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2ZSc7XG59XG5cbi8qICfuoa4nICovXG4uaWNvbi1hbmdsZS1kb3VibGUtdXA6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2Zic7XG59XG5cbi8qICfuoa8nICovXG4uaWNvbi1hbmdsZS1kb3VibGUtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODcwJztcbn1cblxuLyogJ+6hsCcgKi9cbi5pY29uLWRvd24tYmlnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NzEnO1xufVxuXG4vKiAn7qGxJyAqL1xuLmljb24tbGVmdC1iaWc6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg3Mic7XG59XG5cbi8qICfuobInICovXG4uaWNvbi1yaWdodC1iaWc6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg3Myc7XG59XG5cbi8qICfuobMnICovXG4uaWNvbi11cC1iaWc6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg3NCc7XG59XG5cbi8qICfuobQnICovXG4uaWNvbi1sZWZ0LWNpcmNsZWQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg3NSc7XG59XG5cbi8qICfuobUnICovXG4uaWNvbi1yaWdodC1jaXJjbGVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NzYnO1xufVxuXG4vKiAn7qG2JyAqL1xuLmljb24tdXAtY2lyY2xlZDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODc3Jztcbn1cblxuLyogJ+6htycgKi9cbi5pY29uLWRvd24tY2lyY2xlZDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODc4Jztcbn1cblxuLyogJ+6huCcgKi9cbi5pY29uLWN3OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NzknO1xufVxuXG4vKiAn7qG5JyAqL1xuLmljb24tY2N3OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4N2EnO1xufVxuXG4vKiAn7qG6JyAqL1xuLmljb24tbGV2ZWwtdXA6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg3Yyc7XG59XG5cbi8qICfuobwnICovXG4uaWNvbi1sZXZlbC1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4N2QnO1xufVxuXG4vKiAn7qG9JyAqL1xuLmljb24tc2h1ZmZsZTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODdlJztcbn1cblxuLyogJ+6hvicgKi9cbi5pY29uLWV4Y2hhbmdlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4N2YnO1xufVxuXG4vKiAn7qG/JyAqL1xuLmljb24taGlzdG9yeTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODgwJztcbn1cblxuLyogJ+6igCcgKi9cbi5pY29uLWV4cGFuZDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODgxJztcbn1cblxuLyogJ+6igScgKi9cbi5pY29uLWNvbGxhcHNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ODInO1xufVxuXG4vKiAn7qKCJyAqL1xuLmljb24tZXhwYW5kLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ODMnO1xufVxuXG4vKiAn7qKDJyAqL1xuLmljb24tY29sbGFwc2UtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODg0Jztcbn1cblxuLyogJ+6ihCcgKi9cbi5pY29uLXBsYXk6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg4NSc7XG59XG5cbi8qICfuooUnICovXG4uaWNvbi1wbGF5LWNpcmNsZWQyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ODYnO1xufVxuXG4vKiAn7qKGJyAqL1xuLmljb24tcGxheS1jaXJjbGVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ODcnO1xufVxuXG4vKiAn7qKHJyAqL1xuLmljb24tc3RvcDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODg4Jztcbn1cblxuLyogJ+6iiCcgKi9cbi5pY29uLWNsb3VkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ODknO1xufVxuXG4vKiAn7qKJJyAqL1xuLmljb24tdGFibGU6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg4YSc7XG59XG5cbi8qICfuooonICovXG4uaWNvbi1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg4Yic7XG59XG5cbi8qICfuoosnICovXG4uaWNvbi1jaGVjazpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODhjJztcbn1cblxuLyogJ+6ijCcgKi9cbi5pY29uLWFzdGVyaXNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4OGUnO1xufVxuXG4vKiAn7qKOJyAqL1xuLmljb24tY2hhcnQtYmFyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4OGYnO1xufVxuXG4vKiAn7qKPJyAqL1xuLmljb24tYnVnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4OTAnO1xufVxuXG4vKiAn7qKQJyAqL1xuLmljb24tY2VydGlmaWNhdGU6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg5MSc7XG59XG5cbi8qICfuopEnICovXG4uaWNvbi10YXNrczpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODkyJztcbn1cblxuLyogJ+6ikicgKi9cbi5pY29uLXNvcnQtdXA6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg5Myc7XG59XG5cbi8qICfuopMnICovXG4uaWNvbi1zb3J0LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg5NCc7XG59XG5cbi8qICfuopQnICovXG4uaWNvbi1zb3J0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4OTUnO1xufVxuXG4vKiAn7qKVJyAqL1xuLmljb24tZ2F1Z2U6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg5Nic7XG59XG5cbi8qICfuopYnICovXG4uaWNvbi1zcGlubmVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4OTcnO1xufVxuXG4vKiAn7qKXJyAqL1xuLmljb24tZGF0YWJhc2U6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg5OCc7XG59XG5cbi8qICfuopgnICovXG4uaWNvbi1saWZlYnVveTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODk5Jztcbn1cblxuLyogJ+6imScgKi9cbi5pY29uLWN1YmVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4OWEnO1xufVxuXG4vKiAn7qKaJyAqL1xuLmljb24tY3ViZTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODliJztcbn1cblxuLyogJ+6imycgKi9cbi5pY29uLWJ1bGxzZXllOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4OWMnO1xufVxuXG4vKiAn7qKcJyAqL1xuLmljb24td2luZG93czpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODlkJztcbn1cblxuLyogJ+6inScgKi9cbi5pY29uLWNhbmNlbC1jaXJjbGVkLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg5ZSc7XG59XG5cbi8qICfuop4nICovXG4uaWNvbi1wbHVzLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThhMCc7XG59XG5cbi8qICfuoqAnICovXG4uaWNvbi1wbHVzLWNpcmNsZWQtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGExJztcbn1cblxuLyogJ+6ioScgKi9cbi5pY29uLW1pbnVzLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThhMyc7XG59XG5cbi8qICfuoqMnICovXG4uaWNvbi1taW51cy1jaXJjbGVkLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThhNCc7XG59XG5cbi8qICfuoqQnICovXG4uaWNvbi1oZWxwLWNpcmNsZWQtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGE3Jztcbn1cblxuLyogJ+6ipycgKi9cbi5pY29uLWhlYXJ0LWVtcHR5LTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThhYSc7XG59XG5cbi8qICfuoqonICovXG4uaWNvbi1tYWlsLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThhYic7XG59XG5cbi8qICfuoqsnICovXG4uaWNvbi1zdGFyLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThhYyc7XG59XG5cbi8qICfuoqwnICovXG4uaWNvbi1zdGFyLWVtcHR5LTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThhZCc7XG59XG5cbi8qICfuoq0nICovXG4uaWNvbi1saW5rLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThhZSc7XG59XG5cbi8qICfuoq4nICovXG4uaWNvbi1hdHRhY2gtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGFmJztcbn1cblxuLyogJ+6irycgKi9cbi5pY29uLWV5ZS0xOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4YjInO1xufVxuXG4vKiAn7qKyJyAqL1xuLmljb24tYXR0ZW50aW9uLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThiMyc7XG59XG5cbi8qICfuorMnICovXG4uaWNvbi1kb2MtdGV4dC0xOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4YjQnO1xufVxuXG4vKiAn7qK0JyAqL1xuLmljb24tZG9jLXRleHQtaW52LTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThiNSc7XG59XG5cbi8qICfuorUnICovXG4uaWNvbi1zaGFyZS0xOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4YjcnO1xufVxuXG4vKiAn7qK3JyAqL1xuLmljb24tc2hhcmVhYmxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4YjgnO1xufVxuXG4vKiAn7qK4JyAqL1xuLmljb24tY2N3LTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThjYyc7XG59XG5cbi8qICfuo4wnICovXG4uaWNvbi1jdy0xOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4Y2QnO1xufVxuXG4vKiAn7qONJyAqL1xuLmljb24tYXJyb3dzLWNjdzpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGNlJztcbn1cblxuLyogJ+6jjicgKi9cbi5pY29uLXBsYXktMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGNmJztcbn1cblxuLyogJ+6jjycgKi9cbi5pY29uLXBhdXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZDAnO1xufVxuXG4vKiAn7qOQJyAqL1xuLmljb24tcmVjb3JkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZDEnO1xufVxuXG4vKiAn7qORJyAqL1xuLmljb24tc3RvcC0xOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZDInO1xufVxuXG4vKiAn7qOSJyAqL1xuLmljb24tc3dpdGNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZDMnO1xufVxuXG4vKiAn7qOTJyAqL1xuLmljb24tbG9vcDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGQ0Jztcbn1cblxuLyogJ+6jlCcgKi9cbi5pY29uLWNsb3VkLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThkNSc7XG59XG5cbi8qICfuo5UnICovXG4uaWNvbi1jZXJ0aWZpY2F0ZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZGInO1xufVxuXG4vKiAn7qObJyAqL1xuLmljb24tY2VydGlmaWNhdGUtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGRjJztcbn1cblxuLyogJ+6jnCcgKi9cbi5pY29uLXdpbmRvd3MtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGRkJztcbn1cblxuLyogJ+6jnScgKi9cbi5pY29uLXNwaW41OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZGYnO1xufVxuXG4vKiAn7qOfJyAqL1xuLmljb24tc3BpbjI6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThlMCc7XG59XG5cbi8qICfuo6AnICovXG4uaWNvbi1waWN0dXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZTQnO1xufVxuXG4vKiAn7qOkJyAqL1xuLmljb24tbWVudTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGU1Jztcbn1cblxuLyogJ+6jpScgKi9cbi5pY29uLXNsaWRlcnM6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThlNic7XG59XG5cbi8qICfuo6YnICovXG4uaWNvbi1saXN0LWFsdDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGU3Jztcbn1cblxuLyogJ+6jpycgKi9cbi5pY29uLWFqdXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZTgnO1xufVxuXG4vKiAn7qOoJyAqL1xuLmljb24tY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZTknO1xufVxuXG4vKiAn7qOpJyAqL1xuLmljb24tY2lyY2xlLWVtcHR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZWEnO1xufVxuXG4vKiAn7qOqJyAqL1xuLmljb24tY2lyY2xlLW5vdGNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZWMnO1xufVxuXG4vKiAn7qOsJyAqL1xuLmljb24tZm9yazpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGVkJztcbn1cblxuLyogJ+6jrScgKi9cbi5pY29uLXNpdGVtYXA6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThlZSc7XG59XG5cbi8qICfuo64nICovXG4uaWNvbi1zdGV0aG9zY29wZTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGVmJztcbn1cblxuLyogJ+6jrycgKi9cbi5pY29uLXNoaWVsZDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGYwJztcbn1cblxuLyogJ+6jsCcgKi9cbi5pY29uLWhlYXJ0LTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThmMSc7XG59XG5cbi8qICfuo7EnICovXG4uaWNvbi1zZWFyY2gtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGYyJztcbn1cblxuLyogJ+6jsicgKi9cbi5pY29uLW1lbnUtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGYzJztcbn1cblxuLyogJ+6jsycgKi9cbi5pY29uLWJhY2s6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThmNic7XG59XG5cbi8qICfuo7YnICovXG4uaWNvbi1ob21lLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThmNyc7XG59XG5cbi8qICfuo7cnICovXG4uaWNvbi1wZW5jaWwtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGY4Jztcbn1cblxuLyogJ+6juCcgKi9cbi5pY29uLWxvY2F0aW9uLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThmOSc7XG59XG5cbi8qICfuo7knICovXG4uaWNvbi1sb2dvdXQtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGZiJztcbn1cblxuLyogJ+6juycgKi9cbi5pY29uLWxvZ2luLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThmYyc7XG59XG5cbi8qICfuo7wnICovXG4uaWNvbi1wdWJsaXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZmQnO1xufVxuXG4vKiAn7qO9JyAqL1xuLmljb24td2luZG93OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZmUnO1xufVxuXG4vKiAn7qO+JyAqL1xuLmljb24tY2hhcnQtcGllOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZmYnO1xufVxuXG4vKiAn7qO/JyAqL1xuLmljb24tY2hhcnQtbGluZTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOTAwJztcbn1cblxuLyogJ+6kgCcgKi9cbi5pY29uLWNoYXJ0LWFyZWE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkwMSc7XG59XG5cbi8qICfupIEnICovXG4uaWNvbi1jaGFydC1iYXItMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOTAyJztcbn1cblxuLyogJ+6kgicgKi9cbi5pY29uLWFpcjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOTA1Jztcbn1cblxuLyogJ+6khScgKi9cbi5pY29uLWRhdGFiYXNlLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkwNic7XG59XG5cbi8qICfupIYnICovXG4uaWNvbi1mbG93LWNhc2NhZGU6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkwNyc7XG59XG5cbi8qICfupIcnICovXG4uaWNvbi1mbG93LXRyZWU6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkwOCc7XG59XG5cbi8qICfupIgnICovXG4uaWNvbi1mbG93LWxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkwOSc7XG59XG5cbi8qICfupIknICovXG4uaWNvbi1mbG93LWJyYW5jaDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOTBhJztcbn1cblxuLyogJ+6kiicgKi9cbi5pY29uLWZsb3ctcGFyYWxsZWwtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOTBmJztcbn1cblxuLyogJ+6kjycgKi9cbi5pY29uLWRvdDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOTEwJztcbn1cblxuLyogJ+6kkCcgKi9cbi5pY29uLWRvdC0zOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU5MTEnO1xufVxuXG4vKiAn7qSRJyAqL1xuLmljb24tY2Q6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkxMic7XG59XG5cbi8qICfupJInICovXG4uaWNvbi1iYWNrLWluLXRpbWU6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkxMyc7XG59XG5cbi8qICfupJMnICovXG4uaWNvbi1saXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU5MTQnO1xufVxuXG4vKiAn7qSUJyAqL1xuLmljb24tbGlzdC1hZGQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkxNSc7XG59XG5cbi8qICfupJUnICovXG4uaWNvbi1wcm9ncmVzcy0wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU5MTknO1xufVxuXG4vKiAn7qSZJyAqL1xuLmljb24tcGVuY2lsLTI6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkxZCc7XG59XG5cbi8qICfupJ0nICovXG4uaWNvbi1jb2ctMjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOTFmJztcbn1cblxuLyogJ+6knycgKi9cbi5pY29uLWNvZy1jaXJjbGVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU5MjAnO1xufVxuXG4vKiAn7qSgJyAqL1xuLmljb24tY29nczpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOTIxJztcbn1cblxuLyogJ+6koScgKi9cbi5pY29uLWNhbGVuZGFyLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkyNCc7XG59XG5cbi8qICfupKQnICovXG4uaWNvbi1kb2MtbmV3OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU5MjUnO1xufVxuXG4vKiAn7qSlJyAqL1xuLypcbiAgIEFuaW1hdGlvbiBleGFtcGxlLCBmb3Igc3Bpbm5lcnNcbiovXG4uYW5pbWF0ZS1zcGluIHtcbiAgLXdlYmtpdC1hbmltYXRpb246IHNwaW4gMnMgaW5maW5pdGUgbGluZWFyO1xuICAtby1hbmltYXRpb246IHNwaW4gMnMgaW5maW5pdGUgbGluZWFyO1xuICBhbmltYXRpb246IHNwaW4gMnMgaW5maW5pdGUgbGluZWFyO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbkBrZXlmcmFtZXMgc3BpbiB7XG4gIDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgIC1tb3otdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgLW1zLXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgIC1vLXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcbiAgICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XG4gICAgLW1zLXRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XG4gICAgLW8tdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xuICB9XG59XG4iLCIvKlxuICogQSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdWJ5IGxpc3QgZnVuY3Rpb25zIGZyb20gQ29tcGFzczpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Db21wYXNzL2NvbXBhc3MvYmxvYi9zdGFibGUvbGliL2NvbXBhc3Mvc2Fzc19leHRlbnNpb25zL2Z1bmN0aW9ucy9saXN0cy5yYlxuICovXG5cblxuLy8gY29tcGFjdCBpcyBwYXJ0IG9mIGxpYnNhc3NcblxuQGZ1bmN0aW9uIC1jb21wYXNzLW50aCgkbGlzdCwgJHBsYWNlKSB7XG4gIC8vIFllcCwgU2Fzcy1saXN0cyBhcmUgMS1pbmRleGVkLlxuICBAaWYgJHBsYWNlID09IFwiZmlyc3RcIiB7XG4gICAgJHBsYWNlOiAxO1xuICB9XG4gIEBpZiAkcGxhY2UgPT0gXCJsYXN0XCIge1xuICAgICRwbGFjZTogbGVuZ3RoKCRsaXN0KTtcbiAgfVxuICBAcmV0dXJuIG50aCgkbGlzdCwgJHBsYWNlKTtcbn1cblxuLy8gY29tcGFzc19saXN0IGFuZCBjb21wYXNzX3NwYWNlX2xpc3QgY2FuJ3QgYmUgaW1wbGVtZW50ZWQgaW4gc2FzcyBzY3JpcHRcblxuQGZ1bmN0aW9uIC1jb21wYXNzLWxpc3Qtc2l6ZSgkbGlzdCkge1xuICBAcmV0dXJuIGxlbmd0aCgkbGlzdCk7XG59XG5cbkBmdW5jdGlvbiAtY29tcGFzcy1zbGljZSgkbGlzdCwgJHN0YXJ0LCAkZW5kOiBmYWxzZSkge1xuICBAaWYgJGVuZCA9PSBmYWxzZSB7XG4gICAgJGVuZDogbGVuZ3RoKCRsaXN0KTtcbiAgfVxuICAkZnVsbDogbnRoKCRsaXN0LCAkc3RhcnQpO1xuICBAZm9yICRpIGZyb20gJHN0YXJ0ICsgMSB0aHJvdWdoICRlbmQge1xuICAgICRmdWxsOiAkZnVsbCwgbnRoKCRsaXN0LCAkaSk7XG4gIH1cbiAgQHJldHVybiAkZnVsbDtcbn1cblxuQGZ1bmN0aW9uIHJlamVjdCgkbGlzdCwgJHJlamVjdDEsICRyZWplY3QyOm51bGwsICRyZWplY3QzOm51bGwsICRyZWplY3Q0Om51bGwsICRyZWplY3Q1Om51bGwsICRyZWplY3Q2Om51bGwsICRyZWplY3Q3Om51bGwsICRyZWplY3Q4Om51bGwsICRyZWplY3Q5Om51bGwpIHtcbiAgJHJlamVjdHM6ICRyZWplY3QxLCAkcmVqZWN0MiwgJHJlamVjdDMsICRyZWplY3Q0LCAkcmVqZWN0NSwgJHJlamVjdDYsICRyZWplY3Q3LCAkcmVqZWN0OCwgJHJlamVjdDk7XG5cbiAgJGZ1bGw6IGZhbHNlO1xuICBAZWFjaCAkaXRlbSBpbiAkbGlzdCB7XG4gICAgQGlmIGluZGV4KCRyZWplY3RzLCAkaXRlbSkge31cbiAgICBAZWxzZSB7XG4gICAgICBAaWYgJGZ1bGwge1xuICAgICAgICAkZnVsbDogJGZ1bGwsICRpdGVtO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICAkZnVsbDogJGl0ZW07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEByZXR1cm4gJGZ1bGw7XG59XG4iLCIvKlxuICogQSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdWJ5IGNvbnN0YW50cyBmdW5jdGlvbnMgZnJvbSBDb21wYXNzOlxuICogaHR0cHM6Ly9naXRodWIuY29tL0NvbXBhc3MvY29tcGFzcy9ibG9iL3N0YWJsZS9saWIvY29tcGFzcy9zYXNzX2V4dGVuc2lvbnMvZnVuY3Rpb25zL2NvbnN0YW50cy5yYlxuICovXG5cbkBmdW5jdGlvbiBvcHBvc2l0ZS1wb3NpdGlvbigkZnJvbSkge1xuICAgIEBpZiAoJGZyb20gPT0gdG9wKSB7XG4gICAgICAgIEByZXR1cm4gYm90dG9tO1xuICAgIH0gQGVsc2UgaWYgKCRmcm9tID09IGJvdHRvbSkge1xuICAgICAgICBAcmV0dXJuIHRvcDtcbiAgICB9IEBlbHNlIGlmICgkZnJvbSA9PSBsZWZ0KSB7XG4gICAgICAgIEByZXR1cm4gcmlnaHQ7XG4gICAgfSBAZWxzZSBpZiAoJGZyb20gPT0gcmlnaHQpIHtcbiAgICAgICAgQHJldHVybiBsZWZ0O1xuICAgIH0gQGVsc2UgaWYgKCRmcm9tID09IGNlbnRlcikge1xuICAgICAgICBAcmV0dXJuIGNlbnRlcjtcbiAgICB9XG59XG4iLCIvKlxuICogQSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdWJ5IGRpc3BsYXkgZnVuY3Rpb25zIGZyb20gQ29tcGFzczpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Db21wYXNzL2NvbXBhc3MvYmxvYi9zdGFibGUvY29yZS9saWIvY29tcGFzcy9jb3JlL3Nhc3NfZXh0ZW5zaW9ucy9mdW5jdGlvbnMvZGlzcGxheS5yYlxuICovXG5cbkBmdW5jdGlvbiBlbGVtZW50cy1vZi10eXBlKCR0eXBlKXtcbiAgICBAaWYgKCR0eXBlID09IGJsb2NrKXtcbiAgICAgICAgQHJldHVybiBhZGRyZXNzLCBhcnRpY2xlLCBhc2lkZSwgYmxvY2txdW90ZSwgY2VudGVyLCBkaXIsIGRpdiwgZGQsIGRldGFpbHMsIGRsLCBkdCwgZmllbGRzZXQsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9ybSwgZm9vdGVyLCBmcmFtZXNldCwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgaHIsIGhlYWRlciwgaGdyb3VwLCBpc2luZGV4LCBtYWluLCBtZW51LCBuYXYsIG5vZnJhbWVzLCBub3NjcmlwdCwgb2wsIHAsIHByZSwgc2VjdGlvbiwgc3VtbWFyeSwgdWw7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gaW5saW5lKXtcbiAgICAgICAgQHJldHVybiBhLCBhYmJyLCBhY3JvbnltLCBhdWRpbywgYiwgYmFzZWZvbnQsIGJkbywgYmlnLCBiciwgY2FudmFzLCBjaXRlLCBjb2RlLCBjb21tYW5kLCBkYXRhbGlzdCwgZGZuLCBlbSwgZW1iZWQsIGZvbnQsIGksIGltZywgaW5wdXQsIGtleWdlbiwga2JkLCBsYWJlbCwgbWFyaywgbWV0ZXIsIG91dHB1dCwgcHJvZ3Jlc3MsIHEsIHJwLCBydCwgcnVieSwgcywgc2FtcCwgc2VsZWN0LCBzbWFsbCwgc3Bhbiwgc3RyaWtlLCBzdHJvbmcsIHN1Yiwgc3VwLCB0ZXh0YXJlYSwgdGltZSwgdHQsIHUsIHZhciwgdmlkZW8sIHdicjtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSBpbmxpbmUtYmxvY2spe1xuICAgICAgICBAcmV0dXJuIGltZztcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSB0YWJsZSl7XG4gICAgICAgIEByZXR1cm4gdGFibGU7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gbGlzdC1pdGVtKXtcbiAgICAgICAgQHJldHVybiBsaTtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSB0YWJsZS1yb3ctZ3JvdXApe1xuICAgICAgICBAcmV0dXJuIHRib2R5O1xuICAgIH0gQGVsc2UgaWYgKCR0eXBlID09IHRhYmxlLWhlYWRlci1ncm91cCl7XG4gICAgICAgIEByZXR1cm4gdGhlYWQ7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gdGFibGUtZm9vdGVyLWdyb3VwKXtcbiAgICAgICAgQHJldHVybiB0Zm9vdDtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSB0YWJsZS1yb3cpe1xuICAgICAgICBAcmV0dXJuIHRyO1xuICAgIH0gQGVsc2UgaWYgKCR0eXBlID09IHRhYmxlLWNlbGwpe1xuICAgICAgICBAcmV0dXJuIHRoLCB0ZDtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSBodG1sNS1ibG9jayl7XG4gICAgICAgIEByZXR1cm4gYXJ0aWNsZSwgYXNpZGUsIGRldGFpbHMsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWFpbiwgbWVudSwgbmF2LCBzZWN0aW9uLCBzdW1tYXJ5O1xuICAgIH0gQGVsc2UgaWYgKCR0eXBlID09IGh0bWw1LWlubGluZSl7XG4gICAgICAgIEByZXR1cm4gYXVkaW8sIGNhbnZhcywgY29tbWFuZCwgZGF0YWxpc3QsIGVtYmVkLCBrZXlnZW4sIG1hcmssIG1ldGVyLCBvdXRwdXQsIHByb2dyZXNzLCBycCwgcnQsIHJ1YnksIHRpbWUsIHZpZGVvLCB3YnI7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gaHRtbDUpe1xuICAgICAgICBAcmV0dXJuIGFydGljbGUsIGFzaWRlLCBhdWRpbywgY2FudmFzLCBjb21tYW5kLCBkYXRhbGlzdCwgZGV0YWlscywgZW1iZWQsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwga2V5Z2VuLCBtYWluLCBtYXJrLCBtZW51LCBtZXRlciwgbmF2LCBvdXRwdXQsIHByb2dyZXNzLCBycCwgcnQsIHJ1YnksIHNlY3Rpb24sIHN1bW1hcnksIHRpbWUsIHZpZGVvLCB3YnI7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gdGV4dC1pbnB1dCl7XG4gICAgICAgIEByZXR1cm4gaW5wdXQsIHRleHRhcmVhO1xuICAgIH1cbn1cbiIsIkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ2ZvbnRlbGxvJztcbiAgc3JjOiB1cmwoJyN7JGljb24tZm9udC1wYXRofWZvbnRlbGxvLmVvdCcpO1xuICBzcmM6IHVybCgnI3skaWNvbi1mb250LXBhdGh9Zm9udGVsbG8uZW90I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLFxuICAgICAgIHVybCgnI3skaWNvbi1mb250LXBhdGh9Zm9udGVsbG8ud29mZicpIGZvcm1hdCgnd29mZicpLFxuICAgICAgIHVybCgnI3skaWNvbi1mb250LXBhdGh9Zm9udGVsbG8udHRmJykgZm9ybWF0KCd0cnVldHlwZScpLFxuICAgICAgIHVybCgnI3skaWNvbi1mb250LXBhdGh9Zm9udGVsbG8uc3ZnI2ZvbnRlbGxvJykgZm9ybWF0KCdzdmcnKTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG5cbi8qIENocm9tZSBoYWNrOiBTVkcgaXMgcmVuZGVyZWQgbW9yZSBzbW9vdGggaW4gV2luZG96emUuIDEwMCUgbWFnaWMsIHVuY29tbWVudCBpZiB5b3UgbmVlZCBpdC4gKi9cbi8qIE5vdGUsIHRoYXQgd2lsbCBicmVhayBoaW50aW5nISBJbiBvdGhlciBPUy1lcyBmb250IHdpbGwgYmUgbm90IGFzIHNoYXJwIGFzIGl0IGNvdWxkIGJlICovXG4vKlxuQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKSB7XG4gIEBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnZm9udGVsbG8nO1xuICAgIHNyYzogdXJsKCcuLi9mb250L2ZvbnRlbGxvLnN2Zz85OTMyMDk0NSNmb250ZWxsbycpIGZvcm1hdCgnc3ZnJyk7XG4gIH1cbn1cbiovXG4gXG4gW2NsYXNzXj1cImljb24tXCJdOmJlZm9yZSwgW2NsYXNzKj1cIiBpY29uLVwiXTpiZWZvcmUge1xuICBmb250LWZhbWlseTogXCJmb250ZWxsb1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIHNwZWFrOiBub25lO1xuIFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRleHQtZGVjb3JhdGlvbjogaW5oZXJpdDtcbiAgd2lkdGg6IDFlbTtcbiAgbWFyZ2luLXJpZ2h0OiAuMmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIC8qIG9wYWNpdHk6IC44OyAqL1xuIFxuICAvKiBGb3Igc2FmZXR5IC0gcmVzZXQgcGFyZW50IHN0eWxlcywgdGhhdCBjYW4gYnJlYWsgZ2x5cGggY29kZXMqL1xuICBmb250LXZhcmlhbnQ6IG5vcm1hbDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgIFxuICAvKiBmaXggYnV0dG9ucyBoZWlnaHQsIGZvciB0d2l0dGVyIGJvb3RzdHJhcCAqL1xuICBsaW5lLWhlaWdodDogMWVtO1xuIFxuICAvKiBBbmltYXRpb24gY2VudGVyIGNvbXBlbnNhdGlvbiAtIG1hcmdpbnMgc2hvdWxkIGJlIHN5bW1ldHJpYyAqL1xuICAvKiByZW1vdmUgaWYgbm90IG5lZWRlZCAqL1xuICBtYXJnaW4tbGVmdDogLjJlbTtcbiBcbiAgLyogeW91IGNhbiBiZSBtb3JlIGNvbWZvcnRhYmxlIHdpdGggaW5jcmVhc2VkIGljb25zIHNpemUgKi9cbiAgLyogZm9udC1zaXplOiAxMjAlOyAqL1xuIFxuICAvKiBVbmNvbW1lbnQgZm9yIDNEIGVmZmVjdCAqL1xuICAvKiB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggcmdiYSgxMjcsIDEyNywgMTI3LCAwLjMpOyAqL1xufVxuIFxuLmljb24tdXNlcjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODAwJzsgfSAvKiAn7qCAJyAqL1xuLmljb24taGVscC1jaXJjbGVkOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MDEnOyB9IC8qICfuoIEnICovXG4uaWNvbi1zZWFyY2g6YmVmb3JlIHsgY29udGVudDogJ1xcZTgwMic7IH0gLyogJ+6ggicgKi9cbi5pY29uLXRhZzpiZWZvcmUgeyBjb250ZW50OiAnXFxlODAzJzsgfSAvKiAn7qCDJyAqL1xuLmljb24tZG90LTI6YmVmb3JlIHsgY29udGVudDogJ1xcZTgwNCc7IH0gLyogJ+6ghCcgKi9cbi5pY29uLWFycm93cy1jdzpiZWZvcmUgeyBjb250ZW50OiAnXFxlODA1JzsgfSAvKiAn7qCFJyAqL1xuLmljb24tcHJpbnQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTgwNic7IH0gLyogJ+6ghicgKi9cbi5pY29uLWNhbmNlbC1jaXJjbGVkOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MDcnOyB9IC8qICfuoIcnICovXG4uaWNvbi1lZGl0LWFsdDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODA4JzsgfSAvKiAn7qCIJyAqL1xuLmljb24tbG9naW46YmVmb3JlIHsgY29udGVudDogJ1xcZTgwOSc7IH0gLyogJ+6giScgKi9cbi5pY29uLWxvZ291dDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODBhJzsgfSAvKiAn7qCKJyAqL1xuLmljb24tZG93bmxvYWQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTgwYic7IH0gLyogJ+6giycgKi9cbi5pY29uLXRoLWxhcmdlOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MGMnOyB9IC8qICfuoIwnICovXG4uaWNvbi10aDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODBkJzsgfSAvKiAn7qCNJyAqL1xuLmljb24tdGgtbGlzdDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODBlJzsgfSAvKiAn7qCOJyAqL1xuLmljb24tc3RhcjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODBmJzsgfSAvKiAn7qCPJyAqL1xuLmljb24tc3Rhci1lbXB0eTpiZWZvcmUgeyBjb250ZW50OiAnXFxlODEwJzsgfSAvKiAn7qCQJyAqL1xuLmljb24tdXNlcnM6YmVmb3JlIHsgY29udGVudDogJ1xcZTgxMSc7IH0gLyogJ+6gkScgKi9cbi5pY29uLXVwbG9hZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODEyJzsgfSAvKiAn7qCSJyAqL1xuLmljb24tY2lyY2xlLXRoaW46YmVmb3JlIHsgY29udGVudDogJ1xcZTgxMyc7IH0gLyogJ+6gkycgKi9cbi5pY29uLWRvdC1jaXJjbGVkOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MTQnOyB9IC8qICfuoJQnICovXG4uaWNvbi1vazpiZWZvcmUgeyBjb250ZW50OiAnXFxlODE1JzsgfSAvKiAn7qCVJyAqL1xuLmljb24tY2hlY2stZW1wdHktMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlODE2JzsgfSAvKiAn7qCWJyAqL1xuLmljb24tY2xvY2stMjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODE3JzsgfSAvKiAn7qCXJyAqL1xuLmljb24tb2stc3F1YXJlZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODE4JzsgfSAvKiAn7qCYJyAqL1xuLmljb24tcGluOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MjAnOyB9IC8qICfuoKAnICovXG4uaWNvbi1leWU6YmVmb3JlIHsgY29udGVudDogJ1xcZTgyMSc7IH0gLyogJ+6goScgKi9cbi5pY29uLWF0dGFjaDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODI0JzsgfSAvKiAn7qCkJyAqL1xuLmljb24tdW5saW5rOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MjUnOyB9IC8qICfuoKUnICovXG4uaWNvbi1saW5rOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MjYnOyB9IC8qICfuoKYnICovXG4uaWNvbi1ob21lOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MjcnOyB9IC8qICfuoKcnICovXG4uaWNvbi1pbmZvOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MjgnOyB9IC8qICfuoKgnICovXG4uaWNvbi1pbmZvLWNpcmNsZWQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTgyOSc7IH0gLyogJ+6gqScgKi9cbi5pY29uLWV4cG9ydDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODJmJzsgfSAvKiAn7qCvJyAqL1xuLmljb24tZXhwb3J0LWFsdDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODMwJzsgfSAvKiAn7qCwJyAqL1xuLmljb24tc2hhcmU6YmVmb3JlIHsgY29udGVudDogJ1xcZTgzMSc7IH0gLyogJ+6gsScgKi9cbi5pY29uLXNoYXJlLXNxdWFyZWQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTgzMic7IH0gLyogJ+6gsicgKi9cbi5pY29uLXJldHdlZXQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTgzNic7IH0gLyogJ+6gticgKi9cbi5pY29uLWF0dGVudGlvbi1hbHQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTgzNyc7IH0gLyogJ+6gtycgKi9cbi5pY29uLWF0dGVudGlvbjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODM4JzsgfSAvKiAn7qC4JyAqL1xuLmljb24tYXR0ZW50aW9uLWNpcmNsZWQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTgzOSc7IH0gLyogJ+6guScgKi9cbi5pY29uLWxvY2F0aW9uOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4M2EnOyB9IC8qICfuoLonICovXG4uaWNvbi10cmFzaDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODNiJzsgfSAvKiAn7qC7JyAqL1xuLmljb24tZG9jOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4M2MnOyB9IC8qICfuoLwnICovXG4uaWNvbi1kb2NzOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4M2QnOyB9IC8qICfuoL0nICovXG4uaWNvbi1kb2MtdGV4dDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODNlJzsgfSAvKiAn7qC+JyAqL1xuLmljb24tZG9jLWludjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODNmJzsgfSAvKiAn7qC/JyAqL1xuLmljb24tZG9jLXRleHQtaW52OmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NDAnOyB9IC8qICfuoYAnICovXG4uaWNvbi1maWxlLXBkZjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODQxJzsgfSAvKiAn7qGBJyAqL1xuLmljb24tZmlsZS13b3JkOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NDInOyB9IC8qICfuoYInICovXG4uaWNvbi1maWxlLWV4Y2VsOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NDMnOyB9IC8qICfuoYMnICovXG4uaWNvbi1maWxlLXBvd2VycG9pbnQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTg0NCc7IH0gLyogJ+6hhCcgKi9cbi5pY29uLWZpbGUtaW1hZ2U6YmVmb3JlIHsgY29udGVudDogJ1xcZTg0NSc7IH0gLyogJ+6hhScgKi9cbi5pY29uLWNvZzpiZWZvcmUgeyBjb250ZW50OiAnXFxlODRiJzsgfSAvKiAn7qGLJyAqL1xuLmljb24tY29nLWFsdDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODRjJzsgfSAvKiAn7qGMJyAqL1xuLmljb24td3JlbmNoOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NGQnOyB9IC8qICfuoY0nICovXG4uaWNvbi1jYWxlbmRhcjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODRlJzsgfSAvKiAn7qGOJyAqL1xuLmljb24tY2FsZW5kYXItZW1wdHk6YmVmb3JlIHsgY29udGVudDogJ1xcZTg0Zic7IH0gLyogJ+6hjycgKi9cbi5pY29uLWNsb2NrOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NTInOyB9IC8qICfuoZInICovXG4uaWNvbi1ibG9jazpiZWZvcmUgeyBjb250ZW50OiAnXFxlODUzJzsgfSAvKiAn7qGTJyAqL1xuLmljb24tem9vbS1pbjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODU3JzsgfSAvKiAn7qGXJyAqL1xuLmljb24tem9vbS1vdXQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTg1OCc7IH0gLyogJ+6hmCcgKi9cbi5pY29uLWRvd24tY2lyY2xlZDI6YmVmb3JlIHsgY29udGVudDogJ1xcZTg1OSc7IH0gLyogJ+6hmScgKi9cbi5pY29uLXVwLWNpcmNsZWQyOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NWEnOyB9IC8qICfuoZonICovXG4uaWNvbi1sZWZ0LWNpcmNsZWQyOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NWInOyB9IC8qICfuoZsnICovXG4uaWNvbi1yaWdodC1jaXJjbGVkMjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODVjJzsgfSAvKiAn7qGcJyAqL1xuLmljb24tZG93bi1kaXI6YmVmb3JlIHsgY29udGVudDogJ1xcZTg1ZCc7IH0gLyogJ+6hnScgKi9cbi5pY29uLXVwLWRpcjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODVlJzsgfSAvKiAn7qGeJyAqL1xuLmljb24tbGVmdC1kaXI6YmVmb3JlIHsgY29udGVudDogJ1xcZTg1Zic7IH0gLyogJ+6hnycgKi9cbi5pY29uLXJpZ2h0LWRpcjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODYwJzsgfSAvKiAn7qGgJyAqL1xuLmljb24tZG93bi1vcGVuOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NjEnOyB9IC8qICfuoaEnICovXG4uaWNvbi1sZWZ0LW9wZW46YmVmb3JlIHsgY29udGVudDogJ1xcZTg2Mic7IH0gLyogJ+6hoicgKi9cbi5pY29uLXJpZ2h0LW9wZW46YmVmb3JlIHsgY29udGVudDogJ1xcZTg2Myc7IH0gLyogJ+6hoycgKi9cbi5pY29uLXVwLW9wZW46YmVmb3JlIHsgY29udGVudDogJ1xcZTg2NCc7IH0gLyogJ+6hpCcgKi9cbi5pY29uLWFuZ2xlLWxlZnQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTg2NSc7IH0gLyogJ+6hpScgKi9cbi5pY29uLWFuZ2xlLXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NjYnOyB9IC8qICfuoaYnICovXG4uaWNvbi1hbmdsZS11cDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODY3JzsgfSAvKiAn7qGnJyAqL1xuLmljb24tYW5nbGUtZG93bjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODY4JzsgfSAvKiAn7qGoJyAqL1xuLmljb24tYW5nbGUtY2lyY2xlZC1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NjknOyB9IC8qICfuoaknICovXG4uaWNvbi1hbmdsZS1jaXJjbGVkLXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NmEnOyB9IC8qICfuoaonICovXG4uaWNvbi1hbmdsZS1jaXJjbGVkLXVwOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NmInOyB9IC8qICfuoasnICovXG4uaWNvbi1hbmdsZS1jaXJjbGVkLWRvd246YmVmb3JlIHsgY29udGVudDogJ1xcZTg2Yyc7IH0gLyogJ+6hrCcgKi9cbi5pY29uLWFuZ2xlLWRvdWJsZS1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NmQnOyB9IC8qICfuoa0nICovXG4uaWNvbi1hbmdsZS1kb3VibGUtcmlnaHQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTg2ZSc7IH0gLyogJ+6hricgKi9cbi5pY29uLWFuZ2xlLWRvdWJsZS11cDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODZmJzsgfSAvKiAn7qGvJyAqL1xuLmljb24tYW5nbGUtZG91YmxlLWRvd246YmVmb3JlIHsgY29udGVudDogJ1xcZTg3MCc7IH0gLyogJ+6hsCcgKi9cbi5pY29uLWRvd24tYmlnOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NzEnOyB9IC8qICfuobEnICovXG4uaWNvbi1sZWZ0LWJpZzpiZWZvcmUgeyBjb250ZW50OiAnXFxlODcyJzsgfSAvKiAn7qGyJyAqL1xuLmljb24tcmlnaHQtYmlnOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NzMnOyB9IC8qICfuobMnICovXG4uaWNvbi11cC1iaWc6YmVmb3JlIHsgY29udGVudDogJ1xcZTg3NCc7IH0gLyogJ+6htCcgKi9cbi5pY29uLWxlZnQtY2lyY2xlZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODc1JzsgfSAvKiAn7qG1JyAqL1xuLmljb24tcmlnaHQtY2lyY2xlZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODc2JzsgfSAvKiAn7qG2JyAqL1xuLmljb24tdXAtY2lyY2xlZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODc3JzsgfSAvKiAn7qG3JyAqL1xuLmljb24tZG93bi1jaXJjbGVkOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NzgnOyB9IC8qICfuobgnICovXG4uaWNvbi1jdzpiZWZvcmUgeyBjb250ZW50OiAnXFxlODc5JzsgfSAvKiAn7qG5JyAqL1xuLmljb24tY2N3OmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4N2EnOyB9IC8qICfuobonICovXG4uaWNvbi1sZXZlbC11cDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODdjJzsgfSAvKiAn7qG8JyAqL1xuLmljb24tbGV2ZWwtZG93bjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODdkJzsgfSAvKiAn7qG9JyAqL1xuLmljb24tc2h1ZmZsZTpiZWZvcmUgeyBjb250ZW50OiAnXFxlODdlJzsgfSAvKiAn7qG+JyAqL1xuLmljb24tZXhjaGFuZ2U6YmVmb3JlIHsgY29udGVudDogJ1xcZTg3Zic7IH0gLyogJ+6hvycgKi9cbi5pY29uLWhpc3Rvcnk6YmVmb3JlIHsgY29udGVudDogJ1xcZTg4MCc7IH0gLyogJ+6igCcgKi9cbi5pY29uLWV4cGFuZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODgxJzsgfSAvKiAn7qKBJyAqL1xuLmljb24tY29sbGFwc2U6YmVmb3JlIHsgY29udGVudDogJ1xcZTg4Mic7IH0gLyogJ+6igicgKi9cbi5pY29uLWV4cGFuZC1yaWdodDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODgzJzsgfSAvKiAn7qKDJyAqL1xuLmljb24tY29sbGFwc2UtbGVmdDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODg0JzsgfSAvKiAn7qKEJyAqL1xuLmljb24tcGxheTpiZWZvcmUgeyBjb250ZW50OiAnXFxlODg1JzsgfSAvKiAn7qKFJyAqL1xuLmljb24tcGxheS1jaXJjbGVkMjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODg2JzsgfSAvKiAn7qKGJyAqL1xuLmljb24tcGxheS1jaXJjbGVkOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4ODcnOyB9IC8qICfuoocnICovXG4uaWNvbi1zdG9wOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4ODgnOyB9IC8qICfuoognICovXG4uaWNvbi1jbG91ZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODg5JzsgfSAvKiAn7qKJJyAqL1xuLmljb24tdGFibGU6YmVmb3JlIHsgY29udGVudDogJ1xcZTg4YSc7IH0gLyogJ+6iiicgKi9cbi5pY29uLW9mZjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODhiJzsgfSAvKiAn7qKLJyAqL1xuLmljb24tY2hlY2s6YmVmb3JlIHsgY29udGVudDogJ1xcZTg4Yyc7IH0gLyogJ+6ijCcgKi9cbi5pY29uLWFzdGVyaXNrOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4OGUnOyB9IC8qICfuoo4nICovXG4uaWNvbi1jaGFydC1iYXI6YmVmb3JlIHsgY29udGVudDogJ1xcZTg4Zic7IH0gLyogJ+6ijycgKi9cbi5pY29uLWJ1ZzpiZWZvcmUgeyBjb250ZW50OiAnXFxlODkwJzsgfSAvKiAn7qKQJyAqL1xuLmljb24tY2VydGlmaWNhdGU6YmVmb3JlIHsgY29udGVudDogJ1xcZTg5MSc7IH0gLyogJ+6ikScgKi9cbi5pY29uLXRhc2tzOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4OTInOyB9IC8qICfuopInICovXG4uaWNvbi1zb3J0LXVwOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4OTMnOyB9IC8qICfuopMnICovXG4uaWNvbi1zb3J0LWRvd246YmVmb3JlIHsgY29udGVudDogJ1xcZTg5NCc7IH0gLyogJ+6ilCcgKi9cbi5pY29uLXNvcnQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTg5NSc7IH0gLyogJ+6ilScgKi9cbi5pY29uLWdhdWdlOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4OTYnOyB9IC8qICfuopYnICovXG4uaWNvbi1zcGlubmVyOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4OTcnOyB9IC8qICfuopcnICovXG4uaWNvbi1kYXRhYmFzZTpiZWZvcmUgeyBjb250ZW50OiAnXFxlODk4JzsgfSAvKiAn7qKYJyAqL1xuLmljb24tbGlmZWJ1b3k6YmVmb3JlIHsgY29udGVudDogJ1xcZTg5OSc7IH0gLyogJ+6imScgKi9cbi5pY29uLWN1YmVzOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4OWEnOyB9IC8qICfuoponICovXG4uaWNvbi1jdWJlOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4OWInOyB9IC8qICfuopsnICovXG4uaWNvbi1idWxsc2V5ZTpiZWZvcmUgeyBjb250ZW50OiAnXFxlODljJzsgfSAvKiAn7qKcJyAqL1xuLmljb24td2luZG93czpiZWZvcmUgeyBjb250ZW50OiAnXFxlODlkJzsgfSAvKiAn7qKdJyAqL1xuLmljb24tY2FuY2VsLWNpcmNsZWQtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlODllJzsgfSAvKiAn7qKeJyAqL1xuLmljb24tcGx1cy0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4YTAnOyB9IC8qICfuoqAnICovXG4uaWNvbi1wbHVzLWNpcmNsZWQtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGExJzsgfSAvKiAn7qKhJyAqL1xuLmljb24tbWludXMtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGEzJzsgfSAvKiAn7qKjJyAqL1xuLmljb24tbWludXMtY2lyY2xlZC0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4YTQnOyB9IC8qICfuoqQnICovXG4uaWNvbi1oZWxwLWNpcmNsZWQtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGE3JzsgfSAvKiAn7qKnJyAqL1xuLmljb24taGVhcnQtZW1wdHktMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGFhJzsgfSAvKiAn7qKqJyAqL1xuLmljb24tbWFpbC0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4YWInOyB9IC8qICfuoqsnICovXG4uaWNvbi1zdGFyLTE6YmVmb3JlIHsgY29udGVudDogJ1xcZThhYyc7IH0gLyogJ+6irCcgKi9cbi5pY29uLXN0YXItZW1wdHktMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGFkJzsgfSAvKiAn7qKtJyAqL1xuLmljb24tbGluay0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4YWUnOyB9IC8qICfuoq4nICovXG4uaWNvbi1hdHRhY2gtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGFmJzsgfSAvKiAn7qKvJyAqL1xuLmljb24tZXllLTE6YmVmb3JlIHsgY29udGVudDogJ1xcZThiMic7IH0gLyogJ+6isicgKi9cbi5pY29uLWF0dGVudGlvbi0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4YjMnOyB9IC8qICfuorMnICovXG4uaWNvbi1kb2MtdGV4dC0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4YjQnOyB9IC8qICfuorQnICovXG4uaWNvbi1kb2MtdGV4dC1pbnYtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGI1JzsgfSAvKiAn7qK1JyAqL1xuLmljb24tc2hhcmUtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGI3JzsgfSAvKiAn7qK3JyAqL1xuLmljb24tc2hhcmVhYmxlOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4YjgnOyB9IC8qICfuorgnICovXG4uaWNvbi1jY3ctMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGNjJzsgfSAvKiAn7qOMJyAqL1xuLmljb24tY3ctMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGNkJzsgfSAvKiAn7qONJyAqL1xuLmljb24tYXJyb3dzLWNjdzpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGNlJzsgfSAvKiAn7qOOJyAqL1xuLmljb24tcGxheS0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4Y2YnOyB9IC8qICfuo48nICovXG4uaWNvbi1wYXVzZTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGQwJzsgfSAvKiAn7qOQJyAqL1xuLmljb24tcmVjb3JkOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4ZDEnOyB9IC8qICfuo5EnICovXG4uaWNvbi1zdG9wLTE6YmVmb3JlIHsgY29udGVudDogJ1xcZThkMic7IH0gLyogJ+6jkicgKi9cbi5pY29uLXN3aXRjaDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGQzJzsgfSAvKiAn7qOTJyAqL1xuLmljb24tbG9vcDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGQ0JzsgfSAvKiAn7qOUJyAqL1xuLmljb24tY2xvdWQtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGQ1JzsgfSAvKiAn7qOVJyAqL1xuLmljb24tY2VydGlmaWNhdGUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGRiJzsgfSAvKiAn7qObJyAqL1xuLmljb24tY2VydGlmaWNhdGUtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGRjJzsgfSAvKiAn7qOcJyAqL1xuLmljb24td2luZG93cy0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4ZGQnOyB9IC8qICfuo50nICovXG4uaWNvbi1zcGluNTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGRmJzsgfSAvKiAn7qOfJyAqL1xuLmljb24tc3BpbjI6YmVmb3JlIHsgY29udGVudDogJ1xcZThlMCc7IH0gLyogJ+6joCcgKi9cbi5pY29uLXBpY3R1cmU6YmVmb3JlIHsgY29udGVudDogJ1xcZThlNCc7IH0gLyogJ+6jpCcgKi9cbi5pY29uLW1lbnU6YmVmb3JlIHsgY29udGVudDogJ1xcZThlNSc7IH0gLyogJ+6jpScgKi9cbi5pY29uLXNsaWRlcnM6YmVmb3JlIHsgY29udGVudDogJ1xcZThlNic7IH0gLyogJ+6jpicgKi9cbi5pY29uLWxpc3QtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4ZTcnOyB9IC8qICfuo6cnICovXG4uaWNvbi1hanVzdDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGU4JzsgfSAvKiAn7qOoJyAqL1xuLmljb24tY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4ZTknOyB9IC8qICfuo6knICovXG4uaWNvbi1jaXJjbGUtZW1wdHk6YmVmb3JlIHsgY29udGVudDogJ1xcZThlYSc7IH0gLyogJ+6jqicgKi9cbi5pY29uLWNpcmNsZS1ub3RjaDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGVjJzsgfSAvKiAn7qOsJyAqL1xuLmljb24tZm9yazpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGVkJzsgfSAvKiAn7qOtJyAqL1xuLmljb24tc2l0ZW1hcDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGVlJzsgfSAvKiAn7qOuJyAqL1xuLmljb24tc3RldGhvc2NvcGU6YmVmb3JlIHsgY29udGVudDogJ1xcZThlZic7IH0gLyogJ+6jrycgKi9cbi5pY29uLXNoaWVsZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGYwJzsgfSAvKiAn7qOwJyAqL1xuLmljb24taGVhcnQtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGYxJzsgfSAvKiAn7qOxJyAqL1xuLmljb24tc2VhcmNoLTE6YmVmb3JlIHsgY29udGVudDogJ1xcZThmMic7IH0gLyogJ+6jsicgKi9cbi5pY29uLW1lbnUtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGYzJzsgfSAvKiAn7qOzJyAqL1xuLmljb24tYmFjazpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGY2JzsgfSAvKiAn7qO2JyAqL1xuLmljb24taG9tZS0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4ZjcnOyB9IC8qICfuo7cnICovXG4uaWNvbi1wZW5jaWwtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGY4JzsgfSAvKiAn7qO4JyAqL1xuLmljb24tbG9jYXRpb24tMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGY5JzsgfSAvKiAn7qO5JyAqL1xuLmljb24tbG9nb3V0LTE6YmVmb3JlIHsgY29udGVudDogJ1xcZThmYic7IH0gLyogJ+6juycgKi9cbi5pY29uLWxvZ2luLTE6YmVmb3JlIHsgY29udGVudDogJ1xcZThmYyc7IH0gLyogJ+6jvCcgKi9cbi5pY29uLXB1Ymxpc2g6YmVmb3JlIHsgY29udGVudDogJ1xcZThmZCc7IH0gLyogJ+6jvScgKi9cbi5pY29uLXdpbmRvdzpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGZlJzsgfSAvKiAn7qO+JyAqL1xuLmljb24tY2hhcnQtcGllOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4ZmYnOyB9IC8qICfuo78nICovXG4uaWNvbi1jaGFydC1saW5lOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MDAnOyB9IC8qICfupIAnICovXG4uaWNvbi1jaGFydC1hcmVhOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MDEnOyB9IC8qICfupIEnICovXG4uaWNvbi1jaGFydC1iYXItMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTAyJzsgfSAvKiAn7qSCJyAqL1xuLmljb24tYWlyOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MDUnOyB9IC8qICfupIUnICovXG4uaWNvbi1kYXRhYmFzZS0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MDYnOyB9IC8qICfupIYnICovXG4uaWNvbi1mbG93LWNhc2NhZGU6YmVmb3JlIHsgY29udGVudDogJ1xcZTkwNyc7IH0gLyogJ+6khycgKi9cbi5pY29uLWZsb3ctdHJlZTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTA4JzsgfSAvKiAn7qSIJyAqL1xuLmljb24tZmxvdy1saW5lOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MDknOyB9IC8qICfupIknICovXG4uaWNvbi1mbG93LWJyYW5jaDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTBhJzsgfSAvKiAn7qSKJyAqL1xuLmljb24tZmxvdy1wYXJhbGxlbC0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MGYnOyB9IC8qICfupI8nICovXG4uaWNvbi1kb3Q6YmVmb3JlIHsgY29udGVudDogJ1xcZTkxMCc7IH0gLyogJ+6kkCcgKi9cbi5pY29uLWRvdC0zOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MTEnOyB9IC8qICfupJEnICovXG4uaWNvbi1jZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTEyJzsgfSAvKiAn7qSSJyAqL1xuLmljb24tYmFjay1pbi10aW1lOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MTMnOyB9IC8qICfupJMnICovXG4uaWNvbi1saXN0OmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MTQnOyB9IC8qICfupJQnICovXG4uaWNvbi1saXN0LWFkZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTE1JzsgfSAvKiAn7qSVJyAqL1xuLmljb24tcHJvZ3Jlc3MtMDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTE5JzsgfSAvKiAn7qSZJyAqL1xuLmljb24tcGVuY2lsLTI6YmVmb3JlIHsgY29udGVudDogJ1xcZTkxZCc7IH0gLyogJ+6knScgKi9cbi5pY29uLWNvZy0yOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MWYnOyB9IC8qICfupJ8nICovXG4uaWNvbi1jb2ctY2lyY2xlZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTIwJzsgfSAvKiAn7qSgJyAqL1xuLmljb24tY29nczpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTIxJzsgfSAvKiAn7qShJyAqL1xuLmljb24tY2FsZW5kYXItMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTI0JzsgfSAvKiAn7qSkJyAqL1xuLmljb24tZG9jLW5ldzpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTI1JzsgfSAvKiAn7qSlJyAqLyIsIi8qXG4gICBBbmltYXRpb24gZXhhbXBsZSwgZm9yIHNwaW5uZXJzXG4qL1xuLmFuaW1hdGUtc3BpbiB7XG4gIEBpbmNsdWRlIGFuaW1hdGlvbihzcGluIDJzIGluZmluaXRlIGxpbmVhcik7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbkBrZXlmcmFtZXMgc3BpbiB7XG4gIDAlIHtcbiAgICBAaW5jbHVkZSB0cmFuc2Zvcm0ocm90YXRlKDBkZWcpKTtcbiAgfVxuICAxMDAlIHtcbiAgICBAaW5jbHVkZSB0cmFuc2Zvcm0ocm90YXRlKDM1OWRlZykpO1xuICB9XG59IiwiLy8gVmVuZG9yIFByZWZpeGVzXG4vL1xuLy8gQWxsIHZlbmRvciBtaXhpbnMgYXJlIGRlcHJlY2F0ZWQgYXMgb2YgdjMuMi4wIGR1ZSB0byB0aGUgaW50cm9kdWN0aW9uIG9mXG4vLyBBdXRvcHJlZml4ZXIgaW4gb3VyIEdydW50ZmlsZS4gVGhleSB3aWxsIGJlIHJlbW92ZWQgaW4gdjQuXG5cbi8vIC0gQW5pbWF0aW9uc1xuLy8gLSBCYWNrZmFjZSB2aXNpYmlsaXR5XG4vLyAtIEJveCBzaGFkb3dcbi8vIC0gQm94IHNpemluZ1xuLy8gLSBDb250ZW50IGNvbHVtbnNcbi8vIC0gSHlwaGVuc1xuLy8gLSBQbGFjZWhvbGRlciB0ZXh0XG4vLyAtIFRyYW5zZm9ybWF0aW9uc1xuLy8gLSBUcmFuc2l0aW9uc1xuLy8gLSBVc2VyIFNlbGVjdFxuXG5cbi8vIEFuaW1hdGlvbnNcbkBtaXhpbiBhbmltYXRpb24oJGFuaW1hdGlvbikge1xuICAtd2Via2l0LWFuaW1hdGlvbjogJGFuaW1hdGlvbjtcbiAgICAgICAtby1hbmltYXRpb246ICRhbmltYXRpb247XG4gICAgICAgICAgYW5pbWF0aW9uOiAkYW5pbWF0aW9uO1xufVxuQG1peGluIGFuaW1hdGlvbi1uYW1lKCRuYW1lKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6ICRuYW1lO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAkbmFtZTtcbn1cbkBtaXhpbiBhbmltYXRpb24tZHVyYXRpb24oJGR1cmF0aW9uKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiAkZHVyYXRpb247XG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkZHVyYXRpb247XG59XG5AbWl4aW4gYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbigkdGltaW5nLWZ1bmN0aW9uKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHRpbWluZy1mdW5jdGlvbjtcbiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkdGltaW5nLWZ1bmN0aW9uO1xufVxuQG1peGluIGFuaW1hdGlvbi1kZWxheSgkZGVsYXkpIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6ICRkZWxheTtcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6ICRkZWxheTtcbn1cbkBtaXhpbiBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50KCRpdGVyYXRpb24tY291bnQpIHtcbiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAkaXRlcmF0aW9uLWNvdW50O1xuICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6ICRpdGVyYXRpb24tY291bnQ7XG59XG5AbWl4aW4gYW5pbWF0aW9uLWRpcmVjdGlvbigkZGlyZWN0aW9uKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogJGRpcmVjdGlvbjtcbiAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiAkZGlyZWN0aW9uO1xufVxuQG1peGluIGFuaW1hdGlvbi1maWxsLW1vZGUoJGZpbGwtbW9kZSkge1xuICAtd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6ICRmaWxsLW1vZGU7XG4gICAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogJGZpbGwtbW9kZTtcbn1cblxuLy8gQmFja2ZhY2UgdmlzaWJpbGl0eVxuLy8gUHJldmVudCBicm93c2VycyBmcm9tIGZsaWNrZXJpbmcgd2hlbiB1c2luZyBDU1MgM0QgdHJhbnNmb3Jtcy5cbi8vIERlZmF1bHQgdmFsdWUgaXMgYHZpc2libGVgLCBidXQgY2FuIGJlIGNoYW5nZWQgdG8gYGhpZGRlbmBcblxuQG1peGluIGJhY2tmYWNlLXZpc2liaWxpdHkoJHZpc2liaWxpdHkpe1xuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6ICR2aXNpYmlsaXR5O1xuICAgICAtbW96LWJhY2tmYWNlLXZpc2liaWxpdHk6ICR2aXNpYmlsaXR5O1xuICAgICAgICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6ICR2aXNpYmlsaXR5O1xufVxuXG4vLyBEcm9wIHNoYWRvd3Ncbi8vXG4vLyBOb3RlOiBEZXByZWNhdGVkIGAuYm94LXNoYWRvdygpYCBhcyBvZiB2My4xLjAgc2luY2UgYWxsIG9mIEJvb3RzdHJhcCdzXG4vLyBzdXBwb3J0ZWQgYnJvd3NlcnMgdGhhdCBoYXZlIGJveCBzaGFkb3cgY2FwYWJpbGl0aWVzIG5vdyBzdXBwb3J0IGl0LlxuXG5AbWl4aW4gYm94LXNoYWRvdygkc2hhZG93Li4uKSB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogJHNoYWRvdzsgLy8gaU9TIDw0LjMgJiBBbmRyb2lkIDw0LjFcbiAgICAgICAgICBib3gtc2hhZG93OiAkc2hhZG93O1xufVxuXG4vLyBCb3ggc2l6aW5nXG5AbWl4aW4gYm94LXNpemluZygkYm94bW9kZWwpIHtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiAkYm94bW9kZWw7XG4gICAgIC1tb3otYm94LXNpemluZzogJGJveG1vZGVsO1xuICAgICAgICAgIGJveC1zaXppbmc6ICRib3htb2RlbDtcbn1cblxuLy8gQ1NTMyBDb250ZW50IENvbHVtbnNcbkBtaXhpbiBjb250ZW50LWNvbHVtbnMoJGNvbHVtbi1jb3VudCwgJGNvbHVtbi1nYXA6ICRncmlkLWd1dHRlci13aWR0aCkge1xuICAtd2Via2l0LWNvbHVtbi1jb3VudDogJGNvbHVtbi1jb3VudDtcbiAgICAgLW1vei1jb2x1bW4tY291bnQ6ICRjb2x1bW4tY291bnQ7XG4gICAgICAgICAgY29sdW1uLWNvdW50OiAkY29sdW1uLWNvdW50O1xuICAtd2Via2l0LWNvbHVtbi1nYXA6ICRjb2x1bW4tZ2FwO1xuICAgICAtbW96LWNvbHVtbi1nYXA6ICRjb2x1bW4tZ2FwO1xuICAgICAgICAgIGNvbHVtbi1nYXA6ICRjb2x1bW4tZ2FwO1xufVxuXG4vLyBPcHRpb25hbCBoeXBoZW5hdGlvblxuQG1peGluIGh5cGhlbnMoJG1vZGU6IGF1dG8pIHtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAtd2Via2l0LWh5cGhlbnM6ICRtb2RlO1xuICAgICAtbW96LWh5cGhlbnM6ICRtb2RlO1xuICAgICAgLW1zLWh5cGhlbnM6ICRtb2RlOyAvLyBJRTEwK1xuICAgICAgIC1vLWh5cGhlbnM6ICRtb2RlO1xuICAgICAgICAgIGh5cGhlbnM6ICRtb2RlO1xufVxuXG4vLyBQbGFjZWhvbGRlciB0ZXh0XG5AbWl4aW4gcGxhY2Vob2xkZXIoJGNvbG9yOiAkaW5wdXQtY29sb3ItcGxhY2Vob2xkZXIpIHtcbiAgLy8gRmlyZWZveFxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbG9yO1xuICAgIG9wYWNpdHk6IDE7IC8vIE92ZXJyaWRlIEZpcmVmb3gncyB1bnVzdWFsIGRlZmF1bHQgb3BhY2l0eTsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9wdWxsLzExNTI2XG4gIH1cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIgeyBjb2xvcjogJGNvbG9yOyB9IC8vIEludGVybmV0IEV4cGxvcmVyIDEwK1xuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyICB7IGNvbG9yOiAkY29sb3I7IH0gLy8gU2FmYXJpIGFuZCBDaHJvbWVcbn1cblxuLy8gVHJhbnNmb3JtYXRpb25zXG5AbWl4aW4gc2NhbGUoJHJhdGlvLi4uKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgkcmF0aW8pO1xuICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUoJHJhdGlvKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHNjYWxlKCRyYXRpbyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgkcmF0aW8pO1xufVxuXG5AbWl4aW4gc2NhbGVYKCRyYXRpbykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKCRyYXRpbyk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZVgoJHJhdGlvKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHNjYWxlWCgkcmF0aW8pO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKCRyYXRpbyk7XG59XG5AbWl4aW4gc2NhbGVZKCRyYXRpbykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVZKCRyYXRpbyk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZVkoJHJhdGlvKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHNjYWxlWSgkcmF0aW8pO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVZKCRyYXRpbyk7XG59XG5AbWl4aW4gc2tldygkeCwgJHkpIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNrZXdYKCR4KSBza2V3WSgkeSk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiBza2V3WCgkeCkgc2tld1koJHkpOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy80ODg1OyBJRTkrXG4gICAgICAgLW8tdHJhbnNmb3JtOiBza2V3WCgkeCkgc2tld1koJHkpO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2tld1goJHgpIHNrZXdZKCR5KTtcbn1cbkBtaXhpbiB0cmFuc2xhdGUoJHgsICR5KSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoJHgsICR5KTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgkeCwgJHkpOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlKCR4LCAkeSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoJHgsICR5KTtcbn1cbkBtaXhpbiB0cmFuc2xhdGUzZCgkeCwgJHksICR6KSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgkeCwgJHksICR6KTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKCR4LCAkeSwgJHopO1xufVxuQG1peGluIHJvdGF0ZSgkZGVncmVlcykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKCRkZWdyZWVzKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZSgkZGVncmVlcyk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiByb3RhdGUoJGRlZ3JlZXMpO1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKCRkZWdyZWVzKTtcbn1cbkBtaXhpbiByb3RhdGVYKCRkZWdyZWVzKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVYKCRkZWdyZWVzKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZVgoJGRlZ3JlZXMpOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogcm90YXRlWCgkZGVncmVlcyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVYKCRkZWdyZWVzKTtcbn1cbkBtaXhpbiByb3RhdGVZKCRkZWdyZWVzKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVZKCRkZWdyZWVzKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZVkoJGRlZ3JlZXMpOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogcm90YXRlWSgkZGVncmVlcyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVZKCRkZWdyZWVzKTtcbn1cbkBtaXhpbiBwZXJzcGVjdGl2ZSgkcGVyc3BlY3RpdmUpIHtcbiAgLXdlYmtpdC1wZXJzcGVjdGl2ZTogJHBlcnNwZWN0aXZlO1xuICAgICAtbW96LXBlcnNwZWN0aXZlOiAkcGVyc3BlY3RpdmU7XG4gICAgICAgICAgcGVyc3BlY3RpdmU6ICRwZXJzcGVjdGl2ZTtcbn1cbkBtaXhpbiBwZXJzcGVjdGl2ZS1vcmlnaW4oJHBlcnNwZWN0aXZlKSB7XG4gIC13ZWJraXQtcGVyc3BlY3RpdmUtb3JpZ2luOiAkcGVyc3BlY3RpdmU7XG4gICAgIC1tb3otcGVyc3BlY3RpdmUtb3JpZ2luOiAkcGVyc3BlY3RpdmU7XG4gICAgICAgICAgcGVyc3BlY3RpdmUtb3JpZ2luOiAkcGVyc3BlY3RpdmU7XG59XG5AbWl4aW4gdHJhbnNmb3JtLW9yaWdpbigkb3JpZ2luKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogJG9yaWdpbjtcbiAgICAgLW1vei10cmFuc2Zvcm0tb3JpZ2luOiAkb3JpZ2luO1xuICAgICAgLW1zLXRyYW5zZm9ybS1vcmlnaW46ICRvcmlnaW47IC8vIElFOSBvbmx5XG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogJG9yaWdpbjtcbn1cblxuXG4vLyBUcmFuc2l0aW9uc1xuXG5AbWl4aW4gdHJhbnNpdGlvbigkdHJhbnNpdGlvbi4uLikge1xuICAtd2Via2l0LXRyYW5zaXRpb246ICR0cmFuc2l0aW9uO1xuICAgICAgIC1vLXRyYW5zaXRpb246ICR0cmFuc2l0aW9uO1xuICAgICAgICAgIHRyYW5zaXRpb246ICR0cmFuc2l0aW9uO1xufVxuQG1peGluIHRyYW5zaXRpb24tcHJvcGVydHkoJHRyYW5zaXRpb24tcHJvcGVydHkuLi4pIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiAkdHJhbnNpdGlvbi1wcm9wZXJ0eTtcbiAgICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiAkdHJhbnNpdGlvbi1wcm9wZXJ0eTtcbn1cbkBtaXhpbiB0cmFuc2l0aW9uLWRlbGF5KCR0cmFuc2l0aW9uLWRlbGF5KSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kZWxheTogJHRyYW5zaXRpb24tZGVsYXk7XG4gICAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogJHRyYW5zaXRpb24tZGVsYXk7XG59XG5AbWl4aW4gdHJhbnNpdGlvbi1kdXJhdGlvbigkdHJhbnNpdGlvbi1kdXJhdGlvbi4uLikge1xuICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246ICR0cmFuc2l0aW9uLWR1cmF0aW9uO1xuICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246ICR0cmFuc2l0aW9uLWR1cmF0aW9uO1xufVxuQG1peGluIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKCR0aW1pbmctZnVuY3Rpb24pIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogJHRpbWluZy1mdW5jdGlvbjtcbiAgICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogJHRpbWluZy1mdW5jdGlvbjtcbn1cbkBtaXhpbiB0cmFuc2l0aW9uLXRyYW5zZm9ybSgkdHJhbnNpdGlvbi4uLikge1xuICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtICR0cmFuc2l0aW9uO1xuICAgICAtbW96LXRyYW5zaXRpb246IC1tb3otdHJhbnNmb3JtICR0cmFuc2l0aW9uO1xuICAgICAgIC1vLXRyYW5zaXRpb246IC1vLXRyYW5zZm9ybSAkdHJhbnNpdGlvbjtcbiAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gJHRyYW5zaXRpb247XG59XG5cblxuLy8gVXNlciBzZWxlY3Rcbi8vIEZvciBzZWxlY3RpbmcgdGV4dCBvbiB0aGUgcGFnZVxuXG5AbWl4aW4gdXNlci1zZWxlY3QoJHNlbGVjdCkge1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiAkc2VsZWN0O1xuICAgICAtbW96LXVzZXItc2VsZWN0OiAkc2VsZWN0O1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiAkc2VsZWN0OyAvLyBJRTEwK1xuICAgICAgICAgIHVzZXItc2VsZWN0OiAkc2VsZWN0O1xufVxuIiwiQGltcG9ydCBcIi4uL3N1cHBvcnRcIjtcblxuLy8gVGhpcyBtaXhpbiBwcm92aWRlcyBiYXNpYyBzdXBwb3J0IGZvciBDU1MzIHByb3BlcnRpZXMgYW5kXG4vLyB0aGVpciBjb3JyZXNwb25kaW5nIGV4cGVyaW1lbnRhbCBDU1MyIHByb3BlcnRpZXMgd2hlblxuLy8gdGhlIGltcGxlbWVudGF0aW9ucyBhcmUgaWRlbnRpY2FsIGV4Y2VwdCBmb3IgdGhlIHByb3BlcnR5XG4vLyBwcmVmaXguXG5AbWl4aW4gZXhwZXJpbWVudGFsKCRwcm9wZXJ0eSwgJHZhbHVlLFxuICAkbW96ICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1vemlsbGEsXG4gICR3ZWJraXQgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itd2Via2l0LFxuICAkbyAgICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW9wZXJhLFxuICAkbXMgICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1pY3Jvc29mdCxcbiAgJGtodG1sICAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1raHRtbCxcbiAgJG9mZmljaWFsIDogdHJ1ZVxuKSB7XG4gIEBpZiAkd2Via2l0ICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQgICAgeyAtd2Via2l0LSN7JHByb3BlcnR5fSA6ICR2YWx1ZTsgfVxuICBAaWYgJGtodG1sICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Ita2h0bWwgICAgIHsgIC1raHRtbC0jeyRwcm9wZXJ0eX0gOiAkdmFsdWU7IH1cbiAgQGlmICRtb3ogICAgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1vemlsbGEgICB7ICAgIC1tb3otI3skcHJvcGVydHl9IDogJHZhbHVlOyB9XG4gIEBpZiAkbXMgICAgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1taWNyb3NvZnQgeyAgICAgLW1zLSN7JHByb3BlcnR5fSA6ICR2YWx1ZTsgfVxuICBAaWYgJG8gICAgICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itb3BlcmEgICAgIHsgICAgICAtby0jeyRwcm9wZXJ0eX0gOiAkdmFsdWU7IH1cbiAgQGlmICRvZmZpY2lhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgICAgI3skcHJvcGVydHl9IDogJHZhbHVlOyB9XG59XG5cbi8vIFNhbWUgYXMgZXhwZXJpbWVudGFsKCksIGJ1dCBmb3IgY2FzZXMgd2hlbiB0aGUgcHJvcGVydHkgaXMgdGhlIHNhbWUgYW5kIHRoZSB2YWx1ZSBpcyB2ZW5kb3JpemVkXG5AbWl4aW4gZXhwZXJpbWVudGFsLXZhbHVlKCRwcm9wZXJ0eSwgJHZhbHVlLFxuICAkbW96ICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1vemlsbGEsXG4gICR3ZWJraXQgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itd2Via2l0LFxuICAkbyAgICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW9wZXJhLFxuICAkbXMgICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1pY3Jvc29mdCxcbiAgJGtodG1sICAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1raHRtbCxcbiAgJG9mZmljaWFsIDogdHJ1ZVxuKSB7XG4gIEBpZiAkd2Via2l0ICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQgICAgeyAjeyRwcm9wZXJ0eX0gOiAtd2Via2l0LSN7JHZhbHVlfTsgfVxuICBAaWYgJGtodG1sICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Ita2h0bWwgICAgIHsgI3skcHJvcGVydHl9IDogIC1raHRtbC0jeyR2YWx1ZX07IH1cbiAgQGlmICRtb3ogICAgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1vemlsbGEgICB7ICN7JHByb3BlcnR5fSA6ICAgIC1tb3otI3skdmFsdWV9OyB9XG4gIEBpZiAkbXMgICAgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1taWNyb3NvZnQgeyAjeyRwcm9wZXJ0eX0gOiAgICAgLW1zLSN7JHZhbHVlfTsgfVxuICBAaWYgJG8gICAgICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itb3BlcmEgICAgIHsgI3skcHJvcGVydHl9IDogICAgICAtby0jeyR2YWx1ZX07IH1cbiAgQGlmICRvZmZpY2lhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICN7JHByb3BlcnR5fSA6ICAgICAgICAgI3skdmFsdWV9OyB9XG59XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= */
\ No newline at end of file
diff --git a/ui/new-ui-samples/css/main.css b/ui/new-ui-samples/css/main.css
new file mode 100755
index 0000000..c544790
--- /dev/null
+++ b/ui/new-ui-samples/css/main.css
@@ -0,0 +1,9157 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 */
+html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr,
+address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub,
+sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table,
+caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure,
+figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark,
+audio, video, button {
+ margin: 0;
+ padding: 0;
+ border: 0;
+}
+
+article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
+ display: block;
+}
+
+ol, ul {
+ list-style: none;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+img {
+ border: none;
+}
+
+a {
+ text-decoration: none;
+}
+
+a:active, a:hover {
+ outline: none;
+}
+
+a label {
+ cursor: pointer;
+}
+
+/*
+ * A partial implementation of the Ruby list functions from Compass:
+ * https://github.com/Compass/compass/blob/stable/lib/compass/sass_extensions/…
+ */
+/*
+ * A partial implementation of the Ruby constants functions from Compass:
+ * https://github.com/Compass/compass/blob/stable/lib/compass/sass_extensions/…
+ */
+/*
+ * A partial implementation of the Ruby display functions from Compass:
+ * https://github.com/Compass/compass/blob/stable/core/lib/compass/core/sass_e…
+ */
+/*!
+ * Bootstrap v3.3.5 (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("../fonts/glyphicons-halflings-regular.eot");
+ src: url("../fonts/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"), url("../fonts/glyphicons-halflings-regular.woff2") format("woff2"), url("../fonts/glyphicons-halflings-regular.woff") format("woff"), url("../fonts/glyphicons-halflings-regular.ttf") format("truetype"), url("../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg");
+}
+
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.glyphicon-asterisk:before {
+ content: "\2a";
+}
+
+.glyphicon-plus:before {
+ content: "\2b";
+}
+
+.glyphicon-euro:before,
+.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: "HelveticaNeueMedium", "HelveticaNeue-Medium", "Helvetica Neue Medium", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-size: 14px;
+ line-height: 1.428571429;
+ color: #222;
+ background-color: #fff;
+}
+
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+
+a {
+ color: #3a393b;
+ text-decoration: none;
+}
+
+a:hover,
+a:focus {
+ color: #141314;
+ 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: 3px;
+}
+
+.img-thumbnail {
+ padding: 4px;
+ line-height: 1.428571429;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 3px;
+ 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 #fff;
+}
+
+.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: #999;
+}
+
+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: 1.571em;
+}
+
+h2, .h2 {
+ font-size: 22px;
+}
+
+h3, .h3 {
+ font-size: 17px;
+}
+
+h4, .h4 {
+ font-size: 14px;
+}
+
+h5, .h5 {
+ font-size: 14px;
+}
+
+h6, .h6 {
+ font-size: 14px;
+}
+
+p {
+ margin: 0 0 10px;
+}
+
+.lead {
+ margin-bottom: 20px;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 1.4;
+}
+
+@media (min-width: 992px) {
+ .lead {
+ font-size: 21px;
+ }
+}
+
+small,
+.small {
+ font-size: 85%;
+}
+
+mark,
+.mark {
+ background-color: #f1e3c2;
+ 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: #999;
+}
+
+.text-primary {
+ color: #3a393b;
+}
+
+a.text-primary:hover,
+a.text-primary:focus {
+ color: #212021;
+}
+
+.text-success {
+ color: #6c6c6c;
+}
+
+a.text-success:hover,
+a.text-success:focus {
+ color: #525252;
+}
+
+.text-info {
+ color: #6c6c6c;
+}
+
+a.text-info:hover,
+a.text-info:focus {
+ color: #525252;
+}
+
+.text-warning {
+ color: #6c6c6c;
+}
+
+a.text-warning:hover,
+a.text-warning:focus {
+ color: #525252;
+}
+
+.text-danger {
+ color: #6c6c6c;
+}
+
+a.text-danger:hover,
+a.text-danger:focus {
+ color: #525252;
+}
+
+.bg-primary {
+ color: #fff;
+}
+
+.bg-primary {
+ background-color: #3a393b;
+}
+
+a.bg-primary:hover,
+a.bg-primary:focus {
+ background-color: #212021;
+}
+
+.bg-success {
+ background-color: #dae6cb;
+}
+
+a.bg-success:hover,
+a.bg-success:focus {
+ background-color: #c1d5a9;
+}
+
+.bg-info {
+ background-color: #d9edf7;
+}
+
+a.bg-info:hover,
+a.bg-info:focus {
+ background-color: #afd9ee;
+}
+
+.bg-warning {
+ background-color: #f1e3c2;
+}
+
+a.bg-warning:hover,
+a.bg-warning:focus {
+ background-color: #e7d099;
+}
+
+.bg-danger {
+ background-color: #eac3c7;
+}
+
+a.bg-danger:hover,
+a.bg-danger:focus {
+ background-color: #dd9da4;
+}
+
+.page-header {
+ padding-bottom: 9px;
+ margin: 40px 0 20px;
+ border-bottom: 1px solid #fff;
+}
+
+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.428571429;
+}
+
+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: 992px) {
+ .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 #999;
+}
+
+.initialism {
+ font-size: 90%;
+}
+
+blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #fff;
+}
+
+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.428571429;
+ color: #999;
+}
+
+blockquote footer:before,
+blockquote small:before,
+blockquote .small:before {
+ content: '\2014 \00A0';
+}
+
+.blockquote-reverse,
+blockquote.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ border-right: 5px solid #fff;
+ 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.428571429;
+}
+
+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: 3px;
+}
+
+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.428571429;
+ word-break: break-all;
+ word-wrap: break-word;
+ color: #222;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+}
+
+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: 0;
+ padding-right: 0;
+}
+
+.container:before,
+.container:after {
+ content: " ";
+ display: table;
+}
+
+.container:after {
+ clear: both;
+}
+
+@media (min-width: 992px) {
+ .container {
+ width: 940px;
+ }
+}
+
+@media (min-width: 1200px) {
+ .container {
+ width: 1140px;
+ }
+}
+
+@media (min-width: 1680) {
+ .container {
+ width: 1540px;
+ }
+}
+
+.container-fluid {
+ margin-right: auto;
+ margin-left: auto;
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.container-fluid:before,
+.container-fluid:after {
+ content: " ";
+ display: table;
+}
+
+.container-fluid:after {
+ clear: both;
+}
+
+.row {
+ margin-left: 0;
+ margin-right: 0;
+}
+
+.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: 0;
+ padding-right: 0;
+}
+
+.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.3333333333%;
+}
+
+.col-xs-2 {
+ width: 16.6666666667%;
+}
+
+.col-xs-3 {
+ width: 25%;
+}
+
+.col-xs-4 {
+ width: 33.3333333333%;
+}
+
+.col-xs-5 {
+ width: 41.6666666667%;
+}
+
+.col-xs-6 {
+ width: 50%;
+}
+
+.col-xs-7 {
+ width: 58.3333333333%;
+}
+
+.col-xs-8 {
+ width: 66.6666666667%;
+}
+
+.col-xs-9 {
+ width: 75%;
+}
+
+.col-xs-10 {
+ width: 83.3333333333%;
+}
+
+.col-xs-11 {
+ width: 91.6666666667%;
+}
+
+.col-xs-12 {
+ width: 100%;
+}
+
+.col-xs-pull-0 {
+ right: auto;
+}
+
+.col-xs-pull-1 {
+ right: 8.3333333333%;
+}
+
+.col-xs-pull-2 {
+ right: 16.6666666667%;
+}
+
+.col-xs-pull-3 {
+ right: 25%;
+}
+
+.col-xs-pull-4 {
+ right: 33.3333333333%;
+}
+
+.col-xs-pull-5 {
+ right: 41.6666666667%;
+}
+
+.col-xs-pull-6 {
+ right: 50%;
+}
+
+.col-xs-pull-7 {
+ right: 58.3333333333%;
+}
+
+.col-xs-pull-8 {
+ right: 66.6666666667%;
+}
+
+.col-xs-pull-9 {
+ right: 75%;
+}
+
+.col-xs-pull-10 {
+ right: 83.3333333333%;
+}
+
+.col-xs-pull-11 {
+ right: 91.6666666667%;
+}
+
+.col-xs-pull-12 {
+ right: 100%;
+}
+
+.col-xs-push-0 {
+ left: auto;
+}
+
+.col-xs-push-1 {
+ left: 8.3333333333%;
+}
+
+.col-xs-push-2 {
+ left: 16.6666666667%;
+}
+
+.col-xs-push-3 {
+ left: 25%;
+}
+
+.col-xs-push-4 {
+ left: 33.3333333333%;
+}
+
+.col-xs-push-5 {
+ left: 41.6666666667%;
+}
+
+.col-xs-push-6 {
+ left: 50%;
+}
+
+.col-xs-push-7 {
+ left: 58.3333333333%;
+}
+
+.col-xs-push-8 {
+ left: 66.6666666667%;
+}
+
+.col-xs-push-9 {
+ left: 75%;
+}
+
+.col-xs-push-10 {
+ left: 83.3333333333%;
+}
+
+.col-xs-push-11 {
+ left: 91.6666666667%;
+}
+
+.col-xs-push-12 {
+ left: 100%;
+}
+
+.col-xs-offset-0 {
+ margin-left: 0%;
+}
+
+.col-xs-offset-1 {
+ margin-left: 8.3333333333%;
+}
+
+.col-xs-offset-2 {
+ margin-left: 16.6666666667%;
+}
+
+.col-xs-offset-3 {
+ margin-left: 25%;
+}
+
+.col-xs-offset-4 {
+ margin-left: 33.3333333333%;
+}
+
+.col-xs-offset-5 {
+ margin-left: 41.6666666667%;
+}
+
+.col-xs-offset-6 {
+ margin-left: 50%;
+}
+
+.col-xs-offset-7 {
+ margin-left: 58.3333333333%;
+}
+
+.col-xs-offset-8 {
+ margin-left: 66.6666666667%;
+}
+
+.col-xs-offset-9 {
+ margin-left: 75%;
+}
+
+.col-xs-offset-10 {
+ margin-left: 83.3333333333%;
+}
+
+.col-xs-offset-11 {
+ margin-left: 91.6666666667%;
+}
+
+.col-xs-offset-12 {
+ margin-left: 100%;
+}
+
+@media (min-width: 992px) {
+ .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.3333333333%;
+ }
+ .col-sm-2 {
+ width: 16.6666666667%;
+ }
+ .col-sm-3 {
+ width: 25%;
+ }
+ .col-sm-4 {
+ width: 33.3333333333%;
+ }
+ .col-sm-5 {
+ width: 41.6666666667%;
+ }
+ .col-sm-6 {
+ width: 50%;
+ }
+ .col-sm-7 {
+ width: 58.3333333333%;
+ }
+ .col-sm-8 {
+ width: 66.6666666667%;
+ }
+ .col-sm-9 {
+ width: 75%;
+ }
+ .col-sm-10 {
+ width: 83.3333333333%;
+ }
+ .col-sm-11 {
+ width: 91.6666666667%;
+ }
+ .col-sm-12 {
+ width: 100%;
+ }
+ .col-sm-pull-0 {
+ right: auto;
+ }
+ .col-sm-pull-1 {
+ right: 8.3333333333%;
+ }
+ .col-sm-pull-2 {
+ right: 16.6666666667%;
+ }
+ .col-sm-pull-3 {
+ right: 25%;
+ }
+ .col-sm-pull-4 {
+ right: 33.3333333333%;
+ }
+ .col-sm-pull-5 {
+ right: 41.6666666667%;
+ }
+ .col-sm-pull-6 {
+ right: 50%;
+ }
+ .col-sm-pull-7 {
+ right: 58.3333333333%;
+ }
+ .col-sm-pull-8 {
+ right: 66.6666666667%;
+ }
+ .col-sm-pull-9 {
+ right: 75%;
+ }
+ .col-sm-pull-10 {
+ right: 83.3333333333%;
+ }
+ .col-sm-pull-11 {
+ right: 91.6666666667%;
+ }
+ .col-sm-pull-12 {
+ right: 100%;
+ }
+ .col-sm-push-0 {
+ left: auto;
+ }
+ .col-sm-push-1 {
+ left: 8.3333333333%;
+ }
+ .col-sm-push-2 {
+ left: 16.6666666667%;
+ }
+ .col-sm-push-3 {
+ left: 25%;
+ }
+ .col-sm-push-4 {
+ left: 33.3333333333%;
+ }
+ .col-sm-push-5 {
+ left: 41.6666666667%;
+ }
+ .col-sm-push-6 {
+ left: 50%;
+ }
+ .col-sm-push-7 {
+ left: 58.3333333333%;
+ }
+ .col-sm-push-8 {
+ left: 66.6666666667%;
+ }
+ .col-sm-push-9 {
+ left: 75%;
+ }
+ .col-sm-push-10 {
+ left: 83.3333333333%;
+ }
+ .col-sm-push-11 {
+ left: 91.6666666667%;
+ }
+ .col-sm-push-12 {
+ left: 100%;
+ }
+ .col-sm-offset-0 {
+ margin-left: 0%;
+ }
+ .col-sm-offset-1 {
+ margin-left: 8.3333333333%;
+ }
+ .col-sm-offset-2 {
+ margin-left: 16.6666666667%;
+ }
+ .col-sm-offset-3 {
+ margin-left: 25%;
+ }
+ .col-sm-offset-4 {
+ margin-left: 33.3333333333%;
+ }
+ .col-sm-offset-5 {
+ margin-left: 41.6666666667%;
+ }
+ .col-sm-offset-6 {
+ margin-left: 50%;
+ }
+ .col-sm-offset-7 {
+ margin-left: 58.3333333333%;
+ }
+ .col-sm-offset-8 {
+ margin-left: 66.6666666667%;
+ }
+ .col-sm-offset-9 {
+ margin-left: 75%;
+ }
+ .col-sm-offset-10 {
+ margin-left: 83.3333333333%;
+ }
+ .col-sm-offset-11 {
+ margin-left: 91.6666666667%;
+ }
+ .col-sm-offset-12 {
+ margin-left: 100%;
+ }
+}
+
+@media (min-width: 1200px) {
+ .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.3333333333%;
+ }
+ .col-md-2 {
+ width: 16.6666666667%;
+ }
+ .col-md-3 {
+ width: 25%;
+ }
+ .col-md-4 {
+ width: 33.3333333333%;
+ }
+ .col-md-5 {
+ width: 41.6666666667%;
+ }
+ .col-md-6 {
+ width: 50%;
+ }
+ .col-md-7 {
+ width: 58.3333333333%;
+ }
+ .col-md-8 {
+ width: 66.6666666667%;
+ }
+ .col-md-9 {
+ width: 75%;
+ }
+ .col-md-10 {
+ width: 83.3333333333%;
+ }
+ .col-md-11 {
+ width: 91.6666666667%;
+ }
+ .col-md-12 {
+ width: 100%;
+ }
+ .col-md-pull-0 {
+ right: auto;
+ }
+ .col-md-pull-1 {
+ right: 8.3333333333%;
+ }
+ .col-md-pull-2 {
+ right: 16.6666666667%;
+ }
+ .col-md-pull-3 {
+ right: 25%;
+ }
+ .col-md-pull-4 {
+ right: 33.3333333333%;
+ }
+ .col-md-pull-5 {
+ right: 41.6666666667%;
+ }
+ .col-md-pull-6 {
+ right: 50%;
+ }
+ .col-md-pull-7 {
+ right: 58.3333333333%;
+ }
+ .col-md-pull-8 {
+ right: 66.6666666667%;
+ }
+ .col-md-pull-9 {
+ right: 75%;
+ }
+ .col-md-pull-10 {
+ right: 83.3333333333%;
+ }
+ .col-md-pull-11 {
+ right: 91.6666666667%;
+ }
+ .col-md-pull-12 {
+ right: 100%;
+ }
+ .col-md-push-0 {
+ left: auto;
+ }
+ .col-md-push-1 {
+ left: 8.3333333333%;
+ }
+ .col-md-push-2 {
+ left: 16.6666666667%;
+ }
+ .col-md-push-3 {
+ left: 25%;
+ }
+ .col-md-push-4 {
+ left: 33.3333333333%;
+ }
+ .col-md-push-5 {
+ left: 41.6666666667%;
+ }
+ .col-md-push-6 {
+ left: 50%;
+ }
+ .col-md-push-7 {
+ left: 58.3333333333%;
+ }
+ .col-md-push-8 {
+ left: 66.6666666667%;
+ }
+ .col-md-push-9 {
+ left: 75%;
+ }
+ .col-md-push-10 {
+ left: 83.3333333333%;
+ }
+ .col-md-push-11 {
+ left: 91.6666666667%;
+ }
+ .col-md-push-12 {
+ left: 100%;
+ }
+ .col-md-offset-0 {
+ margin-left: 0%;
+ }
+ .col-md-offset-1 {
+ margin-left: 8.3333333333%;
+ }
+ .col-md-offset-2 {
+ margin-left: 16.6666666667%;
+ }
+ .col-md-offset-3 {
+ margin-left: 25%;
+ }
+ .col-md-offset-4 {
+ margin-left: 33.3333333333%;
+ }
+ .col-md-offset-5 {
+ margin-left: 41.6666666667%;
+ }
+ .col-md-offset-6 {
+ margin-left: 50%;
+ }
+ .col-md-offset-7 {
+ margin-left: 58.3333333333%;
+ }
+ .col-md-offset-8 {
+ margin-left: 66.6666666667%;
+ }
+ .col-md-offset-9 {
+ margin-left: 75%;
+ }
+ .col-md-offset-10 {
+ margin-left: 83.3333333333%;
+ }
+ .col-md-offset-11 {
+ margin-left: 91.6666666667%;
+ }
+ .col-md-offset-12 {
+ margin-left: 100%;
+ }
+}
+
+@media (min-width: 1680) {
+ .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.3333333333%;
+ }
+ .col-lg-2 {
+ width: 16.6666666667%;
+ }
+ .col-lg-3 {
+ width: 25%;
+ }
+ .col-lg-4 {
+ width: 33.3333333333%;
+ }
+ .col-lg-5 {
+ width: 41.6666666667%;
+ }
+ .col-lg-6 {
+ width: 50%;
+ }
+ .col-lg-7 {
+ width: 58.3333333333%;
+ }
+ .col-lg-8 {
+ width: 66.6666666667%;
+ }
+ .col-lg-9 {
+ width: 75%;
+ }
+ .col-lg-10 {
+ width: 83.3333333333%;
+ }
+ .col-lg-11 {
+ width: 91.6666666667%;
+ }
+ .col-lg-12 {
+ width: 100%;
+ }
+ .col-lg-pull-0 {
+ right: auto;
+ }
+ .col-lg-pull-1 {
+ right: 8.3333333333%;
+ }
+ .col-lg-pull-2 {
+ right: 16.6666666667%;
+ }
+ .col-lg-pull-3 {
+ right: 25%;
+ }
+ .col-lg-pull-4 {
+ right: 33.3333333333%;
+ }
+ .col-lg-pull-5 {
+ right: 41.6666666667%;
+ }
+ .col-lg-pull-6 {
+ right: 50%;
+ }
+ .col-lg-pull-7 {
+ right: 58.3333333333%;
+ }
+ .col-lg-pull-8 {
+ right: 66.6666666667%;
+ }
+ .col-lg-pull-9 {
+ right: 75%;
+ }
+ .col-lg-pull-10 {
+ right: 83.3333333333%;
+ }
+ .col-lg-pull-11 {
+ right: 91.6666666667%;
+ }
+ .col-lg-pull-12 {
+ right: 100%;
+ }
+ .col-lg-push-0 {
+ left: auto;
+ }
+ .col-lg-push-1 {
+ left: 8.3333333333%;
+ }
+ .col-lg-push-2 {
+ left: 16.6666666667%;
+ }
+ .col-lg-push-3 {
+ left: 25%;
+ }
+ .col-lg-push-4 {
+ left: 33.3333333333%;
+ }
+ .col-lg-push-5 {
+ left: 41.6666666667%;
+ }
+ .col-lg-push-6 {
+ left: 50%;
+ }
+ .col-lg-push-7 {
+ left: 58.3333333333%;
+ }
+ .col-lg-push-8 {
+ left: 66.6666666667%;
+ }
+ .col-lg-push-9 {
+ left: 75%;
+ }
+ .col-lg-push-10 {
+ left: 83.3333333333%;
+ }
+ .col-lg-push-11 {
+ left: 91.6666666667%;
+ }
+ .col-lg-push-12 {
+ left: 100%;
+ }
+ .col-lg-offset-0 {
+ margin-left: 0%;
+ }
+ .col-lg-offset-1 {
+ margin-left: 8.3333333333%;
+ }
+ .col-lg-offset-2 {
+ margin-left: 16.6666666667%;
+ }
+ .col-lg-offset-3 {
+ margin-left: 25%;
+ }
+ .col-lg-offset-4 {
+ margin-left: 33.3333333333%;
+ }
+ .col-lg-offset-5 {
+ margin-left: 41.6666666667%;
+ }
+ .col-lg-offset-6 {
+ margin-left: 50%;
+ }
+ .col-lg-offset-7 {
+ margin-left: 58.3333333333%;
+ }
+ .col-lg-offset-8 {
+ margin-left: 66.6666666667%;
+ }
+ .col-lg-offset-9 {
+ margin-left: 75%;
+ }
+ .col-lg-offset-10 {
+ margin-left: 83.3333333333%;
+ }
+ .col-lg-offset-11 {
+ margin-left: 91.6666666667%;
+ }
+ .col-lg-offset-12 {
+ margin-left: 100%;
+ }
+}
+
+table {
+ background-color: transparent;
+}
+
+caption {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ color: #999;
+ 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.428571429;
+ 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: #dae6cb;
+}
+
+.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: #cedeba;
+}
+
+.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: #f1e3c2;
+}
+
+.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: #ecd9ad;
+}
+
+.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: #eac3c7;
+}
+
+.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: #e3b0b5;
+}
+
+.table-responsive {
+ overflow-x: auto;
+ min-height: 0.01%;
+}
+
+@media screen and (max-width: 991px) {
+ .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: #222;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+label {
+ display: inline-block;
+ max-width: 100%;
+ margin-bottom: 5px;
+ font-weight: bold;
+}
+
+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.428571429;
+ color: #444;
+}
+
+.form-control {
+ display: block;
+ width: 100%;
+ height: 34px;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.428571429;
+ color: #444;
+ background-color: #fff;
+ background-image: none;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
+}
+
+.form-control:focus {
+ border-color: #66afe9;
+ outline: 0;
+ 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[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+ background-color: #fff;
+ 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.3333333;
+ border-radius: 3px;
+}
+
+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.3333333;
+ border-radius: 3px;
+}
+
+.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.3333333;
+}
+
+.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: #6c6c6c;
+}
+
+.has-success .form-control {
+ border-color: #6c6c6c;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.has-success .form-control:focus {
+ border-color: #525252;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #9f9f9f;
+}
+
+.has-success .input-group-addon {
+ color: #6c6c6c;
+ border-color: #6c6c6c;
+ background-color: #dae6cb;
+}
+
+.has-success .form-control-feedback {
+ color: #6c6c6c;
+}
+
+.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: #6c6c6c;
+}
+
+.has-warning .form-control {
+ border-color: #6c6c6c;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.has-warning .form-control:focus {
+ border-color: #525252;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #9f9f9f;
+}
+
+.has-warning .input-group-addon {
+ color: #6c6c6c;
+ border-color: #6c6c6c;
+ background-color: #f1e3c2;
+}
+
+.has-warning .form-control-feedback {
+ color: #6c6c6c;
+}
+
+.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: #6c6c6c;
+}
+
+.has-error .form-control {
+ border-color: #6c6c6c;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.has-error .form-control:focus {
+ border-color: #525252;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #9f9f9f;
+}
+
+.has-error .input-group-addon {
+ color: #6c6c6c;
+ border-color: #6c6c6c;
+ background-color: #eac3c7;
+}
+
+.has-error .form-control-feedback {
+ color: #6c6c6c;
+}
+
+.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: #626262;
+}
+
+@media (min-width: 992px) {
+ .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: 0;
+ margin-right: 0;
+}
+
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after {
+ content: " ";
+ display: table;
+}
+
+.form-horizontal .form-group:after {
+ clear: both;
+}
+
+@media (min-width: 992px) {
+ .form-horizontal .control-label {
+ text-align: right;
+ margin-bottom: 0;
+ padding-top: 7px;
+ }
+}
+
+.form-horizontal .has-feedback .form-control-feedback {
+ right: 0;
+}
+
+@media (min-width: 992px) {
+ .form-horizontal .form-group-lg .control-label {
+ padding-top: 14.333333px;
+ font-size: 18px;
+ }
+}
+
+@media (min-width: 992px) {
+ .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.428571429;
+ border-radius: 3px;
+ -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: #444;
+ text-decoration: none;
+}
+
+.btn:active,
+.btn.active {
+ outline: 0;
+ background-image: none;
+ 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);
+ box-shadow: none;
+}
+
+a.btn.disabled,
+fieldset[disabled] a.btn {
+ pointer-events: none;
+}
+
+.btn-default {
+ color: #444;
+ background-color: #fff;
+ border-color: #ccc;
+}
+
+.btn-default:focus,
+.btn-default.focus {
+ color: #444;
+ background-color: #e6e6e6;
+ border-color: #8c8c8c;
+}
+
+.btn-default:hover {
+ color: #444;
+ background-color: #e6e6e6;
+ border-color: #adadad;
+}
+
+.btn-default:active,
+.btn-default.active,
+.open > .btn-default.dropdown-toggle {
+ color: #444;
+ 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: #444;
+ background-color: #d4d4d4;
+ border-color: #8c8c8c;
+}
+
+.btn-default:active,
+.btn-default.active,
+.open > .btn-default.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-default.disabled,
+.btn-default.disabled:hover,
+.btn-default.disabled:focus,
+.btn-default.disabled.focus,
+.btn-default.disabled:active,
+.btn-default.disabled.active,
+.btn-default[disabled],
+.btn-default[disabled]:hover,
+.btn-default[disabled]:focus,
+.btn-default[disabled].focus,
+.btn-default[disabled]:active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default,
+fieldset[disabled] .btn-default:hover,
+fieldset[disabled] .btn-default:focus,
+fieldset[disabled] .btn-default.focus,
+fieldset[disabled] .btn-default:active,
+fieldset[disabled] .btn-default.active {
+ background-color: #fff;
+ border-color: #ccc;
+}
+
+.btn-default .badge {
+ color: #fff;
+ background-color: #444;
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #3a393b;
+ border-color: #3a393b;
+}
+
+.btn-primary:focus,
+.btn-primary.focus {
+ color: #fff;
+ background-color: #212021;
+ border-color: black;
+}
+
+.btn-primary:hover {
+ color: #fff;
+ background-color: #212021;
+ border-color: #1b1b1c;
+}
+
+.btn-primary:active,
+.btn-primary.active,
+.open > .btn-primary.dropdown-toggle {
+ color: #fff;
+ background-color: #212021;
+ border-color: #1b1b1c;
+}
+
+.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: #0f0e0f;
+ border-color: black;
+}
+
+.btn-primary:active,
+.btn-primary.active,
+.open > .btn-primary.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-primary.disabled,
+.btn-primary.disabled:hover,
+.btn-primary.disabled:focus,
+.btn-primary.disabled.focus,
+.btn-primary.disabled:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled],
+.btn-primary[disabled]:hover,
+.btn-primary[disabled]:focus,
+.btn-primary[disabled].focus,
+.btn-primary[disabled]:active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary,
+fieldset[disabled] .btn-primary:hover,
+fieldset[disabled] .btn-primary:focus,
+fieldset[disabled] .btn-primary.focus,
+fieldset[disabled] .btn-primary:active,
+fieldset[disabled] .btn-primary.active {
+ background-color: #3a393b;
+ border-color: #3a393b;
+}
+
+.btn-primary .badge {
+ color: #3a393b;
+ background-color: #fff;
+}
+
+.btn-success {
+ color: #fff;
+ background-color: #5cb85c;
+ border-color: #5cb85c;
+}
+
+.btn-success:focus,
+.btn-success.focus {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #2d672d;
+}
+
+.btn-success:hover {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #419641;
+}
+
+.btn-success:active,
+.btn-success.active,
+.open > .btn-success.dropdown-toggle {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #419641;
+}
+
+.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: #2d672d;
+}
+
+.btn-success:active,
+.btn-success.active,
+.open > .btn-success.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-success.disabled,
+.btn-success.disabled:hover,
+.btn-success.disabled:focus,
+.btn-success.disabled.focus,
+.btn-success.disabled:active,
+.btn-success.disabled.active,
+.btn-success[disabled],
+.btn-success[disabled]:hover,
+.btn-success[disabled]:focus,
+.btn-success[disabled].focus,
+.btn-success[disabled]:active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success,
+fieldset[disabled] .btn-success:hover,
+fieldset[disabled] .btn-success:focus,
+fieldset[disabled] .btn-success.focus,
+fieldset[disabled] .btn-success:active,
+fieldset[disabled] .btn-success.active {
+ background-color: #5cb85c;
+ border-color: #5cb85c;
+}
+
+.btn-success .badge {
+ color: #5cb85c;
+ background-color: #fff;
+}
+
+.btn-info {
+ color: #fff;
+ background-color: #5bc0de;
+ border-color: #5bc0de;
+}
+
+.btn-info:focus,
+.btn-info.focus {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #1f7e9a;
+}
+
+.btn-info:hover {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #2aabd2;
+}
+
+.btn-info:active,
+.btn-info.active,
+.open > .btn-info.dropdown-toggle {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #2aabd2;
+}
+
+.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: #1f7e9a;
+}
+
+.btn-info:active,
+.btn-info.active,
+.open > .btn-info.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-info.disabled,
+.btn-info.disabled:hover,
+.btn-info.disabled:focus,
+.btn-info.disabled.focus,
+.btn-info.disabled:active,
+.btn-info.disabled.active,
+.btn-info[disabled],
+.btn-info[disabled]:hover,
+.btn-info[disabled]:focus,
+.btn-info[disabled].focus,
+.btn-info[disabled]:active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info,
+fieldset[disabled] .btn-info:hover,
+fieldset[disabled] .btn-info:focus,
+fieldset[disabled] .btn-info.focus,
+fieldset[disabled] .btn-info:active,
+fieldset[disabled] .btn-info.active {
+ background-color: #5bc0de;
+ border-color: #5bc0de;
+}
+
+.btn-info .badge {
+ color: #5bc0de;
+ background-color: #fff;
+}
+
+.btn-warning {
+ color: #fff;
+ background-color: #f0ad4e;
+ border-color: #f0ad4e;
+}
+
+.btn-warning:focus,
+.btn-warning.focus {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #b06d0f;
+}
+
+.btn-warning:hover {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #eb9316;
+}
+
+.btn-warning:active,
+.btn-warning.active,
+.open > .btn-warning.dropdown-toggle {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #eb9316;
+}
+
+.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: #b06d0f;
+}
+
+.btn-warning:active,
+.btn-warning.active,
+.open > .btn-warning.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-warning.disabled,
+.btn-warning.disabled:hover,
+.btn-warning.disabled:focus,
+.btn-warning.disabled.focus,
+.btn-warning.disabled:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled],
+.btn-warning[disabled]:hover,
+.btn-warning[disabled]:focus,
+.btn-warning[disabled].focus,
+.btn-warning[disabled]:active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning,
+fieldset[disabled] .btn-warning:hover,
+fieldset[disabled] .btn-warning:focus,
+fieldset[disabled] .btn-warning.focus,
+fieldset[disabled] .btn-warning:active,
+fieldset[disabled] .btn-warning.active {
+ background-color: #f0ad4e;
+ border-color: #f0ad4e;
+}
+
+.btn-warning .badge {
+ color: #f0ad4e;
+ background-color: #fff;
+}
+
+.btn-danger {
+ color: #fff;
+ background-color: #d9534f;
+ border-color: #d9534f;
+}
+
+.btn-danger:focus,
+.btn-danger.focus {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #8b211e;
+}
+
+.btn-danger:hover {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #c12e2a;
+}
+
+.btn-danger:active,
+.btn-danger.active,
+.open > .btn-danger.dropdown-toggle {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #c12e2a;
+}
+
+.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: #8b211e;
+}
+
+.btn-danger:active,
+.btn-danger.active,
+.open > .btn-danger.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-danger.disabled,
+.btn-danger.disabled:hover,
+.btn-danger.disabled:focus,
+.btn-danger.disabled.focus,
+.btn-danger.disabled:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled],
+.btn-danger[disabled]:hover,
+.btn-danger[disabled]:focus,
+.btn-danger[disabled].focus,
+.btn-danger[disabled]:active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger,
+fieldset[disabled] .btn-danger:hover,
+fieldset[disabled] .btn-danger:focus,
+fieldset[disabled] .btn-danger.focus,
+fieldset[disabled] .btn-danger:active,
+fieldset[disabled] .btn-danger.active {
+ background-color: #d9534f;
+ border-color: #d9534f;
+}
+
+.btn-danger .badge {
+ color: #d9534f;
+ background-color: #fff;
+}
+
+.btn-link {
+ color: #3a393b;
+ font-weight: normal;
+ 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: #141314;
+ 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: #999;
+ text-decoration: none;
+}
+
+.btn-lg, .btn-group-lg > .btn {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 3px;
+}
+
+.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 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;
+ transition-property: height, visibility;
+ transition-duration: 0.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: #fcfcfc;
+ border: 1px solid #ccc;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ 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: #eee;
+}
+
+.dropdown-menu > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.428571429;
+ color: #222;
+ white-space: nowrap;
+}
+
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ text-decoration: none;
+ color: #151515;
+ 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: #3a393b;
+}
+
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ color: #999;
+}
+
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ 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.428571429;
+ color: #999;
+ 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: 992px) {
+ .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 {
+ box-shadow: inset 0 3px 5px rgba(0, 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: 3px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+ border-bottom-left-radius: 3px;
+ border-top-right-radius: 0;
+ border-top-left-radius: 0;
+}
+
+.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-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: #444;
+ text-align: center;
+ background-color: #fff;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+}
+
+.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: 3px;
+}
+
+.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: #fff;
+}
+
+.nav > li.disabled > a {
+ color: #999;
+}
+
+.nav > li.disabled > a:hover,
+.nav > li.disabled > a:focus {
+ color: #999;
+ text-decoration: none;
+ background-color: transparent;
+ cursor: not-allowed;
+}
+
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus {
+ background-color: #fff;
+ border-color: #3a393b;
+}
+
+.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.428571429;
+ border: 1px solid transparent;
+ border-radius: 3px 3px 0 0;
+}
+
+.nav-tabs > li > a:hover {
+ border-color: #fff #fff #ddd;
+}
+
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+ color: #444;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+ cursor: default;
+}
+
+.nav-pills > li {
+ float: left;
+}
+
+.nav-pills > li > a {
+ border-radius: 3px;
+}
+
+.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: #3a393b;
+}
+
+.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: 992px) {
+ .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: 3px;
+}
+
+.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: 992px) {
+ .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 3px 3px 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: 992px) {
+ .navbar {
+ border-radius: 3px;
+ }
+}
+
+.navbar-header:before,
+.navbar-header:after {
+ content: " ";
+ display: table;
+}
+
+.navbar-header:after {
+ clear: both;
+}
+
+@media (min-width: 992px) {
+ .navbar-header {
+ float: left;
+ }
+}
+
+.navbar-collapse {
+ overflow-x: visible;
+ padding-right: 0;
+ padding-left: 0;
+ 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: 992px) {
+ .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: 0;
+ margin-left: 0;
+}
+
+@media (min-width: 992px) {
+ .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: 992px) {
+ .navbar-static-top {
+ border-radius: 0;
+ }
+}
+
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030;
+}
+
+@media (min-width: 992px) {
+ .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 0;
+ 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: 992px) {
+ .navbar > .container .navbar-brand,
+ .navbar > .container-fluid .navbar-brand {
+ margin-left: 0;
+ }
+}
+
+.navbar-toggle {
+ position: relative;
+ float: right;
+ margin-right: 0;
+ padding: 9px 10px;
+ margin-top: 8px;
+ margin-bottom: 8px;
+ background-color: transparent;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 3px;
+}
+
+.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: 992px) {
+ .navbar-toggle {
+ display: none;
+ }
+}
+
+.navbar-nav {
+ margin: 7.5px 0;
+}
+
+.navbar-nav > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 20px;
+}
+
+@media (max-width: 991px) {
+ .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: 992px) {
+ .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: 0;
+ margin-right: 0;
+ padding: 10px 0;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ 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: 992px) {
+ .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: 991px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px;
+ }
+ .navbar-form .form-group:last-child {
+ margin-bottom: 0;
+ }
+}
+
+@media (min-width: 992px) {
+ .navbar-form {
+ width: auto;
+ border: 0;
+ margin-left: 0;
+ margin-right: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ 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: 3px;
+ border-top-left-radius: 3px;
+ 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: 992px) {
+ .navbar-text {
+ float: left;
+ margin-left: 0;
+ margin-right: 0;
+ }
+}
+
+@media (min-width: 992px) {
+ .navbar-left {
+ float: left !important;
+ }
+ .navbar-right {
+ float: right !important;
+ margin-right: 0;
+ }
+ .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: 991px) {
+ .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: #bfbfbf;
+}
+
+.navbar-inverse .navbar-brand:hover,
+.navbar-inverse .navbar-brand:focus {
+ color: #fff;
+ background-color: transparent;
+}
+
+.navbar-inverse .navbar-text {
+ color: #bfbfbf;
+}
+
+.navbar-inverse .navbar-nav > li > a {
+ color: #bfbfbf;
+}
+
+.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: 991px) {
+ .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: #bfbfbf;
+ }
+ .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: #bfbfbf;
+}
+
+.navbar-inverse .navbar-link:hover {
+ color: #fff;
+}
+
+.navbar-inverse .btn-link {
+ color: #bfbfbf;
+}
+
+.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: 3px;
+}
+
+.breadcrumb > li {
+ display: inline-block;
+}
+
+.breadcrumb > li + li:before {
+ content: "/\\00a0";
+ padding: 0 5px;
+ color: #ccc;
+}
+
+.breadcrumb > .active {
+ color: #999;
+}
+
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 20px 0;
+ border-radius: 3px;
+}
+
+.pagination > li {
+ display: inline;
+}
+
+.pagination > li > a,
+.pagination > li > span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ line-height: 1.428571429;
+ text-decoration: none;
+ color: #3a393b;
+ 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: 3px;
+ border-top-left-radius: 3px;
+}
+
+.pagination > li:last-child > a,
+.pagination > li:last-child > span {
+ border-bottom-right-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.pagination > li > a:hover,
+.pagination > li > a:focus,
+.pagination > li > span:hover,
+.pagination > li > span:focus {
+ z-index: 3;
+ color: #141314;
+ background-color: #fff;
+ 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: 2;
+ color: #fff;
+ background-color: #3a393b;
+ border-color: #3a393b;
+ 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: #999;
+ 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.3333333;
+}
+
+.pagination-lg > li:first-child > a,
+.pagination-lg > li:first-child > span {
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px;
+}
+
+.pagination-lg > li:last-child > a,
+.pagination-lg > li:last-child > span {
+ border-bottom-right-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.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: #fff;
+}
+
+.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: #999;
+ background-color: #fff;
+ cursor: not-allowed;
+}
+
+.label {
+ display: inline;
+ padding: 0.2em 0.6em 0.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: #999;
+}
+
+.label-default[href]:hover,
+.label-default[href]:focus {
+ background-color: gray;
+}
+
+.label-primary {
+ background-color: #3a393b;
+}
+
+.label-primary[href]:hover,
+.label-primary[href]:focus {
+ background-color: #212021;
+}
+
+.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: #999;
+ 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: #3a393b;
+ 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: #fff;
+}
+
+.jumbotron h1,
+.jumbotron .h1 {
+ color: inherit;
+}
+
+.jumbotron p {
+ margin-bottom: 15px;
+ font-size: 21px;
+ font-weight: 200;
+}
+
+.jumbotron > hr {
+ border-top-color: #e6e6e6;
+}
+
+.container .jumbotron,
+.container-fluid .jumbotron {
+ border-radius: 3px;
+}
+
+.jumbotron .container {
+ max-width: 100%;
+}
+
+@media screen and (min-width: 992px) {
+ .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.428571429;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 3px;
+ 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: #222;
+}
+
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+ border-color: #3a393b;
+}
+
+.alert {
+ padding: 8px 15px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+ border-radius: 0;
+}
+
+.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: 8px 15px20;
+}
+
+.alert-dismissable .close, .alert-dismissible .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit;
+}
+
+.alert-success {
+ background-color: #dae6cb;
+ border-color: #8cc63f;
+ color: #6c6c6c;
+}
+
+.alert-success hr {
+ border-top-color: #7fb636;
+}
+
+.alert-success .alert-link {
+ color: #525252;
+}
+
+.alert-info {
+ background-color: #d9edf7;
+ border-color: #008abf;
+ color: #6c6c6c;
+}
+
+.alert-info hr {
+ border-top-color: #0078a6;
+}
+
+.alert-info .alert-link {
+ color: #525252;
+}
+
+.alert-warning {
+ background-color: #f1e3c2;
+ border-color: #fdb813;
+ color: #6c6c6c;
+}
+
+.alert-warning hr {
+ border-top-color: #f4ad02;
+}
+
+.alert-warning .alert-link {
+ color: #525252;
+}
+
+.alert-danger {
+ background-color: #eac3c7;
+ border-color: #d9182d;
+ color: #6c6c6c;
+}
+
+.alert-danger hr {
+ border-top-color: #c21528;
+}
+
+.alert-danger .alert-link {
+ color: #525252;
+}
+
+@-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: 3px;
+ 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: #3a393b;
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ transition: width 0.6s ease;
+}
+
+.progress-striped .progress-bar,
+.progress-bar-striped {
+ 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;
+ 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, 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: 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: 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: 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: 3px;
+ border-top-left-radius: 3px;
+}
+
+.list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+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: #fff;
+ color: #999;
+ 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: #999;
+}
+
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #3a393b;
+ border-color: #3a393b;
+}
+
+.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: #a09ea2;
+}
+
+.list-group-item-success {
+ color: #6c6c6c;
+ background-color: #dae6cb;
+}
+
+a.list-group-item-success,
+button.list-group-item-success {
+ color: #6c6c6c;
+}
+
+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: #6c6c6c;
+ background-color: #cedeba;
+}
+
+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: #6c6c6c;
+ border-color: #6c6c6c;
+}
+
+.list-group-item-info {
+ color: #6c6c6c;
+ background-color: #d9edf7;
+}
+
+a.list-group-item-info,
+button.list-group-item-info {
+ color: #6c6c6c;
+}
+
+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: #6c6c6c;
+ 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: #6c6c6c;
+ border-color: #6c6c6c;
+}
+
+.list-group-item-warning {
+ color: #6c6c6c;
+ background-color: #f1e3c2;
+}
+
+a.list-group-item-warning,
+button.list-group-item-warning {
+ color: #6c6c6c;
+}
+
+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: #6c6c6c;
+ background-color: #ecd9ad;
+}
+
+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: #6c6c6c;
+ border-color: #6c6c6c;
+}
+
+.list-group-item-danger {
+ color: #6c6c6c;
+ background-color: #eac3c7;
+}
+
+a.list-group-item-danger,
+button.list-group-item-danger {
+ color: #6c6c6c;
+}
+
+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: #6c6c6c;
+ background-color: #e3b0b5;
+}
+
+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: #6c6c6c;
+ border-color: #6c6c6c;
+}
+
+.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: 3px;
+ 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: 2px;
+ border-top-left-radius: 2px;
+}
+
+.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: 2px;
+ border-bottom-left-radius: 2px;
+}
+
+.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: 2px;
+ border-top-left-radius: 2px;
+}
+
+.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: 2px;
+ border-bottom-left-radius: 2px;
+}
+
+.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: 2px;
+ border-top-left-radius: 2px;
+}
+
+.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: 2px;
+ border-top-right-radius: 2px;
+}
+
+.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: 2px;
+}
+
+.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: 2px;
+}
+
+.panel > .table:last-child,
+.panel > .table-responsive:last-child > .table:last-child {
+ border-bottom-right-radius: 2px;
+ border-bottom-left-radius: 2px;
+}
+
+.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: 2px;
+ border-bottom-right-radius: 2px;
+}
+
+.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: 2px;
+}
+
+.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: 2px;
+}
+
+.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: 3px;
+}
+
+.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: #222;
+ 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: #222;
+}
+
+.panel-default > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #ddd;
+}
+
+.panel-primary {
+ border-color: #3a393b;
+}
+
+.panel-primary > .panel-heading {
+ color: #fff;
+ background-color: #3a393b;
+ border-color: #3a393b;
+}
+
+.panel-primary > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #3a393b;
+}
+
+.panel-primary > .panel-heading .badge {
+ color: #3a393b;
+ background-color: #fff;
+}
+
+.panel-primary > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #3a393b;
+}
+
+.panel-success {
+ border-color: #8cc63f;
+}
+
+.panel-success > .panel-heading {
+ color: #6c6c6c;
+ background-color: #dae6cb;
+ border-color: #8cc63f;
+}
+
+.panel-success > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #8cc63f;
+}
+
+.panel-success > .panel-heading .badge {
+ color: #dae6cb;
+ background-color: #6c6c6c;
+}
+
+.panel-success > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #8cc63f;
+}
+
+.panel-info {
+ border-color: #008abf;
+}
+
+.panel-info > .panel-heading {
+ color: #6c6c6c;
+ background-color: #d9edf7;
+ border-color: #008abf;
+}
+
+.panel-info > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #008abf;
+}
+
+.panel-info > .panel-heading .badge {
+ color: #d9edf7;
+ background-color: #6c6c6c;
+}
+
+.panel-info > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #008abf;
+}
+
+.panel-warning {
+ border-color: #fdb813;
+}
+
+.panel-warning > .panel-heading {
+ color: #6c6c6c;
+ background-color: #f1e3c2;
+ border-color: #fdb813;
+}
+
+.panel-warning > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #fdb813;
+}
+
+.panel-warning > .panel-heading .badge {
+ color: #f1e3c2;
+ background-color: #6c6c6c;
+}
+
+.panel-warning > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #fdb813;
+}
+
+.panel-danger {
+ border-color: #d9182d;
+}
+
+.panel-danger > .panel-heading {
+ color: #6c6c6c;
+ background-color: #eac3c7;
+ border-color: #d9182d;
+}
+
+.panel-danger > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #d9182d;
+}
+
+.panel-danger > .panel-heading .badge {
+ color: #eac3c7;
+ background-color: #6c6c6c;
+}
+
+.panel-danger > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #d9182d;
+}
+
+.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: 3px;
+ 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: 3px;
+}
+
+.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%);
+ transform: translate(0, -25%);
+ transition: -webkit-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);
+ 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 #aaa;
+ border: 1px solid rgba(170, 170, 170, 0.3);
+ border-radius: 3px;
+ 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: #fff;
+}
+
+.modal-backdrop.fade {
+ opacity: 0;
+ filter: alpha(opacity=0);
+}
+
+.modal-backdrop.in {
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+}
+
+.modal-header {
+ padding: 27px 14px 14px 30px;
+ border-bottom: 1px solid transparent;
+ min-height: 27px 14px 14px 30px23px;
+}
+
+.modal-header .close {
+ margin-top: -2px;
+}
+
+.modal-title {
+ margin: 0;
+ line-height: 23px;
+}
+
+.modal-body {
+ position: relative;
+ padding: 20px 30px;
+}
+
+.modal-footer {
+ padding: 20px 30px;
+ text-align: right;
+ border-top: 1px solid transparent;
+}
+
+.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: 992px) {
+ .modal-dialog {
+ width: 824px;
+ margin: 30px auto;
+ }
+ .modal-content {
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
+ }
+ .modal-sm {
+ width: 524px;
+ }
+}
+
+@media (min-width: 1200px) {
+ .modal-lg {
+ width: 1124px;
+ }
+}
+
+.tooltip {
+ position: absolute;
+ z-index: 1070;
+ display: block;
+ font-family: "HelveticaNeueMedium", "HelveticaNeue-Medium", "Helvetica Neue Medium", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-style: normal;
+ font-weight: normal;
+ letter-spacing: normal;
+ line-break: auto;
+ line-height: 1.428571429;
+ 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: 3px;
+}
+
+.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: "HelveticaNeueMedium", "HelveticaNeue-Medium", "Helvetica Neue Medium", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-style: normal;
+ font-weight: normal;
+ letter-spacing: normal;
+ line-break: auto;
+ line-height: 1.428571429;
+ 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: 3px;
+ 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: 2px 2px 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;
+ 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 {
+ transition: -webkit-transform 0.6s ease-in-out;
+ transition: transform 0.6s ease-in-out;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-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);
+}
+
+.carousel-control.left {
+ 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: 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: 992px) {
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-prev,
+ .carousel-control .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ font-size: 30px;
+ }
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .icon-prev {
+ margin-left: -15px;
+ }
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-next {
+ margin-right: -15px;
+ }
+ .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: 991px) {
+ .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: 991px) {
+ .visible-xs-block {
+ display: block !important;
+ }
+}
+
+@media (max-width: 991px) {
+ .visible-xs-inline {
+ display: inline !important;
+ }
+}
+
+@media (max-width: 991px) {
+ .visible-xs-inline-block {
+ display: inline-block !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .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: 992px) and (max-width: 1199px) {
+ .visible-sm-block {
+ display: block !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-sm-inline {
+ display: inline !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-sm-inline-block {
+ display: inline-block !important;
+ }
+}
+
+@media (min-width: 1200px) and (max-width: 1679) {
+ .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: 1200px) and (max-width: 1679) {
+ .visible-md-block {
+ display: block !important;
+ }
+}
+
+@media (min-width: 1200px) and (max-width: 1679) {
+ .visible-md-inline {
+ display: inline !important;
+ }
+}
+
+@media (min-width: 1200px) and (max-width: 1679) {
+ .visible-md-inline-block {
+ display: inline-block !important;
+ }
+}
+
+@media (min-width: 1680) {
+ .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: 1680) {
+ .visible-lg-block {
+ display: block !important;
+ }
+}
+
+@media (min-width: 1680) {
+ .visible-lg-inline {
+ display: inline !important;
+ }
+}
+
+@media (min-width: 1680) {
+ .visible-lg-inline-block {
+ display: inline-block !important;
+ }
+}
+
+@media (max-width: 991px) {
+ .hidden-xs {
+ display: none !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-sm {
+ display: none !important;
+ }
+}
+
+@media (min-width: 1200px) and (max-width: 1679) {
+ .hidden-md {
+ display: none !important;
+ }
+}
+
+@media (min-width: 1680) {
+ .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;
+ }
+}
+
+/*
+The MIT License (MIT)
+
+Copyright (c) 2013-2015 bootstrap-select
+
+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. */
+.bootstrap-select {
+ /*width: 220px\9; IE8 and below*/
+ width: 220px \0;
+ /*IE9 and below*/
+}
+
+.bootstrap-select > .btn {
+ width: 100%;
+ height: 40px;
+ padding-right: 25px;
+}
+
+.error .bootstrap-select .btn {
+ border: 1px solid #b94a48;
+}
+
+.control-group.error .bootstrap-select .dropdown-toggle {
+ border-color: #b94a48;
+}
+
+.bootstrap-select.fit-width {
+ width: auto !important;
+}
+
+.bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) {
+ width: 220px;
+}
+
+.bootstrap-select .btn:focus {
+ outline: thin dotted #333333 !important;
+ outline: 5px auto -webkit-focus-ring-color !important;
+ outline-offset: -2px;
+}
+
+.bootstrap-select.form-control {
+ margin-bottom: 0;
+ padding: 0;
+ border: none;
+}
+
+.bootstrap-select.form-control:not([class*="col-"]) {
+ width: 100%;
+}
+
+.bootstrap-select.btn-group:not(.input-group-btn),
+.bootstrap-select.btn-group[class*="col-"] {
+ float: none;
+ display: inline-block;
+ margin-left: 0;
+}
+
+.bootstrap-select.btn-group.dropdown-menu-right,
+.bootstrap-select.btn-group[class*="col-"].dropdown-menu-right,
+.row-fluid .bootstrap-select.btn-group[class*="col-"].dropdown-menu-right {
+ float: right;
+}
+
+.form-search .bootstrap-select.btn-group,
+.form-inline .bootstrap-select.btn-group,
+.form-horizontal .bootstrap-select.btn-group,
+.form-group .bootstrap-select.btn-group {
+ margin-bottom: 0;
+}
+
+.form-group-lg .bootstrap-select.btn-group.form-control,
+.form-group-sm .bootstrap-select.btn-group.form-control {
+ padding: 0;
+}
+
+.form-inline .bootstrap-select.btn-group .form-control {
+ width: 100%;
+}
+
+.input-append .bootstrap-select.btn-group {
+ margin-left: -1px;
+}
+
+.input-prepend .bootstrap-select.btn-group {
+ margin-right: -1px;
+}
+
+.bootstrap-select.btn-group > .disabled {
+ cursor: not-allowed;
+}
+
+.bootstrap-select.btn-group > .disabled:focus {
+ outline: none !important;
+}
+
+.bootstrap-select.btn-group .btn .filter-option {
+ display: inline-block;
+ overflow: hidden;
+ width: 100%;
+ text-align: left;
+}
+
+.bootstrap-select.btn-group .btn .caret {
+ position: absolute;
+ top: 0;
+ right: 40px;
+ margin-top: 0;
+ vertical-align: top;
+ border: 0;
+ border-left: 1px solid #ccc;
+ height: 38px;
+}
+
+.bootstrap-select.btn-group .btn .caret:before {
+ content: '\e861';
+ font-family: "fontello";
+ font-size: 15px;
+ color: #666666;
+ position: absolute;
+ left: 12px;
+ top: 9px;
+ display: block;
+}
+
+.bootstrap-select.btn-group .btn:hover .caret {
+ border-color: #adadad;
+}
+
+.bootstrap-select.btn-group .btn:focus .caret {
+ border-color: #8c8c8c;
+}
+
+.bootstrap-select.btn-group[class*="col-"] .btn {
+ width: 100%;
+}
+
+.bootstrap-select.btn-group .dropdown-menu {
+ min-width: 100%;
+ z-index: 1035;
+ box-sizing: border-box;
+}
+
+.bootstrap-select.btn-group .dropdown-menu.inner {
+ position: static;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ border-radius: 0;
+ box-shadow: none;
+}
+
+.bootstrap-select.btn-group .dropdown-menu li {
+ position: relative;
+}
+
+.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) a:hover small,
+.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) a:focus small,
+.bootstrap-select.btn-group .dropdown-menu li.active:not(.disabled) a small {
+ color: #64b1d8;
+ color: fade(#64b1d8, 40%);
+}
+
+.bootstrap-select.btn-group .dropdown-menu li.disabled a {
+ cursor: not-allowed;
+}
+
+.bootstrap-select.btn-group .dropdown-menu li a {
+ outline: none;
+ cursor: pointer;
+}
+
+.bootstrap-select.btn-group .dropdown-menu li a.opt {
+ position: relative;
+ padding-left: 2.25em;
+}
+
+.bootstrap-select.btn-group .dropdown-menu li a span.check-mark {
+ display: none;
+}
+
+.bootstrap-select.btn-group .dropdown-menu li a span.text {
+ display: inline-block;
+}
+
+.bootstrap-select.btn-group .dropdown-menu li small {
+ padding-left: 0.5em;
+}
+
+.bootstrap-select.btn-group .dropdown-menu .notify {
+ position: absolute;
+ bottom: 5px;
+ width: 96%;
+ margin: 0 2%;
+ min-height: 26px;
+ padding: 3px 5px;
+ background: whitesmoke;
+ border: 1px solid #e3e3e3;
+ box-shadow: inset 0 1px 1px fade(black, 5%);
+ pointer-events: none;
+ opacity: 0.9;
+ box-sizing: border-box;
+}
+
+.bootstrap-select.btn-group .no-results {
+ padding: 3px;
+ background: #f5f5f5;
+ margin: 0 5px;
+}
+
+.bootstrap-select.btn-group.fit-width .btn .filter-option {
+ position: static;
+}
+
+.bootstrap-select.btn-group.fit-width .btn .caret {
+ position: static;
+ top: auto;
+ margin-top: -1px;
+}
+
+.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark {
+ position: absolute;
+ display: inline-block;
+ right: 15px;
+ margin-top: 5px;
+}
+
+.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text {
+ margin-right: 34px;
+}
+
+.bootstrap-select.show-menu-arrow.open > .btn {
+ z-index: 1036;
+}
+
+.bootstrap-select.show-menu-arrow .dropdown-toggle:before {
+ content: '';
+ border-left: 7px solid transparent;
+ border-right: 7px solid transparent;
+ border-bottom-width: 7px;
+ border-bottom-style: solid;
+ border-bottom-color: #cccccc;
+ border-bottom-color: fade(#cccccc, 20%);
+ position: absolute;
+ bottom: -4px;
+ left: 9px;
+ display: none;
+}
+
+.bootstrap-select.show-menu-arrow .dropdown-toggle:after {
+ content: '';
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ border-bottom: 6px solid white;
+ position: absolute;
+ bottom: -4px;
+ left: 10px;
+ display: none;
+}
+
+.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before {
+ bottom: auto;
+ top: -3px;
+ border-bottom: 0;
+ border-top-width: 7px;
+ border-top-style: solid;
+ border-top-color: #cccccc;
+ border-top-color: fade(#cccccc, 20%);
+}
+
+.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after {
+ bottom: auto;
+ top: -3px;
+ border-top: 6px solid white;
+ border-bottom: 0;
+}
+
+.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before {
+ right: 12px;
+ left: auto;
+}
+
+.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after {
+ right: 13px;
+ left: auto;
+}
+
+.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:before,
+.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:after {
+ display: block;
+}
+
+.bootstrap-select.btn-group.open .btn .caret {
+ border-left-color: #adadad;
+}
+
+.bootstrap-select.btn-group.open .btn:hover .caret {
+ border-left-color: #8c8c8c;
+}
+
+.bs-searchbox,
+.bs-actionsbox {
+ padding: 4px 8px;
+}
+
+.bs-actionsbox {
+ float: left;
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.bs-actionsbox .btn-group button {
+ width: 50%;
+}
+
+.bs-searchbox + .bs-actionsbox {
+ padding: 0 8px 4px;
+}
+
+.bs-searchbox input.form-control {
+ margin-bottom: 0;
+ width: 100%;
+}
+
+.mobile-device {
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: block !important;
+ width: 100%;
+ height: 100% !important;
+ opacity: 0;
+}
+
+.container {
+ margin-right: auto;
+ margin-left: auto;
+ padding-left: 80px !important;
+ padding-right: 60px !important;
+}
+
+.alert {
+ border-width: 0 0 0 5px;
+}
+
+/* Body specs */
+body {
+ color: #222;
+ background: #fff;
+}
+
+/* Message warning users that some features might not be supported in old browsers */
+.browserupgrade {
+ margin: 0.2em 0;
+ background: #ccc;
+ color: #000;
+ padding: 0.2em 0;
+}
+
+/* Topbar */
+.topbar {
+ padding: 0;
+ background: #222;
+}
+
+.topbar .banner-area {
+ background: #222;
+}
+
+.topbar .banner-area h1 {
+ margin: 0 0 0 -80px;
+ padding: 0 0 0 80px;
+ height: 55px;
+ background: transparent url("../images/logo-white.png") no-repeat 24px 3px;
+ color: #fff;
+ font-family: "HelveticaNeueBold", "HelveticaNeue-Bold", "HelveticaNeue Bold", "Helvetica Neue Bold", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-weight: 600;
+ font-size: 1.571em;
+ line-height: 55px;
+ cursor: default;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.topbar .tab-area {
+ background: #3a393b;
+ height: 40px;
+}
+
+.topbar .tab-area span.hostname {
+ display: inline-block;
+ font-family: "Helvetica Neue LT W1G 55 Roman", "Helvetica Neue LT W1G", "HelveticaNeue Roman", "HelveticaNeue-Roman", "Helvetica Neue Roman", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ color: #fff;
+ font-size: 13pt;
+ font-weight: 400;
+ margin: 0;
+ padding: 8px 0;
+ vertical-align: top;
+ box-sizing: border-box;
+}
+
+.topbar .tab-area ul.nav-menu {
+ display: inline-block;
+ list-style: none;
+ list-style-position: inside;
+ padding: 0;
+ margin: 0 0 0 24px;
+}
+
+.topbar .tab-area ul.nav-menu li {
+ float: left;
+ display: block;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.topbar .tab-area ul.nav-menu li a, .topbar .tab-area ul.nav-menu li .disabled {
+ display: block;
+ font-family: "HelveticaNeueBold", "HelveticaNeue-Bold", "HelveticaNeue Bold", "Helvetica Neue Bold", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-weight: 600;
+ color: #fff;
+ text-decoration: none;
+ font-size: 13pt;
+ padding: 8px 40px;
+ min-width: 190px;
+ text-align: center;
+ outline: none;
+}
+
+.topbar .tab-area ul.nav-menu li .disabled {
+ color: #999;
+ cursor: default;
+}
+
+.topbar .tab-area ul.nav-menu li .disabled .digit-container {
+ display: none;
+}
+
+.topbar .tab-area ul.nav-menu li .digit-container {
+ display: inline-block;
+ margin-left: 10px;
+ border-radius: 16px;
+ height: 22px;
+ background: #555;
+ border: 2px solid #555;
+ color: #fff;
+ font-family: "HelveticaNeueMedium", "HelveticaNeue-Medium", "Helvetica Neue Medium", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-size: 14px;
+ padding: 0 8px;
+}
+
+.topbar .tab-area ul.nav-menu li.current .digit-container {
+ border-color: #fff;
+ background: transparent;
+}
+
+.topbar .tab-area ul.nav-menu li.current.hosts {
+ background: #008abf;
+}
+
+.topbar .tab-area ul.nav-menu li.current.guests {
+ background: #8cc63f;
+}
+
+.topbar .tab-area ul.nav-menu li.current.templates {
+ background: #00a6a0;
+}
+
+.topbar .tab-area ul.nav-menu li.current.storage {
+ background: #feb813;
+}
+
+.topbar .tab-area ul.nav-menu li.current.networks {
+ background: #7f1c7d;
+}
+
+.topbar .tab-area ul.nav-menu li.current.administration {
+ background: #d9182d;
+}
+
+.topbar .panel-actions-area {
+ min-height: 40px;
+}
+
+.login-area {
+ margin: 90px auto 0;
+ width: 300px;
+}
+
+.login-area .btn-login {
+ display: block;
+ position: static;
+ float: none;
+ margin-bottom: 50px;
+}
+
+.login-area .col-md-12, .login-area .col-lg-12 {
+ width: 100%;
+}
+
+.login-area .bootstrap-select,
+.login-area .selectpicker {
+ font-family: "HelveticaNeueLight", "HelveticaNeue-Light", "HelveticaNeue Light", "HelveticaNeue", "HelveticaNeue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-size: 13pt;
+}
+
+.login-area .dropdown-toggle.selectpicker {
+ height: 40px;
+}
+
+.login-area .form-group {
+ margin-bottom: 20px;
+}
+
+.login-area .form-group:last-child {
+ margin-bottom: 0;
+}
+
+.btn {
+ font-family: "HelveticaNeueMedium", "HelveticaNeue-Medium", "Helvetica Neue Medium", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-size: 13pt;
+}
+
+.btn-login {
+ color: #fff;
+ background-color: #008abf;
+ border-color: #008abf;
+}
+
+.btn-login:focus,
+.btn-login.focus {
+ color: #fff;
+ background-color: #00658c;
+ border-color: #002e40;
+}
+
+.btn-login:hover {
+ color: #fff;
+ background-color: #00658c;
+ border-color: #005e82;
+}
+
+.btn-login:active,
+.btn-login.active,
+.open > .btn-login.dropdown-toggle {
+ color: #fff;
+ background-color: #00658c;
+ border-color: #005e82;
+}
+
+.btn-login:active:hover,
+.btn-login:active:focus,
+.btn-login:active.focus,
+.btn-login.active:hover,
+.btn-login.active:focus,
+.btn-login.active.focus,
+.open > .btn-login.dropdown-toggle:hover,
+.open > .btn-login.dropdown-toggle:focus,
+.open > .btn-login.dropdown-toggle.focus {
+ color: #fff;
+ background-color: #004b68;
+ border-color: #002e40;
+}
+
+.btn-login:active,
+.btn-login.active,
+.open > .btn-login.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-login.disabled,
+.btn-login.disabled:hover,
+.btn-login.disabled:focus,
+.btn-login.disabled.focus,
+.btn-login.disabled:active,
+.btn-login.disabled.active,
+.btn-login[disabled],
+.btn-login[disabled]:hover,
+.btn-login[disabled]:focus,
+.btn-login[disabled].focus,
+.btn-login[disabled]:active,
+.btn-login[disabled].active,
+fieldset[disabled] .btn-login,
+fieldset[disabled] .btn-login:hover,
+fieldset[disabled] .btn-login:focus,
+fieldset[disabled] .btn-login.focus,
+fieldset[disabled] .btn-login:active,
+fieldset[disabled] .btn-login.active {
+ background-color: #008abf;
+ border-color: #008abf;
+}
+
+.btn-login .badge {
+ color: #008abf;
+ background-color: #fff;
+}
+
+/*
+* Project Kimchi
+*
+* Copyright IBM, Corp. 2015
+*
+* Licensed under the Apache License, Version 2.0 (the 'License');
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an 'AS IS' BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+.dialog-border-grey {
+ background-clip: border-box;
+ border: 6px solid rgba(170, 170, 170, 0.3);
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ margin: auto;
+ border-radius: 5px;
+}
+
+.dialog-container {
+ border: 3px solid #999999;
+ background: white;
+}
+
+.dialog-container .dialog-title {
+ height: 60px;
+ padding: 20px 0 20px 20px;
+ margin: 0;
+ float: left;
+ font-size: 27px;
+ font-family: "HelveticaNeueLight", "HelveticaNeue-Light", "HelveticaNeue Light", "HelveticaNeue", "HelveticaNeue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-weight: 300 !important;
+}
+
+.dialog-container .dialog-body {
+ position: relative;
+}
+
+.dialog-container .dialog-footer {
+ height: 50px;
+ background-color: #008ABF;
+}
+
+.dialog-container .dialog-footer .dialog-button {
+ display: inline-block;
+ background-color: white;
+ width: 75px;
+ height: 30px;
+ line-height: 30px;
+ position: relative;
+ margin-left: 10px;
+ margin-top: 10px;
+ text-align: center;
+ vertical-align: middle;
+}
+
+.dialog-container .dialog-footer .dialog-button:hover {
+ background-color: #EEEEEE;
+ cursor: pointer;
+}
+
+/*
+* Project Kimchi
+*
+* Copyright IBM, Corp. 2015
+*
+* Licensed under the Apache License, Version 2.0 (the 'License');
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an 'AS IS' BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+.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%);
+ transform: translate(0, -25%);
+ transition: -webkit-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);
+ transform: translate(0, 0);
+}
+
+.modal-open .modal {
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 10px;
+ border: 6px solid #aaa;
+ border: 6px solid rgba(170, 170, 170, 0.3);
+ border-radius: 5px;
+ background-clip: padding-box;
+}
+
+.modal-content {
+ position: relative;
+ background-color: #fff;
+ border-radius: 0;
+ border: 3px solid #999;
+ background-clip: padding-box;
+ box-shadow: none !important;
+ border-radius: 0;
+ outline: 0;
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ background-color: #fff;
+}
+
+.modal-backdrop.fade {
+ opacity: 0;
+ filter: alpha(opacity=0);
+}
+
+.modal-backdrop.in {
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+}
+
+.modal-header {
+ padding: 27px 14px 14px 30px;
+ border-bottom: 1px solid transparent;
+ min-height: 27px 14px 14px 30px23px;
+}
+
+.modal-header .close {
+ margin-top: -2px;
+}
+
+.modal-title {
+ margin: 0;
+ line-height: 23px;
+ font-size: 27px;
+ font-family: "HelveticaNeueLight", "HelveticaNeue-Light", "HelveticaNeue Light", "HelveticaNeue", "HelveticaNeue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-weight: 300 !important;
+}
+
+.modal-body {
+ position: relative;
+ padding: 20px 30px;
+}
+
+.modal-footer {
+ padding: 20px 30px;
+ text-align: left !important;
+ border-top: 0;
+ margin-top: 20px;
+}
+
+.modal-footer:before,
+.modal-footer:after {
+ content: " ";
+ display: table;
+}
+
+.modal-footer:after {
+ clear: both;
+}
+
+.modal-footer .btn {
+ padding: 6px 12px;
+ min-width: 75px;
+}
+
+.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: 992px) {
+ .modal-dialog {
+ width: 824px;
+ margin: 30px auto;
+ }
+ .modal-content {
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
+ }
+ .modal-sm {
+ width: 524px;
+ }
+}
+
+@media (min-width: 1200px) {
+ .modal-lg {
+ width: 1124px;
+ }
+}
+
+.modal {
+ text-align: center;
+}
+
+@media screen and (min-width: 768px) {
+ .modal:before {
+ display: inline-block;
+ vertical-align: middle;
+ content: " ";
+ height: 100%;
+ }
+}
+
+.modal-dialog {
+ display: inline-block;
+ text-align: left;
+ vertical-align: middle;
+}
+
+/*
+* Project Kimchi
+*
+* Copyright IBM, Corp. 2015
+*
+* Licensed under the Apache License, Version 2.0 (the 'License');
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an 'AS IS' BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+.menu-flat .btn {
+ background: #4d4c4e !important;
+ min-width: 160px;
+ border: 0 !important;
+ font-family: "HelveticaNeueBold", "HelveticaNeue-Bold", "HelveticaNeue Bold", "Helvetica Neue Bold", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-weight: 700;
+ font-size: 13.5pt;
+ position: relative;
+ height: 40px;
+ padding: 4px 45px 5px 38px;
+}
+
+.menu-flat .btn > i {
+ font-size: 22px;
+ vertical-align: bottom;
+ width: 26px;
+ height: 40px;
+ text-align: left;
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 6px;
+}
+
+.menu-flat .btn > i:before {
+ line-height: 40px;
+}
+
+.menu-flat .caret {
+ position: absolute;
+ top: 0;
+ right: 0;
+ display: block;
+ width: 40px;
+ height: 40px;
+ margin-left: 0;
+ vertical-align: middle;
+ border-top: 0;
+ border-top: 0 \9;
+ border-right: 0;
+ border-left: 0;
+}
+
+.menu-flat .caret:before {
+ font-family: "fontello";
+ font-style: normal;
+ font-weight: normal;
+ font-size: 13px;
+ speak: none;
+ display: inline-block;
+ text-decoration: inherit;
+ width: 1.2em;
+ height: 1.2em;
+ margin: .5em;
+ text-align: center;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 2em;
+ content: '\e861';
+}
+
+.menu-flat.dropup,
+.menu-flat.dropdown {
+ position: relative;
+}
+
+.menu-flat .dropdown-toggle:focus {
+ outline: 0;
+}
+
+.menu-flat .dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ font-size: 13.5pt;
+ text-align: left;
+ background-color: #3a393b;
+ border: 0;
+ border-radius: 0;
+ box-shadow: none !important;
+ background-clip: padding-box;
+}
+
+.menu-flat .dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+
+.menu-flat .dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #404042;
+}
+
+.menu-flat .dropdown-menu > li > a {
+ border-top: 1px solid #2e2e2e;
+ box-shadow: inset 0px 1px 0px 0px #404042;
+}
+
+.menu-flat .dropdown-menu > li:first-child > a {
+ border-top: 1px solid #3a393b;
+ box-shadow: none;
+}
+
+.menu-flat .dropdown-menu > li.critical:last-child > a {
+ box-shadow: none;
+}
+
+.menu-flat .dropdown-menu > li > a {
+ display: block;
+ padding: 4px 6px;
+ clear: both;
+ font-weight: normal;
+ line-height: 31px;
+ color: #fff;
+ white-space: nowrap;
+}
+
+.menu-flat .dropdown-menu > li > a > i {
+ font-size: 22px;
+ margin-right: 10px;
+ vertical-align: top;
+ width: 26px;
+ height: 26px;
+ text-align: left;
+ display: inline-block;
+}
+
+.menu-flat .dropdown-menu > li > a:hover,
+.menu-flat .dropdown-menu > li > a:focus {
+ text-decoration: none;
+ color: #fff;
+ background-color: #3a393b;
+}
+
+.menu-flat .dropdown-menu > .active > a,
+.menu-flat .dropdown-menu > .active > a:hover,
+.menu-flat .dropdown-menu > .active > a:focus {
+ color: #fff;
+ text-decoration: none;
+ outline: 0;
+ background-color: #3a393b;
+}
+
+.menu-flat .dropdown-menu > li.critical > a {
+ background: #d9182d;
+}
+
+.menu-flat .dropdown-menu > .disabled > a,
+.menu-flat .dropdown-menu > .disabled > a:hover,
+.menu-flat .dropdown-menu > .disabled > a:focus {
+ color: #999;
+}
+
+.menu-flat .dropdown-menu > .disabled > a:hover,
+.menu-flat .dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ cursor: not-allowed;
+}
+
+.menu-flat.open .btn {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.menu-flat.open > .dropdown-menu {
+ display: block;
+}
+
+.menu-flat.open .caret {
+ background: #3a393b;
+}
+
+.menu-flat.open .caret:before {
+ content: '\e864';
+}
+
+.menu-flat.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.428571429;
+ color: #999;
+ 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: 992px) {
+ .navbar-right .dropdown-menu {
+ right: 0;
+ left: auto;
+ }
+ .navbar-right .dropdown-menu-left {
+ left: 0;
+ right: auto;
+ }
+}
+
+.hosts {
+ /* Bootstrap Modal*/
+}
+
+.hosts .modal-footer {
+ background: #008abf;
+}
+
+pre {
+ margin-top: 20px;
+}
+
+@media screen and (min-width: 768px) {
+ .container {
+ width: 1540px;
+ }
+}
+
+@media screen and (min-width: 1680px) {
+ .container {
+ width: 1540px;
+ }
+}
+
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uc2NzcyIsIm1vZHVsZXMvX3Jlc2V0LnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL2Z1bmN0aW9ucy9fbGlzdHMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvZnVuY3Rpb25zL19jb25zdGFudHMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvZnVuY3Rpb25zL19kaXNwbGF5LnNjc3MiLCJtb2R1bGVzL19ib290c3RyYXAuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fbm9ybWFsaXplLnNjc3MiLCJtYWluLmNzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fcHJpbnQuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fZ2x5cGhpY29ucy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19zY2FmZm9sZGluZy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fdmVuZG9yLXByZWZpeGVzLnNjc3MiLCJtb2R1bGVzL19raW1jaGktdmFyaWFibGVzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zL190YWItZm9jdXMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX2ltYWdlLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvX3R5cGUuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX3RleHQtZW1waGFzaXMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX2JhY2tncm91bmQtdmFyaWFudC5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fY2xlYXJmaXguc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX3RleHQtb3ZlcmZsb3cuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fY29kZS5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19ncmlkLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zL19ncmlkLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zL19ncmlkLWZyYW1ld29yay5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL190YWJsZXMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX3RhYmxlLXJvdy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19mb3Jtcy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fZm9ybXMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fYnV0dG9ucy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fYnV0dG9ucy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fb3BhY2l0eS5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19jb21wb25lbnQtYW5pbWF0aW9ucy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19kcm9wZG93bnMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX25hdi1kaXZpZGVyLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zL19yZXNldC1maWx0ZXIuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fYnV0dG9uLWdyb3Vwcy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fYm9yZGVyLXJhZGl1cy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19pbnB1dC1ncm91cHMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fbmF2cy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19uYXZiYXIuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX25hdi12ZXJ0aWNhbC1hbGlnbi5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19icmVhZGNydW1icy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19wYWdpbmF0aW9uLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zL19wYWdpbmF0aW9uLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvX3BhZ2VyLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvX2xhYmVscy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fbGFiZWxzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvX2JhZGdlcy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19qdW1ib3Ryb24uc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fdGh1bWJuYWlscy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19hbGVydHMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX2FsZXJ0cy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19wcm9ncmVzcy1iYXJzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zL19ncmFkaWVudHMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX3Byb2dyZXNzLWJhci5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19tZWRpYS5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19saXN0LWdyb3VwLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zL19saXN0LWdyb3VwLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvX3BhbmVscy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fcGFuZWxzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvX3Jlc3BvbnNpdmUtZW1iZWQuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fd2VsbHMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fY2xvc2Uuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fbW9kYWxzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvX3Rvb2x0aXAuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX3Jlc2V0LXRleHQuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fcG9wb3ZlcnMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fY2Fyb3VzZWwuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fdXRpbGl0aWVzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zL19jZW50ZXItYmxvY2suc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX2hpZGUtdGV4dC5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19yZXNwb25zaXZlLXV0aWxpdGllcy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fcmVzcG9uc2l2ZS12aXNpYmlsaXR5LnNjc3MiLCJtb2R1bGVzL19ib290c3RyYXAtc2VsZWN0LnNjc3MiLCJtb2R1bGVzL19iYXNlLnNjc3MiLCJtb2R1bGVzL190b3BiYXIuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvY3NzMy9fc2hhcmVkLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL2NzczMvX3VzZXItaW50ZXJmYWNlLnNjc3MiLCJtb2R1bGVzL19sb2dpbi5zY3NzIiwibW9kdWxlcy9fYnV0dG9ucy5zY3NzIiwibW9kdWxlcy9fZGlhbG9nLWZsYXQuc2NzcyIsIm1vZHVsZXMvX21vZGFsLWZsYXQuc2NzcyIsIm1vZHVsZXMvX21lbnUtZmxhdC5zY3NzIiwibW9kdWxlcy9fY29sb3JzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUNoQkgsV0FBVztBQU9DOzs7Ozs7RUFDUixVQUFVO0VBQ1YsV0FBVztFQUNYLFVBQVU7Q0FITTs7QUFNa0Q7RUFFbEUsZUFBZTtDQURkOztBQUlGO0VBQ0MsaUJBQWlC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aUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBU1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFB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QkFBb0M7RUFDcEMsb0JBQXVDO0VBRXZDLGlCQUFpQjtFQUNqQixpQkFBa0M7Q0FOZDs7QUFTbkI7Ozs7Ozs7RUFDQyxnQkFBZ0I7RUFDaEIsaUJBQWlCO0NBRlA7O0FDaFArRzs7O0VBRXpILGFmeUttQztFZXhLbkMsa0JmZ0Q0QjtFZS9DNUIsZ0JmRjBCO0VlRzFCLGlCZm9EMkI7RWVuRDNCLG1CZnVEMkI7Q2U1RDNCOztBQU1EOzs7RUFHQyxhZmlLbUM7RWVoS25DLGtCZmdLbUM7Q2VsS25DOztBQUdEOzs7Ozs7O0VBR0MsYUFBYTtDQURiOztBRG1QRjtFQUNFLGFkdkZtQztFY3dGbkMsa0JkaE40QjtFY2lONUIsZ0JkbFEwQjtFY21RMUIsaUJkNU0yQjtFYzZNM0IsbUJkek0yQjtDY29NZDs7QUFPVDtFQUNKLGFkOUZtQztFYytGbkMsa0JkL0ZtQztDYzZGaEI7O0FBS0w7O0VBQ2QsYUFBYTtDQURnQjs7QUFHL0I7RUFDRSxhZHRHbUM7RWN1R25DLGlCQUFrQztFQUNsQyxrQmRoTzRCO0VjaU81QixnQmRsUjBCO0VjbVIxQixpQmQ1TjJCO0NjdU5QOztBQ2hScUc7OztFQUV6SCxhZnVLa0M7RWV0S2xDLG1CZjZDNEI7RWU1QzVCLGdCZkgwQjtFZUkxQix1QmZtRGlDO0VlbERqQyxtQmZzRDJCO0NlM0QzQjs7QUFNRDs7O0VBR0MsYWYrSmtDO0VlOUpsQyxrQmY4SmtDO0NlaEtsQzs7QUFHRDs7Ozs7OztFQUdDLGFBQWE7Q0FEYjs7QUQ2UUY7RUFDRSxhZG5Ia0M7RWNvSGxDLG1CZDdPNEI7RWM4TzVCLGdCZDdSMEI7RWM4UjFCLHVCZHZPaUM7RWN3T2pDLG1CZHBPMkI7Q2MrTmQ7O0FBT1Q7RUFDSixhZDFIa0M7RWMySGxDLGtCZDNIa0M7Q2N5SGY7O0FBS0w7O0VBQ2QsYUFBYTtDQURnQjs7QUFHL0I7RUFDRSxhZGxJa0M7RWNtSWxDLGlCQUFrQztFQUNsQyxtQmQ3UDRCO0VjOFA1QixnQmQ3UzBCO0VjOFMxQix1QmR2UGlDO0Nja1BiOztBQWN4QjtFQUVFLG1CQUFtQjtDQUZOOztBQUtiO0VBQ0Usc0JBQWtDO0NBRHJCOztBQUtqQjtFQUNFLG1CQUFtQjtFQUNuQixPQUFPO0VBQ1AsU0FBUztFQUNULFdBQVc7RUFDWCxlQUFlO0VBQ2YsWWRqS3FEO0Vja0tyRCxhZGxLcUQ7RWNtS3JELGtCZG5LcUQ7RWNvS3JELG1CQUFtQjtFQUNuQixxQkFBcUI7Q0FWQzs7QUFjTzs7Ozs7O0VBQzdCLFlkeEtvQztFY3lLcEMsYWR6S29DO0VjMEtwQyxrQmQxS29DO0NjdUtpQjs7QUFPeEI7Ozs7OztFQUM3QixZZDdLcUM7RWM4S3JDLGFkOUtxQztFYytLckMsa0JkL0txQztDYzRLZ0I7O0FDNVluQzs7Ozs7Ozs7OztFQUNoQixlZm1oQm9DO0NlcGhCWjs7QUFJMUI7RUFDRSxzQmYrZ0JvQztFRC9kOUIsaURnQi9Da0M7Q0FGM0I7O0FBR1o7RUFDQyxzQkFBb0I7RWhCNkNoQixrRWdCNUNzRDtDQUZuRDs7QUFPWDtFQUNFLGVmcWdCb0M7RWVwZ0JwQyxzQmZvZ0JvQztFZW5nQnBDLDBCZm9nQm9DO0NldmdCbEI7O0FBTXBCO0VBQ0UsZWYrZm9DO0NlaGdCZDs7QUFwQk47Ozs7Ozs7Ozs7RUFDaEIsZWYyaEJvQztDZTVoQlo7O0FBSTFCO0VBQ0Usc0JmdWhCb0M7RUR2ZTlCLGlEZ0IvQ2tDO0NBRjNCOztBQUdaO0VBQ0Msc0JBQW9CO0VoQjZDaEIsa0VnQjVDc0Q7Q0FGbkQ7O0FBT1g7RUFDRSxlZjZnQm9DO0VlNWdCcEMsc0JmNGdCb0M7RWUzZ0JwQywwQmY0Z0JvQztDZS9nQmxCOztBQU1wQjtFQUNFLGVmdWdCb0M7Q2V4Z0JkOztBQXBCTjs7Ozs7Ozs7OztFQUNoQixlZitoQm9DO0NlaGlCWjs7QUFJMUI7RUFDRSxzQmYyaEJvQztFRDNlOUIsaURnQi9Da0M7Q0FGM0I7O0FBR1o7RUFDQyxzQkFBb0I7RWhCNkNoQixrRWdCNUNzRDtDQUZuRDs7QUFPWDtFQUNFLGVmaWhCb0M7RWVoaEJwQyxzQmZnaEJvQztFZS9nQnBDLDBCZmdoQnFDO0NlbmhCbkI7O0FBTXBCO0VBQ0UsZWYyZ0JvQztDZTVnQmQ7O0FE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SkQ7RUFDRTtJQUNFLHVCQUF1QjtHQURYO0VBR2Q7SUFDRSx3QkFBd0I7SUFDMUIsZ0IzQjZCc0M7RzJCL0J2QjtFQUlYO0lBQ0EsZ0JBQWdCO0dBREQ7Q2hDKzVKcEI7O0FnQ3A1SkQ7RUFDRSwwQjNCb0J3QztFMkJuQnhDLHNCM0JvQnVDO0MyQnRCeEI7O0FBSWY7RUFDRSxZM0JvQjJDO0MyQnJCOUI7O0FBR1o7O0VBQ0MsZTNCMkIyQztFMkIxQjNDLDhCM0IyQmdEO0MyQjdCekM7O0FBTVg7RUFDRSxZM0JNbUM7QzJCUHZCOztBQUtMO0VBQ0wsWTNCTXlDO0MyQlBqQzs7QUFJUDs7RUFDQyxZM0JHdUM7RTJCRnZDLDhCM0JHOEM7QzJCTHZDOztBQVFSOzs7RUFDQyxZM0JIdUM7RTJCSXZDLDBCM0JIeUM7QzJCQ2xDOztBQVFSOzs7RUFDQyxZM0JUdUM7RTJCVXZDLDhCM0JUOEM7QzJCT3ZDOztBQU9iO0VBQ0UsbUIzQkwyQztDMkJJN0I7O0FBR2I7O0VBQ0MsdUIzQlZ5QztDMkJTbEM7O0FBR1Q7RUFDRSx1QjNCWnlDO0MyQldoQzs7QUFNYjs7RUFDRSxzQjNCcENxQztDMkJtQ3pCOztBQVVUOzs7RUFDQywwQjNCdkN5QztFMkJ3Q3pDLFkzQnpDdUM7QzJCdUNoQzs7QUFNWDtFQUdXO0lBQ0wsWTNCcERxQztHMkJtRDdCO0VBR1A7O0lBQ0MsWTNCdERtQztJMkJ1RG5DLDhCM0J0RDBDO0cyQm9EbkM7RUFRUjs7O0lBQ0MsWTNCNURtQztJMkI2RG5DLDBCM0I1RHFDO0cyQjBEOUI7RUFRUjs7O0lBQ0MsWTNCbEVtQztJMkJtRW5DLDhCM0JsRTBDO0cyQmdFbkM7Q2hDZzVKbEI7O0FnQ2w0SkM7RUFDRSxZM0JyRjJDO0MyQm9GL0I7O0FBRVg7RUFDQyxZM0J0RnlDO0MyQnFGbEM7O0FBS1g7RUFDRSxZM0I1RjJDO0MyQjJGbEM7O0FBR1I7O0VBQ0MsWTNCOUZ5QztDMkI2RmxDOztBQU1OOzs7O0VBQ0MsWTNCaEd1QztDMkIrRmhDOztBQVNmO0VBQ0UsdUIzQnhGOEM7RTJCeUY5QyxzQjNCeEZnRDtDMkJzRmpDOztBQUlmO0VBQ0UsZTNCeEYrQztDMkJ1RmxDOztBQUdaOztFQUNDLFkzQmpGMEM7RTJCa0YxQyw4QjNCakZpRDtDMkIrRTFDOztBQU1YO0VBQ0UsZTNCdEcrQztDMkJxR25DOztBQUtMO0VBQ0wsZTNCdEc2QztDMkJxR3JDOztBQUlQOztFQUNDLFkzQnpHd0M7RTJCMEd4Qyw4QjNCekcrQztDMkJ1R3hDOztBQVFSOzs7RUFDQyxZM0JqSHdDO0UyQmtIeEMsMEIzQi9HMEM7QzJCNkduQzs7QUFRUjs7O0VBQ0MsWTNCckh3QztFMkJzSHhDLDhCM0JySCtDO0MyQm1IeEM7O0FBUWI7RUFDRSxtQjNCbEg0QztDMkJpSDlCOztBQUdiOztFQUNDLHVCM0J2SDBDO0MyQnNIbkM7O0FBR1Q7RUFDRSx1QjNCekgwQztDMkJ3SGpDOztBQU1iOztFQUNFLHNCQUFvQjtDQURSOztBQVNUOzs7RUFDQywwQjNCbkowQztFMkJvSjFDLFkzQnZKd0M7QzJCcUpqQzs7QUFNWDtFQUdNO0lBQ0Esc0IzQm5Ld0M7RzJCa0t0QjtFQUdwQjtJQUNFLDBCM0J0S3dDO0cyQnFLaEM7RUFHSDtJQUNMLGUzQnRLeUM7RzJCcUtqQztFQUdQOztJQUNDLFkzQnhLb0M7STJCeUtwQyw4QjNCeEsyQztHMkJzS3BDO0VBUVI7OztJQUNDLFkzQmhMb0M7STJCaUxwQywwQjNCOUtzQztHMkI0Sy9CO0VBUVI7OztJQUNDLFkzQnBMb0M7STJCcUxwQyw4QjNCcEwyQztHMkJrTHBDO0NoQzYzSmxCOztBZ0NwM0pDO0VBQ0UsZTNCbE0rQztDMkJpTW5DOztBQUVYO0VBQ0MsWTNCbk0wQztDMkJrTW5DOztBQUtYO0VBQ0UsZTNCek0rQztDMkJ3TXRDOztBQUdSOztFQUNDLFkzQjNNMEM7QzJCME1uQzs7QUFNTjs7OztFQUNDLFkzQjdNd0M7QzJCNE1qQzs7QUUzb0JmO0VBQ0Usa0I3Qm8wQmtDO0U2Qm4wQmxDLG9CN0I2RTZCO0U2QjVFN0IsaUJBQWlCO0VBQ2pCLDBCN0JtMEJxQztFNkJsMEJyQyxtQjdCc0g2QjtDNkIzSGxCOztBQU9UO0VBQ0Esc0JBQXNCO0NBRGxCOztBQUdBO0VBQ0YsbUJBQXdDO0VBQ3hDLGVBQWM7RUFDZCxZN0I0ekI4QjtDNkIvekJuQjs7QUFPYjtFQUNBLFk3QlAyQjtDNkJNbEI7O0FDbkJiO0VBQ0Usc0JBQXNCO0VBQ3RCLGdCQUFnQjtFQUNoQixlQUErQjtFQUMvQixtQjlCeUg2QjtDOEI3SGxCOztBQU1UO0VBQ0EsZ0JBQWdCO0NBRFo7O0FBR0Y7O0VBQ0EsbUJBQW1CO0VBQ25CLFlBQVk7RUFDWixrQjlCbUcwQjtFOEJsRzFCLHlCOUJrRStCO0U4QmpFL0Isc0JBQXNCO0VBQ3RCLGU5QkN5QjtFOEJBekIsdUI5QmllcUM7RThCaGVyQyx1QjlCaWVxQztFOEJoZXJDLGtCQUFrQjtDQVRaOztBQWFKOztFQUNBLGVBQWU7RU5YckIsK0J4QmlINkI7RXdCaEgxQiw0QnhCZ0gwQjtDOEJ2R2pCOztBQU9OOztFTnpCTixnQ3hCeUg2QjtFd0J4SDFCLDZCeEJ3SDBCO0M4QmhHakI7O0FBU1Q7Ozs7RUFDQyxXQUFXO0VBQ1gsZTlCT3dCO0U4Qk54Qix1QjlCM0J3QjtFOEI0QnhCLG1COUI0Y3FDO0M4QmhkOUI7O0FBWVI7Ozs7OztFQUNDLFdBQVc7RUFDWCxZOUJvY3FDO0U4Qm5jckMsMEI5QnJDeUI7RThCc0N6QixzQjlCdEN5QjtFOEJ1Q3pCLGdCQUFnQjtDQUxUOztBQWVOOzs7Ozs7RUFDRCxZOUJyRHlCO0U4QnNEekIsdUI5QjBicUM7RThCemJyQyxtQjlCMGJxQztFOEJ6YnJDLG9COUJzTHNDO0M4QjFMN0I7O0FDL0RUOztFQUNBLG1CL0IrRzBCO0UrQjlHMUIsZ0IvQitEd0I7RStCOUR4Qix1Qi9CcUgrQjtDK0J4SHpCOztBQU9KOztFUEdOLCtCeEJrSDZCO0V3QmpIMUIsNEJ4QmlIMEI7QytCckhqQjs7QUFNTjs7RVBYTixnQ3hCMEg2QjtFd0J6SDFCLDZCeEJ5SDBCO0MrQi9HakI7O0FBYlI7O0VBQ0Esa0IvQmtIMEI7RStCakgxQixnQi9CZ0V3QjtFK0IvRHhCLGlCL0JzSHlCO0MrQnpIbkI7O0FBT0o7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aUJ0QyxzQnZDMGlCc0M7RXVDemlCdEMsZXZDdWlCc0M7Q3NDMWV4Qjs7QUMzRGQ7RUFDRSwwQkFBd0I7Q0FEdEI7O0FBR0o7RUFDRSxlQUFhO0NBREY7O0FENERmO0VDbkVFLDBCdkM4aUJ1QztFdUM3aUJ2QyxzQnZDOGlCcUM7RXVDN2lCckMsZXZDMmlCc0M7Q3NDMWV6Qjs7QUMvRGI7RUFDRSwwQkFBd0I7Q0FEdEI7O0FBR0o7RUFDRSxlQUFhO0NBREY7O0FDRGY7RUFDRTtJQUFRLDRCQUE0QjtHN0MwL0xuQztFNkN6L0xEO0lBQVEseUJBQXlCO0c3QzQvTGhDO0NBQ0Y7O0E2Q3ovTEQ7RUFDRTtJQUFRLDRCQUE0QjtHN0M2L0xuQztFNkM1L0xEO0lBQVEseUJBQXlCO0c3QysvTGhDO0NBQ0Y7O0E2Q3gvTEQ7RUFDRSxpQkFBaUI7RUFDakIsYXhDeUQ2QjtFd0N4RDdCLG9CeEN3RDZCO0V3Q3ZEN0IsMEJ4QytwQm1DO0V3QzlwQm5DLG1CeENrRzZCO0VEM0RyQiwrQ3lDdENnQztDQU4vQjs7QUFVWDtFQUNFLFlBQVk7RUFDWixVQUFVO0VBQ1YsYUFBYTtFQUNiLGdCeENnQzRCO0V3Qy9CNUIsa0J4QzRDNkI7RXdDM0M3QixZeENxcEJnQztFd0NwcEJoQyxtQkFBbUI7RUFDbkIsMEJ4Q3hCNkI7RURrRHJCLCtDeUN6QitCO0V6QytJL0IsNEJ5QzlJMEI7Q0FWckI7O0FBbUJmOztFQ0VFLHNNQUFpQztFREFqQywyQkFBMEI7Q0FGTDs7QUFVVjs7RXpDN0NYLDJEeUM4QzBEO0V6QzVDbEQsbUR5QzRDa0Q7Q0FEdEM7O0FBUXRCO0VFckVFLDBCMUNpQjZCO0N3Q29EUjs7QUVsRUg7RURrRGxCLHNNQUFpQztDQ2xEWjs7QUZzRXZCO0VFekVFLDBCMUNrQjZCO0N3Q3VEWDs7QUV0RUE7RURrRGxCLHNNQUFpQztDQ2xEWjs7QUYwRXZCO0VFN0VFLDBCMUNtQjZCO0N3QzBEUjs7QUUxRUg7RURrRGxCLHNNQUFpQztDQ2xEWjs7QUY4RXZCO0VFakZFLDBCMUNvQjZCO0N3QzZEVDs7QUU5RUY7RURrRGxCLHNN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O0FBR2pDO0VBQ0UsZS9Da3ZCK0I7RStDanZCL0IsdUIvQ0Z1QjtDK0NBakI7O0FBTVk7RUFDbEIsMEIvQzJ1QjRCO0MrQzV1Qkc7O0FENk9yQztFQzdQRSxzQi9DZ0I2QjtDOEM2T2Y7O0FDM1BWO0VBQ0YsWS9DNHZCOEI7RStDM3ZCOUIsMEIvQ1kyQjtFK0NYM0Isc0IvQ1cyQjtDK0NkVDs7QUFLRTtFQUNsQiwwQi9DUXlCO0MrQ1RNOztBQUdqQztFQUNFLGUvQ0t5QjtFK0NKekIsdUIvQ212QjRCO0MrQ3J2QnRCOztBQU1ZO0VBQ2xCLDZCL0NEeUI7QytDQU07O0FEZ1ByQztFQ2hRRSxzQi9DbWlCc0M7QzhDblN4Qjs7QUM5UFY7RUFDRixlL0M4aEJvQztFK0M3aEJwQywwQi9DOGhCb0M7RStDN2hCcEMsc0IvQzhoQm9DO0MrQ2ppQmxCOztBQUtFO0VBQ2xCLDBCL0MyaEJrQztDK0M1aEJIOztBQUdqQztFQUNFLGUvQ3VoQmtDO0UrQ3RoQmxDLDBCL0NxaEJrQztDK0N2aEI1Qjs7QUFNWTtFQUNsQiw2Qi9Da2hCa0M7QytDbmhCSDs7QURtUHJDO0VDblFFLHNCL0N1aUJzQztDOENwUzNCOztBQ2pRUDtFQUNGLGUvQ2tpQm9DO0UrQ2ppQnBDLDBCL0NraUJvQztFK0NqaUJwQyxzQi9Da2lCb0M7QytDcmlCbEI7O0FBS0U7RUFDbEIsMEIvQytoQmtDO0MrQ2hpQkg7O0FBR2pDO0VBQ0UsZS9DMmhCa0M7RStDMWhCbEMsMEIvQ3loQmtDO0MrQzNoQjVCOztBQU1ZO0VBQ2xCLDZCL0NzaEJrQztDK0N2aEJIOztBRHNQckM7RUN0UUUsc0IvQzJpQnNDO0M4Q3JTeEI7O0FDcFFWO0VBQ0YsZS9Dc2lCb0M7RStDcmlCcEMsMEIvQ3NpQm9DO0UrQ3JpQnBDLHNCL0NzaUJvQztDK0N6aUJsQjs7QUFLRTtFQUNsQiwwQi9DbWlCa0M7QytDcGlCSDs7QUFHakM7RUFDRSxlL0MraEJrQztFK0M5aEJsQywwQi9DNmhCa0M7QytDL2hCNUI7O0FBTVk7RUFDbEIsNkIvQzBoQmtDO0MrQzNoQkg7O0FEeVByQztFQ3pR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S2ltY2hpXG4gKlxuICogQ29weXJpZ2h0IElCTSwgQ29ycC4gMjAxNVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBDU1MgcmVzZXRcbkBpbXBvcnQgXCJtb2R1bGVzL3Jlc2V0XCI7XG5cbi8vIE92ZXJyaWRlIEJvb3RzdHJhcCBTQVNTIHZhcmlhYmxlc1xuQGltcG9ydCBcIm1vZHVsZXMva2ltY2hpLXZhcmlhYmxlc1wiO1xuXG4vLyBib3dlcjpzY3NzXG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzc1wiO1xuLy8gZW5kYm93ZXJcblxuLy8gQm9vdHN0cmFwIGN1c3RvbSBpbXBvcnRzXG5AaW1wb3J0IFwibW9kdWxlcy9ib290c3RyYXBcIjtcbi8vIEJvb3RzdHJhcCBzZWxlY3QgcGx1Z2luXG5AaW1wb3J0IFwibW9kdWxlcy9ib290c3RyYXAtc2VsZWN0XCI7XG5cbi8vIE92ZXJyaWRlIEJvb3RzdHJhcCBtaXhpblxuLmNvbnRhaW5lciB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIHBhZGRpbmctbGVmdDogIDgwcHggIWltcG9ydGFudDtcbiAgcGFkZGluZy1yaWdodDogNjBweCAhaW1wb3J0YW50O1xufVxuXG4vLyBPdmVycmlkZSBhbGVydFxuXG4uYWxlcnQge1xuICBib3JkZXItd2lkdGg6ICRhbGVydC1ib3JkZXItd2lkdGg7XG59XG5cbi8vIEJvZHkgc3BlY3NcbkBpbXBvcnQgXCJtb2R1bGVzL2Jhc2VcIjtcblxuLy8gVG9wYmFyIGFuZCBuYXZpZ2F0aW9uXG5AaW1wb3J0IFwibW9kdWxlcy90b3BiYXJcIjtcblxuLy8gTG9naW5cbkBpbXBvcnQgXCJtb2R1bGVzL2xvZ2luXCI7XG5cbi8vIEJ1dHRvbnNcbkBpbXBvcnQgXCJtb2R1bGVzL2J1dHRvbnNcIjtcblxuLy8gRGlhbG9nIEZsYXRcbkBpbXBvcnQgXCJtb2R1bGVzL2RpYWxvZy1mbGF0XCI7XG5AaW1wb3J0IFwibW9kdWxlcy9tb2RhbC1mbGF0XCI7XG5cbi8vIERyb3Bkb3duIEJ1dHRvbiAtIEZsYXRcbkBpbXBvcnQgXCJtb2R1bGVzL21lbnUtZmxhdFwiO1xuXG4vLyBDb2xvciBzcGVjaWZpYyBcbkBpbXBvcnQgXCJtb2R1bGVzL2NvbG9yc1wiO1xuXG5cbnByZSB7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG59XG5cbi8vIE1lZGlhIHF1ZXJpZXNcblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcblxuICAuY29udGFpbmVyIHtcbiAgICB3aWR0aDogMTU0MHB4O1xuICB9XG5cbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTY4MHB4KSB7XG5cbiAgLmNvbnRhaW5lciB7XG4gICAgd2lkdGg6IDE1NDBweDtcbiAgfVxuXG59IiwiLyogUmVzZXQgKi9cblxuaHRtbCxib2R5LGRpdixzcGFuLG9iamVjdCxpZnJhbWUsaDEsaDIsaDMsaDQsaDUsaDYscCxibG9ja3F1b3RlLHByZSxhLGFiYnIsXG5hZGRyZXNzLGJpZyxjaXRlLGNvZGUsZGVsLGRmbixlbSxpbWcsaW5zLGtiZCxxLHMsc2FtcCxzbWFsbCxzdHJpa2Usc3Ryb25nLHN1YixcbnN1cCx0dCx2YXIsYix1LGksY2VudGVyLGRsLGR0LGRkLG9sLHVsLGxpLGZpZWxkc2V0LGZvcm0sbGFiZWwsbGVnZW5kLHRhYmxlLFxuY2FwdGlvbix0Ym9keSx0Zm9vdCx0aGVhZCx0cix0aCx0ZCxhcnRpY2xlLGFzaWRlLGNhbnZhcyxkZXRhaWxzLGVtYmVkLGZpZ3VyZSxcbmZpZ2NhcHRpb24sZm9vdGVyLGhlYWRlcixoZ3JvdXAsbWVudSxuYXYsb3V0cHV0LHJ1Ynksc2VjdGlvbixzdW1tYXJ5LHRpbWUsbWFyayxcbmF1ZGlvLHZpZGVvLGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYm9yZGVyOiAwO1xufVxuXG5hcnRpY2xlLGFzaWRlLGRldGFpbHMsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixoZ3JvdXAsbWVudSxuYXYsc2VjdGlvblxuICAgIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cblxub2wsdWwge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG5cbnRhYmxlIHtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgIGJvcmRlci1zcGFjaW5nOiAwO1xufVxuXG5pbWcge1xuICAgIGJvcmRlcjogbm9uZTtcbn1cblxuYSB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG5hOmFjdGl2ZSxhOmhvdmVyIHtcbiAgICBvdXRsaW5lOiBub25lO1xufVxuXG5hIGxhYmVsIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG4iLCIvKlxuICogQSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdWJ5IGxpc3QgZnVuY3Rpb25zIGZyb20gQ29tcGFzczpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Db21wYXNzL2NvbXBhc3MvYmxvYi9zdGFibGUvbGliL2NvbXBhc3Mvc2Fzc19leHRlbnNpb25zL2Z1bmN0aW9ucy9saXN0cy5yYlxuICovXG5cblxuLy8gY29tcGFjdCBpcyBwYXJ0IG9mIGxpYnNhc3NcblxuQGZ1bmN0aW9uIC1jb21wYXNzLW50aCgkbGlzdCwgJHBsYWNlKSB7XG4gIC8vIFllcCwgU2Fzcy1saXN0cyBhcmUgMS1pbmRleGVkLlxuICBAaWYgJHBsYWNlID09IFwiZmlyc3RcIiB7XG4gICAgJHBsYWNlOiAxO1xuICB9XG4gIEBpZiAkcGxhY2UgPT0gXCJsYXN0XCIge1xuICAgICRwbGFjZTogbGVuZ3RoKCRsaXN0KTtcbiAgfVxuICBAcmV0dXJuIG50aCgkbGlzdCwgJHBsYWNlKTtcbn1cblxuLy8gY29tcGFzc19saXN0IGFuZCBjb21wYXNzX3NwYWNlX2xpc3QgY2FuJ3QgYmUgaW1wbGVtZW50ZWQgaW4gc2FzcyBzY3JpcHRcblxuQGZ1bmN0aW9uIC1jb21wYXNzLWxpc3Qtc2l6ZSgkbGlzdCkge1xuICBAcmV0dXJuIGxlbmd0aCgkbGlzdCk7XG59XG5cbkBmdW5jdGlvbiAtY29tcGFzcy1zbGljZSgkbGlzdCwgJHN0YXJ0LCAkZW5kOiBmYWxzZSkge1xuICBAaWYgJGVuZCA9PSBmYWxzZSB7XG4gICAgJGVuZDogbGVuZ3RoKCRsaXN0KTtcbiAgfVxuICAkZnVsbDogbnRoKCRsaXN0LCAkc3RhcnQpO1xuICBAZm9yICRpIGZyb20gJHN0YXJ0ICsgMSB0aHJvdWdoICRlbmQge1xuICAgICRmdWxsOiAkZnVsbCwgbnRoKCRsaXN0LCAkaSk7XG4gIH1cbiAgQHJldHVybiAkZnVsbDtcbn1cblxuQGZ1bmN0aW9uIHJlamVjdCgkbGlzdCwgJHJlamVjdDEsICRyZWplY3QyOm51bGwsICRyZWplY3QzOm51bGwsICRyZWplY3Q0Om51bGwsICRyZWplY3Q1Om51bGwsICRyZWplY3Q2Om51bGwsICRyZWplY3Q3Om51bGwsICRyZWplY3Q4Om51bGwsICRyZWplY3Q5Om51bGwpIHtcbiAgJHJlamVjdHM6ICRyZWplY3QxLCAkcmVqZWN0MiwgJHJlamVjdDMsICRyZWplY3Q0LCAkcmVqZWN0NSwgJHJlamVjdDYsICRyZWplY3Q3LCAkcmVqZWN0OCwgJHJlamVjdDk7XG5cbiAgJGZ1bGw6IGZhbHNlO1xuICBAZWFjaCAkaXRlbSBpbiAkbGlzdCB7XG4gICAgQGlmIGluZGV4KCRyZWplY3RzLCAkaXRlbSkge31cbiAgICBAZWxzZSB7XG4gICAgICBAaWYgJGZ1bGwge1xuICAgICAgICAkZnVsbDogJGZ1bGwsICRpdGVtO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICAkZnVsbDogJGl0ZW07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEByZXR1cm4gJGZ1bGw7XG59XG4iLCIvKlxuICogQSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdWJ5IGNvbnN0YW50cyBmdW5jdGlvbnMgZnJvbSBDb21wYXNzOlxuICogaHR0cHM6Ly9naXRodWIuY29tL0NvbXBhc3MvY29tcGFzcy9ibG9iL3N0YWJsZS9saWIvY29tcGFzcy9zYXNzX2V4dGVuc2lvbnMvZnVuY3Rpb25zL2NvbnN0YW50cy5yYlxuICovXG5cbkBmdW5jdGlvbiBvcHBvc2l0ZS1wb3NpdGlvbigkZnJvbSkge1xuICAgIEBpZiAoJGZyb20gPT0gdG9wKSB7XG4gICAgICAgIEByZXR1cm4gYm90dG9tO1xuICAgIH0gQGVsc2UgaWYgKCRmcm9tID09IGJvdHRvbSkge1xuICAgICAgICBAcmV0dXJuIHRvcDtcbiAgICB9IEBlbHNlIGlmICgkZnJvbSA9PSBsZWZ0KSB7XG4gICAgICAgIEByZXR1cm4gcmlnaHQ7XG4gICAgfSBAZWxzZSBpZiAoJGZyb20gPT0gcmlnaHQpIHtcbiAgICAgICAgQHJldHVybiBsZWZ0O1xuICAgIH0gQGVsc2UgaWYgKCRmcm9tID09IGNlbnRlcikge1xuICAgICAgICBAcmV0dXJuIGNlbnRlcjtcbiAgICB9XG59XG4iLCIvKlxuICogQSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdWJ5IGRpc3BsYXkgZnVuY3Rpb25zIGZyb20gQ29tcGFzczpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Db21wYXNzL2NvbXBhc3MvYmxvYi9zdGFibGUvY29yZS9saWIvY29tcGFzcy9jb3JlL3Nhc3NfZXh0ZW5zaW9ucy9mdW5jdGlvbnMvZGlzcGxheS5yYlxuICovXG5cbkBmdW5jdGlvbiBlbGVtZW50cy1vZi10eXBlKCR0eXBlKXtcbiAgICBAaWYgKCR0eXBlID09IGJsb2NrKXtcbiAgICAgICAgQHJldHVybiBhZGRyZXNzLCBhcnRpY2xlLCBhc2lkZSwgYmxvY2txdW90ZSwgY2VudGVyLCBkaXIsIGRpdiwgZGQsIGRldGFpbHMsIGRsLCBkdCwgZmllbGRzZXQsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9ybSwgZm9vdGVyLCBmcmFtZXNldCwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgaHIsIGhlYWRlciwgaGdyb3VwLCBpc2luZGV4LCBtYWluLCBtZW51LCBuYXYsIG5vZnJhbWVzLCBub3NjcmlwdCwgb2wsIHAsIHByZSwgc2VjdGlvbiwgc3VtbWFyeSwgdWw7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gaW5saW5lKXtcbiAgICAgICAgQHJldHVybiBhLCBhYmJyLCBhY3JvbnltLCBhdWRpbywgYiwgYmFzZWZvbnQsIGJkbywgYmlnLCBiciwgY2FudmFzLCBjaXRlLCBjb2RlLCBjb21tYW5kLCBkYXRhbGlzdCwgZGZuLCBlbSwgZW1iZWQsIGZvbnQsIGksIGltZywgaW5wdXQsIGtleWdlbiwga2JkLCBsYWJlbCwgbWFyaywgbWV0ZXIsIG91dHB1dCwgcHJvZ3Jlc3MsIHEsIHJwLCBydCwgcnVieSwgcywgc2FtcCwgc2VsZWN0LCBzbWFsbCwgc3Bhbiwgc3RyaWtlLCBzdHJvbmcsIHN1Yiwgc3VwLCB0ZXh0YXJlYSwgdGltZSwgdHQsIHUsIHZhciwgdmlkZW8sIHdicjtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSBpbmxpbmUtYmxvY2spe1xuICAgICAgICBAcmV0dXJuIGltZztcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSB0YWJsZSl7XG4gICAgICAgIEByZXR1cm4gdGFibGU7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gbGlzdC1pdGVtKXtcbiAgICAgICAgQHJldHVybiBsaTtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSB0YWJsZS1yb3ctZ3JvdXApe1xuICAgICAgICBAcmV0dXJuIHRib2R5O1xuICAgIH0gQGVsc2UgaWYgKCR0eXBlID09IHRhYmxlLWhlYWRlci1ncm91cCl7XG4gICAgICAgIEByZXR1cm4gdGhlYWQ7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gdGFibGUtZm9vdGVyLWdyb3VwKXtcbiAgICAgICAgQHJldHVybiB0Zm9vdDtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSB0YWJsZS1yb3cpe1xuICAgICAgICBAcmV0dXJuIHRyO1xuICAgIH0gQGVsc2UgaWYgKCR0eXBlID09IHRhYmxlLWNlbGwpe1xuICAgICAgICBAcmV0dXJuIHRoLCB0ZDtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSBodG1sNS1ibG9jayl7XG4gICAgICAgIEByZXR1cm4gYXJ0aWNsZSwgYXNpZGUsIGRldGFpbHMsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWFpbiwgbWVudSwgbmF2LCBzZWN0aW9uLCBzdW1tYXJ5O1xuICAgIH0gQGVsc2UgaWYgKCR0eXBlID09IGh0bWw1LWlubGluZSl7XG4gICAgICAgIEByZXR1cm4gYXVkaW8sIGNhbnZhcywgY29tbWFuZCwgZGF0YWxpc3QsIGVtYmVkLCBrZXlnZW4sIG1hcmssIG1ldGVyLCBvdXRwdXQsIHByb2dyZXNzLCBycCwgcnQsIHJ1YnksIHRpbWUsIHZpZGVvLCB3YnI7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gaHRtbDUpe1xuICAgICAgICBAcmV0dXJuIGFydGljbGUsIGFzaWRlLCBhdWRpbywgY2FudmFzLCBjb21tYW5kLCBkYXRhbGlzdCwgZGV0YWlscywgZW1iZWQsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwga2V5Z2VuLCBtYWluLCBtYXJrLCBtZW51LCBtZXRlciwgbmF2LCBvdXRwdXQsIHByb2dyZXNzLCBycCwgcnQsIHJ1YnksIHNlY3Rpb24sIHN1bW1hcnksIHRpbWUsIHZpZGVvLCB3YnI7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gdGV4dC1pbnB1dCl7XG4gICAgICAgIEByZXR1cm4gaW5wdXQsIHRleHRhcmVhO1xuICAgIH1cbn1cbiIsIi8qIVxuICogQm9vdHN0cmFwIHYzLjMuNSAoaHR0cDovL2dldGJvb3RzdHJhcC5jb20pXG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKi9cblxuLy8gQ29yZSB2YXJpYWJsZXMgYW5kIG1peGluc1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnNcIjtcblxuLy8gUmVzZXQgYW5kIGRlcGVuZGVuY2llc1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9ub3JtYWxpemVcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvcHJpbnRcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvZ2x5cGhpY29uc1wiO1xuXG4vLyBDb3JlIENTU1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9zY2FmZm9sZGluZ1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC90eXBlXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL2NvZGVcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvZ3JpZFwiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC90YWJsZXNcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvZm9ybXNcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvYnV0dG9uc1wiO1xuXG4vLyBDb21wb25lbnRzXG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL2NvbXBvbmVudC1hbmltYXRpb25zXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL2Ryb3Bkb3duc1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9idXR0b24tZ3JvdXBzXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL2lucHV0LWdyb3Vwc1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9uYXZzXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL25hdmJhclwiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9icmVhZGNydW1ic1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9wYWdpbmF0aW9uXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL3BhZ2VyXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL2xhYmVsc1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9iYWRnZXNcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvanVtYm90cm9uXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL3RodW1ibmFpbHNcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvYWxlcnRzXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL3Byb2dyZXNzLWJhcnNcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWVkaWFcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbGlzdC1ncm91cFwiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9wYW5lbHNcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvcmVzcG9uc2l2ZS1lbWJlZFwiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC93ZWxsc1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9jbG9zZVwiO1xuXG4vLyBDb21wb25lbnRzIHcvIEphdmFTY3JpcHRcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbW9kYWxzXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL3Rvb2x0aXBcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvcG9wb3ZlcnNcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvY2Fyb3VzZWxcIjtcblxuLy8gVXRpbGl0eSBjbGFzc2VzXG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL3V0aWxpdGllc1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9yZXNwb25zaXZlLXV0aWxpdGllc1wiO1xuIiwiLyohIG5vcm1hbGl6ZS5jc3MgdjMuMC4zIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcyAqL1xuXG4vL1xuLy8gMS4gU2V0IGRlZmF1bHQgZm9udCBmYW1pbHkgdG8gc2Fucy1zZXJpZi5cbi8vIDIuIFByZXZlbnQgaU9TIGFuZCBJRSB0ZXh0IHNpemUgYWRqdXN0IGFmdGVyIGRldmljZSBvcmllbnRhdGlvbiBjaGFuZ2UsXG4vLyAgICB3aXRob3V0IGRpc2FibGluZyB1c2VyIHpvb20uXG4vL1xuXG5odG1sIHtcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IC8vIDFcbiAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC8vIDJcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvLyAyXG59XG5cbi8vXG4vLyBSZW1vdmUgZGVmYXVsdCBtYXJnaW4uXG4vL1xuXG5ib2R5IHtcbiAgbWFyZ2luOiAwO1xufVxuXG4vLyBIVE1MNSBkaXNwbGF5IGRlZmluaXRpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vL1xuLy8gQ29ycmVjdCBgYmxvY2tgIGRpc3BsYXkgbm90IGRlZmluZWQgZm9yIGFueSBIVE1MNSBlbGVtZW50IGluIElFIDgvOS5cbi8vIENvcnJlY3QgYGJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGZvciBgZGV0YWlsc2Agb3IgYHN1bW1hcnlgIGluIElFIDEwLzExXG4vLyBhbmQgRmlyZWZveC5cbi8vIENvcnJlY3QgYGJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGZvciBgbWFpbmAgaW4gSUUgMTEuXG4vL1xuXG5hcnRpY2xlLFxuYXNpZGUsXG5kZXRhaWxzLFxuZmlnY2FwdGlvbixcbmZpZ3VyZSxcbmZvb3RlcixcbmhlYWRlcixcbmhncm91cCxcbm1haW4sXG5tZW51LFxubmF2LFxuc2VjdGlvbixcbnN1bW1hcnkge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLy9cbi8vIDEuIENvcnJlY3QgYGlubGluZS1ibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBpbiBJRSA4LzkuXG4vLyAyLiBOb3JtYWxpemUgdmVydGljYWwgYWxpZ25tZW50IG9mIGBwcm9ncmVzc2AgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgT3BlcmEuXG4vL1xuXG5hdWRpbyxcbmNhbnZhcyxcbnByb2dyZXNzLFxudmlkZW8ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8vIDFcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyAvLyAyXG59XG5cbi8vXG4vLyBQcmV2ZW50IG1vZGVybiBicm93c2VycyBmcm9tIGRpc3BsYXlpbmcgYGF1ZGlvYCB3aXRob3V0IGNvbnRyb2xzLlxuLy8gUmVtb3ZlIGV4Y2VzcyBoZWlnaHQgaW4gaU9TIDUgZGV2aWNlcy5cbi8vXG5cbmF1ZGlvOm5vdChbY29udHJvbHNdKSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGhlaWdodDogMDtcbn1cblxuLy9cbi8vIEFkZHJlc3MgYFtoaWRkZW5dYCBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOS8xMC5cbi8vIEhpZGUgdGhlIGB0ZW1wbGF0ZWAgZWxlbWVudCBpbiBJRSA4LzkvMTAvMTEsIFNhZmFyaSwgYW5kIEZpcmVmb3ggPCAyMi5cbi8vXG5cbltoaWRkZW5dLFxudGVtcGxhdGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vLyBMaW5rc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIGNvbG9yIGZyb20gYWN0aXZlIGxpbmtzIGluIElFIDEwLlxuLy9cblxuYSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4vL1xuLy8gSW1wcm92ZSByZWFkYWJpbGl0eSBvZiBmb2N1c2VkIGVsZW1lbnRzIHdoZW4gdGhleSBhcmUgYWxzbyBpbiBhblxuLy8gYWN0aXZlL2hvdmVyIHN0YXRlLlxuLy9cblxuYTphY3RpdmUsXG5hOmhvdmVyIHtcbiAgb3V0bGluZTogMDtcbn1cblxuLy8gVGV4dC1sZXZlbCBzZW1hbnRpY3Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vXG4vLyBBZGRyZXNzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gSUUgOC85LzEwLzExLCBTYWZhcmksIGFuZCBDaHJvbWUuXG4vL1xuXG5hYmJyW3RpdGxlXSB7XG4gIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQ7XG59XG5cbi8vXG4vLyBBZGRyZXNzIHN0eWxlIHNldCB0byBgYm9sZGVyYCBpbiBGaXJlZm94IDQrLCBTYWZhcmksIGFuZCBDaHJvbWUuXG4vL1xuXG5iLFxuc3Ryb25nIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi8vXG4vLyBBZGRyZXNzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gU2FmYXJpIGFuZCBDaHJvbWUuXG4vL1xuXG5kZm4ge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbi8vXG4vLyBBZGRyZXNzIHZhcmlhYmxlIGBoMWAgZm9udC1zaXplIGFuZCBtYXJnaW4gd2l0aGluIGBzZWN0aW9uYCBhbmQgYGFydGljbGVgXG4vLyBjb250ZXh0cyBpbiBGaXJlZm94IDQrLCBTYWZhcmksIGFuZCBDaHJvbWUuXG4vL1xuXG5oMSB7XG4gIGZvbnQtc2l6ZTogMmVtO1xuICBtYXJnaW46IDAuNjdlbSAwO1xufVxuXG4vL1xuLy8gQWRkcmVzcyBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOS5cbi8vXG5cbm1hcmsge1xuICBiYWNrZ3JvdW5kOiAjZmYwO1xuICBjb2xvcjogIzAwMDtcbn1cblxuLy9cbi8vIEFkZHJlc3MgaW5jb25zaXN0ZW50IGFuZCB2YXJpYWJsZSBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLlxuLy9cblxuc21hbGwge1xuICBmb250LXNpemU6IDgwJTtcbn1cblxuLy9cbi8vIFByZXZlbnQgYHN1YmAgYW5kIGBzdXBgIGFmZmVjdGluZyBgbGluZS1oZWlnaHRgIGluIGFsbCBicm93c2Vycy5cbi8vXG5cbnN1YixcbnN1cCB7XG4gIGZvbnQtc2l6ZTogNzUlO1xuICBsaW5lLWhlaWdodDogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG5cbnN1cCB7XG4gIHRvcDogLTAuNWVtO1xufVxuXG5zdWIge1xuICBib3R0b206IC0wLjI1ZW07XG59XG5cbi8vIEVtYmVkZGVkIGNvbnRlbnRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vXG4vLyBSZW1vdmUgYm9yZGVyIHdoZW4gaW5zaWRlIGBhYCBlbGVtZW50IGluIElFIDgvOS8xMC5cbi8vXG5cbmltZyB7XG4gIGJvcmRlcjogMDtcbn1cblxuLy9cbi8vIENvcnJlY3Qgb3ZlcmZsb3cgbm90IGhpZGRlbiBpbiBJRSA5LzEwLzExLlxuLy9cblxuc3ZnOm5vdCg6cm9vdCkge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vLyBHcm91cGluZyBjb250ZW50XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vL1xuLy8gQWRkcmVzcyBtYXJnaW4gbm90IHByZXNlbnQgaW4gSUUgOC85IGFuZCBTYWZhcmkuXG4vL1xuXG5maWd1cmUge1xuICBtYXJnaW46IDFlbSA0MHB4O1xufVxuXG4vL1xuLy8gQWRkcmVzcyBkaWZmZXJlbmNlcyBiZXR3ZWVuIEZpcmVmb3ggYW5kIG90aGVyIGJyb3dzZXJzLlxuLy9cblxuaHIge1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgaGVpZ2h0OiAwO1xufVxuXG4vL1xuLy8gQ29udGFpbiBvdmVyZmxvdyBpbiBhbGwgYnJvd3NlcnMuXG4vL1xuXG5wcmUge1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuLy9cbi8vIEFkZHJlc3Mgb2RkIGBlbWAtdW5pdCBmb250IHNpemUgcmVuZGVyaW5nIGluIGFsbCBicm93c2Vycy5cbi8vXG5cbmNvZGUsXG5rYmQsXG5wcmUsXG5zYW1wIHtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSwgbW9ub3NwYWNlO1xuICBmb250LXNpemU6IDFlbTtcbn1cblxuLy8gRm9ybXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vXG4vLyBLbm93biBsaW1pdGF0aW9uOiBieSBkZWZhdWx0LCBDaHJvbWUgYW5kIFNhZmFyaSBvbiBPUyBYIGFsbG93IHZlcnkgbGltaXRlZFxuLy8gc3R5bGluZyBvZiBgc2VsZWN0YCwgdW5sZXNzIGEgYGJvcmRlcmAgcHJvcGVydHkgaXMgc2V0LlxuLy9cblxuLy9cbi8vIDEuIENvcnJlY3QgY29sb3Igbm90IGJlaW5nIGluaGVyaXRlZC5cbi8vICAgIEtub3duIGlzc3VlOiBhZmZlY3RzIGNvbG9yIG9mIGRpc2FibGVkIGVsZW1lbnRzLlxuLy8gMi4gQ29ycmVjdCBmb250IHByb3BlcnRpZXMgbm90IGJlaW5nIGluaGVyaXRlZC5cbi8vIDMuIEFkZHJlc3MgbWFyZ2lucyBzZXQgZGlmZmVyZW50bHkgaW4gRmlyZWZveCA0KywgU2FmYXJpLCBhbmQgQ2hyb21lLlxuLy9cblxuYnV0dG9uLFxuaW5wdXQsXG5vcHRncm91cCxcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgY29sb3I6IGluaGVyaXQ7IC8vIDFcbiAgZm9udDogaW5oZXJpdDsgLy8gMlxuICBtYXJnaW46IDA7IC8vIDNcbn1cblxuLy9cbi8vIEFkZHJlc3MgYG92ZXJmbG93YCBzZXQgdG8gYGhpZGRlbmAgaW4gSUUgOC85LzEwLzExLlxuLy9cblxuYnV0dG9uIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG5cbi8vXG4vLyBBZGRyZXNzIGluY29uc2lzdGVudCBgdGV4dC10cmFuc2Zvcm1gIGluaGVyaXRhbmNlIGZvciBgYnV0dG9uYCBhbmQgYHNlbGVjdGAuXG4vLyBBbGwgb3RoZXIgZm9ybSBjb250cm9sIGVsZW1lbnRzIGRvIG5vdCBpbmhlcml0IGB0ZXh0LXRyYW5zZm9ybWAgdmFsdWVzLlxuLy8gQ29ycmVjdCBgYnV0dG9uYCBzdHlsZSBpbmhlcml0YW5jZSBpbiBGaXJlZm94LCBJRSA4LzkvMTAvMTEsIGFuZCBPcGVyYS5cbi8vIENvcnJlY3QgYHNlbGVjdGAgc3R5bGUgaW5oZXJpdGFuY2UgaW4gRmlyZWZveC5cbi8vXG5cbmJ1dHRvbixcbnNlbGVjdCB7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuXG4vL1xuLy8gMS4gQXZvaWQgdGhlIFdlYktpdCBidWcgaW4gQW5kcm9pZCA0LjAuKiB3aGVyZSAoMikgZGVzdHJveXMgbmF0aXZlIGBhdWRpb2Bcbi8vICAgIGFuZCBgdmlkZW9gIGNvbnRyb2xzLlxuLy8gMi4gQ29ycmVjdCBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIGBpbnB1dGAgdHlwZXMgaW4gaU9TLlxuLy8gMy4gSW1wcm92ZSB1c2FiaWxpdHkgYW5kIGNvbnNpc3RlbmN5IG9mIGN1cnNvciBzdHlsZSBiZXR3ZWVuIGltYWdlLXR5cGVcbi8vICAgIGBpbnB1dGAgYW5kIG90aGVycy5cbi8vXG5cbmJ1dHRvbixcbmh0bWwgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSwgLy8gMVxuaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uOyAvLyAyXG4gIGN1cnNvcjogcG9pbnRlcjsgLy8gM1xufVxuXG4vL1xuLy8gUmUtc2V0IGRlZmF1bHQgY3Vyc29yIGZvciBkaXNhYmxlZCBlbGVtZW50cy5cbi8vXG5cbmJ1dHRvbltkaXNhYmxlZF0sXG5odG1sIGlucHV0W2Rpc2FibGVkXSB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLy9cbi8vIFJlbW92ZSBpbm5lciBwYWRkaW5nIGFuZCBib3JkZXIgaW4gRmlyZWZveCA0Ky5cbi8vXG5cbmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcbmlucHV0OjotbW96LWZvY3VzLWlubmVyIHtcbiAgYm9yZGVyOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuXG4vL1xuLy8gQWRkcmVzcyBGaXJlZm94IDQrIHNldHRpbmcgYGxpbmUtaGVpZ2h0YCBvbiBgaW5wdXRgIHVzaW5nIGAhaW1wb3J0YW50YCBpblxuLy8gdGhlIFVBIHN0eWxlc2hlZXQuXG4vL1xuXG5pbnB1dCB7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG59XG5cbi8vXG4vLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGF0dGVtcHQgdG8gc3R5bGUgdGhlc2UgZWxlbWVudHMuXG4vLyBGaXJlZm94J3MgaW1wbGVtZW50YXRpb24gZG9lc24ndCByZXNwZWN0IGJveC1zaXppbmcsIHBhZGRpbmcsIG9yIHdpZHRoLlxuLy9cbi8vIDEuIEFkZHJlc3MgYm94IHNpemluZyBzZXQgdG8gYGNvbnRlbnQtYm94YCBpbiBJRSA4LzkvMTAuXG4vLyAyLiBSZW1vdmUgZXhjZXNzIHBhZGRpbmcgaW4gSUUgOC85LzEwLlxuLy9cblxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDsgLy8gMVxuICBwYWRkaW5nOiAwOyAvLyAyXG59XG5cbi8vXG4vLyBGaXggdGhlIGN1cnNvciBzdHlsZSBmb3IgQ2hyb21lJ3MgaW5jcmVtZW50L2RlY3JlbWVudCBidXR0b25zLiBGb3IgY2VydGFpblxuLy8gYGZvbnQtc2l6ZWAgdmFsdWVzIG9mIHRoZSBgaW5wdXRgLCBpdCBjYXVzZXMgdGhlIGN1cnNvciBzdHlsZSBvZiB0aGVcbi8vIGRlY3JlbWVudCBidXR0b24gdG8gY2hhbmdlIGZyb20gYGRlZmF1bHRgIHRvIGB0ZXh0YC5cbi8vXG5cbmlucHV0W3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG5pbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuXG4vL1xuLy8gMS4gQWRkcmVzcyBgYXBwZWFyYW5jZWAgc2V0IHRvIGBzZWFyY2hmaWVsZGAgaW4gU2FmYXJpIGFuZCBDaHJvbWUuXG4vLyAyLiBBZGRyZXNzIGBib3gtc2l6aW5nYCBzZXQgdG8gYGJvcmRlci1ib3hgIGluIFNhZmFyaSBhbmQgQ2hyb21lLlxuLy9cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkOyAvLyAxXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyAvLzJcbn1cblxuLy9cbi8vIFJlbW92ZSBpbm5lciBwYWRkaW5nIGFuZCBzZWFyY2ggY2FuY2VsIGJ1dHRvbiBpbiBTYWZhcmkgYW5kIENocm9tZSBvbiBPUyBYLlxuLy8gU2FmYXJpIChidXQgbm90IENocm9tZSkgY2xpcHMgdGhlIGNhbmNlbCBidXR0b24gd2hlbiB0aGUgc2VhcmNoIGlucHV0IGhhc1xuLy8gcGFkZGluZyAoYW5kIGB0ZXh0ZmllbGRgIGFwcGVhcmFuY2UpLlxuLy9cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5cbi8vXG4vLyBEZWZpbmUgY29uc2lzdGVudCBib3JkZXIsIG1hcmdpbiwgYW5kIHBhZGRpbmcuXG4vL1xuXG5maWVsZHNldCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gIG1hcmdpbjogMCAycHg7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTtcbn1cblxuLy9cbi8vIDEuIENvcnJlY3QgYGNvbG9yYCBub3QgYmVpbmcgaW5oZXJpdGVkIGluIElFIDgvOS8xMC8xMS5cbi8vIDIuIFJlbW92ZSBwYWRkaW5nIHNvIHBlb3BsZSBhcmVuJ3QgY2F1Z2h0IG91dCBpZiB0aGV5IHplcm8gb3V0IGZpZWxkc2V0cy5cbi8vXG5cbmxlZ2VuZCB7XG4gIGJvcmRlcjogMDsgLy8gMVxuICBwYWRkaW5nOiAwOyAvLyAyXG59XG5cbi8vXG4vLyBSZW1vdmUgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUgOC85LzEwLzExLlxuLy9cblxudGV4dGFyZWEge1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuLy9cbi8vIERvbid0IGluaGVyaXQgdGhlIGBmb250LXdlaWdodGAgKGFwcGxpZWQgYnkgYSBydWxlIGFib3ZlKS5cbi8vIE5PVEU6IHRoZSBkZWZhdWx0IGNhbm5vdCBzYWZlbHkgYmUgY2hhbmdlZCBpbiBDaHJvbWUgYW5kIFNhZmFyaSBvbiBPUyBYLlxuLy9cblxub3B0Z3JvdXAge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLy8gVGFibGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vL1xuLy8gUmVtb3ZlIG1vc3Qgc3BhY2luZyBiZXR3ZWVuIHRhYmxlIGNlbGxzLlxuLy9cblxudGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICBib3JkZXItc3BhY2luZzogMDtcbn1cblxudGQsXG50aCB7XG4gIHBhZGRpbmc6IDA7XG59XG4iLCIvKlxuICogUHJvamVjdCBLaW1jaGlcbiAqXG4gKiBDb3B5cmlnaHQgSUJNLCBDb3JwLiAyMDE1XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKiBSZXNldCAqL1xuaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBvYmplY3QsIGlmcmFtZSwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCwgYmxvY2txdW90ZSwgcHJlLCBhLCBhYmJyLFxuYWRkcmVzcywgYmlnLCBjaXRlLCBjb2RlLCBkZWwsIGRmbiwgZW0sIGltZywgaW5zLCBrYmQsIHEsIHMsIHNhbXAsIHNtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLFxuc3VwLCB0dCwgdmFyLCBiLCB1LCBpLCBjZW50ZXIsIGRsLCBkdCwgZGQsIG9sLCB1bCwgbGksIGZpZWxkc2V0LCBmb3JtLCBsYWJlbCwgbGVnZW5kLCB0YWJsZSxcbmNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQsIGFydGljbGUsIGFzaWRlLCBjYW52YXMsIGRldGFpbHMsIGVtYmVkLCBmaWd1cmUsXG5maWdjYXB0aW9uLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLCBtZW51LCBuYXYsIG91dHB1dCwgcnVieSwgc2VjdGlvbiwgc3VtbWFyeSwgdGltZSwgbWFyayxcbmF1ZGlvLCB2aWRlbywgYnV0dG9uIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7XG59XG5cbmFydGljbGUsIGFzaWRlLCBkZXRhaWxzLCBmaWdjYXB0aW9uLCBmaWd1cmUsIGZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsIG1lbnUsIG5hdiwgc2VjdGlvbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG5vbCwgdWwge1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuXG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xufVxuXG5pbWcge1xuICBib3JkZXI6IG5vbmU7XG59XG5cbmEge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbmE6YWN0aXZlLCBhOmhvdmVyIHtcbiAgb3V0bGluZTogbm9uZTtcbn1cblxuYSBsYWJlbCB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLypcbiAqIEEgcGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUnVieSBsaXN0IGZ1bmN0aW9ucyBmcm9tIENvbXBhc3M6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vQ29tcGFzcy9jb21wYXNzL2Jsb2Ivc3RhYmxlL2xpYi9jb21wYXNzL3Nhc3NfZXh0ZW5zaW9ucy9mdW5jdGlvbnMvbGlzdHMucmJcbiAqL1xuLypcbiAqIEEgcGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUnVieSBjb25zdGFudHMgZnVuY3Rpb25zIGZyb20gQ29tcGFzczpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Db21wYXNzL2NvbXBhc3MvYmxvYi9zdGFibGUvbGliL2NvbXBhc3Mvc2Fzc19leHRlbnNpb25zL2Z1bmN0aW9ucy9jb25zdGFudHMucmJcbiAqL1xuLypcbiAqIEEgcGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUnVieSBkaXNwbGF5IGZ1bmN0aW9ucyBmcm9tIENvbXBhc3M6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vQ29tcGFzcy9jb21wYXNzL2Jsb2Ivc3RhYmxlL2NvcmUvbGliL2NvbXBhc3MvY29yZS9zYXNzX2V4dGVuc2lvbnMvZnVuY3Rpb25zL2Rpc3BsYXkucmJcbiAqL1xuLyohXG4gKiBCb290c3RyYXAgdjMuMy41IChodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbSlcbiAqIENvcHlyaWdodCAyMDExLTIwMTUgVHdpdHRlciwgSW5jLlxuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqL1xuLyohIG5vcm1hbGl6ZS5jc3MgdjMuMC4zIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcyAqL1xuaHRtbCB7XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xuICAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xufVxuXG5ib2R5IHtcbiAgbWFyZ2luOiAwO1xufVxuXG5hcnRpY2xlLFxuYXNpZGUsXG5kZXRhaWxzLFxuZmlnY2FwdGlvbixcbmZpZ3VyZSxcbmZvb3RlcixcbmhlYWRlcixcbmhncm91cCxcbm1haW4sXG5tZW51LFxubmF2LFxuc2VjdGlvbixcbnN1bW1hcnkge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuYXVkaW8sXG5jYW52YXMsXG5wcm9ncmVzcyxcbnZpZGVvIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG5cbmF1ZGlvOm5vdChbY29udHJvbHNdKSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGhlaWdodDogMDtcbn1cblxuW2hpZGRlbl0sXG50ZW1wbGF0ZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbmEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuYTphY3RpdmUsXG5hOmhvdmVyIHtcbiAgb3V0bGluZTogMDtcbn1cblxuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkO1xufVxuXG5iLFxuc3Ryb25nIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbmRmbiB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuaDEge1xuICBmb250LXNpemU6IDJlbTtcbiAgbWFyZ2luOiAwLjY3ZW0gMDtcbn1cblxubWFyayB7XG4gIGJhY2tncm91bmQ6ICNmZjA7XG4gIGNvbG9yOiAjMDAwO1xufVxuXG5zbWFsbCB7XG4gIGZvbnQtc2l6ZTogODAlO1xufVxuXG5zdWIsXG5zdXAge1xuICBmb250LXNpemU6IDc1JTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuXG5pbWcge1xuICBib3JkZXI6IDA7XG59XG5cbnN2Zzpub3QoOnJvb3QpIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuZmlndXJlIHtcbiAgbWFyZ2luOiAxZW0gNDBweDtcbn1cblxuaHIge1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgaGVpZ2h0OiAwO1xufVxuXG5wcmUge1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuY29kZSxcbmtiZCxcbnByZSxcbnNhbXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7XG4gIGZvbnQtc2l6ZTogMWVtO1xufVxuXG5idXR0b24sXG5pbnB1dCxcbm9wdGdyb3VwLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBjb2xvcjogaW5oZXJpdDtcbiAgZm9udDogaW5oZXJpdDtcbiAgbWFyZ2luOiAwO1xufVxuXG5idXR0b24ge1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuYnV0dG9uLFxuc2VsZWN0IHtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG59XG5cbmJ1dHRvbixcbmh0bWwgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSwgaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbmJ1dHRvbltkaXNhYmxlZF0sXG5odG1sIGlucHV0W2Rpc2FibGVkXSB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxuaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXIge1xuICBib3JkZXI6IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbmlucHV0IHtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cblxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcGFkZGluZzogMDtcbn1cblxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG59XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuXG5maWVsZHNldCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gIG1hcmdpbjogMCAycHg7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTtcbn1cblxubGVnZW5kIHtcbiAgYm9yZGVyOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuXG50ZXh0YXJlYSB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG5vcHRncm91cCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xufVxuXG50ZCxcbnRoIHtcbiAgcGFkZGluZzogMDtcbn1cblxuLyohIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2g1YnAvaHRtbDUtYm9pbGVycGxhdGUvYmxvYi9tYXN0ZXIvc3JjL2Nzcy9tYWluLmNzcyAqL1xuQG1lZGlhIHByaW50IHtcbiAgKixcbiAgKjpiZWZvcmUsXG4gICo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICMwMDAgIWltcG9ydGFudDtcbiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxuICBhLFxuICBhOnZpc2l0ZWQge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG4gIGFbaHJlZl06YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIChcIiBhdHRyKGhyZWYpIFwiKVwiO1xuICB9XG4gIGFiYnJbdGl0bGVdOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIiAoXCIgYXR0cih0aXRsZSkgXCIpXCI7XG4gIH1cbiAgYVtocmVmXj1cIiNcIl06YWZ0ZXIsXG4gIGFbaHJlZl49XCJqYXZhc2NyaXB0OlwiXTphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgfVxuICBwcmUsXG4gIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7XG4gICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkO1xuICB9XG4gIHRoZWFkIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7XG4gIH1cbiAgdHIsXG4gIGltZyB7XG4gICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkO1xuICB9XG4gIGltZyB7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIH1cbiAgcCxcbiAgaDIsXG4gIGgzIHtcbiAgICBvcnBoYW5zOiAzO1xuICAgIHdpZG93czogMztcbiAgfVxuICBoMixcbiAgaDMge1xuICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkO1xuICB9XG4gIC5uYXZiYXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLmJ0biA+IC5jYXJldCxcbiAgLmRyb3B1cCA+IC5idG4gPiAuY2FyZXQge1xuICAgIGJvcmRlci10b3AtY29sb3I6ICMwMDAgIWltcG9ydGFudDtcbiAgfVxuICAubGFiZWwge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG4gIH1cbiAgLnRhYmxlIHtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlICFpbXBvcnRhbnQ7XG4gIH1cbiAgLnRhYmxlIHRkLFxuICAudGFibGUgdGgge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDtcbiAgfVxuICAudGFibGUtYm9yZGVyZWQgdGgsXG4gIC50YWJsZS1ib3JkZXJlZCB0ZCB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2RkZCAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0dseXBoaWNvbnMgSGFsZmxpbmdzJztcbiAgc3JjOiB1cmwoXCIuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLmVvdFwiKTtcbiAgc3JjOiB1cmwoXCIuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLmVvdD8jaWVmaXhcIikgZm9ybWF0KFwiZW1iZWRkZWQtb3BlbnR5cGVcIiksIHVybChcIi4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksIHVybChcIi4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpLCB1cmwoXCIuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnR0ZlwiKSBmb3JtYXQoXCJ0cnVldHlwZVwiKSwgdXJsKFwiLi4vZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5zdmcjZ2x5cGhpY29uc19oYWxmbGluZ3NyZWd1bGFyXCIpIGZvcm1hdChcInN2Z1wiKTtcbn1cblxuLmdseXBoaWNvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAxcHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1mYW1pbHk6ICdHbHlwaGljb25zIEhhbGZsaW5ncyc7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xufVxuXG4uZ2x5cGhpY29uLWFzdGVyaXNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyYVwiO1xufVxuXG4uZ2x5cGhpY29uLXBsdXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDJiXCI7XG59XG5cbi5nbHlwaGljb24tZXVybzpiZWZvcmUsXG4uZ2x5cGhpY29uLWV1cjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjBhY1wiO1xufVxuXG4uZ2x5cGhpY29uLW1pbnVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyMjEyXCI7XG59XG5cbi5nbHlwaGljb24tY2xvdWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDI2MDFcIjtcbn1cblxuLmdseXBoaWNvbi1lbnZlbG9wZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjcwOVwiO1xufVxuXG4uZ2x5cGhpY29uLXBlbmNpbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjcwZlwiO1xufVxuXG4uZ2x5cGhpY29uLWdsYXNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDAxXCI7XG59XG5cbi5nbHlwaGljb24tbXVzaWM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDJcIjtcbn1cblxuLmdseXBoaWNvbi1zZWFyY2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDNcIjtcbn1cblxuLmdseXBoaWNvbi1oZWFydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAwNVwiO1xufVxuXG4uZ2x5cGhpY29uLXN0YXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDZcIjtcbn1cblxuLmdseXBoaWNvbi1zdGFyLWVtcHR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDA3XCI7XG59XG5cbi5nbHlwaGljb24tdXNlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAwOFwiO1xufVxuXG4uZ2x5cGhpY29uLWZpbG06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDlcIjtcbn1cblxuLmdseXBoaWNvbi10aC1sYXJnZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxMFwiO1xufVxuXG4uZ2x5cGhpY29uLXRoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDExXCI7XG59XG5cbi5nbHlwaGljb24tdGgtbGlzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxMlwiO1xufVxuXG4uZ2x5cGhpY29uLW9rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDEzXCI7XG59XG5cbi5nbHlwaGljb24tcmVtb3ZlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE0XCI7XG59XG5cbi5nbHlwaGljb24tem9vbS1pbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxNVwiO1xufVxuXG4uZ2x5cGhpY29uLXpvb20tb3V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE2XCI7XG59XG5cbi5nbHlwaGljb24tb2ZmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE3XCI7XG59XG5cbi5nbHlwaGljb24tc2lnbmFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE4XCI7XG59XG5cbi5nbHlwaGljb24tY29nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE5XCI7XG59XG5cbi5nbHlwaGljb24tdHJhc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjBcIjtcbn1cblxuLmdseXBoaWNvbi1ob21lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDIxXCI7XG59XG5cbi5nbHlwaGljb24tZmlsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyMlwiO1xufVxuXG4uZ2x5cGhpY29uLXRpbWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjNcIjtcbn1cblxuLmdseXBoaWNvbi1yb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDI0XCI7XG59XG5cbi5nbHlwaGljb24tZG93bmxvYWQtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDI1XCI7XG59XG5cbi5nbHlwaGljb24tZG93bmxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjZcIjtcbn1cblxuLmdseXBoaWNvbi11cGxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjdcIjtcbn1cblxuLmdseXBoaWNvbi1pbmJveDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyOFwiO1xufVxuXG4uZ2x5cGhpY29uLXBsYXktY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDI5XCI7XG59XG5cbi5nbHlwaGljb24tcmVwZWF0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDMwXCI7XG59XG5cbi5nbHlwaGljb24tcmVmcmVzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzMVwiO1xufVxuXG4uZ2x5cGhpY29uLWxpc3QtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDMyXCI7XG59XG5cbi5nbHlwaGljb24tbG9jazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzM1wiO1xufVxuXG4uZ2x5cGhpY29uLWZsYWc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzRcIjtcbn1cblxuLmdseXBoaWNvbi1oZWFkcGhvbmVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDM1XCI7XG59XG5cbi5nbHlwaGljb24tdm9sdW1lLW9mZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzNlwiO1xufVxuXG4uZ2x5cGhpY29uLXZvbHVtZS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDM3XCI7XG59XG5cbi5nbHlwaGljb24tdm9sdW1lLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDM4XCI7XG59XG5cbi5nbHlwaGljb24tcXJjb2RlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDM5XCI7XG59XG5cbi5nbHlwaGljb24tYmFyY29kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0MFwiO1xufVxuXG4uZ2x5cGhpY29uLXRhZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0MVwiO1xufVxuXG4uZ2x5cGhpY29uLXRhZ3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDJcIjtcbn1cblxuLmdseXBoaWNvbi1ib29rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQzXCI7XG59XG5cbi5nbHlwaGljb24tYm9va21hcms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDRcIjtcbn1cblxuLmdseXBoaWNvbi1wcmludDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0NVwiO1xufVxuXG4uZ2x5cGhpY29uLWNhbWVyYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0NlwiO1xufVxuXG4uZ2x5cGhpY29uLWZvbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDdcIjtcbn1cblxuLmdseXBoaWNvbi1ib2xkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQ4XCI7XG59XG5cbi5nbHlwaGljb24taXRhbGljOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQ5XCI7XG59XG5cbi5nbHlwaGljb24tdGV4dC1oZWlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNTBcIjtcbn1cblxuLmdseXBoaWNvbi10ZXh0LXdpZHRoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDUxXCI7XG59XG5cbi5nbHlwaGljb24tYWxpZ24tbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1MlwiO1xufVxuXG4uZ2x5cGhpY29uLWFsaWduLWNlbnRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1M1wiO1xufVxuXG4uZ2x5cGhpY29uLWFsaWduLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDU0XCI7XG59XG5cbi5nbHlwaGljb24tYWxpZ24tanVzdGlmeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1NVwiO1xufVxuXG4uZ2x5cGhpY29uLWxpc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNTZcIjtcbn1cblxuLmdseXBoaWNvbi1pbmRlbnQtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1N1wiO1xufVxuXG4uZ2x5cGhpY29uLWluZGVudC1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1OFwiO1xufVxuXG4uZ2x5cGhpY29uLWZhY2V0aW1lLXZpZGVvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDU5XCI7XG59XG5cbi5nbHlwaGljb24tcGljdHVyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2MFwiO1xufVxuXG4uZ2x5cGhpY29uLW1hcC1tYXJrZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjJcIjtcbn1cblxuLmdseXBoaWNvbi1hZGp1c3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjNcIjtcbn1cblxuLmdseXBoaWNvbi10aW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDY0XCI7XG59XG5cbi5nbHlwaGljb24tZWRpdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2NVwiO1xufVxuXG4uZ2x5cGhpY29uLXNoYXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDY2XCI7XG59XG5cbi5nbHlwaGljb24tY2hlY2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjdcIjtcbn1cblxuLmdseXBoaWNvbi1tb3ZlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDY4XCI7XG59XG5cbi5nbHlwaGljb24tc3RlcC1iYWNrd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2OVwiO1xufVxuXG4uZ2x5cGhpY29uLWZhc3QtYmFja3dhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzBcIjtcbn1cblxuLmdseXBoaWNvbi1iYWNrd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3MVwiO1xufVxuXG4uZ2x5cGhpY29uLXBsYXk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzJcIjtcbn1cblxuLmdseXBoaWNvbi1wYXVzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3M1wiO1xufVxuXG4uZ2x5cGhpY29uLXN0b3A6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzRcIjtcbn1cblxuLmdseXBoaWNvbi1mb3J3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDc1XCI7XG59XG5cbi5nbHlwaGljb24tZmFzdC1mb3J3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDc2XCI7XG59XG5cbi5nbHlwaGljb24tc3RlcC1mb3J3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDc3XCI7XG59XG5cbi5nbHlwaGljb24tZWplY3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzhcIjtcbn1cblxuLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzlcIjtcbn1cblxuLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDgwXCI7XG59XG5cbi5nbHlwaGljb24tcGx1cy1zaWduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDgxXCI7XG59XG5cbi5nbHlwaGljb24tbWludXMtc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4MlwiO1xufVxuXG4uZ2x5cGhpY29uLXJlbW92ZS1zaWduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDgzXCI7XG59XG5cbi5nbHlwaGljb24tb2stc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4NFwiO1xufVxuXG4uZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODVcIjtcbn1cblxuLmdseXBoaWNvbi1pbmZvLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODZcIjtcbn1cblxuLmdseXBoaWNvbi1zY3JlZW5zaG90OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDg3XCI7XG59XG5cbi5nbHlwaGljb24tcmVtb3ZlLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4OFwiO1xufVxuXG4uZ2x5cGhpY29uLW9rLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4OVwiO1xufVxuXG4uZ2x5cGhpY29uLWJhbi1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTBcIjtcbn1cblxuLmdseXBoaWNvbi1hcnJvdy1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDkxXCI7XG59XG5cbi5nbHlwaGljb24tYXJyb3ctcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTJcIjtcbn1cblxuLmdseXBoaWNvbi1hcnJvdy11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5M1wiO1xufVxuXG4uZ2x5cGhpY29uLWFycm93LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTRcIjtcbn1cblxuLmdseXBoaWNvbi1zaGFyZS1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTVcIjtcbn1cblxuLmdseXBoaWNvbi1yZXNpemUtZnVsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5NlwiO1xufVxuXG4uZ2x5cGhpY29uLXJlc2l6ZS1zbWFsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5N1wiO1xufVxuXG4uZ2x5cGhpY29uLWV4Y2xhbWF0aW9uLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDFcIjtcbn1cblxuLmdseXBoaWNvbi1naWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTAyXCI7XG59XG5cbi5nbHlwaGljb24tbGVhZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwM1wiO1xufVxuXG4uZ2x5cGhpY29uLWZpcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDRcIjtcbn1cblxuLmdseXBoaWNvbi1leWUtb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwNVwiO1xufVxuXG4uZ2x5cGhpY29uLWV5ZS1jbG9zZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwNlwiO1xufVxuXG4uZ2x5cGhpY29uLXdhcm5pbmctc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwN1wiO1xufVxuXG4uZ2x5cGhpY29uLXBsYW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTA4XCI7XG59XG5cbi5nbHlwaGljb24tY2FsZW5kYXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDlcIjtcbn1cblxuLmdseXBoaWNvbi1yYW5kb206YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTBcIjtcbn1cblxuLmdseXBoaWNvbi1jb21tZW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTExXCI7XG59XG5cbi5nbHlwaGljb24tbWFnbmV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTEyXCI7XG59XG5cbi5nbHlwaGljb24tY2hldnJvbi11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExM1wiO1xufVxuXG4uZ2x5cGhpY29uLWNoZXZyb24tZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExNFwiO1xufVxuXG4uZ2x5cGhpY29uLXJldHdlZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTVcIjtcbn1cblxuLmdseXBoaWNvbi1zaG9wcGluZy1jYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTE2XCI7XG59XG5cbi5nbHlwaGljb24tZm9sZGVyLWNsb3NlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTE3XCI7XG59XG5cbi5nbHlwaGljb24tZm9sZGVyLW9wZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMThcIjtcbn1cblxuLmdseXBoaWNvbi1yZXNpemUtdmVydGljYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTlcIjtcbn1cblxuLmdseXBoaWNvbi1yZXNpemUtaG9yaXpvbnRhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyMFwiO1xufVxuXG4uZ2x5cGhpY29uLWhkZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyMVwiO1xufVxuXG4uZ2x5cGhpY29uLWJ1bGxob3JuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTIyXCI7XG59XG5cbi5nbHlwaGljb24tYmVsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyM1wiO1xufVxuXG4uZ2x5cGhpY29uLWNlcnRpZmljYXRlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI0XCI7XG59XG5cbi5nbHlwaGljb24tdGh1bWJzLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI1XCI7XG59XG5cbi5nbHlwaGljb24tdGh1bWJzLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjZcIjtcbn1cblxuLmdseXBoaWNvbi1oYW5kLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI3XCI7XG59XG5cbi5nbHlwaGljb24taGFuZC1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI4XCI7XG59XG5cbi5nbHlwaGljb24taGFuZC11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyOVwiO1xufVxuXG4uZ2x5cGhpY29uLWhhbmQtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzMFwiO1xufVxuXG4uZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzMVwiO1xufVxuXG4uZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTMyXCI7XG59XG5cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTMzXCI7XG59XG5cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzRcIjtcbn1cblxuLmdseXBoaWNvbi1nbG9iZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzNVwiO1xufVxuXG4uZ2x5cGhpY29uLXdyZW5jaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzNlwiO1xufVxuXG4uZ2x5cGhpY29uLXRhc2tzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTM3XCI7XG59XG5cbi5nbHlwaGljb24tZmlsdGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTM4XCI7XG59XG5cbi5nbHlwaGljb24tYnJpZWZjYXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTM5XCI7XG59XG5cbi5nbHlwaGljb24tZnVsbHNjcmVlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0MFwiO1xufVxuXG4uZ2x5cGhpY29uLWRhc2hib2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0MVwiO1xufVxuXG4uZ2x5cGhpY29uLXBhcGVyY2xpcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0MlwiO1xufVxuXG4uZ2x5cGhpY29uLWhlYXJ0LWVtcHR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQzXCI7XG59XG5cbi5nbHlwaGljb24tbGluazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0NFwiO1xufVxuXG4uZ2x5cGhpY29uLXBob25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQ1XCI7XG59XG5cbi5nbHlwaGljb24tcHVzaHBpbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0NlwiO1xufVxuXG4uZ2x5cGhpY29uLXVzZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0OFwiO1xufVxuXG4uZ2x5cGhpY29uLWdicDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0OVwiO1xufVxuXG4uZ2x5cGhpY29uLXNvcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTBcIjtcbn1cblxuLmdseXBoaWNvbi1zb3J0LWJ5LWFscGhhYmV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTUxXCI7XG59XG5cbi5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldC1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTJcIjtcbn1cblxuLmdseXBoaWNvbi1zb3J0LWJ5LW9yZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTUzXCI7XG59XG5cbi5nbHlwaGljb24tc29ydC1ieS1vcmRlci1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTRcIjtcbn1cblxuLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTVcIjtcbn1cblxuLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXMtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTU2XCI7XG59XG5cbi5nbHlwaGljb24tdW5jaGVja2VkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTU3XCI7XG59XG5cbi5nbHlwaGljb24tZXhwYW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTU4XCI7XG59XG5cbi5nbHlwaGljb24tY29sbGFwc2UtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1OVwiO1xufVxuXG4uZ2x5cGhpY29uLWNvbGxhcHNlLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTYwXCI7XG59XG5cbi5nbHlwaGljb24tbG9nLWluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTYxXCI7XG59XG5cbi5nbHlwaGljb24tZmxhc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjJcIjtcbn1cblxuLmdseXBoaWNvbi1sb2ctb3V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTYzXCI7XG59XG5cbi5nbHlwaGljb24tbmV3LXdpbmRvdzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2NFwiO1xufVxuXG4uZ2x5cGhpY29uLXJlY29yZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2NVwiO1xufVxuXG4uZ2x5cGhpY29uLXNhdmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjZcIjtcbn1cblxuLmdseXBoaWNvbi1vcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTY3XCI7XG59XG5cbi5nbHlwaGljb24tc2F2ZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjhcIjtcbn1cblxuLmdseXBoaWNvbi1pbXBvcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjlcIjtcbn1cblxuLmdseXBoaWNvbi1leHBvcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzBcIjtcbn1cblxuLmdseXBoaWNvbi1zZW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTcxXCI7XG59XG5cbi5nbHlwaGljb24tZmxvcHB5LWRpc2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzJcIjtcbn1cblxuLmdseXBoaWNvbi1mbG9wcHktc2F2ZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzNcIjtcbn1cblxuLmdseXBoaWNvbi1mbG9wcHktcmVtb3ZlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTc0XCI7XG59XG5cbi5nbHlwaGljb24tZmxvcHB5LXNhdmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzVcIjtcbn1cblxuLmdseXBoaWNvbi1mbG9wcHktb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE3NlwiO1xufVxuXG4uZ2x5cGhpY29uLWNyZWRpdC1jYXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTc3XCI7XG59XG5cbi5nbHlwaGljb24tdHJhbnNmZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzhcIjtcbn1cblxuLmdseXBoaWNvbi1jdXRsZXJ5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTc5XCI7XG59XG5cbi5nbHlwaGljb24taGVhZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTgwXCI7XG59XG5cbi5nbHlwaGljb24tY29tcHJlc3NlZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4MVwiO1xufVxuXG4uZ2x5cGhpY29uLWVhcnBob25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTgyXCI7XG59XG5cbi5nbHlwaGljb24tcGhvbmUtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTgzXCI7XG59XG5cbi5nbHlwaGljb24tdG93ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODRcIjtcbn1cblxuLmdseXBoaWNvbi1zdGF0czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4NVwiO1xufVxuXG4uZ2x5cGhpY29uLXNkLXZpZGVvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTg2XCI7XG59XG5cbi5nbHlwaGljb24taGQtdmlkZW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODdcIjtcbn1cblxuLmdseXBoaWNvbi1zdWJ0aXRsZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODhcIjtcbn1cblxuLmdseXBoaWNvbi1zb3VuZC1zdGVyZW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODlcIjtcbn1cblxuLmdseXBoaWNvbi1zb3VuZC1kb2xieTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5MFwiO1xufVxuXG4uZ2x5cGhpY29uLXNvdW5kLTUtMTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5MVwiO1xufVxuXG4uZ2x5cGhpY29uLXNvdW5kLTYtMTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5MlwiO1xufVxuXG4uZ2x5cGhpY29uLXNvdW5kLTctMTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5M1wiO1xufVxuXG4uZ2x5cGhpY29uLWNvcHlyaWdodC1tYXJrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTk0XCI7XG59XG5cbi5nbHlwaGljb24tcmVnaXN0cmF0aW9uLW1hcms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxOTVcIjtcbn1cblxuLmdseXBoaWNvbi1jbG91ZC1kb3dubG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5N1wiO1xufVxuXG4uZ2x5cGhpY29uLWNsb3VkLXVwbG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5OFwiO1xufVxuXG4uZ2x5cGhpY29uLXRyZWUtY29uaWZlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5OVwiO1xufVxuXG4uZ2x5cGhpY29uLXRyZWUtZGVjaWR1b3VzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjAwXCI7XG59XG5cbi5nbHlwaGljb24tY2Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDFcIjtcbn1cblxuLmdseXBoaWNvbi1zYXZlLWZpbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDJcIjtcbn1cblxuLmdseXBoaWNvbi1vcGVuLWZpbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDNcIjtcbn1cblxuLmdseXBoaWNvbi1sZXZlbC11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwNFwiO1xufVxuXG4uZ2x5cGhpY29uLWNvcHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDVcIjtcbn1cblxuLmdseXBoaWNvbi1wYXN0ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwNlwiO1xufVxuXG4uZ2x5cGhpY29uLWFsZXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjA5XCI7XG59XG5cbi5nbHlwaGljb24tZXF1YWxpemVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjEwXCI7XG59XG5cbi5nbHlwaGljb24ta2luZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxMVwiO1xufVxuXG4uZ2x5cGhpY29uLXF1ZWVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjEyXCI7XG59XG5cbi5nbHlwaGljb24tcGF3bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxM1wiO1xufVxuXG4uZ2x5cGhpY29uLWJpc2hvcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxNFwiO1xufVxuXG4uZ2x5cGhpY29uLWtuaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxNVwiO1xufVxuXG4uZ2x5cGhpY29uLWJhYnktZm9ybXVsYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxNlwiO1xufVxuXG4uZ2x5cGhpY29uLXRlbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDI2ZmFcIjtcbn1cblxuLmdseXBoaWNvbi1ibGFja2JvYXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjE4XCI7XG59XG5cbi5nbHlwaGljb24tYmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjE5XCI7XG59XG5cbi5nbHlwaGljb24tYXBwbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY4ZmZcIjtcbn1cblxuLmdseXBoaWNvbi1lcmFzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIyMVwiO1xufVxuXG4uZ2x5cGhpY29uLWhvdXJnbGFzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjMxYlwiO1xufVxuXG4uZ2x5cGhpY29uLWxhbXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjNcIjtcbn1cblxuLmdseXBoaWNvbi1kdXBsaWNhdGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjRcIjtcbn1cblxuLmdseXBoaWNvbi1waWdneS1iYW5rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI1XCI7XG59XG5cbi5nbHlwaGljb24tc2Npc3NvcnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjZcIjtcbn1cblxuLmdseXBoaWNvbi1iaXRjb2luOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI3XCI7XG59XG5cbi5nbHlwaGljb24tYnRjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI3XCI7XG59XG5cbi5nbHlwaGljb24teGJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI3XCI7XG59XG5cbi5nbHlwaGljb24teWVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwwMGE1XCI7XG59XG5cbi5nbHlwaGljb24tanB5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwwMGE1XCI7XG59XG5cbi5nbHlwaGljb24tcnVibGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDIwYmRcIjtcbn1cblxuLmdseXBoaWNvbi1ydWI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDIwYmRcIjtcbn1cblxuLmdseXBoaWNvbi1zY2FsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzMFwiO1xufVxuXG4uZ2x5cGhpY29uLWljZS1sb2xseTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzMVwiO1xufVxuXG4uZ2x5cGhpY29uLWljZS1sb2xseS10YXN0ZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzJcIjtcbn1cblxuLmdseXBoaWNvbi1lZHVjYXRpb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzNcIjtcbn1cblxuLmdseXBoaWNvbi1vcHRpb24taG9yaXpvbnRhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzNFwiO1xufVxuXG4uZ2x5cGhpY29uLW9wdGlvbi12ZXJ0aWNhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzNVwiO1xufVxuXG4uZ2x5cGhpY29uLW1lbnUtaGFtYnVyZ2VyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjM2XCI7XG59XG5cbi5nbHlwaGljb24tbW9kYWwtd2luZG93OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjM3XCI7XG59XG5cbi5nbHlwaGljb24tb2lsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjM4XCI7XG59XG5cbi5nbHlwaGljb24tZ3JhaW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzlcIjtcbn1cblxuLmdseXBoaWNvbi1zdW5nbGFzc2VzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQwXCI7XG59XG5cbi5nbHlwaGljb24tdGV4dC1zaXplOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQxXCI7XG59XG5cbi5nbHlwaGljb24tdGV4dC1jb2xvcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0MlwiO1xufVxuXG4uZ2x5cGhpY29uLXRleHQtYmFja2dyb3VuZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0M1wiO1xufVxuXG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi10b3A6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDRcIjtcbn1cblxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tYm90dG9tOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQ1XCI7XG59XG5cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLWhvcml6b250YWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDZcIjtcbn1cblxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0N1wiO1xufVxuXG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi12ZXJ0aWNhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0OFwiO1xufVxuXG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0OVwiO1xufVxuXG4uZ2x5cGhpY29uLXRyaWFuZ2xlLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjUwXCI7XG59XG5cbi5nbHlwaGljb24tdHJpYW5nbGUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1MVwiO1xufVxuXG4uZ2x5cGhpY29uLXRyaWFuZ2xlLWJvdHRvbTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1MlwiO1xufVxuXG4uZ2x5cGhpY29uLXRyaWFuZ2xlLXRvcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1M1wiO1xufVxuXG4uZ2x5cGhpY29uLWNvbnNvbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTRcIjtcbn1cblxuLmdseXBoaWNvbi1zdXBlcnNjcmlwdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1NVwiO1xufVxuXG4uZ2x5cGhpY29uLXN1YnNjcmlwdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1NlwiO1xufVxuXG4uZ2x5cGhpY29uLW1lbnUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1N1wiO1xufVxuXG4uZ2x5cGhpY29uLW1lbnUtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNThcIjtcbn1cblxuLmdseXBoaWNvbi1tZW51LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTlcIjtcbn1cblxuLmdseXBoaWNvbi1tZW51LXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjYwXCI7XG59XG5cbioge1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuKjpiZWZvcmUsXG4qOmFmdGVyIHtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbmh0bWwge1xuICBmb250LXNpemU6IDEwcHg7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbmJvZHkge1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2FOZXVlTWVkaXVtXCIsIFwiSGVsdmV0aWNhTmV1ZS1NZWRpdW1cIiwgXCJIZWx2ZXRpY2EgTmV1ZSBNZWRpdW1cIiwgXCJIZWx2ZXRpY2FOZXVlXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgXCJMdWNpZGEgR3JhbmRlXCIsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICBjb2xvcjogIzIyMjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cblxuaW5wdXQsXG5idXR0b24sXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xufVxuXG5hIHtcbiAgY29sb3I6ICMzYTM5M2I7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuYTpob3ZlcixcbmE6Zm9jdXMge1xuICBjb2xvcjogIzE0MTMxNDtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbmE6Zm9jdXMge1xuICBvdXRsaW5lOiB0aGluIGRvdHRlZDtcbiAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xuICBvdXRsaW5lLW9mZnNldDogLTJweDtcbn1cblxuZmlndXJlIHtcbiAgbWFyZ2luOiAwO1xufVxuXG5pbWcge1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uaW1nLXJlc3BvbnNpdmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi5pbWctcm91bmRlZCB7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLmltZy10aHVtYm5haWwge1xuICBwYWRkaW5nOiA0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICAtby10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi5pbWctY2lyY2xlIHtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xufVxuXG5ociB7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNmZmY7XG59XG5cbi5zci1vbmx5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xuICBoZWlnaHQ6IDFweDtcbiAgbWFyZ2luOiAtMXB4O1xuICBwYWRkaW5nOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xuICBib3JkZXI6IDA7XG59XG5cbi5zci1vbmx5LWZvY3VzYWJsZTphY3RpdmUsXG4uc3Itb25seS1mb2N1c2FibGU6Zm9jdXMge1xuICBwb3NpdGlvbjogc3RhdGljO1xuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXJnaW46IDA7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuICBjbGlwOiBhdXRvO1xufVxuXG5bcm9sZT1cImJ1dHRvblwiXSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNixcbi5oMSwgLmgyLCAuaDMsIC5oNCwgLmg1LCAuaDYge1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbGluZS1oZWlnaHQ6IDEuMTtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbmgxIHNtYWxsLFxuaDEgLnNtYWxsLCBoMiBzbWFsbCxcbmgyIC5zbWFsbCwgaDMgc21hbGwsXG5oMyAuc21hbGwsIGg0IHNtYWxsLFxuaDQgLnNtYWxsLCBoNSBzbWFsbCxcbmg1IC5zbWFsbCwgaDYgc21hbGwsXG5oNiAuc21hbGwsXG4uaDEgc21hbGwsXG4uaDEgLnNtYWxsLCAuaDIgc21hbGwsXG4uaDIgLnNtYWxsLCAuaDMgc21hbGwsXG4uaDMgLnNtYWxsLCAuaDQgc21hbGwsXG4uaDQgLnNtYWxsLCAuaDUgc21hbGwsXG4uaDUgLnNtYWxsLCAuaDYgc21hbGwsXG4uaDYgLnNtYWxsIHtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGNvbG9yOiAjOTk5O1xufVxuXG5oMSwgLmgxLFxuaDIsIC5oMixcbmgzLCAuaDMge1xuICBtYXJnaW4tdG9wOiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG5oMSBzbWFsbCxcbmgxIC5zbWFsbCwgLmgxIHNtYWxsLFxuLmgxIC5zbWFsbCxcbmgyIHNtYWxsLFxuaDIgLnNtYWxsLCAuaDIgc21hbGwsXG4uaDIgLnNtYWxsLFxuaDMgc21hbGwsXG5oMyAuc21hbGwsIC5oMyBzbWFsbCxcbi5oMyAuc21hbGwge1xuICBmb250LXNpemU6IDY1JTtcbn1cblxuaDQsIC5oNCxcbmg1LCAuaDUsXG5oNiwgLmg2IHtcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxuaDQgc21hbGwsXG5oNCAuc21hbGwsIC5oNCBzbWFsbCxcbi5oNCAuc21hbGwsXG5oNSBzbWFsbCxcbmg1IC5zbWFsbCwgLmg1IHNtYWxsLFxuLmg1IC5zbWFsbCxcbmg2IHNtYWxsLFxuaDYgLnNtYWxsLCAuaDYgc21hbGwsXG4uaDYgLnNtYWxsIHtcbiAgZm9udC1zaXplOiA3NSU7XG59XG5cbmgxLCAuaDEge1xuICBmb250LXNpemU6IDEuNTcxZW07XG59XG5cbmgyLCAuaDIge1xuICBmb250LXNpemU6IDIycHg7XG59XG5cbmgzLCAuaDMge1xuICBmb250LXNpemU6IDE3cHg7XG59XG5cbmg0LCAuaDQge1xuICBmb250LXNpemU6IDE0cHg7XG59XG5cbmg1LCAuaDUge1xuICBmb250LXNpemU6IDE0cHg7XG59XG5cbmg2LCAuaDYge1xuICBmb250LXNpemU6IDE0cHg7XG59XG5cbnAge1xuICBtYXJnaW46IDAgMCAxMHB4O1xufVxuXG4ubGVhZCB7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5sZWFkIHtcbiAgICBmb250LXNpemU6IDIxcHg7XG4gIH1cbn1cblxuc21hbGwsXG4uc21hbGwge1xuICBmb250LXNpemU6IDg1JTtcbn1cblxubWFyayxcbi5tYXJrIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxZTNjMjtcbiAgcGFkZGluZzogLjJlbTtcbn1cblxuLnRleHQtbGVmdCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi50ZXh0LXJpZ2h0IHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG5cbi50ZXh0LWNlbnRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnRleHQtanVzdGlmeSB7XG4gIHRleHQtYWxpZ246IGp1c3RpZnk7XG59XG5cbi50ZXh0LW5vd3JhcCB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi50ZXh0LWxvd2VyY2FzZSB7XG4gIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2U7XG59XG5cbi50ZXh0LXVwcGVyY2FzZSwgLmluaXRpYWxpc20ge1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG4udGV4dC1jYXBpdGFsaXplIHtcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG59XG5cbi50ZXh0LW11dGVkIHtcbiAgY29sb3I6ICM5OTk7XG59XG5cbi50ZXh0LXByaW1hcnkge1xuICBjb2xvcjogIzNhMzkzYjtcbn1cblxuYS50ZXh0LXByaW1hcnk6aG92ZXIsXG5hLnRleHQtcHJpbWFyeTpmb2N1cyB7XG4gIGNvbG9yOiAjMjEyMDIxO1xufVxuXG4udGV4dC1zdWNjZXNzIHtcbiAgY29sb3I6ICM2YzZjNmM7XG59XG5cbmEudGV4dC1zdWNjZXNzOmhvdmVyLFxuYS50ZXh0LXN1Y2Nlc3M6Zm9jdXMge1xuICBjb2xvcjogIzUyNTI1Mjtcbn1cblxuLnRleHQtaW5mbyB7XG4gIGNvbG9yOiAjNmM2YzZjO1xufVxuXG5hLnRleHQtaW5mbzpob3ZlcixcbmEudGV4dC1pbmZvOmZvY3VzIHtcbiAgY29sb3I6ICM1MjUyNTI7XG59XG5cbi50ZXh0LXdhcm5pbmcge1xuICBjb2xvcjogIzZjNmM2Yztcbn1cblxuYS50ZXh0LXdhcm5pbmc6aG92ZXIsXG5hLnRleHQtd2FybmluZzpmb2N1cyB7XG4gIGNvbG9yOiAjNTI1MjUyO1xufVxuXG4udGV4dC1kYW5nZXIge1xuICBjb2xvcjogIzZjNmM2Yztcbn1cblxuYS50ZXh0LWRhbmdlcjpob3ZlcixcbmEudGV4dC1kYW5nZXI6Zm9jdXMge1xuICBjb2xvcjogIzUyNTI1Mjtcbn1cblxuLmJnLXByaW1hcnkge1xuICBjb2xvcjogI2ZmZjtcbn1cblxuLmJnLXByaW1hcnkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2EzOTNiO1xufVxuXG5hLmJnLXByaW1hcnk6aG92ZXIsXG5hLmJnLXByaW1hcnk6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyMDIxO1xufVxuXG4uYmctc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkYWU2Y2I7XG59XG5cbmEuYmctc3VjY2Vzczpob3ZlcixcbmEuYmctc3VjY2Vzczpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjMWQ1YTk7XG59XG5cbi5iZy1pbmZvIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5ZWRmNztcbn1cblxuYS5iZy1pbmZvOmhvdmVyLFxuYS5iZy1pbmZvOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FmZDllZTtcbn1cblxuLmJnLXdhcm5pbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFlM2MyO1xufVxuXG5hLmJnLXdhcm5pbmc6aG92ZXIsXG5hLmJnLXdhcm5pbmc6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTdkMDk5O1xufVxuXG4uYmctZGFuZ2VyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VhYzNjNztcbn1cblxuYS5iZy1kYW5nZXI6aG92ZXIsXG5hLmJnLWRhbmdlcjpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkZDlkYTQ7XG59XG5cbi5wYWdlLWhlYWRlciB7XG4gIHBhZGRpbmctYm90dG9tOiA5cHg7XG4gIG1hcmdpbjogNDBweCAwIDIwcHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZmZmO1xufVxuXG51bCxcbm9sIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxudWwgdWwsXG51bCBvbCxcbm9sIHVsLFxub2wgb2wge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4ubGlzdC11bnN0eWxlZCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxuLmxpc3QtaW5saW5lIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBtYXJnaW4tbGVmdDogLTVweDtcbn1cblxuLmxpc3QtaW5saW5lID4gbGkge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmctbGVmdDogNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XG59XG5cbmRsIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuZHQsXG5kZCB7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbn1cblxuZHQge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuZGQge1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLmRsLWhvcml6b250YWwgZGQ6YmVmb3JlLFxuLmRsLWhvcml6b250YWwgZGQ6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgZGlzcGxheTogdGFibGU7XG59XG5cbi5kbC1ob3Jpem9udGFsIGRkOmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAuZGwtaG9yaXpvbnRhbCBkdCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IDE2MHB4O1xuICAgIGNsZWFyOiBsZWZ0O1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuICAuZGwtaG9yaXpvbnRhbCBkZCB7XG4gICAgbWFyZ2luLWxlZnQ6IDE4MHB4O1xuICB9XG59XG5cbmFiYnJbdGl0bGVdLFxuYWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXSB7XG4gIGN1cnNvcjogaGVscDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjOTk5O1xufVxuXG4uaW5pdGlhbGlzbSB7XG4gIGZvbnQtc2l6ZTogOTAlO1xufVxuXG5ibG9ja3F1b3RlIHtcbiAgcGFkZGluZzogMTBweCAyMHB4O1xuICBtYXJnaW46IDAgMCAyMHB4O1xuICBmb250LXNpemU6IDE3LjVweDtcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjZmZmO1xufVxuXG5ibG9ja3F1b3RlIHA6bGFzdC1jaGlsZCxcbmJsb2NrcXVvdGUgdWw6bGFzdC1jaGlsZCxcbmJsb2NrcXVvdGUgb2w6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbmJsb2NrcXVvdGUgZm9vdGVyLFxuYmxvY2txdW90ZSBzbWFsbCxcbmJsb2NrcXVvdGUgLnNtYWxsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogODAlO1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7XG4gIGNvbG9yOiAjOTk5O1xufVxuXG5ibG9ja3F1b3RlIGZvb3RlcjpiZWZvcmUsXG5ibG9ja3F1b3RlIHNtYWxsOmJlZm9yZSxcbmJsb2NrcXVvdGUgLnNtYWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXDIwMTQgXFwwMEEwJztcbn1cblxuLmJsb2NrcXVvdGUtcmV2ZXJzZSxcbmJsb2NrcXVvdGUucHVsbC1yaWdodCB7XG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgI2ZmZjtcbiAgYm9yZGVyLWxlZnQ6IDA7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG4uYmxvY2txdW90ZS1yZXZlcnNlIGZvb3RlcjpiZWZvcmUsXG4uYmxvY2txdW90ZS1yZXZlcnNlIHNtYWxsOmJlZm9yZSxcbi5ibG9ja3F1b3RlLXJldmVyc2UgLnNtYWxsOmJlZm9yZSxcbmJsb2NrcXVvdGUucHVsbC1yaWdodCBmb290ZXI6YmVmb3JlLFxuYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxsOmJlZm9yZSxcbmJsb2NrcXVvdGUucHVsbC1yaWdodCAuc21hbGw6YmVmb3JlIHtcbiAgY29udGVudDogJyc7XG59XG5cbi5ibG9ja3F1b3RlLXJldmVyc2UgZm9vdGVyOmFmdGVyLFxuLmJsb2NrcXVvdGUtcmV2ZXJzZSBzbWFsbDphZnRlcixcbi5ibG9ja3F1b3RlLXJldmVyc2UgLnNtYWxsOmFmdGVyLFxuYmxvY2txdW90ZS5wdWxsLXJpZ2h0IGZvb3RlcjphZnRlcixcbmJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbDphZnRlcixcbmJsb2NrcXVvdGUucHVsbC1yaWdodCAuc21hbGw6YWZ0ZXIge1xuICBjb250ZW50OiAnXFwwMEEwIFxcMjAxNCc7XG59XG5cbmFkZHJlc3Mge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbn1cblxuY29kZSxcbmtiZCxcbnByZSxcbnNhbXAge1xuICBmb250LWZhbWlseTogTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xufVxuXG5jb2RlIHtcbiAgcGFkZGluZzogMnB4IDRweDtcbiAgZm9udC1zaXplOiA5MCU7XG4gIGNvbG9yOiAjYzcyNTRlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmMmY0O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbmtiZCB7XG4gIHBhZGRpbmc6IDJweCA0cHg7XG4gIGZvbnQtc2l6ZTogOTAlO1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMztcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xufVxuXG5rYmQga2JkIHtcbiAgcGFkZGluZzogMDtcbiAgZm9udC1zaXplOiAxMDAlO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cblxucHJlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDkuNXB4O1xuICBtYXJnaW46IDAgMCAxMHB4O1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbiAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIGNvbG9yOiAjMjIyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbnByZSBjb2RlIHtcbiAgcGFkZGluZzogMDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBjb2xvcjogaW5oZXJpdDtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLnByZS1zY3JvbGxhYmxlIHtcbiAgbWF4LWhlaWdodDogMzQwcHg7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbn1cblxuLmNvbnRhaW5lciB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgcGFkZGluZy1yaWdodDogMDtcbn1cblxuLmNvbnRhaW5lcjpiZWZvcmUsXG4uY29udGFpbmVyOmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4uY29udGFpbmVyOmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAuY29udGFpbmVyIHtcbiAgICB3aWR0aDogOTQwcHg7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAuY29udGFpbmVyIHtcbiAgICB3aWR0aDogMTE0MHB4O1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxNjgwKSB7XG4gIC5jb250YWluZXIge1xuICAgIHdpZHRoOiAxNTQwcHg7XG4gIH1cbn1cblxuLmNvbnRhaW5lci1mbHVpZCB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgcGFkZGluZy1yaWdodDogMDtcbn1cblxuLmNvbnRhaW5lci1mbHVpZDpiZWZvcmUsXG4uY29udGFpbmVyLWZsdWlkOmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4uY29udGFpbmVyLWZsdWlkOmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG5cbi5yb3cge1xuICBtYXJnaW4tbGVmdDogMDtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xufVxuXG4ucm93OmJlZm9yZSxcbi5yb3c6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgZGlzcGxheTogdGFibGU7XG59XG5cbi5yb3c6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuLmNvbC14cy0xLCAuY29sLXNtLTEsIC5jb2wtbWQtMSwgLmNvbC1sZy0xLCAuY29sLXhzLTIsIC5jb2wtc20tMiwgLmNvbC1tZC0yLCAuY29sLWxnLTIsIC5jb2wteHMtMywgLmNvbC1zbS0zLCAuY29sLW1kLTMsIC5jb2wtbGctMywgLmNvbC14cy00LCAuY29sLXNtLTQsIC5jb2wtbWQtNCwgLmNvbC1sZy00LCAuY29sLXhzLTUsIC5jb2wtc20tNSwgLmNvbC1tZC01LCAuY29sLWxnLTUsIC5jb2wteHMtNiwgLmNvbC1zbS02LCAuY29sLW1kLTYsIC5jb2wtbGctNiwgLmNvbC14cy03LCAuY29sLXNtLTcsIC5jb2wtbWQtNywgLmNvbC1sZy03LCAuY29sLXhzLTgsIC5jb2wtc20tOCwgLmNvbC1tZC04LCAuY29sLWxnLTgsIC5jb2wteHMtOSwgLmNvbC1zbS05LCAuY29sLW1kLTksIC5jb2wtbGctOSwgLmNvbC14cy0xMCwgLmNvbC1zbS0xMCwgLmNvbC1tZC0xMCwgLmNvbC1sZy0xMCwgLmNvbC14cy0xMSwgLmNvbC1zbS0xMSwgLmNvbC1tZC0xMSwgLmNvbC1sZy0xMSwgLmNvbC14cy0xMiwgLmNvbC1zbS0xMiwgLmNvbC1tZC0xMiwgLmNvbC1sZy0xMiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLWhlaWdodDogMXB4O1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG59XG5cbi5jb2wteHMtMSwgLmNvbC14cy0yLCAuY29sLXhzLTMsIC5jb2wteHMtNCwgLmNvbC14cy01LCAuY29sLXhzLTYsIC5jb2wteHMtNywgLmNvbC14cy04LCAuY29sLXhzLTksIC5jb2wteHMtMTAsIC5jb2wteHMtMTEsIC5jb2wteHMtMTIge1xuICBmbG9hdDogbGVmdDtcbn1cblxuLmNvbC14cy0xIHtcbiAgd2lkdGg6IDguMzMzMzMzMzMzMyU7XG59XG5cbi5jb2wteHMtMiB7XG4gIHdpZHRoOiAxNi42NjY2NjY2NjY3JTtcbn1cblxuLmNvbC14cy0zIHtcbiAgd2lkdGg6IDI1JTtcbn1cblxuLmNvbC14cy00IHtcbiAgd2lkdGg6IDMzLjMzMzMzMzMzMzMlO1xufVxuXG4uY29sLXhzLTUge1xuICB3aWR0aDogNDEuNjY2NjY2NjY2NyU7XG59XG5cbi5jb2wteHMtNiB7XG4gIHdpZHRoOiA1MCU7XG59XG5cbi5jb2wteHMtNyB7XG4gIHdpZHRoOiA1OC4zMzMzMzMzMzMzJTtcbn1cblxuLmNvbC14cy04IHtcbiAgd2lkdGg6IDY2LjY2NjY2NjY2NjclO1xufVxuXG4uY29sLXhzLTkge1xuICB3aWR0aDogNzUlO1xufVxuXG4uY29sLXhzLTEwIHtcbiAgd2lkdGg6IDgzLjMzMzMzMzMzMzMlO1xufVxuXG4uY29sLXhzLTExIHtcbiAgd2lkdGg6IDkxLjY2NjY2NjY2NjclO1xufVxuXG4uY29sLXhzLTEyIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5jb2wteHMtcHVsbC0wIHtcbiAgcmlnaHQ6IGF1dG87XG59XG5cbi5jb2wteHMtcHVsbC0xIHtcbiAgcmlnaHQ6IDguMzMzMzMzMzMzMyU7XG59XG5cbi5jb2wteHMtcHVsbC0yIHtcbiAgcmlnaHQ6IDE2LjY2NjY2NjY2NjclO1xufVxuXG4uY29sLXhzLXB1bGwtMyB7XG4gIHJpZ2h0OiAyNSU7XG59XG5cbi5jb2wteHMtcHVsbC00IHtcbiAgcmlnaHQ6IDMzLjMzMzMzMzMzMzMlO1xufVxuXG4uY29sLXhzLXB1bGwtNSB7XG4gIHJpZ2h0OiA0MS42NjY2NjY2NjY3JTtcbn1cblxuLmNvbC14cy1wdWxsLTYge1xuICByaWdodDogNTAlO1xufVxuXG4uY29sLXhzLXB1bGwtNyB7XG4gIHJpZ2h0OiA1OC4zMzMzMzMzMzMzJTtcbn1cblxuLmNvbC14cy1wdWxsLTgge1xuICByaWdodDogNjYuNjY2NjY2NjY2NyU7XG59XG5cbi5jb2wteHMtcHVsbC05IHtcbiAgcmlnaHQ6IDc1JTtcbn1cblxuLmNvbC14cy1wdWxsLTEwIHtcbiAgcmlnaHQ6IDgzLjMzMzMzMzMzMzMlO1xufVxuXG4uY29sLXhzLXB1bGwtMTEge1xuICByaWdodDogOTEuNjY2NjY2NjY2NyU7XG59XG5cbi5jb2wteHMtcHVsbC0xMiB7XG4gIHJpZ2h0OiAxMDAlO1xufVxuXG4uY29sLXhzLXB1c2gtMCB7XG4gIGxlZnQ6IGF1dG87XG59XG5cbi5jb2wteHMtcHVzaC0xIHtcbiAgbGVmdDogOC4zMzMzMzMzMzMzJTtcbn1cblxuLmNvbC14cy1wdXNoLTIge1xuICBsZWZ0OiAxNi42NjY2NjY2NjY3JTtcbn1cblxuLmNvbC14cy1wdXNoLTMge1xuICBsZWZ0OiAyNSU7XG59XG5cbi5jb2wteHMtcHVzaC00IHtcbiAgbGVmdDogMzMuMzMzMzMzMzMzMyU7XG59XG5cbi5jb2wteHMtcHVzaC01IHtcbiAgbGVmdDogNDEuNjY2NjY2NjY2NyU7XG59XG5cbi5jb2wteHMtcHVzaC02IHtcbiAgbGVmdDogNTAlO1xufVxuXG4uY29sLXhzLXB1c2gtNyB7XG4gIGxlZnQ6IDU4LjMzMzMzMzMzMzMlO1xufVxuXG4uY29sLXhzLXB1c2gtOCB7XG4gIGxlZnQ6IDY2LjY2NjY2NjY2NjclO1xufVxuXG4uY29sLXhzLXB1c2gtOSB7XG4gIGxlZnQ6IDc1JTtcbn1cblxuLmNvbC14cy1wdXNoLTEwIHtcbiAgbGVmdDogODMuMzMzMzMzMzMzMyU7XG59XG5cbi5jb2wteHMtcHVzaC0xMSB7XG4gIGxlZnQ6IDkxLjY2NjY2NjY2NjclO1xufVxuXG4uY29sLXhzLXB1c2gtMTIge1xuICBsZWZ0OiAxMDAlO1xufVxuXG4uY29sLXhzLW9mZnNldC0wIHtcbiAgbWFyZ2luLWxlZnQ6IDAlO1xufVxuXG4uY29sLXhzLW9mZnNldC0xIHtcbiAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMyU7XG59XG5cbi5jb2wteHMtb2Zmc2V0LTIge1xuICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NyU7XG59XG5cbi5jb2wteHMtb2Zmc2V0LTMge1xuICBtYXJnaW4tbGVmdDogMjUlO1xufVxuXG4uY29sLXhzLW9mZnNldC00IHtcbiAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xufVxuXG4uY29sLXhzLW9mZnNldC01IHtcbiAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjclO1xufVxuXG4uY29sLXhzLW9mZnNldC02IHtcbiAgbWFyZ2luLWxlZnQ6IDUwJTtcbn1cblxuLmNvbC14cy1vZmZzZXQtNyB7XG4gIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzJTtcbn1cblxuLmNvbC14cy1vZmZzZXQtOCB7XG4gIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NjY3JTtcbn1cblxuLmNvbC14cy1vZmZzZXQtOSB7XG4gIG1hcmdpbi1sZWZ0OiA3NSU7XG59XG5cbi5jb2wteHMtb2Zmc2V0LTEwIHtcbiAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xufVxuXG4uY29sLXhzLW9mZnNldC0xMSB7XG4gIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY3JTtcbn1cblxuLmNvbC14cy1vZmZzZXQtMTIge1xuICBtYXJnaW4tbGVmdDogMTAwJTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5jb2wtc20tMSwgLmNvbC1zbS0yLCAuY29sLXNtLTMsIC5jb2wtc20tNCwgLmNvbC1zbS01LCAuY29sLXNtLTYsIC5jb2wtc20tNywgLmNvbC1zbS04LCAuY29sLXNtLTksIC5jb2wtc20tMTAsIC5jb2wtc20tMTEsIC5jb2wtc20tMTIge1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG4gIC5jb2wtc20tMSB7XG4gICAgd2lkdGg6IDguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS0yIHtcbiAgICB3aWR0aDogMTYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS0zIHtcbiAgICB3aWR0aDogMjUlO1xuICB9XG4gIC5jb2wtc20tNCB7XG4gICAgd2lkdGg6IDMzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tNSB7XG4gICAgd2lkdGg6IDQxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tNiB7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxuICAuY29sLXNtLTcge1xuICAgIHdpZHRoOiA1OC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLTgge1xuICAgIHdpZHRoOiA2Ni42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLTkge1xuICAgIHdpZHRoOiA3NSU7XG4gIH1cbiAgLmNvbC1zbS0xMCB7XG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tMTEge1xuICAgIHdpZHRoOiA5MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLTEyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAuY29sLXNtLXB1bGwtMCB7XG4gICAgcmlnaHQ6IGF1dG87XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTEge1xuICAgIHJpZ2h0OiA4LjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tcHVsbC0yIHtcbiAgICByaWdodDogMTYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTMge1xuICAgIHJpZ2h0OiAyNSU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTQge1xuICAgIHJpZ2h0OiAzMy4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLXB1bGwtNSB7XG4gICAgcmlnaHQ6IDQxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tcHVsbC02IHtcbiAgICByaWdodDogNTAlO1xuICB9XG4gIC5jb2wtc20tcHVsbC03IHtcbiAgICByaWdodDogNTguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTgge1xuICAgIHJpZ2h0OiA2Ni42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLXB1bGwtOSB7XG4gICAgcmlnaHQ6IDc1JTtcbiAgfVxuICAuY29sLXNtLXB1bGwtMTAge1xuICAgIHJpZ2h0OiA4My4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLXB1bGwtMTEge1xuICAgIHJpZ2h0OiA5MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLXB1bGwtMTIge1xuICAgIHJpZ2h0OiAxMDAlO1xuICB9XG4gIC5jb2wtc20tcHVzaC0wIHtcbiAgICBsZWZ0OiBhdXRvO1xuICB9XG4gIC5jb2wtc20tcHVzaC0xIHtcbiAgICBsZWZ0OiA4LjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tcHVzaC0yIHtcbiAgICBsZWZ0OiAxNi42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLXB1c2gtMyB7XG4gICAgbGVmdDogMjUlO1xuICB9XG4gIC5jb2wtc20tcHVzaC00IHtcbiAgICBsZWZ0OiAzMy4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLXB1c2gtNSB7XG4gICAgbGVmdDogNDEuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTYge1xuICAgIGxlZnQ6IDUwJTtcbiAgfVxuICAuY29sLXNtLXB1c2gtNyB7XG4gICAgbGVmdDogNTguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTgge1xuICAgIGxlZnQ6IDY2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tcHVzaC05IHtcbiAgICBsZWZ0OiA3NSU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTEwIHtcbiAgICBsZWZ0OiA4My4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLXB1c2gtMTEge1xuICAgIGxlZnQ6IDkxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tcHVzaC0xMiB7XG4gICAgbGVmdDogMTAwJTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC0wIHtcbiAgICBtYXJnaW4tbGVmdDogMCU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtMSB7XG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtMiB7XG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTMge1xuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtNCB7XG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTUge1xuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC02IHtcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTcge1xuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC04IHtcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtOSB7XG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC0xMCB7XG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTExIHtcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtMTIge1xuICAgIG1hcmdpbi1sZWZ0OiAxMDAlO1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLmNvbC1tZC0xLCAuY29sLW1kLTIsIC5jb2wtbWQtMywgLmNvbC1tZC00LCAuY29sLW1kLTUsIC5jb2wtbWQtNiwgLmNvbC1tZC03LCAuY29sLW1kLTgsIC5jb2wtbWQtOSwgLmNvbC1tZC0xMCwgLmNvbC1tZC0xMSwgLmNvbC1tZC0xMiB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbiAgLmNvbC1tZC0xIHtcbiAgICB3aWR0aDogOC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLTIge1xuICAgIHdpZHRoOiAxNi42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLTMge1xuICAgIHdpZHRoOiAyNSU7XG4gIH1cbiAgLmNvbC1tZC00IHtcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC01IHtcbiAgICB3aWR0aDogNDEuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC02IHtcbiAgICB3aWR0aDogNTAlO1xuICB9XG4gIC5jb2wtbWQtNyB7XG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtOCB7XG4gICAgd2lkdGg6IDY2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtOSB7XG4gICAgd2lkdGg6IDc1JTtcbiAgfVxuICAuY29sLW1kLTEwIHtcbiAgICB3aWR0aDogODMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC0xMSB7XG4gICAgd2lkdGg6IDkxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtMTIge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb2wtbWQtcHVsbC0wIHtcbiAgICByaWdodDogYXV0bztcbiAgfVxuICAuY29sLW1kLXB1bGwtMSB7XG4gICAgcmlnaHQ6IDguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTIge1xuICAgIHJpZ2h0OiAxNi42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLXB1bGwtMyB7XG4gICAgcmlnaHQ6IDI1JTtcbiAgfVxuICAuY29sLW1kLXB1bGwtNCB7XG4gICAgcmlnaHQ6IDMzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtcHVsbC01IHtcbiAgICByaWdodDogNDEuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTYge1xuICAgIHJpZ2h0OiA1MCU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTcge1xuICAgIHJpZ2h0OiA1OC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLXB1bGwtOCB7XG4gICAgcmlnaHQ6IDY2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtcHVsbC05IHtcbiAgICByaWdodDogNzUlO1xuICB9XG4gIC5jb2wtbWQtcHVsbC0xMCB7XG4gICAgcmlnaHQ6IDgzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtcHVsbC0xMSB7XG4gICAgcmlnaHQ6IDkxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtcHVsbC0xMiB7XG4gICAgcmlnaHQ6IDEwMCU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTAge1xuICAgIGxlZnQ6IGF1dG87XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTEge1xuICAgIGxlZnQ6IDguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTIge1xuICAgIGxlZnQ6IDE2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtcHVzaC0zIHtcbiAgICBsZWZ0OiAyNSU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTQge1xuICAgIGxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtcHVzaC01IHtcbiAgICBsZWZ0OiA0MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLXB1c2gtNiB7XG4gICAgbGVmdDogNTAlO1xuICB9XG4gIC5jb2wtbWQtcHVzaC03IHtcbiAgICBsZWZ0OiA1OC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLXB1c2gtOCB7XG4gICAgbGVmdDogNjYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTkge1xuICAgIGxlZnQ6IDc1JTtcbiAgfVxuICAuY29sLW1kLXB1c2gtMTAge1xuICAgIGxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtcHVzaC0xMSB7XG4gICAgbGVmdDogOTEuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTEyIHtcbiAgICBsZWZ0OiAxMDAlO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTAge1xuICAgIG1hcmdpbi1sZWZ0OiAwJTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC0xIHtcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC0yIHtcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtMyB7XG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC00IHtcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtNSB7XG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTYge1xuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtNyB7XG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTgge1xuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC05IHtcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTEwIHtcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtMTEge1xuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC0xMiB7XG4gICAgbWFyZ2luLWxlZnQ6IDEwMCU7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDE2ODApIHtcbiAgLmNvbC1sZy0xLCAuY29sLWxnLTIsIC5jb2wtbGctMywgLmNvbC1sZy00LCAuY29sLWxnLTUsIC5jb2wtbGctNiwgLmNvbC1sZy03LCAuY29sLWxnLTgsIC5jb2wtbGctOSwgLmNvbC1sZy0xMCwgLmNvbC1sZy0xMSwgLmNvbC1sZy0xMiB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbiAgLmNvbC1sZy0xIHtcbiAgICB3aWR0aDogOC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLTIge1xuICAgIHdpZHRoOiAxNi42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLTMge1xuICAgIHdpZHRoOiAyNSU7XG4gIH1cbiAgLmNvbC1sZy00IHtcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy01IHtcbiAgICB3aWR0aDogNDEuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy02IHtcbiAgICB3aWR0aDogNTAlO1xuICB9XG4gIC5jb2wtbGctNyB7XG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctOCB7XG4gICAgd2lkdGg6IDY2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctOSB7XG4gICAgd2lkdGg6IDc1JTtcbiAgfVxuICAuY29sLWxnLTEwIHtcbiAgICB3aWR0aDogODMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy0xMSB7XG4gICAgd2lkdGg6IDkxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctMTIge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb2wtbGctcHVsbC0wIHtcbiAgICByaWdodDogYXV0bztcbiAgfVxuICAuY29sLWxnLXB1bGwtMSB7XG4gICAgcmlnaHQ6IDguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTIge1xuICAgIHJpZ2h0OiAxNi42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLXB1bGwtMyB7XG4gICAgcmlnaHQ6IDI1JTtcbiAgfVxuICAuY29sLWxnLXB1bGwtNCB7XG4gICAgcmlnaHQ6IDMzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctcHVsbC01IHtcbiAgICByaWdodDogNDEuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTYge1xuICAgIHJpZ2h0OiA1MCU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTcge1xuICAgIHJpZ2h0OiA1OC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLXB1bGwtOCB7XG4gICAgcmlnaHQ6IDY2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctcHVsbC05IHtcbiAgICByaWdodDogNzUlO1xuICB9XG4gIC5jb2wtbGctcHVsbC0xMCB7XG4gICAgcmlnaHQ6IDgzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctcHVsbC0xMSB7XG4gICAgcmlnaHQ6IDkxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctcHVsbC0xMiB7XG4gICAgcmlnaHQ6IDEwMCU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTAge1xuICAgIGxlZnQ6IGF1dG87XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTEge1xuICAgIGxlZnQ6IDguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTIge1xuICAgIGxlZnQ6IDE2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctcHVzaC0zIHtcbiAgICBsZWZ0OiAyNSU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTQge1xuICAgIGxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctcHVzaC01IHtcbiAgICBsZWZ0OiA0MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLXB1c2gtNiB7XG4gICAgbGVmdDogNTAlO1xuICB9XG4gIC5jb2wtbGctcHVzaC03IHtcbiAgICBsZWZ0OiA1OC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLXB1c2gtOCB7XG4gICAgbGVmdDogNjYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTkge1xuICAgIGxlZnQ6IDc1JTtcbiAgfVxuICAuY29sLWxnLXB1c2gtMTAge1xuICAgIGxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctcHVzaC0xMSB7XG4gICAgbGVmdDogOTEuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTEyIHtcbiAgICBsZWZ0OiAxMDAlO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTAge1xuICAgIG1hcmdpbi1sZWZ0OiAwJTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC0xIHtcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC0yIHtcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtMyB7XG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC00IHtcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtNSB7XG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTYge1xuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtNyB7XG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTgge1xuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC05IHtcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTEwIHtcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtMTEge1xuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC0xMiB7XG4gICAgbWFyZ2luLWxlZnQ6IDEwMCU7XG4gIH1cbn1cblxudGFibGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuY2FwdGlvbiB7XG4gIHBhZGRpbmctdG9wOiA4cHg7XG4gIHBhZGRpbmctYm90dG9tOiA4cHg7XG4gIGNvbG9yOiAjOTk5O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG50aCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi50YWJsZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aCxcbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZCxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0aCxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZCxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aCxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0ZCB7XG4gIHBhZGRpbmc6IDhweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbn1cblxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoIHtcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNkZGQ7XG59XG5cbi50YWJsZSA+IGNhcHRpb24gKyB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsXG4udGFibGUgPiBjYXB0aW9uICsgdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkLFxuLnRhYmxlID4gY29sZ3JvdXAgKyB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsXG4udGFibGUgPiBjb2xncm91cCArIHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCxcbi50YWJsZSA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbi50YWJsZSA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCB7XG4gIGJvcmRlci10b3A6IDA7XG59XG5cbi50YWJsZSA+IHRib2R5ICsgdGJvZHkge1xuICBib3JkZXItdG9wOiAycHggc29saWQgI2RkZDtcbn1cblxuLnRhYmxlIC50YWJsZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cbi50YWJsZS1jb25kZW5zZWQgPiB0aGVhZCA+IHRyID4gdGgsXG4udGFibGUtY29uZGVuc2VkID4gdGhlYWQgPiB0ciA+IHRkLFxuLnRhYmxlLWNvbmRlbnNlZCA+IHRib2R5ID4gdHIgPiB0aCxcbi50YWJsZS1jb25kZW5zZWQgPiB0Ym9keSA+IHRyID4gdGQsXG4udGFibGUtY29uZGVuc2VkID4gdGZvb3QgPiB0ciA+IHRoLFxuLnRhYmxlLWNvbmRlbnNlZCA+IHRmb290ID4gdHIgPiB0ZCB7XG4gIHBhZGRpbmc6IDVweDtcbn1cblxuLnRhYmxlLWJvcmRlcmVkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbn1cblxuLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoLFxuLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkLFxuLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoLFxuLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRkLFxuLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRoLFxuLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbn1cblxuLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoLFxuLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkIHtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMnB4O1xufVxuXG4udGFibGUtc3RyaXBlZCA+IHRib2R5ID4gdHI6bnRoLW9mLXR5cGUob2RkKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7XG59XG5cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xufVxuXG50YWJsZSBjb2xbY2xhc3MqPVwiY29sLVwiXSB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIGZsb2F0OiBub25lO1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW47XG59XG5cbnRhYmxlIHRkW2NsYXNzKj1cImNvbC1cIl0sXG50YWJsZSB0aFtjbGFzcyo9XCJjb2wtXCJdIHtcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgZmxvYXQ6IG5vbmU7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG59XG5cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5hY3RpdmUsXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGguYWN0aXZlLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5hY3RpdmUgPiB0ZCxcbi50YWJsZSA+IHRoZWFkID4gdHIuYWN0aXZlID4gdGgsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGQuYWN0aXZlLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLmFjdGl2ZSxcbi50YWJsZSA+IHRib2R5ID4gdHIuYWN0aXZlID4gdGQsXG4udGFibGUgPiB0Ym9keSA+IHRyLmFjdGl2ZSA+IHRoLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLmFjdGl2ZSxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5hY3RpdmUsXG4udGFibGUgPiB0Zm9vdCA+IHRyLmFjdGl2ZSA+IHRkLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5hY3RpdmUgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG59XG5cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC5hY3RpdmU6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGguYWN0aXZlOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5hY3RpdmU6aG92ZXIgPiB0ZCxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAuYWN0aXZlLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5hY3RpdmU6aG92ZXIgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlOGU4ZTg7XG59XG5cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5zdWNjZXNzLFxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLnN1Y2Nlc3MsXG4udGFibGUgPiB0aGVhZCA+IHRyLnN1Y2Nlc3MgPiB0ZCxcbi50YWJsZSA+IHRoZWFkID4gdHIuc3VjY2VzcyA+IHRoLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLnN1Y2Nlc3MsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGguc3VjY2Vzcyxcbi50YWJsZSA+IHRib2R5ID4gdHIuc3VjY2VzcyA+IHRkLFxuLnRhYmxlID4gdGJvZHkgPiB0ci5zdWNjZXNzID4gdGgsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGQuc3VjY2Vzcyxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5zdWNjZXNzLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5zdWNjZXNzID4gdGQsXG4udGFibGUgPiB0Zm9vdCA+IHRyLnN1Y2Nlc3MgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkYWU2Y2I7XG59XG5cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC5zdWNjZXNzOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRoLnN1Y2Nlc3M6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLnN1Y2Nlc3M6aG92ZXIgPiB0ZCxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAuc3VjY2Vzcyxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuc3VjY2Vzczpob3ZlciA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NlZGViYTtcbn1cblxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRkLmluZm8sXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGguaW5mbyxcbi50YWJsZSA+IHRoZWFkID4gdHIuaW5mbyA+IHRkLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5pbmZvID4gdGgsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGQuaW5mbyxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0aC5pbmZvLFxuLnRhYmxlID4gdGJvZHkgPiB0ci5pbmZvID4gdGQsXG4udGFibGUgPiB0Ym9keSA+IHRyLmluZm8gPiB0aCxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0ZC5pbmZvLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRoLmluZm8sXG4udGFibGUgPiB0Zm9vdCA+IHRyLmluZm8gPiB0ZCxcbi50YWJsZSA+IHRmb290ID4gdHIuaW5mbyA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5ZWRmNztcbn1cblxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRkLmluZm86aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGguaW5mbzpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuaW5mbzpob3ZlciA+IHRkLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciA+IC5pbmZvLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5pbmZvOmhvdmVyID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzRlM2YzO1xufVxuXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGQud2FybmluZyxcbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aC53YXJuaW5nLFxuLnRhYmxlID4gdGhlYWQgPiB0ci53YXJuaW5nID4gdGQsXG4udGFibGUgPiB0aGVhZCA+IHRyLndhcm5pbmcgPiB0aCxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZC53YXJuaW5nLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLndhcm5pbmcsXG4udGFibGUgPiB0Ym9keSA+IHRyLndhcm5pbmcgPiB0ZCxcbi50YWJsZSA+IHRib2R5ID4gdHIud2FybmluZyA+IHRoLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLndhcm5pbmcsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGgud2FybmluZyxcbi50YWJsZSA+IHRmb290ID4gdHIud2FybmluZyA+IHRkLFxuLnRhYmxlID4gdGZvb3QgPiB0ci53YXJuaW5nID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFlM2MyO1xufVxuXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGQud2FybmluZzpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0aC53YXJuaW5nOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci53YXJuaW5nOmhvdmVyID4gdGQsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyOmhvdmVyID4gLndhcm5pbmcsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLndhcm5pbmc6aG92ZXIgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2Q5YWQ7XG59XG5cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5kYW5nZXIsXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGguZGFuZ2VyLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5kYW5nZXIgPiB0ZCxcbi50YWJsZSA+IHRoZWFkID4gdHIuZGFuZ2VyID4gdGgsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGQuZGFuZ2VyLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLmRhbmdlcixcbi50YWJsZSA+IHRib2R5ID4gdHIuZGFuZ2VyID4gdGQsXG4udGFibGUgPiB0Ym9keSA+IHRyLmRhbmdlciA+IHRoLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLmRhbmdlcixcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5kYW5nZXIsXG4udGFibGUgPiB0Zm9vdCA+IHRyLmRhbmdlciA+IHRkLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5kYW5nZXIgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlYWMzYzc7XG59XG5cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC5kYW5nZXI6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGguZGFuZ2VyOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5kYW5nZXI6aG92ZXIgPiB0ZCxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAuZGFuZ2VyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5kYW5nZXI6aG92ZXIgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlM2IwYjU7XG59XG5cbi50YWJsZS1yZXNwb25zaXZlIHtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgbWluLWhlaWdodDogMC4wMSU7XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC50YWJsZS1yZXNwb25zaXZlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IC1tcy1hdXRvaGlkaW5nLXNjcm9sbGJhcjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICB9XG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgPiB0Ym9keSA+IHRyID4gdGgsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSA+IHRmb290ID4gdHIgPiB0aCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgPiB0Zm9vdCA+IHRyID4gdGQge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQge1xuICAgIGJvcmRlcjogMDtcbiAgfVxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkOmZpcnN0LWNoaWxkIHtcbiAgICBib3JkZXItbGVmdDogMDtcbiAgfVxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZDpsYXN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZDpsYXN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0ZDpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gIH1cbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmxhc3QtY2hpbGQgPiB0aCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmxhc3QtY2hpbGQgPiB0ZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyOmxhc3QtY2hpbGQgPiB0aCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyOmxhc3QtY2hpbGQgPiB0ZCB7XG4gICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgfVxufVxuXG5maWVsZHNldCB7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgYm9yZGVyOiAwO1xuICBtaW4td2lkdGg6IDA7XG59XG5cbmxlZ2VuZCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgZm9udC1zaXplOiAyMXB4O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgY29sb3I6ICMyMjI7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNWU1ZTU7XG59XG5cbmxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgbWFyZ2luOiA0cHggMCAwO1xuICBtYXJnaW4tdG9wOiAxcHggXFw5O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xufVxuXG5pbnB1dFt0eXBlPVwiZmlsZVwiXSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG5pbnB1dFt0eXBlPVwicmFuZ2VcIl0ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG59XG5cbnNlbGVjdFttdWx0aXBsZV0sXG5zZWxlY3Rbc2l6ZV0ge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbmlucHV0W3R5cGU9XCJmaWxlXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmZvY3VzIHtcbiAgb3V0bGluZTogdGhpbiBkb3R0ZWQ7XG4gIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XG59XG5cbm91dHB1dCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nLXRvcDogN3B4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbiAgY29sb3I6ICM0NDQ7XG59XG5cbi5mb3JtLWNvbnRyb2wge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMzRweDtcbiAgcGFkZGluZzogNnB4IDEycHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICBjb2xvcjogIzQ0NDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xuICAtd2Via2l0LXRyYW5zaXRpb246IGJvcmRlci1jb2xvciBlYXNlLWluLW91dCAwLjE1cywgYm94LXNoYWRvdyBlYXNlLWluLW91dCAwLjE1cztcbiAgLW8tdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIGVhc2UtaW4tb3V0IDAuMTVzLCBib3gtc2hhZG93IGVhc2UtaW4tb3V0IDAuMTVzO1xuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgMC4xNXMsIGJveC1zaGFkb3cgZWFzZS1pbi1vdXQgMC4xNXM7XG59XG5cbi5mb3JtLWNvbnRyb2w6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICM2NmFmZTk7XG4gIG91dGxpbmU6IDA7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgOHB4IHJnYmEoMTAyLCAxNzUsIDIzMywgMC42KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgOHB4IHJnYmEoMTAyLCAxNzUsIDIzMywgMC42KTtcbn1cblxuLmZvcm0tY29udHJvbDo6LW1vei1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjOTk5O1xuICBvcGFjaXR5OiAxO1xufVxuXG4uZm9ybS1jb250cm9sOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjOTk5O1xufVxuXG4uZm9ybS1jb250cm9sOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6ICM5OTk7XG59XG5cbi5mb3JtLWNvbnRyb2xbZGlzYWJsZWRdLFxuLmZvcm0tY29udHJvbFtyZWFkb25seV0sXG5maWVsZHNldFtkaXNhYmxlZF0gLmZvcm0tY29udHJvbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIG9wYWNpdHk6IDE7XG59XG5cbi5mb3JtLWNvbnRyb2xbZGlzYWJsZWRdLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5mb3JtLWNvbnRyb2wge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG50ZXh0YXJlYS5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDApIHtcbiAgaW5wdXRbdHlwZT1cImRhdGVcIl0uZm9ybS1jb250cm9sLFxuICBpbnB1dFt0eXBlPVwidGltZVwiXS5mb3JtLWNvbnRyb2wsXG4gIGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXS5mb3JtLWNvbnRyb2wsXG4gIGlucHV0W3R5cGU9XCJtb250aFwiXS5mb3JtLWNvbnRyb2wge1xuICAgIGxpbmUtaGVpZ2h0OiAzNHB4O1xuICB9XG4gIGlucHV0W3R5cGU9XCJkYXRlXCJdLmlucHV0LXNtLFxuICAuaW5wdXQtZ3JvdXAtc20gPiBpbnB1dFt0eXBlPVwiZGF0ZVwiXS5mb3JtLWNvbnRyb2wsXG4gIC5pbnB1dC1ncm91cC1zbSA+IGlucHV0W3R5cGU9XCJkYXRlXCJdLmlucHV0LWdyb3VwLWFkZG9uLFxuICAuaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gaW5wdXRbdHlwZT1cImRhdGVcIl0uYnRuLFxuICAuaW5wdXQtZ3JvdXAtc20gaW5wdXRbdHlwZT1cImRhdGVcIl0sXG4gIGlucHV0W3R5cGU9XCJ0aW1lXCJdLmlucHV0LXNtLFxuICAuaW5wdXQtZ3JvdXAtc20gPiBpbnB1dFt0eXBlPVwidGltZVwiXS5mb3JtLWNvbnRyb2wsXG4gIC5pbnB1dC1ncm91cC1zbSA+IGlucHV0W3R5cGU9XCJ0aW1lXCJdLmlucHV0LWdyb3VwLWFkZG9uLFxuICAuaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gaW5wdXRbdHlwZT1cInRpbWVcIl0uYnRuLFxuICAuaW5wdXQtZ3JvdXAtc20gaW5wdXRbdHlwZT1cInRpbWVcIl0sXG4gIGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXS5pbnB1dC1zbSxcbiAgLmlucHV0LWdyb3VwLXNtID4gaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLmZvcm0tY29udHJvbCxcbiAgLmlucHV0LWdyb3VwLXNtID4gaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLmlucHV0LWdyb3VwLWFkZG9uLFxuICAuaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLmJ0bixcbiAgLmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXSxcbiAgaW5wdXRbdHlwZT1cIm1vbnRoXCJdLmlucHV0LXNtLFxuICAuaW5wdXQtZ3JvdXAtc20gPiBpbnB1dFt0eXBlPVwibW9udGhcIl0uZm9ybS1jb250cm9sLFxuICAuaW5wdXQtZ3JvdXAtc20gPiBpbnB1dFt0eXBlPVwibW9udGhcIl0uaW5wdXQtZ3JvdXAtYWRkb24sXG4gIC5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiBpbnB1dFt0eXBlPVwibW9udGhcIl0uYnRuLFxuICAuaW5wdXQtZ3JvdXAtc20gaW5wdXRbdHlwZT1cIm1vbnRoXCJdIHtcbiAgICBsaW5lLWhlaWdodDogMzBweDtcbiAgfVxuICBpbnB1dFt0eXBlPVwiZGF0ZVwiXS5pbnB1dC1sZyxcbiAgLmlucHV0LWdyb3VwLWxnID4gaW5wdXRbdHlwZT1cImRhdGVcIl0uZm9ybS1jb250cm9sLFxuICAuaW5wdXQtZ3JvdXAtbGcgPiBpbnB1dFt0eXBlPVwiZGF0ZVwiXS5pbnB1dC1ncm91cC1hZGRvbixcbiAgLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IGlucHV0W3R5cGU9XCJkYXRlXCJdLmJ0bixcbiAgLmlucHV0LWdyb3VwLWxnIGlucHV0W3R5cGU9XCJkYXRlXCJdLFxuICBpbnB1dFt0eXBlPVwidGltZVwiXS5pbnB1dC1sZyxcbiAgLmlucHV0LWdyb3VwLWxnID4gaW5wdXRbdHlwZT1cInRpbWVcIl0uZm9ybS1jb250cm9sLFxuICAuaW5wdXQtZ3JvdXAtbGcgPiBpbnB1dFt0eXBlPVwidGltZVwiXS5pbnB1dC1ncm91cC1hZGRvbixcbiAgLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IGlucHV0W3R5cGU9XCJ0aW1lXCJdLmJ0bixcbiAgLmlucHV0LWdyb3VwLWxnIGlucHV0W3R5cGU9XCJ0aW1lXCJdLFxuICBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0uaW5wdXQtbGcsXG4gIC5pbnB1dC1ncm91cC1sZyA+IGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXS5mb3JtLWNvbnRyb2wsXG4gIC5pbnB1dC1ncm91cC1sZyA+IGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXS5pbnB1dC1ncm91cC1hZGRvbixcbiAgLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXS5idG4sXG4gIC5pbnB1dC1ncm91cC1sZyBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG4gIGlucHV0W3R5cGU9XCJtb250aFwiXS5pbnB1dC1sZyxcbiAgLmlucHV0LWdyb3VwLWxnID4gaW5wdXRbdHlwZT1cIm1vbnRoXCJdLmZvcm0tY29udHJvbCxcbiAgLmlucHV0LWdyb3VwLWxnID4gaW5wdXRbdHlwZT1cIm1vbnRoXCJdLmlucHV0LWdyb3VwLWFkZG9uLFxuICAuaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gaW5wdXRbdHlwZT1cIm1vbnRoXCJdLmJ0bixcbiAgLmlucHV0LWdyb3VwLWxnIGlucHV0W3R5cGU9XCJtb250aFwiXSB7XG4gICAgbGluZS1oZWlnaHQ6IDQ2cHg7XG4gIH1cbn1cblxuLmZvcm0tZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG4ucmFkaW8sXG4uY2hlY2tib3gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4ucmFkaW8gbGFiZWwsXG4uY2hlY2tib3ggbGFiZWwge1xuICBtaW4taGVpZ2h0OiAyMHB4O1xuICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnJhZGlvIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbi5yYWRpby1pbmxpbmUgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5jaGVja2JveC1pbmxpbmUgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW4tbGVmdDogLTIwcHg7XG4gIG1hcmdpbi10b3A6IDRweCBcXDk7XG59XG5cbi5yYWRpbyArIC5yYWRpbyxcbi5jaGVja2JveCArIC5jaGVja2JveCB7XG4gIG1hcmdpbi10b3A6IC01cHg7XG59XG5cbi5yYWRpby1pbmxpbmUsXG4uY2hlY2tib3gtaW5saW5lIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmctbGVmdDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ucmFkaW8taW5saW5lICsgLnJhZGlvLWlubGluZSxcbi5jaGVja2JveC1pbmxpbmUgKyAuY2hlY2tib3gtaW5saW5lIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XG59XG5cbmlucHV0W3R5cGU9XCJyYWRpb1wiXVtkaXNhYmxlZF0sXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0uZGlzYWJsZWQsXG5maWVsZHNldFtkaXNhYmxlZF0gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdW2Rpc2FibGVkXSxcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5kaXNhYmxlZCxcbmZpZWxkc2V0W2Rpc2FibGVkXSBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4ucmFkaW8taW5saW5lLmRpc2FibGVkLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5yYWRpby1pbmxpbmUsXG4uY2hlY2tib3gtaW5saW5lLmRpc2FibGVkLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5jaGVja2JveC1pbmxpbmUge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4ucmFkaW8uZGlzYWJsZWQgbGFiZWwsXG5maWVsZHNldFtkaXNhYmxlZF0gLnJhZGlvIGxhYmVsLFxuLmNoZWNrYm94LmRpc2FibGVkIGxhYmVsLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5jaGVja2JveCBsYWJlbCB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5mb3JtLWNvbnRyb2wtc3RhdGljIHtcbiAgcGFkZGluZy10b3A6IDdweDtcbiAgcGFkZGluZy1ib3R0b206IDdweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbWluLWhlaWdodDogMzRweDtcbn1cblxuLmZvcm0tY29udHJvbC1zdGF0aWMuaW5wdXQtbGcsXG4uaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLXN0YXRpYy5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLXN0YXRpYy5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiAuZm9ybS1jb250cm9sLXN0YXRpYy5idG4sXG4uZm9ybS1jb250cm9sLXN0YXRpYy5pbnB1dC1zbSwgLmlucHV0LWdyb3VwLXNtID4gLmZvcm0tY29udHJvbC1zdGF0aWMuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLXNtID4gLmZvcm0tY29udHJvbC1zdGF0aWMuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmZvcm0tY29udHJvbC1zdGF0aWMuYnRuIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuXG4uaW5wdXQtc20sIC5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biB7XG4gIGhlaWdodDogMzBweDtcbiAgcGFkZGluZzogNXB4IDEwcHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG5zZWxlY3QuaW5wdXQtc20sIC5pbnB1dC1ncm91cC1zbSA+IHNlbGVjdC5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtc20gPiBzZWxlY3QuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gc2VsZWN0LmJ0biB7XG4gIGhlaWdodDogMzBweDtcbiAgbGluZS1oZWlnaHQ6IDMwcHg7XG59XG5cbnRleHRhcmVhLmlucHV0LXNtLFxuLmlucHV0LWdyb3VwLXNtID4gdGV4dGFyZWEuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLXNtID4gdGV4dGFyZWEuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gdGV4dGFyZWEuYnRuLFxuc2VsZWN0W211bHRpcGxlXS5pbnB1dC1zbSwgLmlucHV0LWdyb3VwLXNtID4gc2VsZWN0W211bHRpcGxlXS5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtc20gPiBzZWxlY3RbbXVsdGlwbGVdLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IHNlbGVjdFttdWx0aXBsZV0uYnRuIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuXG4uZm9ybS1ncm91cC1zbSAuZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICBwYWRkaW5nOiA1cHggMTBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS41O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi5mb3JtLWdyb3VwLXNtIHNlbGVjdC5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IDMwcHg7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xufVxuXG4uZm9ybS1ncm91cC1zbSB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wsXG4uZm9ybS1ncm91cC1zbSBzZWxlY3RbbXVsdGlwbGVdLmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLmZvcm0tZ3JvdXAtc20gLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICBoZWlnaHQ6IDMwcHg7XG4gIG1pbi1oZWlnaHQ6IDMycHg7XG4gIHBhZGRpbmc6IDZweCAxMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG5cbi5pbnB1dC1sZywgLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tY29udHJvbCxcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHtcbiAgaGVpZ2h0OiA0NnB4O1xuICBwYWRkaW5nOiAxMHB4IDE2cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMztcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG5zZWxlY3QuaW5wdXQtbGcsIC5pbnB1dC1ncm91cC1sZyA+IHNlbGVjdC5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtbGcgPiBzZWxlY3QuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gc2VsZWN0LmJ0biB7XG4gIGhlaWdodDogNDZweDtcbiAgbGluZS1oZWlnaHQ6IDQ2cHg7XG59XG5cbnRleHRhcmVhLmlucHV0LWxnLFxuLmlucHV0LWdyb3VwLWxnID4gdGV4dGFyZWEuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLWxnID4gdGV4dGFyZWEuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gdGV4dGFyZWEuYnRuLFxuc2VsZWN0W211bHRpcGxlXS5pbnB1dC1sZywgLmlucHV0LWdyb3VwLWxnID4gc2VsZWN0W211bHRpcGxlXS5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtbGcgPiBzZWxlY3RbbXVsdGlwbGVdLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IHNlbGVjdFttdWx0aXBsZV0uYnRuIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuXG4uZm9ybS1ncm91cC1sZyAuZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiA0NnB4O1xuICBwYWRkaW5nOiAxMHB4IDE2cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMztcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4uZm9ybS1ncm91cC1sZyBzZWxlY3QuZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiA0NnB4O1xuICBsaW5lLWhlaWdodDogNDZweDtcbn1cblxuLmZvcm0tZ3JvdXAtbGcgdGV4dGFyZWEuZm9ybS1jb250cm9sLFxuLmZvcm0tZ3JvdXAtbGcgc2VsZWN0W211bHRpcGxlXS5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi5mb3JtLWdyb3VwLWxnIC5mb3JtLWNvbnRyb2wtc3RhdGljIHtcbiAgaGVpZ2h0OiA0NnB4O1xuICBtaW4taGVpZ2h0OiAzOHB4O1xuICBwYWRkaW5nOiAxMXB4IDE2cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMztcbn1cblxuLmhhcy1mZWVkYmFjayB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sIHtcbiAgcGFkZGluZy1yaWdodDogNDIuNXB4O1xufVxuXG4uZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICB6LWluZGV4OiAyO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDM0cHg7XG4gIGhlaWdodDogMzRweDtcbiAgbGluZS1oZWlnaHQ6IDM0cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5pbnB1dC1sZyArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayxcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1hZGRvbiArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uaW5wdXQtZ3JvdXAtbGcgKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLFxuLmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbCArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB3aWR0aDogNDZweDtcbiAgaGVpZ2h0OiA0NnB4O1xuICBsaW5lLWhlaWdodDogNDZweDtcbn1cblxuLmlucHV0LXNtICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayxcbi5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2wgKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFkZG9uICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayxcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayxcbi5pbnB1dC1ncm91cC1zbSArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uZm9ybS1ncm91cC1zbSAuZm9ybS1jb250cm9sICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHdpZHRoOiAzMHB4O1xuICBoZWlnaHQ6IDMwcHg7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xufVxuXG4uaGFzLXN1Y2Nlc3MgLmhlbHAtYmxvY2ssXG4uaGFzLXN1Y2Nlc3MgLmNvbnRyb2wtbGFiZWwsXG4uaGFzLXN1Y2Nlc3MgLnJhZGlvLFxuLmhhcy1zdWNjZXNzIC5jaGVja2JveCxcbi5oYXMtc3VjY2VzcyAucmFkaW8taW5saW5lLFxuLmhhcy1zdWNjZXNzIC5jaGVja2JveC1pbmxpbmUsXG4uaGFzLXN1Y2Nlc3MucmFkaW8gbGFiZWwsXG4uaGFzLXN1Y2Nlc3MuY2hlY2tib3ggbGFiZWwsXG4uaGFzLXN1Y2Nlc3MucmFkaW8taW5saW5lIGxhYmVsLFxuLmhhcy1zdWNjZXNzLmNoZWNrYm94LWlubGluZSBsYWJlbCB7XG4gIGNvbG9yOiAjNmM2YzZjO1xufVxuXG4uaGFzLXN1Y2Nlc3MgLmZvcm0tY29udHJvbCB7XG4gIGJvcmRlci1jb2xvcjogIzZjNmM2YztcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbn1cblxuLmhhcy1zdWNjZXNzIC5mb3JtLWNvbnRyb2w6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICM1MjUyNTI7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICM5ZjlmOWY7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjOWY5ZjlmO1xufVxuXG4uaGFzLXN1Y2Nlc3MgLmlucHV0LWdyb3VwLWFkZG9uIHtcbiAgY29sb3I6ICM2YzZjNmM7XG4gIGJvcmRlci1jb2xvcjogIzZjNmM2YztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RhZTZjYjtcbn1cblxuLmhhcy1zdWNjZXNzIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICBjb2xvcjogIzZjNmM2Yztcbn1cblxuLmhhcy13YXJuaW5nIC5oZWxwLWJsb2NrLFxuLmhhcy13YXJuaW5nIC5jb250cm9sLWxhYmVsLFxuLmhhcy13YXJuaW5nIC5yYWRpbyxcbi5oYXMtd2FybmluZyAuY2hlY2tib3gsXG4uaGFzLXdhcm5pbmcgLnJhZGlvLWlubGluZSxcbi5oYXMtd2FybmluZyAuY2hlY2tib3gtaW5saW5lLFxuLmhhcy13YXJuaW5nLnJhZGlvIGxhYmVsLFxuLmhhcy13YXJuaW5nLmNoZWNrYm94IGxhYmVsLFxuLmhhcy13YXJuaW5nLnJhZGlvLWlubGluZSBsYWJlbCxcbi5oYXMtd2FybmluZy5jaGVja2JveC1pbmxpbmUgbGFiZWwge1xuICBjb2xvcjogIzZjNmM2Yztcbn1cblxuLmhhcy13YXJuaW5nIC5mb3JtLWNvbnRyb2wge1xuICBib3JkZXItY29sb3I6ICM2YzZjNmM7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG59XG5cbi5oYXMtd2FybmluZyAuZm9ybS1jb250cm9sOmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjNTI1MjUyO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjOWY5ZjlmO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggIzlmOWY5Zjtcbn1cblxuLmhhcy13YXJuaW5nIC5pbnB1dC1ncm91cC1hZGRvbiB7XG4gIGNvbG9yOiAjNmM2YzZjO1xuICBib3JkZXItY29sb3I6ICM2YzZjNmM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMWUzYzI7XG59XG5cbi5oYXMtd2FybmluZyAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgY29sb3I6ICM2YzZjNmM7XG59XG5cbi5oYXMtZXJyb3IgLmhlbHAtYmxvY2ssXG4uaGFzLWVycm9yIC5jb250cm9sLWxhYmVsLFxuLmhhcy1lcnJvciAucmFkaW8sXG4uaGFzLWVycm9yIC5jaGVja2JveCxcbi5oYXMtZXJyb3IgLnJhZGlvLWlubGluZSxcbi5oYXMtZXJyb3IgLmNoZWNrYm94LWlubGluZSxcbi5oYXMtZXJyb3IucmFkaW8gbGFiZWwsXG4uaGFzLWVycm9yLmNoZWNrYm94IGxhYmVsLFxuLmhhcy1lcnJvci5yYWRpby1pbmxpbmUgbGFiZWwsXG4uaGFzLWVycm9yLmNoZWNrYm94LWlubGluZSBsYWJlbCB7XG4gIGNvbG9yOiAjNmM2YzZjO1xufVxuXG4uaGFzLWVycm9yIC5mb3JtLWNvbnRyb2wge1xuICBib3JkZXItY29sb3I6ICM2YzZjNmM7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG59XG5cbi5oYXMtZXJyb3IgLmZvcm0tY29udHJvbDpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogIzUyNTI1MjtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggIzlmOWY5ZjtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICM5ZjlmOWY7XG59XG5cbi5oYXMtZXJyb3IgLmlucHV0LWdyb3VwLWFkZG9uIHtcbiAgY29sb3I6ICM2YzZjNmM7XG4gIGJvcmRlci1jb2xvcjogIzZjNmM2YztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VhYzNjNztcbn1cblxuLmhhcy1lcnJvciAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgY29sb3I6ICM2YzZjNmM7XG59XG5cbi5oYXMtZmVlZGJhY2sgbGFiZWwgfiAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgdG9wOiAyNXB4O1xufVxuXG4uaGFzLWZlZWRiYWNrIGxhYmVsLnNyLW9ubHkgfiAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgdG9wOiAwO1xufVxuXG4uaGVscC1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gIGNvbG9yOiAjNjI2MjYyO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmZvcm0taW5saW5lIC5mb3JtLWdyb3VwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG4gIC5mb3JtLWlubGluZSAuZm9ybS1jb250cm9sIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAuZm9ybS1pbmxpbmUgLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxuICAuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtdGFibGU7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1hZGRvbixcbiAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYnRuLFxuICAuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wge1xuICAgIHdpZHRoOiBhdXRvO1xuICB9XG4gIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAuZm9ybS1pbmxpbmUgLmNvbnRyb2wtbGFiZWwge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAuZm9ybS1pbmxpbmUgLnJhZGlvLFxuICAuZm9ybS1pbmxpbmUgLmNoZWNrYm94IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIH1cbiAgLmZvcm0taW5saW5lIC5yYWRpbyBsYWJlbCxcbiAgLmZvcm0taW5saW5lIC5jaGVja2JveCBsYWJlbCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICB9XG4gIC5mb3JtLWlubGluZSAucmFkaW8gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuICAuZm9ybS1pbmxpbmUgLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICB9XG4gIC5mb3JtLWlubGluZSAuaGFzLWZlZWRiYWNrIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgIHRvcDogMDtcbiAgfVxufVxuXG4uZm9ybS1ob3Jpem9udGFsIC5yYWRpbyxcbi5mb3JtLWhvcml6b250YWwgLmNoZWNrYm94LFxuLmZvcm0taG9yaXpvbnRhbCAucmFkaW8taW5saW5lLFxuLmZvcm0taG9yaXpvbnRhbCAuY2hlY2tib3gtaW5saW5lIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZy10b3A6IDdweDtcbn1cblxuLmZvcm0taG9yaXpvbnRhbCAucmFkaW8sXG4uZm9ybS1ob3Jpem9udGFsIC5jaGVja2JveCB7XG4gIG1pbi1oZWlnaHQ6IDI3cHg7XG59XG5cbi5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXAge1xuICBtYXJnaW4tbGVmdDogMDtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xufVxuXG4uZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwOmJlZm9yZSxcbi5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXA6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgZGlzcGxheTogdGFibGU7XG59XG5cbi5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXA6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtbGFiZWwge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgcGFkZGluZy10b3A6IDdweDtcbiAgfVxufVxuXG4uZm9ybS1ob3Jpem9udGFsIC5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHJpZ2h0OiAwO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cC1sZyAuY29udHJvbC1sYWJlbCB7XG4gICAgcGFkZGluZy10b3A6IDE0LjMzMzMzM3B4O1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cC1zbSAuY29udHJvbC1sYWJlbCB7XG4gICAgcGFkZGluZy10b3A6IDZweDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gIH1cbn1cblxuLmJ0biB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgcGFkZGluZzogNnB4IDEycHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi5idG46Zm9jdXMsXG4uYnRuLmZvY3VzLFxuLmJ0bjphY3RpdmU6Zm9jdXMsXG4uYnRuOmFjdGl2ZS5mb2N1cyxcbi5idG4uYWN0aXZlOmZvY3VzLFxuLmJ0bi5hY3RpdmUuZm9jdXMge1xuICBvdXRsaW5lOiB0aGluIGRvdHRlZDtcbiAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xuICBvdXRsaW5lLW9mZnNldDogLTJweDtcbn1cblxuLmJ0bjpob3Zlcixcbi5idG46Zm9jdXMsXG4uYnRuLmZvY3VzIHtcbiAgY29sb3I6ICM0NDQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmJ0bjphY3RpdmUsXG4uYnRuLmFjdGl2ZSB7XG4gIG91dGxpbmU6IDA7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyNSk7XG59XG5cbi5idG4uZGlzYWJsZWQsXG4uYnRuW2Rpc2FibGVkXSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgb3BhY2l0eTogMC42NTtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTY1KTtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xuICBib3gtc2hhZG93OiBub25lO1xufVxuXG5hLmJ0bi5kaXNhYmxlZCxcbmZpZWxkc2V0W2Rpc2FibGVkXSBhLmJ0biB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uYnRuLWRlZmF1bHQge1xuICBjb2xvcjogIzQ0NDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xufVxuXG4uYnRuLWRlZmF1bHQ6Zm9jdXMsXG4uYnRuLWRlZmF1bHQuZm9jdXMge1xuICBjb2xvcjogIzQ0NDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcbiAgYm9yZGVyLWNvbG9yOiAjOGM4YzhjO1xufVxuXG4uYnRuLWRlZmF1bHQ6aG92ZXIge1xuICBjb2xvcjogIzQ0NDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcbiAgYm9yZGVyLWNvbG9yOiAjYWRhZGFkO1xufVxuXG4uYnRuLWRlZmF1bHQ6YWN0aXZlLFxuLmJ0bi1kZWZhdWx0LmFjdGl2ZSxcbi5vcGVuID4gLmJ0bi1kZWZhdWx0LmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGNvbG9yOiAjNDQ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xuICBib3JkZXItY29sb3I6ICNhZGFkYWQ7XG59XG5cbi5idG4tZGVmYXVsdDphY3RpdmU6aG92ZXIsXG4uYnRuLWRlZmF1bHQ6YWN0aXZlOmZvY3VzLFxuLmJ0bi1kZWZhdWx0OmFjdGl2ZS5mb2N1cyxcbi5idG4tZGVmYXVsdC5hY3RpdmU6aG92ZXIsXG4uYnRuLWRlZmF1bHQuYWN0aXZlOmZvY3VzLFxuLmJ0bi1kZWZhdWx0LmFjdGl2ZS5mb2N1cyxcbi5vcGVuID4gLmJ0bi1kZWZhdWx0LmRyb3Bkb3duLXRvZ2dsZTpob3Zlcixcbi5vcGVuID4gLmJ0bi1kZWZhdWx0LmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyxcbi5vcGVuID4gLmJ0bi1kZWZhdWx0LmRyb3Bkb3duLXRvZ2dsZS5mb2N1cyB7XG4gIGNvbG9yOiAjNDQ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDRkNGQ0O1xuICBib3JkZXItY29sb3I6ICM4YzhjOGM7XG59XG5cbi5idG4tZGVmYXVsdDphY3RpdmUsXG4uYnRuLWRlZmF1bHQuYWN0aXZlLFxuLm9wZW4gPiAuYnRuLWRlZmF1bHQuZHJvcGRvd24tdG9nZ2xlIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbn1cblxuLmJ0bi1kZWZhdWx0LmRpc2FibGVkLFxuLmJ0bi1kZWZhdWx0LmRpc2FibGVkOmhvdmVyLFxuLmJ0bi1kZWZhdWx0LmRpc2FibGVkOmZvY3VzLFxuLmJ0bi1kZWZhdWx0LmRpc2FibGVkLmZvY3VzLFxuLmJ0bi1kZWZhdWx0LmRpc2FibGVkOmFjdGl2ZSxcbi5idG4tZGVmYXVsdC5kaXNhYmxlZC5hY3RpdmUsXG4uYnRuLWRlZmF1bHRbZGlzYWJsZWRdLFxuLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXTpob3Zlcixcbi5idG4tZGVmYXVsdFtkaXNhYmxlZF06Zm9jdXMsXG4uYnRuLWRlZmF1bHRbZGlzYWJsZWRdLmZvY3VzLFxuLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXTphY3RpdmUsXG4uYnRuLWRlZmF1bHRbZGlzYWJsZWRdLmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0OmhvdmVyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdDpmb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQuZm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0OmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQuYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xufVxuXG4uYnRuLWRlZmF1bHQgLmJhZGdlIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7XG59XG5cbi5idG4tcHJpbWFyeSB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2EzOTNiO1xuICBib3JkZXItY29sb3I6ICMzYTM5M2I7XG59XG5cbi5idG4tcHJpbWFyeTpmb2N1cyxcbi5idG4tcHJpbWFyeS5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyMDIxO1xuICBib3JkZXItY29sb3I6IGJsYWNrO1xufVxuXG4uYnRuLXByaW1hcnk6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIxMjAyMTtcbiAgYm9yZGVyLWNvbG9yOiAjMWIxYjFjO1xufVxuXG4uYnRuLXByaW1hcnk6YWN0aXZlLFxuLmJ0bi1wcmltYXJ5LmFjdGl2ZSxcbi5vcGVuID4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyMDIxO1xuICBib3JkZXItY29sb3I6ICMxYjFiMWM7XG59XG5cbi5idG4tcHJpbWFyeTphY3RpdmU6aG92ZXIsXG4uYnRuLXByaW1hcnk6YWN0aXZlOmZvY3VzLFxuLmJ0bi1wcmltYXJ5OmFjdGl2ZS5mb2N1cyxcbi5idG4tcHJpbWFyeS5hY3RpdmU6aG92ZXIsXG4uYnRuLXByaW1hcnkuYWN0aXZlOmZvY3VzLFxuLmJ0bi1wcmltYXJ5LmFjdGl2ZS5mb2N1cyxcbi5vcGVuID4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZTpob3Zlcixcbi5vcGVuID4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyxcbi5vcGVuID4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZS5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGYwZTBmO1xuICBib3JkZXItY29sb3I6IGJsYWNrO1xufVxuXG4uYnRuLXByaW1hcnk6YWN0aXZlLFxuLmJ0bi1wcmltYXJ5LmFjdGl2ZSxcbi5vcGVuID4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG59XG5cbi5idG4tcHJpbWFyeS5kaXNhYmxlZCxcbi5idG4tcHJpbWFyeS5kaXNhYmxlZDpob3Zlcixcbi5idG4tcHJpbWFyeS5kaXNhYmxlZDpmb2N1cyxcbi5idG4tcHJpbWFyeS5kaXNhYmxlZC5mb2N1cyxcbi5idG4tcHJpbWFyeS5kaXNhYmxlZDphY3RpdmUsXG4uYnRuLXByaW1hcnkuZGlzYWJsZWQuYWN0aXZlLFxuLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXSxcbi5idG4tcHJpbWFyeVtkaXNhYmxlZF06aG92ZXIsXG4uYnRuLXByaW1hcnlbZGlzYWJsZWRdOmZvY3VzLFxuLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXS5mb2N1cyxcbi5idG4tcHJpbWFyeVtkaXNhYmxlZF06YWN0aXZlLFxuLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXS5hY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5LFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeTpob3ZlcixcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5LmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeTphY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5LmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzYTM5M2I7XG4gIGJvcmRlci1jb2xvcjogIzNhMzkzYjtcbn1cblxuLmJ0bi1wcmltYXJ5IC5iYWRnZSB7XG4gIGNvbG9yOiAjM2EzOTNiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4uYnRuLXN1Y2Nlc3Mge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVjYjg1YztcbiAgYm9yZGVyLWNvbG9yOiAjNWNiODVjO1xufVxuXG4uYnRuLXN1Y2Nlc3M6Zm9jdXMsXG4uYnRuLXN1Y2Nlc3MuZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0OWQ0NDtcbiAgYm9yZGVyLWNvbG9yOiAjMmQ2NzJkO1xufVxuXG4uYnRuLXN1Y2Nlc3M6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0OWQ0NDtcbiAgYm9yZGVyLWNvbG9yOiAjNDE5NjQxO1xufVxuXG4uYnRuLXN1Y2Nlc3M6YWN0aXZlLFxuLmJ0bi1zdWNjZXNzLmFjdGl2ZSxcbi5vcGVuID4gLmJ0bi1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ5ZDQ0O1xuICBib3JkZXItY29sb3I6ICM0MTk2NDE7XG59XG5cbi5idG4tc3VjY2VzczphY3RpdmU6aG92ZXIsXG4uYnRuLXN1Y2Nlc3M6YWN0aXZlOmZvY3VzLFxuLmJ0bi1zdWNjZXNzOmFjdGl2ZS5mb2N1cyxcbi5idG4tc3VjY2Vzcy5hY3RpdmU6aG92ZXIsXG4uYnRuLXN1Y2Nlc3MuYWN0aXZlOmZvY3VzLFxuLmJ0bi1zdWNjZXNzLmFjdGl2ZS5mb2N1cyxcbi5vcGVuID4gLmJ0bi1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZTpob3Zlcixcbi5vcGVuID4gLmJ0bi1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyxcbi5vcGVuID4gLmJ0bi1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZS5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzk4NDM5O1xuICBib3JkZXItY29sb3I6ICMyZDY3MmQ7XG59XG5cbi5idG4tc3VjY2VzczphY3RpdmUsXG4uYnRuLXN1Y2Nlc3MuYWN0aXZlLFxuLm9wZW4gPiAuYnRuLXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xlIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbn1cblxuLmJ0bi1zdWNjZXNzLmRpc2FibGVkLFxuLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmhvdmVyLFxuLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmZvY3VzLFxuLmJ0bi1zdWNjZXNzLmRpc2FibGVkLmZvY3VzLFxuLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmFjdGl2ZSxcbi5idG4tc3VjY2Vzcy5kaXNhYmxlZC5hY3RpdmUsXG4uYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdLFxuLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXTpob3Zlcixcbi5idG4tc3VjY2Vzc1tkaXNhYmxlZF06Zm9jdXMsXG4uYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdLmZvY3VzLFxuLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXTphY3RpdmUsXG4uYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdLmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3MsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzOmhvdmVyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2Vzczpmb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3MuZm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzOmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3MuYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVjYjg1YztcbiAgYm9yZGVyLWNvbG9yOiAjNWNiODVjO1xufVxuXG4uYnRuLXN1Y2Nlc3MgLmJhZGdlIHtcbiAgY29sb3I6ICM1Y2I4NWM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cbi5idG4taW5mbyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWJjMGRlO1xuICBib3JkZXItY29sb3I6ICM1YmMwZGU7XG59XG5cbi5idG4taW5mbzpmb2N1cyxcbi5idG4taW5mby5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzFiMGQ1O1xuICBib3JkZXItY29sb3I6ICMxZjdlOWE7XG59XG5cbi5idG4taW5mbzpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzFiMGQ1O1xuICBib3JkZXItY29sb3I6ICMyYWFiZDI7XG59XG5cbi5idG4taW5mbzphY3RpdmUsXG4uYnRuLWluZm8uYWN0aXZlLFxuLm9wZW4gPiAuYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMWIwZDU7XG4gIGJvcmRlci1jb2xvcjogIzJhYWJkMjtcbn1cblxuLmJ0bi1pbmZvOmFjdGl2ZTpob3Zlcixcbi5idG4taW5mbzphY3RpdmU6Zm9jdXMsXG4uYnRuLWluZm86YWN0aXZlLmZvY3VzLFxuLmJ0bi1pbmZvLmFjdGl2ZTpob3Zlcixcbi5idG4taW5mby5hY3RpdmU6Zm9jdXMsXG4uYnRuLWluZm8uYWN0aXZlLmZvY3VzLFxuLm9wZW4gPiAuYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlOmhvdmVyLFxuLm9wZW4gPiAuYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlOmZvY3VzLFxuLm9wZW4gPiAuYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlLmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyNjlhYmM7XG4gIGJvcmRlci1jb2xvcjogIzFmN2U5YTtcbn1cblxuLmJ0bi1pbmZvOmFjdGl2ZSxcbi5idG4taW5mby5hY3RpdmUsXG4ub3BlbiA+IC5idG4taW5mby5kcm9wZG93bi10b2dnbGUge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xufVxuXG4uYnRuLWluZm8uZGlzYWJsZWQsXG4uYnRuLWluZm8uZGlzYWJsZWQ6aG92ZXIsXG4uYnRuLWluZm8uZGlzYWJsZWQ6Zm9jdXMsXG4uYnRuLWluZm8uZGlzYWJsZWQuZm9jdXMsXG4uYnRuLWluZm8uZGlzYWJsZWQ6YWN0aXZlLFxuLmJ0bi1pbmZvLmRpc2FibGVkLmFjdGl2ZSxcbi5idG4taW5mb1tkaXNhYmxlZF0sXG4uYnRuLWluZm9bZGlzYWJsZWRdOmhvdmVyLFxuLmJ0bi1pbmZvW2Rpc2FibGVkXTpmb2N1cyxcbi5idG4taW5mb1tkaXNhYmxlZF0uZm9jdXMsXG4uYnRuLWluZm9bZGlzYWJsZWRdOmFjdGl2ZSxcbi5idG4taW5mb1tkaXNhYmxlZF0uYWN0aXZlLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mbyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm86aG92ZXIsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvOmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mby5mb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm86YWN0aXZlLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mby5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWJjMGRlO1xuICBib3JkZXItY29sb3I6ICM1YmMwZGU7XG59XG5cbi5idG4taW5mbyAuYmFkZ2Uge1xuICBjb2xvcjogIzViYzBkZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cblxuLmJ0bi13YXJuaW5nIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGFkNGU7XG4gIGJvcmRlci1jb2xvcjogI2YwYWQ0ZTtcbn1cblxuLmJ0bi13YXJuaW5nOmZvY3VzLFxuLmJ0bi13YXJuaW5nLmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlYzk3MWY7XG4gIGJvcmRlci1jb2xvcjogI2IwNmQwZjtcbn1cblxuLmJ0bi13YXJuaW5nOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlYzk3MWY7XG4gIGJvcmRlci1jb2xvcjogI2ViOTMxNjtcbn1cblxuLmJ0bi13YXJuaW5nOmFjdGl2ZSxcbi5idG4td2FybmluZy5hY3RpdmUsXG4ub3BlbiA+IC5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGUge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjOTcxZjtcbiAgYm9yZGVyLWNvbG9yOiAjZWI5MzE2O1xufVxuXG4uYnRuLXdhcm5pbmc6YWN0aXZlOmhvdmVyLFxuLmJ0bi13YXJuaW5nOmFjdGl2ZTpmb2N1cyxcbi5idG4td2FybmluZzphY3RpdmUuZm9jdXMsXG4uYnRuLXdhcm5pbmcuYWN0aXZlOmhvdmVyLFxuLmJ0bi13YXJuaW5nLmFjdGl2ZTpmb2N1cyxcbi5idG4td2FybmluZy5hY3RpdmUuZm9jdXMsXG4ub3BlbiA+IC5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGU6aG92ZXIsXG4ub3BlbiA+IC5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGU6Zm9jdXMsXG4ub3BlbiA+IC5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGUuZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q1ODUxMjtcbiAgYm9yZGVyLWNvbG9yOiAjYjA2ZDBmO1xufVxuXG4uYnRuLXdhcm5pbmc6YWN0aXZlLFxuLmJ0bi13YXJuaW5nLmFjdGl2ZSxcbi5vcGVuID4gLmJ0bi13YXJuaW5nLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG59XG5cbi5idG4td2FybmluZy5kaXNhYmxlZCxcbi5idG4td2FybmluZy5kaXNhYmxlZDpob3Zlcixcbi5idG4td2FybmluZy5kaXNhYmxlZDpmb2N1cyxcbi5idG4td2FybmluZy5kaXNhYmxlZC5mb2N1cyxcbi5idG4td2FybmluZy5kaXNhYmxlZDphY3RpdmUsXG4uYnRuLXdhcm5pbmcuZGlzYWJsZWQuYWN0aXZlLFxuLmJ0bi13YXJuaW5nW2Rpc2FibGVkXSxcbi5idG4td2FybmluZ1tkaXNhYmxlZF06aG92ZXIsXG4uYnRuLXdhcm5pbmdbZGlzYWJsZWRdOmZvY3VzLFxuLmJ0bi13YXJuaW5nW2Rpc2FibGVkXS5mb2N1cyxcbi5idG4td2FybmluZ1tkaXNhYmxlZF06YWN0aXZlLFxuLmJ0bi13YXJuaW5nW2Rpc2FibGVkXS5hY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZzpob3ZlcixcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmc6Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nLmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZzphY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nLmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGFkNGU7XG4gIGJvcmRlci1jb2xvcjogI2YwYWQ0ZTtcbn1cblxuLmJ0bi13YXJuaW5nIC5iYWRnZSB7XG4gIGNvbG9yOiAjZjBhZDRlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4uYnRuLWRhbmdlciB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDk1MzRmO1xuICBib3JkZXItY29sb3I6ICNkOTUzNGY7XG59XG5cbi5idG4tZGFuZ2VyOmZvY3VzLFxuLmJ0bi1kYW5nZXIuZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M5MzAyYztcbiAgYm9yZGVyLWNvbG9yOiAjOGIyMTFlO1xufVxuXG4uYnRuLWRhbmdlcjpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzkzMDJjO1xuICBib3JkZXItY29sb3I6ICNjMTJlMmE7XG59XG5cbi5idG4tZGFuZ2VyOmFjdGl2ZSxcbi5idG4tZGFuZ2VyLmFjdGl2ZSxcbi5vcGVuID4gLmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjOTMwMmM7XG4gIGJvcmRlci1jb2xvcjogI2MxMmUyYTtcbn1cblxuLmJ0bi1kYW5nZXI6YWN0aXZlOmhvdmVyLFxuLmJ0bi1kYW5nZXI6YWN0aXZlOmZvY3VzLFxuLmJ0bi1kYW5nZXI6YWN0aXZlLmZvY3VzLFxuLmJ0bi1kYW5nZXIuYWN0aXZlOmhvdmVyLFxuLmJ0bi1kYW5nZXIuYWN0aXZlOmZvY3VzLFxuLmJ0bi1kYW5nZXIuYWN0aXZlLmZvY3VzLFxuLm9wZW4gPiAuYnRuLWRhbmdlci5kcm9wZG93bi10b2dnbGU6aG92ZXIsXG4ub3BlbiA+IC5idG4tZGFuZ2VyLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyxcbi5vcGVuID4gLmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlLmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNhYzI5MjU7XG4gIGJvcmRlci1jb2xvcjogIzhiMjExZTtcbn1cblxuLmJ0bi1kYW5nZXI6YWN0aXZlLFxuLmJ0bi1kYW5nZXIuYWN0aXZlLFxuLm9wZW4gPiAuYnRuLWRhbmdlci5kcm9wZG93bi10b2dnbGUge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xufVxuXG4uYnRuLWRhbmdlci5kaXNhYmxlZCxcbi5idG4tZGFuZ2VyLmRpc2FibGVkOmhvdmVyLFxuLmJ0bi1kYW5nZXIuZGlzYWJsZWQ6Zm9jdXMsXG4uYnRuLWRhbmdlci5kaXNhYmxlZC5mb2N1cyxcbi5idG4tZGFuZ2VyLmRpc2FibGVkOmFjdGl2ZSxcbi5idG4tZGFuZ2VyLmRpc2FibGVkLmFjdGl2ZSxcbi5idG4tZGFuZ2VyW2Rpc2FibGVkXSxcbi5idG4tZGFuZ2VyW2Rpc2FibGVkXTpob3Zlcixcbi5idG4tZGFuZ2VyW2Rpc2FibGVkXTpmb2N1cyxcbi5idG4tZGFuZ2VyW2Rpc2FibGVkXS5mb2N1cyxcbi5idG4tZGFuZ2VyW2Rpc2FibGVkXTphY3RpdmUsXG4uYnRuLWRhbmdlcltkaXNhYmxlZF0uYWN0aXZlLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyOmhvdmVyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyOmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyLmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyOmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlci5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDk1MzRmO1xuICBib3JkZXItY29sb3I6ICNkOTUzNGY7XG59XG5cbi5idG4tZGFuZ2VyIC5iYWRnZSB7XG4gIGNvbG9yOiAjZDk1MzRmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4uYnRuLWxpbmsge1xuICBjb2xvcjogIzNhMzkzYjtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLmJ0bi1saW5rLFxuLmJ0bi1saW5rOmFjdGl2ZSxcbi5idG4tbGluay5hY3RpdmUsXG4uYnRuLWxpbmtbZGlzYWJsZWRdLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tbGluayB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XG5cbi5idG4tbGluayxcbi5idG4tbGluazpob3Zlcixcbi5idG4tbGluazpmb2N1cyxcbi5idG4tbGluazphY3RpdmUge1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4uYnRuLWxpbms6aG92ZXIsXG4uYnRuLWxpbms6Zm9jdXMge1xuICBjb2xvcjogIzE0MTMxNDtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4uYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVyLFxuLmJ0bi1saW5rW2Rpc2FibGVkXTpmb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxpbms6aG92ZXIsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICM5OTk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmJ0bi1sZywgLmJ0bi1ncm91cC1sZyA+IC5idG4ge1xuICBwYWRkaW5nOiAxMHB4IDE2cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMztcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4uYnRuLXNtLCAuYnRuLWdyb3VwLXNtID4gLmJ0biB7XG4gIHBhZGRpbmc6IDVweCAxMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLmJ0bi14cywgLmJ0bi1ncm91cC14cyA+IC5idG4ge1xuICBwYWRkaW5nOiAxcHggNXB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLmJ0bi1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmJ0bi1ibG9jayArIC5idG4tYmxvY2sge1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG5cbmlucHV0W3R5cGU9XCJzdWJtaXRcIl0uYnRuLWJsb2NrLFxuaW5wdXRbdHlwZT1cInJlc2V0XCJdLmJ0bi1ibG9jayxcbmlucHV0W3R5cGU9XCJidXR0b25cIl0uYnRuLWJsb2NrIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5mYWRlIHtcbiAgb3BhY2l0eTogMDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGxpbmVhcjtcbiAgLW8tdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBsaW5lYXI7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyO1xufVxuXG4uZmFkZS5pbiB7XG4gIG9wYWNpdHk6IDE7XG59XG5cbi5jb2xsYXBzZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5jb2xsYXBzZS5pbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG50ci5jb2xsYXBzZS5pbiB7XG4gIGRpc3BsYXk6IHRhYmxlLXJvdztcbn1cblxudGJvZHkuY29sbGFwc2UuaW4ge1xuICBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXA7XG59XG5cbi5jb2xsYXBzaW5nIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogaGVpZ2h0LCB2aXNpYmlsaXR5O1xuICB0cmFuc2l0aW9uLXByb3BlcnR5OiBoZWlnaHQsIHZpc2liaWxpdHk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zNXM7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMzVzO1xuICAtd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTtcbn1cblxuLmNhcmV0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW4tbGVmdDogMnB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBib3JkZXItdG9wOiA0cHggZGFzaGVkO1xuICBib3JkZXItdG9wOiA0cHggc29saWQgXFw5O1xuICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuLmRyb3B1cCxcbi5kcm9wZG93biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XG4gIG91dGxpbmU6IDA7XG59XG5cbi5kcm9wZG93bi1tZW51IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDEwMCU7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDEwMDA7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGZsb2F0OiBsZWZ0O1xuICBtaW4td2lkdGg6IDE2MHB4O1xuICBwYWRkaW5nOiA1cHggMDtcbiAgbWFyZ2luOiAycHggMCAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBmb250LXNpemU6IDE0cHg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2ZjZmM7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDZweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNzUpO1xuICBib3gtc2hhZG93OiAwIDZweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNzUpO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xufVxuXG4uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0IHtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IGF1dG87XG59XG5cbi5kcm9wZG93bi1tZW51IC5kaXZpZGVyIHtcbiAgaGVpZ2h0OiAxcHg7XG4gIG1hcmdpbjogOXB4IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG59XG5cbi5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDNweCAyMHB4O1xuICBjbGVhcjogYm90aDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICBjb2xvcjogIzIyMjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIsXG4uZHJvcGRvd24tbWVudSA+IGxpID4gYTpmb2N1cyB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6ICMxNTE1MTU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG59XG5cbi5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGEsXG4uZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIG91dGxpbmU6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzYTM5M2I7XG59XG5cbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYSxcbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpob3Zlcixcbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjOTk5O1xufVxuXG4uZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4uZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkID0gZmFsc2UpO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4ub3BlbiA+IC5kcm9wZG93bi1tZW51IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5vcGVuID4gYSB7XG4gIG91dGxpbmU6IDA7XG59XG5cbi5kcm9wZG93bi1tZW51LXJpZ2h0IHtcbiAgbGVmdDogYXV0bztcbiAgcmlnaHQ6IDA7XG59XG5cbi5kcm9wZG93bi1tZW51LWxlZnQge1xuICBsZWZ0OiAwO1xuICByaWdodDogYXV0bztcbn1cblxuLmRyb3Bkb3duLWhlYWRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAzcHggMjBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7XG4gIGNvbG9yOiAjOTk5O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4uZHJvcGRvd24tYmFja2Ryb3Age1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIHRvcDogMDtcbiAgei1pbmRleDogOTkwO1xufVxuXG4ucHVsbC1yaWdodCA+IC5kcm9wZG93bi1tZW51IHtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IGF1dG87XG59XG5cbi5kcm9wdXAgLmNhcmV0LFxuLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5jYXJldCB7XG4gIGJvcmRlci10b3A6IDA7XG4gIGJvcmRlci1ib3R0b206IDRweCBkYXNoZWQ7XG4gIGJvcmRlci1ib3R0b206IDRweCBzb2xpZCBcXDk7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG5cbi5kcm9wdXAgLmRyb3Bkb3duLW1lbnUsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUge1xuICB0b3A6IGF1dG87XG4gIGJvdHRvbTogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogMnB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLm5hdmJhci1yaWdodCAuZHJvcGRvd24tbWVudSB7XG4gICAgcmlnaHQ6IDA7XG4gICAgbGVmdDogYXV0bztcbiAgfVxuICAubmF2YmFyLXJpZ2h0IC5kcm9wZG93bi1tZW51LWxlZnQge1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IGF1dG87XG4gIH1cbn1cblxuLmJ0bi1ncm91cCxcbi5idG4tZ3JvdXAtdmVydGljYWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG4sXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5cbi5idG4tZ3JvdXAgPiAuYnRuOmhvdmVyLFxuLmJ0bi1ncm91cCA+IC5idG46Zm9jdXMsXG4uYnRuLWdyb3VwID4gLmJ0bjphY3RpdmUsXG4uYnRuLWdyb3VwID4gLmJ0bi5hY3RpdmUsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpob3Zlcixcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOmZvY3VzLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46YWN0aXZlLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4uYWN0aXZlIHtcbiAgei1pbmRleDogMjtcbn1cblxuLmJ0bi1ncm91cCAuYnRuICsgLmJ0bixcbi5idG4tZ3JvdXAgLmJ0biArIC5idG4tZ3JvdXAsXG4uYnRuLWdyb3VwIC5idG4tZ3JvdXAgKyAuYnRuLFxuLmJ0bi1ncm91cCAuYnRuLWdyb3VwICsgLmJ0bi1ncm91cCB7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuXG4uYnRuLXRvb2xiYXIge1xuICBtYXJnaW4tbGVmdDogLTVweDtcbn1cblxuLmJ0bi10b29sYmFyOmJlZm9yZSxcbi5idG4tdG9vbGJhcjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLmJ0bi10b29sYmFyOmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG5cbi5idG4tdG9vbGJhciAuYnRuLFxuLmJ0bi10b29sYmFyIC5idG4tZ3JvdXAsXG4uYnRuLXRvb2xiYXIgLmlucHV0LWdyb3VwIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5cbi5idG4tdG9vbGJhciA+IC5idG4sXG4uYnRuLXRvb2xiYXIgPiAuYnRuLWdyb3VwLFxuLmJ0bi10b29sYmFyID4gLmlucHV0LWdyb3VwIHtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG46bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSkge1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG4uYnRuLWdyb3VwID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuXG4uYnRuLWdyb3VwID4gLmJ0bjpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG46bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSxcbi5idG4tZ3JvdXAgPiAuZHJvcGRvd24tdG9nZ2xlOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXAge1xuICBmbG9hdDogbGVmdDtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSA+IC5idG4ge1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpID4gLmJ0bjpsYXN0LWNoaWxkLFxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSA+IC5kcm9wZG93bi10b2dnbGUge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG59XG5cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuOmZpcnN0LWNoaWxkIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbn1cblxuLmJ0bi1ncm91cCAuZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZSxcbi5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgb3V0bGluZTogMDtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG4gKyAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG4tbGcgKyAuZHJvcGRvd24tdG9nZ2xlLCAuYnRuLWdyb3VwLWxnLmJ0bi1ncm91cCA+IC5idG4gKyAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgcGFkZGluZy1sZWZ0OiAxMnB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxMnB4O1xufVxuXG4uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyNSk7XG59XG5cbi5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1saW5rIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xuICBib3gtc2hhZG93OiBub25lO1xufVxuXG4uYnRuIC5jYXJldCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuXG4uYnRuLWxnIC5jYXJldCwgLmJ0bi1ncm91cC1sZyA+IC5idG4gLmNhcmV0IHtcbiAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDA7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG59XG5cbi5kcm9wdXAgLmJ0bi1sZyAuY2FyZXQsIC5kcm9wdXAgLmJ0bi1ncm91cC1sZyA+IC5idG4gLmNhcmV0IHtcbiAgYm9yZGVyLXdpZHRoOiAwIDVweCA1cHg7XG59XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cCA+IC5idG4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZmxvYXQ6IG5vbmU7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmJlZm9yZSxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDphZnRlciB7XG4gIGNsZWFyOiBib3RoO1xufVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cCA+IC5idG4ge1xuICBmbG9hdDogbm9uZTtcbn1cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4gKyAuYnRuLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4gKyAuYnRuLWdyb3VwLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAgKyAuYnRuLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAgKyAuYnRuLWdyb3VwIHtcbiAgbWFyZ2luLXRvcDogLTFweDtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkge1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG59XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xufVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuOmxhc3QtY2hpbGQsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpID4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xufVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xufVxuXG4uYnRuLWdyb3VwLWp1c3RpZmllZCB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICB3aWR0aDogMTAwJTtcbiAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbn1cblxuLmJ0bi1ncm91cC1qdXN0aWZpZWQgPiAuYnRuLFxuLmJ0bi1ncm91cC1qdXN0aWZpZWQgPiAuYnRuLWdyb3VwIHtcbiAgZmxvYXQ6IG5vbmU7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIHdpZHRoOiAxJTtcbn1cblxuLmJ0bi1ncm91cC1qdXN0aWZpZWQgPiAuYnRuLWdyb3VwIC5idG4ge1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmJ0bi1ncm91cC1qdXN0aWZpZWQgPiAuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IHtcbiAgbGVmdDogYXV0bztcbn1cblxuW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXSA+IC5idG4gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXSA+IC5idG4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXSA+IC5idG4tZ3JvdXAgPiAuYnRuIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbltkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIl0gPiAuYnRuLWdyb3VwID4gLmJ0biBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uaW5wdXQtZ3JvdXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlO1xufVxuXG4uaW5wdXQtZ3JvdXBbY2xhc3MqPVwiY29sLVwiXSB7XG4gIGZsb2F0OiBub25lO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG59XG5cbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAyO1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1idG4sXG4uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbCB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG59XG5cbi5pbnB1dC1ncm91cC1hZGRvbjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLFxuLmlucHV0LWdyb3VwLWJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLFxuLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2w6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbi5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1idG4ge1xuICB3aWR0aDogMSU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5pbnB1dC1ncm91cC1hZGRvbiB7XG4gIHBhZGRpbmc6IDZweCAxMnB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogIzQ0NDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi5pbnB1dC1ncm91cC1hZGRvbi5pbnB1dC1zbSwgLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IC5pbnB1dC1ncm91cC1hZGRvbi5idG4ge1xuICBwYWRkaW5nOiA1cHggMTBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi5pbnB1dC1ncm91cC1hZGRvbi5pbnB1dC1sZywgLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IC5pbnB1dC1ncm91cC1hZGRvbi5idG4ge1xuICBwYWRkaW5nOiAxMHB4IDE2cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4uaW5wdXQtZ3JvdXAtYWRkb24gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmlucHV0LWdyb3VwLWFkZG9uIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmZpcnN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWFkZG9uOmZpcnN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bi1ncm91cCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmRyb3Bkb3duLXRvZ2dsZSxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xufVxuXG4uaW5wdXQtZ3JvdXAtYWRkb246Zmlyc3QtY2hpbGQge1xuICBib3JkZXItcmlnaHQ6IDA7XG59XG5cbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmxhc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZCxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5kcm9wZG93bi10b2dnbGUsXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKSxcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0biB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG59XG5cbi5pbnB1dC1ncm91cC1hZGRvbjpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLWxlZnQ6IDA7XG59XG5cbi5pbnB1dC1ncm91cC1idG4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogMDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLmlucHV0LWdyb3VwLWJ0biA+IC5idG4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5pbnB1dC1ncm91cC1idG4gPiAuYnRuICsgLmJ0biB7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuXG4uaW5wdXQtZ3JvdXAtYnRuID4gLmJ0bjpob3Zlcixcbi5pbnB1dC1ncm91cC1idG4gPiAuYnRuOmZvY3VzLFxuLmlucHV0LWdyb3VwLWJ0biA+IC5idG46YWN0aXZlIHtcbiAgei1pbmRleDogMjtcbn1cblxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bi1ncm91cCB7XG4gIG1hcmdpbi1yaWdodDogLTFweDtcbn1cblxuLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4tZ3JvdXAge1xuICB6LWluZGV4OiAyO1xuICBtYXJnaW4tbGVmdDogLTFweDtcbn1cblxuLm5hdiB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxuLm5hdjpiZWZvcmUsXG4ubmF2OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4ubmF2OmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG5cbi5uYXYgPiBsaSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5uYXYgPiBsaSA+IGEge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAxMHB4IDE1cHg7XG59XG5cbi5uYXYgPiBsaSA+IGE6aG92ZXIsXG4ubmF2ID4gbGkgPiBhOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4ubmF2ID4gbGkuZGlzYWJsZWQgPiBhIHtcbiAgY29sb3I6ICM5OTk7XG59XG5cbi5uYXYgPiBsaS5kaXNhYmxlZCA+IGE6aG92ZXIsXG4ubmF2ID4gbGkuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICM5OTk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5uYXYgLm9wZW4gPiBhLFxuLm5hdiAub3BlbiA+IGE6aG92ZXIsXG4ubmF2IC5vcGVuID4gYTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogIzNhMzkzYjtcbn1cblxuLm5hdiAubmF2LWRpdmlkZXIge1xuICBoZWlnaHQ6IDFweDtcbiAgbWFyZ2luOiA5cHggMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1ZTVlNTtcbn1cblxuLm5hdiA+IGxpID4gYSA+IGltZyB7XG4gIG1heC13aWR0aDogbm9uZTtcbn1cblxuLm5hdi10YWJzIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG59XG5cbi5uYXYtdGFicyA+IGxpIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1hcmdpbi1ib3R0b206IC0xcHg7XG59XG5cbi5uYXYtdGFicyA+IGxpID4gYSB7XG4gIG1hcmdpbi1yaWdodDogMnB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiAzcHggM3B4IDAgMDtcbn1cblxuLm5hdi10YWJzID4gbGkgPiBhOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjZmZmICNmZmYgI2RkZDtcbn1cblxuLm5hdi10YWJzID4gbGkuYWN0aXZlID4gYSxcbi5uYXYtdGFicyA+IGxpLmFjdGl2ZSA+IGE6aG92ZXIsXG4ubmF2LXRhYnMgPiBsaS5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICM0NDQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi5uYXYtcGlsbHMgPiBsaSB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuXG4ubmF2LXBpbGxzID4gbGkgPiBhIHtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4ubmF2LXBpbGxzID4gbGkgKyBsaSB7XG4gIG1hcmdpbi1sZWZ0OiAycHg7XG59XG5cbi5uYXYtcGlsbHMgPiBsaS5hY3RpdmUgPiBhLFxuLm5hdi1waWxscyA+IGxpLmFjdGl2ZSA+IGE6aG92ZXIsXG4ubmF2LXBpbGxzID4gbGkuYWN0aXZlID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2EzOTNiO1xufVxuXG4ubmF2LXN0YWNrZWQgPiBsaSB7XG4gIGZsb2F0OiBub25lO1xufVxuXG4ubmF2LXN0YWNrZWQgPiBsaSArIGxpIHtcbiAgbWFyZ2luLXRvcDogMnB4O1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLm5hdi1qdXN0aWZpZWQsIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5uYXYtanVzdGlmaWVkID4gbGksIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkge1xuICBmbG9hdDogbm9uZTtcbn1cblxuLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEsIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkgPiBhIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG5cbi5uYXYtanVzdGlmaWVkID4gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHtcbiAgdG9wOiBhdXRvO1xuICBsZWZ0OiBhdXRvO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLm5hdi1qdXN0aWZpZWQgPiBsaSwgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICB3aWR0aDogMSU7XG4gIH1cbiAgLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEsIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkgPiBhIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5cbi5uYXYtdGFicy1qdXN0aWZpZWQsIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cblxuLm5hdi10YWJzLWp1c3RpZmllZCA+IGxpID4gYSwgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhLFxuLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYSwgLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpob3ZlciwgLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmZvY3VzLCAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXYtdGFicy1qdXN0aWZpZWQgPiBsaSA+IGEsIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkgPiBhIHtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgICBib3JkZXItcmFkaXVzOiAzcHggM3B4IDAgMDtcbiAgfVxuICAubmF2LXRhYnMtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGEsXG4gIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGEsIC5uYXYtdGFicy1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpob3ZlcixcbiAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpob3ZlciwgLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmZvY3VzLCAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmO1xuICB9XG59XG5cbi50YWItY29udGVudCA+IC50YWItcGFuZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi50YWItY29udGVudCA+IC5hY3RpdmUge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLm5hdi10YWJzIC5kcm9wZG93bi1tZW51IHtcbiAgbWFyZ2luLXRvcDogLTFweDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG59XG5cbi5uYXZiYXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1pbi1oZWlnaHQ6IDUwcHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xufVxuXG4ubmF2YmFyOmJlZm9yZSxcbi5uYXZiYXI6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgZGlzcGxheTogdGFibGU7XG59XG5cbi5uYXZiYXI6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXZiYXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgfVxufVxuXG4ubmF2YmFyLWhlYWRlcjpiZWZvcmUsXG4ubmF2YmFyLWhlYWRlcjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLm5hdmJhci1oZWFkZXI6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXZiYXItaGVhZGVyIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxufVxuXG4ubmF2YmFyLWNvbGxhcHNlIHtcbiAgb3ZlcmZsb3cteDogdmlzaWJsZTtcbiAgcGFkZGluZy1yaWdodDogMDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG5cbi5uYXZiYXItY29sbGFwc2U6YmVmb3JlLFxuLm5hdmJhci1jb2xsYXBzZTphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLm5hdmJhci1jb2xsYXBzZTphZnRlciB7XG4gIGNsZWFyOiBib3RoO1xufVxuXG4ubmF2YmFyLWNvbGxhcHNlLmluIHtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXZiYXItY29sbGFwc2Uge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgfVxuICAubmF2YmFyLWNvbGxhcHNlLmNvbGxhcHNlIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm5hdmJhci1jb2xsYXBzZS5pbiB7XG4gICAgb3ZlcmZsb3cteTogdmlzaWJsZTtcbiAgfVxuICAubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWNvbGxhcHNlLFxuICAubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1jb2xsYXBzZSxcbiAgLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1jb2xsYXBzZSB7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gIH1cbn1cblxuLm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1jb2xsYXBzZSxcbi5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItY29sbGFwc2Uge1xuICBtYXgtaGVpZ2h0OiAzNDBweDtcbn1cblxuQG1lZGlhIChtYXgtZGV2aWNlLXdpZHRoOiA0ODBweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gIC5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItY29sbGFwc2UsXG4gIC5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItY29sbGFwc2Uge1xuICAgIG1heC1oZWlnaHQ6IDIwMHB4O1xuICB9XG59XG5cbi5jb250YWluZXIgPiAubmF2YmFyLWhlYWRlcixcbi5jb250YWluZXIgPiAubmF2YmFyLWNvbGxhcHNlLFxuLmNvbnRhaW5lci1mbHVpZCA+IC5uYXZiYXItaGVhZGVyLFxuLmNvbnRhaW5lci1mbHVpZCA+IC5uYXZiYXItY29sbGFwc2Uge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmNvbnRhaW5lciA+IC5uYXZiYXItaGVhZGVyLFxuICAuY29udGFpbmVyID4gLm5hdmJhci1jb2xsYXBzZSxcbiAgLmNvbnRhaW5lci1mbHVpZCA+IC5uYXZiYXItaGVhZGVyLFxuICAuY29udGFpbmVyLWZsdWlkID4gLm5hdmJhci1jb2xsYXBzZSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICB9XG59XG5cbi5uYXZiYXItc3RhdGljLXRvcCB7XG4gIHotaW5kZXg6IDEwMDA7XG4gIGJvcmRlci13aWR0aDogMCAwIDFweDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXZiYXItc3RhdGljLXRvcCB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxufVxuXG4ubmF2YmFyLWZpeGVkLXRvcCxcbi5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICByaWdodDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTAzMDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXZiYXItZml4ZWQtdG9wLFxuICAubmF2YmFyLWZpeGVkLWJvdHRvbSB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxufVxuXG4ubmF2YmFyLWZpeGVkLXRvcCB7XG4gIHRvcDogMDtcbiAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4O1xufVxuXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSB7XG4gIGJvdHRvbTogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgYm9yZGVyLXdpZHRoOiAxcHggMCAwO1xufVxuXG4ubmF2YmFyLWJyYW5kIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHBhZGRpbmc6IDE1cHggMDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgaGVpZ2h0OiA1MHB4O1xufVxuXG4ubmF2YmFyLWJyYW5kOmhvdmVyLFxuLm5hdmJhci1icmFuZDpmb2N1cyB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLm5hdmJhci1icmFuZCA+IGltZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLm5hdmJhciA+IC5jb250YWluZXIgLm5hdmJhci1icmFuZCxcbiAgLm5hdmJhciA+IC5jb250YWluZXItZmx1aWQgLm5hdmJhci1icmFuZCB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbn1cblxuLm5hdmJhci10b2dnbGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsb2F0OiByaWdodDtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xuICBwYWRkaW5nOiA5cHggMTBweDtcbiAgbWFyZ2luLXRvcDogOHB4O1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4ubmF2YmFyLXRvZ2dsZTpmb2N1cyB7XG4gIG91dGxpbmU6IDA7XG59XG5cbi5uYXZiYXItdG9nZ2xlIC5pY29uLWJhciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMjJweDtcbiAgaGVpZ2h0OiAycHg7XG4gIGJvcmRlci1yYWRpdXM6IDFweDtcbn1cblxuLm5hdmJhci10b2dnbGUgLmljb24tYmFyICsgLmljb24tYmFyIHtcbiAgbWFyZ2luLXRvcDogNHB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLm5hdmJhci10b2dnbGUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLm5hdmJhci1uYXYge1xuICBtYXJnaW46IDcuNXB4IDA7XG59XG5cbi5uYXZiYXItbmF2ID4gbGkgPiBhIHtcbiAgcGFkZGluZy10b3A6IDEwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIGZsb2F0OiBub25lO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiAwO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cbiAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEsXG4gIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXIge1xuICAgIHBhZGRpbmc6IDVweCAxNXB4IDVweCAyNXB4O1xuICB9XG4gIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgfVxuICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlcixcbiAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6Zm9jdXMge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXZiYXItbmF2IHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW46IDA7XG4gIH1cbiAgLm5hdmJhci1uYXYgPiBsaSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbiAgLm5hdmJhci1uYXYgPiBsaSA+IGEge1xuICAgIHBhZGRpbmctdG9wOiAxNXB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICB9XG59XG5cbi5uYXZiYXItZm9ybSB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIHBhZGRpbmc6IDEwcHggMDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSksIDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSwgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XG4gIG1hcmdpbi10b3A6IDhweDtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLm5hdmJhci1mb3JtIC5mb3JtLWdyb3VwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG4gIC5uYXZiYXItZm9ybSAuZm9ybS1jb250cm9sIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAubmF2YmFyLWZvcm0gLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxuICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtdGFibGU7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1hZGRvbixcbiAgLm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYnRuLFxuICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wge1xuICAgIHdpZHRoOiBhdXRvO1xuICB9XG4gIC5uYXZiYXItZm9ybSAuaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAubmF2YmFyLWZvcm0gLmNvbnRyb2wtbGFiZWwge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAubmF2YmFyLWZvcm0gLnJhZGlvLFxuICAubmF2YmFyLWZvcm0gLmNoZWNrYm94IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIH1cbiAgLm5hdmJhci1mb3JtIC5yYWRpbyBsYWJlbCxcbiAgLm5hdmJhci1mb3JtIC5jaGVja2JveCBsYWJlbCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICB9XG4gIC5uYXZiYXItZm9ybSAucmFkaW8gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuICAubmF2YmFyLWZvcm0gLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICB9XG4gIC5uYXZiYXItZm9ybSAuaGFzLWZlZWRiYWNrIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgIHRvcDogMDtcbiAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgLm5hdmJhci1mb3JtIC5mb3JtLWdyb3VwIHtcbiAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gIH1cbiAgLm5hdmJhci1mb3JtIC5mb3JtLWdyb3VwOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXZiYXItZm9ybSB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgYm9yZGVyOiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgfVxufVxuXG4ubmF2YmFyLW5hdiA+IGxpID4gLmRyb3Bkb3duLW1lbnUge1xuICBtYXJnaW4tdG9wOiAwO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbn1cblxuLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1uYXYgPiBsaSA+IC5kcm9wZG93bi1tZW51IHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4O1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbn1cblxuLm5hdmJhci1idG4ge1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbn1cblxuLm5hdmJhci1idG4uYnRuLXNtLCAuYnRuLWdyb3VwLXNtID4gLm5hdmJhci1idG4uYnRuIHtcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxuLm5hdmJhci1idG4uYnRuLXhzLCAuYnRuLWdyb3VwLXhzID4gLm5hdmJhci1idG4uYnRuIHtcbiAgbWFyZ2luLXRvcDogMTRweDtcbiAgbWFyZ2luLWJvdHRvbTogMTRweDtcbn1cblxuLm5hdmJhci10ZXh0IHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbiAgbWFyZ2luLWJvdHRvbTogMTVweDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXZiYXItdGV4dCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAubmF2YmFyLWxlZnQge1xuICAgIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm5hdmJhci1yaWdodCB7XG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICB9XG4gIC5uYXZiYXItcmlnaHQgfiAubmF2YmFyLXJpZ2h0IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gIH1cbn1cblxuLm5hdmJhci1kZWZhdWx0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODtcbiAgYm9yZGVyLWNvbG9yOiAjZTdlN2U3O1xufVxuXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1icmFuZCB7XG4gIGNvbG9yOiAjNzc3O1xufVxuXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1icmFuZDpob3Zlcixcbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kOmZvY3VzIHtcbiAgY29sb3I6ICM1ZTVlNWU7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10ZXh0IHtcbiAgY29sb3I6ICM3Nzc7XG59XG5cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IGxpID4gYSB7XG4gIGNvbG9yOiAjNzc3O1xufVxuXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiBsaSA+IGE6aG92ZXIsXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiBsaSA+IGE6Zm9jdXMge1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5hY3RpdmUgPiBhLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjNTU1O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTdlN2U3O1xufVxuXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYTpob3Zlcixcbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICBjb2xvcjogI2NjYztcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZSB7XG4gIGJvcmRlci1jb2xvcjogI2RkZDtcbn1cblxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlOmhvdmVyLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDtcbn1cblxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlIC5pY29uLWJhciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM4ODg7XG59XG5cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWNvbGxhcHNlLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItZm9ybSB7XG4gIGJvcmRlci1jb2xvcjogI2U3ZTdlNztcbn1cblxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhOmhvdmVyLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U3ZTdlNztcbiAgY29sb3I6ICM1NTU7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEge1xuICAgIGNvbG9yOiAjNzc3O1xuICB9XG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlcixcbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogIzMzMztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSxcbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogIzU1NTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTdlN2U3O1xuICB9XG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGEsXG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICAgIGNvbG9yOiAjY2NjO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG59XG5cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWxpbmsge1xuICBjb2xvcjogIzc3Nztcbn1cblxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbGluazpob3ZlciB7XG4gIGNvbG9yOiAjMzMzO1xufVxuXG4ubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rIHtcbiAgY29sb3I6ICM3Nzc7XG59XG5cbi5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbms6aG92ZXIsXG4ubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICMzMzM7XG59XG5cbi5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVyLFxuLm5hdmJhci1kZWZhdWx0IC5idG4tbGlua1tkaXNhYmxlZF06Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLm5hdmJhci1kZWZhdWx0IC5idG4tbGluazpob3ZlcixcbmZpZWxkc2V0W2Rpc2FibGVkXSAubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICNjY2M7XG59XG5cbi5uYXZiYXItaW52ZXJzZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyMjI7XG4gIGJvcmRlci1jb2xvcjogIzA5MDkwOTtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQge1xuICBjb2xvcjogI2JmYmZiZjtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQ6aG92ZXIsXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZDpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdGV4dCB7XG4gIGNvbG9yOiAjYmZiZmJmO1xufVxuXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiBsaSA+IGEge1xuICBjb2xvcjogI2JmYmZiZjtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gbGkgPiBhOmhvdmVyLFxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gbGkgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAuYWN0aXZlID4gYSxcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzA5MDkwOTtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYSxcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICM0NDQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGUge1xuICBib3JkZXItY29sb3I6ICMzMzM7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZTpob3Zlcixcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1jb2xsYXBzZSxcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWZvcm0ge1xuICBib3JkZXItY29sb3I6ICMxMDEwMTA7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5vcGVuID4gYSxcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpob3Zlcixcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwOTA5MDk7XG4gIGNvbG9yOiAjZmZmO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRyb3Bkb3duLWhlYWRlciB7XG4gICAgYm9yZGVyLWNvbG9yOiAjMDkwOTA5O1xuICB9XG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSAuZGl2aWRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzA5MDkwOTtcbiAgfVxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEge1xuICAgIGNvbG9yOiAjYmZiZmJmO1xuICB9XG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlcixcbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSxcbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDkwOTA5O1xuICB9XG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGEsXG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICAgIGNvbG9yOiAjNDQ0O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG59XG5cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbmsge1xuICBjb2xvcjogI2JmYmZiZjtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbGluazpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xufVxuXG4ubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rIHtcbiAgY29sb3I6ICNiZmJmYmY7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbms6aG92ZXIsXG4ubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVyLFxuLm5hdmJhci1pbnZlcnNlIC5idG4tbGlua1tkaXNhYmxlZF06Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLm5hdmJhci1pbnZlcnNlIC5idG4tbGluazpob3ZlcixcbmZpZWxkc2V0W2Rpc2FibGVkXSAubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICM0NDQ7XG59XG5cbi5icmVhZGNydW1iIHtcbiAgcGFkZGluZzogOHB4IDE1cHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLmJyZWFkY3J1bWIgPiBsaSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLmJyZWFkY3J1bWIgPiBsaSArIGxpOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiL1xcXFwwMGEwXCI7XG4gIHBhZGRpbmc6IDAgNXB4O1xuICBjb2xvcjogI2NjYztcbn1cblxuLmJyZWFkY3J1bWIgPiAuYWN0aXZlIHtcbiAgY29sb3I6ICM5OTk7XG59XG5cbi5wYWdpbmF0aW9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIG1hcmdpbjogMjBweCAwO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi5wYWdpbmF0aW9uID4gbGkge1xuICBkaXNwbGF5OiBpbmxpbmU7XG59XG5cbi5wYWdpbmF0aW9uID4gbGkgPiBhLFxuLnBhZ2luYXRpb24gPiBsaSA+IHNwYW4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsb2F0OiBsZWZ0O1xuICBwYWRkaW5nOiA2cHggMTJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiAjM2EzOTNiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBtYXJnaW4tbGVmdDogLTFweDtcbn1cblxuLnBhZ2luYXRpb24gPiBsaTpmaXJzdC1jaGlsZCA+IGEsXG4ucGFnaW5hdGlvbiA+IGxpOmZpcnN0LWNoaWxkID4gc3BhbiB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDtcbn1cblxuLnBhZ2luYXRpb24gPiBsaTpsYXN0LWNoaWxkID4gYSxcbi5wYWdpbmF0aW9uID4gbGk6bGFzdC1jaGlsZCA+IHNwYW4ge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xufVxuXG4ucGFnaW5hdGlvbiA+IGxpID4gYTpob3Zlcixcbi5wYWdpbmF0aW9uID4gbGkgPiBhOmZvY3VzLFxuLnBhZ2luYXRpb24gPiBsaSA+IHNwYW46aG92ZXIsXG4ucGFnaW5hdGlvbiA+IGxpID4gc3Bhbjpmb2N1cyB7XG4gIHotaW5kZXg6IDM7XG4gIGNvbG9yOiAjMTQxMzE0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItY29sb3I6ICNkZGQ7XG59XG5cbi5wYWdpbmF0aW9uID4gLmFjdGl2ZSA+IGEsXG4ucGFnaW5hdGlvbiA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuLnBhZ2luYXRpb24gPiAuYWN0aXZlID4gYTpmb2N1cyxcbi5wYWdpbmF0aW9uID4gLmFjdGl2ZSA+IHNwYW4sXG4ucGFnaW5hdGlvbiA+IC5hY3RpdmUgPiBzcGFuOmhvdmVyLFxuLnBhZ2luYXRpb24gPiAuYWN0aXZlID4gc3Bhbjpmb2N1cyB7XG4gIHotaW5kZXg6IDI7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2EzOTNiO1xuICBib3JkZXItY29sb3I6ICMzYTM5M2I7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBzcGFuLFxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBzcGFuOmhvdmVyLFxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBzcGFuOmZvY3VzLFxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBhLFxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBhOmhvdmVyLFxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICM5OTk7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogI2RkZDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLnBhZ2luYXRpb24tbGcgPiBsaSA+IGEsXG4ucGFnaW5hdGlvbi1sZyA+IGxpID4gc3BhbiB7XG4gIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzO1xufVxuXG4ucGFnaW5hdGlvbi1sZyA+IGxpOmZpcnN0LWNoaWxkID4gYSxcbi5wYWdpbmF0aW9uLWxnID4gbGk6Zmlyc3QtY2hpbGQgPiBzcGFuIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG59XG5cbi5wYWdpbmF0aW9uLWxnID4gbGk6bGFzdC1jaGlsZCA+IGEsXG4ucGFnaW5hdGlvbi1sZyA+IGxpOmxhc3QtY2hpbGQgPiBzcGFuIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDtcbn1cblxuLnBhZ2luYXRpb24tc20gPiBsaSA+IGEsXG4ucGFnaW5hdGlvbi1zbSA+IGxpID4gc3BhbiB7XG4gIHBhZGRpbmc6IDVweCAxMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG5cbi5wYWdpbmF0aW9uLXNtID4gbGk6Zmlyc3QtY2hpbGQgPiBhLFxuLnBhZ2luYXRpb24tc20gPiBsaTpmaXJzdC1jaGlsZCA+IHNwYW4ge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDtcbn1cblxuLnBhZ2luYXRpb24tc20gPiBsaTpsYXN0LWNoaWxkID4gYSxcbi5wYWdpbmF0aW9uLXNtID4gbGk6bGFzdC1jaGlsZCA+IHNwYW4ge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xufVxuXG4ucGFnZXIge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIG1hcmdpbjogMjBweCAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5wYWdlcjpiZWZvcmUsXG4ucGFnZXI6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgZGlzcGxheTogdGFibGU7XG59XG5cbi5wYWdlcjphZnRlciB7XG4gIGNsZWFyOiBib3RoO1xufVxuXG4ucGFnZXIgbGkge1xuICBkaXNwbGF5OiBpbmxpbmU7XG59XG5cbi5wYWdlciBsaSA+IGEsXG4ucGFnZXIgbGkgPiBzcGFuIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiA1cHggMTRweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLXJhZGl1czogMTVweDtcbn1cblxuLnBhZ2VyIGxpID4gYTpob3Zlcixcbi5wYWdlciBsaSA+IGE6Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cbi5wYWdlciAubmV4dCA+IGEsXG4ucGFnZXIgLm5leHQgPiBzcGFuIHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuXG4ucGFnZXIgLnByZXZpb3VzID4gYSxcbi5wYWdlciAucHJldmlvdXMgPiBzcGFuIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5cbi5wYWdlciAuZGlzYWJsZWQgPiBhLFxuLnBhZ2VyIC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4ucGFnZXIgLmRpc2FibGVkID4gYTpmb2N1cyxcbi5wYWdlciAuZGlzYWJsZWQgPiBzcGFuIHtcbiAgY29sb3I6ICM5OTk7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgcGFkZGluZzogMC4yZW0gMC42ZW0gMC4zZW07XG4gIGZvbnQtc2l6ZTogNzUlO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgYm9yZGVyLXJhZGl1czogLjI1ZW07XG59XG5cbi5sYWJlbDplbXB0eSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5idG4gLmxhYmVsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0xcHg7XG59XG5cbmEubGFiZWw6aG92ZXIsXG5hLmxhYmVsOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ubGFiZWwtZGVmYXVsdCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM5OTk7XG59XG5cbi5sYWJlbC1kZWZhdWx0W2hyZWZdOmhvdmVyLFxuLmxhYmVsLWRlZmF1bHRbaHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBncmF5O1xufVxuXG4ubGFiZWwtcHJpbWFyeSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzYTM5M2I7XG59XG5cbi5sYWJlbC1wcmltYXJ5W2hyZWZdOmhvdmVyLFxuLmxhYmVsLXByaW1hcnlbaHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyMDIxO1xufVxuXG4ubGFiZWwtc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1Y2I4NWM7XG59XG5cbi5sYWJlbC1zdWNjZXNzW2hyZWZdOmhvdmVyLFxuLmxhYmVsLXN1Y2Nlc3NbaHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ5ZDQ0O1xufVxuXG4ubGFiZWwtaW5mbyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1YmMwZGU7XG59XG5cbi5sYWJlbC1pbmZvW2hyZWZdOmhvdmVyLFxuLmxhYmVsLWluZm9baHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzFiMGQ1O1xufVxuXG4ubGFiZWwtd2FybmluZyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGFkNGU7XG59XG5cbi5sYWJlbC13YXJuaW5nW2hyZWZdOmhvdmVyLFxuLmxhYmVsLXdhcm5pbmdbaHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWM5NzFmO1xufVxuXG4ubGFiZWwtZGFuZ2VyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5NTM0Zjtcbn1cblxuLmxhYmVsLWRhbmdlcltocmVmXTpob3Zlcixcbi5sYWJlbC1kYW5nZXJbaHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzkzMDJjO1xufVxuXG4uYmFkZ2Uge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1pbi13aWR0aDogMTBweDtcbiAgcGFkZGluZzogM3B4IDdweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICNmZmY7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICM5OTk7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG59XG5cbi5iYWRnZTplbXB0eSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5idG4gLmJhZGdlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0xcHg7XG59XG5cbi5idG4teHMgLmJhZGdlLFxuLmJ0bi1ncm91cC14cyA+IC5idG4gLmJhZGdlLFxuLmJ0bi1ncm91cC14cyA+IC5idG4gLmJhZGdlIHtcbiAgdG9wOiAwO1xuICBwYWRkaW5nOiAxcHggNXB4O1xufVxuXG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSA+IC5iYWRnZSxcbi5uYXYtcGlsbHMgPiAuYWN0aXZlID4gYSA+IC5iYWRnZSB7XG4gIGNvbG9yOiAjM2EzOTNiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4ubGlzdC1ncm91cC1pdGVtID4gLmJhZGdlIHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuXG4ubGlzdC1ncm91cC1pdGVtID4gLmJhZGdlICsgLmJhZGdlIHtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG59XG5cbi5uYXYtcGlsbHMgPiBsaSA+IGEgPiAuYmFkZ2Uge1xuICBtYXJnaW4tbGVmdDogM3B4O1xufVxuXG5hLmJhZGdlOmhvdmVyLFxuYS5iYWRnZTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmp1bWJvdHJvbiB7XG4gIHBhZGRpbmctdG9wOiAzMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMzBweDtcbiAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cbi5qdW1ib3Ryb24gaDEsXG4uanVtYm90cm9uIC5oMSB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG4uanVtYm90cm9uIHAge1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICBmb250LXNpemU6IDIxcHg7XG4gIGZvbnQtd2VpZ2h0OiAyMDA7XG59XG5cbi5qdW1ib3Ryb24gPiBociB7XG4gIGJvcmRlci10b3AtY29sb3I6ICNlNmU2ZTY7XG59XG5cbi5jb250YWluZXIgLmp1bWJvdHJvbixcbi5jb250YWluZXItZmx1aWQgLmp1bWJvdHJvbiB7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLmp1bWJvdHJvbiAuY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA5OTJweCkge1xuICAuanVtYm90cm9uIHtcbiAgICBwYWRkaW5nLXRvcDogNDhweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogNDhweDtcbiAgfVxuICAuY29udGFpbmVyIC5qdW1ib3Ryb24sXG4gIC5jb250YWluZXItZmx1aWQgLmp1bWJvdHJvbiB7XG4gICAgcGFkZGluZy1sZWZ0OiA2MHB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDYwcHg7XG4gIH1cbiAgLmp1bWJvdHJvbiBoMSxcbiAgLmp1bWJvdHJvbiAuaDEge1xuICAgIGZvbnQtc2l6ZTogNjNweDtcbiAgfVxufVxuXG4udGh1bWJuYWlsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDRweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYm9yZGVyIDAuMnMgZWFzZS1pbi1vdXQ7XG4gIC1vLXRyYW5zaXRpb246IGJvcmRlciAwLjJzIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBib3JkZXIgMC4ycyBlYXNlLWluLW91dDtcbn1cblxuLnRodW1ibmFpbCA+IGltZyxcbi50aHVtYm5haWwgYSA+IGltZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbn1cblxuLnRodW1ibmFpbCAuY2FwdGlvbiB7XG4gIHBhZGRpbmc6IDlweDtcbiAgY29sb3I6ICMyMjI7XG59XG5cbmEudGh1bWJuYWlsOmhvdmVyLFxuYS50aHVtYm5haWw6Zm9jdXMsXG5hLnRodW1ibmFpbC5hY3RpdmUge1xuICBib3JkZXItY29sb3I6ICMzYTM5M2I7XG59XG5cbi5hbGVydCB7XG4gIHBhZGRpbmc6IDhweCAxNXB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLmFsZXJ0IGg0IHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbi5hbGVydCAuYWxlcnQtbGluayB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uYWxlcnQgPiBwLFxuLmFsZXJ0ID4gdWwge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4uYWxlcnQgPiBwICsgcCB7XG4gIG1hcmdpbi10b3A6IDVweDtcbn1cblxuLmFsZXJ0LWRpc21pc3NhYmxlLCAuYWxlcnQtZGlzbWlzc2libGUge1xuICBwYWRkaW5nLXJpZ2h0OiA4cHggMTVweDIwO1xufVxuXG4uYWxlcnQtZGlzbWlzc2FibGUgLmNsb3NlLCAuYWxlcnQtZGlzbWlzc2libGUgLmNsb3NlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0ycHg7XG4gIHJpZ2h0OiAtMjFweDtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbi5hbGVydC1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RhZTZjYjtcbiAgYm9yZGVyLWNvbG9yOiAjOGNjNjNmO1xuICBjb2xvcjogIzZjNmM2Yztcbn1cblxuLmFsZXJ0LXN1Y2Nlc3MgaHIge1xuICBib3JkZXItdG9wLWNvbG9yOiAjN2ZiNjM2O1xufVxuXG4uYWxlcnQtc3VjY2VzcyAuYWxlcnQtbGluayB7XG4gIGNvbG9yOiAjNTI1MjUyO1xufVxuXG4uYWxlcnQtaW5mbyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7XG4gIGJvcmRlci1jb2xvcjogIzAwOGFiZjtcbiAgY29sb3I6ICM2YzZjNmM7XG59XG5cbi5hbGVydC1pbmZvIGhyIHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzAwNzhhNjtcbn1cblxuLmFsZXJ0LWluZm8gLmFsZXJ0LWxpbmsge1xuICBjb2xvcjogIzUyNTI1Mjtcbn1cblxuLmFsZXJ0LXdhcm5pbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFlM2MyO1xuICBib3JkZXItY29sb3I6ICNmZGI4MTM7XG4gIGNvbG9yOiAjNmM2YzZjO1xufVxuXG4uYWxlcnQtd2FybmluZyBociB7XG4gIGJvcmRlci10b3AtY29sb3I6ICNmNGFkMDI7XG59XG5cbi5hbGVydC13YXJuaW5nIC5hbGVydC1saW5rIHtcbiAgY29sb3I6ICM1MjUyNTI7XG59XG5cbi5hbGVydC1kYW5nZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWFjM2M3O1xuICBib3JkZXItY29sb3I6ICNkOTE4MmQ7XG4gIGNvbG9yOiAjNmM2YzZjO1xufVxuXG4uYWxlcnQtZGFuZ2VyIGhyIHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2MyMTUyODtcbn1cblxuLmFsZXJ0LWRhbmdlciAuYWxlcnQtbGluayB7XG4gIGNvbG9yOiAjNTI1MjUyO1xufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXMge1xuICBmcm9tIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA0MHB4IDA7XG4gIH1cbiAgdG8ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHtcbiAgZnJvbSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNDBweCAwO1xuICB9XG4gIHRvIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XG4gIH1cbn1cblxuLnByb2dyZXNzIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgaGVpZ2h0OiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cblxuLnByb2dyZXNzLWJhciB7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNhMzkzYjtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICAtd2Via2l0LXRyYW5zaXRpb246IHdpZHRoIDAuNnMgZWFzZTtcbiAgLW8tdHJhbnNpdGlvbjogd2lkdGggMC42cyBlYXNlO1xuICB0cmFuc2l0aW9uOiB3aWR0aCAwLjZzIGVhc2U7XG59XG5cbi5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXIsXG4ucHJvZ3Jlc3MtYmFyLXN0cmlwZWQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtc2l6ZTogNDBweCA0MHB4O1xufVxuXG4ucHJvZ3Jlc3MuYWN0aXZlIC5wcm9ncmVzcy1iYXIsXG4ucHJvZ3Jlc3MtYmFyLmFjdGl2ZSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uOiBwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7XG4gIC1vLWFuaW1hdGlvbjogcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlO1xuICBhbmltYXRpb246IHByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTtcbn1cblxuLnByb2dyZXNzLWJhci1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVjYjg1Yztcbn1cblxuLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhci1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xufVxuXG4ucHJvZ3Jlc3MtYmFyLWluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWJjMGRlO1xufVxuXG4ucHJvZ3Jlc3Mtc3RyaXBlZCAucHJvZ3Jlc3MtYmFyLWluZm8ge1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG59XG5cbi5wcm9ncmVzcy1iYXItd2FybmluZyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGFkNGU7XG59XG5cbi5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXItd2FybmluZyB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbn1cblxuLnByb2dyZXNzLWJhci1kYW5nZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDk1MzRmO1xufVxuXG4ucHJvZ3Jlc3Mtc3RyaXBlZCAucHJvZ3Jlc3MtYmFyLWRhbmdlciB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbn1cblxuLm1lZGlhIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLm1lZGlhOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cblxuLm1lZGlhLFxuLm1lZGlhLWJvZHkge1xuICB6b29tOiAxO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ubWVkaWEtYm9keSB7XG4gIHdpZHRoOiAxMDAwMHB4O1xufVxuXG4ubWVkaWEtb2JqZWN0IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5tZWRpYS1vYmplY3QuaW1nLXRodW1ibmFpbCB7XG4gIG1heC13aWR0aDogbm9uZTtcbn1cblxuLm1lZGlhLXJpZ2h0LFxuLm1lZGlhID4gLnB1bGwtcmlnaHQge1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG59XG5cbi5tZWRpYS1sZWZ0LFxuLm1lZGlhID4gLnB1bGwtbGVmdCB7XG4gIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG59XG5cbi5tZWRpYS1sZWZ0LFxuLm1lZGlhLXJpZ2h0LFxuLm1lZGlhLWJvZHkge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuXG4ubWVkaWEtbWlkZGxlIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLm1lZGlhLWJvdHRvbSB7XG4gIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG59XG5cbi5tZWRpYS1oZWFkaW5nIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xufVxuXG4ubWVkaWEtbGlzdCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxuLmxpc3QtZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBwYWRkaW5nLWxlZnQ6IDA7XG59XG5cbi5saXN0LWdyb3VwLWl0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAxMHB4IDE1cHg7XG4gIG1hcmdpbi1ib3R0b206IC0xcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG59XG5cbi5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG59XG5cbi5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDtcbn1cblxuYS5saXN0LWdyb3VwLWl0ZW0sXG5idXR0b24ubGlzdC1ncm91cC1pdGVtIHtcbiAgY29sb3I6ICM1NTU7XG59XG5cbmEubGlzdC1ncm91cC1pdGVtIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0gLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHtcbiAgY29sb3I6ICMzMzM7XG59XG5cbmEubGlzdC1ncm91cC1pdGVtOmhvdmVyLFxuYS5saXN0LWdyb3VwLWl0ZW06Zm9jdXMsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbTpmb2N1cyB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6ICM1NTU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG59XG5cbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0ge1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZCxcbi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6aG92ZXIsXG4ubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICM5OTk7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsXG4ubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG4ubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCxcbi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LFxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpmb2N1cyAubGlzdC1ncm91cC1pdGVtLXRleHQge1xuICBjb2xvcjogIzk5OTtcbn1cblxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUsXG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3Zlcixcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIHtcbiAgei1pbmRleDogMjtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzYTM5M2I7XG4gIGJvcmRlci1jb2xvcjogIzNhMzkzYjtcbn1cblxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nID4gc21hbGwsXG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiAuc21hbGwsXG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsXG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiBzbWFsbCxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmhvdmVyIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyA+IC5zbWFsbCxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyA+IHNtYWxsLFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nID4gLnNtYWxsIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmhvdmVyIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7XG4gIGNvbG9yOiAjYTA5ZWEyO1xufVxuXG4ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3Mge1xuICBjb2xvcjogIzZjNmM2YztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RhZTZjYjtcbn1cblxuYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyB7XG4gIGNvbG9yOiAjNmM2YzZjO1xufVxuXG5hLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cblxuYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzczpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3M6Zm9jdXMsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3M6aG92ZXIsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3M6Zm9jdXMge1xuICBjb2xvcjogIzZjNmM2YztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NlZGViYTtcbn1cblxuYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmUsXG5hLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZTpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlOmZvY3VzLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZSxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmU6aG92ZXIsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2YzZjNmM7XG4gIGJvcmRlci1jb2xvcjogIzZjNmM2Yztcbn1cblxuLmxpc3QtZ3JvdXAtaXRlbS1pbmZvIHtcbiAgY29sb3I6ICM2YzZjNmM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7XG59XG5cbmEubGlzdC1ncm91cC1pdGVtLWluZm8sXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm8ge1xuICBjb2xvcjogIzZjNmM2Yztcbn1cblxuYS5saXN0LWdyb3VwLWl0ZW0taW5mbyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm8gLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbmEubGlzdC1ncm91cC1pdGVtLWluZm86aG92ZXIsXG5hLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmZvY3VzLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmZvY3VzIHtcbiAgY29sb3I6ICM2YzZjNmM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjNGUzZjM7XG59XG5cbmEubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlLFxuYS5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmU6aG92ZXIsXG5hLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZTpmb2N1cyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmUsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM2YzZjO1xuICBib3JkZXItY29sb3I6ICM2YzZjNmM7XG59XG5cbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZyB7XG4gIGNvbG9yOiAjNmM2YzZjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFlM2MyO1xufVxuXG5hLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nIHtcbiAgY29sb3I6ICM2YzZjNmM7XG59XG5cbmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG5hLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nOmhvdmVyLFxuYS5saXN0LWdyb3VwLWl0ZW0td2FybmluZzpmb2N1cyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZzpob3ZlcixcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZzpmb2N1cyB7XG4gIGNvbG9yOiAjNmM2YzZjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNkOWFkO1xufVxuXG5hLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZSxcbmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlOmhvdmVyLFxuYS5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5hY3RpdmU6Zm9jdXMsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZTpob3ZlcixcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5hY3RpdmU6Zm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZjNmM2YztcbiAgYm9yZGVyLWNvbG9yOiAjNmM2YzZjO1xufVxuXG4ubGlzdC1ncm91cC1pdGVtLWRhbmdlciB7XG4gIGNvbG9yOiAjNmM2YzZjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWFjM2M3O1xufVxuXG5hLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlciB7XG4gIGNvbG9yOiAjNmM2YzZjO1xufVxuXG5hLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbmEubGlzdC1ncm91cC1pdGVtLWRhbmdlcjpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLWRhbmdlcjpmb2N1cyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXI6Zm9jdXMge1xuICBjb2xvcjogIzZjNmM2YztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UzYjBiNTtcbn1cblxuYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmFjdGl2ZSxcbmEubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmU6aG92ZXIsXG5hLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlOmZvY3VzLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2YzZjNmM7XG4gIGJvcmRlci1jb2xvcjogIzZjNmM2Yztcbn1cblxuLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xufVxuXG4ubGlzdC1ncm91cC1pdGVtLXRleHQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBsaW5lLWhlaWdodDogMS4zO1xufVxuXG4ucGFuZWwge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLnBhbmVsLWJvZHkge1xuICBwYWRkaW5nOiAxNXB4O1xufVxuXG4ucGFuZWwtYm9keTpiZWZvcmUsXG4ucGFuZWwtYm9keTphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLnBhbmVsLWJvZHk6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuLnBhbmVsLWhlYWRpbmcge1xuICBwYWRkaW5nOiAxMHB4IDE1cHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDJweDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMnB4O1xufVxuXG4ucGFuZWwtaGVhZGluZyA+IC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbi5wYW5lbC10aXRsZSB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbi5wYW5lbC10aXRsZSA+IGEsXG4ucGFuZWwtdGl0bGUgPiBzbWFsbCxcbi5wYW5lbC10aXRsZSA+IC5zbWFsbCxcbi5wYW5lbC10aXRsZSA+IHNtYWxsID4gYSxcbi5wYW5lbC10aXRsZSA+IC5zbWFsbCA+IGEge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cblxuLnBhbmVsLWZvb3RlciB7XG4gIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDJweDtcbn1cblxuLnBhbmVsID4gLmxpc3QtZ3JvdXAsXG4ucGFuZWwgPiAucGFuZWwtY29sbGFwc2UgPiAubGlzdC1ncm91cCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5wYW5lbCA+IC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0sXG4ucGFuZWwgPiAucGFuZWwtY29sbGFwc2UgPiAubGlzdC1ncm91cCAubGlzdC1ncm91cC1pdGVtIHtcbiAgYm9yZGVyLXdpZHRoOiAxcHggMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLnBhbmVsID4gLmxpc3QtZ3JvdXA6Zmlyc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwOmZpcnN0LWNoaWxkIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wOiAwO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMnB4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAycHg7XG59XG5cbi5wYW5lbCA+IC5saXN0LWdyb3VwOmxhc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnBhbmVsLWNvbGxhcHNlID4gLmxpc3QtZ3JvdXA6bGFzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xuICBib3JkZXItYm90dG9tOiAwO1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMnB4O1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAycHg7XG59XG5cbi5wYW5lbCA+IC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLmxpc3QtZ3JvdXAgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xufVxuXG4ucGFuZWwtaGVhZGluZyArIC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLXdpZHRoOiAwO1xufVxuXG4ubGlzdC1ncm91cCArIC5wYW5lbC1mb290ZXIge1xuICBib3JkZXItdG9wLXdpZHRoOiAwO1xufVxuXG4ucGFuZWwgPiAudGFibGUsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSxcbi5wYW5lbCA+IC5wYW5lbC1jb2xsYXBzZSA+IC50YWJsZSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5wYW5lbCA+IC50YWJsZSBjYXB0aW9uLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgY2FwdGlvbixcbi5wYW5lbCA+IC5wYW5lbC1jb2xsYXBzZSA+IC50YWJsZSBjYXB0aW9uIHtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xufVxuXG4ucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAycHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDJweDtcbn1cblxuLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAycHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAycHg7XG59XG5cbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAycHg7XG59XG5cbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDJweDtcbn1cblxuLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMnB4O1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAycHg7XG59XG5cbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDJweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDJweDtcbn1cblxuLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMnB4O1xufVxuXG4ucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDJweDtcbn1cblxuLnBhbmVsID4gLnBhbmVsLWJvZHkgKyAudGFibGUsXG4ucGFuZWwgPiAucGFuZWwtYm9keSArIC50YWJsZS1yZXNwb25zaXZlLFxuLnBhbmVsID4gLnRhYmxlICsgLnBhbmVsLWJvZHksXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSArIC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG59XG5cbi5wYW5lbCA+IC50YWJsZSA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGgsXG4ucGFuZWwgPiAudGFibGUgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRkIHtcbiAgYm9yZGVyLXRvcDogMDtcbn1cblxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQge1xuICBib3JkZXI6IDA7XG59XG5cbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci1sZWZ0OiAwO1xufVxuXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkOmxhc3QtY2hpbGQge1xuICBib3JkZXItcmlnaHQ6IDA7XG59XG5cbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpmaXJzdC1jaGlsZCA+IHRoIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cblxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpsYXN0LWNoaWxkID4gdGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmxhc3QtY2hpbGQgPiB0aCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHI6bGFzdC1jaGlsZCA+IHRkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0cjpsYXN0LWNoaWxkID4gdGgsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6bGFzdC1jaGlsZCA+IHRkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmxhc3QtY2hpbGQgPiB0aCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0cjpsYXN0LWNoaWxkID4gdGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHI6bGFzdC1jaGlsZCA+IHRoIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cblxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUge1xuICBib3JkZXI6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5wYW5lbC1ncm91cCB7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi5wYW5lbC1ncm91cCAucGFuZWwge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi5wYW5lbC1ncm91cCAucGFuZWwgKyAucGFuZWwge1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG5cbi5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZyB7XG4gIGJvcmRlci1ib3R0b206IDA7XG59XG5cbi5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5LFxuLnBhbmVsLWdyb3VwIC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLmxpc3QtZ3JvdXAge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbn1cblxuLnBhbmVsLWdyb3VwIC5wYW5lbC1mb290ZXIge1xuICBib3JkZXItdG9wOiAwO1xufVxuXG4ucGFuZWwtZ3JvdXAgLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSAucGFuZWwtYm9keSB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xufVxuXG4ucGFuZWwtZGVmYXVsdCB7XG4gIGJvcmRlci1jb2xvcjogI2RkZDtcbn1cblxuLnBhbmVsLWRlZmF1bHQgPiAucGFuZWwtaGVhZGluZyB7XG4gIGNvbG9yOiAjMjIyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBib3JkZXItY29sb3I6ICNkZGQ7XG59XG5cbi5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWhlYWRpbmcgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci10b3AtY29sb3I6ICNkZGQ7XG59XG5cbi5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWhlYWRpbmcgLmJhZGdlIHtcbiAgY29sb3I6ICNmNWY1ZjU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyMjI7XG59XG5cbi5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2RkZDtcbn1cblxuLnBhbmVsLXByaW1hcnkge1xuICBib3JkZXItY29sb3I6ICMzYTM5M2I7XG59XG5cbi5wYW5lbC1wcmltYXJ5ID4gLnBhbmVsLWhlYWRpbmcge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNhMzkzYjtcbiAgYm9yZGVyLWNvbG9yOiAjM2EzOTNiO1xufVxuXG4ucGFuZWwtcHJpbWFyeSA+IC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkge1xuICBib3JkZXItdG9wLWNvbG9yOiAjM2EzOTNiO1xufVxuXG4ucGFuZWwtcHJpbWFyeSA+IC5wYW5lbC1oZWFkaW5nIC5iYWRnZSB7XG4gIGNvbG9yOiAjM2EzOTNiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4ucGFuZWwtcHJpbWFyeSA+IC5wYW5lbC1mb290ZXIgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICMzYTM5M2I7XG59XG5cbi5wYW5lbC1zdWNjZXNzIHtcbiAgYm9yZGVyLWNvbG9yOiAjOGNjNjNmO1xufVxuXG4ucGFuZWwtc3VjY2VzcyA+IC5wYW5lbC1oZWFkaW5nIHtcbiAgY29sb3I6ICM2YzZjNmM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkYWU2Y2I7XG4gIGJvcmRlci1jb2xvcjogIzhjYzYzZjtcbn1cblxuLnBhbmVsLXN1Y2Nlc3MgPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzhjYzYzZjtcbn1cblxuLnBhbmVsLXN1Y2Nlc3MgPiAucGFuZWwtaGVhZGluZyAuYmFkZ2Uge1xuICBjb2xvcjogI2RhZTZjYjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZjNmM2Yztcbn1cblxuLnBhbmVsLXN1Y2Nlc3MgPiAucGFuZWwtZm9vdGVyICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkge1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjOGNjNjNmO1xufVxuXG4ucGFuZWwtaW5mbyB7XG4gIGJvcmRlci1jb2xvcjogIzAwOGFiZjtcbn1cblxuLnBhbmVsLWluZm8gPiAucGFuZWwtaGVhZGluZyB7XG4gIGNvbG9yOiAjNmM2YzZjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDllZGY3O1xuICBib3JkZXItY29sb3I6ICMwMDhhYmY7XG59XG5cbi5wYW5lbC1pbmZvID4gLnBhbmVsLWhlYWRpbmcgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci10b3AtY29sb3I6ICMwMDhhYmY7XG59XG5cbi5wYW5lbC1pbmZvID4gLnBhbmVsLWhlYWRpbmcgLmJhZGdlIHtcbiAgY29sb3I6ICNkOWVkZjc7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2YzZjNmM7XG59XG5cbi5wYW5lbC1pbmZvID4gLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwOGFiZjtcbn1cblxuLnBhbmVsLXdhcm5pbmcge1xuICBib3JkZXItY29sb3I6ICNmZGI4MTM7XG59XG5cbi5wYW5lbC13YXJuaW5nID4gLnBhbmVsLWhlYWRpbmcge1xuICBjb2xvcjogIzZjNmM2YztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxZTNjMjtcbiAgYm9yZGVyLWNvbG9yOiAjZmRiODEzO1xufVxuXG4ucGFuZWwtd2FybmluZyA+IC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkge1xuICBib3JkZXItdG9wLWNvbG9yOiAjZmRiODEzO1xufVxuXG4ucGFuZWwtd2FybmluZyA+IC5wYW5lbC1oZWFkaW5nIC5iYWRnZSB7XG4gIGNvbG9yOiAjZjFlM2MyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM2YzZjO1xufVxuXG4ucGFuZWwtd2FybmluZyA+IC5wYW5lbC1mb290ZXIgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZGI4MTM7XG59XG5cbi5wYW5lbC1kYW5nZXIge1xuICBib3JkZXItY29sb3I6ICNkOTE4MmQ7XG59XG5cbi5wYW5lbC1kYW5nZXIgPiAucGFuZWwtaGVhZGluZyB7XG4gIGNvbG9yOiAjNmM2YzZjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWFjM2M3O1xuICBib3JkZXItY29sb3I6ICNkOTE4MmQ7XG59XG5cbi5wYW5lbC1kYW5nZXIgPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2Q5MTgyZDtcbn1cblxuLnBhbmVsLWRhbmdlciA+IC5wYW5lbC1oZWFkaW5nIC5iYWRnZSB7XG4gIGNvbG9yOiAjZWFjM2M3O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM2YzZjO1xufVxuXG4ucGFuZWwtZGFuZ2VyID4gLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2Q5MTgyZDtcbn1cblxuLmVtYmVkLXJlc3BvbnNpdmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5lbWJlZC1yZXNwb25zaXZlIC5lbWJlZC1yZXNwb25zaXZlLWl0ZW0sXG4uZW1iZWQtcmVzcG9uc2l2ZSBpZnJhbWUsXG4uZW1iZWQtcmVzcG9uc2l2ZSBlbWJlZCxcbi5lbWJlZC1yZXNwb25zaXZlIG9iamVjdCxcbi5lbWJlZC1yZXNwb25zaXZlIHZpZGVvIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyOiAwO1xufVxuXG4uZW1iZWQtcmVzcG9uc2l2ZS0xNmJ5OSB7XG4gIHBhZGRpbmctYm90dG9tOiA1Ni4yNSU7XG59XG5cbi5lbWJlZC1yZXNwb25zaXZlLTRieTMge1xuICBwYWRkaW5nLWJvdHRvbTogNzUlO1xufVxuXG4ud2VsbCB7XG4gIG1pbi1oZWlnaHQ6IDIwcHg7XG4gIHBhZGRpbmc6IDE5cHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlM2UzZTM7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG5cbi53ZWxsIGJsb2NrcXVvdGUge1xuICBib3JkZXItY29sb3I6ICNkZGQ7XG4gIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cblxuLndlbGwtbGcge1xuICBwYWRkaW5nOiAyNHB4O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi53ZWxsLXNtIHtcbiAgcGFkZGluZzogOXB4O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi5jbG9zZSB7XG4gIGZsb2F0OiByaWdodDtcbiAgZm9udC1zaXplOiAyMXB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGNvbG9yOiAjMDAwO1xuICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjZmZmO1xuICBvcGFjaXR5OiAwLjI7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT0yMCk7XG59XG5cbi5jbG9zZTpob3Zlcixcbi5jbG9zZTpmb2N1cyB7XG4gIGNvbG9yOiAjMDAwO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgb3BhY2l0eTogMC41O1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApO1xufVxuXG5idXR0b24uY2xvc2Uge1xuICBwYWRkaW5nOiAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IDA7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuLm1vZGFsLW9wZW4ge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ubW9kYWwge1xuICBkaXNwbGF5OiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTA1MDtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICBvdXRsaW5lOiAwO1xufVxuXG4ubW9kYWwuZmFkZSAubW9kYWwtZGlhbG9nIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjUlKTtcbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjUlKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcyBlYXNlLW91dDtcbiAgLW1vei10cmFuc2l0aW9uOiAtbW96LXRyYW5zZm9ybSAwLjNzIGVhc2Utb3V0O1xuICAtby10cmFuc2l0aW9uOiAtby10cmFuc2Zvcm0gMC4zcyBlYXNlLW91dDtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XG59XG5cbi5tb2RhbC5pbiAubW9kYWwtZGlhbG9nIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG59XG5cbi5tb2RhbC1vcGVuIC5tb2RhbCB7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cblxuLm1vZGFsLWRpYWxvZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IGF1dG87XG4gIG1hcmdpbjogMTBweDtcbn1cblxuLm1vZGFsLWNvbnRlbnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTcwLCAxNzAsIDE3MCwgMC4zKTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgM3B4IDlweCByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gIGJveC1zaGFkb3c6IDAgM3B4IDlweCByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIG91dGxpbmU6IDA7XG59XG5cbi5tb2RhbC1iYWNrZHJvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxMDQwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4ubW9kYWwtYmFja2Ryb3AuZmFkZSB7XG4gIG9wYWNpdHk6IDA7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT0wKTtcbn1cblxuLm1vZGFsLWJhY2tkcm9wLmluIHtcbiAgb3BhY2l0eTogMC41O1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApO1xufVxuXG4ubW9kYWwtaGVhZGVyIHtcbiAgcGFkZGluZzogMjdweCAxNHB4IDE0cHggMzBweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBtaW4taGVpZ2h0OiAyN3B4IDE0cHggMTRweCAzMHB4MjNweDtcbn1cblxuLm1vZGFsLWhlYWRlciAuY2xvc2Uge1xuICBtYXJnaW4tdG9wOiAtMnB4O1xufVxuXG4ubW9kYWwtdGl0bGUge1xuICBtYXJnaW46IDA7XG4gIGxpbmUtaGVpZ2h0OiAyM3B4O1xufVxuXG4ubW9kYWwtYm9keSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogMjBweCAzMHB4O1xufVxuXG4ubW9kYWwtZm9vdGVyIHtcbiAgcGFkZGluZzogMjBweCAzMHB4O1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xufVxuXG4ubW9kYWwtZm9vdGVyOmJlZm9yZSxcbi5tb2RhbC1mb290ZXI6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgZGlzcGxheTogdGFibGU7XG59XG5cbi5tb2RhbC1mb290ZXI6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuLm1vZGFsLWZvb3RlciAuYnRuICsgLmJ0biB7XG4gIG1hcmdpbi1sZWZ0OiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5tb2RhbC1mb290ZXIgLmJ0bi1ncm91cCAuYnRuICsgLmJ0biB7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuXG4ubW9kYWwtZm9vdGVyIC5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG5cbi5tb2RhbC1zY3JvbGxiYXItbWVhc3VyZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtOTk5OXB4O1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBvdmVyZmxvdzogc2Nyb2xsO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLm1vZGFsLWRpYWxvZyB7XG4gICAgd2lkdGg6IDgyNHB4O1xuICAgIG1hcmdpbjogMzBweCBhdXRvO1xuICB9XG4gIC5tb2RhbC1jb250ZW50IHtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjUpO1xuICAgIGJveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjUpO1xuICB9XG4gIC5tb2RhbC1zbSB7XG4gICAgd2lkdGg6IDUyNHB4O1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLm1vZGFsLWxnIHtcbiAgICB3aWR0aDogMTEyNHB4O1xuICB9XG59XG5cbi50b29sdGlwIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxMDcwO1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhTmV1ZU1lZGl1bVwiLCBcIkhlbHZldGljYU5ldWUtTWVkaXVtXCIsIFwiSGVsdmV0aWNhIE5ldWUgTWVkaXVtXCIsIFwiSGVsdmV0aWNhTmV1ZVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIFwiTHVjaWRhIEdyYW5kZVwiLCBzYW5zLXNlcmlmO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XG4gIGxpbmUtYnJlYWs6IGF1dG87XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgdGV4dC1hbGlnbjogc3RhcnQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICB3b3JkLWJyZWFrOiBub3JtYWw7XG4gIHdvcmQtc3BhY2luZzogbm9ybWFsO1xuICB3b3JkLXdyYXA6IG5vcm1hbDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBvcGFjaXR5OiAwO1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MCk7XG59XG5cbi50b29sdGlwLmluIHtcbiAgb3BhY2l0eTogMC45O1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9OTApO1xufVxuXG4udG9vbHRpcC50b3Age1xuICBtYXJnaW4tdG9wOiAtM3B4O1xuICBwYWRkaW5nOiA1cHggMDtcbn1cblxuLnRvb2x0aXAucmlnaHQge1xuICBtYXJnaW4tbGVmdDogM3B4O1xuICBwYWRkaW5nOiAwIDVweDtcbn1cblxuLnRvb2x0aXAuYm90dG9tIHtcbiAgbWFyZ2luLXRvcDogM3B4O1xuICBwYWRkaW5nOiA1cHggMDtcbn1cblxuLnRvb2x0aXAubGVmdCB7XG4gIG1hcmdpbi1sZWZ0OiAtM3B4O1xuICBwYWRkaW5nOiAwIDVweDtcbn1cblxuLnRvb2x0aXAtaW5uZXIge1xuICBtYXgtd2lkdGg6IDIwMHB4O1xuICBwYWRkaW5nOiAzcHggOHB4O1xuICBjb2xvcjogI2ZmZjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi50b29sdGlwLWFycm93IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xufVxuXG4udG9vbHRpcC50b3AgLnRvb2x0aXAtYXJyb3cge1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gIGJvcmRlci13aWR0aDogNXB4IDVweCAwO1xuICBib3JkZXItdG9wLWNvbG9yOiAjMDAwO1xufVxuXG4udG9vbHRpcC50b3AtbGVmdCAudG9vbHRpcC1hcnJvdyB7XG4gIGJvdHRvbTogMDtcbiAgcmlnaHQ6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDA7XG4gIGJvcmRlci10b3AtY29sb3I6ICMwMDA7XG59XG5cbi50b29sdGlwLnRvcC1yaWdodCAudG9vbHRpcC1hcnJvdyB7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogNXB4O1xuICBtYXJnaW4tYm90dG9tOiAtNXB4O1xuICBib3JkZXItd2lkdGg6IDVweCA1cHggMDtcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzAwMDtcbn1cblxuLnRvb2x0aXAucmlnaHQgLnRvb2x0aXAtYXJyb3cge1xuICB0b3A6IDUwJTtcbiAgbGVmdDogMDtcbiAgbWFyZ2luLXRvcDogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDVweCAwO1xuICBib3JkZXItcmlnaHQtY29sb3I6ICMwMDA7XG59XG5cbi50b29sdGlwLmxlZnQgLnRvb2x0aXAtYXJyb3cge1xuICB0b3A6IDUwJTtcbiAgcmlnaHQ6IDA7XG4gIG1hcmdpbi10b3A6IC01cHg7XG4gIGJvcmRlci13aWR0aDogNXB4IDAgNXB4IDVweDtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMDA7XG59XG5cbi50b29sdGlwLmJvdHRvbSAudG9vbHRpcC1hcnJvdyB7XG4gIHRvcDogMDtcbiAgbGVmdDogNTAlO1xuICBtYXJnaW4tbGVmdDogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiAwIDVweCA1cHg7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICMwMDA7XG59XG5cbi50b29sdGlwLmJvdHRvbS1sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgdG9wOiAwO1xuICByaWdodDogNXB4O1xuICBtYXJnaW4tdG9wOiAtNXB4O1xuICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDtcbn1cblxuLnRvb2x0aXAuYm90dG9tLXJpZ2h0IC50b29sdGlwLWFycm93IHtcbiAgdG9wOiAwO1xuICBsZWZ0OiA1cHg7XG4gIG1hcmdpbi10b3A6IC01cHg7XG4gIGJvcmRlci13aWR0aDogMCA1cHggNXB4O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjMDAwO1xufVxuXG4ucG9wb3ZlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxMDYwO1xuICBkaXNwbGF5OiBub25lO1xuICBtYXgtd2lkdGg6IDI3NnB4O1xuICBwYWRkaW5nOiAxcHg7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYU5ldWVNZWRpdW1cIiwgXCJIZWx2ZXRpY2FOZXVlLU1lZGl1bVwiLCBcIkhlbHZldGljYSBOZXVlIE1lZGl1bVwiLCBcIkhlbHZldGljYU5ldWVcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBcIkx1Y2lkYSBHcmFuZGVcIiwgc2Fucy1zZXJpZjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICBsaW5lLWJyZWFrOiBhdXRvO1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHRleHQtYWxpZ246IHN0YXJ0O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRleHQtc2hhZG93OiBub25lO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgd29yZC1icmVhazogbm9ybWFsO1xuICB3b3JkLXNwYWNpbmc6IG5vcm1hbDtcbiAgd29yZC13cmFwOiBub3JtYWw7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjIpO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIGJveC1zaGFkb3c6IDAgNXB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuXG4ucG9wb3Zlci50b3Age1xuICBtYXJnaW4tdG9wOiAtMTBweDtcbn1cblxuLnBvcG92ZXIucmlnaHQge1xuICBtYXJnaW4tbGVmdDogMTBweDtcbn1cblxuLnBvcG92ZXIuYm90dG9tIHtcbiAgbWFyZ2luLXRvcDogMTBweDtcbn1cblxuLnBvcG92ZXIubGVmdCB7XG4gIG1hcmdpbi1sZWZ0OiAtMTBweDtcbn1cblxuLnBvcG92ZXItdGl0bGUge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDhweCAxNHB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWJlYmViO1xuICBib3JkZXItcmFkaXVzOiAycHggMnB4IDAgMDtcbn1cblxuLnBvcG92ZXItY29udGVudCB7XG4gIHBhZGRpbmc6IDlweCAxNHB4O1xufVxuXG4ucG9wb3ZlciA+IC5hcnJvdyxcbi5wb3BvdmVyID4gLmFycm93OmFmdGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbn1cblxuLnBvcG92ZXIgPiAuYXJyb3cge1xuICBib3JkZXItd2lkdGg6IDExcHg7XG59XG5cbi5wb3BvdmVyID4gLmFycm93OmFmdGVyIHtcbiAgYm9yZGVyLXdpZHRoOiAxMHB4O1xuICBjb250ZW50OiBcIlwiO1xufVxuXG4ucG9wb3Zlci50b3AgPiAuYXJyb3cge1xuICBsZWZ0OiA1MCU7XG4gIG1hcmdpbi1sZWZ0OiAtMTFweDtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzk5OTk5OTtcbiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgYm90dG9tOiAtMTFweDtcbn1cblxuLnBvcG92ZXIudG9wID4gLmFycm93OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGJvdHRvbTogMXB4O1xuICBtYXJnaW4tbGVmdDogLTEwcHg7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG4gIGJvcmRlci10b3AtY29sb3I6ICNmZmY7XG59XG5cbi5wb3BvdmVyLnJpZ2h0ID4gLmFycm93IHtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IC0xMXB4O1xuICBtYXJnaW4tdG9wOiAtMTFweDtcbiAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogIzk5OTk5OTtcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xufVxuXG4ucG9wb3Zlci5yaWdodCA+IC5hcnJvdzphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBsZWZ0OiAxcHg7XG4gIGJvdHRvbTogLTEwcHg7XG4gIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICBib3JkZXItcmlnaHQtY29sb3I6ICNmZmY7XG59XG5cbi5wb3BvdmVyLmJvdHRvbSA+IC5hcnJvdyB7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC0xMXB4O1xuICBib3JkZXItdG9wLXdpZHRoOiAwO1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjOTk5OTk5O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICB0b3A6IC0xMXB4O1xufVxuXG4ucG9wb3Zlci5ib3R0b20gPiAuYXJyb3c6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgdG9wOiAxcHg7XG4gIG1hcmdpbi1sZWZ0OiAtMTBweDtcbiAgYm9yZGVyLXRvcC13aWR0aDogMDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjtcbn1cblxuLnBvcG92ZXIubGVmdCA+IC5hcnJvdyB7XG4gIHRvcDogNTAlO1xuICByaWdodDogLTExcHg7XG4gIG1hcmdpbi10b3A6IC0xMXB4O1xuICBib3JkZXItcmlnaHQtd2lkdGg6IDA7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjOTk5OTk5O1xuICBib3JkZXItbGVmdC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbn1cblxuLnBvcG92ZXIubGVmdCA+IC5hcnJvdzphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICByaWdodDogMXB4O1xuICBib3JkZXItcmlnaHQtd2lkdGg6IDA7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZmZmO1xuICBib3R0b206IC0xMHB4O1xufVxuXG4uY2Fyb3VzZWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5jYXJvdXNlbC1pbm5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5jYXJvdXNlbC1pbm5lciA+IC5pdGVtIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAtd2Via2l0LXRyYW5zaXRpb246IDAuNnMgZWFzZS1pbi1vdXQgbGVmdDtcbiAgLW8tdHJhbnNpdGlvbjogMC42cyBlYXNlLWluLW91dCBsZWZ0O1xuICB0cmFuc2l0aW9uOiAwLjZzIGVhc2UtaW4tb3V0IGxlZnQ7XG59XG5cbi5jYXJvdXNlbC1pbm5lciA+IC5pdGVtID4gaW1nLFxuLmNhcm91c2VsLWlubmVyID4gLml0ZW0gPiBhID4gaW1nIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xuICBsaW5lLWhlaWdodDogMTtcbn1cblxuQG1lZGlhIGFsbCBhbmQgKHRyYW5zZm9ybS0zZCksICgtd2Via2l0LXRyYW5zZm9ybS0zZCkge1xuICAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbSB7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjZzIGVhc2UtaW4tb3V0O1xuICAgIC1tb3otdHJhbnNpdGlvbjogLW1vei10cmFuc2Zvcm0gMC42cyBlYXNlLWluLW91dDtcbiAgICAtby10cmFuc2l0aW9uOiAtby10cmFuc2Zvcm0gMC42cyBlYXNlLWluLW91dDtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC42cyBlYXNlLWluLW91dDtcbiAgICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAtbW96LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgLXdlYmtpdC1wZXJzcGVjdGl2ZTogMTAwMHB4O1xuICAgIC1tb3otcGVyc3BlY3RpdmU6IDEwMDBweDtcbiAgICBwZXJzcGVjdGl2ZTogMTAwMHB4O1xuICB9XG4gIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLm5leHQsXG4gIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLmFjdGl2ZS5yaWdodCB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCk7XG4gICAgbGVmdDogMDtcbiAgfVxuICAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbS5wcmV2LFxuICAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbS5hY3RpdmUubGVmdCB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKTtcbiAgICBsZWZ0OiAwO1xuICB9XG4gIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLm5leHQubGVmdCxcbiAgLmNhcm91c2VsLWlubmVyID4gLml0ZW0ucHJldi5yaWdodCxcbiAgLmNhcm91c2VsLWlubmVyID4gLml0ZW0uYWN0aXZlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgICBsZWZ0OiAwO1xuICB9XG59XG5cbi5jYXJvdXNlbC1pbm5lciA+IC5hY3RpdmUsXG4uY2Fyb3VzZWwtaW5uZXIgPiAubmV4dCxcbi5jYXJvdXNlbC1pbm5lciA+IC5wcmV2IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5jYXJvdXNlbC1pbm5lciA+IC5hY3RpdmUge1xuICBsZWZ0OiAwO1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIgPiAubmV4dCxcbi5jYXJvdXNlbC1pbm5lciA+IC5wcmV2IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIgPiAubmV4dCB7XG4gIGxlZnQ6IDEwMCU7XG59XG5cbi5jYXJvdXNlbC1pbm5lciA+IC5wcmV2IHtcbiAgbGVmdDogLTEwMCU7XG59XG5cbi5jYXJvdXNlbC1pbm5lciA+IC5uZXh0LmxlZnQsXG4uY2Fyb3VzZWwtaW5uZXIgPiAucHJldi5yaWdodCB7XG4gIGxlZnQ6IDA7XG59XG5cbi5jYXJvdXNlbC1pbm5lciA+IC5hY3RpdmUubGVmdCB7XG4gIGxlZnQ6IC0xMDAlO1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIgPiAuYWN0aXZlLnJpZ2h0IHtcbiAgbGVmdDogMTAwJTtcbn1cblxuLmNhcm91c2VsLWNvbnRyb2wge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTUlO1xuICBvcGFjaXR5OiAwLjU7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT01MCk7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuNik7XG59XG5cbi5jYXJvdXNlbC1jb250cm9sLmxlZnQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChsZWZ0LCByZ2JhKDAsIDAsIDAsIDAuNSkgMCUsIHJnYmEoMCwgMCwgMCwgMC4wMDAxKSAxMDAlKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMCwgMCwgMCwgMC41KSAwJSwgcmdiYSgwLCAwLCAwLCAwLjAwMDEpIDEwMCUpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC41KSAwJSwgcmdiYSgwLCAwLCAwLCAwLjAwMDEpIDEwMCUpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyM4MDAwMDAwMCcsIGVuZENvbG9yc3RyPScjMDAwMDAwMDAnLCBHcmFkaWVudFR5cGU9MSk7XG59XG5cbi5jYXJvdXNlbC1jb250cm9sLnJpZ2h0IHtcbiAgbGVmdDogYXV0bztcbiAgcmlnaHQ6IDA7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMCwgMCwgMCwgMC4wMDAxKSAwJSwgcmdiYSgwLCAwLCAwLCAwLjUpIDEwMCUpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgwLCAwLCAwLCAwLjAwMDEpIDAlLCByZ2JhKDAsIDAsIDAsIDAuNSkgMTAwJSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjAwMDEpIDAlLCByZ2JhKDAsIDAsIDAsIDAuNSkgMTAwJSk7XG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nIzAwMDAwMDAwJywgZW5kQ29sb3JzdHI9JyM4MDAwMDAwMCcsIEdyYWRpZW50VHlwZT0xKTtcbn1cblxuLmNhcm91c2VsLWNvbnRyb2w6aG92ZXIsXG4uY2Fyb3VzZWwtY29udHJvbDpmb2N1cyB7XG4gIG91dGxpbmU6IDA7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIG9wYWNpdHk6IDAuOTtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTkwKTtcbn1cblxuLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldixcbi5jYXJvdXNlbC1jb250cm9sIC5pY29uLW5leHQsXG4uY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCxcbi5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIG1hcmdpbi10b3A6IC0xMHB4O1xuICB6LWluZGV4OiA1O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXYsXG4uY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCB7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xufVxuXG4uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0LFxuLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0IHtcbiAgcmlnaHQ6IDUwJTtcbiAgbWFyZ2luLXJpZ2h0OiAtMTBweDtcbn1cblxuLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldixcbi5jYXJvdXNlbC1jb250cm9sIC5pY29uLW5leHQge1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICBsaW5lLWhlaWdodDogMTtcbiAgZm9udC1mYW1pbHk6IHNlcmlmO1xufVxuXG4uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXDIwMzknO1xufVxuXG4uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXDIwM2EnO1xufVxuXG4uY2Fyb3VzZWwtaW5kaWNhdG9ycyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAxMHB4O1xuICBsZWZ0OiA1MCU7XG4gIHotaW5kZXg6IDE1O1xuICB3aWR0aDogNjAlO1xuICBtYXJnaW4tbGVmdDogLTMwJTtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5jYXJvdXNlbC1pbmRpY2F0b3JzIGxpIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMTBweDtcbiAgaGVpZ2h0OiAxMHB4O1xuICBtYXJnaW46IDFweDtcbiAgdGV4dC1pbmRlbnQ6IC05OTlweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2ZmZjtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwIFxcOTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi5jYXJvdXNlbC1pbmRpY2F0b3JzIC5hY3RpdmUge1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMnB4O1xuICBoZWlnaHQ6IDEycHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cbi5jYXJvdXNlbC1jYXB0aW9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAxNSU7XG4gIHJpZ2h0OiAxNSU7XG4gIGJvdHRvbTogMjBweDtcbiAgei1pbmRleDogMTA7XG4gIHBhZGRpbmctdG9wOiAyMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuNik7XG59XG5cbi5jYXJvdXNlbC1jYXB0aW9uIC5idG4ge1xuICB0ZXh0LXNoYWRvdzogbm9uZTtcbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQsXG4gIC5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCxcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldixcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCB7XG4gICAgd2lkdGg6IDMwcHg7XG4gICAgaGVpZ2h0OiAzMHB4O1xuICAgIG1hcmdpbi10b3A6IC0xNXB4O1xuICAgIGZvbnQtc2l6ZTogMzBweDtcbiAgfVxuICAuY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCxcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldiB7XG4gICAgbWFyZ2luLWxlZnQ6IC0xNXB4O1xuICB9XG4gIC5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCxcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcbiAgfVxuICAuY2Fyb3VzZWwtY2FwdGlvbiB7XG4gICAgbGVmdDogMjAlO1xuICAgIHJpZ2h0OiAyMCU7XG4gICAgcGFkZGluZy1ib3R0b206IDMwcHg7XG4gIH1cbiAgLmNhcm91c2VsLWluZGljYXRvcnMge1xuICAgIGJvdHRvbTogMjBweDtcbiAgfVxufVxuXG4uY2xlYXJmaXg6YmVmb3JlLFxuLmNsZWFyZml4OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4uY2xlYXJmaXg6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuLmNlbnRlci1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xufVxuXG4ucHVsbC1yaWdodCB7XG4gIGZsb2F0OiByaWdodCAhaW1wb3J0YW50O1xufVxuXG4ucHVsbC1sZWZ0IHtcbiAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcbn1cblxuLmhpZGUge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi5zaG93IHtcbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbn1cblxuLmludmlzaWJsZSB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cblxuLnRleHQtaGlkZSB7XG4gIGZvbnQ6IDAvMCBhO1xuICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gIHRleHQtc2hhZG93OiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiAwO1xufVxuXG4uaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4uYWZmaXgge1xuICBwb3NpdGlvbjogZml4ZWQ7XG59XG5cbkAtbXMtdmlld3BvcnQge1xuICB3aWR0aDogZGV2aWNlLXdpZHRoO1xufVxuXG4udmlzaWJsZS14cyB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLnZpc2libGUtc20ge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi52aXNpYmxlLW1kIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4udmlzaWJsZS1sZyB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLnZpc2libGUteHMtYmxvY2ssXG4udmlzaWJsZS14cy1pbmxpbmUsXG4udmlzaWJsZS14cy1pbmxpbmUtYmxvY2ssXG4udmlzaWJsZS1zbS1ibG9jayxcbi52aXNpYmxlLXNtLWlubGluZSxcbi52aXNpYmxlLXNtLWlubGluZS1ibG9jayxcbi52aXNpYmxlLW1kLWJsb2NrLFxuLnZpc2libGUtbWQtaW5saW5lLFxuLnZpc2libGUtbWQtaW5saW5lLWJsb2NrLFxuLnZpc2libGUtbGctYmxvY2ssXG4udmlzaWJsZS1sZy1pbmxpbmUsXG4udmlzaWJsZS1sZy1pbmxpbmUtYmxvY2sge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAudmlzaWJsZS14cyB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxuICB0YWJsZS52aXNpYmxlLXhzIHtcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xuICB9XG4gIHRyLnZpc2libGUteHMge1xuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xuICB9XG4gIHRoLnZpc2libGUteHMsXG4gIHRkLnZpc2libGUteHMge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgLnZpc2libGUteHMtYmxvY2sge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC52aXNpYmxlLXhzLWlubGluZSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC52aXNpYmxlLXhzLWlubGluZS1ibG9jayB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTE5OXB4KSB7XG4gIC52aXNpYmxlLXNtIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG4gIHRhYmxlLnZpc2libGUtc20ge1xuICAgIGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7XG4gIH1cbiAgdHIudmlzaWJsZS1zbSB7XG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7XG4gIH1cbiAgdGgudmlzaWJsZS1zbSxcbiAgdGQudmlzaWJsZS1zbSB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweCkge1xuICAudmlzaWJsZS1zbS1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIGFuZCAobWF4LXdpZHRoOiAxMTk5cHgpIHtcbiAgLnZpc2libGUtc20taW5saW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIGFuZCAobWF4LXdpZHRoOiAxMTk5cHgpIHtcbiAgLnZpc2libGUtc20taW5saW5lLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSBhbmQgKG1heC13aWR0aDogMTY3OSkge1xuICAudmlzaWJsZS1tZCB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxuICB0YWJsZS52aXNpYmxlLW1kIHtcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xuICB9XG4gIHRyLnZpc2libGUtbWQge1xuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xuICB9XG4gIHRoLnZpc2libGUtbWQsXG4gIHRkLnZpc2libGUtbWQge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSBhbmQgKG1heC13aWR0aDogMTY3OSkge1xuICAudmlzaWJsZS1tZC1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSBhbmQgKG1heC13aWR0aDogMTY3OSkge1xuICAudmlzaWJsZS1tZC1pbmxpbmUge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIGFuZCAobWF4LXdpZHRoOiAxNjc5KSB7XG4gIC52aXNpYmxlLW1kLWlubGluZS1ibG9jayB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDE2ODApIHtcbiAgLnZpc2libGUtbGcge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbiAgdGFibGUudmlzaWJsZS1sZyB7XG4gICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcbiAgfVxuICB0ci52aXNpYmxlLWxnIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDtcbiAgfVxuICB0aC52aXNpYmxlLWxnLFxuICB0ZC52aXNpYmxlLWxnIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDE2ODApIHtcbiAgLnZpc2libGUtbGctYmxvY2sge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDE2ODApIHtcbiAgLnZpc2libGUtbGctaW5saW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTY4MCkge1xuICAudmlzaWJsZS1sZy1pbmxpbmUtYmxvY2sge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAuaGlkZGVuLXhzIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTE5OXB4KSB7XG4gIC5oaWRkZW4tc20ge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSBhbmQgKG1heC13aWR0aDogMTY3OSkge1xuICAuaGlkZGVuLW1kIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDE2ODApIHtcbiAgLmhpZGRlbi1sZyB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5cbi52aXNpYmxlLXByaW50IHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG5AbWVkaWEgcHJpbnQge1xuICAudmlzaWJsZS1wcmludCB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxuICB0YWJsZS52aXNpYmxlLXByaW50IHtcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xuICB9XG4gIHRyLnZpc2libGUtcHJpbnQge1xuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xuICB9XG4gIHRoLnZpc2libGUtcHJpbnQsXG4gIHRkLnZpc2libGUtcHJpbnQge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcbiAgfVxufVxuXG4udmlzaWJsZS1wcmludC1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuQG1lZGlhIHByaW50IHtcbiAgLnZpc2libGUtcHJpbnQtYmxvY2sge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLnZpc2libGUtcHJpbnQtaW5saW5lIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG5AbWVkaWEgcHJpbnQge1xuICAudmlzaWJsZS1wcmludC1pbmxpbmUge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG5cbi52aXNpYmxlLXByaW50LWlubGluZS1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuQG1lZGlhIHByaW50IHtcbiAgLnZpc2libGUtcHJpbnQtaW5saW5lLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgcHJpbnQge1xuICAuaGlkZGVuLXByaW50IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLyogXG5UaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuQ29weXJpZ2h0IChjKSAyMDEzLTIwMTUgYm9vdHN0cmFwLXNlbGVjdFxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuICovXG4uYm9vdHN0cmFwLXNlbGVjdCB7XG4gIC8qd2lkdGg6IDIyMHB4XFw5OyBJRTggYW5kIGJlbG93Ki9cbiAgd2lkdGg6IDIyMHB4IFxcMDtcbiAgLypJRTkgYW5kIGJlbG93Ki9cbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QgPiAuYnRuIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogNDBweDtcbiAgcGFkZGluZy1yaWdodDogMjVweDtcbn1cblxuLmVycm9yIC5ib290c3RyYXAtc2VsZWN0IC5idG4ge1xuICBib3JkZXI6IDFweCBzb2xpZCAjYjk0YTQ4O1xufVxuXG4uY29udHJvbC1ncm91cC5lcnJvciAuYm9vdHN0cmFwLXNlbGVjdCAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgYm9yZGVyLWNvbG9yOiAjYjk0YTQ4O1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5maXQtd2lkdGgge1xuICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdDpub3QoW2NsYXNzKj1cImNvbC1cIl0pOm5vdChbY2xhc3MqPVwiZm9ybS1jb250cm9sXCJdKTpub3QoLmlucHV0LWdyb3VwLWJ0bikge1xuICB3aWR0aDogMjIwcHg7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0IC5idG46Zm9jdXMge1xuICBvdXRsaW5lOiB0aGluIGRvdHRlZCAjMzMzMzMzICFpbXBvcnRhbnQ7XG4gIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvciAhaW1wb3J0YW50O1xuICBvdXRsaW5lLW9mZnNldDogLTJweDtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuZm9ybS1jb250cm9sIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiBub25lO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5mb3JtLWNvbnRyb2w6bm90KFtjbGFzcyo9XCJjb2wtXCJdKSB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXA6bm90KC5pbnB1dC1ncm91cC1idG4pLFxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwW2NsYXNzKj1cImNvbC1cIl0ge1xuICBmbG9hdDogbm9uZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwLmRyb3Bkb3duLW1lbnUtcmlnaHQsXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXBbY2xhc3MqPVwiY29sLVwiXS5kcm9wZG93bi1tZW51LXJpZ2h0LFxuLnJvdy1mbHVpZCAuYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXBbY2xhc3MqPVwiY29sLVwiXS5kcm9wZG93bi1tZW51LXJpZ2h0IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuXG4uZm9ybS1zZWFyY2ggLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwLFxuLmZvcm0taW5saW5lIC5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cCxcbi5mb3JtLWhvcml6b250YWwgLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwLFxuLmZvcm0tZ3JvdXAgLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLmZvcm0tZ3JvdXAtbGcgLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwLmZvcm0tY29udHJvbCxcbi5mb3JtLWdyb3VwLXNtIC5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cC5mb3JtLWNvbnRyb2wge1xuICBwYWRkaW5nOiAwO1xufVxuXG4uZm9ybS1pbmxpbmUgLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5mb3JtLWNvbnRyb2wge1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmlucHV0LWFwcGVuZCAuYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAge1xuICBtYXJnaW4tbGVmdDogLTFweDtcbn1cblxuLmlucHV0LXByZXBlbmQgLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIHtcbiAgbWFyZ2luLXJpZ2h0OiAtMXB4O1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgPiAuZGlzYWJsZWQge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgPiAuZGlzYWJsZWQ6Zm9jdXMge1xuICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cCAuYnRuIC5maWx0ZXItb3B0aW9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5idG4gLmNhcmV0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiA0MHB4O1xuICBtYXJnaW4tdG9wOiAwO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2NjYztcbiAgaGVpZ2h0OiAzOHB4O1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmJ0biAuY2FyZXQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2MSc7XG4gIGZvbnQtZmFtaWx5OiBcImZvbnRlbGxvXCI7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgY29sb3I6ICM2NjY2NjY7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMTJweDtcbiAgdG9wOiA5cHg7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmJ0bjpob3ZlciAuY2FyZXQge1xuICBib3JkZXItY29sb3I6ICNhZGFkYWQ7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cCAuYnRuOmZvY3VzIC5jYXJldCB7XG4gIGJvcmRlci1jb2xvcjogIzhjOGM4Yztcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwW2NsYXNzKj1cImNvbC1cIl0gLmJ0biB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUge1xuICBtaW4td2lkdGg6IDEwMCU7XG4gIHotaW5kZXg6IDEwMzU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudS5pbm5lciB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3gtc2hhZG93OiBub25lO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgbGkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSBsaTpub3QoLmRpc2FibGVkKSBhOmhvdmVyIHNtYWxsLFxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IGxpOm5vdCguZGlzYWJsZWQpIGE6Zm9jdXMgc21hbGwsXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgbGkuYWN0aXZlOm5vdCguZGlzYWJsZWQpIGEgc21hbGwge1xuICBjb2xvcjogIzY0YjFkODtcbiAgY29sb3I6IGZhZGUoIzY0YjFkOCwgNDAlKTtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IGxpLmRpc2FibGVkIGEge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgbGkgYSB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IGxpIGEub3B0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLWxlZnQ6IDIuMjVlbTtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IGxpIGEgc3Bhbi5jaGVjay1tYXJrIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IGxpIGEgc3Bhbi50ZXh0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgbGkgc21hbGwge1xuICBwYWRkaW5nLWxlZnQ6IDAuNWVtO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgLm5vdGlmeSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiA1cHg7XG4gIHdpZHRoOiA5NiU7XG4gIG1hcmdpbjogMCAyJTtcbiAgbWluLWhlaWdodDogMjZweDtcbiAgcGFkZGluZzogM3B4IDVweDtcbiAgYmFja2dyb3VuZDogd2hpdGVzbW9rZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2UzZTNlMztcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IGZhZGUoYmxhY2ssIDUlKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIG9wYWNpdHk6IDAuOTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5uby1yZXN1bHRzIHtcbiAgcGFkZGluZzogM3B4O1xuICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xuICBtYXJnaW46IDAgNXB4O1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAuZml0LXdpZHRoIC5idG4gLmZpbHRlci1vcHRpb24ge1xuICBwb3NpdGlvbjogc3RhdGljO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAuZml0LXdpZHRoIC5idG4gLmNhcmV0IHtcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgdG9wOiBhdXRvO1xuICBtYXJnaW4tdG9wOiAtMXB4O1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAuc2hvdy10aWNrIC5kcm9wZG93bi1tZW51IGxpLnNlbGVjdGVkIGEgc3Bhbi5jaGVjay1tYXJrIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHJpZ2h0OiAxNXB4O1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cC5zaG93LXRpY2sgLmRyb3Bkb3duLW1lbnUgbGkgYSBzcGFuLnRleHQge1xuICBtYXJnaW4tcmlnaHQ6IDM0cHg7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LnNob3ctbWVudS1hcnJvdy5vcGVuID4gLmJ0biB7XG4gIHotaW5kZXg6IDEwMzY7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LnNob3ctbWVudS1hcnJvdyAuZHJvcGRvd24tdG9nZ2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICcnO1xuICBib3JkZXItbGVmdDogN3B4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmlnaHQ6IDdweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogN3B4O1xuICBib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2NjY2NjYztcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogZmFkZSgjY2NjY2NjLCAyMCUpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogLTRweDtcbiAgbGVmdDogOXB4O1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5zaG93LW1lbnUtYXJyb3cgLmRyb3Bkb3duLXRvZ2dsZTphZnRlciB7XG4gIGNvbnRlbnQ6ICcnO1xuICBib3JkZXItbGVmdDogNnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmlnaHQ6IDZweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkIHdoaXRlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogLTRweDtcbiAgbGVmdDogMTBweDtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3Quc2hvdy1tZW51LWFycm93LmRyb3B1cCAuZHJvcGRvd24tdG9nZ2xlOmJlZm9yZSB7XG4gIGJvdHRvbTogYXV0bztcbiAgdG9wOiAtM3B4O1xuICBib3JkZXItYm90dG9tOiAwO1xuICBib3JkZXItdG9wLXdpZHRoOiA3cHg7XG4gIGJvcmRlci10b3Atc3R5bGU6IHNvbGlkO1xuICBib3JkZXItdG9wLWNvbG9yOiAjY2NjY2NjO1xuICBib3JkZXItdG9wLWNvbG9yOiBmYWRlKCNjY2NjY2MsIDIwJSk7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LnNob3ctbWVudS1hcnJvdy5kcm9wdXAgLmRyb3Bkb3duLXRvZ2dsZTphZnRlciB7XG4gIGJvdHRvbTogYXV0bztcbiAgdG9wOiAtM3B4O1xuICBib3JkZXItdG9wOiA2cHggc29saWQgd2hpdGU7XG4gIGJvcmRlci1ib3R0b206IDA7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LnNob3ctbWVudS1hcnJvdy5wdWxsLXJpZ2h0IC5kcm9wZG93bi10b2dnbGU6YmVmb3JlIHtcbiAgcmlnaHQ6IDEycHg7XG4gIGxlZnQ6IGF1dG87XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LnNob3ctbWVudS1hcnJvdy5wdWxsLXJpZ2h0IC5kcm9wZG93bi10b2dnbGU6YWZ0ZXIge1xuICByaWdodDogMTNweDtcbiAgbGVmdDogYXV0bztcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3Quc2hvdy1tZW51LWFycm93Lm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlOmJlZm9yZSxcbi5ib290c3RyYXAtc2VsZWN0LnNob3ctbWVudS1hcnJvdy5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZTphZnRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAub3BlbiAuYnRuIC5jYXJldCB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjYWRhZGFkO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAub3BlbiAuYnRuOmhvdmVyIC5jYXJldCB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjOGM4YzhjO1xufVxuXG4uYnMtc2VhcmNoYm94LFxuLmJzLWFjdGlvbnNib3gge1xuICBwYWRkaW5nOiA0cHggOHB4O1xufVxuXG4uYnMtYWN0aW9uc2JveCB7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLmJzLWFjdGlvbnNib3ggLmJ0bi1ncm91cCBidXR0b24ge1xuICB3aWR0aDogNTAlO1xufVxuXG4uYnMtc2VhcmNoYm94ICsgLmJzLWFjdGlvbnNib3gge1xuICBwYWRkaW5nOiAwIDhweCA0cHg7XG59XG5cbi5icy1zZWFyY2hib3ggaW5wdXQuZm9ybS1jb250cm9sIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5tb2JpbGUtZGV2aWNlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgb3BhY2l0eTogMDtcbn1cblxuLmNvbnRhaW5lciB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIHBhZGRpbmctbGVmdDogODBweCAhaW1wb3J0YW50O1xuICBwYWRkaW5nLXJpZ2h0OiA2MHB4ICFpbXBvcnRhbnQ7XG59XG5cbi5hbGVydCB7XG4gIGJvcmRlci13aWR0aDogMCAwIDAgNXB4O1xufVxuXG4vKiBCb2R5IHNwZWNzICovXG5ib2R5IHtcbiAgY29sb3I6ICMyMjI7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG59XG5cbi8qIE1lc3NhZ2Ugd2FybmluZyB1c2VycyB0aGF0IHNvbWUgZmVhdHVyZXMgbWlnaHQgbm90IGJlIHN1cHBvcnRlZCBpbiBvbGQgYnJvd3NlcnMgKi9cbi5icm93c2VydXBncmFkZSB7XG4gIG1hcmdpbjogMC4yZW0gMDtcbiAgYmFja2dyb3VuZDogI2NjYztcbiAgY29sb3I6ICMwMDA7XG4gIHBhZGRpbmc6IDAuMmVtIDA7XG59XG5cbi8qIFRvcGJhciAqL1xuLnRvcGJhciB7XG4gIHBhZGRpbmc6IDA7XG4gIGJhY2tncm91bmQ6ICMyMjI7XG59XG5cbi50b3BiYXIgLmJhbm5lci1hcmVhIHtcbiAgYmFja2dyb3VuZDogIzIyMjtcbn1cblxuLnRvcGJhciAuYmFubmVyLWFyZWEgaDEge1xuICBtYXJnaW46IDAgMCAwIC04MHB4O1xuICBwYWRkaW5nOiAwIDAgMCA4MHB4O1xuICBoZWlnaHQ6IDU1cHg7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybChcIi4uL2ltYWdlcy9sb2dvLXdoaXRlLnBuZ1wiKSBuby1yZXBlYXQgMjRweCAzcHg7XG4gIGNvbG9yOiAjZmZmO1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2FOZXVlQm9sZFwiLCBcIkhlbHZldGljYU5ldWUtQm9sZFwiLCBcIkhlbHZldGljYU5ldWUgQm9sZFwiLCBcIkhlbHZldGljYSBOZXVlIEJvbGRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYU5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgXCJMdWNpZGEgR3JhbmRlXCIsIHNhbnMtc2VyaWY7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGZvbnQtc2l6ZTogMS41NzFlbTtcbiAgbGluZS1oZWlnaHQ6IDU1cHg7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi50b3BiYXIgLnRhYi1hcmVhIHtcbiAgYmFja2dyb3VuZDogIzNhMzkzYjtcbiAgaGVpZ2h0OiA0MHB4O1xufVxuXG4udG9wYmFyIC50YWItYXJlYSBzcGFuLmhvc3RuYW1lIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZSBMVCBXMUcgNTUgUm9tYW5cIiwgXCJIZWx2ZXRpY2EgTmV1ZSBMVCBXMUdcIiwgXCJIZWx2ZXRpY2FOZXVlIFJvbWFuXCIsIFwiSGVsdmV0aWNhTmV1ZS1Sb21hblwiLCBcIkhlbHZldGljYSBOZXVlIFJvbWFuXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgXCJIZWx2ZXRpY2FOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIFwiTHVjaWRhIEdyYW5kZVwiLCBzYW5zLXNlcmlmO1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1zaXplOiAxM3B0O1xuICBmb250LXdlaWdodDogNDAwO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDhweCAwO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLnRvcGJhciAudGFiLWFyZWEgdWwubmF2LW1lbnUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGxpc3Qtc3R5bGUtcG9zaXRpb246IGluc2lkZTtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwIDAgMCAyNHB4O1xufVxuXG4udG9wYmFyIC50YWItYXJlYSB1bC5uYXYtbWVudSBsaSB7XG4gIGZsb2F0OiBsZWZ0O1xuICBkaXNwbGF5OiBibG9jaztcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi50b3BiYXIgLnRhYi1hcmVhIHVsLm5hdi1tZW51IGxpIGEsIC50b3BiYXIgLnRhYi1hcmVhIHVsLm5hdi1tZW51IGxpIC5kaXNhYmxlZCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2FOZXVlQm9sZFwiLCBcIkhlbHZldGljYU5ldWUtQm9sZFwiLCBcIkhlbHZldGljYU5ldWUgQm9sZFwiLCBcIkhlbHZldGljYSBOZXVlIEJvbGRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYU5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgXCJMdWNpZGEgR3JhbmRlXCIsIHNhbnMtc2VyaWY7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGZvbnQtc2l6ZTogMTNwdDtcbiAgcGFkZGluZzogOHB4IDQwcHg7XG4gIG1pbi13aWR0aDogMTkwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3V0bGluZTogbm9uZTtcbn1cblxuLnRvcGJhciAudGFiLWFyZWEgdWwubmF2LW1lbnUgbGkgLmRpc2FibGVkIHtcbiAgY29sb3I6ICM5OTk7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLnRvcGJhciAudGFiLWFyZWEgdWwubmF2LW1lbnUgbGkgLmRpc2FibGVkIC5kaWdpdC1jb250YWluZXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4udG9wYmFyIC50YWItYXJlYSB1bC5uYXYtbWVudSBsaSAuZGlnaXQtY29udGFpbmVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tbGVmdDogMTBweDtcbiAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgaGVpZ2h0OiAyMnB4O1xuICBiYWNrZ3JvdW5kOiAjNTU1O1xuICBib3JkZXI6IDJweCBzb2xpZCAjNTU1O1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhTmV1ZU1lZGl1bVwiLCBcIkhlbHZldGljYU5ldWUtTWVkaXVtXCIsIFwiSGVsdmV0aWNhIE5ldWUgTWVkaXVtXCIsIFwiSGVsdmV0aWNhTmV1ZVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIFwiTHVjaWRhIEdyYW5kZVwiLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDE0cHg7XG4gIHBhZGRpbmc6IDAgOHB4O1xufVxuXG4udG9wYmFyIC50YWItYXJlYSB1bC5uYXYtbWVudSBsaS5jdXJyZW50IC5kaWdpdC1jb250YWluZXIge1xuICBib3JkZXItY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xufVxuXG4udG9wYmFyIC50YWItYXJlYSB1bC5uYXYtbWVudSBsaS5jdXJyZW50Lmhvc3RzIHtcbiAgYmFja2dyb3VuZDogIzAwOGFiZjtcbn1cblxuLnRvcGJhciAudGFiLWFyZWEgdWwubmF2LW1lbnUgbGkuY3VycmVudC5ndWVzdHMge1xuICBiYWNrZ3JvdW5kOiAjOGNjNjNmO1xufVxuXG4udG9wYmFyIC50YWItYXJlYSB1bC5uYXYtbWVudSBsaS5jdXJyZW50LnRlbXBsYXRlcyB7XG4gIGJhY2tncm91bmQ6ICMwMGE2YTA7XG59XG5cbi50b3BiYXIgLnRhYi1hcmVhIHVsLm5hdi1tZW51IGxpLmN1cnJlbnQuc3RvcmFnZSB7XG4gIGJhY2tncm91bmQ6ICNmZWI4MTM7XG59XG5cbi50b3BiYXIgLnRhYi1hcmVhIHVsLm5hdi1tZW51IGxpLmN1cnJlbnQubmV0d29ya3Mge1xuICBiYWNrZ3JvdW5kOiAjN2YxYzdkO1xufVxuXG4udG9wYmFyIC50YWItYXJlYSB1bC5uYXYtbWVudSBsaS5jdXJyZW50LmFkbWluaXN0cmF0aW9uIHtcbiAgYmFja2dyb3VuZDogI2Q5MTgyZDtcbn1cblxuLnRvcGJhciAucGFuZWwtYWN0aW9ucy1hcmVhIHtcbiAgbWluLWhlaWdodDogNDBweDtcbn1cblxuLmxvZ2luLWFyZWEge1xuICBtYXJnaW46IDkwcHggYXV0byAwO1xuICB3aWR0aDogMzAwcHg7XG59XG5cbi5sb2dpbi1hcmVhIC5idG4tbG9naW4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgZmxvYXQ6IG5vbmU7XG4gIG1hcmdpbi1ib3R0b206IDUwcHg7XG59XG5cbi5sb2dpbi1hcmVhIC5jb2wtbWQtMTIsIC5sb2dpbi1hcmVhIC5jb2wtbGctMTIge1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmxvZ2luLWFyZWEgLmJvb3RzdHJhcC1zZWxlY3QsXG4ubG9naW4tYXJlYSAuc2VsZWN0cGlja2VyIHtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhTmV1ZUxpZ2h0XCIsIFwiSGVsdmV0aWNhTmV1ZS1MaWdodFwiLCBcIkhlbHZldGljYU5ldWUgTGlnaHRcIiwgXCJIZWx2ZXRpY2FOZXVlXCIsIFwiSGVsdmV0aWNhTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBcIkx1Y2lkYSBHcmFuZGVcIiwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxM3B0O1xufVxuXG4ubG9naW4tYXJlYSAuZHJvcGRvd24tdG9nZ2xlLnNlbGVjdHBpY2tlciB7XG4gIGhlaWdodDogNDBweDtcbn1cblxuLmxvZ2luLWFyZWEgLmZvcm0tZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4ubG9naW4tYXJlYSAuZm9ybS1ncm91cDpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLmJ0biB7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYU5ldWVNZWRpdW1cIiwgXCJIZWx2ZXRpY2FOZXVlLU1lZGl1bVwiLCBcIkhlbHZldGljYSBOZXVlIE1lZGl1bVwiLCBcIkhlbHZldGljYU5ldWVcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBcIkx1Y2lkYSBHcmFuZGVcIiwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxM3B0O1xufVxuXG4uYnRuLWxvZ2luIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDhhYmY7XG4gIGJvcmRlci1jb2xvcjogIzAwOGFiZjtcbn1cblxuLmJ0bi1sb2dpbjpmb2N1cyxcbi5idG4tbG9naW4uZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNjU4YztcbiAgYm9yZGVyLWNvbG9yOiAjMDAyZTQwO1xufVxuXG4uYnRuLWxvZ2luOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDY1OGM7XG4gIGJvcmRlci1jb2xvcjogIzAwNWU4Mjtcbn1cblxuLmJ0bi1sb2dpbjphY3RpdmUsXG4uYnRuLWxvZ2luLmFjdGl2ZSxcbi5vcGVuID4gLmJ0bi1sb2dpbi5kcm9wZG93bi10b2dnbGUge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNjU4YztcbiAgYm9yZGVyLWNvbG9yOiAjMDA1ZTgyO1xufVxuXG4uYnRuLWxvZ2luOmFjdGl2ZTpob3Zlcixcbi5idG4tbG9naW46YWN0aXZlOmZvY3VzLFxuLmJ0bi1sb2dpbjphY3RpdmUuZm9jdXMsXG4uYnRuLWxvZ2luLmFjdGl2ZTpob3Zlcixcbi5idG4tbG9naW4uYWN0aXZlOmZvY3VzLFxuLmJ0bi1sb2dpbi5hY3RpdmUuZm9jdXMsXG4ub3BlbiA+IC5idG4tbG9naW4uZHJvcGRvd24tdG9nZ2xlOmhvdmVyLFxuLm9wZW4gPiAuYnRuLWxvZ2luLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyxcbi5vcGVuID4gLmJ0bi1sb2dpbi5kcm9wZG93bi10b2dnbGUuZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNGI2ODtcbiAgYm9yZGVyLWNvbG9yOiAjMDAyZTQwO1xufVxuXG4uYnRuLWxvZ2luOmFjdGl2ZSxcbi5idG4tbG9naW4uYWN0aXZlLFxuLm9wZW4gPiAuYnRuLWxvZ2luLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG59XG5cbi5idG4tbG9naW4uZGlzYWJsZWQsXG4uYnRuLWxvZ2luLmRpc2FibGVkOmhvdmVyLFxuLmJ0bi1sb2dpbi5kaXNhYmxlZDpmb2N1cyxcbi5idG4tbG9naW4uZGlzYWJsZWQuZm9jdXMsXG4uYnRuLWxvZ2luLmRpc2FibGVkOmFjdGl2ZSxcbi5idG4tbG9naW4uZGlzYWJsZWQuYWN0aXZlLFxuLmJ0bi1sb2dpbltkaXNhYmxlZF0sXG4uYnRuLWxvZ2luW2Rpc2FibGVkXTpob3Zlcixcbi5idG4tbG9naW5bZGlzYWJsZWRdOmZvY3VzLFxuLmJ0bi1sb2dpbltkaXNhYmxlZF0uZm9jdXMsXG4uYnRuLWxvZ2luW2Rpc2FibGVkXTphY3RpdmUsXG4uYnRuLWxvZ2luW2Rpc2FibGVkXS5hY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1sb2dpbixcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxvZ2luOmhvdmVyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tbG9naW46Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1sb2dpbi5mb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxvZ2luOmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxvZ2luLmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDhhYmY7XG4gIGJvcmRlci1jb2xvcjogIzAwOGFiZjtcbn1cblxuLmJ0bi1sb2dpbiAuYmFkZ2Uge1xuICBjb2xvcjogIzAwOGFiZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cblxuLypcbiogUHJvamVjdCBLaW1jaGlcbipcbiogQ29weXJpZ2h0IElCTSwgQ29ycC4gMjAxNVxuKlxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTtcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuKlxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsXG4qIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi5kaWFsb2ctYm9yZGVyLWdyZXkge1xuICBiYWNrZ3JvdW5kLWNsaXA6IGJvcmRlci1ib3g7XG4gIGJvcmRlcjogNnB4IHNvbGlkIHJnYmEoMTcwLCAxNzAsIDE3MCwgMC4zKTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIG1hcmdpbjogYXV0bztcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xufVxuXG4uZGlhbG9nLWNvbnRhaW5lciB7XG4gIGJvcmRlcjogM3B4IHNvbGlkICM5OTk5OTk7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xufVxuXG4uZGlhbG9nLWNvbnRhaW5lciAuZGlhbG9nLXRpdGxlIHtcbiAgaGVpZ2h0OiA2MHB4O1xuICBwYWRkaW5nOiAyMHB4IDAgMjBweCAyMHB4O1xuICBtYXJnaW46IDA7XG4gIGZsb2F0OiBsZWZ0O1xuICBmb250LXNpemU6IDI3cHg7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYU5ldWVMaWdodFwiLCBcIkhlbHZldGljYU5ldWUtTGlnaHRcIiwgXCJIZWx2ZXRpY2FOZXVlIExpZ2h0XCIsIFwiSGVsdmV0aWNhTmV1ZVwiLCBcIkhlbHZldGljYU5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgXCJMdWNpZGEgR3JhbmRlXCIsIHNhbnMtc2VyaWY7XG4gIGZvbnQtd2VpZ2h0OiAzMDAgIWltcG9ydGFudDtcbn1cblxuLmRpYWxvZy1jb250YWluZXIgLmRpYWxvZy1ib2R5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uZGlhbG9nLWNvbnRhaW5lciAuZGlhbG9nLWZvb3RlciB7XG4gIGhlaWdodDogNTBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwOEFCRjtcbn1cblxuLmRpYWxvZy1jb250YWluZXIgLmRpYWxvZy1mb290ZXIgLmRpYWxvZy1idXR0b24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICB3aWR0aDogNzVweDtcbiAgaGVpZ2h0OiAzMHB4O1xuICBsaW5lLWhlaWdodDogMzBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tbGVmdDogMTBweDtcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uZGlhbG9nLWNvbnRhaW5lciAuZGlhbG9nLWZvb3RlciAuZGlhbG9nLWJ1dHRvbjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFRUVFRUU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLypcbiogUHJvamVjdCBLaW1jaGlcbipcbiogQ29weXJpZ2h0IElCTSwgQ29ycC4gMjAxNVxuKlxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTtcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuKlxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsXG4qIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi5tb2RhbC1vcGVuIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLm1vZGFsIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDEwNTA7XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgb3V0bGluZTogMDtcbn1cblxuLm1vZGFsLmZhZGUgLm1vZGFsLWRpYWxvZyB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7XG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjUlKTtcbiAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XG4gIC1tb3otdHJhbnNpdGlvbjogLW1vei10cmFuc2Zvcm0gMC4zcyBlYXNlLW91dDtcbiAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2Utb3V0O1xufVxuXG4ubW9kYWwuaW4gLm1vZGFsLWRpYWxvZyB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xufVxuXG4ubW9kYWwtb3BlbiAubW9kYWwge1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi5tb2RhbC1kaWFsb2cge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiBhdXRvO1xuICBtYXJnaW46IDEwcHg7XG4gIGJvcmRlcjogNnB4IHNvbGlkICNhYWE7XG4gIGJvcmRlcjogNnB4IHNvbGlkIHJnYmEoMTcwLCAxNzAsIDE3MCwgMC4zKTtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xufVxuXG4ubW9kYWwtY29udGVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyOiAzcHggc29saWQgIzk5OTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgb3V0bGluZTogMDtcbn1cblxuLm1vZGFsLWJhY2tkcm9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDEwNDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cbi5tb2RhbC1iYWNrZHJvcC5mYWRlIHtcbiAgb3BhY2l0eTogMDtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApO1xufVxuXG4ubW9kYWwtYmFja2Ryb3AuaW4ge1xuICBvcGFjaXR5OiAwLjU7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT01MCk7XG59XG5cbi5tb2RhbC1oZWFkZXIge1xuICBwYWRkaW5nOiAyN3B4IDE0cHggMTRweCAzMHB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIG1pbi1oZWlnaHQ6IDI3cHggMTRweCAxNHB4IDMwcHgyM3B4O1xufVxuXG4ubW9kYWwtaGVhZGVyIC5jbG9zZSB7XG4gIG1hcmdpbi10b3A6IC0ycHg7XG59XG5cbi5tb2RhbC10aXRsZSB7XG4gIG1hcmdpbjogMDtcbiAgbGluZS1oZWlnaHQ6IDIzcHg7XG4gIGZvbnQtc2l6ZTogMjdweDtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhTmV1ZUxpZ2h0XCIsIFwiSGVsdmV0aWNhTmV1ZS1MaWdodFwiLCBcIkhlbHZldGljYU5ldWUgTGlnaHRcIiwgXCJIZWx2ZXRpY2FOZXVlXCIsIFwiSGVsdmV0aWNhTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBcIkx1Y2lkYSBHcmFuZGVcIiwgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDMwMCAhaW1wb3J0YW50O1xufVxuXG4ubW9kYWwtYm9keSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogMjBweCAzMHB4O1xufVxuXG4ubW9kYWwtZm9vdGVyIHtcbiAgcGFkZGluZzogMjBweCAzMHB4O1xuICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XG4gIGJvcmRlci10b3A6IDA7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG59XG5cbi5tb2RhbC1mb290ZXI6YmVmb3JlLFxuLm1vZGFsLWZvb3RlcjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLm1vZGFsLWZvb3RlcjphZnRlciB7XG4gIGNsZWFyOiBib3RoO1xufVxuXG4ubW9kYWwtZm9vdGVyIC5idG4ge1xuICBwYWRkaW5nOiA2cHggMTJweDtcbiAgbWluLXdpZHRoOiA3NXB4O1xufVxuXG4ubW9kYWwtZm9vdGVyIC5idG4gKyAuYnRuIHtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLm1vZGFsLWZvb3RlciAuYnRuLWdyb3VwIC5idG4gKyAuYnRuIHtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG59XG5cbi5tb2RhbC1mb290ZXIgLmJ0bi1ibG9jayArIC5idG4tYmxvY2sge1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLm1vZGFsLXNjcm9sbGJhci1tZWFzdXJlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC05OTk5cHg7XG4gIHdpZHRoOiA1MHB4O1xuICBoZWlnaHQ6IDUwcHg7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAubW9kYWwtZGlhbG9nIHtcbiAgICB3aWR0aDogODI0cHg7XG4gICAgbWFyZ2luOiAzMHB4IGF1dG87XG4gIH1cbiAgLm1vZGFsLWNvbnRlbnQge1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gICAgYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gIH1cbiAgLm1vZGFsLXNtIHtcbiAgICB3aWR0aDogNTI0cHg7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAubW9kYWwtbGcge1xuICAgIHdpZHRoOiAxMTI0cHg7XG4gIH1cbn1cblxuLm1vZGFsIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAubW9kYWw6YmVmb3JlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBjb250ZW50OiBcIiBcIjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbn1cblxuLm1vZGFsLWRpYWxvZyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLypcbiogUHJvamVjdCBLaW1jaGlcbipcbiogQ29weXJpZ2h0IElCTSwgQ29ycC4gMjAxNVxuKlxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTtcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuKlxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsXG4qIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi5tZW51LWZsYXQgLmJ0biB7XG4gIGJhY2tncm91bmQ6ICM0ZDRjNGUgIWltcG9ydGFudDtcbiAgbWluLXdpZHRoOiAxNjBweDtcbiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYU5ldWVCb2xkXCIsIFwiSGVsdmV0aWNhTmV1ZS1Cb2xkXCIsIFwiSGVsdmV0aWNhTmV1ZSBCb2xkXCIsIFwiSGVsdmV0aWNhIE5ldWUgQm9sZFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIFwiSGVsdmV0aWNhTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBcIkx1Y2lkYSBHcmFuZGVcIiwgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgZm9udC1zaXplOiAxMy41cHQ7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiA0MHB4O1xuICBwYWRkaW5nOiA0cHggNDVweCA1cHggMzhweDtcbn1cblxuLm1lbnUtZmxhdCAuYnRuID4gaSB7XG4gIGZvbnQtc2l6ZTogMjJweDtcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgd2lkdGg6IDI2cHg7XG4gIGhlaWdodDogNDBweDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiA2cHg7XG59XG5cbi5tZW51LWZsYXQgLmJ0biA+IGk6YmVmb3JlIHtcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XG59XG5cbi5tZW51LWZsYXQgLmNhcmV0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgbWFyZ2luLWxlZnQ6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGJvcmRlci10b3A6IDA7XG4gIGJvcmRlci10b3A6IDAgXFw5O1xuICBib3JkZXItcmlnaHQ6IDA7XG4gIGJvcmRlci1sZWZ0OiAwO1xufVxuXG4ubWVudS1mbGF0IC5jYXJldDpiZWZvcmUge1xuICBmb250LWZhbWlseTogXCJmb250ZWxsb1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgc3BlYWs6IG5vbmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdGV4dC1kZWNvcmF0aW9uOiBpbmhlcml0O1xuICB3aWR0aDogMS4yZW07XG4gIGhlaWdodDogMS4yZW07XG4gIG1hcmdpbjogLjVlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXZhcmlhbnQ6IG5vcm1hbDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIGxpbmUtaGVpZ2h0OiAyZW07XG4gIGNvbnRlbnQ6ICdcXGU4NjEnO1xufVxuXG4ubWVudS1mbGF0LmRyb3B1cCxcbi5tZW51LWZsYXQuZHJvcGRvd24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5tZW51LWZsYXQgLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XG4gIG91dGxpbmU6IDA7XG59XG5cbi5tZW51LWZsYXQgLmRyb3Bkb3duLW1lbnUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMTAwJTtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTAwMDtcbiAgZGlzcGxheTogbm9uZTtcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1pbi13aWR0aDogMTYwcHg7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgZm9udC1zaXplOiAxMy41cHQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzYTM5M2I7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbn1cblxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0IHtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IGF1dG87XG59XG5cbi5tZW51LWZsYXQgLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXIge1xuICBoZWlnaHQ6IDFweDtcbiAgbWFyZ2luOiA5cHggMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQwNDA0Mjtcbn1cblxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudSA+IGxpID4gYSB7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjMmUyZTJlO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDBweCAxcHggMHB4IDBweCAjNDA0MDQyO1xuICBib3gtc2hhZG93OiBpbnNldCAwcHggMXB4IDBweCAwcHggIzQwNDA0Mjtcbn1cblxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudSA+IGxpOmZpcnN0LWNoaWxkID4gYSB7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjM2EzOTNiO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XG5cbi5tZW51LWZsYXQgLmRyb3Bkb3duLW1lbnUgPiBsaS5jcml0aWNhbDpsYXN0LWNoaWxkID4gYSB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cblxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudSA+IGxpID4gYSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiA0cHggNnB4O1xuICBjbGVhcjogYm90aDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDMxcHg7XG4gIGNvbG9yOiAjZmZmO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4ubWVudS1mbGF0IC5kcm9wZG93bi1tZW51ID4gbGkgPiBhID4gaSB7XG4gIGZvbnQtc2l6ZTogMjJweDtcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICB3aWR0aDogMjZweDtcbiAgaGVpZ2h0OiAyNnB4O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi5tZW51LWZsYXQgLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIsXG4ubWVudS1mbGF0IC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNhMzkzYjtcbn1cblxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhLFxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgb3V0bGluZTogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNhMzkzYjtcbn1cblxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudSA+IGxpLmNyaXRpY2FsID4gYSB7XG4gIGJhY2tncm91bmQ6ICNkOTE4MmQ7XG59XG5cbi5tZW51LWZsYXQgLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhLFxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4ubWVudS1mbGF0IC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjOTk5O1xufVxuXG4ubWVudS1mbGF0IC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpob3Zlcixcbi5tZW51LWZsYXQgLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZCA9IGZhbHNlKTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLm1lbnUtZmxhdC5vcGVuIC5idG4ge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG59XG5cbi5tZW51LWZsYXQub3BlbiA+IC5kcm9wZG93bi1tZW51IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5tZW51LWZsYXQub3BlbiAuY2FyZXQge1xuICBiYWNrZ3JvdW5kOiAjM2EzOTNiO1xufVxuXG4ubWVudS1mbGF0Lm9wZW4gLmNhcmV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NjQnO1xufVxuXG4ubWVudS1mbGF0Lm9wZW4gPiBhIHtcbiAgb3V0bGluZTogMDtcbn1cblxuLmRyb3Bkb3duLW1lbnUtcmlnaHQge1xuICBsZWZ0OiBhdXRvO1xuICByaWdodDogMDtcbn1cblxuLmRyb3Bkb3duLW1lbnUtbGVmdCB7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiBhdXRvO1xufVxuXG4uZHJvcGRvd24taGVhZGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDNweCAyMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbiAgY29sb3I6ICM5OTk7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5kcm9wZG93bi1iYWNrZHJvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgdG9wOiAwO1xuICB6LWluZGV4OiA5OTA7XG59XG5cbi5wdWxsLXJpZ2h0ID4gLmRyb3Bkb3duLW1lbnUge1xuICByaWdodDogMDtcbiAgbGVmdDogYXV0bztcbn1cblxuLmRyb3B1cCAuY2FyZXQsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmNhcmV0IHtcbiAgYm9yZGVyLXRvcDogMDtcbiAgYm9yZGVyLWJvdHRvbTogNHB4IGRhc2hlZDtcbiAgYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkIFxcOTtcbiAgY29udGVudDogXCJcIjtcbn1cblxuLmRyb3B1cCAuZHJvcGRvd24tbWVudSxcbi5uYXZiYXItZml4ZWQtYm90dG9tIC5kcm9wZG93biAuZHJvcGRvd24tbWVudSB7XG4gIHRvcDogYXV0bztcbiAgYm90dG9tOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiAycHg7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAubmF2YmFyLXJpZ2h0IC5kcm9wZG93bi1tZW51IHtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiBhdXRvO1xuICB9XG4gIC5uYXZiYXItcmlnaHQgLmRyb3Bkb3duLW1lbnUtbGVmdCB7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogYXV0bztcbiAgfVxufVxuXG4uaG9zdHMge1xuICAvKiBCb290c3RyYXAgTW9kYWwqL1xufVxuXG4uaG9zdHMgLm1vZGFsLWZvb3RlciB7XG4gIGJhY2tncm91bmQ6ICMwMDhhYmY7XG59XG5cbnByZSB7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb250YWluZXIge1xuICAgIHdpZHRoOiAxNTQwcHg7XG4gIH1cbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTY4MHB4KSB7XG4gIC5jb250YWluZXIge1xuICAgIHdpZHRoOiAxNTQwcHg7XG4gIH1cbn1cbiIsIi8qISBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9oNWJwL2h0bWw1LWJvaWxlcnBsYXRlL2Jsb2IvbWFzdGVyL3NyYy9jc3MvbWFpbi5jc3MgKi9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFByaW50IHN0eWxlcy5cbi8vIElubGluZWQgdG8gYXZvaWQgdGhlIGFkZGl0aW9uYWwgSFRUUCByZXF1ZXN0OiBoNWJwLmNvbS9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5AbWVkaWEgcHJpbnQge1xuICAgICosXG4gICAgKjpiZWZvcmUsXG4gICAgKjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICAgIGNvbG9yOiAjMDAwICFpbXBvcnRhbnQ7IC8vIEJsYWNrIHByaW50cyBmYXN0ZXI6IGg1YnAuY29tL3NcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIGEsXG4gICAgYTp2aXNpdGVkIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgfVxuXG4gICAgYVtocmVmXTphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IFwiIChcIiBhdHRyKGhyZWYpIFwiKVwiO1xuICAgIH1cblxuICAgIGFiYnJbdGl0bGVdOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogXCIgKFwiIGF0dHIodGl0bGUpIFwiKVwiO1xuICAgIH1cblxuICAgIC8vIERvbid0IHNob3cgbGlua3MgdGhhdCBhcmUgZnJhZ21lbnQgaWRlbnRpZmllcnMsXG4gICAgLy8gb3IgdXNlIHRoZSBgamF2YXNjcmlwdDpgIHBzZXVkbyBwcm90b2NvbFxuICAgIGFbaHJlZl49XCIjXCJdOmFmdGVyLFxuICAgIGFbaHJlZl49XCJqYXZhc2NyaXB0OlwiXTphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgfVxuXG4gICAgcHJlLFxuICAgIGJsb2NrcXVvdGUge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5O1xuICAgICAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XG4gICAgfVxuXG4gICAgdGhlYWQge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7IC8vIGg1YnAuY29tL3RcbiAgICB9XG5cbiAgICB0cixcbiAgICBpbWcge1xuICAgICAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XG4gICAgfVxuXG4gICAgaW1nIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgcCxcbiAgICBoMixcbiAgICBoMyB7XG4gICAgICAgIG9ycGhhbnM6IDM7XG4gICAgICAgIHdpZG93czogMztcbiAgICB9XG5cbiAgICBoMixcbiAgICBoMyB7XG4gICAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkO1xuICAgIH1cblxuICAgIC8vIEJvb3RzdHJhcCBzcGVjaWZpYyBjaGFuZ2VzIHN0YXJ0XG5cbiAgICAvLyBCb290c3RyYXAgY29tcG9uZW50c1xuICAgIC5uYXZiYXIge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgICAuYnRuLFxuICAgIC5kcm9wdXAgPiAuYnRuIHtcbiAgICAgICAgPiAuY2FyZXQge1xuICAgICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogIzAwMCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIC5sYWJlbCB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG4gICAgfVxuXG4gICAgLnRhYmxlIHtcbiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSAhaW1wb3J0YW50O1xuXG4gICAgICAgIHRkLFxuICAgICAgICB0aCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnRhYmxlLWJvcmRlcmVkIHtcbiAgICAgICAgdGgsXG4gICAgICAgIHRkIHtcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJvb3RzdHJhcCBzcGVjaWZpYyBjaGFuZ2VzIGVuZFxufVxuIiwiLy9cbi8vIEdseXBoaWNvbnMgZm9yIEJvb3RzdHJhcFxuLy9cbi8vIFNpbmNlIGljb25zIGFyZSBmb250cywgdGhleSBjYW4gYmUgcGxhY2VkIGFueXdoZXJlIHRleHQgaXMgcGxhY2VkIGFuZCBhcmVcbi8vIHRodXMgYXV0b21hdGljYWxseSBzaXplZCB0byBtYXRjaCB0aGUgc3Vycm91bmRpbmcgY2hpbGQuIFRvIHVzZSwgY3JlYXRlIGFuXG4vLyBpbmxpbmUgZWxlbWVudCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBjbGFzc2VzLCBsaWtlIHNvOlxuLy9cbi8vIDxhIGhyZWY9XCIjXCI+PHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLXN0YXJcIj48L3NwYW4+IFN0YXI8L2E+XG5cbkBhdC1yb290IHtcbiAgLy8gSW1wb3J0IHRoZSBmb250c1xuICBAZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0dseXBoaWNvbnMgSGFsZmxpbmdzJztcbiAgICBzcmM6IHVybChpZigkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyLCB0d2JzLWZvbnQtcGF0aCgnI3skaWNvbi1mb250LXBhdGh9I3skaWNvbi1mb250LW5hbWV9LmVvdCcpLCAnI3skaWNvbi1mb250LXBhdGh9I3skaWNvbi1mb250LW5hbWV9LmVvdCcpKTtcbiAgICBzcmM6IHVybChpZigkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyLCB0d2JzLWZvbnQtcGF0aCgnI3skaWNvbi1mb250LXBhdGh9I3skaWNvbi1mb250LW5hbWV9LmVvdD8jaWVmaXgnKSwgJyN7JGljb24tZm9udC1wYXRofSN7JGljb24tZm9udC1uYW1lfS5lb3Q/I2llZml4JykpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcbiAgICAgICAgIHVybChpZigkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyLCB0d2JzLWZvbnQtcGF0aCgnI3skaWNvbi1mb250LXBhdGh9I3skaWNvbi1mb250LW5hbWV9LndvZmYyJyksICcjeyRpY29uLWZvbnQtcGF0aH0jeyRpY29uLWZvbnQtbmFtZX0ud29mZjInKSkgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgICAgdXJsKGlmKCRib290c3RyYXAtc2Fzcy1hc3NldC1oZWxwZXIsIHR3YnMtZm9udC1wYXRoKCcjeyRpY29uLWZvbnQtcGF0aH0jeyRpY29uLWZvbnQtbmFtZX0ud29mZicpLCAnI3skaWNvbi1mb250LXBhdGh9I3skaWNvbi1mb250LW5hbWV9LndvZmYnKSkgZm9ybWF0KCd3b2ZmJyksXG4gICAgICAgICB1cmwoaWYoJGJvb3RzdHJhcC1zYXNzLWFzc2V0LWhlbHBlciwgdHdicy1mb250LXBhdGgoJyN7JGljb24tZm9udC1wYXRofSN7JGljb24tZm9udC1uYW1lfS50dGYnKSwgJyN7JGljb24tZm9udC1wYXRofSN7JGljb24tZm9udC1uYW1lfS50dGYnKSkgZm9ybWF0KCd0cnVldHlwZScpLFxuICAgICAgICAgdXJsKGlmKCRib290c3RyYXAtc2Fzcy1hc3NldC1oZWxwZXIsIHR3YnMtZm9udC1wYXRoKCcjeyRpY29uLWZvbnQtcGF0aH0jeyRpY29uLWZvbnQtbmFtZX0uc3ZnIyN7JGljb24tZm9udC1zdmctaWR9JyksICcjeyRpY29uLWZvbnQtcGF0aH0jeyRpY29uLWZvbnQtbmFtZX0uc3ZnIyN7JGljb24tZm9udC1zdmctaWR9JykpIGZvcm1hdCgnc3ZnJyk7XG4gIH1cbn1cblxuLy8gQ2F0Y2hhbGwgYmFzZWNsYXNzXG4uZ2x5cGhpY29uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDFweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LWZhbWlseTogJ0dseXBoaWNvbnMgSGFsZmxpbmdzJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMTtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbi8vIEluZGl2aWR1YWwgaWNvbnNcbi5nbHlwaGljb24tYXN0ZXJpc2sgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDJhXCI7IH0gfVxuLmdseXBoaWNvbi1wbHVzICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMmJcIjsgfSB9XG4uZ2x5cGhpY29uLWV1cm8sXG4uZ2x5cGhpY29uLWV1ciAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyMGFjXCI7IH0gfVxuLmdseXBoaWNvbi1taW51cyAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjIxMlwiOyB9IH1cbi5nbHlwaGljb24tY2xvdWQgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDI2MDFcIjsgfSB9XG4uZ2x5cGhpY29uLWVudmVsb3BlICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyNzA5XCI7IH0gfVxuLmdseXBoaWNvbi1wZW5jaWwgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjcwZlwiOyB9IH1cbi5nbHlwaGljb24tZ2xhc3MgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMDFcIjsgfSB9XG4uZ2x5cGhpY29uLW11c2ljICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDAyXCI7IH0gfVxuLmdseXBoaWNvbi1zZWFyY2ggICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwM1wiOyB9IH1cbi5nbHlwaGljb24taGVhcnQgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMDVcIjsgfSB9XG4uZ2x5cGhpY29uLXN0YXIgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDA2XCI7IH0gfVxuLmdseXBoaWNvbi1zdGFyLWVtcHR5ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwN1wiOyB9IH1cbi5nbHlwaGljb24tdXNlciAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMDhcIjsgfSB9XG4uZ2x5cGhpY29uLWZpbG0gICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDA5XCI7IH0gfVxuLmdseXBoaWNvbi10aC1sYXJnZSAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxMFwiOyB9IH1cbi5nbHlwaGljb24tdGggICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTFcIjsgfSB9XG4uZ2x5cGhpY29uLXRoLWxpc3QgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDEyXCI7IH0gfVxuLmdseXBoaWNvbi1vayAgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxM1wiOyB9IH1cbi5nbHlwaGljb24tcmVtb3ZlICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTRcIjsgfSB9XG4uZ2x5cGhpY29uLXpvb20taW4gICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDE1XCI7IH0gfVxuLmdseXBoaWNvbi16b29tLW91dCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxNlwiOyB9IH1cbi5nbHlwaGljb24tb2ZmICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTdcIjsgfSB9XG4uZ2x5cGhpY29uLXNpZ25hbCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDE4XCI7IH0gfVxuLmdseXBoaWNvbi1jb2cgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxOVwiOyB9IH1cbi5nbHlwaGljb24tdHJhc2ggICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjBcIjsgfSB9XG4uZ2x5cGhpY29uLWhvbWUgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDIxXCI7IH0gfVxuLmdseXBoaWNvbi1maWxlICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyMlwiOyB9IH1cbi5nbHlwaGljb24tdGltZSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjNcIjsgfSB9XG4uZ2x5cGhpY29uLXJvYWQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDI0XCI7IH0gfVxuLmdseXBoaWNvbi1kb3dubG9hZC1hbHQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyNVwiOyB9IH1cbi5nbHlwaGljb24tZG93bmxvYWQgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjZcIjsgfSB9XG4uZ2x5cGhpY29uLXVwbG9hZCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDI3XCI7IH0gfVxuLmdseXBoaWNvbi1pbmJveCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyOFwiOyB9IH1cbi5nbHlwaGljb24tcGxheS1jaXJjbGUgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjlcIjsgfSB9XG4uZ2x5cGhpY29uLXJlcGVhdCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDMwXCI7IH0gfVxuLmdseXBoaWNvbi1yZWZyZXNoICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzMVwiOyB9IH1cbi5nbHlwaGljb24tbGlzdC1hbHQgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzJcIjsgfSB9XG4uZ2x5cGhpY29uLWxvY2sgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDMzXCI7IH0gfVxuLmdseXBoaWNvbi1mbGFnICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzNFwiOyB9IH1cbi5nbHlwaGljb24taGVhZHBob25lcyAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzVcIjsgfSB9XG4uZ2x5cGhpY29uLXZvbHVtZS1vZmYgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDM2XCI7IH0gfVxuLmdseXBoaWNvbi12b2x1bWUtZG93biAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzN1wiOyB9IH1cbi5nbHlwaGljb24tdm9sdW1lLXVwICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzhcIjsgfSB9XG4uZ2x5cGhpY29uLXFyY29kZSAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDM5XCI7IH0gfVxuLmdseXBoaWNvbi1iYXJjb2RlICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0MFwiOyB9IH1cbi5nbHlwaGljb24tdGFnICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDFcIjsgfSB9XG4uZ2x5cGhpY29uLXRhZ3MgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQyXCI7IH0gfVxuLmdseXBoaWNvbi1ib29rICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0M1wiOyB9IH1cbi5nbHlwaGljb24tYm9va21hcmsgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDRcIjsgfSB9XG4uZ2x5cGhpY29uLXByaW50ICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQ1XCI7IH0gfVxuLmdseXBoaWNvbi1jYW1lcmEgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0NlwiOyB9IH1cbi5nbHlwaGljb24tZm9udCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDdcIjsgfSB9XG4uZ2x5cGhpY29uLWJvbGQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQ4XCI7IH0gfVxuLmdseXBoaWNvbi1pdGFsaWMgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0OVwiOyB9IH1cbi5nbHlwaGljb24tdGV4dC1oZWlnaHQgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTBcIjsgfSB9XG4uZ2x5cGhpY29uLXRleHQtd2lkdGggICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDUxXCI7IH0gfVxuLmdseXBoaWNvbi1hbGlnbi1sZWZ0ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1MlwiOyB9IH1cbi5nbHlwaGljb24tYWxpZ24tY2VudGVyICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTNcIjsgfSB9XG4uZ2x5cGhpY29uLWFsaWduLXJpZ2h0ICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDU0XCI7IH0gfVxuLmdseXBoaWNvbi1hbGlnbi1qdXN0aWZ5ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1NVwiOyB9IH1cbi5nbHlwaGljb24tbGlzdCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTZcIjsgfSB9XG4uZ2x5cGhpY29uLWluZGVudC1sZWZ0ICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDU3XCI7IH0gfVxuLmdseXBoaWNvbi1pbmRlbnQtcmlnaHQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1OFwiOyB9IH1cbi5nbHlwaGljb24tZmFjZXRpbWUtdmlkZW8gICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTlcIjsgfSB9XG4uZ2x5cGhpY29uLXBpY3R1cmUgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDYwXCI7IH0gfVxuLmdseXBoaWNvbi1tYXAtbWFya2VyICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2MlwiOyB9IH1cbi5nbHlwaGljb24tYWRqdXN0ICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjNcIjsgfSB9XG4uZ2x5cGhpY29uLXRpbnQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDY0XCI7IH0gfVxuLmdseXBoaWNvbi1lZGl0ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2NVwiOyB9IH1cbi5nbHlwaGljb24tc2hhcmUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjZcIjsgfSB9XG4uZ2x5cGhpY29uLWNoZWNrICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDY3XCI7IH0gfVxuLmdseXBoaWNvbi1tb3ZlICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2OFwiOyB9IH1cbi5nbHlwaGljb24tc3RlcC1iYWNrd2FyZCAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjlcIjsgfSB9XG4uZ2x5cGhpY29uLWZhc3QtYmFja3dhcmQgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDcwXCI7IH0gfVxuLmdseXBoaWNvbi1iYWNrd2FyZCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3MVwiOyB9IH1cbi5nbHlwaGljb24tcGxheSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzJcIjsgfSB9XG4uZ2x5cGhpY29uLXBhdXNlICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDczXCI7IH0gfVxuLmdseXBoaWNvbi1zdG9wICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3NFwiOyB9IH1cbi5nbHlwaGljb24tZm9yd2FyZCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzVcIjsgfSB9XG4uZ2x5cGhpY29uLWZhc3QtZm9yd2FyZCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDc2XCI7IH0gfVxuLmdseXBoaWNvbi1zdGVwLWZvcndhcmQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3N1wiOyB9IH1cbi5nbHlwaGljb24tZWplY3QgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzhcIjsgfSB9XG4uZ2x5cGhpY29uLWNoZXZyb24tbGVmdCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDc5XCI7IH0gfVxuLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4MFwiOyB9IH1cbi5nbHlwaGljb24tcGx1cy1zaWduICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODFcIjsgfSB9XG4uZ2x5cGhpY29uLW1pbnVzLXNpZ24gICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDgyXCI7IH0gfVxuLmdseXBoaWNvbi1yZW1vdmUtc2lnbiAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4M1wiOyB9IH1cbi5nbHlwaGljb24tb2stc2lnbiAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODRcIjsgfSB9XG4uZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDg1XCI7IH0gfVxuLmdseXBoaWNvbi1pbmZvLXNpZ24gICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4NlwiOyB9IH1cbi5nbHlwaGljb24tc2NyZWVuc2hvdCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODdcIjsgfSB9XG4uZ2x5cGhpY29uLXJlbW92ZS1jaXJjbGUgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDg4XCI7IH0gfVxuLmdseXBoaWNvbi1vay1jaXJjbGUgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4OVwiOyB9IH1cbi5nbHlwaGljb24tYmFuLWNpcmNsZSAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwOTBcIjsgfSB9XG4uZ2x5cGhpY29uLWFycm93LWxlZnQgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDkxXCI7IH0gfVxuLmdseXBoaWNvbi1hcnJvdy1yaWdodCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5MlwiOyB9IH1cbi5nbHlwaGljb24tYXJyb3ctdXAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwOTNcIjsgfSB9XG4uZ2x5cGhpY29uLWFycm93LWRvd24gICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDk0XCI7IH0gfVxuLmdseXBoaWNvbi1zaGFyZS1hbHQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5NVwiOyB9IH1cbi5nbHlwaGljb24tcmVzaXplLWZ1bGwgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwOTZcIjsgfSB9XG4uZ2x5cGhpY29uLXJlc2l6ZS1zbWFsbCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDk3XCI7IH0gfVxuLmdseXBoaWNvbi1leGNsYW1hdGlvbi1zaWduICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwMVwiOyB9IH1cbi5nbHlwaGljb24tZ2lmdCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDJcIjsgfSB9XG4uZ2x5cGhpY29uLWxlYWYgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTAzXCI7IH0gfVxuLmdseXBoaWNvbi1maXJlICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwNFwiOyB9IH1cbi5nbHlwaGljb24tZXllLW9wZW4gICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDVcIjsgfSB9XG4uZ2x5cGhpY29uLWV5ZS1jbG9zZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTA2XCI7IH0gfVxuLmdseXBoaWNvbi13YXJuaW5nLXNpZ24gICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwN1wiOyB9IH1cbi5nbHlwaGljb24tcGxhbmUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDhcIjsgfSB9XG4uZ2x5cGhpY29uLWNhbGVuZGFyICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTA5XCI7IH0gfVxuLmdseXBoaWNvbi1yYW5kb20gICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExMFwiOyB9IH1cbi5nbHlwaGljb24tY29tbWVudCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTFcIjsgfSB9XG4uZ2x5cGhpY29uLW1hZ25ldCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTEyXCI7IH0gfVxuLmdseXBoaWNvbi1jaGV2cm9uLXVwICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExM1wiOyB9IH1cbi5nbHlwaGljb24tY2hldnJvbi1kb3duICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTRcIjsgfSB9XG4uZ2x5cGhpY29uLXJldHdlZXQgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTE1XCI7IH0gfVxuLmdseXBoaWNvbi1zaG9wcGluZy1jYXJ0ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExNlwiOyB9IH1cbi5nbHlwaGljb24tZm9sZGVyLWNsb3NlICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTdcIjsgfSB9XG4uZ2x5cGhpY29uLWZvbGRlci1vcGVuICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTE4XCI7IH0gfVxuLmdseXBoaWNvbi1yZXNpemUtdmVydGljYWwgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExOVwiOyB9IH1cbi5nbHlwaGljb24tcmVzaXplLWhvcml6b250YWwgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjBcIjsgfSB9XG4uZ2x5cGhpY29uLWhkZCAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTIxXCI7IH0gfVxuLmdseXBoaWNvbi1idWxsaG9ybiAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyMlwiOyB9IH1cbi5nbHlwaGljb24tYmVsbCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjNcIjsgfSB9XG4uZ2x5cGhpY29uLWNlcnRpZmljYXRlICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTI0XCI7IH0gfVxuLmdseXBoaWNvbi10aHVtYnMtdXAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyNVwiOyB9IH1cbi5nbHlwaGljb24tdGh1bWJzLWRvd24gICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjZcIjsgfSB9XG4uZ2x5cGhpY29uLWhhbmQtcmlnaHQgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTI3XCI7IH0gfVxuLmdseXBoaWNvbi1oYW5kLWxlZnQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyOFwiOyB9IH1cbi5nbHlwaGljb24taGFuZC11cCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjlcIjsgfSB9XG4uZ2x5cGhpY29uLWhhbmQtZG93biAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTMwXCI7IH0gfVxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctcmlnaHQgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzMVwiOyB9IH1cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LWxlZnQgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzJcIjsgfSB9XG4uZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy11cCAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTMzXCI7IH0gfVxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctZG93biAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzNFwiOyB9IH1cbi5nbHlwaGljb24tZ2xvYmUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzVcIjsgfSB9XG4uZ2x5cGhpY29uLXdyZW5jaCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTM2XCI7IH0gfVxuLmdseXBoaWNvbi10YXNrcyAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzN1wiOyB9IH1cbi5nbHlwaGljb24tZmlsdGVyICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzhcIjsgfSB9XG4uZ2x5cGhpY29uLWJyaWVmY2FzZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTM5XCI7IH0gfVxuLmdseXBoaWNvbi1mdWxsc2NyZWVuICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0MFwiOyB9IH1cbi5nbHlwaGljb24tZGFzaGJvYXJkICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDFcIjsgfSB9XG4uZ2x5cGhpY29uLXBhcGVyY2xpcCAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQyXCI7IH0gfVxuLmdseXBoaWNvbi1oZWFydC1lbXB0eSAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0M1wiOyB9IH1cbi5nbHlwaGljb24tbGluayAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDRcIjsgfSB9XG4uZ2x5cGhpY29uLXBob25lICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQ1XCI7IH0gfVxuLmdseXBoaWNvbi1wdXNocGluICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0NlwiOyB9IH1cbi5nbHlwaGljb24tdXNkICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDhcIjsgfSB9XG4uZ2x5cGhpY29uLWdicCAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQ5XCI7IH0gfVxuLmdseXBoaWNvbi1zb3J0ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1MFwiOyB9IH1cbi5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldCAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTFcIjsgfSB9XG4uZ2x5cGhpY29uLXNvcnQtYnktYWxwaGFiZXQtYWx0ICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTUyXCI7IH0gfVxuLmdseXBoaWNvbi1zb3J0LWJ5LW9yZGVyICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1M1wiOyB9IH1cbi5nbHlwaGljb24tc29ydC1ieS1vcmRlci1hbHQgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTRcIjsgfSB9XG4uZ2x5cGhpY29uLXNvcnQtYnktYXR0cmlidXRlcyAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTU1XCI7IH0gfVxuLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXMtYWx0IHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1NlwiOyB9IH1cbi5nbHlwaGljb24tdW5jaGVja2VkICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTdcIjsgfSB9XG4uZ2x5cGhpY29uLWV4cGFuZCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTU4XCI7IH0gfVxuLmdseXBoaWNvbi1jb2xsYXBzZS1kb3duICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1OVwiOyB9IH1cbi5nbHlwaGljb24tY29sbGFwc2UtdXAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjBcIjsgfSB9XG4uZ2x5cGhpY29uLWxvZy1pbiAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTYxXCI7IH0gfVxuLmdseXBoaWNvbi1mbGFzaCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2MlwiOyB9IH1cbi5nbHlwaGljb24tbG9nLW91dCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjNcIjsgfSB9XG4uZ2x5cGhpY29uLW5ldy13aW5kb3cgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTY0XCI7IH0gfVxuLmdseXBoaWNvbi1yZWNvcmQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2NVwiOyB9IH1cbi5nbHlwaGljb24tc2F2ZSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjZcIjsgfSB9XG4uZ2x5cGhpY29uLW9wZW4gICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTY3XCI7IH0gfVxuLmdseXBoaWNvbi1zYXZlZCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2OFwiOyB9IH1cbi5nbHlwaGljb24taW1wb3J0ICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjlcIjsgfSB9XG4uZ2x5cGhpY29uLWV4cG9ydCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTcwXCI7IH0gfVxuLmdseXBoaWNvbi1zZW5kICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3MVwiOyB9IH1cbi5nbHlwaGljb24tZmxvcHB5LWRpc2sgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzJcIjsgfSB9XG4uZ2x5cGhpY29uLWZsb3BweS1zYXZlZCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTczXCI7IH0gfVxuLmdseXBoaWNvbi1mbG9wcHktcmVtb3ZlICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3NFwiOyB9IH1cbi5nbHlwaGljb24tZmxvcHB5LXNhdmUgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzVcIjsgfSB9XG4uZ2x5cGhpY29uLWZsb3BweS1vcGVuICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTc2XCI7IH0gfVxuLmdseXBoaWNvbi1jcmVkaXQtY2FyZCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3N1wiOyB9IH1cbi5nbHlwaGljb24tdHJhbnNmZXIgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzhcIjsgfSB9XG4uZ2x5cGhpY29uLWN1dGxlcnkgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTc5XCI7IH0gfVxuLmdseXBoaWNvbi1oZWFkZXIgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4MFwiOyB9IH1cbi5nbHlwaGljb24tY29tcHJlc3NlZCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODFcIjsgfSB9XG4uZ2x5cGhpY29uLWVhcnBob25lICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTgyXCI7IH0gfVxuLmdseXBoaWNvbi1waG9uZS1hbHQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4M1wiOyB9IH1cbi5nbHlwaGljb24tdG93ZXIgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODRcIjsgfSB9XG4uZ2x5cGhpY29uLXN0YXRzICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTg1XCI7IH0gfVxuLmdseXBoaWNvbi1zZC12aWRlbyAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4NlwiOyB9IH1cbi5nbHlwaGljb24taGQtdmlkZW8gICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODdcIjsgfSB9XG4uZ2x5cGhpY29uLXN1YnRpdGxlcyAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTg4XCI7IH0gfVxuLmdseXBoaWNvbi1zb3VuZC1zdGVyZW8gICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4OVwiOyB9IH1cbi5nbHlwaGljb24tc291bmQtZG9sYnkgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOTBcIjsgfSB9XG4uZ2x5cGhpY29uLXNvdW5kLTUtMSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTkxXCI7IH0gfVxuLmdseXBoaWNvbi1zb3VuZC02LTEgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5MlwiOyB9IH1cbi5nbHlwaGljb24tc291bmQtNy0xICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOTNcIjsgfSB9XG4uZ2x5cGhpY29uLWNvcHlyaWdodC1tYXJrICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTk0XCI7IH0gfVxuLmdseXBoaWNvbi1yZWdpc3RyYXRpb24tbWFyayAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5NVwiOyB9IH1cbi5nbHlwaGljb24tY2xvdWQtZG93bmxvYWQgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOTdcIjsgfSB9XG4uZ2x5cGhpY29uLWNsb3VkLXVwbG9hZCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTk4XCI7IH0gfVxuLmdseXBoaWNvbi10cmVlLWNvbmlmZXIgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5OVwiOyB9IH1cbi5nbHlwaGljb24tdHJlZS1kZWNpZHVvdXMgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDBcIjsgfSB9XG4uZ2x5cGhpY29uLWNkICAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjAxXCI7IH0gfVxuLmdseXBoaWNvbi1zYXZlLWZpbGUgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwMlwiOyB9IH1cbi5nbHlwaGljb24tb3Blbi1maWxlICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDNcIjsgfSB9XG4uZ2x5cGhpY29uLWxldmVsLXVwICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjA0XCI7IH0gfVxuLmdseXBoaWNvbi1jb3B5ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwNVwiOyB9IH1cbi5nbHlwaGljb24tcGFzdGUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDZcIjsgfSB9XG4vLyBUaGUgZm9sbG93aW5nIDIgR2x5cGhpY29ucyBhcmUgb21pdHRlZCBmb3IgdGhlIHRpbWUgYmVpbmcgYmVjYXVzZVxuLy8gdGhleSBjdXJyZW50bHkgdXNlIFVuaWNvZGUgY29kZXBvaW50cyB0aGF0IGFyZSBvdXRzaWRlIHRoZVxuLy8gQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIChCTVApLiBPbGRlciBidWdneSB2ZXJzaW9ucyBvZiBXZWJLaXQgY2FuJ3QgaGFuZGxlXG4vLyBub24tQk1QIGNvZGVwb2ludHMgaW4gQ1NTIHN0cmluZyBlc2NhcGVzLCBhbmQgdGh1cyBjYW4ndCBkaXNwbGF5IHRoZXNlIHR3byBpY29ucy5cbi8vIE5vdGFibHksIHRoZSBidWcgYWZmZWN0cyBzb21lIG9sZGVyIHZlcnNpb25zIG9mIHRoZSBBbmRyb2lkIEJyb3dzZXIuXG4vLyBNb3JlIGluZm86IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTAxMDZcbi8vIC5nbHlwaGljb24tZG9vciAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDFmNmFhXCI7IH0gfVxuLy8gLmdseXBoaWNvbi1rZXkgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMWY1MTFcIjsgfSB9XG4uZ2x5cGhpY29uLWFsZXJ0ICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjA5XCI7IH0gfVxuLmdseXBoaWNvbi1lcXVhbGl6ZXIgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxMFwiOyB9IH1cbi5nbHlwaGljb24ta2luZyAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTFcIjsgfSB9XG4uZ2x5cGhpY29uLXF1ZWVuICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjEyXCI7IH0gfVxuLmdseXBoaWNvbi1wYXduICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxM1wiOyB9IH1cbi5nbHlwaGljb24tYmlzaG9wICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTRcIjsgfSB9XG4uZ2x5cGhpY29uLWtuaWdodCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjE1XCI7IH0gfVxuLmdseXBoaWNvbi1iYWJ5LWZvcm11bGEgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxNlwiOyB9IH1cbi5nbHlwaGljb24tdGVudCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDI2ZmFcIjsgfSB9XG4uZ2x5cGhpY29uLWJsYWNrYm9hcmQgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjE4XCI7IH0gfVxuLmdseXBoaWNvbi1iZWQgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxOVwiOyB9IH1cbi5nbHlwaGljb24tYXBwbGUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGY4ZmZcIjsgfSB9XG4uZ2x5cGhpY29uLWVyYXNlICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjIxXCI7IH0gfVxuLmdseXBoaWNvbi1ob3VyZ2xhc3MgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjMxYlwiOyB9IH1cbi5nbHlwaGljb24tbGFtcCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjNcIjsgfSB9XG4uZ2x5cGhpY29uLWR1cGxpY2F0ZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjI0XCI7IH0gfVxuLmdseXBoaWNvbi1waWdneS1iYW5rICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIyNVwiOyB9IH1cbi5nbHlwaGljb24tc2Npc3NvcnMgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjZcIjsgfSB9XG4uZ2x5cGhpY29uLWJpdGNvaW4gICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjI3XCI7IH0gfVxuLmdseXBoaWNvbi1idGMgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIyN1wiOyB9IH1cbi5nbHlwaGljb24teGJ0ICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjdcIjsgfSB9XG4uZ2x5cGhpY29uLXllbiAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwwMGE1XCI7IH0gfVxuLmdseXBoaWNvbi1qcHkgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMDBhNVwiOyB9IH1cbi5nbHlwaGljb24tcnVibGUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDIwYmRcIjsgfSB9XG4uZ2x5cGhpY29uLXJ1YiAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyMGJkXCI7IH0gfVxuLmdseXBoaWNvbi1zY2FsZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzMFwiOyB9IH1cbi5nbHlwaGljb24taWNlLWxvbGx5ICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzFcIjsgfSB9XG4uZ2x5cGhpY29uLWljZS1sb2xseS10YXN0ZWQgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjMyXCI7IH0gfVxuLmdseXBoaWNvbi1lZHVjYXRpb24gICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzM1wiOyB9IH1cbi5nbHlwaGljb24tb3B0aW9uLWhvcml6b250YWwgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzRcIjsgfSB9XG4uZ2x5cGhpY29uLW9wdGlvbi12ZXJ0aWNhbCAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjM1XCI7IH0gfVxuLmdseXBoaWNvbi1tZW51LWhhbWJ1cmdlciAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzNlwiOyB9IH1cbi5nbHlwaGljb24tbW9kYWwtd2luZG93ICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzdcIjsgfSB9XG4uZ2x5cGhpY29uLW9pbCAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjM4XCI7IH0gfVxuLmdseXBoaWNvbi1ncmFpbiAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzOVwiOyB9IH1cbi5nbHlwaGljb24tc3VuZ2xhc3NlcyAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDBcIjsgfSB9XG4uZ2x5cGhpY29uLXRleHQtc2l6ZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQxXCI7IH0gfVxuLmdseXBoaWNvbi10ZXh0LWNvbG9yICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0MlwiOyB9IH1cbi5nbHlwaGljb24tdGV4dC1iYWNrZ3JvdW5kICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDNcIjsgfSB9XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi10b3AgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQ0XCI7IH0gfVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tYm90dG9tICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0NVwiOyB9IH1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLWhvcml6b250YWx7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDZcIjsgfSB9XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1sZWZ0ICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQ3XCI7IH0gfVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tdmVydGljYWwgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0OFwiOyB9IH1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLXJpZ2h0ICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDlcIjsgfSB9XG4uZ2x5cGhpY29uLXRyaWFuZ2xlLXJpZ2h0ICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjUwXCI7IH0gfVxuLmdseXBoaWNvbi10cmlhbmdsZS1sZWZ0ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1MVwiOyB9IH1cbi5nbHlwaGljb24tdHJpYW5nbGUtYm90dG9tICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTJcIjsgfSB9XG4uZ2x5cGhpY29uLXRyaWFuZ2xlLXRvcCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjUzXCI7IH0gfVxuLmdseXBoaWNvbi1jb25zb2xlICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1NFwiOyB9IH1cbi5nbHlwaGljb24tc3VwZXJzY3JpcHQgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTVcIjsgfSB9XG4uZ2x5cGhpY29uLXN1YnNjcmlwdCAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjU2XCI7IH0gfVxuLmdseXBoaWNvbi1tZW51LWxlZnQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1N1wiOyB9IH1cbi5nbHlwaGljb24tbWVudS1yaWdodCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNThcIjsgfSB9XG4uZ2x5cGhpY29uLW1lbnUtZG93biAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjU5XCI7IH0gfVxuLmdseXBoaWNvbi1tZW51LXVwICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI2MFwiOyB9IH1cbiIsIi8vXG4vLyBTY2FmZm9sZGluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBSZXNldCB0aGUgYm94LXNpemluZ1xuLy9cbi8vIEhlYWRzIHVwISBUaGlzIHJlc2V0IG1heSBjYXVzZSBjb25mbGljdHMgd2l0aCBzb21lIHRoaXJkLXBhcnR5IHdpZGdldHMuXG4vLyBGb3IgcmVjb21tZW5kYXRpb25zIG9uIHJlc29sdmluZyBzdWNoIGNvbmZsaWN0cywgc2VlXG4vLyBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9nZXR0aW5nLXN0YXJ0ZWQvI3RoaXJkLWJveC1zaXppbmdcbioge1xuICBAaW5jbHVkZSBib3gtc2l6aW5nKGJvcmRlci1ib3gpO1xufVxuKjpiZWZvcmUsXG4qOmFmdGVyIHtcbiAgQGluY2x1ZGUgYm94LXNpemluZyhib3JkZXItYm94KTtcbn1cblxuXG4vLyBCb2R5IHJlc2V0XG5cbmh0bWwge1xuICBmb250LXNpemU6IDEwcHg7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLDAsMCwwKTtcbn1cblxuYm9keSB7XG4gIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktYmFzZTtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLWJhc2U7XG4gIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgY29sb3I6ICR0ZXh0LWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYm9keS1iZztcbn1cblxuLy8gUmVzZXQgZm9udHMgZm9yIHJlbGV2YW50IGVsZW1lbnRzXG5pbnB1dCxcbmJ1dHRvbixcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG59XG5cblxuLy8gTGlua3NcblxuYSB7XG4gIGNvbG9yOiAkbGluay1jb2xvcjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiAkbGluay1ob3Zlci1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246ICRsaW5rLWhvdmVyLWRlY29yYXRpb247XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBAaW5jbHVkZSB0YWItZm9jdXM7XG4gIH1cbn1cblxuXG4vLyBGaWd1cmVzXG4vL1xuLy8gV2UgcmVzZXQgdGhpcyBoZXJlIGJlY2F1c2UgcHJldmlvdXNseSBOb3JtYWxpemUgaGFkIG5vIGBmaWd1cmVgIG1hcmdpbnMuIFRoaXNcbi8vIGVuc3VyZXMgd2UgZG9uJ3QgYnJlYWsgYW55b25lJ3MgdXNlIG9mIHRoZSBlbGVtZW50LlxuXG5maWd1cmUge1xuICBtYXJnaW46IDA7XG59XG5cblxuLy8gSW1hZ2VzXG5cbmltZyB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi8vIFJlc3BvbnNpdmUgaW1hZ2VzIChlbnN1cmUgaW1hZ2VzIGRvbid0IHNjYWxlIGJleW9uZCB0aGVpciBwYXJlbnRzKVxuLmltZy1yZXNwb25zaXZlIHtcbiAgQGluY2x1ZGUgaW1nLXJlc3BvbnNpdmU7XG59XG5cbi8vIFJvdW5kZWQgY29ybmVyc1xuLmltZy1yb3VuZGVkIHtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtbGFyZ2U7XG59XG5cbi8vIEltYWdlIHRodW1ibmFpbHNcbi8vXG4vLyBIZWFkcyB1cCEgVGhpcyBpcyBtaXhpbi1lZCBpbnRvIHRodW1ibmFpbHMubGVzcyBmb3IgYC50aHVtYm5haWxgLlxuLmltZy10aHVtYm5haWwge1xuICBwYWRkaW5nOiAkdGh1bWJuYWlsLXBhZGRpbmc7XG4gIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHRodW1ibmFpbC1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgJHRodW1ibmFpbC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICR0aHVtYm5haWwtYm9yZGVyLXJhZGl1cztcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbihhbGwgLjJzIGVhc2UtaW4tb3V0KTtcblxuICAvLyBLZWVwIHRoZW0gYXQgbW9zdCAxMDAlIHdpZGVcbiAgQGluY2x1ZGUgaW1nLXJlc3BvbnNpdmUoaW5saW5lLWJsb2NrKTtcbn1cblxuLy8gUGVyZmVjdCBjaXJjbGVcbi5pbWctY2lyY2xlIHtcbiAgYm9yZGVyLXJhZGl1czogNTAlOyAvLyBzZXQgcmFkaXVzIGluIHBlcmNlbnRzXG59XG5cblxuLy8gSG9yaXpvbnRhbCBydWxlc1xuXG5ociB7XG4gIG1hcmdpbi10b3A6ICAgICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgbWFyZ2luLWJvdHRvbTogJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAkaHItYm9yZGVyO1xufVxuXG5cbi8vIE9ubHkgZGlzcGxheSBjb250ZW50IHRvIHNjcmVlbiByZWFkZXJzXG4vL1xuLy8gU2VlOiBodHRwOi8vYTExeXByb2plY3QuY29tL3Bvc3RzL2hvdy10by1oaWRlLWNvbnRlbnQvXG5cbi5zci1vbmx5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xuICBoZWlnaHQ6IDFweDtcbiAgbWFyZ2luOiAtMXB4O1xuICBwYWRkaW5nOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjbGlwOiByZWN0KDAsMCwwLDApO1xuICBib3JkZXI6IDA7XG59XG5cbi8vIFVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIC5zci1vbmx5IHRvIG9ubHkgZGlzcGxheSBjb250ZW50IHdoZW4gaXQncyBmb2N1c2VkLlxuLy8gVXNlZnVsIGZvciBcIlNraXAgdG8gbWFpbiBjb250ZW50XCIgbGlua3M7IHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL05PVEUtV0NBRzIwLVRFQ0hTLTIwMTMwOTA1L0cxXG4vLyBDcmVkaXQ6IEhUTUw1IEJvaWxlcnBsYXRlXG5cbi5zci1vbmx5LWZvY3VzYWJsZSB7XG4gICY6YWN0aXZlLFxuICAmOmZvY3VzIHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGhlaWdodDogYXV0bztcbiAgICBtYXJnaW46IDA7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgY2xpcDogYXV0bztcbiAgfVxufVxuXG5cbi8vIGlPUyBcImNsaWNrYWJsZSBlbGVtZW50c1wiIGZpeCBmb3Igcm9sZT1cImJ1dHRvblwiXG4vL1xuLy8gRml4ZXMgXCJjbGlja2FiaWxpdHlcIiBpc3N1ZSAoYW5kIG1vcmUgZ2VuZXJhbGx5LCB0aGUgZmlyaW5nIG9mIGV2ZW50cyBzdWNoIGFzIGZvY3VzIGFzIHdlbGwpXG4vLyBmb3IgdHJhZGl0aW9uYWxseSBub24tZm9jdXNhYmxlIGVsZW1lbnRzIHdpdGggcm9sZT1cImJ1dHRvblwiXG4vLyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL2NsaWNrI1NhZmFyaV9Nb2JpbGVcblxuW3JvbGU9XCJidXR0b25cIl0ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4iLCIvLyBWZW5kb3IgUHJlZml4ZXNcbi8vXG4vLyBBbGwgdmVuZG9yIG1peGlucyBhcmUgZGVwcmVjYXRlZCBhcyBvZiB2My4yLjAgZHVlIHRvIHRoZSBpbnRyb2R1Y3Rpb24gb2Zcbi8vIEF1dG9wcmVmaXhlciBpbiBvdXIgR3J1bnRmaWxlLiBUaGV5IHdpbGwgYmUgcmVtb3ZlZCBpbiB2NC5cblxuLy8gLSBBbmltYXRpb25zXG4vLyAtIEJhY2tmYWNlIHZpc2liaWxpdHlcbi8vIC0gQm94IHNoYWRvd1xuLy8gLSBCb3ggc2l6aW5nXG4vLyAtIENvbnRlbnQgY29sdW1uc1xuLy8gLSBIeXBoZW5zXG4vLyAtIFBsYWNlaG9sZGVyIHRleHRcbi8vIC0gVHJhbnNmb3JtYXRpb25zXG4vLyAtIFRyYW5zaXRpb25zXG4vLyAtIFVzZXIgU2VsZWN0XG5cblxuLy8gQW5pbWF0aW9uc1xuQG1peGluIGFuaW1hdGlvbigkYW5pbWF0aW9uKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uOiAkYW5pbWF0aW9uO1xuICAgICAgIC1vLWFuaW1hdGlvbjogJGFuaW1hdGlvbjtcbiAgICAgICAgICBhbmltYXRpb246ICRhbmltYXRpb247XG59XG5AbWl4aW4gYW5pbWF0aW9uLW5hbWUoJG5hbWUpIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogJG5hbWU7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICRuYW1lO1xufVxuQG1peGluIGFuaW1hdGlvbi1kdXJhdGlvbigkZHVyYXRpb24pIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246ICRkdXJhdGlvbjtcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246ICRkdXJhdGlvbjtcbn1cbkBtaXhpbiBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uKCR0aW1pbmctZnVuY3Rpb24pIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkdGltaW5nLWZ1bmN0aW9uO1xuICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR0aW1pbmctZnVuY3Rpb247XG59XG5AbWl4aW4gYW5pbWF0aW9uLWRlbGF5KCRkZWxheSkge1xuICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogJGRlbGF5O1xuICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogJGRlbGF5O1xufVxuQG1peGluIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQoJGl0ZXJhdGlvbi1jb3VudCkge1xuICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6ICRpdGVyYXRpb24tY291bnQ7XG4gICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogJGl0ZXJhdGlvbi1jb3VudDtcbn1cbkBtaXhpbiBhbmltYXRpb24tZGlyZWN0aW9uKCRkaXJlY3Rpb24pIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiAkZGlyZWN0aW9uO1xuICAgICAgICAgIGFuaW1hdGlvbi1kaXJlY3Rpb246ICRkaXJlY3Rpb247XG59XG5AbWl4aW4gYW5pbWF0aW9uLWZpbGwtbW9kZSgkZmlsbC1tb2RlKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTogJGZpbGwtbW9kZTtcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiAkZmlsbC1tb2RlO1xufVxuXG4vLyBCYWNrZmFjZSB2aXNpYmlsaXR5XG4vLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gZmxpY2tlcmluZyB3aGVuIHVzaW5nIENTUyAzRCB0cmFuc2Zvcm1zLlxuLy8gRGVmYXVsdCB2YWx1ZSBpcyBgdmlzaWJsZWAsIGJ1dCBjYW4gYmUgY2hhbmdlZCB0byBgaGlkZGVuYFxuXG5AbWl4aW4gYmFja2ZhY2UtdmlzaWJpbGl0eSgkdmlzaWJpbGl0eSl7XG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogJHZpc2liaWxpdHk7XG4gICAgIC1tb3otYmFja2ZhY2UtdmlzaWJpbGl0eTogJHZpc2liaWxpdHk7XG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogJHZpc2liaWxpdHk7XG59XG5cbi8vIERyb3Agc2hhZG93c1xuLy9cbi8vIE5vdGU6IERlcHJlY2F0ZWQgYC5ib3gtc2hhZG93KClgIGFzIG9mIHYzLjEuMCBzaW5jZSBhbGwgb2YgQm9vdHN0cmFwJ3Ncbi8vIHN1cHBvcnRlZCBicm93c2VycyB0aGF0IGhhdmUgYm94IHNoYWRvdyBjYXBhYmlsaXRpZXMgbm93IHN1cHBvcnQgaXQuXG5cbkBtaXhpbiBib3gtc2hhZG93KCRzaGFkb3cuLi4pIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAkc2hhZG93OyAvLyBpT1MgPDQuMyAmIEFuZHJvaWQgPDQuMVxuICAgICAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3c7XG59XG5cbi8vIEJveCBzaXppbmdcbkBtaXhpbiBib3gtc2l6aW5nKCRib3htb2RlbCkge1xuICAtd2Via2l0LWJveC1zaXppbmc6ICRib3htb2RlbDtcbiAgICAgLW1vei1ib3gtc2l6aW5nOiAkYm94bW9kZWw7XG4gICAgICAgICAgYm94LXNpemluZzogJGJveG1vZGVsO1xufVxuXG4vLyBDU1MzIENvbnRlbnQgQ29sdW1uc1xuQG1peGluIGNvbnRlbnQtY29sdW1ucygkY29sdW1uLWNvdW50LCAkY29sdW1uLWdhcDogJGdyaWQtZ3V0dGVyLXdpZHRoKSB7XG4gIC13ZWJraXQtY29sdW1uLWNvdW50OiAkY29sdW1uLWNvdW50O1xuICAgICAtbW96LWNvbHVtbi1jb3VudDogJGNvbHVtbi1jb3VudDtcbiAgICAgICAgICBjb2x1bW4tY291bnQ6ICRjb2x1bW4tY291bnQ7XG4gIC13ZWJraXQtY29sdW1uLWdhcDogJGNvbHVtbi1nYXA7XG4gICAgIC1tb3otY29sdW1uLWdhcDogJGNvbHVtbi1nYXA7XG4gICAgICAgICAgY29sdW1uLWdhcDogJGNvbHVtbi1nYXA7XG59XG5cbi8vIE9wdGlvbmFsIGh5cGhlbmF0aW9uXG5AbWl4aW4gaHlwaGVucygkbW9kZTogYXV0bykge1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIC13ZWJraXQtaHlwaGVuczogJG1vZGU7XG4gICAgIC1tb3otaHlwaGVuczogJG1vZGU7XG4gICAgICAtbXMtaHlwaGVuczogJG1vZGU7IC8vIElFMTArXG4gICAgICAgLW8taHlwaGVuczogJG1vZGU7XG4gICAgICAgICAgaHlwaGVuczogJG1vZGU7XG59XG5cbi8vIFBsYWNlaG9sZGVyIHRleHRcbkBtaXhpbiBwbGFjZWhvbGRlcigkY29sb3I6ICRpbnB1dC1jb2xvci1wbGFjZWhvbGRlcikge1xuICAvLyBGaXJlZm94XG4gICY6Oi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sb3I7XG4gICAgb3BhY2l0eTogMTsgLy8gT3ZlcnJpZGUgRmlyZWZveCdzIHVudXN1YWwgZGVmYXVsdCBvcGFjaXR5OyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL3B1bGwvMTE1MjZcbiAgfVxuICAmOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7IGNvbG9yOiAkY29sb3I7IH0gLy8gSW50ZXJuZXQgRXhwbG9yZXIgMTArXG4gICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgIHsgY29sb3I6ICRjb2xvcjsgfSAvLyBTYWZhcmkgYW5kIENocm9tZVxufVxuXG4vLyBUcmFuc2Zvcm1hdGlvbnNcbkBtaXhpbiBzY2FsZSgkcmF0aW8uLi4pIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKCRyYXRpbyk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgkcmF0aW8pOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogc2NhbGUoJHJhdGlvKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKCRyYXRpbyk7XG59XG5cbkBtaXhpbiBzY2FsZVgoJHJhdGlvKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoJHJhdGlvKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlWCgkcmF0aW8pOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogc2NhbGVYKCRyYXRpbyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoJHJhdGlvKTtcbn1cbkBtaXhpbiBzY2FsZVkoJHJhdGlvKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVkoJHJhdGlvKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlWSgkcmF0aW8pOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogc2NhbGVZKCRyYXRpbyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVkoJHJhdGlvKTtcbn1cbkBtaXhpbiBza2V3KCR4LCAkeSkge1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2tld1goJHgpIHNrZXdZKCR5KTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHNrZXdYKCR4KSBza2V3WSgkeSk7IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzQ4ODU7IElFOStcbiAgICAgICAtby10cmFuc2Zvcm06IHNrZXdYKCR4KSBza2V3WSgkeSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBza2V3WCgkeCkgc2tld1koJHkpO1xufVxuQG1peGluIHRyYW5zbGF0ZSgkeCwgJHkpIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgkeCwgJHkpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKCR4LCAkeSk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUoJHgsICR5KTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgkeCwgJHkpO1xufVxuQG1peGluIHRyYW5zbGF0ZTNkKCR4LCAkeSwgJHopIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKCR4LCAkeSwgJHopO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoJHgsICR5LCAkeik7XG59XG5AbWl4aW4gcm90YXRlKCRkZWdyZWVzKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoJGRlZ3JlZXMpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlKCRkZWdyZWVzKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHJvdGF0ZSgkZGVncmVlcyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJGRlZ3JlZXMpO1xufVxuQG1peGluIHJvdGF0ZVgoJGRlZ3JlZXMpIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZVgoJGRlZ3JlZXMpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlWCgkZGVncmVlcyk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiByb3RhdGVYKCRkZWdyZWVzKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoJGRlZ3JlZXMpO1xufVxuQG1peGluIHJvdGF0ZVkoJGRlZ3JlZXMpIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZVkoJGRlZ3JlZXMpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlWSgkZGVncmVlcyk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiByb3RhdGVZKCRkZWdyZWVzKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVkoJGRlZ3JlZXMpO1xufVxuQG1peGluIHBlcnNwZWN0aXZlKCRwZXJzcGVjdGl2ZSkge1xuICAtd2Via2l0LXBlcnNwZWN0aXZlOiAkcGVyc3BlY3RpdmU7XG4gICAgIC1tb3otcGVyc3BlY3RpdmU6ICRwZXJzcGVjdGl2ZTtcbiAgICAgICAgICBwZXJzcGVjdGl2ZTogJHBlcnNwZWN0aXZlO1xufVxuQG1peGluIHBlcnNwZWN0aXZlLW9yaWdpbigkcGVyc3BlY3RpdmUpIHtcbiAgLXdlYmtpdC1wZXJzcGVjdGl2ZS1vcmlnaW46ICRwZXJzcGVjdGl2ZTtcbiAgICAgLW1vei1wZXJzcGVjdGl2ZS1vcmlnaW46ICRwZXJzcGVjdGl2ZTtcbiAgICAgICAgICBwZXJzcGVjdGl2ZS1vcmlnaW46ICRwZXJzcGVjdGl2ZTtcbn1cbkBtaXhpbiB0cmFuc2Zvcm0tb3JpZ2luKCRvcmlnaW4pIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiAkb3JpZ2luO1xuICAgICAtbW96LXRyYW5zZm9ybS1vcmlnaW46ICRvcmlnaW47XG4gICAgICAtbXMtdHJhbnNmb3JtLW9yaWdpbjogJG9yaWdpbjsgLy8gSUU5IG9ubHlcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAkb3JpZ2luO1xufVxuXG5cbi8vIFRyYW5zaXRpb25zXG5cbkBtaXhpbiB0cmFuc2l0aW9uKCR0cmFuc2l0aW9uLi4uKSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogJHRyYW5zaXRpb247XG4gICAgICAgLW8tdHJhbnNpdGlvbjogJHRyYW5zaXRpb247XG4gICAgICAgICAgdHJhbnNpdGlvbjogJHRyYW5zaXRpb247XG59XG5AbWl4aW4gdHJhbnNpdGlvbi1wcm9wZXJ0eSgkdHJhbnNpdGlvbi1wcm9wZXJ0eS4uLikge1xuICAtd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6ICR0cmFuc2l0aW9uLXByb3BlcnR5O1xuICAgICAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6ICR0cmFuc2l0aW9uLXByb3BlcnR5O1xufVxuQG1peGluIHRyYW5zaXRpb24tZGVsYXkoJHRyYW5zaXRpb24tZGVsYXkpIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiAkdHJhbnNpdGlvbi1kZWxheTtcbiAgICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAkdHJhbnNpdGlvbi1kZWxheTtcbn1cbkBtaXhpbiB0cmFuc2l0aW9uLWR1cmF0aW9uKCR0cmFuc2l0aW9uLWR1cmF0aW9uLi4uKSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogJHRyYW5zaXRpb24tZHVyYXRpb247XG4gICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogJHRyYW5zaXRpb24tZHVyYXRpb247XG59XG5AbWl4aW4gdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24oJHRpbWluZy1mdW5jdGlvbikge1xuICAtd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkdGltaW5nLWZ1bmN0aW9uO1xuICAgICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkdGltaW5nLWZ1bmN0aW9uO1xufVxuQG1peGluIHRyYW5zaXRpb24tdHJhbnNmb3JtKCR0cmFuc2l0aW9uLi4uKSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gJHRyYW5zaXRpb247XG4gICAgIC1tb3otdHJhbnNpdGlvbjogLW1vei10cmFuc2Zvcm0gJHRyYW5zaXRpb247XG4gICAgICAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtICR0cmFuc2l0aW9uO1xuICAgICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAkdHJhbnNpdGlvbjtcbn1cblxuXG4vLyBVc2VyIHNlbGVjdFxuLy8gRm9yIHNlbGVjdGluZyB0ZXh0IG9uIHRoZSBwYWdlXG5cbkBtaXhpbiB1c2VyLXNlbGVjdCgkc2VsZWN0KSB7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6ICRzZWxlY3Q7XG4gICAgIC1tb3otdXNlci1zZWxlY3Q6ICRzZWxlY3Q7XG4gICAgICAtbXMtdXNlci1zZWxlY3Q6ICRzZWxlY3Q7IC8vIElFMTArXG4gICAgICAgICAgdXNlci1zZWxlY3Q6ICRzZWxlY3Q7XG59XG4iLCIkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyOiBmYWxzZSAhZGVmYXVsdDtcbi8vXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRraW1jaGktbG9nbzogXCIuLi9pbWFnZXMvbG9nby13aGl0ZS5wbmdcIjtcbiRpY29uLWZvbnQtcGF0aDogJy4uL2ZvbnRzLyc7XG5cbi8vPT0gQ29sb3JzXG4vL1xuLy8jIyBHcmF5IGFuZCBicmFuZCBjb2xvcnMgZm9yIHVzZSBhY3Jvc3MgQm9vdHN0cmFwLlxuXG4kZ3JheS1iYXNlOiAgICAgICAgICAgICAgIzAwMCAhZGVmYXVsdDtcbiRncmF5LWRhcmtlcjogICAgICAgICAgICAjMjIyICFkZWZhdWx0O1xuJGdyYXktZGFyazogICAgICAgICAgICAgICAkZ3JheS1kYXJrZXIgIWRlZmF1bHQ7XG4kZ3JheTogICAgICAgICAgICAgICAgICAgICAgIzQ0NCAhZGVmYXVsdDtcbiRncmF5LWxpZ2h0OiAgICAgICAgICAgICAgICM5OTkgIWRlZmF1bHQ7XG4kZ3JheS1saWdodGVyOiAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG5cbiRicmFuZC1wcmltYXJ5OiAgICAgICAgICMzYTM5M2IgIWRlZmF1bHQ7IC8vICMzYTM5M2JcbiRicmFuZC1zdWNjZXNzOiAgICAgICAgICM1Y2I4NWMgIWRlZmF1bHQ7XG4kYnJhbmQtaW5mbzogICAgICAgICAgICAjNWJjMGRlICFkZWZhdWx0O1xuJGJyYW5kLXdhcm5pbmc6ICAgICAgICAgI2YwYWQ0ZSAhZGVmYXVsdDtcbiRicmFuZC1kYW5nZXI6ICAgICAgICAgICNkOTUzNGYgIWRlZmF1bHQ7XG4ka2ltY2hpLWRyb3Bkb3duOiAgICAgICM0ZDRjNGUgIWRlZmF1bHQ7XG5cblxuLy8jIyBLaW1jaGkgZGVmYXVsdCBjb2xvcnNcblxuJGhvc3RzLWNvbG9yOiAgICAgICAgICAgICAgICAjMDA4YWJmICFkZWZhdWx0O1xuJGd1ZXN0cy1jb2xvcjogICAgICAgICAgICAgICM4Y2M2M2YgIWRlZmF1bHQ7XG4kdGVtcGxhdGVzLWNvbG9yOiAgICAgICAgICMwMGE2YTAgIWRlZmF1bHQ7XG4kc3RvcmFnZS1jb2xvcjogICAgICAgICAgICAgI2ZlYjgxMyAhZGVmYXVsdDtcbiRuZXR3b3Jrcy1jb2xvcjogICAgICAgICAgICM3ZjFjN2QgIWRlZmF1bHQ7XG4kYWRtaW5pc3RyYXRpb24tY29sb3I6ICAgICNkOTE4MmQgIWRlZmF1bHQ7XG5cbi8vPT0gU2NhZmZvbGRpbmdcbi8vXG4vLyMjIFNldHRpbmdzIGZvciBzb21lIG9mIHRoZSBtb3N0IGdsb2JhbCBzdHlsZXMuXG5cbi8vKiogQmFja2dyb3VuZCBjb2xvciBmb3IgYDxib2R5PmAuXG4kYm9keS1iZzogICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuLy8qKiBHbG9iYWwgdGV4dCBjb2xvciBvbiBgPGJvZHk+YC5cbiR0ZXh0LWNvbG9yOiAgICAgICAgICAgICRncmF5LWRhcmtlciAhZGVmYXVsdDtcbiRoaWdobGlnaHRzLWNvbG9yOiAgICAgI2ZmZiAhZGVmYXVsdDtcbiRkaXNhYmxlZC1jb2xvcjogICAgICAgIzk5OSAhZGVmYXVsdDtcblxuLy8qKiBHbG9iYWwgdGV4dHVhbCBsaW5rIGNvbG9yLlxuJGxpbmstY29sb3I6ICAgICAgICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG4vLyoqIExpbmsgaG92ZXIgY29sb3Igc2V0IHZpYSBgZGFya2VuKClgIGZ1bmN0aW9uLlxuJGxpbmstaG92ZXItY29sb3I6ICAgICAgZGFya2VuKCRsaW5rLWNvbG9yLCAxNSUpICFkZWZhdWx0O1xuLy8qKiBMaW5rIGhvdmVyIGRlY29yYXRpb24uXG4kbGluay1ob3Zlci1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgIWRlZmF1bHQ7XG5cblxuLy89PSBUeXBvZ3JhcGh5XG4vL1xuLy8jIyBGb250LCBsaW5lLWhlaWdodCwgYW5kIGNvbG9yIGZvciBib2R5IHRleHQsIGhlYWRpbmdzLCBhbmQgbW9yZS5cblxuJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWY6ICBcIkhlbHZldGljYU5ldWVNZWRpdW1cIiwgXCJIZWx2ZXRpY2FOZXVlLU1lZGl1bVwiLCBcIkhlbHZldGljYSBOZXVlIE1lZGl1bVwiLCBcIkhlbHZldGljYU5ldWVcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBcIkx1Y2lkYSBHcmFuZGVcIiwgc2Fucy1zZXJpZiAhZGVmYXVsdDtcbiRmb250LWZhbWlseS1zZXJpZjogICAgICAgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiwgVGltZXMsIHNlcmlmICFkZWZhdWx0O1xuLy8qKiBEZWZhdWx0IG1vbm9zcGFjZSBmb250cyBmb3IgYDxjb2RlPmAsIGA8a2JkPmAsIGFuZCBgPHByZT5gLlxuJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTogICBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2UgIWRlZmF1bHQ7XG4kZm9udC1mYW1pbHktYmFzZTogICAgICAgICRmb250LWZhbWlseS1zYW5zLXNlcmlmICFkZWZhdWx0O1xuJGZvbnQtZmFtaWx5LWxpZ2h0OiAgICBcIkhlbHZldGljYU5ldWVMaWdodFwiLCBcIkhlbHZldGljYU5ldWUtTGlnaHRcIiwgXCJIZWx2ZXRpY2FOZXVlIExpZ2h0XCIsIFwiSGVsdmV0aWNhTmV1ZVwiLCBcIkhlbHZldGljYU5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgXCJMdWNpZGEgR3JhbmRlXCIsIHNhbnMtc2VyaWYgIWRlZmF1bHQ7XG4kZm9udC1mYW1pbHktYm9sZDogICAgXCJIZWx2ZXRpY2FOZXVlQm9sZFwiLCBcIkhlbHZldGljYU5ldWUtQm9sZFwiLCBcIkhlbHZldGljYU5ldWUgQm9sZFwiLCBcIkhlbHZldGljYSBOZXVlIEJvbGRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYU5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgXCJMdWNpZGEgR3JhbmRlXCIsIHNhbnMtc2VyaWYgIWRlZmF1bHQ7XG4kZm9udC1mYW1pbHktYWx0ZXJuYXRlOiAgXCJIZWx2ZXRpY2EgTmV1ZSBMVCBXMUcgNTUgUm9tYW5cIiwgXCJIZWx2ZXRpY2EgTmV1ZSBMVCBXMUdcIiwgXCJIZWx2ZXRpY2FOZXVlIFJvbWFuXCIsIFwiSGVsdmV0aWNhTmV1ZS1Sb21hblwiLCBcIkhlbHZldGljYSBOZXVlIFJvbWFuXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgXCJIZWx2ZXRpY2FOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIFwiTHVjaWRhIEdyYW5kZVwiLCBzYW5zLXNlcmlmICFkZWZhdWx0O1xuXG5cbiRmb250LXNpemUtYmFzZTogICAgICAgICAgMTRweCAhZGVmYXVsdDtcbiRmb250LXNpemUtbGFyZ2U6ICAgICAgICAgY2VpbCgoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkpICFkZWZhdWx0OyAvLyB+MThweFxuJGZvbnQtc2l6ZS1zbWFsbDogICAgICAgICBjZWlsKCgkZm9udC1zaXplLWJhc2UgKiAwLjg1KSkgIWRlZmF1bHQ7IC8vIH4xMnB4XG4kZm9udC1zaXplLWJ0bjogICAgICAgICAgICAgMTMuNXB0O1xuXG4kZm9udC1zaXplLWgxOiAgICAgICAgICAgIDEuNTcxZW0gIWRlZmF1bHQ7XG4kZm9udC1zaXplLWgyOiAgICAgICAgICAgIDIycHggIWRlZmF1bHQ7XG4kZm9udC1zaXplLWgzOiAgICAgICAgICAgIDE3cHggIWRlZmF1bHQ7XG4kZm9udC1zaXplLWg0OiAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAhZGVmYXVsdDtcbiRmb250LXNpemUtaDU6ICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICFkZWZhdWx0O1xuJGZvbnQtc2l6ZS1oNjogICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgIWRlZmF1bHQ7XG5cbi8vKiogVW5pdC1sZXNzIGBsaW5lLWhlaWdodGAgZm9yIHVzZSBpbiBjb21wb25lbnRzIGxpa2UgYnV0dG9ucy5cbiRsaW5lLWhlaWdodC1iYXNlOiAgICAgICAgMS40Mjg1NzE0MjkgIWRlZmF1bHQ7IC8vIDIwLzE0XG4vLyoqIENvbXB1dGVkIFwibGluZS1oZWlnaHRcIiAoYGZvbnQtc2l6ZWAgKiBgbGluZS1oZWlnaHRgKSBmb3IgdXNlIHdpdGggYG1hcmdpbmAsIGBwYWRkaW5nYCwgZXRjLlxuJGxpbmUtaGVpZ2h0LWNvbXB1dGVkOiAgICBmbG9vcigoJGZvbnQtc2l6ZS1iYXNlICogJGxpbmUtaGVpZ2h0LWJhc2UpKSAhZGVmYXVsdDsgLy8gfjIwcHhcblxuLy8qKiBCeSBkZWZhdWx0LCB0aGlzIGluaGVyaXRzIGZyb20gdGhlIGA8Ym9keT5gLlxuJGhlYWRpbmdzLWZvbnQtZmFtaWx5OiAgICBpbmhlcml0ICFkZWZhdWx0O1xuJGhlYWRpbmdzLWZvbnQtd2VpZ2h0OiAgICA1MDAgIWRlZmF1bHQ7XG4kaGVhZGluZ3MtbGluZS1oZWlnaHQ6ICAgIDEuMSAhZGVmYXVsdDtcbiRoZWFkaW5ncy1jb2xvcjogICAgICAgICAgaW5oZXJpdCAhZGVmYXVsdDtcblxuXG4vLz09IEljb25vZ3JhcGh5XG4vL1xuLy8jIyBTcGVjaWZ5IGN1c3RvbSBsb2NhdGlvbiBhbmQgZmlsZW5hbWUgb2YgdGhlIGluY2x1ZGVkIEdseXBoaWNvbnMgaWNvbiBmb250LiBVc2VmdWwgZm9yIHRob3NlIGluY2x1ZGluZyBCb290c3RyYXAgdmlhIEJvd2VyLlxuXG4vLyoqIExvYWQgZm9udHMgZnJvbSB0aGlzIGRpcmVjdG9yeS5cblxuLy8gW2NvbnZlcnRlcl0gSWYgJGJvb3RzdHJhcC1zYXNzLWFzc2V0LWhlbHBlciBpZiB1c2VkLCBwcm92aWRlIHBhdGggcmVsYXRpdmUgdG8gdGhlIGFzc2V0cyBsb2FkIHBhdGguXG4vLyBbY29udmVydGVyXSBUaGlzIGlzIGJlY2F1c2Ugc29tZSBhc3NldCBoZWxwZXJzLCBzdWNoIGFzIFNwcm9ja2V0cywgZG8gbm90IHdvcmsgd2l0aCBmaWxlLXJlbGF0aXZlIHBhdGhzLlxuJGljb24tZm9udC1wYXRoOiBpZigkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyLCBcImJvb3RzdHJhcC9cIiwgXCIuLi9mb250cy9ib290c3RyYXAvXCIpICFkZWZhdWx0O1xuXG4vLyoqIEZpbGUgbmFtZSBmb3IgYWxsIGZvbnQgZmlsZXMuXG4kaWNvbi1mb250LW5hbWU6ICAgICAgICAgIFwiZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhclwiICFkZWZhdWx0O1xuLy8qKiBFbGVtZW50IElEIHdpdGhpbiBTVkcgaWNvbiBmaWxlLlxuJGljb24tZm9udC1zdmctaWQ6ICAgICAgICBcImdseXBoaWNvbnNfaGFsZmxpbmdzcmVndWxhclwiICFkZWZhdWx0O1xuXG5cbi8vPT0gQ29tcG9uZW50c1xuLy9cbi8vIyMgRGVmaW5lIGNvbW1vbiBwYWRkaW5nIGFuZCBib3JkZXIgcmFkaXVzIHNpemVzIGFuZCBtb3JlLiBWYWx1ZXMgYmFzZWQgb24gMTRweCB0ZXh0IGFuZCAxLjQyOCBsaW5lLWhlaWdodCAofjIwcHggdG8gc3RhcnQpLlxuXG4kcGFkZGluZy1iYXNlLXZlcnRpY2FsOiAgICAgNnB4ICFkZWZhdWx0O1xuJHBhZGRpbmctYmFzZS1ob3Jpem9udGFsOiAgIDEycHggIWRlZmF1bHQ7XG5cbiRwYWRkaW5nLWxhcmdlLXZlcnRpY2FsOiAgICAxMHB4ICFkZWZhdWx0O1xuJHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbDogIDE2cHggIWRlZmF1bHQ7XG5cbiRwYWRkaW5nLXNtYWxsLXZlcnRpY2FsOiAgICA1cHggIWRlZmF1bHQ7XG4kcGFkZGluZy1zbWFsbC1ob3Jpem9udGFsOiAgMTBweCAhZGVmYXVsdDtcblxuJHBhZGRpbmcteHMtdmVydGljYWw6ICAgICAgIDFweCAhZGVmYXVsdDtcbiRwYWRkaW5nLXhzLWhvcml6b250YWw6ICAgICA1cHggIWRlZmF1bHQ7XG5cbiRsaW5lLWhlaWdodC1sYXJnZTogICAgICAgICAxLjMzMzMzMzMgIWRlZmF1bHQ7IC8vIGV4dHJhIGRlY2ltYWxzIGZvciBXaW4gOC4xIENocm9tZVxuJGxpbmUtaGVpZ2h0LXNtYWxsOiAgICAgICAgIDEuNSAhZGVmYXVsdDtcblxuJGJvcmRlci1yYWRpdXMtYmFzZTogICAgICAgIDNweCAhZGVmYXVsdDtcbiRib3JkZXItcmFkaXVzLWxhcmdlOiAgICAgICAzcHggIWRlZmF1bHQ7XG4kYm9yZGVyLXJhZGl1cy1zbWFsbDogICAgICAgM3B4ICFkZWZhdWx0O1xuXG4vLyoqIEdsb2JhbCBjb2xvciBmb3IgYWN0aXZlIGl0ZW1zIChlLmcuLCBuYXZzIG9yIGRyb3Bkb3ducykuXG4kY29tcG9uZW50LWFjdGl2ZS1jb2xvcjogICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogR2xvYmFsIGJhY2tncm91bmQgY29sb3IgZm9yIGFjdGl2ZSBpdGVtcyAoZS5nLiwgbmF2cyBvciBkcm9wZG93bnMpLlxuJGNvbXBvbmVudC1hY3RpdmUtYmc6ICAgICAgICRicmFuZC1wcmltYXJ5ICFkZWZhdWx0O1xuXG4vLyoqIFdpZHRoIG9mIHRoZSBgYm9yZGVyYCBmb3IgZ2VuZXJhdGluZyBjYXJldHMgdGhhdCBpbmRpY2F0b3IgZHJvcGRvd25zLlxuJGNhcmV0LXdpZHRoLWJhc2U6ICAgICAgICAgIDRweCAhZGVmYXVsdDtcbi8vKiogQ2FyZXRzIGluY3JlYXNlIHNsaWdodGx5IGluIHNpemUgZm9yIGxhcmdlciBjb21wb25lbnRzLlxuJGNhcmV0LXdpZHRoLWxhcmdlOiAgICAgICAgIDVweCAhZGVmYXVsdDtcblxuXG4vLz09IFRhYmxlc1xuLy9cbi8vIyMgQ3VzdG9taXplcyB0aGUgYC50YWJsZWAgY29tcG9uZW50IHdpdGggYmFzaWMgdmFsdWVzLCBlYWNoIHVzZWQgYWNyb3NzIGFsbCB0YWJsZSB2YXJpYXRpb25zLlxuXG4vLyoqIFBhZGRpbmcgZm9yIGA8dGg+YHMgYW5kIGA8dGQ+YHMuXG4kdGFibGUtY2VsbC1wYWRkaW5nOiAgICAgICAgICAgIDhweCAhZGVmYXVsdDtcbi8vKiogUGFkZGluZyBmb3IgY2VsbHMgaW4gYC50YWJsZS1jb25kZW5zZWRgLlxuJHRhYmxlLWNvbmRlbnNlZC1jZWxsLXBhZGRpbmc6ICA1cHggIWRlZmF1bHQ7XG5cbi8vKiogRGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIHVzZWQgZm9yIGFsbCB0YWJsZXMuXG4kdGFibGUtYmc6ICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIHVzZWQgZm9yIGAudGFibGUtc3RyaXBlZGAuXG4kdGFibGUtYmctYWNjZW50OiAgICAgICAgICAgICAgICNmOWY5ZjkgIWRlZmF1bHQ7XG4vLyoqIEJhY2tncm91bmQgY29sb3IgdXNlZCBmb3IgYC50YWJsZS1ob3ZlcmAuXG4kdGFibGUtYmctaG92ZXI6ICAgICAgICAgICAgICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG4kdGFibGUtYmctYWN0aXZlOiAgICAgICAgICAgICAgICR0YWJsZS1iZy1ob3ZlciAhZGVmYXVsdDtcblxuLy8qKiBCb3JkZXIgY29sb3IgZm9yIHRhYmxlIGFuZCBjZWxsIGJvcmRlcnMuXG4kdGFibGUtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICNkZGQgIWRlZmF1bHQ7XG5cblxuLy89PSBCdXR0b25zXG4vL1xuLy8jIyBGb3IgZWFjaCBvZiBCb290c3RyYXAncyBidXR0b25zLCBkZWZpbmUgdGV4dCwgYmFja2dyb3VuZCBhbmQgYm9yZGVyIGNvbG9yLlxuXG4kYnRuLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgICBub3JtYWwgIWRlZmF1bHQ7XG5cbiRidG4tZGVmYXVsdC1jb2xvcjogICAgICAgICAgICAgICM0NDQgIWRlZmF1bHQ7XG4kYnRuLWRlZmF1bHQtYmc6ICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGJ0bi1kZWZhdWx0LWJvcmRlcjogICAgICAgICAgICAgI2NjYyAhZGVmYXVsdDtcblxuJGJ0bi1wcmltYXJ5LWNvbG9yOiAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRidG4tcHJpbWFyeS1iZzogICAgICAgICAgICAgICAgICRicmFuZC1wcmltYXJ5ICFkZWZhdWx0O1xuJGJ0bi1wcmltYXJ5LWJvcmRlcjogICAgICAgICAgICRidG4tcHJpbWFyeS1iZyAhZGVmYXVsdDtcblxuJGJ0bi1sb2dpbi1jb2xvcjogICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kYnRuLWxvZ2luLWJnOiAgICAgICAgICAgICAgICAgIzAwOGFiZiAhZGVmYXVsdDtcbiRidG4tbG9naW4tYm9yZGVyOiAgICAgICAgICAgICAkYnRuLWxvZ2luLWJnICFkZWZhdWx0O1xuXG4kYnRuLXN1Y2Nlc3MtY29sb3I6ICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGJ0bi1zdWNjZXNzLWJnOiAgICAgICAgICAgICAgICAgJGJyYW5kLXN1Y2Nlc3MgIWRlZmF1bHQ7XG4kYnRuLXN1Y2Nlc3MtYm9yZGVyOiAgICAgICAgICAgJGJ0bi1zdWNjZXNzLWJnICFkZWZhdWx0O1xuXG4kYnRuLWluZm8tY29sb3I6ICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGJ0bi1pbmZvLWJnOiAgICAgICAgICAgICAgICAgICAgJGJyYW5kLWluZm8gIWRlZmF1bHQ7XG4kYnRuLWluZm8tYm9yZGVyOiAgICAgICAgICAgICAgJGJyYW5kLWluZm8gIWRlZmF1bHQ7XG5cbiRidG4td2FybmluZy1jb2xvcjogICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kYnRuLXdhcm5pbmctYmc6ICAgICAgICAgICAgICAgICAkYnJhbmQtd2FybmluZyAhZGVmYXVsdDtcbiRidG4td2FybmluZy1ib3JkZXI6ICAgICAgICAgICAkYnJhbmQtd2FybmluZyAhZGVmYXVsdDtcblxuJGJ0bi1kYW5nZXItY29sb3I6ICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRidG4tZGFuZ2VyLWJnOiAgICAgICAgICAgICAgICAgICRicmFuZC1kYW5nZXIgIWRlZmF1bHQ7XG4kYnRuLWRhbmdlci1ib3JkZXI6ICAgICAgICAgICAgJGJyYW5kLWRhbmdlciAhZGVmYXVsdDtcblxuJGJ0bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG5cbi8vIEFsbG93cyBmb3IgY3VzdG9taXppbmcgYnV0dG9uIHJhZGl1cyBpbmRlcGVuZGVudGx5IGZyb20gZ2xvYmFsIGJvcmRlciByYWRpdXNcbiRidG4tYm9yZGVyLXJhZGl1cy1iYXNlOiAgICAgICAgICRib3JkZXItcmFkaXVzLWJhc2UgIWRlZmF1bHQ7XG4kYnRuLWJvcmRlci1yYWRpdXMtbGFyZ2U6ICAgICAgICAkYm9yZGVyLXJhZGl1cy1sYXJnZSAhZGVmYXVsdDtcbiRidG4tYm9yZGVyLXJhZGl1cy1zbWFsbDogICAgICAgICRib3JkZXItcmFkaXVzLXNtYWxsICFkZWZhdWx0O1xuXG5cbi8vPT0gRm9ybXNcbi8vXG4vLyMjXG5cbi8vKiogYDxpbnB1dD5gIGJhY2tncm91bmQgY29sb3JcbiRpbnB1dC1iZzogICAgICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIGA8aW5wdXQgZGlzYWJsZWQ+YCBiYWNrZ3JvdW5kIGNvbG9yXG4kaW5wdXQtYmctZGlzYWJsZWQ6ICAgICAgICAgICAgICAkZ3JheS1saWdodGVyICFkZWZhdWx0O1xuXG4vLyoqIFRleHQgY29sb3IgZm9yIGA8aW5wdXQ+YHNcbiRpbnB1dC1jb2xvcjogICAgICAgICAgICAgICAgICAgICRncmF5ICFkZWZhdWx0O1xuLy8qKiBgPGlucHV0PmAgYm9yZGVyIGNvbG9yXG4kaW5wdXQtYm9yZGVyOiAgICAgICAgICAgICAgICAgICAjY2NjICFkZWZhdWx0O1xuXG4vLyBUT0RPOiBSZW5hbWUgYCRpbnB1dC1ib3JkZXItcmFkaXVzYCB0byBgJGlucHV0LWJvcmRlci1yYWRpdXMtYmFzZWAgaW4gdjRcbi8vKiogRGVmYXVsdCBgLmZvcm0tY29udHJvbGAgYm9yZGVyIHJhZGl1c1xuLy8gVGhpcyBoYXMgbm8gZWZmZWN0IG9uIGA8c2VsZWN0PmBzIGluIHNvbWUgYnJvd3NlcnMsIGR1ZSB0byB0aGUgbGltaXRlZCBzdHlsYWJpbGl0eSBvZiBgPHNlbGVjdD5gcyBpbiBDU1MuXG4kaW5wdXQtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1iYXNlICFkZWZhdWx0O1xuLy8qKiBMYXJnZSBgLmZvcm0tY29udHJvbGAgYm9yZGVyIHJhZGl1c1xuJGlucHV0LWJvcmRlci1yYWRpdXMtbGFyZ2U6ICAgICAgJGJvcmRlci1yYWRpdXMtbGFyZ2UgIWRlZmF1bHQ7XG4vLyoqIFNtYWxsIGAuZm9ybS1jb250cm9sYCBib3JkZXIgcmFkaXVzXG4kaW5wdXQtYm9yZGVyLXJhZGl1cy1zbWFsbDogICAgICAkYm9yZGVyLXJhZGl1cy1zbWFsbCAhZGVmYXVsdDtcblxuLy8qKiBCb3JkZXIgY29sb3IgZm9yIGlucHV0cyBvbiBmb2N1c1xuJGlucHV0LWJvcmRlci1mb2N1czogICAgICAgICAgICAgIzY2YWZlOSAhZGVmYXVsdDtcblxuLy8qKiBQbGFjZWhvbGRlciB0ZXh0IGNvbG9yXG4kaW5wdXQtY29sb3ItcGxhY2Vob2xkZXI6ICAgICAgICAjOTk5ICFkZWZhdWx0O1xuXG4vLyoqIERlZmF1bHQgYC5mb3JtLWNvbnRyb2xgIGhlaWdodFxuJGlucHV0LWhlaWdodC1iYXNlOiAgICAgICAgICAgICAgKCRsaW5lLWhlaWdodC1jb21wdXRlZCArICgkcGFkZGluZy1iYXNlLXZlcnRpY2FsICogMikgKyAyKSAhZGVmYXVsdDtcbi8vKiogTGFyZ2UgYC5mb3JtLWNvbnRyb2xgIGhlaWdodFxuJGlucHV0LWhlaWdodC1sYXJnZTogICAgICAgICAgICAgKGNlaWwoJGZvbnQtc2l6ZS1sYXJnZSAqICRsaW5lLWhlaWdodC1sYXJnZSkgKyAoJHBhZGRpbmctbGFyZ2UtdmVydGljYWwgKiAyKSArIDIpICFkZWZhdWx0O1xuLy8qKiBTbWFsbCBgLmZvcm0tY29udHJvbGAgaGVpZ2h0XG4kaW5wdXQtaGVpZ2h0LXNtYWxsOiAgICAgICAgICAgICAoZmxvb3IoJGZvbnQtc2l6ZS1zbWFsbCAqICRsaW5lLWhlaWdodC1zbWFsbCkgKyAoJHBhZGRpbmctc21hbGwtdmVydGljYWwgKiAyKSArIDIpICFkZWZhdWx0O1xuXG4vLyoqIGAuZm9ybS1ncm91cGAgbWFyZ2luXG4kZm9ybS1ncm91cC1tYXJnaW4tYm90dG9tOiAgICAgICAxNXB4ICFkZWZhdWx0O1xuXG4kbGVnZW5kLWNvbG9yOiAgICAgICAgICAgICAgICAgICAkZ3JheS1kYXJrICFkZWZhdWx0O1xuJGxlZ2VuZC1ib3JkZXItY29sb3I6ICAgICAgICAgICAgI2U1ZTVlNSAhZGVmYXVsdDtcblxuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIGZvciB0ZXh0dWFsIGlucHV0IGFkZG9uc1xuJGlucHV0LWdyb3VwLWFkZG9uLWJnOiAgICAgICAgICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcbi8vKiogQm9yZGVyIGNvbG9yIGZvciB0ZXh0dWFsIGlucHV0IGFkZG9uc1xuJGlucHV0LWdyb3VwLWFkZG9uLWJvcmRlci1jb2xvcjogJGlucHV0LWJvcmRlciAhZGVmYXVsdDtcblxuLy8qKiBEaXNhYmxlZCBjdXJzb3IgZm9yIGZvcm0gY29udHJvbHMgYW5kIGJ1dHRvbnMuXG4kY3Vyc29yLWRpc2FibGVkOiAgICAgICAgICAgICAgICBub3QtYWxsb3dlZCAhZGVmYXVsdDtcblxuXG4vLz09IERyb3Bkb3duc1xuLy9cbi8vIyMgRHJvcGRvd24gbWVudSBjb250YWluZXIgYW5kIGNvbnRlbnRzLlxuXG4vLyoqIEJhY2tncm91bmQgZm9yIHRoZSBkcm9wZG93biBtZW51LlxuJGRyb3Bkb3duLWJnOiAgICAgICAgICAgICAgICAgICAgI2ZjZmNmYyAhZGVmYXVsdDtcbi8vKiogRHJvcGRvd24gbWVudSBgYm9yZGVyLWNvbG9yYC5cbiRkcm9wZG93bi1ib3JkZXI6ICAgICAgICAgICAgICAgICNjY2MgIWRlZmF1bHQ7XG4vLyoqIERyb3Bkb3duIG1lbnUgYGJvcmRlci1jb2xvcmAgKipmb3IgSUU4KiouXG4kZHJvcGRvd24tZmFsbGJhY2stYm9yZGVyOiAgICAgICAjY2NjICFkZWZhdWx0O1xuLy8qKiBEaXZpZGVyIGNvbG9yIGZvciBiZXR3ZWVuIGRyb3Bkb3duIGl0ZW1zLlxuJGRyb3Bkb3duLWRpdmlkZXItYmc6ICAgICAgICAgICAgI2VlZSAhZGVmYXVsdDtcblxuLy8qKiBEcm9wZG93biBsaW5rIHRleHQgY29sb3IuXG4kZHJvcGRvd24tbGluay1jb2xvcjogICAgICAgICAgICAkZ3JheS1kYXJrICFkZWZhdWx0O1xuLy8qKiBIb3ZlciBjb2xvciBmb3IgZHJvcGRvd24gbGlua3MuXG4kZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjogICAgICBkYXJrZW4oJGdyYXktZGFyaywgNSUpICFkZWZhdWx0O1xuLy8qKiBIb3ZlciBiYWNrZ3JvdW5kIGZvciBkcm9wZG93biBsaW5rcy5cbiRkcm9wZG93bi1saW5rLWhvdmVyLWJnOiAgICAgICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG5cbi8vKiogQWN0aXZlIGRyb3Bkb3duIG1lbnUgaXRlbSB0ZXh0IGNvbG9yLlxuJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG4vLyoqIEFjdGl2ZSBkcm9wZG93biBtZW51IGl0ZW0gYmFja2dyb3VuZCBjb2xvci5cbiRkcm9wZG93bi1saW5rLWFjdGl2ZS1iZzogICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xuXG4vLyoqIERpc2FibGVkIGRyb3Bkb3duIG1lbnUgaXRlbSBiYWNrZ3JvdW5kIGNvbG9yLlxuJGRyb3Bkb3duLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG5cbi8vKiogVGV4dCBjb2xvciBmb3IgaGVhZGVycyB3aXRoaW4gZHJvcGRvd24gbWVudXMuXG4kZHJvcGRvd24taGVhZGVyLWNvbG9yOiAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcblxuLy8qKiBEZXByZWNhdGVkIGAkZHJvcGRvd24tY2FyZXQtY29sb3JgIGFzIG9mIHYzLjEuMFxuJGRyb3Bkb3duLWNhcmV0LWNvbG9yOiAgICAgICAgICAgIzAwMCAhZGVmYXVsdDtcblxuXG4vLz09IE1lbnUtRmxhdCBEcm9wZG93bnNcbi8vXG4vLyMjIE1lbnUtRmxhdCBEcm9wZG93biBtZW51IGNvbnRhaW5lciBhbmQgY29udGVudHMuXG5cbiRtZW51LWZsYXQtdGV4dDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJG1lbnUtZmxhdC1kcm9wZG93bi1iZzogICAgICAgICAgICAgICAgICAgICAgICMzYTM5M2IgIWRlZmF1bHQ7XG4kbGluZS1oZWlnaHQtbWVudS1mbGF0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzFweDtcbi8vKiogTWVudS1GbGF0IERyb3Bkb3duIG1lbnUgYGJvcmRlci1jb2xvcmAuXG4kbWVudS1mbGF0LWRyb3Bkb3duLWJvcmRlcjogICAgICAgICAgICAgICAgICMyZTJlMmUgIWRlZmF1bHQ7XG4kbWVudS1mbGF0LWRyb3Bkb3duLWRpdmlkZXItYmc6ICAgICAgICAgICAgICM0MDQwNDIgIWRlZmF1bHQ7XG4kbWVudS1mbGF0LWRyb3Bkb3duLWNyaXRpY2FsLWJnOiAgICAgICAgICAgICAjZDkxODJkICFkZWZhdWx0O1xuLy8qKiBEcm9wZG93biBsaW5rIHRleHQgY29sb3IuXG4kbWVudS1mbGF0LWRyb3Bkb3duLWxpbmstY29sb3I6ICAgICAgICAgICAgICAkbWVudS1mbGF0LXRleHQgIWRlZmF1bHQ7XG4vLyoqIEhvdmVyIGNvbG9yIGZvciBkcm9wZG93biBsaW5rcy5cbiRtZW51LWZsYXQtZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjogICAgICRtZW51LWZsYXQtdGV4dCAhZGVmYXVsdDtcbi8vKiogSG92ZXIgYmFja2dyb3VuZCBmb3IgZHJvcGRvd24gbGlua3MuXG4kbWVudS1mbGF0LWRyb3Bkb3duLWxpbmstaG92ZXItYmc6ICAgICAgICAgJG1lbnUtZmxhdC1kcm9wZG93bi1iZyAhZGVmYXVsdDtcbi8vKiogQWN0aXZlIGRyb3Bkb3duIG1lbnUgaXRlbSB0ZXh0IGNvbG9yLlxuJG1lbnUtZmxhdC1kcm9wZG93bi1saW5rLWFjdGl2ZS1jb2xvcjogICAgICRtZW51LWZsYXQtdGV4dCAhZGVmYXVsdDtcbi8vKiogQWN0aXZlIGRyb3Bkb3duIG1lbnUgaXRlbSBiYWNrZ3JvdW5kIGNvbG9yLlxuJG1lbnUtZmxhdC1kcm9wZG93bi1saW5rLWFjdGl2ZS1iZzogICAgICAgICRtZW51LWZsYXQtZHJvcGRvd24tYmcgIWRlZmF1bHQ7XG5cblxuLy8tLSBaLWluZGV4IG1hc3RlciBsaXN0XG4vL1xuLy8gV2FybmluZzogQXZvaWQgY3VzdG9taXppbmcgdGhlc2UgdmFsdWVzLiBUaGV5J3JlIHVzZWQgZm9yIGEgYmlyZCdzIGV5ZSB2aWV3XG4vLyBvZiBjb21wb25lbnRzIGRlcGVuZGVudCBvbiB0aGUgei1heGlzIGFuZCBhcmUgZGVzaWduZWQgdG8gYWxsIHdvcmsgdG9nZXRoZXIuXG4vL1xuLy8gTm90ZTogVGhlc2UgdmFyaWFibGVzIGFyZSBub3QgZ2VuZXJhdGVkIGludG8gdGhlIEN1c3RvbWl6ZXIuXG5cbiR6aW5kZXgtbmF2YmFyOiAgICAgICAgICAgIDEwMDAgIWRlZmF1bHQ7XG4kemluZGV4LWRyb3Bkb3duOiAgICAgICAgICAxMDAwICFkZWZhdWx0O1xuJHppbmRleC1wb3BvdmVyOiAgICAgICAgICAgMTA2MCAhZGVmYXVsdDtcbiR6aW5kZXgtdG9vbHRpcDogICAgICAgICAgIDEwNzAgIWRlZmF1bHQ7XG4kemluZGV4LW5hdmJhci1maXhlZDogICAgICAxMDMwICFkZWZhdWx0O1xuJHppbmRleC1tb2RhbC1iYWNrZ3JvdW5kOiAgMTA0MCAhZGVmYXVsdDtcbiR6aW5kZXgtbW9kYWw6ICAgICAgICAgICAgIDEwNTAgIWRlZmF1bHQ7XG5cbi8vPT0gTWVkaWEgcXVlcmllcyBicmVha3BvaW50c1xuLy9cbi8vIyMgRGVmaW5lIHRoZSBicmVha3BvaW50cyBhdCB3aGljaCB5b3VyIGxheW91dCB3aWxsIGNoYW5nZSwgYWRhcHRpbmcgdG8gZGlmZmVyZW50IHNjcmVlbiBzaXplcy5cblxuLy8gRXh0cmEgc21hbGwgc2NyZWVuIC8gcGhvbmVcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi14c2AgYXMgb2YgdjMuMC4xXG4kc2NyZWVuLXhzOiAgICAgICAgICAgICAgICAgIDQ4MHB4ICFkZWZhdWx0O1xuLy8qKiBEZXByZWNhdGVkIGAkc2NyZWVuLXhzLW1pbmAgYXMgb2YgdjMuMi4wXG4kc2NyZWVuLXhzLW1pbjogICAgICAgICAgICAgICRzY3JlZW4teHMgIWRlZmF1bHQ7XG4vLyoqIERlcHJlY2F0ZWQgYCRzY3JlZW4tcGhvbmVgIGFzIG9mIHYzLjAuMVxuJHNjcmVlbi1waG9uZTogICAgICAgICAgICAgICAkc2NyZWVuLXhzLW1pbiAhZGVmYXVsdDtcblxuLy8gU21hbGwgc2NyZWVuIC8gdGFibGV0XG4vLyoqIERlcHJlY2F0ZWQgYCRzY3JlZW4tc21gIGFzIG9mIHYzLjAuMVxuJHNjcmVlbi1zbTogICAgICAgICAgICAgICAgICA5OTJweCAhZGVmYXVsdDtcbiRzY3JlZW4tc20tbWluOiAgICAgICAgICAgICAgJHNjcmVlbi1zbSAhZGVmYXVsdDtcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi10YWJsZXRgIGFzIG9mIHYzLjAuMVxuJHNjcmVlbi10YWJsZXQ6ICAgICAgICAgICAgICAkc2NyZWVuLXNtLW1pbiAhZGVmYXVsdDtcblxuLy8gTWVkaXVtIHNjcmVlbiAvIGRlc2t0b3Bcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi1tZGAgYXMgb2YgdjMuMC4xXG4kc2NyZWVuLW1kOiAgICAgICAgICAgICAgICAgIDEyMDBweCAhZGVmYXVsdDtcbiRzY3JlZW4tbWQtbWluOiAgICAgICAgICAgICAgJHNjcmVlbi1tZCAhZGVmYXVsdDtcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi1kZXNrdG9wYCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tZGVza3RvcDogICAgICAgICAgICAgJHNjcmVlbi1tZC1taW4gIWRlZmF1bHQ7XG5cbi8vIExhcmdlIHNjcmVlbiAvIHdpZGUgZGVza3RvcFxuLy8qKiBEZXByZWNhdGVkIGAkc2NyZWVuLWxnYCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tbGc6ICAgICAgICAgICAgICAgICAgMTY4MCAhZGVmYXVsdDtcbiRzY3JlZW4tbGctbWluOiAgICAgICAgICAgICAgJHNjcmVlbi1sZyAhZGVmYXVsdDtcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi1sZy1kZXNrdG9wYCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tbGctZGVza3RvcDogICAgICAgICAgJHNjcmVlbi1sZy1taW4gIWRlZmF1bHQ7XG5cbi8vIFNvIG1lZGlhIHF1ZXJpZXMgZG9uJ3Qgb3ZlcmxhcCB3aGVuIHJlcXVpcmVkLCBwcm92aWRlIGEgbWF4aW11bVxuJHNjcmVlbi14cy1tYXg6ICAgICAgICAgICAgICAoJHNjcmVlbi1zbS1taW4gLSAxKSAhZGVmYXVsdDtcbiRzY3JlZW4tc20tbWF4OiAgICAgICAgICAgICAgKCRzY3JlZW4tbWQtbWluIC0gMSkgIWRlZmF1bHQ7XG4kc2NyZWVuLW1kLW1heDogICAgICAgICAgICAgICgkc2NyZWVuLWxnLW1pbiAtIDEpICFkZWZhdWx0O1xuXG5cbi8vPT0gR3JpZCBzeXN0ZW1cbi8vXG4vLyMjIERlZmluZSB5b3VyIGN1c3RvbSByZXNwb25zaXZlIGdyaWQuXG5cbi8vKiogTnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGdyaWQuXG4kZ3JpZC1jb2x1bW5zOiAgICAgICAgICAgICAgMTIgIWRlZmF1bHQ7XG4vLyoqIFBhZGRpbmcgYmV0d2VlbiBjb2x1bW5zLiBHZXRzIGRpdmlkZWQgaW4gaGFsZiBmb3IgdGhlIGxlZnQgYW5kIHJpZ2h0LlxuJGdyaWQtZ3V0dGVyLXdpZHRoOiAgICAgICAgIDAgIWRlZmF1bHQ7XG4vLyBOYXZiYXIgY29sbGFwc2Vcbi8vKiogUG9pbnQgYXQgd2hpY2ggdGhlIG5hdmJhciBiZWNvbWVzIHVuY29sbGFwc2VkLlxuJGdyaWQtZmxvYXQtYnJlYWtwb2ludDogICAgICRzY3JlZW4tc20tbWluICFkZWZhdWx0O1xuLy8qKiBQb2ludCBhdCB3aGljaCB0aGUgbmF2YmFyIGJlZ2lucyBjb2xsYXBzaW5nLlxuJGdyaWQtZmxvYXQtYnJlYWtwb2ludC1tYXg6ICgkZ3JpZC1mbG9hdC1icmVha3BvaW50IC0gMSkgIWRlZmF1bHQ7XG5cblxuLy89PSBDb250YWluZXIgc2l6ZXNcbi8vXG4vLyMjIERlZmluZSB0aGUgbWF4aW11bSB3aWR0aCBvZiBgLmNvbnRhaW5lcmAgZm9yIGRpZmZlcmVudCBzY3JlZW4gc2l6ZXMuXG5cbi8vIFNtYWxsIHNjcmVlbiAvIHRhYmxldFxuJGNvbnRhaW5lci10YWJsZXQ6ICAgICAgICAgICAgICg5NDBweCArICRncmlkLWd1dHRlci13aWR0aCkgIWRlZmF1bHQ7XG4vLyoqIEZvciBgJHNjcmVlbi1zbS1taW5gIGFuZCB1cC5cbiRjb250YWluZXItc206ICAgICAgICAgICAgICAgICAkY29udGFpbmVyLXRhYmxldCAhZGVmYXVsdDtcblxuLy8gTWVkaXVtIHNjcmVlbiAvIGRlc2t0b3BcbiRjb250YWluZXItZGVza3RvcDogICAgICAgICAgICAoMTE0MHB4ICsgJGdyaWQtZ3V0dGVyLXdpZHRoKSAhZGVmYXVsdDtcbi8vKiogRm9yIGAkc2NyZWVuLW1kLW1pbmAgYW5kIHVwLlxuJGNvbnRhaW5lci1tZDogICAgICAgICAgICAgICAgICRjb250YWluZXItZGVza3RvcCAhZGVmYXVsdDtcblxuLy8gTGFyZ2Ugc2NyZWVuIC8gd2lkZSBkZXNrdG9wXG4kY29udGFpbmVyLWxhcmdlLWRlc2t0b3A6ICAgICAgKDE1NDBweCArICRncmlkLWd1dHRlci13aWR0aCkgIWRlZmF1bHQ7XG4vLyoqIEZvciBgJHNjcmVlbi1sZy1taW5gIGFuZCB1cC5cbiRjb250YWluZXItbGc6ICAgICAgICAgICAgICAgICAkY29udGFpbmVyLWxhcmdlLWRlc2t0b3AgIWRlZmF1bHQ7XG5cblxuLy89PSBOYXZiYXJcbi8vXG4vLyMjXG5cbi8vIEJhc2ljcyBvZiBhIG5hdmJhclxuJG5hdmJhci1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgICA1MHB4ICFkZWZhdWx0O1xuJG5hdmJhci1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgICAkbGluZS1oZWlnaHQtY29tcHV0ZWQgIWRlZmF1bHQ7XG4kbmF2YmFyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICRib3JkZXItcmFkaXVzLWJhc2UgIWRlZmF1bHQ7XG4kbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDogICAgICAgIGZsb29yKCgkZ3JpZC1ndXR0ZXItd2lkdGggLyAyKSkgIWRlZmF1bHQ7XG4kbmF2YmFyLXBhZGRpbmctdmVydGljYWw6ICAgICAgICAgICgoJG5hdmJhci1oZWlnaHQgLSAkbGluZS1oZWlnaHQtY29tcHV0ZWQpIC8gMikgIWRlZmF1bHQ7XG4kbmF2YmFyLWNvbGxhcHNlLW1heC1oZWlnaHQ6ICAgICAgIDM0MHB4ICFkZWZhdWx0O1xuXG4kbmF2YmFyLWRlZmF1bHQtY29sb3I6ICAgICAgICAgICAgICM3NzcgIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtYmc6ICAgICAgICAgICAgICAgICNmOGY4ZjggIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtYm9yZGVyOiAgICAgICAgICAgIGRhcmtlbigkbmF2YmFyLWRlZmF1bHQtYmcsIDYuNSUpICFkZWZhdWx0O1xuXG4vLyBOYXZiYXIgbGlua3NcbiRuYXZiYXItZGVmYXVsdC1saW5rLWNvbG9yOiAgICAgICAgICAgICAgICAjNzc3ICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItY29sb3I6ICAgICAgICAgICMzMzMgIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtbGluay1ob3Zlci1iZzogICAgICAgICAgICAgdHJhbnNwYXJlbnQgIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtbGluay1hY3RpdmUtY29sb3I6ICAgICAgICAgIzU1NSAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1iZzogICAgICAgICAgICBkYXJrZW4oJG5hdmJhci1kZWZhdWx0LWJnLCA2LjUlKSAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgICAjY2NjICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LWxpbmstZGlzYWJsZWQtYmc6ICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuXG4vLyBOYXZiYXIgYnJhbmQgbGFiZWxcbiRuYXZiYXItZGVmYXVsdC1icmFuZC1jb2xvcjogICAgICAgICAgICAgICAkbmF2YmFyLWRlZmF1bHQtbGluay1jb2xvciAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC1icmFuZC1ob3Zlci1jb2xvcjogICAgICAgICBkYXJrZW4oJG5hdmJhci1kZWZhdWx0LWJyYW5kLWNvbG9yLCAxMCUpICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LWJyYW5kLWhvdmVyLWJnOiAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuXG4vLyBOYXZiYXIgdG9nZ2xlXG4kbmF2YmFyLWRlZmF1bHQtdG9nZ2xlLWhvdmVyLWJnOiAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC10b2dnbGUtaWNvbi1iYXItYmc6ICAgICAgICAjODg4ICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LXRvZ2dsZS1ib3JkZXItY29sb3I6ICAgICAgICNkZGQgIWRlZmF1bHQ7XG5cblxuLy89PT0gSW52ZXJ0ZWQgbmF2YmFyXG4vLyBSZXNldCBpbnZlcnRlZCBuYXZiYXIgYmFzaWNzXG4kbmF2YmFyLWludmVyc2UtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgIGxpZ2h0ZW4oJGdyYXktbGlnaHQsIDE1JSkgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICMyMjIgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtYm9yZGVyOiAgICAgICAgICAgICAgICAgICAgIGRhcmtlbigkbmF2YmFyLWludmVyc2UtYmcsIDEwJSkgIWRlZmF1bHQ7XG5cbi8vIEludmVydGVkIG5hdmJhciBsaW5rc1xuJG5hdmJhci1pbnZlcnNlLWxpbmstY29sb3I6ICAgICAgICAgICAgICAgICBsaWdodGVuKCRncmF5LWxpZ2h0LCAxNSUpICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItY29sb3I6ICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItYmc6ICAgICAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcbiRuYXZiYXItaW52ZXJzZS1saW5rLWFjdGl2ZS1jb2xvcjogICAgICAgICAgJG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItY29sb3IgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtYmc6ICAgICAgICAgICAgIGRhcmtlbigkbmF2YmFyLWludmVyc2UtYmcsIDEwJSkgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtbGluay1kaXNhYmxlZC1jb2xvcjogICAgICAgICM0NDQgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtbGluay1kaXNhYmxlZC1iZzogICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuXG4vLyBJbnZlcnRlZCBuYXZiYXIgYnJhbmQgbGFiZWxcbiRuYXZiYXItaW52ZXJzZS1icmFuZC1jb2xvcjogICAgICAgICAgICAgICAgJG5hdmJhci1pbnZlcnNlLWxpbmstY29sb3IgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtYnJhbmQtaG92ZXItY29sb3I6ICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtYnJhbmQtaG92ZXItYmc6ICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuXG4vLyBJbnZlcnRlZCBuYXZiYXIgdG9nZ2xlXG4kbmF2YmFyLWludmVyc2UtdG9nZ2xlLWhvdmVyLWJnOiAgICAgICAgICAgICMzMzMgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtdG9nZ2xlLWljb24tYmFyLWJnOiAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtdG9nZ2xlLWJvcmRlci1jb2xvcjogICAgICAgICMzMzMgIWRlZmF1bHQ7XG5cblxuLy89PSBOYXZzXG4vL1xuLy8jI1xuXG4vLz09PSBTaGFyZWQgbmF2IHN0eWxlc1xuJG5hdi1saW5rLXBhZGRpbmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAxMHB4IDE1cHggIWRlZmF1bHQ7XG4kbmF2LWxpbmstaG92ZXItYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICRncmF5LWxpZ2h0ZXIgIWRlZmF1bHQ7XG5cbiRuYXYtZGlzYWJsZWQtbGluay1jb2xvcjogICAgICAgICAgICAgICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG4kbmF2LWRpc2FibGVkLWxpbmstaG92ZXItY29sb3I6ICAgICAgICAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuXG4vLz09IFRhYnNcbiRuYXYtdGFicy1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcblxuJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiAgICAgICAgICAkZ3JheS1saWdodGVyICFkZWZhdWx0O1xuXG4kbmF2LXRhYnMtYWN0aXZlLWxpbmstaG92ZXItYmc6ICAgICAgICAgICAgICRib2R5LWJnICFkZWZhdWx0O1xuJG5hdi10YWJzLWFjdGl2ZS1saW5rLWhvdmVyLWNvbG9yOiAgICAgICAgICAkZ3JheSAhZGVmYXVsdDtcbiRuYXYtdGFicy1hY3RpdmUtbGluay1ob3Zlci1ib3JkZXItY29sb3I6ICAgI2RkZCAhZGVmYXVsdDtcblxuJG5hdi10YWJzLWp1c3RpZmllZC1saW5rLWJvcmRlci1jb2xvcjogICAgICAgICAgICAjZGRkICFkZWZhdWx0O1xuJG5hdi10YWJzLWp1c3RpZmllZC1hY3RpdmUtbGluay1ib3JkZXItY29sb3I6ICAgICAkYm9keS1iZyAhZGVmYXVsdDtcblxuLy89PSBQaWxsc1xuJG5hdi1waWxscy1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1iYXNlICFkZWZhdWx0O1xuJG5hdi1waWxscy1hY3RpdmUtbGluay1ob3Zlci1iZzogICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcbiRuYXYtcGlsbHMtYWN0aXZlLWxpbmstaG92ZXItY29sb3I6ICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG5cblxuLy89PSBQYWdpbmF0aW9uXG4vL1xuLy8jI1xuXG4kcGFnaW5hdGlvbi1jb2xvcjogICAgICAgICAgICAgICAgICAgICAkbGluay1jb2xvciAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1ib3JkZXI6ICAgICAgICAgICAgICAgICAgICAjZGRkICFkZWZhdWx0O1xuXG4kcGFnaW5hdGlvbi1ob3Zlci1jb2xvcjogICAgICAgICAgICAgICAkbGluay1ob3Zlci1jb2xvciAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWhvdmVyLWJnOiAgICAgICAgICAgICAgICAgICRncmF5LWxpZ2h0ZXIgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1ob3Zlci1ib3JkZXI6ICAgICAgICAgICAgICAjZGRkICFkZWZhdWx0O1xuXG4kcGFnaW5hdGlvbi1hY3RpdmUtY29sb3I6ICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tYWN0aXZlLWJnOiAgICAgICAgICAgICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1hY3RpdmUtYm9yZGVyOiAgICAgICAgICAgICAkYnJhbmQtcHJpbWFyeSAhZGVmYXVsdDtcblxuJHBhZ2luYXRpb24tZGlzYWJsZWQtY29sb3I6ICAgICAgICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1iZzogICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tZGlzYWJsZWQtYm9yZGVyOiAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcblxuXG4vLz09IFBhZ2VyXG4vL1xuLy8jI1xuXG4kcGFnZXItYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFnaW5hdGlvbi1iZyAhZGVmYXVsdDtcbiRwYWdlci1ib3JkZXI6ICAgICAgICAgICAgICAgICAgICAgICAgICRwYWdpbmF0aW9uLWJvcmRlciAhZGVmYXVsdDtcbiRwYWdlci1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICAgIDE1cHggIWRlZmF1bHQ7XG5cbiRwYWdlci1ob3Zlci1iZzogICAgICAgICAgICAgICAgICAgICAgICRwYWdpbmF0aW9uLWhvdmVyLWJnICFkZWZhdWx0O1xuXG4kcGFnZXItYWN0aXZlLWJnOiAgICAgICAgICAgICAgICAgICAgICAkcGFnaW5hdGlvbi1hY3RpdmUtYmcgIWRlZmF1bHQ7XG4kcGFnZXItYWN0aXZlLWNvbG9yOiAgICAgICAgICAgICAgICAgICAkcGFnaW5hdGlvbi1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG5cbiRwYWdlci1kaXNhYmxlZC1jb2xvcjogICAgICAgICAgICAgICAgICRwYWdpbmF0aW9uLWRpc2FibGVkLWNvbG9yICFkZWZhdWx0O1xuXG5cbi8vPT0gSnVtYm90cm9uXG4vL1xuLy8jI1xuXG4kanVtYm90cm9uLXBhZGRpbmc6ICAgICAgICAgICAgICAzMHB4ICFkZWZhdWx0O1xuJGp1bWJvdHJvbi1jb2xvcjogICAgICAgICAgICAgICAgaW5oZXJpdCAhZGVmYXVsdDtcbiRqdW1ib3Ryb24tYmc6ICAgICAgICAgICAgICAgICAgICRncmF5LWxpZ2h0ZXIgIWRlZmF1bHQ7XG4kanVtYm90cm9uLWhlYWRpbmctY29sb3I6ICAgICAgICBpbmhlcml0ICFkZWZhdWx0O1xuJGp1bWJvdHJvbi1mb250LXNpemU6ICAgICAgICAgICAgY2VpbCgoJGZvbnQtc2l6ZS1iYXNlICogMS41KSkgIWRlZmF1bHQ7XG4kanVtYm90cm9uLWhlYWRpbmctZm9udC1zaXplOiAgICBjZWlsKCgkZm9udC1zaXplLWJhc2UgKiA0LjUpKSAhZGVmYXVsdDtcblxuXG4vLz09IEZvcm0gc3RhdGVzIGFuZCBhbGVydHNcbi8vXG4vLyMjIERlZmluZSBjb2xvcnMgZm9yIGZvcm0gZmVlZGJhY2sgc3RhdGVzIGFuZCwgYnkgZGVmYXVsdCwgYWxlcnRzLlxuXG4kc3RhdGUtc3VjY2Vzcy10ZXh0OiAgICAgICAgICAgICAjNmM2YzZjICFkZWZhdWx0O1xuJHN0YXRlLXN1Y2Nlc3MtYmc6ICAgICAgICAgICAgICAgI2RhZTZjYiAhZGVmYXVsdDtcbiRzdGF0ZS1zdWNjZXNzLWJvcmRlcjogICAgICAgICAgICM4Y2M2M2YgIWRlZmF1bHQ7XG5cbiRzdGF0ZS1pbmZvLXRleHQ6ICAgICAgICAgICAgICAgICM2YzZjNmMgIWRlZmF1bHQ7XG4kc3RhdGUtaW5mby1iZzogICAgICAgICAgICAgICAgICAjZDllZGY3ICFkZWZhdWx0O1xuJHN0YXRlLWluZm8tYm9yZGVyOiAgICAgICAgICAgICAgIzAwOGFiZiAhZGVmYXVsdDtcblxuJHN0YXRlLXdhcm5pbmctdGV4dDogICAgICAgICAgICAgIzZjNmM2YyAhZGVmYXVsdDtcbiRzdGF0ZS13YXJuaW5nLWJnOiAgICAgICAgICAgICAgICNmMWUzYzIgIWRlZmF1bHQ7XG4kc3RhdGUtd2FybmluZy1ib3JkZXI6ICAgICAgICAgICAjZmRiODEzICFkZWZhdWx0O1xuXG4kc3RhdGUtZGFuZ2VyLXRleHQ6ICAgICAgICAgICAgICAjNmM2YzZjICFkZWZhdWx0O1xuJHN0YXRlLWRhbmdlci1iZzogICAgICAgICAgICAgICAgICNlYWMzYzcgIWRlZmF1bHQ7XG4kc3RhdGUtZGFuZ2VyLWJvcmRlcjogICAgICAgICAgICNkOTE4MmQgIWRlZmF1bHQ7XG5cblxuLy89PSBUb29sdGlwc1xuLy9cbi8vIyNcblxuLy8qKiBUb29sdGlwIG1heCB3aWR0aFxuJHRvb2x0aXAtbWF4LXdpZHRoOiAgICAgICAgICAgMjAwcHggIWRlZmF1bHQ7XG4vLyoqIFRvb2x0aXAgdGV4dCBjb2xvclxuJHRvb2x0aXAtY29sb3I6ICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogVG9vbHRpcCBiYWNrZ3JvdW5kIGNvbG9yXG4kdG9vbHRpcC1iZzogICAgICAgICAgICAgICAgICAjMDAwICFkZWZhdWx0O1xuJHRvb2x0aXAtb3BhY2l0eTogICAgICAgICAgICAgLjkgIWRlZmF1bHQ7XG5cbi8vKiogVG9vbHRpcCBhcnJvdyB3aWR0aFxuJHRvb2x0aXAtYXJyb3ctd2lkdGg6ICAgICAgICAgNXB4ICFkZWZhdWx0O1xuLy8qKiBUb29sdGlwIGFycm93IGNvbG9yXG4kdG9vbHRpcC1hcnJvdy1jb2xvcjogICAgICAgICAkdG9vbHRpcC1iZyAhZGVmYXVsdDtcblxuXG4vLz09IFBvcG92ZXJzXG4vL1xuLy8jI1xuXG4vLyoqIFBvcG92ZXIgYm9keSBiYWNrZ3JvdW5kIGNvbG9yXG4kcG9wb3Zlci1iZzogICAgICAgICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIFBvcG92ZXIgbWF4aW11bSB3aWR0aFxuJHBvcG92ZXItbWF4LXdpZHRoOiAgICAgICAgICAgICAgICAgICAyNzZweCAhZGVmYXVsdDtcbi8vKiogUG9wb3ZlciBib3JkZXIgY29sb3JcbiRwb3BvdmVyLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgICAgcmdiYSgwLDAsMCwuMikgIWRlZmF1bHQ7XG4vLyoqIFBvcG92ZXIgZmFsbGJhY2sgYm9yZGVyIGNvbG9yXG4kcG9wb3Zlci1mYWxsYmFjay1ib3JkZXItY29sb3I6ICAgICAgICNjY2MgIWRlZmF1bHQ7XG5cbi8vKiogUG9wb3ZlciB0aXRsZSBiYWNrZ3JvdW5kIGNvbG9yXG4kcG9wb3Zlci10aXRsZS1iZzogICAgICAgICAgICAgICAgICAgIGRhcmtlbigkcG9wb3Zlci1iZywgMyUpICFkZWZhdWx0O1xuXG4vLyoqIFBvcG92ZXIgYXJyb3cgd2lkdGhcbiRwb3BvdmVyLWFycm93LXdpZHRoOiAgICAgICAgICAgICAgICAgMTBweCAhZGVmYXVsdDtcbi8vKiogUG9wb3ZlciBhcnJvdyBjb2xvclxuJHBvcG92ZXItYXJyb3ctY29sb3I6ICAgICAgICAgICAgICAgICAkcG9wb3Zlci1iZyAhZGVmYXVsdDtcblxuLy8qKiBQb3BvdmVyIG91dGVyIGFycm93IHdpZHRoXG4kcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDogICAgICAgICAgICgkcG9wb3Zlci1hcnJvdy13aWR0aCArIDEpICFkZWZhdWx0O1xuLy8qKiBQb3BvdmVyIG91dGVyIGFycm93IGNvbG9yXG4kcG9wb3Zlci1hcnJvdy1vdXRlci1jb2xvcjogICAgICAgICAgIGZhZGVfaW4oJHBvcG92ZXItYm9yZGVyLWNvbG9yLCAwLjA1KSAhZGVmYXVsdDtcbi8vKiogUG9wb3ZlciBvdXRlciBhcnJvdyBmYWxsYmFjayBjb2xvclxuJHBvcG92ZXItYXJyb3ctb3V0ZXItZmFsbGJhY2stY29sb3I6ICBkYXJrZW4oJHBvcG92ZXItZmFsbGJhY2stYm9yZGVyLWNvbG9yLCAyMCUpICFkZWZhdWx0O1xuXG5cbi8vPT0gTGFiZWxzXG4vL1xuLy8jI1xuXG4vLyoqIERlZmF1bHQgbGFiZWwgYmFja2dyb3VuZCBjb2xvclxuJGxhYmVsLWRlZmF1bHQtYmc6ICAgICAgICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG4vLyoqIFByaW1hcnkgbGFiZWwgYmFja2dyb3VuZCBjb2xvclxuJGxhYmVsLXByaW1hcnktYmc6ICAgICAgICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG4vLyoqIFN1Y2Nlc3MgbGFiZWwgYmFja2dyb3VuZCBjb2xvclxuJGxhYmVsLXN1Y2Nlc3MtYmc6ICAgICAgICAgICAgJGJyYW5kLXN1Y2Nlc3MgIWRlZmF1bHQ7XG4vLyoqIEluZm8gbGFiZWwgYmFja2dyb3VuZCBjb2xvclxuJGxhYmVsLWluZm8tYmc6ICAgICAgICAgICAgICAgJGJyYW5kLWluZm8gIWRlZmF1bHQ7XG4vLyoqIFdhcm5pbmcgbGFiZWwgYmFja2dyb3VuZCBjb2xvclxuJGxhYmVsLXdhcm5pbmctYmc6ICAgICAgICAgICAgJGJyYW5kLXdhcm5pbmcgIWRlZmF1bHQ7XG4vLyoqIERhbmdlciBsYWJlbCBiYWNrZ3JvdW5kIGNvbG9yXG4kbGFiZWwtZGFuZ2VyLWJnOiAgICAgICAgICAgICAkYnJhbmQtZGFuZ2VyICFkZWZhdWx0O1xuXG4vLyoqIERlZmF1bHQgbGFiZWwgdGV4dCBjb2xvclxuJGxhYmVsLWNvbG9yOiAgICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogRGVmYXVsdCB0ZXh0IGNvbG9yIG9mIGEgbGlua2VkIGxhYmVsXG4kbGFiZWwtbGluay1ob3Zlci1jb2xvcjogICAgICAjZmZmICFkZWZhdWx0O1xuXG5cbi8vPT0gTW9kYWxzXG4vL1xuLy8jI1xuXG4vLyoqIFBhZGRpbmcgYXBwbGllZCB0byB0aGUgbW9kYWwgYm9keVxuJG1vZGFsLWlubmVyLXBhZGRpbmc6ICAgICAgICAgMjBweCAzMHB4ICFkZWZhdWx0O1xuXG4vLyoqIFBhZGRpbmcgYXBwbGllZCB0byB0aGUgbW9kYWwgdGl0bGVcbiRtb2RhbC10aXRsZS1wYWRkaW5nOiAgICAgICAgIDI3cHggMTRweCAxNHB4IDMwcHggIWRlZmF1bHQ7XG4vLyoqIE1vZGFsIHRpdGxlIGxpbmUtaGVpZ2h0XG4kbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ6ICAgICAyM3B4ICFkZWZhdWx0O1xuXG4vLyoqIEJhY2tncm91bmQgY29sb3Igb2YgbW9kYWwgY29udGVudCBhcmVhXG4kbW9kYWwtY29udGVudC1iZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIE1vZGFsIGNvbnRlbnQgYm9yZGVyIGNvbG9yXG4kbW9kYWwtY29udGVudC1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICAgICAgIHJnYmEoMTcwLDE3MCwxNzAsLjMpICFkZWZhdWx0O1xuLy8qKiBNb2RhbCBjb250ZW50IGJvcmRlciBjb2xvciAqKmZvciBJRTgqKlxuJG1vZGFsLWNvbnRlbnQtZmFsbGJhY2stYm9yZGVyLWNvbG9yOiAgICAgICAgICAjYWFhICFkZWZhdWx0O1xuXG4vLyoqIE1vZGFsIGJhY2tkcm9wIGJhY2tncm91bmQgY29sb3JcbiRtb2RhbC1iYWNrZHJvcC1iZzogICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIE1vZGFsIGJhY2tkcm9wIG9wYWNpdHlcbiRtb2RhbC1iYWNrZHJvcC1vcGFjaXR5OiAgICAgIC41ICFkZWZhdWx0O1xuLy8qKiBNb2RhbCBoZWFkZXIgYm9yZGVyIGNvbG9yXG4kbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjogICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcbi8vKiogTW9kYWwgZm9vdGVyIGJvcmRlciBjb2xvclxuJG1vZGFsLWZvb3Rlci1ib3JkZXItY29sb3I6ICAgJG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XG5cbiRtb2RhbC1sZzogICAgICAgICAgICAgICAgICAgIDExMjRweCAhZGVmYXVsdDtcbiRtb2RhbC1tZDogICAgICAgICAgICAgICAgICAgIDgyNHB4ICFkZWZhdWx0O1xuJG1vZGFsLXNtOiAgICAgICAgICAgICAgICAgICAgNTI0cHggIWRlZmF1bHQ7XG5cblxuLy89PSBBbGVydHNcbi8vXG4vLyMjIERlZmluZSBhbGVydCBjb2xvcnMsIGJvcmRlciByYWRpdXMsIGFuZCBwYWRkaW5nLlxuXG4kYWxlcnQtcGFkZGluZzogICAgICAgICAgICAgICA4cHggMTVweCAhZGVmYXVsdDtcbiRhbGVydC1ib3JkZXItcmFkaXVzOiAgICAgICAgIDAgIWRlZmF1bHQ7XG4kYWxlcnQtbGluay1mb250LXdlaWdodDogICAgICBib2xkICFkZWZhdWx0O1xuJGFsZXJ0LWJvcmRlci13aWR0aDogICAgICAgICAgMCAwIDAgNXB4ICFkZWZhdWx0O1xuJGFsZXJ0LWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgMTAuNXB0ICFkZWZhdWx0OyBcblxuJGFsZXJ0LXN1Y2Nlc3MtYmc6ICAgICAgICAgICAgJHN0YXRlLXN1Y2Nlc3MtYmcgIWRlZmF1bHQ7XG4kYWxlcnQtc3VjY2Vzcy10ZXh0OiAgICAgICAgICAkc3RhdGUtc3VjY2Vzcy10ZXh0ICFkZWZhdWx0O1xuJGFsZXJ0LXN1Y2Nlc3MtYm9yZGVyOiAgICAgICAgJHN0YXRlLXN1Y2Nlc3MtYm9yZGVyICFkZWZhdWx0O1xuXG4kYWxlcnQtaW5mby1iZzogICAgICAgICAgICAgICAkc3RhdGUtaW5mby1iZyAhZGVmYXVsdDtcbiRhbGVydC1pbmZvLXRleHQ6ICAgICAgICAgICAgICRzdGF0ZS1pbmZvLXRleHQgIWRlZmF1bHQ7XG4kYWxlcnQtaW5mby1ib3JkZXI6ICAgICAgICAgICAkc3RhdGUtaW5mby1ib3JkZXIgIWRlZmF1bHQ7XG5cbiRhbGVydC13YXJuaW5nLWJnOiAgICAgICAgICAgICRzdGF0ZS13YXJuaW5nLWJnICFkZWZhdWx0O1xuJGFsZXJ0LXdhcm5pbmctdGV4dDogICAgICAgICAgJHN0YXRlLXdhcm5pbmctdGV4dCAhZGVmYXVsdDtcbiRhbGVydC13YXJuaW5nLWJvcmRlcjogICAgICAgICRzdGF0ZS13YXJuaW5nLWJvcmRlciAhZGVmYXVsdDtcblxuJGFsZXJ0LWRhbmdlci1iZzogICAgICAgICAgICAgJHN0YXRlLWRhbmdlci1iZyAhZGVmYXVsdDtcbiRhbGVydC1kYW5nZXItdGV4dDogICAgICAgICAgICRzdGF0ZS1kYW5nZXItdGV4dCAhZGVmYXVsdDtcbiRhbGVydC1kYW5nZXItYm9yZGVyOiAgICAgICAgICRzdGF0ZS1kYW5nZXItYm9yZGVyICFkZWZhdWx0O1xuXG5cbi8vPT0gUHJvZ3Jlc3MgYmFyc1xuLy9cbi8vIyNcblxuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSB3aG9sZSBwcm9ncmVzcyBjb21wb25lbnRcbiRwcm9ncmVzcy1iZzogICAgICAgICAgICAgICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG4vLyoqIFByb2dyZXNzIGJhciB0ZXh0IGNvbG9yXG4kcHJvZ3Jlc3MtYmFyLWNvbG9yOiAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuLy8qKiBWYXJpYWJsZSBmb3Igc2V0dGluZyByb3VuZGVkIGNvcm5lcnMgb24gcHJvZ3Jlc3MgYmFyLlxuJHByb2dyZXNzLWJvcmRlci1yYWRpdXM6ICAgICAgJGJvcmRlci1yYWRpdXMtYmFzZSAhZGVmYXVsdDtcblxuLy8qKiBEZWZhdWx0IHByb2dyZXNzIGJhciBjb2xvclxuJHByb2dyZXNzLWJhci1iZzogICAgICAgICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG4vLyoqIFN1Y2Nlc3MgcHJvZ3Jlc3MgYmFyIGNvbG9yXG4kcHJvZ3Jlc3MtYmFyLXN1Y2Nlc3MtYmc6ICAgICAkYnJhbmQtc3VjY2VzcyAhZGVmYXVsdDtcbi8vKiogV2FybmluZyBwcm9ncmVzcyBiYXIgY29sb3JcbiRwcm9ncmVzcy1iYXItd2FybmluZy1iZzogICAgICRicmFuZC13YXJuaW5nICFkZWZhdWx0O1xuLy8qKiBEYW5nZXIgcHJvZ3Jlc3MgYmFyIGNvbG9yXG4kcHJvZ3Jlc3MtYmFyLWRhbmdlci1iZzogICAgICAkYnJhbmQtZGFuZ2VyICFkZWZhdWx0O1xuLy8qKiBJbmZvIHByb2dyZXNzIGJhciBjb2xvclxuJHByb2dyZXNzLWJhci1pbmZvLWJnOiAgICAgICAgJGJyYW5kLWluZm8gIWRlZmF1bHQ7XG5cblxuLy89PSBMaXN0IGdyb3VwXG4vL1xuLy8jI1xuXG4vLyoqIEJhY2tncm91bmQgY29sb3Igb24gYC5saXN0LWdyb3VwLWl0ZW1gXG4kbGlzdC1ncm91cC1iZzogICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIGAubGlzdC1ncm91cC1pdGVtYCBib3JkZXIgY29sb3JcbiRsaXN0LWdyb3VwLWJvcmRlcjogICAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcbi8vKiogTGlzdCBncm91cCBib3JkZXIgcmFkaXVzXG4kbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzOiAgICAgICRib3JkZXItcmFkaXVzLWJhc2UgIWRlZmF1bHQ7XG5cbi8vKiogQmFja2dyb3VuZCBjb2xvciBvZiBzaW5nbGUgbGlzdCBpdGVtcyBvbiBob3ZlclxuJGxpc3QtZ3JvdXAtaG92ZXItYmc6ICAgICAgICAgICAjZjVmNWY1ICFkZWZhdWx0O1xuLy8qKiBUZXh0IGNvbG9yIG9mIGFjdGl2ZSBsaXN0IGl0ZW1zXG4kbGlzdC1ncm91cC1hY3RpdmUtY29sb3I6ICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIGFjdGl2ZSBsaXN0IGl0ZW1zXG4kbGlzdC1ncm91cC1hY3RpdmUtYmc6ICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xuLy8qKiBCb3JkZXIgY29sb3Igb2YgYWN0aXZlIGxpc3QgZWxlbWVudHNcbiRsaXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXI6ICAgICAgJGxpc3QtZ3JvdXAtYWN0aXZlLWJnICFkZWZhdWx0O1xuLy8qKiBUZXh0IGNvbG9yIGZvciBjb250ZW50IHdpdGhpbiBhY3RpdmUgbGlzdCBpdGVtc1xuJGxpc3QtZ3JvdXAtYWN0aXZlLXRleHQtY29sb3I6ICBsaWdodGVuKCRsaXN0LWdyb3VwLWFjdGl2ZS1iZywgNDAlKSAhZGVmYXVsdDtcblxuLy8qKiBUZXh0IGNvbG9yIG9mIGRpc2FibGVkIGxpc3QgaXRlbXNcbiRsaXN0LWdyb3VwLWRpc2FibGVkLWNvbG9yOiAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIGRpc2FibGVkIGxpc3QgaXRlbXNcbiRsaXN0LWdyb3VwLWRpc2FibGVkLWJnOiAgICAgICAgICRncmF5LWxpZ2h0ZXIgIWRlZmF1bHQ7XG4vLyoqIFRleHQgY29sb3IgZm9yIGNvbnRlbnQgd2l0aGluIGRpc2FibGVkIGxpc3QgaXRlbXNcbiRsaXN0LWdyb3VwLWRpc2FibGVkLXRleHQtY29sb3I6ICRsaXN0LWdyb3VwLWRpc2FibGVkLWNvbG9yICFkZWZhdWx0O1xuXG4kbGlzdC1ncm91cC1saW5rLWNvbG9yOiAgICAgICAgICM1NTUgIWRlZmF1bHQ7XG4kbGlzdC1ncm91cC1saW5rLWhvdmVyLWNvbG9yOiAgICRsaXN0LWdyb3VwLWxpbmstY29sb3IgIWRlZmF1bHQ7XG4kbGlzdC1ncm91cC1saW5rLWhlYWRpbmctY29sb3I6ICMzMzMgIWRlZmF1bHQ7XG5cblxuLy89PSBQYW5lbHNcbi8vXG4vLyMjXG5cbiRwYW5lbC1iZzogICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kcGFuZWwtYm9keS1wYWRkaW5nOiAgICAgICAgICAxNXB4ICFkZWZhdWx0O1xuJHBhbmVsLWhlYWRpbmctcGFkZGluZzogICAgICAgMTBweCAxNXB4ICFkZWZhdWx0O1xuJHBhbmVsLWZvb3Rlci1wYWRkaW5nOiAgICAgICAgJHBhbmVsLWhlYWRpbmctcGFkZGluZyAhZGVmYXVsdDtcbiRwYW5lbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICRib3JkZXItcmFkaXVzLWJhc2UgIWRlZmF1bHQ7XG5cbi8vKiogQm9yZGVyIGNvbG9yIGZvciBlbGVtZW50cyB3aXRoaW4gcGFuZWxzXG4kcGFuZWwtaW5uZXItYm9yZGVyOiAgICAgICAgICAjZGRkICFkZWZhdWx0O1xuJHBhbmVsLWZvb3Rlci1iZzogICAgICAgICAgICAgI2Y1ZjVmNSAhZGVmYXVsdDtcblxuJHBhbmVsLWRlZmF1bHQtdGV4dDogICAgICAgICAgJGdyYXktZGFyayAhZGVmYXVsdDtcbiRwYW5lbC1kZWZhdWx0LWJvcmRlcjogICAgICAgICNkZGQgIWRlZmF1bHQ7XG4kcGFuZWwtZGVmYXVsdC1oZWFkaW5nLWJnOiAgICAjZjVmNWY1ICFkZWZhdWx0O1xuXG4kcGFuZWwtcHJpbWFyeS10ZXh0OiAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJHBhbmVsLXByaW1hcnktYm9yZGVyOiAgICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG4kcGFuZWwtcHJpbWFyeS1oZWFkaW5nLWJnOiAgICAkYnJhbmQtcHJpbWFyeSAhZGVmYXVsdDtcblxuJHBhbmVsLXN1Y2Nlc3MtdGV4dDogICAgICAgICAgJHN0YXRlLXN1Y2Nlc3MtdGV4dCAhZGVmYXVsdDtcbiRwYW5lbC1zdWNjZXNzLWJvcmRlcjogICAgICAgICRzdGF0ZS1zdWNjZXNzLWJvcmRlciAhZGVmYXVsdDtcbiRwYW5lbC1zdWNjZXNzLWhlYWRpbmctYmc6ICAgICRzdGF0ZS1zdWNjZXNzLWJnICFkZWZhdWx0O1xuXG4kcGFuZWwtaW5mby10ZXh0OiAgICAgICAgICAgICAkc3RhdGUtaW5mby10ZXh0ICFkZWZhdWx0O1xuJHBhbmVsLWluZm8tYm9yZGVyOiAgICAgICAgICAgJHN0YXRlLWluZm8tYm9yZGVyICFkZWZhdWx0O1xuJHBhbmVsLWluZm8taGVhZGluZy1iZzogICAgICAgJHN0YXRlLWluZm8tYmcgIWRlZmF1bHQ7XG5cbiRwYW5lbC13YXJuaW5nLXRleHQ6ICAgICAgICAgICRzdGF0ZS13YXJuaW5nLXRleHQgIWRlZmF1bHQ7XG4kcGFuZWwtd2FybmluZy1ib3JkZXI6ICAgICAgICAkc3RhdGUtd2FybmluZy1ib3JkZXIgIWRlZmF1bHQ7XG4kcGFuZWwtd2FybmluZy1oZWFkaW5nLWJnOiAgICAkc3RhdGUtd2FybmluZy1iZyAhZGVmYXVsdDtcblxuJHBhbmVsLWRhbmdlci10ZXh0OiAgICAgICAgICAgJHN0YXRlLWRhbmdlci10ZXh0ICFkZWZhdWx0O1xuJHBhbmVsLWRhbmdlci1ib3JkZXI6ICAgICAgICAgJHN0YXRlLWRhbmdlci1ib3JkZXIgIWRlZmF1bHQ7XG4kcGFuZWwtZGFuZ2VyLWhlYWRpbmctYmc6ICAgICAkc3RhdGUtZGFuZ2VyLWJnICFkZWZhdWx0O1xuXG5cbi8vPT0gVGh1bWJuYWlsc1xuLy9cbi8vIyNcblxuLy8qKiBQYWRkaW5nIGFyb3VuZCB0aGUgdGh1bWJuYWlsIGltYWdlXG4kdGh1bWJuYWlsLXBhZGRpbmc6ICAgICAgICAgICA0cHggIWRlZmF1bHQ7XG4vLyoqIFRodW1ibmFpbCBiYWNrZ3JvdW5kIGNvbG9yXG4kdGh1bWJuYWlsLWJnOiAgICAgICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcbi8vKiogVGh1bWJuYWlsIGJvcmRlciBjb2xvclxuJHRodW1ibmFpbC1ib3JkZXI6ICAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcbi8vKiogVGh1bWJuYWlsIGJvcmRlciByYWRpdXNcbiR0aHVtYm5haWwtYm9yZGVyLXJhZGl1czogICAgICRib3JkZXItcmFkaXVzLWJhc2UgIWRlZmF1bHQ7XG5cbi8vKiogQ3VzdG9tIHRleHQgY29sb3IgZm9yIHRodW1ibmFpbCBjYXB0aW9uc1xuJHRodW1ibmFpbC1jYXB0aW9uLWNvbG9yOiAgICAgJHRleHQtY29sb3IgIWRlZmF1bHQ7XG4vLyoqIFBhZGRpbmcgYXJvdW5kIHRoZSB0aHVtYm5haWwgY2FwdGlvblxuJHRodW1ibmFpbC1jYXB0aW9uLXBhZGRpbmc6ICAgOXB4ICFkZWZhdWx0O1xuXG5cbi8vPT0gV2VsbHNcbi8vXG4vLyMjXG5cbiR3ZWxsLWJnOiAgICAgICAgICAgICAgICAgICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG4kd2VsbC1ib3JkZXI6ICAgICAgICAgICAgICAgICBkYXJrZW4oJHdlbGwtYmcsIDclKSAhZGVmYXVsdDtcblxuXG4vLz09IEJhZGdlc1xuLy9cbi8vIyNcblxuJGJhZGdlLWNvbG9yOiAgICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogTGlua2VkIGJhZGdlIHRleHQgY29sb3Igb24gaG92ZXJcbiRiYWRnZS1saW5rLWhvdmVyLWNvbG9yOiAgICAgICNmZmYgIWRlZmF1bHQ7XG4kYmFkZ2UtYmc6ICAgICAgICAgICAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcblxuLy8qKiBCYWRnZSB0ZXh0IGNvbG9yIGluIGFjdGl2ZSBuYXYgbGlua1xuJGJhZGdlLWFjdGl2ZS1jb2xvcjogICAgICAgICAgJGxpbmstY29sb3IgIWRlZmF1bHQ7XG4vLyoqIEJhZGdlIGJhY2tncm91bmQgY29sb3IgaW4gYWN0aXZlIG5hdiBsaW5rXG4kYmFkZ2UtYWN0aXZlLWJnOiAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuXG4kYmFkZ2UtZm9udC13ZWlnaHQ6ICAgICAgICAgICBib2xkICFkZWZhdWx0O1xuJGJhZGdlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgMSAhZGVmYXVsdDtcbiRiYWRnZS1ib3JkZXItcmFkaXVzOiAgICAgICAgIDEwcHggIWRlZmF1bHQ7XG5cblxuLy89PSBCcmVhZGNydW1ic1xuLy9cbi8vIyNcblxuJGJyZWFkY3J1bWItcGFkZGluZy12ZXJ0aWNhbDogICA4cHggIWRlZmF1bHQ7XG4kYnJlYWRjcnVtYi1wYWRkaW5nLWhvcml6b250YWw6IDE1cHggIWRlZmF1bHQ7XG4vLyoqIEJyZWFkY3J1bWIgYmFja2dyb3VuZCBjb2xvclxuJGJyZWFkY3J1bWItYmc6ICAgICAgICAgICAgICAgICAjZjVmNWY1ICFkZWZhdWx0O1xuLy8qKiBCcmVhZGNydW1iIHRleHQgY29sb3JcbiRicmVhZGNydW1iLWNvbG9yOiAgICAgICAgICAgICAgI2NjYyAhZGVmYXVsdDtcbi8vKiogVGV4dCBjb2xvciBvZiBjdXJyZW50IHBhZ2UgaW4gdGhlIGJyZWFkY3J1bWJcbiRicmVhZGNydW1iLWFjdGl2ZS1jb2xvcjogICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG4vLyoqIFRleHR1YWwgc2VwYXJhdG9yIGZvciBiZXR3ZWVuIGJyZWFkY3J1bWIgZWxlbWVudHNcbiRicmVhZGNydW1iLXNlcGFyYXRvcjogICAgICAgICAgXCIvXCIgIWRlZmF1bHQ7XG5cblxuLy89PSBDYXJvdXNlbFxuLy9cbi8vIyNcblxuJGNhcm91c2VsLXRleHQtc2hhZG93OiAgICAgICAgICAgICAgICAgICAgICAgIDAgMXB4IDJweCByZ2JhKDAsMCwwLC42KSAhZGVmYXVsdDtcblxuJGNhcm91c2VsLWNvbnRyb2wtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtY29udHJvbC13aWR0aDogICAgICAgICAgICAgICAgICAgICAgMTUlICFkZWZhdWx0O1xuJGNhcm91c2VsLWNvbnRyb2wtb3BhY2l0eTogICAgICAgICAgICAgICAgICAgIC41ICFkZWZhdWx0O1xuJGNhcm91c2VsLWNvbnRyb2wtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgIDIwcHggIWRlZmF1bHQ7XG5cbiRjYXJvdXNlbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGNhcm91c2VsLWluZGljYXRvci1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG5cbiRjYXJvdXNlbC1jYXB0aW9uLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuXG5cbi8vPT0gQ2xvc2Vcbi8vXG4vLyMjXG5cbiRjbG9zZS1mb250LXdlaWdodDogICAgICAgICAgIGJvbGQgIWRlZmF1bHQ7XG4kY2xvc2UtY29sb3I6ICAgICAgICAgICAgICAgICAjMDAwICFkZWZhdWx0O1xuJGNsb3NlLXRleHQtc2hhZG93OiAgICAgICAgICAgMCAxcHggMCAjZmZmICFkZWZhdWx0O1xuXG5cbi8vPT0gQ29kZVxuLy9cbi8vIyNcblxuJGNvZGUtY29sb3I6ICAgICAgICAgICAgICAgICAgI2M3MjU0ZSAhZGVmYXVsdDtcbiRjb2RlLWJnOiAgICAgICAgICAgICAgICAgICAgICNmOWYyZjQgIWRlZmF1bHQ7XG5cbiRrYmQtY29sb3I6ICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4ka2JkLWJnOiAgICAgICAgICAgICAgICAgICAgICAjMzMzICFkZWZhdWx0O1xuXG4kcHJlLWJnOiAgICAgICAgICAgICAgICAgICAgICAjZjVmNWY1ICFkZWZhdWx0O1xuJHByZS1jb2xvcjogICAgICAgICAgICAgICAgICAgJGdyYXktZGFyayAhZGVmYXVsdDtcbiRwcmUtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICNjY2MgIWRlZmF1bHQ7XG4kcHJlLXNjcm9sbGFibGUtbWF4LWhlaWdodDogICAzNDBweCAhZGVmYXVsdDtcblxuXG4vLz09IFR5cGVcbi8vXG4vLyMjXG5cbi8vKiogSG9yaXpvbnRhbCBvZmZzZXQgZm9yIGZvcm1zIGFuZCBsaXN0cy5cbiRjb21wb25lbnQtb2Zmc2V0LWhvcml6b250YWw6IDE4MHB4ICFkZWZhdWx0O1xuLy8qKiBUZXh0IG11dGVkIGNvbG9yXG4kdGV4dC1tdXRlZDogICAgICAgICAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcbi8vKiogQWJicmV2aWF0aW9ucyBhbmQgYWNyb255bXMgYm9yZGVyIGNvbG9yXG4kYWJici1ib3JkZXItY29sb3I6ICAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcbi8vKiogSGVhZGluZ3Mgc21hbGwgY29sb3JcbiRoZWFkaW5ncy1zbWFsbC1jb2xvcjogICAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuLy8qKiBCbG9ja3F1b3RlIHNtYWxsIGNvbG9yXG4kYmxvY2txdW90ZS1zbWFsbC1jb2xvcjogICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcbi8vKiogQmxvY2txdW90ZSBmb250IHNpemVcbiRibG9ja3F1b3RlLWZvbnQtc2l6ZTogICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSAhZGVmYXVsdDtcbi8vKiogQmxvY2txdW90ZSBib3JkZXIgY29sb3JcbiRibG9ja3F1b3RlLWJvcmRlci1jb2xvcjogICAgICRncmF5LWxpZ2h0ZXIgIWRlZmF1bHQ7XG4vLyoqIFBhZ2UgaGVhZGVyIGJvcmRlciBjb2xvclxuJHBhZ2UtaGVhZGVyLWJvcmRlci1jb2xvcjogICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcbi8vKiogV2lkdGggb2YgaG9yaXpvbnRhbCBkZXNjcmlwdGlvbiBsaXN0IHRpdGxlc1xuJGRsLWhvcml6b250YWwtb2Zmc2V0OiAgICAgICAgJGNvbXBvbmVudC1vZmZzZXQtaG9yaXpvbnRhbCAhZGVmYXVsdDtcbi8vKiogSG9yaXpvbnRhbCBsaW5lIGNvbG9yLlxuJGhyLWJvcmRlcjogICAgICAgICAgICAgICAgICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcblxuLy8qIFxuLy8gVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbi8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE1IGJvb3RzdHJhcC1zZWxlY3RcblxuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbi8vIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbi8vIFNPRlRXQVJFLiAqL1xuXG4kY29sb3ItcmVkLWVycm9yOiByZ2IoMTg1LCA3NCwgNzIpO1xuJGNvbG9yLWJsdWUtaG92ZXI6IHJnYigxMDAsIDE3NywgMjE2KTtcbiRjb2xvci1ncmV5LWFycm93OiByZ2IoMjA0LCAyMDQsIDIwNCk7XG5cbiR3aWR0aC1kZWZhdWx0OiAyMjBweDtcblxuJHppbmRleC1zZWxlY3QtZHJvcGRvd246IDEwMzUgIWRlZmF1bHQ7ICIsIi8vIFdlYktpdC1zdHlsZSBmb2N1c1xuXG5AbWl4aW4gdGFiLWZvY3VzKCkge1xuICAvLyBEZWZhdWx0XG4gIG91dGxpbmU6IHRoaW4gZG90dGVkO1xuICAvLyBXZWJLaXRcbiAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xuICBvdXRsaW5lLW9mZnNldDogLTJweDtcbn1cbiIsIi8vIEltYWdlIE1peGluc1xuLy8gLSBSZXNwb25zaXZlIGltYWdlXG4vLyAtIFJldGluYSBpbWFnZVxuXG5cbi8vIFJlc3BvbnNpdmUgaW1hZ2Vcbi8vXG4vLyBLZWVwIGltYWdlcyBmcm9tIHNjYWxpbmcgYmV5b25kIHRoZSB3aWR0aCBvZiB0aGVpciBwYXJlbnRzLlxuQG1peGluIGltZy1yZXNwb25zaXZlKCRkaXNwbGF5OiBibG9jaykge1xuICBkaXNwbGF5OiAkZGlzcGxheTtcbiAgbWF4LXdpZHRoOiAxMDAlOyAvLyBQYXJ0IDE6IFNldCBhIG1heGltdW0gcmVsYXRpdmUgdG8gdGhlIHBhcmVudFxuICBoZWlnaHQ6IGF1dG87IC8vIFBhcnQgMjogU2NhbGUgdGhlIGhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHdpZHRoLCBvdGhlcndpc2UgeW91IGdldCBzdHJldGNoaW5nXG59XG5cblxuLy8gUmV0aW5hIGltYWdlXG4vL1xuLy8gU2hvcnQgcmV0aW5hIG1peGluIGZvciBzZXR0aW5nIGJhY2tncm91bmQtaW1hZ2UgYW5kIC1zaXplLiBOb3RlIHRoYXQgdGhlXG4vLyBzcGVsbGluZyBvZiBgbWluLS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvYCBpcyBpbnRlbnRpb25hbC5cbkBtaXhpbiBpbWctcmV0aW5hKCRmaWxlLTF4LCAkZmlsZS0yeCwgJHdpZHRoLTF4LCAkaGVpZ2h0LTF4KSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChpZigkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyLCB0d2JzLWltYWdlLXBhdGgoXCIjeyRmaWxlLTF4fVwiKSwgXCIjeyRmaWxlLTF4fVwiKSk7XG5cbiAgQG1lZGlhXG4gIG9ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSxcbiAgb25seSBzY3JlZW4gYW5kICggICBtaW4tLW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLFxuICBvbmx5IHNjcmVlbiBhbmQgKCAgICAgLW8tbWluLWRldmljZS1waXhlbC1yYXRpbzogMi8xKSxcbiAgb25seSBzY3JlZW4gYW5kICggICAgICAgIG1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLFxuICBvbmx5IHNjcmVlbiBhbmQgKCAgICAgICAgICAgICAgICBtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSxcbiAgb25seSBzY3JlZW4gYW5kICggICAgICAgICAgICAgICAgbWluLXJlc29sdXRpb246IDJkcHB4KSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGlmKCRib290c3RyYXAtc2Fzcy1hc3NldC1oZWxwZXIsIHR3YnMtaW1hZ2UtcGF0aChcIiN7JGZpbGUtMnh9XCIpLCBcIiN7JGZpbGUtMnh9XCIpKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6ICR3aWR0aC0xeCAkaGVpZ2h0LTF4O1xuICB9XG59XG4iLCIvL1xuLy8gVHlwb2dyYXBoeVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBIZWFkaW5nc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2LFxuLmgxLCAuaDIsIC5oMywgLmg0LCAuaDUsIC5oNiB7XG4gIGZvbnQtZmFtaWx5OiAkaGVhZGluZ3MtZm9udC1mYW1pbHk7XG4gIGZvbnQtd2VpZ2h0OiAkaGVhZGluZ3MtZm9udC13ZWlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiAkaGVhZGluZ3MtbGluZS1oZWlnaHQ7XG4gIGNvbG9yOiAkaGVhZGluZ3MtY29sb3I7XG5cbiAgc21hbGwsXG4gIC5zbWFsbCB7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBjb2xvcjogJGhlYWRpbmdzLXNtYWxsLWNvbG9yO1xuICB9XG59XG5cbmgxLCAuaDEsXG5oMiwgLmgyLFxuaDMsIC5oMyB7XG4gIG1hcmdpbi10b3A6ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgbWFyZ2luLWJvdHRvbTogKCRsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpO1xuXG4gIHNtYWxsLFxuICAuc21hbGwge1xuICAgIGZvbnQtc2l6ZTogNjUlO1xuICB9XG59XG5oNCwgLmg0LFxuaDUsIC5oNSxcbmg2LCAuaDYge1xuICBtYXJnaW4tdG9wOiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG4gIG1hcmdpbi1ib3R0b206ICgkbGluZS1oZWlnaHQtY29tcHV0ZWQgLyAyKTtcblxuICBzbWFsbCxcbiAgLnNtYWxsIHtcbiAgICBmb250LXNpemU6IDc1JTtcbiAgfVxufVxuXG5oMSwgLmgxIHsgZm9udC1zaXplOiAkZm9udC1zaXplLWgxOyB9XG5oMiwgLmgyIHsgZm9udC1zaXplOiAkZm9udC1zaXplLWgyOyB9XG5oMywgLmgzIHsgZm9udC1zaXplOiAkZm9udC1zaXplLWgzOyB9XG5oNCwgLmg0IHsgZm9udC1zaXplOiAkZm9udC1zaXplLWg0OyB9XG5oNSwgLmg1IHsgZm9udC1zaXplOiAkZm9udC1zaXplLWg1OyB9XG5oNiwgLmg2IHsgZm9udC1zaXplOiAkZm9udC1zaXplLWg2OyB9XG5cblxuLy8gQm9keSB0ZXh0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnAge1xuICBtYXJnaW46IDAgMCAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG59XG5cbi5sZWFkIHtcbiAgbWFyZ2luLWJvdHRvbTogJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBmb250LXNpemU6IGZsb29yKCgkZm9udC1zaXplLWJhc2UgKiAxLjE1KSk7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgZm9udC1zaXplOiAoJGZvbnQtc2l6ZS1iYXNlICogMS41KTtcbiAgfVxufVxuXG5cbi8vIEVtcGhhc2lzICYgbWlzY1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBFeDogKDEycHggc21hbGwgZm9udCAvIDE0cHggYmFzZSBmb250KSAqIDEwMCUgPSBhYm91dCA4NSVcbnNtYWxsLFxuLnNtYWxsIHtcbiAgZm9udC1zaXplOiBmbG9vcigoMTAwJSAqICRmb250LXNpemUtc21hbGwgLyAkZm9udC1zaXplLWJhc2UpKTtcbn1cblxubWFyayxcbi5tYXJrIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHN0YXRlLXdhcm5pbmctYmc7XG4gIHBhZGRpbmc6IC4yZW07XG59XG5cbi8vIEFsaWdubWVudFxuLnRleHQtbGVmdCAgICAgICAgICAgeyB0ZXh0LWFsaWduOiBsZWZ0OyB9XG4udGV4dC1yaWdodCAgICAgICAgICB7IHRleHQtYWxpZ246IHJpZ2h0OyB9XG4udGV4dC1jZW50ZXIgICAgICAgICB7IHRleHQtYWxpZ246IGNlbnRlcjsgfVxuLnRleHQtanVzdGlmeSAgICAgICAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9XG4udGV4dC1ub3dyYXAgICAgICAgICB7IHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cblxuLy8gVHJhbnNmb3JtYXRpb25cbi50ZXh0LWxvd2VyY2FzZSAgICAgIHsgdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZTsgfVxuLnRleHQtdXBwZXJjYXNlICAgICAgeyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9XG4udGV4dC1jYXBpdGFsaXplICAgICB7IHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOyB9XG5cbi8vIENvbnRleHR1YWwgY29sb3JzXG4udGV4dC1tdXRlZCB7XG4gIGNvbG9yOiAkdGV4dC1tdXRlZDtcbn1cblxuQGluY2x1ZGUgdGV4dC1lbXBoYXNpcy12YXJpYW50KCcudGV4dC1wcmltYXJ5JywgJGJyYW5kLXByaW1hcnkpO1xuXG5AaW5jbHVkZSB0ZXh0LWVtcGhhc2lzLXZhcmlhbnQoJy50ZXh0LXN1Y2Nlc3MnLCAkc3RhdGUtc3VjY2Vzcy10ZXh0KTtcblxuQGluY2x1ZGUgdGV4dC1lbXBoYXNpcy12YXJpYW50KCcudGV4dC1pbmZvJywgJHN0YXRlLWluZm8tdGV4dCk7XG5cbkBpbmNsdWRlIHRleHQtZW1waGFzaXMtdmFyaWFudCgnLnRleHQtd2FybmluZycsICRzdGF0ZS13YXJuaW5nLXRleHQpO1xuXG5AaW5jbHVkZSB0ZXh0LWVtcGhhc2lzLXZhcmlhbnQoJy50ZXh0LWRhbmdlcicsICRzdGF0ZS1kYW5nZXItdGV4dCk7XG5cbi8vIENvbnRleHR1YWwgYmFja2dyb3VuZHNcbi8vIEZvciBub3cgd2UnbGwgbGVhdmUgdGhlc2UgYWxvbmdzaWRlIHRoZSB0ZXh0IGNsYXNzZXMgdW50aWwgdjQgd2hlbiB3ZSBjYW5cbi8vIHNhZmVseSBzaGlmdCB0aGluZ3MgYXJvdW5kIChwZXIgU2VtVmVyIHJ1bGVzKS5cbi5iZy1wcmltYXJ5IHtcbiAgLy8gR2l2ZW4gdGhlIGNvbnRyYXN0IGhlcmUsIHRoaXMgaXMgdGhlIG9ubHkgY2xhc3MgdG8gaGF2ZSBpdHMgY29sb3IgaW52ZXJ0ZWRcbiAgLy8gYXV0b21hdGljYWxseS5cbiAgY29sb3I6ICNmZmY7XG59XG5AaW5jbHVkZSBiZy12YXJpYW50KCcuYmctcHJpbWFyeScsICRicmFuZC1wcmltYXJ5KTtcblxuQGluY2x1ZGUgYmctdmFyaWFudCgnLmJnLXN1Y2Nlc3MnLCAkc3RhdGUtc3VjY2Vzcy1iZyk7XG5cbkBpbmNsdWRlIGJnLXZhcmlhbnQoJy5iZy1pbmZvJywgJHN0YXRlLWluZm8tYmcpO1xuXG5AaW5jbHVkZSBiZy12YXJpYW50KCcuYmctd2FybmluZycsICRzdGF0ZS13YXJuaW5nLWJnKTtcblxuQGluY2x1ZGUgYmctdmFyaWFudCgnLmJnLWRhbmdlcicsICRzdGF0ZS1kYW5nZXItYmcpO1xuXG5cbi8vIFBhZ2UgaGVhZGVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5wYWdlLWhlYWRlciB7XG4gIHBhZGRpbmctYm90dG9tOiAoKCRsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpIC0gMSk7XG4gIG1hcmdpbjogKCRsaW5lLWhlaWdodC1jb21wdXRlZCAqIDIpIDAgJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHBhZ2UtaGVhZGVyLWJvcmRlci1jb2xvcjtcbn1cblxuXG4vLyBMaXN0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBVbm9yZGVyZWQgYW5kIE9yZGVyZWQgbGlzdHNcbnVsLFxub2wge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG4gIHVsLFxuICBvbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4vLyBMaXN0IG9wdGlvbnNcblxuLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIGZyb20gYC5saXN0LXVuc3R5bGVkYCBmb3IgbGlic2FzcyBjb21wYXRpYmlsaXR5XG5AbWl4aW4gbGlzdC11bnN0eWxlZCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbi8vIFtjb252ZXJ0ZXJdIGV4dHJhY3RlZCBhcyBgQG1peGluIGxpc3QtdW5zdHlsZWRgIGZvciBsaWJzYXNzIGNvbXBhdGliaWxpdHlcbi5saXN0LXVuc3R5bGVkIHtcbiAgQGluY2x1ZGUgbGlzdC11bnN0eWxlZDtcbn1cblxuXG4vLyBJbmxpbmUgdHVybnMgbGlzdCBpdGVtcyBpbnRvIGlubGluZS1ibG9ja1xuLmxpc3QtaW5saW5lIHtcbiAgQGluY2x1ZGUgbGlzdC11bnN0eWxlZDtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7XG5cbiAgPiBsaSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmctbGVmdDogNXB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDVweDtcbiAgfVxufVxuXG4vLyBEZXNjcmlwdGlvbiBMaXN0c1xuZGwge1xuICBtYXJnaW4tdG9wOiAwOyAvLyBSZW1vdmUgYnJvd3NlciBkZWZhdWx0XG4gIG1hcmdpbi1ib3R0b206ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbn1cbmR0LFxuZGQge1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG59XG5kdCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuZGQge1xuICBtYXJnaW4tbGVmdDogMDsgLy8gVW5kbyBicm93c2VyIGRlZmF1bHRcbn1cblxuLy8gSG9yaXpvbnRhbCBkZXNjcmlwdGlvbiBsaXN0c1xuLy9cbi8vIERlZmF1bHRzIHRvIGJlaW5nIHN0YWNrZWQgd2l0aG91dCBhbnkgb2YgdGhlIGJlbG93IHN0eWxlcyBhcHBsaWVkLCB1bnRpbCB0aGVcbi8vIGdyaWQgYnJlYWtwb2ludCBpcyByZWFjaGVkIChkZWZhdWx0IG9mIH43NjhweCkuXG5cbi5kbC1ob3Jpem9udGFsIHtcbiAgZGQge1xuICAgIEBpbmNsdWRlIGNsZWFyZml4OyAvLyBDbGVhciB0aGUgZmxvYXRlZCBgZHRgIGlmIGFuIGVtcHR5IGBkZGAgaXMgcHJlc2VudFxuICB9XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBkdCB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgIHdpZHRoOiAoJGRsLWhvcml6b250YWwtb2Zmc2V0IC0gMjApO1xuICAgICAgY2xlYXI6IGxlZnQ7XG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgIEBpbmNsdWRlIHRleHQtb3ZlcmZsb3c7XG4gICAgfVxuICAgIGRkIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZGwtaG9yaXpvbnRhbC1vZmZzZXQ7XG4gICAgfVxuICB9XG59XG5cblxuLy8gTWlzY1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBBYmJyZXZpYXRpb25zIGFuZCBhY3Jvbnltc1xuYWJiclt0aXRsZV0sXG4vLyBBZGQgZGF0YS0qIGF0dHJpYnV0ZSB0byBoZWxwIG91dCBvdXIgdG9vbHRpcCBwbHVnaW4sIHBlciBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzUyNTdcbmFiYnJbZGF0YS1vcmlnaW5hbC10aXRsZV0ge1xuICBjdXJzb3I6IGhlbHA7XG4gIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgJGFiYnItYm9yZGVyLWNvbG9yO1xufVxuLmluaXRpYWxpc20ge1xuICBmb250LXNpemU6IDkwJTtcbiAgQGV4dGVuZCAudGV4dC11cHBlcmNhc2U7XG59XG5cbi8vIEJsb2NrcXVvdGVzXG5ibG9ja3F1b3RlIHtcbiAgcGFkZGluZzogKCRsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgbWFyZ2luOiAwIDAgJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBmb250LXNpemU6ICRibG9ja3F1b3RlLWZvbnQtc2l6ZTtcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAkYmxvY2txdW90ZS1ib3JkZXItY29sb3I7XG5cbiAgcCxcbiAgdWwsXG4gIG9sIHtcbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICAvLyBOb3RlOiBEZXByZWNhdGVkIHNtYWxsIGFuZCAuc21hbGwgYXMgb2YgdjMuMS4wXG4gIC8vIENvbnRleHQ6IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTE2NjBcbiAgZm9vdGVyLFxuICBzbWFsbCxcbiAgLnNtYWxsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LXNpemU6IDgwJTsgLy8gYmFjayB0byBkZWZhdWx0IGZvbnQtc2l6ZVxuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgICBjb2xvcjogJGJsb2NrcXVvdGUtc21hbGwtY29sb3I7XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAnXFwyMDE0IFxcMDBBMCc7IC8vIGVtIGRhc2gsIG5ic3BcbiAgICB9XG4gIH1cbn1cblxuLy8gT3Bwb3NpdGUgYWxpZ25tZW50IG9mIGJsb2NrcXVvdGVcbi8vXG4vLyBIZWFkcyB1cDogYGJsb2NrcXVvdGUucHVsbC1yaWdodGAgaGFzIGJlZW4gZGVwcmVjYXRlZCBhcyBvZiB2My4xLjAuXG4uYmxvY2txdW90ZS1yZXZlcnNlLFxuYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHtcbiAgcGFkZGluZy1yaWdodDogMTVweDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCAkYmxvY2txdW90ZS1ib3JkZXItY29sb3I7XG4gIGJvcmRlci1sZWZ0OiAwO1xuICB0ZXh0LWFsaWduOiByaWdodDtcblxuICAvLyBBY2NvdW50IGZvciBjaXRhdGlvblxuICBmb290ZXIsXG4gIHNtYWxsLFxuICAuc21hbGwge1xuICAgICY6YmVmb3JlIHsgY29udGVudDogJyc7IH1cbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICdcXDAwQTAgXFwyMDE0JzsgLy8gbmJzcCwgZW0gZGFzaFxuICAgIH1cbiAgfVxufVxuXG4vLyBBZGRyZXNzZXNcbmFkZHJlc3Mge1xuICBtYXJnaW4tYm90dG9tOiAkbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xufVxuIiwiLy8gVHlwb2dyYXBoeVxuXG4vLyBbY29udmVydGVyXSAkcGFyZW50IGhhY2tcbkBtaXhpbiB0ZXh0LWVtcGhhc2lzLXZhcmlhbnQoJHBhcmVudCwgJGNvbG9yKSB7XG4gICN7JHBhcmVudH0ge1xuICAgIGNvbG9yOiAkY29sb3I7XG4gIH1cbiAgYSN7JHBhcmVudH06aG92ZXIsXG4gIGEjeyRwYXJlbnR9OmZvY3VzIHtcbiAgICBjb2xvcjogZGFya2VuKCRjb2xvciwgMTAlKTtcbiAgfVxufVxuIiwiLy8gQ29udGV4dHVhbCBiYWNrZ3JvdW5kc1xuXG4vLyBbY29udmVydGVyXSAkcGFyZW50IGhhY2tcbkBtaXhpbiBiZy12YXJpYW50KCRwYXJlbnQsICRjb2xvcikge1xuICAjeyRwYXJlbnR9IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG4gIH1cbiAgYSN7JHBhcmVudH06aG92ZXIsXG4gIGEjeyRwYXJlbnR9OmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAxMCUpO1xuICB9XG59XG4iLCIvLyBDbGVhcmZpeFxuLy9cbi8vIEZvciBtb2Rlcm4gYnJvd3NlcnNcbi8vIDEuIFRoZSBzcGFjZSBjb250ZW50IGlzIG9uZSB3YXkgdG8gYXZvaWQgYW4gT3BlcmEgYnVnIHdoZW4gdGhlXG4vLyAgICBjb250ZW50ZWRpdGFibGUgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGRvY3VtZW50LlxuLy8gICAgT3RoZXJ3aXNlIGl0IGNhdXNlcyBzcGFjZSB0byBhcHBlYXIgYXQgdGhlIHRvcCBhbmQgYm90dG9tIG9mIGVsZW1lbnRzXG4vLyAgICB0aGF0IGFyZSBjbGVhcmZpeGVkLlxuLy8gMi4gVGhlIHVzZSBvZiBgdGFibGVgIHJhdGhlciB0aGFuIGBibG9ja2AgaXMgb25seSBuZWNlc3NhcnkgaWYgdXNpbmdcbi8vICAgIGA6YmVmb3JlYCB0byBjb250YWluIHRoZSB0b3AtbWFyZ2lucyBvZiBjaGlsZCBlbGVtZW50cy5cbi8vXG4vLyBTb3VyY2U6IGh0dHA6Ly9uaWNvbGFzZ2FsbGFnaGVyLmNvbS9taWNyby1jbGVhcmZpeC1oYWNrL1xuXG5AbWl4aW4gY2xlYXJmaXgoKSB7XG4gICY6YmVmb3JlLFxuICAmOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIiBcIjsgLy8gMVxuICAgIGRpc3BsYXk6IHRhYmxlOyAvLyAyXG4gIH1cbiAgJjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7XG4gIH1cbn1cbiIsIi8vIFRleHQgb3ZlcmZsb3dcbi8vIFJlcXVpcmVzIGlubGluZS1ibG9jayBvciBibG9jayBmb3IgcHJvcGVyIHN0eWxpbmdcblxuQG1peGluIHRleHQtb3ZlcmZsb3coKSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuIiwiLy9cbi8vIENvZGUgKGlubGluZSBhbmQgYmxvY2spXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIElubGluZSBhbmQgYmxvY2sgY29kZSBzdHlsZXNcbmNvZGUsXG5rYmQsXG5wcmUsXG5zYW1wIHtcbiAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vc3BhY2U7XG59XG5cbi8vIElubGluZSBjb2RlXG5jb2RlIHtcbiAgcGFkZGluZzogMnB4IDRweDtcbiAgZm9udC1zaXplOiA5MCU7XG4gIGNvbG9yOiAkY29kZS1jb2xvcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGNvZGUtYmc7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWJhc2U7XG59XG5cbi8vIFVzZXIgaW5wdXQgdHlwaWNhbGx5IGVudGVyZWQgdmlhIGtleWJvYXJkXG5rYmQge1xuICBwYWRkaW5nOiAycHggNHB4O1xuICBmb250LXNpemU6IDkwJTtcbiAgY29sb3I6ICRrYmQtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6ICRrYmQtYmc7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLXNtYWxsO1xuICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLC4yNSk7XG5cbiAga2JkIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQtc2l6ZTogMTAwJTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG59XG5cbi8vIEJsb2NrcyBvZiBjb2RlXG5wcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogKCgkbGluZS1oZWlnaHQtY29tcHV0ZWQgLSAxKSAvIDIpO1xuICBtYXJnaW46IDAgMCAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG4gIGZvbnQtc2l6ZTogKCRmb250LXNpemUtYmFzZSAtIDEpOyAvLyAxNHB4IHRvIDEzcHhcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgY29sb3I6ICRwcmUtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6ICRwcmUtYmc7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRwcmUtYm9yZGVyLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuXG4gIC8vIEFjY291bnQgZm9yIHNvbWUgY29kZSBvdXRwdXRzIHRoYXQgcGxhY2UgY29kZSB0YWdzIGluIHByZSB0YWdzXG4gIGNvZGUge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG59XG5cbi8vIEVuYWJsZSBzY3JvbGxhYmxlIGJsb2NrcyBvZiBjb2RlXG4ucHJlLXNjcm9sbGFibGUge1xuICBtYXgtaGVpZ2h0OiAkcHJlLXNjcm9sbGFibGUtbWF4LWhlaWdodDtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xufVxuIiwiLy9cbi8vIEdyaWQgc3lzdGVtXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIENvbnRhaW5lciB3aWR0aHNcbi8vXG4vLyBTZXQgdGhlIGNvbnRhaW5lciB3aWR0aCwgYW5kIG92ZXJyaWRlIGl0IGZvciBmaXhlZCBuYXZiYXJzIGluIG1lZGlhIHF1ZXJpZXMuXG5cbi5jb250YWluZXIge1xuICBAaW5jbHVkZSBjb250YWluZXItZml4ZWQ7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgd2lkdGg6ICRjb250YWluZXItc207XG4gIH1cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSB7XG4gICAgd2lkdGg6ICRjb250YWluZXItbWQ7XG4gIH1cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGctbWluKSB7XG4gICAgd2lkdGg6ICRjb250YWluZXItbGc7XG4gIH1cbn1cblxuXG4vLyBGbHVpZCBjb250YWluZXJcbi8vXG4vLyBVdGlsaXplcyB0aGUgbWl4aW4gbWVhbnQgZm9yIGZpeGVkIHdpZHRoIGNvbnRhaW5lcnMsIGJ1dCB3aXRob3V0IGFueSBkZWZpbmVkXG4vLyB3aWR0aCBmb3IgZmx1aWQsIGZ1bGwgd2lkdGggbGF5b3V0cy5cblxuLmNvbnRhaW5lci1mbHVpZCB7XG4gIEBpbmNsdWRlIGNvbnRhaW5lci1maXhlZDtcbn1cblxuXG4vLyBSb3dcbi8vXG4vLyBSb3dzIGNvbnRhaW4gYW5kIGNsZWFyIHRoZSBmbG9hdHMgb2YgeW91ciBjb2x1bW5zLlxuXG4ucm93IHtcbiAgQGluY2x1ZGUgbWFrZS1yb3c7XG59XG5cblxuLy8gQ29sdW1uc1xuLy9cbi8vIENvbW1vbiBzdHlsZXMgZm9yIHNtYWxsIGFuZCBsYXJnZSBncmlkIGNvbHVtbnNcblxuQGluY2x1ZGUgbWFrZS1ncmlkLWNvbHVtbnM7XG5cblxuLy8gRXh0cmEgc21hbGwgZ3JpZFxuLy9cbi8vIENvbHVtbnMsIG9mZnNldHMsIHB1c2hlcywgYW5kIHB1bGxzIGZvciBleHRyYSBzbWFsbCBkZXZpY2VzIGxpa2Vcbi8vIHNtYXJ0cGhvbmVzLlxuXG5AaW5jbHVkZSBtYWtlLWdyaWQoeHMpO1xuXG5cbi8vIFNtYWxsIGdyaWRcbi8vXG4vLyBDb2x1bW5zLCBvZmZzZXRzLCBwdXNoZXMsIGFuZCBwdWxscyBmb3IgdGhlIHNtYWxsIGRldmljZSByYW5nZSwgZnJvbSBwaG9uZXNcbi8vIHRvIHRhYmxldHMuXG5cbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICBAaW5jbHVkZSBtYWtlLWdyaWQoc20pO1xufVxuXG5cbi8vIE1lZGl1bSBncmlkXG4vL1xuLy8gQ29sdW1ucywgb2Zmc2V0cywgcHVzaGVzLCBhbmQgcHVsbHMgZm9yIHRoZSBkZXNrdG9wIGRldmljZSByYW5nZS5cblxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSB7XG4gIEBpbmNsdWRlIG1ha2UtZ3JpZChtZCk7XG59XG5cblxuLy8gTGFyZ2UgZ3JpZFxuLy9cbi8vIENvbHVtbnMsIG9mZnNldHMsIHB1c2hlcywgYW5kIHB1bGxzIGZvciB0aGUgbGFyZ2UgZGVza3RvcCBkZXZpY2UgcmFuZ2UuXG5cbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICBAaW5jbHVkZSBtYWtlLWdyaWQobGcpO1xufVxuIiwiLy8gR3JpZCBzeXN0ZW1cbi8vXG4vLyBHZW5lcmF0ZSBzZW1hbnRpYyBncmlkIGNvbHVtbnMgd2l0aCB0aGVzZSBtaXhpbnMuXG5cbi8vIENlbnRlcmVkIGNvbnRhaW5lciBlbGVtZW50XG5AbWl4aW4gY29udGFpbmVyLWZpeGVkKCRndXR0ZXI6ICRncmlkLWd1dHRlci13aWR0aCkge1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBwYWRkaW5nLWxlZnQ6ICAoJGd1dHRlciAvIDIpO1xuICBwYWRkaW5nLXJpZ2h0OiAoJGd1dHRlciAvIDIpO1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbn1cblxuLy8gQ3JlYXRlcyBhIHdyYXBwZXIgZm9yIGEgc2VyaWVzIG9mIGNvbHVtbnNcbkBtaXhpbiBtYWtlLXJvdygkZ3V0dGVyOiAkZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgbWFyZ2luLWxlZnQ6ICBjZWlsKCgkZ3V0dGVyIC8gLTIpKTtcbiAgbWFyZ2luLXJpZ2h0OiBmbG9vcigoJGd1dHRlciAvIC0yKSk7XG4gIEBpbmNsdWRlIGNsZWFyZml4O1xufVxuXG4vLyBHZW5lcmF0ZSB0aGUgZXh0cmEgc21hbGwgY29sdW1uc1xuQG1peGluIG1ha2UteHMtY29sdW1uKCRjb2x1bW5zLCAkZ3V0dGVyOiAkZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xuICBtaW4taGVpZ2h0OiAxcHg7XG4gIHBhZGRpbmctbGVmdDogICgkZ3V0dGVyIC8gMik7XG4gIHBhZGRpbmctcmlnaHQ6ICgkZ3V0dGVyIC8gMik7XG59XG5AbWl4aW4gbWFrZS14cy1jb2x1bW4tb2Zmc2V0KCRjb2x1bW5zKSB7XG4gIG1hcmdpbi1sZWZ0OiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbn1cbkBtaXhpbiBtYWtlLXhzLWNvbHVtbi1wdXNoKCRjb2x1bW5zKSB7XG4gIGxlZnQ6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xufVxuQG1peGluIG1ha2UteHMtY29sdW1uLXB1bGwoJGNvbHVtbnMpIHtcbiAgcmlnaHQ6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xufVxuXG4vLyBHZW5lcmF0ZSB0aGUgc21hbGwgY29sdW1uc1xuQG1peGluIG1ha2Utc20tY29sdW1uKCRjb2x1bW5zLCAkZ3V0dGVyOiAkZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAxcHg7XG4gIHBhZGRpbmctbGVmdDogICgkZ3V0dGVyIC8gMik7XG4gIHBhZGRpbmctcmlnaHQ6ICgkZ3V0dGVyIC8gMik7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xuICB9XG59XG5AbWl4aW4gbWFrZS1zbS1jb2x1bW4tb2Zmc2V0KCRjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgIG1hcmdpbi1sZWZ0OiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuQG1peGluIG1ha2Utc20tY29sdW1uLXB1c2goJGNvbHVtbnMpIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgbGVmdDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbkBtaXhpbiBtYWtlLXNtLWNvbHVtbi1wdWxsKCRjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgIHJpZ2h0OiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuXG4vLyBHZW5lcmF0ZSB0aGUgbWVkaXVtIGNvbHVtbnNcbkBtaXhpbiBtYWtlLW1kLWNvbHVtbigkY29sdW1ucywgJGd1dHRlcjogJGdyaWQtZ3V0dGVyLXdpZHRoKSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLWhlaWdodDogMXB4O1xuICBwYWRkaW5nLWxlZnQ6ICAoJGd1dHRlciAvIDIpO1xuICBwYWRkaW5nLXJpZ2h0OiAoJGd1dHRlciAvIDIpO1xuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHdpZHRoOiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuQG1peGluIG1ha2UtbWQtY29sdW1uLW9mZnNldCgkY29sdW1ucykge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1tZC1taW4pIHtcbiAgICBtYXJnaW4tbGVmdDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbkBtaXhpbiBtYWtlLW1kLWNvbHVtbi1wdXNoKCRjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICAgIGxlZnQ6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xuICB9XG59XG5AbWl4aW4gbWFrZS1tZC1jb2x1bW4tcHVsbCgkY29sdW1ucykge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1tZC1taW4pIHtcbiAgICByaWdodDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cblxuLy8gR2VuZXJhdGUgdGhlIGxhcmdlIGNvbHVtbnNcbkBtaXhpbiBtYWtlLWxnLWNvbHVtbigkY29sdW1ucywgJGd1dHRlcjogJGdyaWQtZ3V0dGVyLXdpZHRoKSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLWhlaWdodDogMXB4O1xuICBwYWRkaW5nLWxlZnQ6ICAoJGd1dHRlciAvIDIpO1xuICBwYWRkaW5nLXJpZ2h0OiAoJGd1dHRlciAvIDIpO1xuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHdpZHRoOiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuQG1peGluIG1ha2UtbGctY29sdW1uLW9mZnNldCgkY29sdW1ucykge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1sZy1taW4pIHtcbiAgICBtYXJnaW4tbGVmdDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbkBtaXhpbiBtYWtlLWxnLWNvbHVtbi1wdXNoKCRjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICAgIGxlZnQ6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xuICB9XG59XG5AbWl4aW4gbWFrZS1sZy1jb2x1bW4tcHVsbCgkY29sdW1ucykge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1sZy1taW4pIHtcbiAgICByaWdodDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbiIsIi8vIEZyYW1ld29yayBncmlkIGdlbmVyYXRpb25cbi8vXG4vLyBVc2VkIG9ubHkgYnkgQm9vdHN0cmFwIHRvIGdlbmVyYXRlIHRoZSBjb3JyZWN0IG51bWJlciBvZiBncmlkIGNsYXNzZXMgZ2l2ZW5cbi8vIGFueSB2YWx1ZSBvZiBgJGdyaWQtY29sdW1uc2AuXG5cbi8vIFtjb252ZXJ0ZXJdIFRoaXMgaXMgZGVmaW5lZCByZWN1cnNpdmVseSBpbiBMRVNTLCBidXQgU2FzcyBzdXBwb3J0cyByZWFsIGxvb3BzXG5AbWl4aW4gbWFrZS1ncmlkLWNvbHVtbnMoJGk6IDEsICRsaXN0OiBcIi5jb2wteHMtI3skaX0sIC5jb2wtc20tI3skaX0sIC5jb2wtbWQtI3skaX0sIC5jb2wtbGctI3skaX1cIikge1xuICBAZm9yICRpIGZyb20gKDEgKyAxKSB0aHJvdWdoICRncmlkLWNvbHVtbnMge1xuICAgICRsaXN0OiBcIiN7JGxpc3R9LCAuY29sLXhzLSN7JGl9LCAuY29sLXNtLSN7JGl9LCAuY29sLW1kLSN7JGl9LCAuY29sLWxnLSN7JGl9XCI7XG4gIH1cbiAgI3skbGlzdH0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAvLyBQcmV2ZW50IGNvbHVtbnMgZnJvbSBjb2xsYXBzaW5nIHdoZW4gZW1wdHlcbiAgICBtaW4taGVpZ2h0OiAxcHg7XG4gICAgLy8gSW5uZXIgZ3V0dGVyIHZpYSBwYWRkaW5nXG4gICAgcGFkZGluZy1sZWZ0OiAgY2VpbCgoJGdyaWQtZ3V0dGVyLXdpZHRoIC8gMikpO1xuICAgIHBhZGRpbmctcmlnaHQ6IGZsb29yKCgkZ3JpZC1ndXR0ZXItd2lkdGggLyAyKSk7XG4gIH1cbn1cblxuXG4vLyBbY29udmVydGVyXSBUaGlzIGlzIGRlZmluZWQgcmVjdXJzaXZlbHkgaW4gTEVTUywgYnV0IFNhc3Mgc3VwcG9ydHMgcmVhbCBsb29wc1xuQG1peGluIGZsb2F0LWdyaWQtY29sdW1ucygkY2xhc3MsICRpOiAxLCAkbGlzdDogXCIuY29sLSN7JGNsYXNzfS0jeyRpfVwiKSB7XG4gIEBmb3IgJGkgZnJvbSAoMSArIDEpIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgJGxpc3Q6IFwiI3skbGlzdH0sIC5jb2wtI3skY2xhc3N9LSN7JGl9XCI7XG4gIH1cbiAgI3skbGlzdH0ge1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG59XG5cblxuQG1peGluIGNhbGMtZ3JpZC1jb2x1bW4oJGluZGV4LCAkY2xhc3MsICR0eXBlKSB7XG4gIEBpZiAoJHR5cGUgPT0gd2lkdGgpIGFuZCAoJGluZGV4ID4gMCkge1xuICAgIC5jb2wtI3skY2xhc3N9LSN7JGluZGV4fSB7XG4gICAgICB3aWR0aDogcGVyY2VudGFnZSgoJGluZGV4IC8gJGdyaWQtY29sdW1ucykpO1xuICAgIH1cbiAgfVxuICBAaWYgKCR0eXBlID09IHB1c2gpIGFuZCAoJGluZGV4ID4gMCkge1xuICAgIC5jb2wtI3skY2xhc3N9LXB1c2gtI3skaW5kZXh9IHtcbiAgICAgIGxlZnQ6IHBlcmNlbnRhZ2UoKCRpbmRleCAvICRncmlkLWNvbHVtbnMpKTtcbiAgICB9XG4gIH1cbiAgQGlmICgkdHlwZSA9PSBwdXNoKSBhbmQgKCRpbmRleCA9PSAwKSB7XG4gICAgLmNvbC0jeyRjbGFzc30tcHVzaC0wIHtcbiAgICAgIGxlZnQ6IGF1dG87XG4gICAgfVxuICB9XG4gIEBpZiAoJHR5cGUgPT0gcHVsbCkgYW5kICgkaW5kZXggPiAwKSB7XG4gICAgLmNvbC0jeyRjbGFzc30tcHVsbC0jeyRpbmRleH0ge1xuICAgICAgcmlnaHQ6IHBlcmNlbnRhZ2UoKCRpbmRleCAvICRncmlkLWNvbHVtbnMpKTtcbiAgICB9XG4gIH1cbiAgQGlmICgkdHlwZSA9PSBwdWxsKSBhbmQgKCRpbmRleCA9PSAwKSB7XG4gICAgLmNvbC0jeyRjbGFzc30tcHVsbC0wIHtcbiAgICAgIHJpZ2h0OiBhdXRvO1xuICAgIH1cbiAgfVxuICBAaWYgKCR0eXBlID09IG9mZnNldCkge1xuICAgIC5jb2wtI3skY2xhc3N9LW9mZnNldC0jeyRpbmRleH0ge1xuICAgICAgbWFyZ2luLWxlZnQ6IHBlcmNlbnRhZ2UoKCRpbmRleCAvICRncmlkLWNvbHVtbnMpKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gW2NvbnZlcnRlcl0gVGhpcyBpcyBkZWZpbmVkIHJlY3Vyc2l2ZWx5IGluIExFU1MsIGJ1dCBTYXNzIHN1cHBvcnRzIHJlYWwgbG9vcHNcbkBtaXhpbiBsb29wLWdyaWQtY29sdW1ucygkY29sdW1ucywgJGNsYXNzLCAkdHlwZSkge1xuICBAZm9yICRpIGZyb20gMCB0aHJvdWdoICRjb2x1bW5zIHtcbiAgICBAaW5jbHVkZSBjYWxjLWdyaWQtY29sdW1uKCRpLCAkY2xhc3MsICR0eXBlKTtcbiAgfVxufVxuXG5cbi8vIENyZWF0ZSBncmlkIGZvciBzcGVjaWZpYyBjbGFzc1xuQG1peGluIG1ha2UtZ3JpZCgkY2xhc3MpIHtcbiAgQGluY2x1ZGUgZmxvYXQtZ3JpZC1jb2x1bW5zKCRjbGFzcyk7XG4gIEBpbmNsdWRlIGxvb3AtZ3JpZC1jb2x1bW5zKCRncmlkLWNvbHVtbnMsICRjbGFzcywgd2lkdGgpO1xuICBAaW5jbHVkZSBsb29wLWdyaWQtY29sdW1ucygkZ3JpZC1jb2x1bW5zLCAkY2xhc3MsIHB1bGwpO1xuICBAaW5jbHVkZSBsb29wLWdyaWQtY29sdW1ucygkZ3JpZC1jb2x1bW5zLCAkY2xhc3MsIHB1c2gpO1xuICBAaW5jbHVkZSBsb29wLWdyaWQtY29sdW1ucygkZ3JpZC1jb2x1bW5zLCAkY2xhc3MsIG9mZnNldCk7XG59XG4iLCIvL1xuLy8gVGFibGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbnRhYmxlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHRhYmxlLWJnO1xufVxuY2FwdGlvbiB7XG4gIHBhZGRpbmctdG9wOiAkdGFibGUtY2VsbC1wYWRkaW5nO1xuICBwYWRkaW5nLWJvdHRvbTogJHRhYmxlLWNlbGwtcGFkZGluZztcbiAgY29sb3I6ICR0ZXh0LW11dGVkO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxudGgge1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG5cbi8vIEJhc2VsaW5lIHN0eWxlc1xuXG4udGFibGUge1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiAkbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIC8vIENlbGxzXG4gID4gdGhlYWQsXG4gID4gdGJvZHksXG4gID4gdGZvb3Qge1xuICAgID4gdHIge1xuICAgICAgPiB0aCxcbiAgICAgID4gdGQge1xuICAgICAgICBwYWRkaW5nOiAkdGFibGUtY2VsbC1wYWRkaW5nO1xuICAgICAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAkdGFibGUtYm9yZGVyLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBCb3R0b20gYWxpZ24gZm9yIGNvbHVtbiBoZWFkaW5nc1xuICA+IHRoZWFkID4gdHIgPiB0aCB7XG4gICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgJHRhYmxlLWJvcmRlci1jb2xvcjtcbiAgfVxuICAvLyBSZW1vdmUgdG9wIGJvcmRlciBmcm9tIHRoZWFkIGJ5IGRlZmF1bHRcbiAgPiBjYXB0aW9uICsgdGhlYWQsXG4gID4gY29sZ3JvdXAgKyB0aGVhZCxcbiAgPiB0aGVhZDpmaXJzdC1jaGlsZCB7XG4gICAgPiB0cjpmaXJzdC1jaGlsZCB7XG4gICAgICA+IHRoLFxuICAgICAgPiB0ZCB7XG4gICAgICAgIGJvcmRlci10b3A6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEFjY291bnQgZm9yIG11bHRpcGxlIHRib2R5IGluc3RhbmNlc1xuICA+IHRib2R5ICsgdGJvZHkge1xuICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCAkdGFibGUtYm9yZGVyLWNvbG9yO1xuICB9XG5cbiAgLy8gTmVzdGluZ1xuICAudGFibGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRib2R5LWJnO1xuICB9XG59XG5cblxuLy8gQ29uZGVuc2VkIHRhYmxlIHcvIGhhbGYgcGFkZGluZ1xuXG4udGFibGUtY29uZGVuc2VkIHtcbiAgPiB0aGVhZCxcbiAgPiB0Ym9keSxcbiAgPiB0Zm9vdCB7XG4gICAgPiB0ciB7XG4gICAgICA+IHRoLFxuICAgICAgPiB0ZCB7XG4gICAgICAgIHBhZGRpbmc6ICR0YWJsZS1jb25kZW5zZWQtY2VsbC1wYWRkaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi8vIEJvcmRlcmVkIHZlcnNpb25cbi8vXG4vLyBBZGQgYm9yZGVycyBhbGwgYXJvdW5kIHRoZSB0YWJsZSBhbmQgYmV0d2VlbiBhbGwgdGhlIGNvbHVtbnMuXG5cbi50YWJsZS1ib3JkZXJlZCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICR0YWJsZS1ib3JkZXItY29sb3I7XG4gID4gdGhlYWQsXG4gID4gdGJvZHksXG4gID4gdGZvb3Qge1xuICAgID4gdHIge1xuICAgICAgPiB0aCxcbiAgICAgID4gdGQge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkdGFibGUtYm9yZGVyLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICA+IHRoZWFkID4gdHIge1xuICAgID4gdGgsXG4gICAgPiB0ZCB7XG4gICAgICBib3JkZXItYm90dG9tLXdpZHRoOiAycHg7XG4gICAgfVxuICB9XG59XG5cblxuLy8gWmVicmEtc3RyaXBpbmdcbi8vXG4vLyBEZWZhdWx0IHplYnJhLXN0cmlwZSBzdHlsZXMgKGFsdGVybmF0aW5nIGdyYXkgYW5kIHRyYW5zcGFyZW50IGJhY2tncm91bmRzKVxuXG4udGFibGUtc3RyaXBlZCB7XG4gID4gdGJvZHkgPiB0cjpudGgtb2YtdHlwZShvZGQpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtYmctYWNjZW50O1xuICB9XG59XG5cblxuLy8gSG92ZXIgZWZmZWN0XG4vL1xuLy8gUGxhY2VkIGhlcmUgc2luY2UgaXQgaGFzIHRvIGNvbWUgYWZ0ZXIgdGhlIHBvdGVudGlhbCB6ZWJyYSBzdHJpcGluZ1xuXG4udGFibGUtaG92ZXIge1xuICA+IHRib2R5ID4gdHI6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1iZy1ob3ZlcjtcbiAgfVxufVxuXG5cbi8vIFRhYmxlIGNlbGwgc2l6aW5nXG4vL1xuLy8gUmVzZXQgZGVmYXVsdCB0YWJsZSBiZWhhdmlvclxuXG50YWJsZSBjb2xbY2xhc3MqPVwiY29sLVwiXSB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7IC8vIFByZXZlbnQgYm9yZGVyIGhpZGluZyBpbiBGaXJlZm94IGFuZCBJRTktMTEgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExNjIzKVxuICBmbG9hdDogbm9uZTtcbiAgZGlzcGxheTogdGFibGUtY29sdW1uO1xufVxudGFibGUge1xuICB0ZCxcbiAgdGgge1xuICAgICZbY2xhc3MqPVwiY29sLVwiXSB7XG4gICAgICBwb3NpdGlvbjogc3RhdGljOyAvLyBQcmV2ZW50IGJvcmRlciBoaWRpbmcgaW4gRmlyZWZveCBhbmQgSUU5LTExIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMTYyMylcbiAgICAgIGZsb2F0OiBub25lO1xuICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBUYWJsZSBiYWNrZ3JvdW5kc1xuLy9cbi8vIEV4YWN0IHNlbGVjdG9ycyBiZWxvdyByZXF1aXJlZCB0byBvdmVycmlkZSBgLnRhYmxlLXN0cmlwZWRgIGFuZCBwcmV2ZW50XG4vLyBpbmhlcml0YW5jZSB0byBuZXN0ZWQgdGFibGVzLlxuXG4vLyBHZW5lcmF0ZSB0aGUgY29udGV4dHVhbCB2YXJpYW50c1xuQGluY2x1ZGUgdGFibGUtcm93LXZhcmlhbnQoJ2FjdGl2ZScsICR0YWJsZS1iZy1hY3RpdmUpO1xuQGluY2x1ZGUgdGFibGUtcm93LXZhcmlhbnQoJ3N1Y2Nlc3MnLCAkc3RhdGUtc3VjY2Vzcy1iZyk7XG5AaW5jbHVkZSB0YWJsZS1yb3ctdmFyaWFudCgnaW5mbycsICRzdGF0ZS1pbmZvLWJnKTtcbkBpbmNsdWRlIHRhYmxlLXJvdy12YXJpYW50KCd3YXJuaW5nJywgJHN0YXRlLXdhcm5pbmctYmcpO1xuQGluY2x1ZGUgdGFibGUtcm93LXZhcmlhbnQoJ2RhbmdlcicsICRzdGF0ZS1kYW5nZXItYmcpO1xuXG5cbi8vIFJlc3BvbnNpdmUgdGFibGVzXG4vL1xuLy8gV3JhcCB5b3VyIHRhYmxlcyBpbiBgLnRhYmxlLXJlc3BvbnNpdmVgIGFuZCB3ZSdsbCBtYWtlIHRoZW0gbW9iaWxlIGZyaWVuZGx5XG4vLyBieSBlbmFibGluZyBob3Jpem9udGFsIHNjcm9sbGluZy4gT25seSBhcHBsaWVzIDw3NjhweC4gRXZlcnl0aGluZyBhYm92ZSB0aGF0XG4vLyB3aWxsIGRpc3BsYXkgbm9ybWFsbHkuXG5cbi50YWJsZS1yZXNwb25zaXZlIHtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgbWluLWhlaWdodDogMC4wMSU7IC8vIFdvcmthcm91bmQgZm9yIElFOSBidWcgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzE0ODM3KVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogKCRsaW5lLWhlaWdodC1jb21wdXRlZCAqIDAuNzUpO1xuICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IC1tcy1hdXRvaGlkaW5nLXNjcm9sbGJhcjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkdGFibGUtYm9yZGVyLWNvbG9yO1xuXG4gICAgLy8gVGlnaHRlbiB1cCBzcGFjaW5nXG4gICAgPiAudGFibGUge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcblxuICAgICAgLy8gRW5zdXJlIHRoZSBjb250ZW50IGRvZXNuJ3Qgd3JhcFxuICAgICAgPiB0aGVhZCxcbiAgICAgID4gdGJvZHksXG4gICAgICA+IHRmb290IHtcbiAgICAgICAgPiB0ciB7XG4gICAgICAgICAgPiB0aCxcbiAgICAgICAgICA+IHRkIHtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBvdmVycmlkZXMgZm9yIHRoZSBib3JkZXJlZCB0YWJsZXNcbiAgICA+IC50YWJsZS1ib3JkZXJlZCB7XG4gICAgICBib3JkZXI6IDA7XG5cbiAgICAgIC8vIE51a2UgdGhlIGFwcHJvcHJpYXRlIGJvcmRlcnMgc28gdGhhdCB0aGUgcGFyZW50IGNhbiBoYW5kbGUgdGhlbVxuICAgICAgPiB0aGVhZCxcbiAgICAgID4gdGJvZHksXG4gICAgICA+IHRmb290IHtcbiAgICAgICAgPiB0ciB7XG4gICAgICAgICAgPiB0aDpmaXJzdC1jaGlsZCxcbiAgICAgICAgICA+IHRkOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICA+IHRoOmxhc3QtY2hpbGQsXG4gICAgICAgICAgPiB0ZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgIGJvcmRlci1yaWdodDogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT25seSBudWtlIHRoZSBsYXN0IHJvdydzIGJvdHRvbS1ib3JkZXIgaW4gYHRib2R5YCBhbmQgYHRmb290YCBzaW5jZVxuICAgICAgLy8gY2hhbmNlcyBhcmUgdGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBgdHJgIGluIGEgYHRoZWFkYCBhbmQgdGhhdCB3b3VsZFxuICAgICAgLy8gcmVtb3ZlIHRoZSBib3JkZXIgYWx0b2dldGhlci5cbiAgICAgID4gdGJvZHksXG4gICAgICA+IHRmb290IHtcbiAgICAgICAgPiB0cjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICA+IHRoLFxuICAgICAgICAgID4gdGQge1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cbiAgfVxufVxuIiwiLy8gVGFibGVzXG5cbkBtaXhpbiB0YWJsZS1yb3ctdmFyaWFudCgkc3RhdGUsICRiYWNrZ3JvdW5kKSB7XG4gIC8vIEV4YWN0IHNlbGVjdG9ycyBiZWxvdyByZXF1aXJlZCB0byBvdmVycmlkZSBgLnRhYmxlLXN0cmlwZWRgIGFuZCBwcmV2ZW50XG4gIC8vIGluaGVyaXRhbmNlIHRvIG5lc3RlZCB0YWJsZXMuXG4gIC50YWJsZSA+IHRoZWFkID4gdHIsXG4gIC50YWJsZSA+IHRib2R5ID4gdHIsXG4gIC50YWJsZSA+IHRmb290ID4gdHIge1xuICAgID4gdGQuI3skc3RhdGV9LFxuICAgID4gdGguI3skc3RhdGV9LFxuICAgICYuI3skc3RhdGV9ID4gdGQsXG4gICAgJi4jeyRzdGF0ZX0gPiB0aCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcbiAgICB9XG4gIH1cblxuICAvLyBIb3ZlciBzdGF0ZXMgZm9yIGAudGFibGUtaG92ZXJgXG4gIC8vIE5vdGU6IHRoaXMgaXMgbm90IGF2YWlsYWJsZSBmb3IgY2VsbHMgb3Igcm93cyB3aXRoaW4gYHRoZWFkYCBvciBgdGZvb3RgLlxuICAudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyIHtcbiAgICA+IHRkLiN7JHN0YXRlfTpob3ZlcixcbiAgICA+IHRoLiN7JHN0YXRlfTpob3ZlcixcbiAgICAmLiN7JHN0YXRlfTpob3ZlciA+IHRkLFxuICAgICY6aG92ZXIgPiAuI3skc3RhdGV9LFxuICAgICYuI3skc3RhdGV9OmhvdmVyID4gdGgge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKCRiYWNrZ3JvdW5kLCA1JSk7XG4gICAgfVxuICB9XG59XG4iLCIvL1xuLy8gRm9ybXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gTm9ybWFsaXplIG5vbi1jb250cm9sc1xuLy9cbi8vIFJlc3R5bGUgYW5kIGJhc2VsaW5lIG5vbi1jb250cm9sIGZvcm0gZWxlbWVudHMuXG5cbmZpZWxkc2V0IHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBib3JkZXI6IDA7XG4gIC8vIENocm9tZSBhbmQgRmlyZWZveCBzZXQgYSBgbWluLXdpZHRoOiBtaW4tY29udGVudDtgIG9uIGZpZWxkc2V0cyxcbiAgLy8gc28gd2UgcmVzZXQgdGhhdCB0byBlbnN1cmUgaXQgYmVoYXZlcyBtb3JlIGxpa2UgYSBzdGFuZGFyZCBibG9jayBlbGVtZW50LlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMjM1OS5cbiAgbWluLXdpZHRoOiAwO1xufVxuXG5sZWdlbmQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbi1ib3R0b206ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgZm9udC1zaXplOiAoJGZvbnQtc2l6ZS1iYXNlICogMS41KTtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gIGNvbG9yOiAkbGVnZW5kLWNvbG9yO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkbGVnZW5kLWJvcmRlci1jb2xvcjtcbn1cblxubGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTsgLy8gRm9yY2UgSUU4IHRvIHdyYXAgbG9uZyBjb250ZW50IChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMzE0MSlcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuXG4vLyBOb3JtYWxpemUgZm9ybSBjb250cm9sc1xuLy9cbi8vIFdoaWxlIG1vc3Qgb2Ygb3VyIGZvcm0gc3R5bGVzIHJlcXVpcmUgZXh0cmEgY2xhc3Nlcywgc29tZSBiYXNpYyBub3JtYWxpemF0aW9uXG4vLyBpcyByZXF1aXJlZCB0byBlbnN1cmUgb3B0aW11bSBkaXNwbGF5IHdpdGggb3Igd2l0aG91dCB0aG9zZSBjbGFzc2VzIHRvIGJldHRlclxuLy8gYWRkcmVzcyBicm93c2VyIGluY29uc2lzdGVuY2llcy5cblxuLy8gT3ZlcnJpZGUgY29udGVudC1ib3ggaW4gTm9ybWFsaXplICgqIGlzbid0IHNwZWNpZmljIGVub3VnaClcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICBAaW5jbHVkZSBib3gtc2l6aW5nKGJvcmRlci1ib3gpO1xufVxuXG4vLyBQb3NpdGlvbiByYWRpb3MgYW5kIGNoZWNrYm94ZXMgYmV0dGVyXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0sXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBtYXJnaW46IDRweCAwIDA7XG4gIG1hcmdpbi10b3A6IDFweCBcXDk7IC8vIElFOC05XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG59XG5cbmlucHV0W3R5cGU9XCJmaWxlXCJdIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8vIE1ha2UgcmFuZ2UgaW5wdXRzIGJlaGF2ZSBsaWtlIHRleHR1YWwgZm9ybSBjb250cm9sc1xuaW5wdXRbdHlwZT1cInJhbmdlXCJdIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4vLyBNYWtlIG11bHRpcGxlIHNlbGVjdCBlbGVtZW50cyBoZWlnaHQgbm90IGZpeGVkXG5zZWxlY3RbbXVsdGlwbGVdLFxuc2VsZWN0W3NpemVdIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuXG4vLyBGb2N1cyBmb3IgZmlsZSwgcmFkaW8sIGFuZCBjaGVja2JveFxuaW5wdXRbdHlwZT1cImZpbGVcIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwicmFkaW9cIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Zm9jdXMge1xuICBAaW5jbHVkZSB0YWItZm9jdXM7XG59XG5cbi8vIEFkanVzdCBvdXRwdXQgZWxlbWVudFxub3V0cHV0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmctdG9wOiAoJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCArIDEpO1xuICBmb250LXNpemU6ICRmb250LXNpemUtYmFzZTtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xuICBjb2xvcjogJGlucHV0LWNvbG9yO1xufVxuXG5cbi8vIENvbW1vbiBmb3JtIGNvbnRyb2xzXG4vL1xuLy8gU2hhcmVkIHNpemUgYW5kIHR5cGUgcmVzZXRzIGZvciBmb3JtIGNvbnRyb2xzLiBBcHBseSBgLmZvcm0tY29udHJvbGAgdG8gYW55XG4vLyBvZiB0aGUgZm9sbG93aW5nIGZvcm0gY29udHJvbHM6XG4vL1xuLy8gc2VsZWN0XG4vLyB0ZXh0YXJlYVxuLy8gaW5wdXRbdHlwZT1cInRleHRcIl1cbi8vIGlucHV0W3R5cGU9XCJwYXNzd29yZFwiXVxuLy8gaW5wdXRbdHlwZT1cImRhdGV0aW1lXCJdXG4vLyBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl1cbi8vIGlucHV0W3R5cGU9XCJkYXRlXCJdXG4vLyBpbnB1dFt0eXBlPVwibW9udGhcIl1cbi8vIGlucHV0W3R5cGU9XCJ0aW1lXCJdXG4vLyBpbnB1dFt0eXBlPVwid2Vla1wiXVxuLy8gaW5wdXRbdHlwZT1cIm51bWJlclwiXVxuLy8gaW5wdXRbdHlwZT1cImVtYWlsXCJdXG4vLyBpbnB1dFt0eXBlPVwidXJsXCJdXG4vLyBpbnB1dFt0eXBlPVwic2VhcmNoXCJdXG4vLyBpbnB1dFt0eXBlPVwidGVsXCJdXG4vLyBpbnB1dFt0eXBlPVwiY29sb3JcIl1cblxuLmZvcm0tY29udHJvbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0LWJhc2U7IC8vIE1ha2UgaW5wdXRzIGF0IGxlYXN0IHRoZSBoZWlnaHQgb2YgdGhlaXIgYnV0dG9uIGNvdW50ZXJwYXJ0IChiYXNlIGxpbmUtaGVpZ2h0ICsgcGFkZGluZyArIGJvcmRlcilcbiAgcGFkZGluZzogJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCAkcGFkZGluZy1iYXNlLWhvcml6b250YWw7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1iYXNlO1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG4gIGNvbG9yOiAkaW5wdXQtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6ICRpbnB1dC1iZztcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgLy8gUmVzZXQgdW51c3VhbCBGaXJlZm94LW9uLUFuZHJvaWQgZGVmYXVsdCBzdHlsZTsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MvaXNzdWVzLzIxNFxuICBib3JkZXI6IDFweCBzb2xpZCAkaW5wdXQtYm9yZGVyO1xuICBib3JkZXItcmFkaXVzOiAkaW5wdXQtYm9yZGVyLXJhZGl1czsgLy8gTm90ZTogVGhpcyBoYXMgbm8gZWZmZWN0IG9uIDxzZWxlY3Q+cyBpbiBzb21lIGJyb3dzZXJzLCBkdWUgdG8gdGhlIGxpbWl0ZWQgc3R5bGFiaWxpdHkgb2YgPHNlbGVjdD5zIGluIENTUy5cbiAgQGluY2x1ZGUgYm94LXNoYWRvdyhpbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KSk7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24oYm9yZGVyLWNvbG9yIGVhc2UtaW4tb3V0IC4xNXMsIGJveC1zaGFkb3cgZWFzZS1pbi1vdXQgLjE1cyk7XG5cbiAgLy8gQ3VzdG9taXplIHRoZSBgOmZvY3VzYCBzdGF0ZSB0byBpbWl0YXRlIG5hdGl2ZSBXZWJLaXQgc3R5bGVzLlxuICBAaW5jbHVkZSBmb3JtLWNvbnRyb2wtZm9jdXM7XG5cbiAgLy8gUGxhY2Vob2xkZXJcbiAgQGluY2x1ZGUgcGxhY2Vob2xkZXI7XG5cbiAgLy8gRGlzYWJsZWQgYW5kIHJlYWQtb25seSBpbnB1dHNcbiAgLy9cbiAgLy8gSFRNTDUgc2F5cyB0aGF0IGNvbnRyb2xzIHVuZGVyIGEgZmllbGRzZXQgPiBsZWdlbmQ6Zmlyc3QtY2hpbGQgd29uJ3QgYmVcbiAgLy8gZGlzYWJsZWQgaWYgdGhlIGZpZWxkc2V0IGlzIGRpc2FibGVkLiBEdWUgdG8gaW1wbGVtZW50YXRpb24gZGlmZmljdWx0eSwgd2VcbiAgLy8gZG9uJ3QgaG9ub3IgdGhhdCBlZGdlIGNhc2U7IHdlIHN0eWxlIHRoZW0gYXMgZGlzYWJsZWQgYW55d2F5LlxuICAmW2Rpc2FibGVkXSxcbiAgJltyZWFkb25seV0sXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXQtYmctZGlzYWJsZWQ7XG4gICAgb3BhY2l0eTogMTsgLy8gaU9TIGZpeCBmb3IgdW5yZWFkYWJsZSBkaXNhYmxlZCBjb250ZW50OyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMTY1NVxuICB9XG5cbiAgJltkaXNhYmxlZF0sXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICBjdXJzb3I6ICRjdXJzb3ItZGlzYWJsZWQ7XG4gIH1cblxuICAvLyBbY29udmVydGVyXSBleHRyYWN0ZWQgdGV4dGFyZWEmIHRvIHRleHRhcmVhLmZvcm0tY29udHJvbFxufVxuXG4vLyBSZXNldCBoZWlnaHQgZm9yIGB0ZXh0YXJlYWBzXG50ZXh0YXJlYS5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cblxuLy8gU2VhcmNoIGlucHV0cyBpbiBpT1Ncbi8vXG4vLyBUaGlzIG92ZXJyaWRlcyB0aGUgZXh0cmEgcm91bmRlZCBjb3JuZXJzIG9uIHNlYXJjaCBpbnB1dHMgaW4gaU9TIHNvIHRoYXQgb3VyXG4vLyBgLmZvcm0tY29udHJvbGAgY2xhc3MgY2FuIHByb3Blcmx5IHN0eWxlIHRoZW0uIE5vdGUgdGhhdCB0aGlzIGNhbm5vdCBzaW1wbHlcbi8vIGJlIGFkZGVkIHRvIGAuZm9ybS1jb250cm9sYCBhcyBpdCdzIG5vdCBzcGVjaWZpYyBlbm91Z2guIEZvciBkZXRhaWxzLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTE1ODYuXG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5cblxuLy8gU3BlY2lhbCBzdHlsZXMgZm9yIGlPUyB0ZW1wb3JhbCBpbnB1dHNcbi8vXG4vLyBJbiBNb2JpbGUgU2FmYXJpLCBzZXR0aW5nIGBkaXNwbGF5OiBibG9ja2Agb24gdGVtcG9yYWwgaW5wdXRzIGNhdXNlcyB0aGVcbi8vIHRleHQgd2l0aGluIHRoZSBpbnB1dCB0byBiZWNvbWUgdmVydGljYWxseSBtaXNhbGlnbmVkLiBBcyBhIHdvcmthcm91bmQsIHdlXG4vLyBzZXQgYSBwaXhlbCBsaW5lLWhlaWdodCB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIGhlaWdodCBvZiB0aGUgaW5wdXQsIGJ1dCBvbmx5XG4vLyBmb3IgU2FmYXJpLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTg0OFxuLy9cbi8vIE5vdGUgdGhhdCBhcyBvZiA4LjMsIGlPUyBkb2Vzbid0IHN1cHBvcnQgYGRhdGV0aW1lYCBvciBgd2Vla2AuXG5cbkBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDApIHtcbiAgaW5wdXRbdHlwZT1cImRhdGVcIl0sXG4gIGlucHV0W3R5cGU9XCJ0aW1lXCJdLFxuICBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG4gIGlucHV0W3R5cGU9XCJtb250aFwiXSB7XG4gICAgJi5mb3JtLWNvbnRyb2wge1xuICAgICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQtYmFzZTtcbiAgICB9XG5cbiAgICAmLmlucHV0LXNtLFxuICAgIC5pbnB1dC1ncm91cC1zbSAmIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0LXNtYWxsO1xuICAgIH1cblxuICAgICYuaW5wdXQtbGcsXG4gICAgLmlucHV0LWdyb3VwLWxnICYge1xuICAgICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQtbGFyZ2U7XG4gICAgfVxuICB9XG59XG5cblxuLy8gRm9ybSBncm91cHNcbi8vXG4vLyBEZXNpZ25lZCB0byBoZWxwIHdpdGggdGhlIG9yZ2FuaXphdGlvbiBhbmQgc3BhY2luZyBvZiB2ZXJ0aWNhbCBmb3Jtcy4gRm9yXG4vLyBob3Jpem9udGFsIGZvcm1zLCB1c2UgdGhlIHByZWRlZmluZWQgZ3JpZCBjbGFzc2VzLlxuXG4uZm9ybS1ncm91cCB7XG4gIG1hcmdpbi1ib3R0b206ICRmb3JtLWdyb3VwLW1hcmdpbi1ib3R0b207XG59XG5cblxuLy8gQ2hlY2tib3hlcyBhbmQgcmFkaW9zXG4vL1xuLy8gSW5kZW50IHRoZSBsYWJlbHMgdG8gcG9zaXRpb24gcmFkaW9zL2NoZWNrYm94ZXMgYXMgaGFuZ2luZyBjb250cm9scy5cblxuLnJhZGlvLFxuLmNoZWNrYm94IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcblxuICBsYWJlbCB7XG4gICAgbWluLWhlaWdodDogJGxpbmUtaGVpZ2h0LWNvbXB1dGVkOyAvLyBFbnN1cmUgdGhlIGlucHV0IGRvZXNuJ3QganVtcCB3aGVuIHRoZXJlIGlzIG5vIHRleHRcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxufVxuLnJhZGlvIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbi5yYWRpby1pbmxpbmUgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5jaGVja2JveC1pbmxpbmUgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW4tbGVmdDogLTIwcHg7XG4gIG1hcmdpbi10b3A6IDRweCBcXDk7XG59XG5cbi5yYWRpbyArIC5yYWRpbyxcbi5jaGVja2JveCArIC5jaGVja2JveCB7XG4gIG1hcmdpbi10b3A6IC01cHg7IC8vIE1vdmUgdXAgc2libGluZyByYWRpb3Mgb3IgY2hlY2tib3hlcyBmb3IgdGlnaHRlciBzcGFjaW5nXG59XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBvbiBzYW1lIGxpbmVcbi5yYWRpby1pbmxpbmUsXG4uY2hlY2tib3gtaW5saW5lIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmctbGVmdDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLnJhZGlvLWlubGluZSArIC5yYWRpby1pbmxpbmUsXG4uY2hlY2tib3gtaW5saW5lICsgLmNoZWNrYm94LWlubGluZSB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4OyAvLyBzcGFjZSBvdXQgY29uc2VjdXRpdmUgaW5saW5lIGNvbnRyb2xzXG59XG5cbi8vIEFwcGx5IHNhbWUgZGlzYWJsZWQgY3Vyc29yIHR3ZWFrIGFzIGZvciBpbnB1dHNcbi8vIFNvbWUgc3BlY2lhbCBjYXJlIGlzIG5lZWRlZCBiZWNhdXNlIDxsYWJlbD5zIGRvbid0IGluaGVyaXQgdGhlaXIgcGFyZW50J3MgYGN1cnNvcmAuXG4vL1xuLy8gTm90ZTogTmVpdGhlciByYWRpb3Mgbm9yIGNoZWNrYm94ZXMgY2FuIGJlIHJlYWRvbmx5LlxuaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgJltkaXNhYmxlZF0sXG4gICYuZGlzYWJsZWQsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICBjdXJzb3I6ICRjdXJzb3ItZGlzYWJsZWQ7XG4gIH1cbn1cbi8vIFRoZXNlIGNsYXNzZXMgYXJlIHVzZWQgZGlyZWN0bHkgb24gPGxhYmVsPnNcbi5yYWRpby1pbmxpbmUsXG4uY2hlY2tib3gtaW5saW5lIHtcbiAgJi5kaXNhYmxlZCxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgIGN1cnNvcjogJGN1cnNvci1kaXNhYmxlZDtcbiAgfVxufVxuLy8gVGhlc2UgY2xhc3NlcyBhcmUgdXNlZCBvbiBlbGVtZW50cyB3aXRoIDxsYWJlbD4gZGVzY2VuZGFudHNcbi5yYWRpbyxcbi5jaGVja2JveCB7XG4gICYuZGlzYWJsZWQsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICBsYWJlbCB7XG4gICAgICBjdXJzb3I6ICRjdXJzb3ItZGlzYWJsZWQ7XG4gICAgfVxuICB9XG59XG5cblxuLy8gU3RhdGljIGZvcm0gY29udHJvbCB0ZXh0XG4vL1xuLy8gQXBwbHkgY2xhc3MgdG8gYSBgcGAgZWxlbWVudCB0byBtYWtlIGFueSBzdHJpbmcgb2YgdGV4dCBhbGlnbiB3aXRoIGxhYmVscyBpblxuLy8gYSBob3Jpem9udGFsIGZvcm0gbGF5b3V0LlxuXG4uZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gIC8vIFNpemUgaXQgYXBwcm9wcmlhdGVseSBuZXh0IHRvIHJlYWwgZm9ybSBjb250cm9sc1xuICBwYWRkaW5nLXRvcDogKCRwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKTtcbiAgcGFkZGluZy1ib3R0b206ICgkcGFkZGluZy1iYXNlLXZlcnRpY2FsICsgMSk7XG4gIC8vIFJlbW92ZSBkZWZhdWx0IG1hcmdpbiBmcm9tIGBwYFxuICBtYXJnaW4tYm90dG9tOiAwO1xuICBtaW4taGVpZ2h0OiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgJGZvbnQtc2l6ZS1iYXNlKTtcblxuICAmLmlucHV0LWxnLFxuICAmLmlucHV0LXNtIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgfVxufVxuXG5cbi8vIEZvcm0gY29udHJvbCBzaXppbmdcbi8vXG4vLyBCdWlsZCBvbiBgLmZvcm0tY29udHJvbGAgd2l0aCBtb2RpZmllciBjbGFzc2VzIHRvIGRlY3JlYXNlIG9yIGluY3JlYXNlIHRoZVxuLy8gaGVpZ2h0IGFuZCBmb250LXNpemUgb2YgZm9ybSBjb250cm9scy5cbi8vXG4vLyBUaGUgYC5mb3JtLWdyb3VwLSogZm9ybS1jb250cm9sYCB2YXJpYXRpb25zIGFyZSBzYWRseSBkdXBsaWNhdGVkIHRvIGF2b2lkIHRoZVxuLy8gaXNzdWUgZG9jdW1lbnRlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzE1MDc0LlxuXG5AaW5jbHVkZSBpbnB1dC1zaXplKCcuaW5wdXQtc20nLCAkaW5wdXQtaGVpZ2h0LXNtYWxsLCAkcGFkZGluZy1zbWFsbC12ZXJ0aWNhbCwgJHBhZGRpbmctc21hbGwtaG9yaXpvbnRhbCwgJGZvbnQtc2l6ZS1zbWFsbCwgJGxpbmUtaGVpZ2h0LXNtYWxsLCAkaW5wdXQtYm9yZGVyLXJhZGl1cy1zbWFsbCk7XG4uZm9ybS1ncm91cC1zbSB7XG4gIC5mb3JtLWNvbnRyb2wge1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodC1zbWFsbDtcbiAgICBwYWRkaW5nOiAkcGFkZGluZy1zbWFsbC12ZXJ0aWNhbCAkcGFkZGluZy1zbWFsbC1ob3Jpem9udGFsO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LXNtYWxsO1xuICAgIGJvcmRlci1yYWRpdXM6ICRpbnB1dC1ib3JkZXItcmFkaXVzLXNtYWxsO1xuICB9XG4gIHNlbGVjdC5mb3JtLWNvbnRyb2wge1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodC1zbWFsbDtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodC1zbWFsbDtcbiAgfVxuICB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wsXG4gIHNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gIH1cbiAgLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodC1zbWFsbDtcbiAgICBtaW4taGVpZ2h0OiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgJGZvbnQtc2l6ZS1zbWFsbCk7XG4gICAgcGFkZGluZzogKCRwYWRkaW5nLXNtYWxsLXZlcnRpY2FsICsgMSkgJHBhZGRpbmctc21hbGwtaG9yaXpvbnRhbDtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1zbWFsbDtcbiAgfVxufVxuXG5AaW5jbHVkZSBpbnB1dC1zaXplKCcuaW5wdXQtbGcnLCAkaW5wdXQtaGVpZ2h0LWxhcmdlLCAkcGFkZGluZy1sYXJnZS12ZXJ0aWNhbCwgJHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbCwgJGZvbnQtc2l6ZS1sYXJnZSwgJGxpbmUtaGVpZ2h0LWxhcmdlLCAkaW5wdXQtYm9yZGVyLXJhZGl1cy1sYXJnZSk7XG4uZm9ybS1ncm91cC1sZyB7XG4gIC5mb3JtLWNvbnRyb2wge1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodC1sYXJnZTtcbiAgICBwYWRkaW5nOiAkcGFkZGluZy1sYXJnZS12ZXJ0aWNhbCAkcGFkZGluZy1sYXJnZS1ob3Jpem9udGFsO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1sYXJnZTtcbiAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWxhcmdlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRpbnB1dC1ib3JkZXItcmFkaXVzLWxhcmdlO1xuICB9XG4gIHNlbGVjdC5mb3JtLWNvbnRyb2wge1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodC1sYXJnZTtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodC1sYXJnZTtcbiAgfVxuICB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wsXG4gIHNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gIH1cbiAgLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodC1sYXJnZTtcbiAgICBtaW4taGVpZ2h0OiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgJGZvbnQtc2l6ZS1sYXJnZSk7XG4gICAgcGFkZGluZzogKCRwYWRkaW5nLWxhcmdlLXZlcnRpY2FsICsgMSkgJHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbDtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtbGFyZ2U7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1sYXJnZTtcbiAgfVxufVxuXG5cbi8vIEZvcm0gY29udHJvbCBmZWVkYmFjayBzdGF0ZXNcbi8vXG4vLyBBcHBseSBjb250ZXh0dWFsIGFuZCBzZW1hbnRpYyBzdGF0ZXMgdG8gaW5kaXZpZHVhbCBmb3JtIGNvbnRyb2xzLlxuXG4uaGFzLWZlZWRiYWNrIHtcbiAgLy8gRW5hYmxlIGFic29sdXRlIHBvc2l0aW9uaW5nXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAvLyBFbnN1cmUgaWNvbnMgZG9uJ3Qgb3ZlcmxhcCB0ZXh0XG4gIC5mb3JtLWNvbnRyb2wge1xuICAgIHBhZGRpbmctcmlnaHQ6ICgkaW5wdXQtaGVpZ2h0LWJhc2UgKiAxLjI1KTtcbiAgfVxufVxuLy8gRmVlZGJhY2sgaWNvbiAocmVxdWlyZXMgLmdseXBoaWNvbiBjbGFzc2VzKVxuLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgei1pbmRleDogMjsgLy8gRW5zdXJlIGljb24gaXMgYWJvdmUgaW5wdXQgZ3JvdXBzXG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogJGlucHV0LWhlaWdodC1iYXNlO1xuICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQtYmFzZTtcbiAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQtYmFzZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbi5pbnB1dC1sZyArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uaW5wdXQtZ3JvdXAtbGcgKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLFxuLmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbCArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB3aWR0aDogJGlucHV0LWhlaWdodC1sYXJnZTtcbiAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0LWxhcmdlO1xuICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodC1sYXJnZTtcbn1cbi5pbnB1dC1zbSArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uaW5wdXQtZ3JvdXAtc20gKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLFxuLmZvcm0tZ3JvdXAtc20gLmZvcm0tY29udHJvbCArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB3aWR0aDogJGlucHV0LWhlaWdodC1zbWFsbDtcbiAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0LXNtYWxsO1xuICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodC1zbWFsbDtcbn1cblxuLy8gRmVlZGJhY2sgc3RhdGVzXG4uaGFzLXN1Y2Nlc3Mge1xuICBAaW5jbHVkZSBmb3JtLWNvbnRyb2wtdmFsaWRhdGlvbigkc3RhdGUtc3VjY2Vzcy10ZXh0LCAkc3RhdGUtc3VjY2Vzcy10ZXh0LCAkc3RhdGUtc3VjY2Vzcy1iZyk7XG59XG4uaGFzLXdhcm5pbmcge1xuICBAaW5jbHVkZSBmb3JtLWNvbnRyb2wtdmFsaWRhdGlvbigkc3RhdGUtd2FybmluZy10ZXh0LCAkc3RhdGUtd2FybmluZy10ZXh0LCAkc3RhdGUtd2FybmluZy1iZyk7XG59XG4uaGFzLWVycm9yIHtcbiAgQGluY2x1ZGUgZm9ybS1jb250cm9sLXZhbGlkYXRpb24oJHN0YXRlLWRhbmdlci10ZXh0LCAkc3RhdGUtZGFuZ2VyLXRleHQsICRzdGF0ZS1kYW5nZXItYmcpO1xufVxuXG4vLyBSZXBvc2l0aW9uIGZlZWRiYWNrIGljb24gaWYgaW5wdXQgaGFzIHZpc2libGUgbGFiZWwgYWJvdmVcbi5oYXMtZmVlZGJhY2sgbGFiZWwge1xuXG4gICYgfiAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgICAgdG9wOiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgNSk7IC8vIEhlaWdodCBvZiB0aGUgYGxhYmVsYCBhbmQgaXRzIG1hcmdpblxuICB9XG4gICYuc3Itb25seSB+IC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgICB0b3A6IDA7XG4gIH1cbn1cblxuXG4vLyBIZWxwIHRleHRcbi8vXG4vLyBBcHBseSB0byBhbnkgZWxlbWVudCB5b3Ugd2lzaCB0byBjcmVhdGUgbGlnaHQgdGV4dCBmb3IgcGxhY2VtZW50IGltbWVkaWF0ZWx5XG4vLyBiZWxvdyBhIGZvcm0gY29udHJvbC4gVXNlIGZvciBnZW5lcmFsIGhlbHAsIGZvcm1hdHRpbmcsIG9yIGluc3RydWN0aW9uYWwgdGV4dC5cblxuLmhlbHAtYmxvY2sge1xuICBkaXNwbGF5OiBibG9jazsgLy8gYWNjb3VudCBmb3IgYW55IGVsZW1lbnQgdXNpbmcgaGVscC1ibG9ja1xuICBtYXJnaW4tdG9wOiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gIGNvbG9yOiBsaWdodGVuKCR0ZXh0LWNvbG9yLCAyNSUpOyAvLyBsaWdodGVuIHRoZSB0ZXh0IHNvbWUgZm9yIGNvbnRyYXN0XG59XG5cblxuLy8gSW5saW5lIGZvcm1zXG4vL1xuLy8gTWFrZSBmb3JtcyBhcHBlYXIgaW5saW5lKC1ibG9jaykgYnkgYWRkaW5nIHRoZSBgLmZvcm0taW5saW5lYCBjbGFzcy4gSW5saW5lXG4vLyBmb3JtcyBiZWdpbiBzdGFja2VkIG9uIGV4dHJhIHNtYWxsIChtb2JpbGUpIGRldmljZXMgYW5kIHRoZW4gZ28gaW5saW5lIHdoZW5cbi8vIHZpZXdwb3J0cyByZWFjaCA8NzY4cHguXG4vL1xuLy8gUmVxdWlyZXMgd3JhcHBpbmcgaW5wdXRzIGFuZCBsYWJlbHMgd2l0aCBgLmZvcm0tZ3JvdXBgIGZvciBwcm9wZXIgZGlzcGxheSBvZlxuLy8gZGVmYXVsdCBIVE1MIGZvcm0gY29udHJvbHMgYW5kIG91ciBjdXN0b20gZm9ybSBjb250cm9scyAoZS5nLiwgaW5wdXQgZ3JvdXBzKS5cbi8vXG4vLyBIZWFkcyB1cCEgVGhpcyBpcyBtaXhpbi1lZCBpbnRvIGAubmF2YmFyLWZvcm1gIGluIG5hdmJhcnMubGVzcy5cblxuLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIGZyb20gYC5mb3JtLWlubGluZWAgZm9yIGxpYnNhc3MgY29tcGF0aWJpbGl0eVxuQG1peGluIGZvcm0taW5saW5lIHtcblxuICAvLyBLaWNrIGluIHRoZSBpbmxpbmVcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgLy8gSW5saW5lLWJsb2NrIGFsbCB0aGUgdGhpbmdzIGZvciBcImlubGluZVwiXG4gICAgLmZvcm0tZ3JvdXAge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuXG4gICAgLy8gSW4gbmF2YmFyLWZvcm0sIGFsbG93IGZvbGtzIHRvICpub3QqIHVzZSBgLmZvcm0tZ3JvdXBgXG4gICAgLmZvcm0tY29udHJvbCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogYXV0bzsgLy8gUHJldmVudCBsYWJlbHMgZnJvbSBzdGFja2luZyBhYm92ZSBpbnB1dHMgaW4gYC5mb3JtLWdyb3VwYFxuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN0YXRpYyBjb250cm9scyBiZWhhdmUgbGlrZSByZWd1bGFyIG9uZXNcbiAgICAuZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxuXG4gICAgLmlucHV0LWdyb3VwIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS10YWJsZTtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cbiAgICAgIC5pbnB1dC1ncm91cC1hZGRvbixcbiAgICAgIC5pbnB1dC1ncm91cC1idG4sXG4gICAgICAuZm9ybS1jb250cm9sIHtcbiAgICAgICAgd2lkdGg6IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW5wdXQgZ3JvdXBzIG5lZWQgdGhhdCAxMDAlIHdpZHRoIHRob3VnaFxuICAgIC5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgLmNvbnRyb2wtbGFiZWwge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGRlZmF1bHQgbWFyZ2luIG9uIHJhZGlvcy9jaGVja2JveGVzIHRoYXQgd2VyZSB1c2VkIGZvciBzdGFja2luZywgYW5kXG4gICAgLy8gdGhlbiB1bmRvIHRoZSBmbG9hdGluZyBvZiByYWRpb3MgYW5kIGNoZWNrYm94ZXMgdG8gbWF0Y2guXG4gICAgLnJhZGlvLFxuICAgIC5jaGVja2JveCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cbiAgICAgIGxhYmVsIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cbiAgICAucmFkaW8gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuICAgIC5jaGVja2JveCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgfVxuXG4gICAgLy8gUmUtb3ZlcnJpZGUgdGhlIGZlZWRiYWNrIGljb24uXG4gICAgLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgICAgIHRvcDogMDtcbiAgICB9XG4gIH1cbn1cbi8vIFtjb252ZXJ0ZXJdIGV4dHJhY3RlZCBhcyBgQG1peGluIGZvcm0taW5saW5lYCBmb3IgbGlic2FzcyBjb21wYXRpYmlsaXR5XG4uZm9ybS1pbmxpbmUge1xuICBAaW5jbHVkZSBmb3JtLWlubGluZTtcbn1cblxuXG5cbi8vIEhvcml6b250YWwgZm9ybXNcbi8vXG4vLyBIb3Jpem9udGFsIGZvcm1zIGFyZSBidWlsdCBvbiBncmlkIGNsYXNzZXMgYW5kIGFsbG93IHlvdSB0byBjcmVhdGUgZm9ybXMgd2l0aFxuLy8gbGFiZWxzIG9uIHRoZSBsZWZ0IGFuZCBpbnB1dHMgb24gdGhlIHJpZ2h0LlxuXG4uZm9ybS1ob3Jpem9udGFsIHtcblxuICAvLyBDb25zaXN0ZW50IHZlcnRpY2FsIGFsaWdubWVudCBvZiByYWRpb3MgYW5kIGNoZWNrYm94ZXNcbiAgLy9cbiAgLy8gTGFiZWxzIGFsc28gZ2V0IHNvbWUgcmVzZXQgc3R5bGVzLCBidXQgdGhhdCBpcyBzY29wZWQgdG8gYSBtZWRpYSBxdWVyeSBiZWxvdy5cbiAgLnJhZGlvLFxuICAuY2hlY2tib3gsXG4gIC5yYWRpby1pbmxpbmUsXG4gIC5jaGVja2JveC1pbmxpbmUge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBwYWRkaW5nLXRvcDogKCRwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKTsgLy8gRGVmYXVsdCBwYWRkaW5nIHBsdXMgYSBib3JkZXJcbiAgfVxuICAvLyBBY2NvdW50IGZvciBwYWRkaW5nIHdlJ3JlIGFkZGluZyB0byBlbnN1cmUgdGhlIGFsaWdubWVudCBhbmQgb2YgaGVscCB0ZXh0XG4gIC8vIGFuZCBvdGhlciBjb250ZW50IGJlbG93IGl0ZW1zXG4gIC5yYWRpbyxcbiAgLmNoZWNrYm94IHtcbiAgICBtaW4taGVpZ2h0OiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgKCRwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKSk7XG4gIH1cblxuICAvLyBNYWtlIGZvcm0gZ3JvdXBzIGJlaGF2ZSBsaWtlIHJvd3NcbiAgLmZvcm0tZ3JvdXAge1xuICAgIEBpbmNsdWRlIG1ha2Utcm93O1xuICB9XG5cbiAgLy8gUmVzZXQgc3BhY2luZyBhbmQgcmlnaHQgYWxpZ24gbGFiZWxzLCBidXQgc2NvcGUgdG8gbWVkaWEgcXVlcmllcyBzbyB0aGF0XG4gIC8vIGxhYmVscyBvbiBuYXJyb3cgdmlld3BvcnRzIHN0YWNrIHRoZSBzYW1lIGFzIGEgZGVmYXVsdCBmb3JtIGV4YW1wbGUuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgIC5jb250cm9sLWxhYmVsIHtcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIHBhZGRpbmctdG9wOiAoJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCArIDEpOyAvLyBEZWZhdWx0IHBhZGRpbmcgcGx1cyBhIGJvcmRlclxuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRpb24gc3RhdGVzXG4gIC8vXG4gIC8vIFJlcG9zaXRpb24gdGhlIGljb24gYmVjYXVzZSBpdCdzIG5vdyB3aXRoaW4gYSBncmlkIGNvbHVtbiBhbmQgY29sdW1ucyBoYXZlXG4gIC8vIGBwb3NpdGlvbjogcmVsYXRpdmU7YCBvbiB0aGVtLiBBbHNvIGFjY291bnRzIGZvciB0aGUgZ3JpZCBndXR0ZXIgcGFkZGluZy5cbiAgLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgICByaWdodDogZmxvb3IoKCRncmlkLWd1dHRlci13aWR0aCAvIDIpKTtcbiAgfVxuXG4gIC8vIEZvcm0gZ3JvdXAgc2l6ZXNcbiAgLy9cbiAgLy8gUXVpY2sgdXRpbGl0eSBjbGFzcyBmb3IgYXBwbHlpbmcgYC5pbnB1dC1sZ2AgYW5kIGAuaW5wdXQtc21gIHN0eWxlcyB0byB0aGVcbiAgLy8gaW5wdXRzIGFuZCBsYWJlbHMgd2l0aGluIGEgYC5mb3JtLWdyb3VwYC5cbiAgLmZvcm0tZ3JvdXAtbGcge1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgICAgLmNvbnRyb2wtbGFiZWwge1xuICAgICAgICBwYWRkaW5nLXRvcDogKCgkcGFkZGluZy1sYXJnZS12ZXJ0aWNhbCAqICRsaW5lLWhlaWdodC1sYXJnZSkgKyAxKTtcbiAgICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLWxhcmdlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAuZm9ybS1ncm91cC1zbSB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgICAuY29udHJvbC1sYWJlbCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAoJHBhZGRpbmctc21hbGwtdmVydGljYWwgKyAxKTtcbiAgICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm9ybSB2YWxpZGF0aW9uIHN0YXRlc1xuLy9cbi8vIFVzZWQgaW4gZm9ybXMubGVzcyB0byBnZW5lcmF0ZSB0aGUgZm9ybSB2YWxpZGF0aW9uIENTUyBmb3Igd2FybmluZ3MsIGVycm9ycyxcbi8vIGFuZCBzdWNjZXNzZXMuXG5cbkBtaXhpbiBmb3JtLWNvbnRyb2wtdmFsaWRhdGlvbigkdGV4dC1jb2xvcjogIzU1NSwgJGJvcmRlci1jb2xvcjogI2NjYywgJGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjUpIHtcbiAgLy8gQ29sb3IgdGhlIGxhYmVsIGFuZCBoZWxwIHRleHRcbiAgLmhlbHAtYmxvY2ssXG4gIC5jb250cm9sLWxhYmVsLFxuICAucmFkaW8sXG4gIC5jaGVja2JveCxcbiAgLnJhZGlvLWlubGluZSxcbiAgLmNoZWNrYm94LWlubGluZSxcbiAgJi5yYWRpbyBsYWJlbCxcbiAgJi5jaGVja2JveCBsYWJlbCxcbiAgJi5yYWRpby1pbmxpbmUgbGFiZWwsXG4gICYuY2hlY2tib3gtaW5saW5lIGxhYmVsICB7XG4gICAgY29sb3I6ICR0ZXh0LWNvbG9yO1xuICB9XG4gIC8vIFNldCB0aGUgYm9yZGVyIGFuZCBib3ggc2hhZG93IG9uIHNwZWNpZmljIGlucHV0cyB0byBtYXRjaFxuICAuZm9ybS1jb250cm9sIHtcbiAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgQGluY2x1ZGUgYm94LXNoYWRvdyhpbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KSk7IC8vIFJlZGVjbGFyZSBzbyB0cmFuc2l0aW9ucyB3b3JrXG4gICAgJjpmb2N1cyB7XG4gICAgICBib3JkZXItY29sb3I6IGRhcmtlbigkYm9yZGVyLWNvbG9yLCAxMCUpO1xuICAgICAgJHNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSksIDAgMCA2cHggbGlnaHRlbigkYm9yZGVyLWNvbG9yLCAyMCUpO1xuICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdygkc2hhZG93KTtcbiAgICB9XG4gIH1cbiAgLy8gU2V0IHZhbGlkYXRpb24gc3RhdGVzIGFsc28gZm9yIGFkZG9uc1xuICAuaW5wdXQtZ3JvdXAtYWRkb24ge1xuICAgIGNvbG9yOiAkdGV4dC1jb2xvcjtcbiAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gIH1cbiAgLy8gT3B0aW9uYWwgZmVlZGJhY2sgaWNvblxuICAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgICBjb2xvcjogJHRleHQtY29sb3I7XG4gIH1cbn1cblxuXG4vLyBGb3JtIGNvbnRyb2wgZm9jdXMgc3RhdGVcbi8vXG4vLyBHZW5lcmF0ZSBhIGN1c3RvbWl6ZWQgZm9jdXMgc3RhdGUgYW5kIGZvciBhbnkgaW5wdXQgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbG9yLFxuLy8gd2hpY2ggZGVmYXVsdHMgdG8gdGhlIGAkaW5wdXQtYm9yZGVyLWZvY3VzYCB2YXJpYWJsZS5cbi8vXG4vLyBXZSBoaWdobHkgZW5jb3VyYWdlIHlvdSB0byBub3QgY3VzdG9taXplIHRoZSBkZWZhdWx0IHZhbHVlLCBidXQgaW5zdGVhZCB1c2Vcbi8vIHRoaXMgdG8gdHdlYWsgY29sb3JzIG9uIGFuIGFzLW5lZWRlZCBiYXNpcy4gVGhpcyBhZXN0aGV0aWMgY2hhbmdlIGlzIGJhc2VkIG9uXG4vLyBXZWJLaXQncyBkZWZhdWx0IHN0eWxlcywgYnV0IGFwcGxpY2FibGUgdG8gYSB3aWRlciByYW5nZSBvZiBicm93c2Vycy4gSXRzXG4vLyB1c2FiaWxpdHkgYW5kIGFjY2Vzc2liaWxpdHkgc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudCB3aXRoIGFueSBjaGFuZ2UuXG4vL1xuLy8gRXhhbXBsZSB1c2FnZTogY2hhbmdlIHRoZSBkZWZhdWx0IGJsdWUgYm9yZGVyIGFuZCBzaGFkb3cgdG8gd2hpdGUgZm9yIGJldHRlclxuLy8gY29udHJhc3QgYWdhaW5zdCBhIGRhcmsgZ3JheSBiYWNrZ3JvdW5kLlxuQG1peGluIGZvcm0tY29udHJvbC1mb2N1cygkY29sb3I6ICRpbnB1dC1ib3JkZXItZm9jdXMpIHtcbiAgJGNvbG9yLXJnYmE6IHJnYmEocmVkKCRjb2xvciksIGdyZWVuKCRjb2xvciksIGJsdWUoJGNvbG9yKSwgLjYpO1xuICAmOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6ICRjb2xvcjtcbiAgICBvdXRsaW5lOiAwO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSksIDAgMCA4cHggJGNvbG9yLXJnYmEpO1xuICB9XG59XG5cbi8vIEZvcm0gY29udHJvbCBzaXppbmdcbi8vXG4vLyBSZWxhdGl2ZSB0ZXh0IHNpemUsIHBhZGRpbmcsIGFuZCBib3JkZXItcmFkaWkgY2hhbmdlcyBmb3IgZm9ybSBjb250cm9scy4gRm9yXG4vLyBob3Jpem9udGFsIHNpemluZywgd3JhcCBjb250cm9scyBpbiB0aGUgcHJlZGVmaW5lZCBncmlkIGNsYXNzZXMuIGA8c2VsZWN0PmBcbi8vIGVsZW1lbnQgZ2V0cyBzcGVjaWFsIGxvdmUgYmVjYXVzZSBpdCdzIHNwZWNpYWwsIGFuZCB0aGF0J3MgYSBmYWN0IVxuLy8gW2NvbnZlcnRlcl0gJHBhcmVudCBoYWNrXG5AbWl4aW4gaW5wdXQtc2l6ZSgkcGFyZW50LCAkaW5wdXQtaGVpZ2h0LCAkcGFkZGluZy12ZXJ0aWNhbCwgJHBhZGRpbmctaG9yaXpvbnRhbCwgJGZvbnQtc2l6ZSwgJGxpbmUtaGVpZ2h0LCAkYm9yZGVyLXJhZGl1cykge1xuICAjeyRwYXJlbnR9IHtcbiAgICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gICAgcGFkZGluZzogJHBhZGRpbmctdmVydGljYWwgJHBhZGRpbmctaG9yaXpvbnRhbDtcbiAgICBmb250LXNpemU6ICRmb250LXNpemU7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgfVxuXG4gIHNlbGVjdCN7JHBhcmVudH0ge1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gIHRleHRhcmVhI3skcGFyZW50fSxcbiAgc2VsZWN0W211bHRpcGxlXSN7JHBhcmVudH0ge1xuICAgIGhlaWdodDogYXV0bztcbiAgfVxufVxuIiwiLy9cbi8vIEJ1dHRvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBzdHlsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5idG4ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDA7IC8vIEZvciBpbnB1dC5idG5cbiAgZm9udC13ZWlnaHQ6ICRidG4tZm9udC13ZWlnaHQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgLy8gUmVzZXQgdW51c3VhbCBGaXJlZm94LW9uLUFuZHJvaWQgZGVmYXVsdCBzdHlsZTsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MvaXNzdWVzLzIxNFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgQGluY2x1ZGUgYnV0dG9uLXNpemUoJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCwgJHBhZGRpbmctYmFzZS1ob3Jpem9udGFsLCAkZm9udC1zaXplLWJhc2UsICRsaW5lLWhlaWdodC1iYXNlLCAkYnRuLWJvcmRlci1yYWRpdXMtYmFzZSk7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICYsXG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSB7XG4gICAgJjpmb2N1cyxcbiAgICAmLmZvY3VzIHtcbiAgICAgIEBpbmNsdWRlIHRhYi1mb2N1cztcbiAgICB9XG4gIH1cblxuICAmOmhvdmVyLFxuICAmOmZvY3VzLFxuICAmLmZvY3VzIHtcbiAgICBjb2xvcjogJGJ0bi1kZWZhdWx0LWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuXG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSB7XG4gICAgb3V0bGluZTogMDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwwLDAsLjEyNSkpO1xuICB9XG5cbiAgJi5kaXNhYmxlZCxcbiAgJltkaXNhYmxlZF0sXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICBjdXJzb3I6ICRjdXJzb3ItZGlzYWJsZWQ7XG4gICAgQGluY2x1ZGUgb3BhY2l0eSguNjUpO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3cobm9uZSk7XG4gIH1cblxuICAvLyBbY29udmVydGVyXSBleHRyYWN0ZWQgYSYgdG8gYS5idG5cbn1cblxuYS5idG4ge1xuICAmLmRpc2FibGVkLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7IC8vIEZ1dHVyZS1wcm9vZiBkaXNhYmxpbmcgb2YgY2xpY2tzIG9uIGA8YT5gIGVsZW1lbnRzXG4gIH1cbn1cblxuXG4vLyBBbHRlcm5hdGUgYnV0dG9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmJ0bi1kZWZhdWx0IHtcbiAgQGluY2x1ZGUgYnV0dG9uLXZhcmlhbnQoJGJ0bi1kZWZhdWx0LWNvbG9yLCAkYnRuLWRlZmF1bHQtYmcsICRidG4tZGVmYXVsdC1ib3JkZXIpO1xufVxuLmJ0bi1wcmltYXJ5IHtcbiAgQGluY2x1ZGUgYnV0dG9uLXZhcmlhbnQoJGJ0bi1wcmltYXJ5LWNvbG9yLCAkYnRuLXByaW1hcnktYmcsICRidG4tcHJpbWFyeS1ib3JkZXIpO1xufVxuLy8gU3VjY2VzcyBhcHBlYXJzIGFzIGdyZWVuXG4uYnRuLXN1Y2Nlc3Mge1xuICBAaW5jbHVkZSBidXR0b24tdmFyaWFudCgkYnRuLXN1Y2Nlc3MtY29sb3IsICRidG4tc3VjY2Vzcy1iZywgJGJ0bi1zdWNjZXNzLWJvcmRlcik7XG59XG4vLyBJbmZvIGFwcGVhcnMgYXMgYmx1ZS1ncmVlblxuLmJ0bi1pbmZvIHtcbiAgQGluY2x1ZGUgYnV0dG9uLXZhcmlhbnQoJGJ0bi1pbmZvLWNvbG9yLCAkYnRuLWluZm8tYmcsICRidG4taW5mby1ib3JkZXIpO1xufVxuLy8gV2FybmluZyBhcHBlYXJzIGFzIG9yYW5nZVxuLmJ0bi13YXJuaW5nIHtcbiAgQGluY2x1ZGUgYnV0dG9uLXZhcmlhbnQoJGJ0bi13YXJuaW5nLWNvbG9yLCAkYnRuLXdhcm5pbmctYmcsICRidG4td2FybmluZy1ib3JkZXIpO1xufVxuLy8gRGFuZ2VyIGFuZCBlcnJvciBhcHBlYXIgYXMgcmVkXG4uYnRuLWRhbmdlciB7XG4gIEBpbmNsdWRlIGJ1dHRvbi12YXJpYW50KCRidG4tZGFuZ2VyLWNvbG9yLCAkYnRuLWRhbmdlci1iZywgJGJ0bi1kYW5nZXItYm9yZGVyKTtcbn1cblxuXG4vLyBMaW5rIGJ1dHRvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTWFrZSBhIGJ1dHRvbiBsb29rIGFuZCBiZWhhdmUgbGlrZSBhIGxpbmtcbi5idG4tbGluayB7XG4gIGNvbG9yOiAkbGluay1jb2xvcjtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgYm9yZGVyLXJhZGl1czogMDtcblxuICAmLFxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUsXG4gICZbZGlzYWJsZWRdLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgQGluY2x1ZGUgYm94LXNoYWRvdyhub25lKTtcbiAgfVxuICAmLFxuICAmOmhvdmVyLFxuICAmOmZvY3VzLFxuICAmOmFjdGl2ZSB7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICBjb2xvcjogJGxpbmstaG92ZXItY29sb3I7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiAkbGluay1ob3Zlci1kZWNvcmF0aW9uO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG4gICZbZGlzYWJsZWRdLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAkYnRuLWxpbmstZGlzYWJsZWQtY29sb3I7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgfVxuICB9XG59XG5cblxuLy8gQnV0dG9uIFNpemVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uYnRuLWxnIHtcbiAgLy8gbGluZS1oZWlnaHQ6IGVuc3VyZSBldmVuLW51bWJlcmVkIGhlaWdodCBvZiBidXR0b24gbmV4dCB0byBsYXJnZSBpbnB1dFxuICBAaW5jbHVkZSBidXR0b24tc2l6ZSgkcGFkZGluZy1sYXJnZS12ZXJ0aWNhbCwgJHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbCwgJGZvbnQtc2l6ZS1sYXJnZSwgJGxpbmUtaGVpZ2h0LWxhcmdlLCAkYnRuLWJvcmRlci1yYWRpdXMtbGFyZ2UpO1xufVxuLmJ0bi1zbSB7XG4gIC8vIGxpbmUtaGVpZ2h0OiBlbnN1cmUgcHJvcGVyIGhlaWdodCBvZiBidXR0b24gbmV4dCB0byBzbWFsbCBpbnB1dFxuICBAaW5jbHVkZSBidXR0b24tc2l6ZSgkcGFkZGluZy1zbWFsbC12ZXJ0aWNhbCwgJHBhZGRpbmctc21hbGwtaG9yaXpvbnRhbCwgJGZvbnQtc2l6ZS1zbWFsbCwgJGxpbmUtaGVpZ2h0LXNtYWxsLCAkYnRuLWJvcmRlci1yYWRpdXMtc21hbGwpO1xufVxuLmJ0bi14cyB7XG4gIEBpbmNsdWRlIGJ1dHRvbi1zaXplKCRwYWRkaW5nLXhzLXZlcnRpY2FsLCAkcGFkZGluZy14cy1ob3Jpem9udGFsLCAkZm9udC1zaXplLXNtYWxsLCAkbGluZS1oZWlnaHQtc21hbGwsICRidG4tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XG59XG5cblxuLy8gQmxvY2sgYnV0dG9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uYnRuLWJsb2NrIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4vLyBWZXJ0aWNhbGx5IHNwYWNlIG91dCBtdWx0aXBsZSBibG9jayBidXR0b25zXG4uYnRuLWJsb2NrICsgLmJ0bi1ibG9jayB7XG4gIG1hcmdpbi10b3A6IDVweDtcbn1cblxuLy8gU3BlY2lmaWNpdHkgb3ZlcnJpZGVzXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdLFxuaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuaW5wdXRbdHlwZT1cImJ1dHRvblwiXSB7XG4gICYuYnRuLWJsb2NrIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuIiwiLy8gQnV0dG9uIHZhcmlhbnRzXG4vL1xuLy8gRWFzaWx5IHB1bXAgb3V0IGRlZmF1bHQgc3R5bGVzLCBhcyB3ZWxsIGFzIDpob3ZlciwgOmZvY3VzLCA6YWN0aXZlLFxuLy8gYW5kIGRpc2FibGVkIG9wdGlvbnMgZm9yIGFsbCBidXR0b25zXG5cbkBtaXhpbiBidXR0b24tdmFyaWFudCgkY29sb3IsICRiYWNrZ3JvdW5kLCAkYm9yZGVyKSB7XG4gIGNvbG9yOiAkY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kO1xuICBib3JkZXItY29sb3I6ICRib3JkZXI7XG5cbiAgJjpmb2N1cyxcbiAgJi5mb2N1cyB7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGJhY2tncm91bmQsIDEwJSk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRib3JkZXIsIDI1JSk7XG4gIH1cbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGJhY2tncm91bmQsIDEwJSk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRib3JkZXIsIDEyJSk7XG4gIH1cbiAgJjphY3RpdmUsXG4gICYuYWN0aXZlLFxuICAub3BlbiA+ICYuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBjb2xvcjogJGNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkYmFja2dyb3VuZCwgMTAlKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGJvcmRlciwgMTIlKTtcblxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyxcbiAgICAmLmZvY3VzIHtcbiAgICAgIGNvbG9yOiAkY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGJhY2tncm91bmQsIDE3JSk7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGJvcmRlciwgMjUlKTtcbiAgICB9XG4gIH1cbiAgJjphY3RpdmUsXG4gICYuYWN0aXZlLFxuICAub3BlbiA+ICYuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICB9XG4gICYuZGlzYWJsZWQsXG4gICZbZGlzYWJsZWRdLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgJixcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMsXG4gICAgJi5mb2N1cyxcbiAgICAmOmFjdGl2ZSxcbiAgICAmLmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRib3JkZXI7XG4gICAgfVxuICB9XG5cbiAgLmJhZGdlIHtcbiAgICBjb2xvcjogJGJhY2tncm91bmQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yO1xuICB9XG59XG5cbi8vIEJ1dHRvbiBzaXplc1xuQG1peGluIGJ1dHRvbi1zaXplKCRwYWRkaW5nLXZlcnRpY2FsLCAkcGFkZGluZy1ob3Jpem9udGFsLCAkZm9udC1zaXplLCAkbGluZS1oZWlnaHQsICRib3JkZXItcmFkaXVzKSB7XG4gIHBhZGRpbmc6ICRwYWRkaW5nLXZlcnRpY2FsICRwYWRkaW5nLWhvcml6b250YWw7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG59XG4iLCIvLyBPcGFjaXR5XG5cbkBtaXhpbiBvcGFjaXR5KCRvcGFjaXR5KSB7XG4gIG9wYWNpdHk6ICRvcGFjaXR5O1xuICAvLyBJRTggZmlsdGVyXG4gICRvcGFjaXR5LWllOiAoJG9wYWNpdHkgKiAxMDApO1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9JG9wYWNpdHktaWUpO1xufVxuIiwiLy9cbi8vIENvbXBvbmVudCBhbmltYXRpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBIZWFkcyB1cCFcbi8vXG4vLyBXZSBkb24ndCB1c2UgdGhlIGAub3BhY2l0eSgpYCBtaXhpbiBoZXJlIHNpbmNlIGl0IGNhdXNlcyBhIGJ1ZyB3aXRoIHRleHRcbi8vIGZpZWxkcyBpbiBJRTctOC4gU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8zNTUyLlxuXG4uZmFkZSB7XG4gIG9wYWNpdHk6IDA7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24ob3BhY2l0eSAuMTVzIGxpbmVhcik7XG4gICYuaW4ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuLmNvbGxhcHNlIHtcbiAgZGlzcGxheTogbm9uZTtcblxuICAmLmluICAgICAgeyBkaXNwbGF5OiBibG9jazsgfVxuICAvLyBbY29udmVydGVyXSBleHRyYWN0ZWQgdHImLmluIHRvIHRyLmNvbGxhcHNlLmluXG4gIC8vIFtjb252ZXJ0ZXJdIGV4dHJhY3RlZCB0Ym9keSYuaW4gdG8gdGJvZHkuY29sbGFwc2UuaW5cbn1cblxudHIuY29sbGFwc2UuaW4gICAgeyBkaXNwbGF5OiB0YWJsZS1yb3c7IH1cblxudGJvZHkuY29sbGFwc2UuaW4geyBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXA7IH1cblxuLmNvbGxhcHNpbmcge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbi1wcm9wZXJ0eShoZWlnaHQsIHZpc2liaWxpdHkpO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uLWR1cmF0aW9uKC4zNXMpO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbihlYXNlKTtcbn1cbiIsIi8vXG4vLyBEcm9wZG93biBtZW51c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBEcm9wZG93biBhcnJvdy9jYXJldFxuLmNhcmV0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW4tbGVmdDogMnB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBib3JkZXItdG9wOiAgICRjYXJldC13aWR0aC1iYXNlIGRhc2hlZDtcbiAgYm9yZGVyLXRvcDogICAkY2FyZXQtd2lkdGgtYmFzZSBzb2xpZCBcXDk7IC8vIElFOFxuICBib3JkZXItcmlnaHQ6ICRjYXJldC13aWR0aC1iYXNlIHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItbGVmdDogICRjYXJldC13aWR0aC1iYXNlIHNvbGlkIHRyYW5zcGFyZW50O1xufVxuXG4vLyBUaGUgZHJvcGRvd24gd3JhcHBlciAoZGl2KVxuLmRyb3B1cCxcbi5kcm9wZG93biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLy8gUHJldmVudCB0aGUgZm9jdXMgb24gdGhlIGRyb3Bkb3duIHRvZ2dsZSB3aGVuIGNsb3NpbmcgZHJvcGRvd25zXG4uZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcbiAgb3V0bGluZTogMDtcbn1cblxuLy8gVGhlIGRyb3Bkb3duIG1lbnUgKHVsKVxuLmRyb3Bkb3duLW1lbnUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMTAwJTtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogJHppbmRleC1kcm9wZG93bjtcbiAgZGlzcGxheTogbm9uZTsgLy8gbm9uZSBieSBkZWZhdWx0LCBidXQgYmxvY2sgb24gXCJvcGVuXCIgb2YgdGhlIG1lbnVcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1pbi13aWR0aDogMTYwcHg7XG4gIHBhZGRpbmc6IDVweCAwO1xuICBtYXJnaW46IDJweCAwIDA7IC8vIG92ZXJyaWRlIGRlZmF1bHQgdWxcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLWJhc2U7XG4gIHRleHQtYWxpZ246IGxlZnQ7IC8vIEVuc3VyZXMgcHJvcGVyIGFsaWdubWVudCBpZiBwYXJlbnQgaGFzIGl0IGNoYW5nZWQgKGUuZy4sIG1vZGFsIGZvb3RlcilcbiAgYmFja2dyb3VuZC1jb2xvcjogJGRyb3Bkb3duLWJnO1xuICBib3JkZXI6IDFweCBzb2xpZCAkZHJvcGRvd24tZmFsbGJhY2stYm9yZGVyOyAvLyBJRTggZmFsbGJhY2tcbiAgYm9yZGVyOiAxcHggc29saWQgJGRyb3Bkb3duLWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtYmFzZTtcbiAgQGluY2x1ZGUgYm94LXNoYWRvdygwIDZweCAxMnB4IHJnYmEoMCwwLDAsLjE3NSkpO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuXG4gIC8vIEFsaWducyB0aGUgZHJvcGRvd24gbWVudSB0byByaWdodFxuICAvL1xuICAvLyBEZXByZWNhdGVkIGFzIG9mIDMuMS4wIGluIGZhdm9yIG9mIGAuZHJvcGRvd24tbWVudS1bZGlyXWBcbiAgJi5wdWxsLXJpZ2h0IHtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiBhdXRvO1xuICB9XG5cbiAgLy8gRGl2aWRlcnMgKGJhc2ljYWxseSBhbiBocikgd2l0aGluIHRoZSBkcm9wZG93blxuICAuZGl2aWRlciB7XG4gICAgQGluY2x1ZGUgbmF2LWRpdmlkZXIoJGRyb3Bkb3duLWRpdmlkZXItYmcpO1xuICB9XG5cbiAgLy8gTGlua3Mgd2l0aGluIHRoZSBkcm9wZG93biBtZW51XG4gID4gbGkgPiBhIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAzcHggMjBweDtcbiAgICBjbGVhcjogYm90aDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgICBjb2xvcjogJGRyb3Bkb3duLWxpbmstY29sb3I7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgLy8gcHJldmVudCBsaW5rcyBmcm9tIHJhbmRvbWx5IGJyZWFraW5nIG9udG8gbmV3IGxpbmVzXG4gIH1cbn1cblxuLy8gSG92ZXIvRm9jdXMgc3RhdGVcbi5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHtcbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGNvbG9yOiAkZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJvcGRvd24tbGluay1ob3Zlci1iZztcbiAgfVxufVxuXG4vLyBBY3RpdmUgc3RhdGVcbi5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGEge1xuICAmLFxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICBjb2xvcjogJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRkcm9wZG93bi1saW5rLWFjdGl2ZS1iZztcbiAgfVxufVxuXG4vLyBEaXNhYmxlZCBzdGF0ZVxuLy9cbi8vIEdyYXkgb3V0IHRleHQgYW5kIGVuc3VyZSB0aGUgaG92ZXIvZm9jdXMgc3RhdGUgcmVtYWlucyBncmF5XG5cbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYSB7XG4gICYsXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiAkZHJvcGRvd24tbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgfVxuXG4gIC8vIE51a2UgaG92ZXIvZm9jdXMgZWZmZWN0c1xuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgLy8gUmVtb3ZlIENTUyBncmFkaWVudFxuICAgIEBpbmNsdWRlIHJlc2V0LWZpbHRlcjtcbiAgICBjdXJzb3I6ICRjdXJzb3ItZGlzYWJsZWQ7XG4gIH1cbn1cblxuLy8gT3BlbiBzdGF0ZSBmb3IgdGhlIGRyb3Bkb3duXG4ub3BlbiB7XG4gIC8vIFNob3cgdGhlIG1lbnVcbiAgPiAuZHJvcGRvd24tbWVudSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICAvLyBSZW1vdmUgdGhlIG91dGxpbmUgd2hlbiA6Zm9jdXMgaXMgdHJpZ2dlcmVkXG4gID4gYSB7XG4gICAgb3V0bGluZTogMDtcbiAgfVxufVxuXG4vLyBNZW51IHBvc2l0aW9uaW5nXG4vL1xuLy8gQWRkIGV4dHJhIGNsYXNzIHRvIGAuZHJvcGRvd24tbWVudWAgdG8gZmxpcCB0aGUgYWxpZ25tZW50IG9mIHRoZSBkcm9wZG93blxuLy8gbWVudSB3aXRoIHRoZSBwYXJlbnQuXG4uZHJvcGRvd24tbWVudS1yaWdodCB7XG4gIGxlZnQ6IGF1dG87IC8vIFJlc2V0IHRoZSBkZWZhdWx0IGZyb20gYC5kcm9wZG93bi1tZW51YFxuICByaWdodDogMDtcbn1cbi8vIFdpdGggdjMsIHdlIGVuYWJsZWQgYXV0by1mbGlwcGluZyBpZiB5b3UgaGF2ZSBhIGRyb3Bkb3duIHdpdGhpbiBhIHJpZ2h0XG4vLyBhbGlnbmVkIG5hdiBjb21wb25lbnQuIFRvIGVuYWJsZSB0aGUgdW5kb2luZyBvZiB0aGF0LCB3ZSBwcm92aWRlIGFuIG92ZXJyaWRlXG4vLyB0byByZXN0b3JlIHRoZSBkZWZhdWx0IGRyb3Bkb3duIG1lbnUgYWxpZ25tZW50LlxuLy9cbi8vIFRoaXMgaXMgb25seSBmb3IgbGVmdC1hbGlnbmluZyBhIGRyb3Bkb3duIG1lbnUgd2l0aGluIGEgYC5uYXZiYXItcmlnaHRgIG9yXG4vLyBgLnB1bGwtcmlnaHRgIG5hdiBjb21wb25lbnQuXG4uZHJvcGRvd24tbWVudS1sZWZ0IHtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IGF1dG87XG59XG5cbi8vIERyb3Bkb3duIHNlY3Rpb24gaGVhZGVyc1xuLmRyb3Bkb3duLWhlYWRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAzcHggMjBweDtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG4gIGNvbG9yOiAkZHJvcGRvd24taGVhZGVyLWNvbG9yO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwOyAvLyBhcyB3aXRoID4gbGkgPiBhXG59XG5cbi8vIEJhY2tkcm9wIHRvIGNhdGNoIGJvZHkgY2xpY2tzIG9uIG1vYmlsZSwgZXRjLlxuLmRyb3Bkb3duLWJhY2tkcm9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICB0b3A6IDA7XG4gIHotaW5kZXg6ICgkemluZGV4LWRyb3Bkb3duIC0gMTApO1xufVxuXG4vLyBSaWdodCBhbGlnbmVkIGRyb3Bkb3duc1xuLnB1bGwtcmlnaHQgPiAuZHJvcGRvd24tbWVudSB7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiBhdXRvO1xufVxuXG4vLyBBbGxvdyBmb3IgZHJvcGRvd25zIHRvIGdvIGJvdHRvbSB1cCAoYWthLCBkcm9wdXAtbWVudSlcbi8vXG4vLyBKdXN0IGFkZCAuZHJvcHVwIGFmdGVyIHRoZSBzdGFuZGFyZCAuZHJvcGRvd24gY2xhc3MgYW5kIHlvdSdyZSBzZXQsIGJyby5cbi8vIFRPRE86IGFic3RyYWN0IHRoaXMgc28gdGhhdCB0aGUgbmF2YmFyIGZpeGVkIHN0eWxlcyBhcmUgbm90IHBsYWNlZCBoZXJlP1xuXG4uZHJvcHVwLFxuLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIHtcbiAgLy8gUmV2ZXJzZSB0aGUgY2FyZXRcbiAgLmNhcmV0IHtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1ib3R0b206ICRjYXJldC13aWR0aC1iYXNlIGRhc2hlZDtcbiAgICBib3JkZXItYm90dG9tOiAkY2FyZXQtd2lkdGgtYmFzZSBzb2xpZCBcXDk7IC8vIElFOFxuICAgIGNvbnRlbnQ6IFwiXCI7XG4gIH1cbiAgLy8gRGlmZmVyZW50IHBvc2l0aW9uaW5nIGZvciBib3R0b20gdXAgbWVudVxuICAuZHJvcGRvd24tbWVudSB7XG4gICAgdG9wOiBhdXRvO1xuICAgIGJvdHRvbTogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAycHg7XG4gIH1cbn1cblxuXG4vLyBDb21wb25lbnQgYWxpZ25tZW50XG4vL1xuLy8gUmVpdGVyYXRlIHBlciBuYXZiYXIubGVzcyBhbmQgdGhlIG1vZGlmaWVkIGNvbXBvbmVudCBhbGlnbm1lbnQgdGhlcmUuXG5cbkBtZWRpYSAobWluLXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gIC5uYXZiYXItcmlnaHQge1xuICAgIC5kcm9wZG93bi1tZW51IHtcbiAgICAgIHJpZ2h0OiAwOyBsZWZ0OiBhdXRvO1xuICAgIH1cbiAgICAvLyBOZWNlc3NhcnkgZm9yIG92ZXJyaWRlcyBvZiB0aGUgZGVmYXVsdCByaWdodCBhbGlnbmVkIG1lbnUuXG4gICAgLy8gV2lsbCByZW1vdmUgY29tZSB2NCBpbiBhbGwgbGlrZWxpaG9vZC5cbiAgICAuZHJvcGRvd24tbWVudS1sZWZ0IHtcbiAgICAgIGxlZnQ6IDA7IHJpZ2h0OiBhdXRvO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gSG9yaXpvbnRhbCBkaXZpZGVyc1xuLy9cbi8vIERpdmlkZXJzIChiYXNpY2FsbHkgYW4gaHIpIHdpdGhpbiBkcm9wZG93bnMgYW5kIG5hdiBsaXN0c1xuXG5AbWl4aW4gbmF2LWRpdmlkZXIoJGNvbG9yOiAjZTVlNWU1KSB7XG4gIGhlaWdodDogMXB4O1xuICBtYXJnaW46ICgoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMikgLSAxKSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG59XG4iLCIvLyBSZXNldCBmaWx0ZXJzIGZvciBJRVxuLy9cbi8vIFdoZW4geW91IG5lZWQgdG8gcmVtb3ZlIGEgZ3JhZGllbnQgYmFja2dyb3VuZCwgZG8gbm90IGZvcmdldCB0byB1c2UgdGhpcyB0byByZXNldFxuLy8gdGhlIElFIGZpbHRlciBmb3IgSUU5IGFuZCBiZWxvdy5cblxuQG1peGluIHJlc2V0LWZpbHRlcigpIHtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZCA9IGZhbHNlKTtcbn1cbiIsIi8vXG4vLyBCdXR0b24gZ3JvdXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBNYWtlIHRoZSBkaXYgYmVoYXZlIGxpa2UgYSBidXR0b25cbi5idG4tZ3JvdXAsXG4uYnRuLWdyb3VwLXZlcnRpY2FsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IC8vIG1hdGNoIC5idG4gYWxpZ25tZW50IGdpdmVuIGZvbnQtc2l6ZSBoYWNrIGFib3ZlXG4gID4gLmJ0biB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIC8vIEJyaW5nIHRoZSBcImFjdGl2ZVwiIGJ1dHRvbiB0byB0aGUgZnJvbnRcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMsXG4gICAgJjphY3RpdmUsXG4gICAgJi5hY3RpdmUge1xuICAgICAgei1pbmRleDogMjtcbiAgICB9XG4gIH1cbn1cblxuLy8gUHJldmVudCBkb3VibGUgYm9yZGVycyB3aGVuIGJ1dHRvbnMgYXJlIG5leHQgdG8gZWFjaCBvdGhlclxuLmJ0bi1ncm91cCB7XG4gIC5idG4gKyAuYnRuLFxuICAuYnRuICsgLmJ0bi1ncm91cCxcbiAgLmJ0bi1ncm91cCArIC5idG4sXG4gIC5idG4tZ3JvdXAgKyAuYnRuLWdyb3VwIHtcbiAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgfVxufVxuXG4vLyBPcHRpb25hbDogR3JvdXAgbXVsdGlwbGUgYnV0dG9uIGdyb3VwcyB0b2dldGhlciBmb3IgYSB0b29sYmFyXG4uYnRuLXRvb2xiYXIge1xuICBtYXJnaW4tbGVmdDogLTVweDsgLy8gT2Zmc2V0IHRoZSBmaXJzdCBjaGlsZCdzIG1hcmdpblxuICBAaW5jbHVkZSBjbGVhcmZpeDtcblxuICAuYnRuLFxuICAuYnRuLWdyb3VwLFxuICAuaW5wdXQtZ3JvdXAge1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG4gID4gLmJ0bixcbiAgPiAuYnRuLWdyb3VwLFxuICA+IC5pbnB1dC1ncm91cCB7XG4gICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgfVxufVxuXG4uYnRuLWdyb3VwID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbi8vIFNldCBjb3JuZXJzIGluZGl2aWR1YWwgYmVjYXVzZSBzb21ldGltZXMgYSBzaW5nbGUgYnV0dG9uIGNhbiBiZSBpbiBhIC5idG4tZ3JvdXAgYW5kIHdlIG5lZWQgOmZpcnN0LWNoaWxkIGFuZCA6bGFzdC1jaGlsZCB0byBib3RoIG1hdGNoXG4uYnRuLWdyb3VwID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xuICAmOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpIHtcbiAgICBAaW5jbHVkZSBib3JkZXItcmlnaHQtcmFkaXVzKDApO1xuICB9XG59XG4vLyBOZWVkIC5kcm9wZG93bi10b2dnbGUgc2luY2UgOmxhc3QtY2hpbGQgZG9lc24ndCBhcHBseSBnaXZlbiBhIC5kcm9wZG93bi1tZW51IGltbWVkaWF0ZWx5IGFmdGVyIGl0XG4uYnRuLWdyb3VwID4gLmJ0bjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpLFxuLmJ0bi1ncm91cCA+IC5kcm9wZG93bi10b2dnbGU6bm90KDpmaXJzdC1jaGlsZCkge1xuICBAaW5jbHVkZSBib3JkZXItbGVmdC1yYWRpdXMoMCk7XG59XG5cbi8vIEN1c3RvbSBlZGl0cyBmb3IgaW5jbHVkaW5nIGJ0bi1ncm91cHMgd2l0aGluIGJ0bi1ncm91cHMgKHVzZWZ1bCBmb3IgaW5jbHVkaW5nIGRyb3Bkb3duIGJ1dHRvbnMgd2l0aGluIGEgYnRuLWdyb3VwKVxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXAge1xuICBmbG9hdDogbGVmdDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkge1xuICA+IC5idG46bGFzdC1jaGlsZCxcbiAgPiAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBAaW5jbHVkZSBib3JkZXItcmlnaHQtcmFkaXVzKDApO1xuICB9XG59XG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIEBpbmNsdWRlIGJvcmRlci1sZWZ0LXJhZGl1cygwKTtcbn1cblxuLy8gT24gYWN0aXZlIGFuZCBvcGVuLCBkb24ndCBzaG93IG91dGxpbmVcbi5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUsXG4uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIG91dGxpbmU6IDA7XG59XG5cblxuLy8gU2l6aW5nXG4vL1xuLy8gUmVtaXggdGhlIGRlZmF1bHQgYnV0dG9uIHNpemluZyBjbGFzc2VzIGludG8gbmV3IG9uZXMgZm9yIGVhc2llciBtYW5pcHVsYXRpb24uXG5cbi5idG4tZ3JvdXAteHMgPiAuYnRuIHsgQGV4dGVuZCAuYnRuLXhzOyB9XG4uYnRuLWdyb3VwLXNtID4gLmJ0biB7IEBleHRlbmQgLmJ0bi1zbTsgfVxuLmJ0bi1ncm91cC1sZyA+IC5idG4geyBAZXh0ZW5kIC5idG4tbGc7IH1cblxuXG4vLyBTcGxpdCBidXR0b24gZHJvcGRvd25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEdpdmUgdGhlIGxpbmUgYmV0d2VlbiBidXR0b25zIHNvbWUgZGVwdGhcbi5idG4tZ3JvdXAgPiAuYnRuICsgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIHBhZGRpbmctbGVmdDogOHB4O1xuICBwYWRkaW5nLXJpZ2h0OiA4cHg7XG59XG4uYnRuLWdyb3VwID4gLmJ0bi1sZyArIC5kcm9wZG93bi10b2dnbGUge1xuICBwYWRkaW5nLWxlZnQ6IDEycHg7XG4gIHBhZGRpbmctcmlnaHQ6IDEycHg7XG59XG5cbi8vIFRoZSBjbGlja2FibGUgYnV0dG9uIGZvciB0b2dnbGluZyB0aGUgbWVudVxuLy8gUmVtb3ZlIHRoZSBncmFkaWVudCBhbmQgc2V0IHRoZSBzYW1lIGluc2V0IHNoYWRvdyBhcyB0aGUgOmFjdGl2ZSBzdGF0ZVxuLmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGUge1xuICBAaW5jbHVkZSBib3gtc2hhZG93KGluc2V0IDAgM3B4IDVweCByZ2JhKDAsMCwwLC4xMjUpKTtcblxuICAvLyBTaG93IG5vIHNoYWRvdyBmb3IgYC5idG4tbGlua2Agc2luY2UgaXQgaGFzIG5vIG90aGVyIGJ1dHRvbiBzdHlsZXMuXG4gICYuYnRuLWxpbmsge1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3cobm9uZSk7XG4gIH1cbn1cblxuXG4vLyBSZXBvc2l0aW9uIHRoZSBjYXJldFxuLmJ0biAuY2FyZXQge1xuICBtYXJnaW4tbGVmdDogMDtcbn1cbi8vIENhcmV0cyBpbiBvdGhlciBidXR0b24gc2l6ZXNcbi5idG4tbGcgLmNhcmV0IHtcbiAgYm9yZGVyLXdpZHRoOiAkY2FyZXQtd2lkdGgtbGFyZ2UgJGNhcmV0LXdpZHRoLWxhcmdlIDA7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG59XG4vLyBVcHNpZGUgZG93biBjYXJldHMgZm9yIC5kcm9wdXBcbi5kcm9wdXAgLmJ0bi1sZyAuY2FyZXQge1xuICBib3JkZXItd2lkdGg6IDAgJGNhcmV0LXdpZHRoLWxhcmdlICRjYXJldC13aWR0aC1sYXJnZTtcbn1cblxuXG4vLyBWZXJ0aWNhbCBidXR0b24gZ3JvdXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5idG4tZ3JvdXAtdmVydGljYWwge1xuICA+IC5idG4sXG4gID4gLmJ0bi1ncm91cCxcbiAgPiAuYnRuLWdyb3VwID4gLmJ0biB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxvYXQ6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLy8gQ2xlYXIgZmxvYXRzIHNvIGRyb3Bkb3duIG1lbnVzIGNhbiBiZSBwcm9wZXJseSBwbGFjZWRcbiAgPiAuYnRuLWdyb3VwIHtcbiAgICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgICA+IC5idG4ge1xuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgPiAuYnRuICsgLmJ0bixcbiAgPiAuYnRuICsgLmJ0bi1ncm91cCxcbiAgPiAuYnRuLWdyb3VwICsgLmJ0bixcbiAgPiAuYnRuLWdyb3VwICsgLmJ0bi1ncm91cCB7XG4gICAgbWFyZ2luLXRvcDogLTFweDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxufVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0biB7XG4gICY6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxuICAmOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYnRuLWJvcmRlci1yYWRpdXMtYmFzZTtcbiAgICBAaW5jbHVkZSBib3JkZXItYm90dG9tLXJhZGl1cygwKTtcbiAgfVxuICAmOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkge1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRidG4tYm9yZGVyLXJhZGl1cy1iYXNlO1xuICAgIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKDApO1xuICB9XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpIHtcbiAgPiAuYnRuOmxhc3QtY2hpbGQsXG4gID4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXMoMCk7XG4gIH1cbn1cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuOmZpcnN0LWNoaWxkIHtcbiAgQGluY2x1ZGUgYm9yZGVyLXRvcC1yYWRpdXMoMCk7XG59XG5cblxuLy8gSnVzdGlmaWVkIGJ1dHRvbiBncm91cHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmJ0bi1ncm91cC1qdXN0aWZpZWQge1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgd2lkdGg6IDEwMCU7XG4gIHRhYmxlLWxheW91dDogZml4ZWQ7XG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XG4gID4gLmJ0bixcbiAgPiAuYnRuLWdyb3VwIHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIHdpZHRoOiAxJTtcbiAgfVxuICA+IC5idG4tZ3JvdXAgLmJ0biB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICA+IC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUge1xuICAgIGxlZnQ6IGF1dG87XG4gIH1cbn1cblxuXG4vLyBDaGVja2JveCBhbmQgcmFkaW8gb3B0aW9uc1xuLy9cbi8vIEluIG9yZGVyIHRvIHN1cHBvcnQgdGhlIGJyb3dzZXIncyBmb3JtIHZhbGlkYXRpb24gZmVlZGJhY2ssIHBvd2VyZWQgYnkgdGhlXG4vLyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSwgd2UgaGF2ZSB0byBcImhpZGVcIiB0aGUgaW5wdXRzIHZpYSBgY2xpcGAuIFdlIGNhbm5vdCB1c2Vcbi8vIGBkaXNwbGF5OiBub25lO2Agb3IgYHZpc2liaWxpdHk6IGhpZGRlbjtgIGFzIHRoYXQgYWxzbyBoaWRlcyB0aGUgcG9wb3Zlci5cbi8vIFNpbXBseSB2aXN1YWxseSBoaWRpbmcgdGhlIGlucHV0cyB2aWEgYG9wYWNpdHlgIHdvdWxkIGxlYXZlIHRoZW0gY2xpY2thYmxlIGluXG4vLyBjZXJ0YWluIGNhc2VzIHdoaWNoIGlzIHByZXZlbnRlZCBieSB1c2luZyBgY2xpcGAgYW5kIGBwb2ludGVyLWV2ZW50c2AuXG4vLyBUaGlzIHdheSwgd2UgZW5zdXJlIGEgRE9NIGVsZW1lbnQgaXMgdmlzaWJsZSB0byBwb3NpdGlvbiB0aGUgcG9wb3ZlciBmcm9tLlxuLy9cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8xMjc5NCBhbmRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9wdWxsLzE0NTU5IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG5bZGF0YS10b2dnbGU9XCJidXR0b25zXCJdIHtcbiAgPiAuYnRuLFxuICA+IC5idG4tZ3JvdXAgPiAuYnRuIHtcbiAgICBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGNsaXA6IHJlY3QoMCwwLDAsMCk7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIFNpbmdsZSBzaWRlIGJvcmRlci1yYWRpdXNcblxuQG1peGluIGJvcmRlci10b3AtcmFkaXVzKCRyYWRpdXMpIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRyYWRpdXM7XG4gICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkcmFkaXVzO1xufVxuQG1peGluIGJvcmRlci1yaWdodC1yYWRpdXMoJHJhZGl1cykge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJHJhZGl1cztcbiAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRyYWRpdXM7XG59XG5AbWl4aW4gYm9yZGVyLWJvdHRvbS1yYWRpdXMoJHJhZGl1cykge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJHJhZGl1cztcbiAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRyYWRpdXM7XG59XG5AbWl4aW4gYm9yZGVyLWxlZnQtcmFkaXVzKCRyYWRpdXMpIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJHJhZGl1cztcbiAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHJhZGl1cztcbn1cbiIsIi8vXG4vLyBJbnB1dCBncm91cHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEJhc2Ugc3R5bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4uaW5wdXQtZ3JvdXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IC8vIEZvciBkcm9wZG93bnNcbiAgZGlzcGxheTogdGFibGU7XG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7IC8vIHByZXZlbnQgaW5wdXQgZ3JvdXBzIGZyb20gaW5oZXJpdGluZyBib3JkZXIgc3R5bGVzIGZyb20gdGFibGUgY2VsbHMgd2hlbiBwbGFjZWQgd2l0aGluIGEgdGFibGVcblxuICAvLyBVbmRvIHBhZGRpbmcgYW5kIGZsb2F0IG9mIGdyaWQgY2xhc3Nlc1xuICAmW2NsYXNzKj1cImNvbC1cIl0ge1xuICAgIGZsb2F0OiBub25lO1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG5cbiAgLmZvcm0tY29udHJvbCB7XG4gICAgLy8gRW5zdXJlIHRoYXQgdGhlIGlucHV0IGlzIGFsd2F5cyBhYm92ZSB0aGUgKmFwcGVuZGVkKiBhZGRvbiBidXR0b24gZm9yXG4gICAgLy8gcHJvcGVyIGJvcmRlciBjb2xvcnMuXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDI7XG5cbiAgICAvLyBJRTkgZnViYXJzIHRoZSBwbGFjZWhvbGRlciBhdHRyaWJ1dGUgaW4gdGV4dCBpbnB1dHMgYW5kIHRoZSBhcnJvd3Mgb25cbiAgICAvLyBzZWxlY3QgZWxlbWVudHMgaW4gaW5wdXQgZ3JvdXBzLiBUbyBmaXggaXQsIHdlIGZsb2F0IHRoZSBpbnB1dC4gRGV0YWlsczpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExNTYxI2lzc3VlY29tbWVudC0yODkzNjg1NVxuICAgIGZsb2F0OiBsZWZ0O1xuXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4vLyBTaXppbmcgb3B0aW9uc1xuLy9cbi8vIFJlbWl4IHRoZSBkZWZhdWx0IGZvcm0gY29udHJvbCBzaXppbmcgY2xhc3NlcyBpbnRvIG5ldyBvbmVzIGZvciBlYXNpZXJcbi8vIG1hbmlwdWxhdGlvbi5cblxuLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tY29udHJvbCxcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHtcbiAgQGV4dGVuZCAuaW5wdXQtbGc7XG59XG4uaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4ge1xuICBAZXh0ZW5kIC5pbnB1dC1zbTtcbn1cblxuXG4vLyBEaXNwbGF5IGFzIHRhYmxlLWNlbGxcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1idG4sXG4uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbCB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG5cbiAgJjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG59XG4vLyBBZGRvbiBhbmQgYWRkb24gd3JhcHBlciBmb3IgYnV0dG9uc1xuLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWJ0biB7XG4gIHdpZHRoOiAxJTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgLy8gTWF0Y2ggdGhlIGlucHV0c1xufVxuXG4vLyBUZXh0IGlucHV0IGdyb3Vwc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLmlucHV0LWdyb3VwLWFkZG9uIHtcbiAgcGFkZGluZzogJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCAkcGFkZGluZy1iYXNlLWhvcml6b250YWw7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1iYXNlO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICRpbnB1dC1jb2xvcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXQtZ3JvdXAtYWRkb24tYmc7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRpbnB1dC1ncm91cC1hZGRvbi1ib3JkZXItY29sb3I7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWJhc2U7XG5cbiAgLy8gU2l6aW5nXG4gICYuaW5wdXQtc20ge1xuICAgIHBhZGRpbmc6ICRwYWRkaW5nLXNtYWxsLXZlcnRpY2FsICRwYWRkaW5nLXNtYWxsLWhvcml6b250YWw7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLXNtYWxsO1xuICB9XG4gICYuaW5wdXQtbGcge1xuICAgIHBhZGRpbmc6ICRwYWRkaW5nLWxhcmdlLXZlcnRpY2FsICRwYWRkaW5nLWxhcmdlLWhvcml6b250YWw7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLWxhcmdlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWxhcmdlO1xuICB9XG5cbiAgLy8gTnVrZSBkZWZhdWx0IG1hcmdpbnMgZnJvbSBjaGVja2JveGVzIGFuZCByYWRpb3MgdG8gdmVydGljYWxseSBjZW50ZXIgd2l0aGluLlxuICBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxufVxuXG4vLyBSZXNldCByb3VuZGVkIGNvcm5lcnNcbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmZpcnN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWFkZG9uOmZpcnN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bi1ncm91cCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmRyb3Bkb3duLXRvZ2dsZSxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgQGluY2x1ZGUgYm9yZGVyLXJpZ2h0LXJhZGl1cygwKTtcbn1cbi5pbnB1dC1ncm91cC1hZGRvbjpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci1yaWdodDogMDtcbn1cbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmxhc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZCxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5kcm9wZG93bi10b2dnbGUsXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKSxcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0biB7XG4gIEBpbmNsdWRlIGJvcmRlci1sZWZ0LXJhZGl1cygwKTtcbn1cbi5pbnB1dC1ncm91cC1hZGRvbjpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLWxlZnQ6IDA7XG59XG5cbi8vIEJ1dHRvbiBpbnB1dCBncm91cHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi5pbnB1dC1ncm91cC1idG4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC8vIEphbmtpbHkgcHJldmVudCBpbnB1dCBidXR0b24gZ3JvdXBzIGZyb20gd3JhcHBpbmcgd2l0aCBgd2hpdGUtc3BhY2VgIGFuZFxuICAvLyBgZm9udC1zaXplYCBpbiBjb21iaW5hdGlvbiB3aXRoIGBpbmxpbmUtYmxvY2tgIG9uIGJ1dHRvbnMuXG4gIGZvbnQtc2l6ZTogMDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAvLyBOZWdhdGl2ZSBtYXJnaW4gZm9yIHNwYWNpbmcsIHBvc2l0aW9uIGZvciBicmluZ2luZyBob3ZlcmVkL2ZvY3VzZWQvYWN0aXZlZFxuICAvLyBlbGVtZW50IGFib3ZlIHRoZSBzaWJsaW5ncy5cbiAgPiAuYnRuIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgKyAuYnRuIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAgIH1cbiAgICAvLyBCcmluZyB0aGUgXCJhY3RpdmVcIiBidXR0b24gdG8gdGhlIGZyb250XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzLFxuICAgICY6YWN0aXZlIHtcbiAgICAgIHotaW5kZXg6IDI7XG4gICAgfVxuICB9XG5cbiAgLy8gTmVnYXRpdmUgbWFyZ2luIHRvIG9ubHkgaGF2ZSBhIDFweCBib3JkZXIgYmV0d2VlbiB0aGUgdHdvXG4gICY6Zmlyc3QtY2hpbGQge1xuICAgID4gLmJ0bixcbiAgICA+IC5idG4tZ3JvdXAge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAtMXB4O1xuICAgIH1cbiAgfVxuICAmOmxhc3QtY2hpbGQge1xuICAgID4gLmJ0bixcbiAgICA+IC5idG4tZ3JvdXAge1xuICAgICAgei1pbmRleDogMjtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIE5hdnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBjbGFzc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLm5hdiB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHBhZGRpbmctbGVmdDogMDsgLy8gT3ZlcnJpZGUgZGVmYXVsdCB1bC9vbFxuICBsaXN0LXN0eWxlOiBub25lO1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcblxuICA+IGxpIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICA+IGEge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwYWRkaW5nOiAkbmF2LWxpbmstcGFkZGluZztcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2LWxpbmstaG92ZXItYmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZWQgc3RhdGUgc2V0cyB0ZXh0IHRvIGdyYXkgYW5kIG51a2VzIGhvdmVyL3RhYiBlZmZlY3RzXG4gICAgJi5kaXNhYmxlZCA+IGEge1xuICAgICAgY29sb3I6ICRuYXYtZGlzYWJsZWQtbGluay1jb2xvcjtcblxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdi1kaXNhYmxlZC1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBjdXJzb3I6ICRjdXJzb3ItZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gT3BlbiBkcm9wZG93bnNcbiAgLm9wZW4gPiBhIHtcbiAgICAmLFxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2LWxpbmstaG92ZXItYmc7XG4gICAgICBib3JkZXItY29sb3I6ICRsaW5rLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5hdiBkaXZpZGVycyAoZGVwcmVjYXRlZCB3aXRoIHYzLjAuMSlcbiAgLy9cbiAgLy8gVGhpcyBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgaW4gdjMgd2l0aCB0aGUgZHJvcHBpbmcgb2YgYC5uYXYtbGlzdGAsIGJ1dFxuICAvLyB3ZSBtaXNzZWQgaXQuIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHRoaXMgYW55d2hlcmUsIGJ1dCBpbiB0aGUgaW50ZXJlc3RcbiAgLy8gb2YgbWFpbnRhaW5pbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpbiBjYXNlIHlvdSB1c2UgaXQsIGl0J3MgZGVwcmVjYXRlZC5cbiAgLm5hdi1kaXZpZGVyIHtcbiAgICBAaW5jbHVkZSBuYXYtZGl2aWRlcjtcbiAgfVxuXG4gIC8vIFByZXZlbnQgSUU4IGZyb20gbWlzcGxhY2luZyBpbWdzXG4gIC8vXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vaDVicC9odG1sNS1ib2lsZXJwbGF0ZS9pc3N1ZXMvOTg0I2lzc3VlY29tbWVudC0zOTg1OTg5XG4gID4gbGkgPiBhID4gaW1nIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gIH1cbn1cblxuXG4vLyBUYWJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEdpdmUgdGhlIHRhYnMgc29tZXRoaW5nIHRvIHNpdCBvblxuLm5hdi10YWJzIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRuYXYtdGFicy1ib3JkZXItY29sb3I7XG4gID4gbGkge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIC8vIE1ha2UgdGhlIGxpc3QtaXRlbXMgb3ZlcmxheSB0aGUgYm90dG9tIGJvcmRlclxuICAgIG1hcmdpbi1ib3R0b206IC0xcHg7XG5cbiAgICAvLyBBY3R1YWwgdGFicyAoYXMgbGlua3MpXG4gICAgPiBhIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMnB4O1xuICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlICRib3JkZXItcmFkaXVzLWJhc2UgMCAwO1xuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yICRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvciAkbmF2LXRhYnMtYm9yZGVyLWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFjdGl2ZSBzdGF0ZSwgYW5kIGl0cyA6aG92ZXIgdG8gb3ZlcnJpZGUgbm9ybWFsIDpob3ZlclxuICAgICYuYWN0aXZlID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdi10YWJzLWFjdGl2ZS1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2LXRhYnMtYWN0aXZlLWxpbmstaG92ZXItYmc7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRuYXYtdGFicy1hY3RpdmUtbGluay1ob3Zlci1ib3JkZXItY29sb3I7XG4gICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIHB1bGxpbmcgdGhpcyBpbiBtYWlubHkgZm9yIGxlc3Mgc2hvcnRoYW5kXG4gICYubmF2LWp1c3RpZmllZCB7XG4gICAgQGV4dGVuZCAubmF2LWp1c3RpZmllZDtcbiAgICBAZXh0ZW5kIC5uYXYtdGFicy1qdXN0aWZpZWQ7XG4gIH1cbn1cblxuXG4vLyBQaWxsc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLm5hdi1waWxscyB7XG4gID4gbGkge1xuICAgIGZsb2F0OiBsZWZ0O1xuXG4gICAgLy8gTGlua3MgcmVuZGVyZWQgYXMgcGlsbHNcbiAgICA+IGEge1xuICAgICAgYm9yZGVyLXJhZGl1czogJG5hdi1waWxscy1ib3JkZXItcmFkaXVzO1xuICAgIH1cbiAgICArIGxpIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAycHg7XG4gICAgfVxuXG4gICAgLy8gQWN0aXZlIHN0YXRlXG4gICAgJi5hY3RpdmUgPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkbmF2LXBpbGxzLWFjdGl2ZS1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2LXBpbGxzLWFjdGl2ZS1saW5rLWhvdmVyLWJnO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi8vIFN0YWNrZWQgcGlsbHNcbi5uYXYtc3RhY2tlZCB7XG4gID4gbGkge1xuICAgIGZsb2F0OiBub25lO1xuICAgICsgbGkge1xuICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7IC8vIG5vIG5lZWQgZm9yIHRoaXMgZ2FwIGJldHdlZW4gbmF2IGl0ZW1zXG4gICAgfVxuICB9XG59XG5cblxuLy8gTmF2IHZhcmlhdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEp1c3RpZmllZCBuYXYgbGlua3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLm5hdi1qdXN0aWZpZWQge1xuICB3aWR0aDogMTAwJTtcblxuICA+IGxpIHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICA+IGEge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICAgIH1cbiAgfVxuXG4gID4gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHtcbiAgICB0b3A6IGF1dG87XG4gICAgbGVmdDogYXV0bztcbiAgfVxuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgID4gbGkge1xuICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICAgIHdpZHRoOiAxJTtcbiAgICAgID4gYSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIE1vdmUgYm9yZGVycyB0byBhbmNob3JzIGluc3RlYWQgb2YgYm90dG9tIG9mIGxpc3Rcbi8vXG4vLyBNaXhpbiBmb3IgYWRkaW5nIG9uIHRvcCB0aGUgc2hhcmVkIGAubmF2LWp1c3RpZmllZGAgc3R5bGVzIGZvciBvdXIgdGFic1xuLm5hdi10YWJzLWp1c3RpZmllZCB7XG4gIGJvcmRlci1ib3R0b206IDA7XG5cbiAgPiBsaSA+IGEge1xuICAgIC8vIE92ZXJyaWRlIG1hcmdpbiBmcm9tIC5uYXYtdGFic1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuICB9XG5cbiAgPiAuYWN0aXZlID4gYSxcbiAgPiAuYWN0aXZlID4gYTpob3ZlcixcbiAgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJG5hdi10YWJzLWp1c3RpZmllZC1saW5rLWJvcmRlci1jb2xvcjtcbiAgfVxuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgID4gbGkgPiBhIHtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkbmF2LXRhYnMtanVzdGlmaWVkLWxpbmstYm9yZGVyLWNvbG9yO1xuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtYmFzZSAkYm9yZGVyLXJhZGl1cy1iYXNlIDAgMDtcbiAgICB9XG4gICAgPiAuYWN0aXZlID4gYSxcbiAgICA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuICAgID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJG5hdi10YWJzLWp1c3RpZmllZC1hY3RpdmUtbGluay1ib3JkZXItY29sb3I7XG4gICAgfVxuICB9XG59XG5cblxuLy8gVGFiYmFibGUgdGFic1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBIaWRlIHRhYmJhYmxlIHBhbmVzIHRvIHN0YXJ0LCBzaG93IHRoZW0gd2hlbiBgLmFjdGl2ZWBcbi50YWItY29udGVudCB7XG4gID4gLnRhYi1wYW5lIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gID4gLmFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cblxuXG4vLyBEcm9wZG93bnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU3BlY2lmaWMgZHJvcGRvd25zXG4ubmF2LXRhYnMgLmRyb3Bkb3duLW1lbnUge1xuICAvLyBtYWtlIGRyb3Bkb3duIGJvcmRlciBvdmVybGFwIHRhYiBib3JkZXJcbiAgbWFyZ2luLXRvcDogLTFweDtcbiAgLy8gUmVtb3ZlIHRoZSB0b3Agcm91bmRlZCBjb3JuZXJzIGhlcmUgc2luY2UgdGhlcmUgaXMgYSBoYXJkIGVkZ2UgYWJvdmUgdGhlIG1lbnVcbiAgQGluY2x1ZGUgYm9yZGVyLXRvcC1yYWRpdXMoMCk7XG59XG4iLCIvL1xuLy8gTmF2YmFyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBXcmFwcGVyIGFuZCBiYXNlIGNsYXNzXG4vL1xuLy8gUHJvdmlkZSBhIHN0YXRpYyBuYXZiYXIgZnJvbSB3aGljaCB3ZSBleHBhbmQgdG8gY3JlYXRlIGZ1bGwtd2lkdGgsIGZpeGVkLCBhbmRcbi8vIG90aGVyIG5hdmJhciB2YXJpYXRpb25zLlxuXG4ubmF2YmFyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAkbmF2YmFyLWhlaWdodDsgLy8gRW5zdXJlIGEgbmF2YmFyIGFsd2F5cyBzaG93cyAoZS5nLiwgd2l0aG91dCBhIC5uYXZiYXItYnJhbmQgaW4gY29sbGFwc2VkIG1vZGUpXG4gIG1hcmdpbi1ib3R0b206ICRuYXZiYXItbWFyZ2luLWJvdHRvbTtcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG5cbiAgLy8gUHJldmVudCBmbG9hdHMgZnJvbSBicmVha2luZyB0aGUgbmF2YmFyXG4gIEBpbmNsdWRlIGNsZWFyZml4O1xuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgYm9yZGVyLXJhZGl1czogJG5hdmJhci1ib3JkZXItcmFkaXVzO1xuICB9XG59XG5cblxuLy8gTmF2YmFyIGhlYWRpbmdcbi8vXG4vLyBHcm91cHMgYC5uYXZiYXItYnJhbmRgIGFuZCBgLm5hdmJhci10b2dnbGVgIGludG8gYSBzaW5nbGUgY29tcG9uZW50IGZvciBlYXN5XG4vLyBzdHlsaW5nIG9mIHJlc3BvbnNpdmUgYXNwZWN0cy5cblxuLm5hdmJhci1oZWFkZXIge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcblxuICBAbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG59XG5cblxuLy8gTmF2YmFyIGNvbGxhcHNlIChib2R5KVxuLy9cbi8vIEdyb3VwIHlvdXIgbmF2YmFyIGNvbnRlbnQgaW50byB0aGlzIGZvciBlYXN5IGNvbGxhcHNpbmcgYW5kIGV4cGFuZGluZyBhY3Jvc3Ncbi8vIHZhcmlvdXMgZGV2aWNlIHNpemVzLiBCeSBkZWZhdWx0LCB0aGlzIGNvbnRlbnQgaXMgY29sbGFwc2VkIHdoZW4gPDc2OHB4LCBidXRcbi8vIHdpbGwgZXhwYW5kIHBhc3QgdGhhdCBmb3IgYSBob3Jpem9udGFsIGRpc3BsYXkuXG4vL1xuLy8gVG8gc3RhcnQgKG9uIG1vYmlsZSBkZXZpY2VzKSB0aGUgbmF2YmFyIGxpbmtzLCBmb3JtcywgYW5kIGJ1dHRvbnMgYXJlIHN0YWNrZWRcbi8vIHZlcnRpY2FsbHkgYW5kIGluY2x1ZGUgYSBgbWF4LWhlaWdodGAgdG8gb3ZlcmZsb3cgaW4gY2FzZSB5b3UgaGF2ZSB0b28gbXVjaFxuLy8gY29udGVudCBmb3IgdGhlIHVzZXIncyB2aWV3cG9ydC5cblxuLm5hdmJhci1jb2xsYXBzZSB7XG4gIG92ZXJmbG93LXg6IHZpc2libGU7XG4gIHBhZGRpbmctcmlnaHQ6ICRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICBwYWRkaW5nLWxlZnQ6ICAkbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsLjEpO1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuXG4gICYuaW4ge1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gIH1cblxuICBAbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcblxuICAgICYuY29sbGFwc2Uge1xuICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xuICAgICAgcGFkZGluZy1ib3R0b206IDA7IC8vIE92ZXJyaWRlIGRlZmF1bHQgc2V0dGluZ1xuICAgICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAmLmluIHtcbiAgICAgIG92ZXJmbG93LXk6IHZpc2libGU7XG4gICAgfVxuXG4gICAgLy8gVW5kbyB0aGUgY29sbGFwc2Ugc2lkZSBwYWRkaW5nIGZvciBuYXZiYXJzIHdpdGggY29udGFpbmVycyB0byBlbnN1cmVcbiAgICAvLyBhbGlnbm1lbnQgb2YgcmlnaHQtYWxpZ25lZCBjb250ZW50cy5cbiAgICAubmF2YmFyLWZpeGVkLXRvcCAmLFxuICAgIC5uYXZiYXItc3RhdGljLXRvcCAmLFxuICAgIC5uYXZiYXItZml4ZWQtYm90dG9tICYge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICB9XG4gIH1cbn1cblxuLm5hdmJhci1maXhlZC10b3AsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSB7XG4gIC5uYXZiYXItY29sbGFwc2Uge1xuICAgIG1heC1oZWlnaHQ6ICRuYXZiYXItY29sbGFwc2UtbWF4LWhlaWdodDtcblxuICAgIEBtZWRpYSAobWF4LWRldmljZS13aWR0aDogJHNjcmVlbi14cy1taW4pIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgbWF4LWhlaWdodDogMjAwcHg7XG4gICAgfVxuICB9XG59XG5cblxuLy8gQm90aCBuYXZiYXIgaGVhZGVyIGFuZCBjb2xsYXBzZVxuLy9cbi8vIFdoZW4gYSBjb250YWluZXIgaXMgcHJlc2VudCwgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgaGVhZGVyIGFuZCBjb2xsYXBzZS5cblxuLmNvbnRhaW5lcixcbi5jb250YWluZXItZmx1aWQge1xuICA+IC5uYXZiYXItaGVhZGVyLFxuICA+IC5uYXZiYXItY29sbGFwc2Uge1xuICAgIG1hcmdpbi1yaWdodDogLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICAgIG1hcmdpbi1sZWZ0OiAgLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuXG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAgMDtcbiAgICB9XG4gIH1cbn1cblxuXG4vL1xuLy8gTmF2YmFyIGFsaWdubWVudCBvcHRpb25zXG4vL1xuLy8gRGlzcGxheSB0aGUgbmF2YmFyIGFjcm9zcyB0aGUgZW50aXJldHkgb2YgdGhlIHBhZ2Ugb3IgZml4ZWQgaXQgdG8gdGhlIHRvcCBvclxuLy8gYm90dG9tIG9mIHRoZSBwYWdlLlxuXG4vLyBTdGF0aWMgdG9wICh1bmZpeGVkLCBidXQgMTAwJSB3aWRlKSBuYXZiYXJcbi5uYXZiYXItc3RhdGljLXRvcCB7XG4gIHotaW5kZXg6ICR6aW5kZXgtbmF2YmFyO1xuICBib3JkZXItd2lkdGg6IDAgMCAxcHg7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG59XG5cbi8vIEZpeCB0aGUgdG9wL2JvdHRvbSBuYXZiYXJzIHdoZW4gc2NyZWVuIHJlYWwgZXN0YXRlIHN1cHBvcnRzIGl0XG4ubmF2YmFyLWZpeGVkLXRvcCxcbi5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICByaWdodDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogJHppbmRleC1uYXZiYXItZml4ZWQ7XG5cbiAgLy8gVW5kbyB0aGUgcm91bmRlZCBjb3JuZXJzXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxufVxuLm5hdmJhci1maXhlZC10b3Age1xuICB0b3A6IDA7XG4gIGJvcmRlci13aWR0aDogMCAwIDFweDtcbn1cbi5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgYm90dG9tOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwOyAvLyBvdmVycmlkZSAubmF2YmFyIGRlZmF1bHRzXG4gIGJvcmRlci13aWR0aDogMXB4IDAgMDtcbn1cblxuXG4vLyBCcmFuZC9wcm9qZWN0IG5hbWVcblxuLm5hdmJhci1icmFuZCB7XG4gIGZsb2F0OiBsZWZ0O1xuICBwYWRkaW5nOiAkbmF2YmFyLXBhZGRpbmctdmVydGljYWwgJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1sYXJnZTtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgaGVpZ2h0OiAkbmF2YmFyLWhlaWdodDtcblxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cblxuICA+IGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICBAbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIC5uYXZiYXIgPiAuY29udGFpbmVyICYsXG4gICAgLm5hdmJhciA+IC5jb250YWluZXItZmx1aWQgJiB7XG4gICAgICBtYXJnaW4tbGVmdDogLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIE5hdmJhciB0b2dnbGVcbi8vXG4vLyBDdXN0b20gYnV0dG9uIGZvciB0b2dnbGluZyB0aGUgYC5uYXZiYXItY29sbGFwc2VgLCBwb3dlcmVkIGJ5IHRoZSBjb2xsYXBzZVxuLy8gSmF2YVNjcmlwdCBwbHVnaW4uXG5cbi5uYXZiYXItdG9nZ2xlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbG9hdDogcmlnaHQ7XG4gIG1hcmdpbi1yaWdodDogJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gIHBhZGRpbmc6IDlweCAxMHB4O1xuICBAaW5jbHVkZSBuYXZiYXItdmVydGljYWwtYWxpZ24oMzRweCk7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOyAvLyBSZXNldCB1bnVzdWFsIEZpcmVmb3gtb24tQW5kcm9pZCBkZWZhdWx0IHN0eWxlOyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcy9pc3N1ZXMvMjE0XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuXG4gIC8vIFdlIHJlbW92ZSB0aGUgYG91dGxpbmVgIGhlcmUsIGJ1dCBsYXRlciBjb21wZW5zYXRlIGJ5IGF0dGFjaGluZyBgOmhvdmVyYFxuICAvLyBzdHlsZXMgdG8gYDpmb2N1c2AuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7XG4gIH1cblxuICAvLyBCYXJzXG4gIC5pY29uLWJhciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDIycHg7XG4gICAgaGVpZ2h0OiAycHg7XG4gICAgYm9yZGVyLXJhZGl1czogMXB4O1xuICB9XG4gIC5pY29uLWJhciArIC5pY29uLWJhciB7XG4gICAgbWFyZ2luLXRvcDogNHB4O1xuICB9XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cblxuLy8gTmF2YmFyIG5hdiBsaW5rc1xuLy9cbi8vIEJ1aWxkcyBvbiB0b3Agb2YgdGhlIGAubmF2YCBjb21wb25lbnRzIHdpdGggaXRzIG93biBtb2RpZmllciBjbGFzcyB0byBtYWtlXG4vLyB0aGUgbmF2IHRoZSBmdWxsIGhlaWdodCBvZiB0aGUgaG9yaXpvbnRhbCBuYXYgKGFib3ZlIDc2OHB4KS5cblxuLm5hdmJhci1uYXYge1xuICBtYXJnaW46ICgkbmF2YmFyLXBhZGRpbmctdmVydGljYWwgLyAyKSAoLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsKTtcblxuICA+IGxpID4gYSB7XG4gICAgcGFkZGluZy10b3A6ICAgIDEwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDEwcHg7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50LW1heCkge1xuICAgIC8vIERyb3Bkb3ducyBnZXQgY3VzdG9tIGRpc3BsYXkgd2hlbiBjb2xsYXBzZWRcbiAgICAub3BlbiAuZHJvcGRvd24tbWVudSB7XG4gICAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICA+IGxpID4gYSxcbiAgICAgIC5kcm9wZG93bi1oZWFkZXIge1xuICAgICAgICBwYWRkaW5nOiA1cHggMTVweCA1cHggMjVweDtcbiAgICAgIH1cbiAgICAgID4gbGkgPiBhIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgICAgICAgJjpob3ZlcixcbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFVuY29sbGFwc2UgdGhlIG5hdlxuICBAbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbjogMDtcblxuICAgID4gbGkge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICA+IGEge1xuICAgICAgICBwYWRkaW5nLXRvcDogICAgJG5hdmJhci1wYWRkaW5nLXZlcnRpY2FsO1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogJG5hdmJhci1wYWRkaW5nLXZlcnRpY2FsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi8vIE5hdmJhciBmb3JtXG4vL1xuLy8gRXh0ZW5zaW9uIG9mIHRoZSBgLmZvcm0taW5saW5lYCB3aXRoIHNvbWUgZXh0cmEgZmxhdm9yIGZvciBvcHRpbXVtIGRpc3BsYXkgaW5cbi8vIG91ciBuYXZiYXJzLlxuXG4ubmF2YmFyLWZvcm0ge1xuICBtYXJnaW4tbGVmdDogLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICBtYXJnaW4tcmlnaHQ6IC0kbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgcGFkZGluZzogMTBweCAkbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICRzaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuMSksIDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuMSk7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3coJHNoYWRvdyk7XG5cbiAgLy8gTWl4aW4gYmVoYXZpb3IgZm9yIG9wdGltdW0gZGlzcGxheVxuICBAaW5jbHVkZSBmb3JtLWlubGluZTtcblxuICAuZm9ybS1ncm91cCB7XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQtbWF4KSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVmVydGljYWxseSBjZW50ZXIgaW4gZXhwYW5kZWQsIGhvcml6b250YWwgbmF2YmFyXG4gIEBpbmNsdWRlIG5hdmJhci12ZXJ0aWNhbC1hbGlnbigkaW5wdXQtaGVpZ2h0LWJhc2UpO1xuXG4gIC8vIFVuZG8gMTAwJSB3aWR0aCBmb3IgcHVsbCBjbGFzc2VzXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgYm9yZGVyOiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93KG5vbmUpO1xuICB9XG59XG5cblxuLy8gRHJvcGRvd24gbWVudXNcblxuLy8gTWVudSBwb3NpdGlvbiBhbmQgbWVudSBjYXJldHNcbi5uYXZiYXItbmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudSB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKDApO1xufVxuLy8gTWVudSBwb3NpdGlvbiBhbmQgbWVudSBjYXJldCBzdXBwb3J0IGZvciBkcm9wdXBzIHZpYSBleHRyYSBkcm9wdXAgY2xhc3Ncbi5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItbmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKCRuYXZiYXItYm9yZGVyLXJhZGl1cyk7XG4gIEBpbmNsdWRlIGJvcmRlci1ib3R0b20tcmFkaXVzKDApO1xufVxuXG5cbi8vIEJ1dHRvbnMgaW4gbmF2YmFyc1xuLy9cbi8vIFZlcnRpY2FsbHkgY2VudGVyIGEgYnV0dG9uIHdpdGhpbiBhIG5hdmJhciAod2hlbiAqbm90KiBpbiBhIGZvcm0pLlxuXG4ubmF2YmFyLWJ0biB7XG4gIEBpbmNsdWRlIG5hdmJhci12ZXJ0aWNhbC1hbGlnbigkaW5wdXQtaGVpZ2h0LWJhc2UpO1xuXG4gICYuYnRuLXNtIHtcbiAgICBAaW5jbHVkZSBuYXZiYXItdmVydGljYWwtYWxpZ24oJGlucHV0LWhlaWdodC1zbWFsbCk7XG4gIH1cbiAgJi5idG4teHMge1xuICAgIEBpbmNsdWRlIG5hdmJhci12ZXJ0aWNhbC1hbGlnbigyMik7XG4gIH1cbn1cblxuXG4vLyBUZXh0IGluIG5hdmJhcnNcbi8vXG4vLyBBZGQgYSBjbGFzcyB0byBtYWtlIGFueSBlbGVtZW50IHByb3Blcmx5IGFsaWduIGl0c2VsZiB2ZXJ0aWNhbGx5IHdpdGhpbiB0aGUgbmF2YmFycy5cblxuLm5hdmJhci10ZXh0IHtcbiAgQGluY2x1ZGUgbmF2YmFyLXZlcnRpY2FsLWFsaWduKCRsaW5lLWhlaWdodC1jb21wdXRlZCk7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tbGVmdDogJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gICAgbWFyZ2luLXJpZ2h0OiAkbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgfVxufVxuXG5cbi8vIENvbXBvbmVudCBhbGlnbm1lbnRcbi8vXG4vLyBSZXB1cnBvc2UgdGhlIHB1bGwgdXRpbGl0aWVzIGFzIHRoZWlyIG93biBuYXZiYXIgdXRpbGl0aWVzIHRvIGF2b2lkIHNwZWNpZmljaXR5XG4vLyBpc3N1ZXMgd2l0aCBwYXJlbnRzIGFuZCBjaGFpbmluZy4gT25seSBkbyB0aGlzIHdoZW4gdGhlIG5hdmJhciBpcyB1bmNvbGxhcHNlZFxuLy8gdGhvdWdoIHNvIHRoYXQgbmF2YmFyIGNvbnRlbnRzIHByb3Blcmx5IHN0YWNrIGFuZCBhbGlnbiBpbiBtb2JpbGUuXG4vL1xuLy8gRGVjbGFyZWQgYWZ0ZXIgdGhlIG5hdmJhciBjb21wb25lbnRzIHRvIGVuc3VyZSBtb3JlIHNwZWNpZmljaXR5IG9uIHRoZSBtYXJnaW5zLlxuXG5AbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAubmF2YmFyLWxlZnQge1xuICAgIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm5hdmJhci1yaWdodCB7XG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XG4gIG1hcmdpbi1yaWdodDogLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuXG4gICAgfiAubmF2YmFyLXJpZ2h0IHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBBbHRlcm5hdGUgbmF2YmFyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gRGVmYXVsdCBuYXZiYXJcbi5uYXZiYXItZGVmYXVsdCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC1iZztcbiAgYm9yZGVyLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtYm9yZGVyO1xuXG4gIC5uYXZiYXItYnJhbmQge1xuICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtYnJhbmQtY29sb3I7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtYnJhbmQtaG92ZXItY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtYnJhbmQtaG92ZXItYmc7XG4gICAgfVxuICB9XG5cbiAgLm5hdmJhci10ZXh0IHtcbiAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWNvbG9yO1xuICB9XG5cbiAgLm5hdmJhci1uYXYge1xuICAgID4gbGkgPiBhIHtcbiAgICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1jb2xvcjtcblxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWhvdmVyLWJnO1xuICAgICAgfVxuICAgIH1cbiAgICA+IC5hY3RpdmUgPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1hY3RpdmUtY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1iZztcbiAgICAgIH1cbiAgICB9XG4gICAgPiAuZGlzYWJsZWQgPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstZGlzYWJsZWQtYmc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm5hdmJhci10b2dnbGUge1xuICAgIGJvcmRlci1jb2xvcjogJG5hdmJhci1kZWZhdWx0LXRvZ2dsZS1ib3JkZXItY29sb3I7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC10b2dnbGUtaG92ZXItYmc7XG4gICAgfVxuICAgIC5pY29uLWJhciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtdG9nZ2xlLWljb24tYmFyLWJnO1xuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItY29sbGFwc2UsXG4gIC5uYXZiYXItZm9ybSB7XG4gICAgYm9yZGVyLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtYm9yZGVyO1xuICB9XG5cbiAgLy8gRHJvcGRvd24gbWVudSBpdGVtc1xuICAubmF2YmFyLW5hdiB7XG4gICAgLy8gUmVtb3ZlIGJhY2tncm91bmQgY29sb3IgZnJvbSBvcGVuIGRyb3Bkb3duXG4gICAgPiAub3BlbiA+IGEge1xuICAgICAgJixcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWJnO1xuICAgICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50LW1heCkge1xuICAgICAgLy8gRHJvcGRvd25zIGdldCBjdXN0b20gZGlzcGxheSB3aGVuIGNvbGxhcHNlZFxuICAgICAgLm9wZW4gLmRyb3Bkb3duLW1lbnUge1xuICAgICAgICA+IGxpID4gYSB7XG4gICAgICAgICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWNvbG9yO1xuICAgICAgICAgICY6aG92ZXIsXG4gICAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItY29sb3I7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1ob3Zlci1iZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPiAuYWN0aXZlID4gYSB7XG4gICAgICAgICAgJixcbiAgICAgICAgICAmOmhvdmVyLFxuICAgICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1jb2xvcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1iZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPiAuZGlzYWJsZWQgPiBhIHtcbiAgICAgICAgICAmLFxuICAgICAgICAgICY6aG92ZXIsXG4gICAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstZGlzYWJsZWQtY29sb3I7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1kaXNhYmxlZC1iZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8vIExpbmtzIGluIG5hdmJhcnNcbiAgLy9cbiAgLy8gQWRkIGEgY2xhc3MgdG8gZW5zdXJlIGxpbmtzIG91dHNpZGUgdGhlIG5hdmJhciBuYXYgYXJlIGNvbG9yZWQgY29ycmVjdGx5LlxuXG4gIC5uYXZiYXItbGluayB7XG4gICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWNvbG9yO1xuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWhvdmVyLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5idG4tbGluayB7XG4gICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWNvbG9yO1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItY29sb3I7XG4gICAgfVxuICAgICZbZGlzYWJsZWRdLFxuICAgIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBJbnZlcnNlIG5hdmJhclxuXG4ubmF2YmFyLWludmVyc2Uge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtYmc7XG4gIGJvcmRlci1jb2xvcjogJG5hdmJhci1pbnZlcnNlLWJvcmRlcjtcblxuICAubmF2YmFyLWJyYW5kIHtcbiAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWJyYW5kLWNvbG9yO1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWJyYW5kLWhvdmVyLWNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1pbnZlcnNlLWJyYW5kLWhvdmVyLWJnO1xuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItdGV4dCB7XG4gICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1jb2xvcjtcbiAgfVxuXG4gIC5uYXZiYXItbmF2IHtcbiAgICA+IGxpID4gYSB7XG4gICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstY29sb3I7XG5cbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1iZztcbiAgICAgIH1cbiAgICB9XG4gICAgPiAuYWN0aXZlID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstYWN0aXZlLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtYmc7XG4gICAgICB9XG4gICAgfVxuICAgID4gLmRpc2FibGVkID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWRpc2FibGVkLWJnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIERhcmtlbiB0aGUgcmVzcG9uc2l2ZSBuYXYgdG9nZ2xlXG4gIC5uYXZiYXItdG9nZ2xlIHtcbiAgICBib3JkZXItY29sb3I6ICRuYXZiYXItaW52ZXJzZS10b2dnbGUtYm9yZGVyLWNvbG9yO1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtdG9nZ2xlLWhvdmVyLWJnO1xuICAgIH1cbiAgICAuaWNvbi1iYXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1pbnZlcnNlLXRvZ2dsZS1pY29uLWJhci1iZztcbiAgICB9XG4gIH1cblxuICAubmF2YmFyLWNvbGxhcHNlLFxuICAubmF2YmFyLWZvcm0ge1xuICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRuYXZiYXItaW52ZXJzZS1iZywgNyUpO1xuICB9XG5cbiAgLy8gRHJvcGRvd25zXG4gIC5uYXZiYXItbmF2IHtcbiAgICA+IC5vcGVuID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtYmc7XG4gICAgICAgIGNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQtbWF4KSB7XG4gICAgICAvLyBEcm9wZG93bnMgZ2V0IGN1c3RvbSBkaXNwbGF5XG4gICAgICAub3BlbiAuZHJvcGRvd24tbWVudSB7XG4gICAgICAgID4gLmRyb3Bkb3duLWhlYWRlciB7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtYm9yZGVyO1xuICAgICAgICB9XG4gICAgICAgIC5kaXZpZGVyIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtYm9yZGVyO1xuICAgICAgICB9XG4gICAgICAgID4gbGkgPiBhIHtcbiAgICAgICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstY29sb3I7XG4gICAgICAgICAgJjpob3ZlcixcbiAgICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIGNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1jb2xvcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWJnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA+IC5hY3RpdmUgPiBhIHtcbiAgICAgICAgICAmLFxuICAgICAgICAgICY6aG92ZXIsXG4gICAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstYWN0aXZlLWNvbG9yO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstYWN0aXZlLWJnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA+IC5kaXNhYmxlZCA+IGEge1xuICAgICAgICAgICYsXG4gICAgICAgICAgJjpob3ZlcixcbiAgICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIGNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWRpc2FibGVkLWJnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItbGluayB7XG4gICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWNvbG9yO1xuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5idG4tbGluayB7XG4gICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWNvbG9yO1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItY29sb3I7XG4gICAgfVxuICAgICZbZGlzYWJsZWRdLFxuICAgIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gTmF2YmFyIHZlcnRpY2FsIGFsaWduXG4vL1xuLy8gVmVydGljYWxseSBjZW50ZXIgZWxlbWVudHMgaW4gdGhlIG5hdmJhci5cbi8vIEV4YW1wbGU6IGFuIGVsZW1lbnQgaGFzIGEgaGVpZ2h0IG9mIDMwcHgsIHNvIHdyaXRlIG91dCBgLm5hdmJhci12ZXJ0aWNhbC1hbGlnbigzMHB4KTtgIHRvIGNhbGN1bGF0ZSB0aGUgYXBwcm9wcmlhdGUgdG9wIG1hcmdpbi5cblxuQG1peGluIG5hdmJhci12ZXJ0aWNhbC1hbGlnbigkZWxlbWVudC1oZWlnaHQpIHtcbiAgbWFyZ2luLXRvcDogKCgkbmF2YmFyLWhlaWdodCAtICRlbGVtZW50LWhlaWdodCkgLyAyKTtcbiAgbWFyZ2luLWJvdHRvbTogKCgkbmF2YmFyLWhlaWdodCAtICRlbGVtZW50LWhlaWdodCkgLyAyKTtcbn1cbiIsIi8vXG4vLyBCcmVhZGNydW1ic1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4uYnJlYWRjcnVtYiB7XG4gIHBhZGRpbmc6ICRicmVhZGNydW1iLXBhZGRpbmctdmVydGljYWwgJGJyZWFkY3J1bWItcGFkZGluZy1ob3Jpem9udGFsO1xuICBtYXJnaW4tYm90dG9tOiAkbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRicmVhZGNydW1iLWJnO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuXG4gID4gbGkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICAgICsgbGk6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiI3skYnJlYWRjcnVtYi1zZXBhcmF0b3J9XFwwMGEwXCI7IC8vIFVuaWNvZGUgc3BhY2UgYWRkZWQgc2luY2UgaW5saW5lLWJsb2NrIG1lYW5zIG5vbi1jb2xsYXBzaW5nIHdoaXRlLXNwYWNlXG4gICAgICBwYWRkaW5nOiAwIDVweDtcbiAgICAgIGNvbG9yOiAkYnJlYWRjcnVtYi1jb2xvcjtcbiAgICB9XG4gIH1cblxuICA+IC5hY3RpdmUge1xuICAgIGNvbG9yOiAkYnJlYWRjcnVtYi1hY3RpdmUtY29sb3I7XG4gIH1cbn1cbiIsIi8vXG4vLyBQYWdpbmF0aW9uIChtdWx0aXBsZSBwYWdlcylcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4ucGFnaW5hdGlvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBtYXJnaW46ICRsaW5lLWhlaWdodC1jb21wdXRlZCAwO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuXG4gID4gbGkge1xuICAgIGRpc3BsYXk6IGlubGluZTsgLy8gUmVtb3ZlIGxpc3Qtc3R5bGUgYW5kIGJsb2NrLWxldmVsIGRlZmF1bHRzXG4gICAgPiBhLFxuICAgID4gc3BhbiB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBmbG9hdDogbGVmdDsgLy8gQ29sbGFwc2Ugd2hpdGUtc3BhY2VcbiAgICAgIHBhZGRpbmc6ICRwYWRkaW5nLWJhc2UtdmVydGljYWwgJHBhZGRpbmctYmFzZS1ob3Jpem9udGFsO1xuICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgY29sb3I6ICRwYWdpbmF0aW9uLWNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHBhZ2luYXRpb24tYmc7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAkcGFnaW5hdGlvbi1ib3JkZXI7XG4gICAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgICB9XG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICA+IGEsXG4gICAgICA+IHNwYW4ge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgQGluY2x1ZGUgYm9yZGVyLWxlZnQtcmFkaXVzKCRib3JkZXItcmFkaXVzLWJhc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgPiBhLFxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgQGluY2x1ZGUgYm9yZGVyLXJpZ2h0LXJhZGl1cygkYm9yZGVyLXJhZGl1cy1iYXNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICA+IGxpID4gYSxcbiAgPiBsaSA+IHNwYW4ge1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICB6LWluZGV4OiAzO1xuICAgICAgY29sb3I6ICRwYWdpbmF0aW9uLWhvdmVyLWNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHBhZ2luYXRpb24taG92ZXItYmc7XG4gICAgICBib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWhvdmVyLWJvcmRlcjtcbiAgICB9XG4gIH1cblxuICA+IC5hY3RpdmUgPiBhLFxuICA+IC5hY3RpdmUgPiBzcGFuIHtcbiAgICAmLFxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICB6LWluZGV4OiAyO1xuICAgICAgY29sb3I6ICRwYWdpbmF0aW9uLWFjdGl2ZS1jb2xvcjtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwYWdpbmF0aW9uLWFjdGl2ZS1iZztcbiAgICAgIGJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYWN0aXZlLWJvcmRlcjtcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICB9XG4gIH1cblxuICA+IC5kaXNhYmxlZCB7XG4gICAgPiBzcGFuLFxuICAgID4gc3Bhbjpob3ZlcixcbiAgICA+IHNwYW46Zm9jdXMsXG4gICAgPiBhLFxuICAgID4gYTpob3ZlcixcbiAgICA+IGE6Zm9jdXMge1xuICAgICAgY29sb3I6ICRwYWdpbmF0aW9uLWRpc2FibGVkLWNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHBhZ2luYXRpb24tZGlzYWJsZWQtYmc7XG4gICAgICBib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWRpc2FibGVkLWJvcmRlcjtcbiAgICAgIGN1cnNvcjogJGN1cnNvci1kaXNhYmxlZDtcbiAgICB9XG4gIH1cbn1cblxuLy8gU2l6aW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBMYXJnZVxuLnBhZ2luYXRpb24tbGcge1xuICBAaW5jbHVkZSBwYWdpbmF0aW9uLXNpemUoJHBhZGRpbmctbGFyZ2UtdmVydGljYWwsICRwYWRkaW5nLWxhcmdlLWhvcml6b250YWwsICRmb250LXNpemUtbGFyZ2UsICRsaW5lLWhlaWdodC1sYXJnZSwgJGJvcmRlci1yYWRpdXMtbGFyZ2UpO1xufVxuXG4vLyBTbWFsbFxuLnBhZ2luYXRpb24tc20ge1xuICBAaW5jbHVkZSBwYWdpbmF0aW9uLXNpemUoJHBhZGRpbmctc21hbGwtdmVydGljYWwsICRwYWRkaW5nLXNtYWxsLWhvcml6b250YWwsICRmb250LXNpemUtc21hbGwsICRsaW5lLWhlaWdodC1zbWFsbCwgJGJvcmRlci1yYWRpdXMtc21hbGwpO1xufVxuIiwiLy8gUGFnaW5hdGlvblxuXG5AbWl4aW4gcGFnaW5hdGlvbi1zaXplKCRwYWRkaW5nLXZlcnRpY2FsLCAkcGFkZGluZy1ob3Jpem9udGFsLCAkZm9udC1zaXplLCAkbGluZS1oZWlnaHQsICRib3JkZXItcmFkaXVzKSB7XG4gID4gbGkge1xuICAgID4gYSxcbiAgICA+IHNwYW4ge1xuICAgICAgcGFkZGluZzogJHBhZGRpbmctdmVydGljYWwgJHBhZGRpbmctaG9yaXpvbnRhbDtcbiAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgfVxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgPiBhLFxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgQGluY2x1ZGUgYm9yZGVyLWxlZnQtcmFkaXVzKCRib3JkZXItcmFkaXVzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgID4gYSxcbiAgICAgID4gc3BhbiB7XG4gICAgICAgIEBpbmNsdWRlIGJvcmRlci1yaWdodC1yYWRpdXMoJGJvcmRlci1yYWRpdXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIFBhZ2VyIHBhZ2luYXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLnBhZ2VyIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBtYXJnaW46ICRsaW5lLWhlaWdodC1jb21wdXRlZCAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIEBpbmNsdWRlIGNsZWFyZml4O1xuICBsaSB7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgID4gYSxcbiAgICA+IHNwYW4ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgcGFkZGluZzogNXB4IDE0cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcGFnZXItYmc7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAkcGFnZXItYm9yZGVyO1xuICAgICAgYm9yZGVyLXJhZGl1czogJHBhZ2VyLWJvcmRlci1yYWRpdXM7XG4gICAgfVxuXG4gICAgPiBhOmhvdmVyLFxuICAgID4gYTpmb2N1cyB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcGFnZXItaG92ZXItYmc7XG4gICAgfVxuICB9XG5cbiAgLm5leHQge1xuICAgID4gYSxcbiAgICA+IHNwYW4ge1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC5wcmV2aW91cyB7XG4gICAgPiBhLFxuICAgID4gc3BhbiB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICB9XG4gIH1cblxuICAuZGlzYWJsZWQge1xuICAgID4gYSxcbiAgICA+IGE6aG92ZXIsXG4gICAgPiBhOmZvY3VzLFxuICAgID4gc3BhbiB7XG4gICAgICBjb2xvcjogJHBhZ2VyLWRpc2FibGVkLWNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHBhZ2VyLWJnO1xuICAgICAgY3Vyc29yOiAkY3Vyc29yLWRpc2FibGVkO1xuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIExhYmVsc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lO1xuICBwYWRkaW5nOiAuMmVtIC42ZW0gLjNlbTtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIGJvcmRlci1yYWRpdXM6IC4yNWVtO1xuXG4gIC8vIFtjb252ZXJ0ZXJdIGV4dHJhY3RlZCBhJiB0byBhLmxhYmVsXG5cbiAgLy8gRW1wdHkgbGFiZWxzIGNvbGxhcHNlIGF1dG9tYXRpY2FsbHkgKG5vdCBhdmFpbGFibGUgaW4gSUU4KVxuICAmOmVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gUXVpY2sgZml4IGZvciBsYWJlbHMgaW4gYnV0dG9uc1xuICAuYnRuICYge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC0xcHg7XG4gIH1cbn1cblxuLy8gQWRkIGhvdmVyIGVmZmVjdHMsIGJ1dCBvbmx5IGZvciBsaW5rc1xuYS5sYWJlbCB7XG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiAkbGFiZWwtbGluay1ob3Zlci1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG59XG5cbi8vIENvbG9yc1xuLy8gQ29udGV4dHVhbCB2YXJpYXRpb25zIChsaW5rZWQgbGFiZWxzIGdldCBkYXJrZXIgb24gOmhvdmVyKVxuXG4ubGFiZWwtZGVmYXVsdCB7XG4gIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQoJGxhYmVsLWRlZmF1bHQtYmcpO1xufVxuXG4ubGFiZWwtcHJpbWFyeSB7XG4gIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQoJGxhYmVsLXByaW1hcnktYmcpO1xufVxuXG4ubGFiZWwtc3VjY2VzcyB7XG4gIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQoJGxhYmVsLXN1Y2Nlc3MtYmcpO1xufVxuXG4ubGFiZWwtaW5mbyB7XG4gIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQoJGxhYmVsLWluZm8tYmcpO1xufVxuXG4ubGFiZWwtd2FybmluZyB7XG4gIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQoJGxhYmVsLXdhcm5pbmctYmcpO1xufVxuXG4ubGFiZWwtZGFuZ2VyIHtcbiAgQGluY2x1ZGUgbGFiZWwtdmFyaWFudCgkbGFiZWwtZGFuZ2VyLWJnKTtcbn1cbiIsIi8vIExhYmVsc1xuXG5AbWl4aW4gbGFiZWwtdmFyaWFudCgkY29sb3IpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yO1xuXG4gICZbaHJlZl0ge1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAxMCUpO1xuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIEJhZGdlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBCYXNlIGNsYXNzXG4uYmFkZ2Uge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1pbi13aWR0aDogMTBweDtcbiAgcGFkZGluZzogM3B4IDdweDtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICBmb250LXdlaWdodDogJGJhZGdlLWZvbnQtd2VpZ2h0O1xuICBjb2xvcjogJGJhZGdlLWNvbG9yO1xuICBsaW5lLWhlaWdodDogJGJhZGdlLWxpbmUtaGVpZ2h0O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWRnZS1iZztcbiAgYm9yZGVyLXJhZGl1czogJGJhZGdlLWJvcmRlci1yYWRpdXM7XG5cbiAgLy8gRW1wdHkgYmFkZ2VzIGNvbGxhcHNlIGF1dG9tYXRpY2FsbHkgKG5vdCBhdmFpbGFibGUgaW4gSUU4KVxuICAmOmVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gUXVpY2sgZml4IGZvciBiYWRnZXMgaW4gYnV0dG9uc1xuICAuYnRuICYge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC0xcHg7XG4gIH1cblxuICAuYnRuLXhzICYsXG4gIC5idG4tZ3JvdXAteHMgPiAuYnRuICYge1xuICAgIHRvcDogMDtcbiAgICBwYWRkaW5nOiAxcHggNXB4O1xuICB9XG5cbiAgLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIGEmIHRvIGEuYmFkZ2VcblxuICAvLyBBY2NvdW50IGZvciBiYWRnZXMgaW4gbmF2c1xuICAubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSA+ICYsXG4gIC5uYXYtcGlsbHMgPiAuYWN0aXZlID4gYSA+ICYge1xuICAgIGNvbG9yOiAkYmFkZ2UtYWN0aXZlLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWRnZS1hY3RpdmUtYmc7XG4gIH1cblxuICAubGlzdC1ncm91cC1pdGVtID4gJiB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICB9XG5cbiAgLmxpc3QtZ3JvdXAtaXRlbSA+ICYgKyAmIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgfVxuXG4gIC5uYXYtcGlsbHMgPiBsaSA+IGEgPiAmIHtcbiAgICBtYXJnaW4tbGVmdDogM3B4O1xuICB9XG59XG5cbi8vIEhvdmVyIHN0YXRlLCBidXQgb25seSBmb3IgbGlua3NcbmEuYmFkZ2Uge1xuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICBjb2xvcjogJGJhZGdlLWxpbmstaG92ZXItY29sb3I7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxufVxuIiwiLy9cbi8vIEp1bWJvdHJvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4uanVtYm90cm9uIHtcbiAgcGFkZGluZy10b3A6ICAgICRqdW1ib3Ryb24tcGFkZGluZztcbiAgcGFkZGluZy1ib3R0b206ICRqdW1ib3Ryb24tcGFkZGluZztcbiAgbWFyZ2luLWJvdHRvbTogJGp1bWJvdHJvbi1wYWRkaW5nO1xuICBjb2xvcjogJGp1bWJvdHJvbi1jb2xvcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGp1bWJvdHJvbi1iZztcblxuICBoMSxcbiAgLmgxIHtcbiAgICBjb2xvcjogJGp1bWJvdHJvbi1oZWFkaW5nLWNvbG9yO1xuICB9XG5cbiAgcCB7XG4gICAgbWFyZ2luLWJvdHRvbTogKCRqdW1ib3Ryb24tcGFkZGluZyAvIDIpO1xuICAgIGZvbnQtc2l6ZTogJGp1bWJvdHJvbi1mb250LXNpemU7XG4gICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgfVxuXG4gID4gaHIge1xuICAgIGJvcmRlci10b3AtY29sb3I6IGRhcmtlbigkanVtYm90cm9uLWJnLCAxMCUpO1xuICB9XG5cbiAgLmNvbnRhaW5lciAmLFxuICAuY29udGFpbmVyLWZsdWlkICYge1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWxhcmdlOyAvLyBPbmx5IHJvdW5kIGNvcm5lcnMgYXQgaGlnaGVyIHJlc29sdXRpb25zIGlmIGNvbnRhaW5lZCBpbiBhIGNvbnRhaW5lclxuICB9XG5cbiAgLmNvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICB9XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIHtcbiAgICBwYWRkaW5nLXRvcDogICAgKCRqdW1ib3Ryb24tcGFkZGluZyAqIDEuNik7XG4gICAgcGFkZGluZy1ib3R0b206ICgkanVtYm90cm9uLXBhZGRpbmcgKiAxLjYpO1xuXG4gICAgLmNvbnRhaW5lciAmLFxuICAgIC5jb250YWluZXItZmx1aWQgJiB7XG4gICAgICBwYWRkaW5nLWxlZnQ6ICAoJGp1bWJvdHJvbi1wYWRkaW5nICogMik7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAoJGp1bWJvdHJvbi1wYWRkaW5nICogMik7XG4gICAgfVxuXG4gICAgaDEsXG4gICAgLmgxIHtcbiAgICAgIGZvbnQtc2l6ZTogJGp1bWJvdHJvbi1oZWFkaW5nLWZvbnQtc2l6ZTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vXG4vLyBUaHVtYm5haWxzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIE1peGluIGFuZCBhZGp1c3QgdGhlIHJlZ3VsYXIgaW1hZ2UgY2xhc3Ncbi50aHVtYm5haWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogJHRodW1ibmFpbC1wYWRkaW5nO1xuICBtYXJnaW4tYm90dG9tOiAkbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHRodW1ibmFpbC1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgJHRodW1ibmFpbC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICR0aHVtYm5haWwtYm9yZGVyLXJhZGl1cztcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbihib3JkZXIgLjJzIGVhc2UtaW4tb3V0KTtcblxuICA+IGltZyxcbiAgYSA+IGltZyB7XG4gICAgQGluY2x1ZGUgaW1nLXJlc3BvbnNpdmU7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICB9XG5cbiAgLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIGEmOmhvdmVyLCBhJjpmb2N1cywgYSYuYWN0aXZlIHRvIGEudGh1bWJuYWlsOmhvdmVyLCBhLnRodW1ibmFpbDpmb2N1cywgYS50aHVtYm5haWwuYWN0aXZlXG5cbiAgLy8gSW1hZ2UgY2FwdGlvbnNcbiAgLmNhcHRpb24ge1xuICAgIHBhZGRpbmc6ICR0aHVtYm5haWwtY2FwdGlvbi1wYWRkaW5nO1xuICAgIGNvbG9yOiAkdGh1bWJuYWlsLWNhcHRpb24tY29sb3I7XG4gIH1cbn1cblxuLy8gQWRkIGEgaG92ZXIgc3RhdGUgZm9yIGxpbmtlZCB2ZXJzaW9ucyBvbmx5XG5hLnRodW1ibmFpbDpob3ZlcixcbmEudGh1bWJuYWlsOmZvY3VzLFxuYS50aHVtYm5haWwuYWN0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiAkbGluay1jb2xvcjtcbn1cbiIsIi8vXG4vLyBBbGVydHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBzdHlsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmFsZXJ0IHtcbiAgcGFkZGluZzogJGFsZXJ0LXBhZGRpbmc7XG4gIG1hcmdpbi1ib3R0b206ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yYWRpdXM6ICRhbGVydC1ib3JkZXItcmFkaXVzO1xuXG4gIC8vIEhlYWRpbmdzIGZvciBsYXJnZXIgYWxlcnRzXG4gIGg0IHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIC8vIFNwZWNpZmllZCBmb3IgdGhlIGg0IHRvIHByZXZlbnQgY29uZmxpY3RzIG9mIGNoYW5naW5nICRoZWFkaW5ncy1jb2xvclxuICAgIGNvbG9yOiBpbmhlcml0O1xuICB9XG5cbiAgLy8gUHJvdmlkZSBjbGFzcyBmb3IgbGlua3MgdGhhdCBtYXRjaCBhbGVydHNcbiAgLmFsZXJ0LWxpbmsge1xuICAgIGZvbnQtd2VpZ2h0OiAkYWxlcnQtbGluay1mb250LXdlaWdodDtcbiAgfVxuXG4gIC8vIEltcHJvdmUgYWxpZ25tZW50IGFuZCBzcGFjaW5nIG9mIGlubmVyIGNvbnRlbnRcbiAgPiBwLFxuICA+IHVsIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG5cbiAgPiBwICsgcCB7XG4gICAgbWFyZ2luLXRvcDogNXB4O1xuICB9XG59XG5cbi8vIERpc21pc3NpYmxlIGFsZXJ0c1xuLy9cbi8vIEV4cGFuZCB0aGUgcmlnaHQgcGFkZGluZyBhbmQgYWNjb3VudCBmb3IgdGhlIGNsb3NlIGJ1dHRvbidzIHBvc2l0aW9uaW5nLlxuXG4uYWxlcnQtZGlzbWlzc2FibGUsIC8vIFRoZSBtaXNzcGVsbGVkIC5hbGVydC1kaXNtaXNzYWJsZSB3YXMgZGVwcmVjYXRlZCBpbiAzLjIuMC5cbi5hbGVydC1kaXNtaXNzaWJsZSB7XG4gIHBhZGRpbmctcmlnaHQ6ICgkYWxlcnQtcGFkZGluZyArIDIwKTtcblxuICAvLyBBZGp1c3QgY2xvc2UgbGluayBwb3NpdGlvblxuICAuY2xvc2Uge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC0ycHg7XG4gICAgcmlnaHQ6IC0yMXB4O1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICB9XG59XG5cbi8vIEFsdGVybmF0ZSBzdHlsZXNcbi8vXG4vLyBHZW5lcmF0ZSBjb250ZXh0dWFsIG1vZGlmaWVyIGNsYXNzZXMgZm9yIGNvbG9yaXppbmcgdGhlIGFsZXJ0LlxuXG4uYWxlcnQtc3VjY2VzcyB7XG4gIEBpbmNsdWRlIGFsZXJ0LXZhcmlhbnQoJGFsZXJ0LXN1Y2Nlc3MtYmcsICRhbGVydC1zdWNjZXNzLWJvcmRlciwgJGFsZXJ0LXN1Y2Nlc3MtdGV4dCk7XG59XG5cbi5hbGVydC1pbmZvIHtcbiAgQGluY2x1ZGUgYWxlcnQtdmFyaWFudCgkYWxlcnQtaW5mby1iZywgJGFsZXJ0LWluZm8tYm9yZGVyLCAkYWxlcnQtaW5mby10ZXh0KTtcbn1cblxuLmFsZXJ0LXdhcm5pbmcge1xuICBAaW5jbHVkZSBhbGVydC12YXJpYW50KCRhbGVydC13YXJuaW5nLWJnLCAkYWxlcnQtd2FybmluZy1ib3JkZXIsICRhbGVydC13YXJuaW5nLXRleHQpO1xufVxuXG4uYWxlcnQtZGFuZ2VyIHtcbiAgQGluY2x1ZGUgYWxlcnQtdmFyaWFudCgkYWxlcnQtZGFuZ2VyLWJnLCAkYWxlcnQtZGFuZ2VyLWJvcmRlciwgJGFsZXJ0LWRhbmdlci10ZXh0KTtcbn1cbiIsIi8vIEFsZXJ0c1xuXG5AbWl4aW4gYWxlcnQtdmFyaWFudCgkYmFja2dyb3VuZCwgJGJvcmRlciwgJHRleHQtY29sb3IpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG4gIGJvcmRlci1jb2xvcjogJGJvcmRlcjtcbiAgY29sb3I6ICR0ZXh0LWNvbG9yO1xuXG4gIGhyIHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBkYXJrZW4oJGJvcmRlciwgNSUpO1xuICB9XG4gIC5hbGVydC1saW5rIHtcbiAgICBjb2xvcjogZGFya2VuKCR0ZXh0LWNvbG9yLCAxMCUpO1xuICB9XG59XG4iLCIvL1xuLy8gUHJvZ3Jlc3MgYmFyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBCYXIgYW5pbWF0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBXZWJLaXRcbkAtd2Via2l0LWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlcyB7XG4gIGZyb20gIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogNDBweCAwOyB9XG4gIHRvICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9XG59XG5cbi8vIFNwZWMgYW5kIElFMTArXG5Aa2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHtcbiAgZnJvbSAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA0MHB4IDA7IH1cbiAgdG8gICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH1cbn1cblxuXG4vLyBCYXIgaXRzZWxmXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE91dGVyIGNvbnRhaW5lclxuLnByb2dyZXNzIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgaGVpZ2h0OiAkbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIG1hcmdpbi1ib3R0b206ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHByb2dyZXNzLWJnO1xuICBib3JkZXItcmFkaXVzOiAkcHJvZ3Jlc3MtYm9yZGVyLXJhZGl1cztcbiAgQGluY2x1ZGUgYm94LXNoYWRvdyhpbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwuMSkpO1xufVxuXG4vLyBCYXIgb2YgcHJvZ3Jlc3Ncbi5wcm9ncmVzcy1iYXIge1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgY29sb3I6ICRwcm9ncmVzcy1iYXItY29sb3I7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHByb2dyZXNzLWJhci1iZztcbiAgQGluY2x1ZGUgYm94LXNoYWRvdyhpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLC4xNSkpO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKHdpZHRoIC42cyBlYXNlKTtcbn1cblxuLy8gU3RyaXBlZCBiYXJzXG4vL1xuLy8gYC5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXJgIGlzIGRlcHJlY2F0ZWQgYXMgb2YgdjMuMi4wIGluIGZhdm9yIG9mIHRoZVxuLy8gYC5wcm9ncmVzcy1iYXItc3RyaXBlZGAgY2xhc3MsIHdoaWNoIHlvdSBqdXN0IGFkZCB0byBhbiBleGlzdGluZ1xuLy8gYC5wcm9ncmVzcy1iYXJgLlxuLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhcixcbi5wcm9ncmVzcy1iYXItc3RyaXBlZCB7XG4gIEBpbmNsdWRlIGdyYWRpZW50LXN0cmlwZWQ7XG4gIGJhY2tncm91bmQtc2l6ZTogNDBweCA0MHB4O1xufVxuXG4vLyBDYWxsIGFuaW1hdGlvbiBmb3IgdGhlIGFjdGl2ZSBvbmVcbi8vXG4vLyBgLnByb2dyZXNzLmFjdGl2ZSAucHJvZ3Jlc3MtYmFyYCBpcyBkZXByZWNhdGVkIGFzIG9mIHYzLjIuMCBpbiBmYXZvciBvZiB0aGVcbi8vIGAucHJvZ3Jlc3MtYmFyLmFjdGl2ZWAgYXBwcm9hY2guXG4ucHJvZ3Jlc3MuYWN0aXZlIC5wcm9ncmVzcy1iYXIsXG4ucHJvZ3Jlc3MtYmFyLmFjdGl2ZSB7XG4gIEBpbmNsdWRlIGFuaW1hdGlvbihwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGUpO1xufVxuXG5cbi8vIFZhcmlhdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLnByb2dyZXNzLWJhci1zdWNjZXNzIHtcbiAgQGluY2x1ZGUgcHJvZ3Jlc3MtYmFyLXZhcmlhbnQoJHByb2dyZXNzLWJhci1zdWNjZXNzLWJnKTtcbn1cblxuLnByb2dyZXNzLWJhci1pbmZvIHtcbiAgQGluY2x1ZGUgcHJvZ3Jlc3MtYmFyLXZhcmlhbnQoJHByb2dyZXNzLWJhci1pbmZvLWJnKTtcbn1cblxuLnByb2dyZXNzLWJhci13YXJuaW5nIHtcbiAgQGluY2x1ZGUgcHJvZ3Jlc3MtYmFyLXZhcmlhbnQoJHByb2dyZXNzLWJhci13YXJuaW5nLWJnKTtcbn1cblxuLnByb2dyZXNzLWJhci1kYW5nZXIge1xuICBAaW5jbHVkZSBwcm9ncmVzcy1iYXItdmFyaWFudCgkcHJvZ3Jlc3MtYmFyLWRhbmdlci1iZyk7XG59XG4iLCIvLyBHcmFkaWVudHNcblxuXG5cbi8vIEhvcml6b250YWwgZ3JhZGllbnQsIGZyb20gbGVmdCB0byByaWdodFxuLy9cbi8vIENyZWF0ZXMgdHdvIGNvbG9yIHN0b3BzLCBzdGFydCBhbmQgZW5kLCBieSBzcGVjaWZ5aW5nIGEgY29sb3IgYW5kIHBvc2l0aW9uIGZvciBlYWNoIGNvbG9yIHN0b3AuXG4vLyBDb2xvciBzdG9wcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBJRTkgYW5kIGJlbG93LlxuQG1peGluIGdyYWRpZW50LWhvcml6b250YWwoJHN0YXJ0LWNvbG9yOiAjNTU1LCAkZW5kLWNvbG9yOiAjMzMzLCAkc3RhcnQtcGVyY2VudDogMCUsICRlbmQtcGVyY2VudDogMTAwJSkge1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChsZWZ0LCAkc3RhcnQtY29sb3IgJHN0YXJ0LXBlcmNlbnQsICRlbmQtY29sb3IgJGVuZC1wZXJjZW50KTsgLy8gU2FmYXJpIDUuMS02LCBDaHJvbWUgMTArXG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChsZWZ0LCAkc3RhcnQtY29sb3IgJHN0YXJ0LXBlcmNlbnQsICRlbmQtY29sb3IgJGVuZC1wZXJjZW50KTsgLy8gT3BlcmEgMTJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAkc3RhcnQtY29sb3IgJHN0YXJ0LXBlcmNlbnQsICRlbmQtY29sb3IgJGVuZC1wZXJjZW50KTsgLy8gU3RhbmRhcmQsIElFMTAsIEZpcmVmb3ggMTYrLCBPcGVyYSAxMi4xMCssIFNhZmFyaSA3KywgQ2hyb21lIDI2K1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyN7aWUtaGV4LXN0cigkc3RhcnQtY29sb3IpfScsIGVuZENvbG9yc3RyPScje2llLWhleC1zdHIoJGVuZC1jb2xvcil9JywgR3JhZGllbnRUeXBlPTEpOyAvLyBJRTkgYW5kIGRvd25cbn1cblxuLy8gVmVydGljYWwgZ3JhZGllbnQsIGZyb20gdG9wIHRvIGJvdHRvbVxuLy9cbi8vIENyZWF0ZXMgdHdvIGNvbG9yIHN0b3BzLCBzdGFydCBhbmQgZW5kLCBieSBzcGVjaWZ5aW5nIGEgY29sb3IgYW5kIHBvc2l0aW9uIGZvciBlYWNoIGNvbG9yIHN0b3AuXG4vLyBDb2xvciBzdG9wcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBJRTkgYW5kIGJlbG93LlxuQG1peGluIGdyYWRpZW50LXZlcnRpY2FsKCRzdGFydC1jb2xvcjogIzU1NSwgJGVuZC1jb2xvcjogIzMzMywgJHN0YXJ0LXBlcmNlbnQ6IDAlLCAkZW5kLXBlcmNlbnQ6IDEwMCUpIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAkc3RhcnQtY29sb3IgJHN0YXJ0LXBlcmNlbnQsICRlbmQtY29sb3IgJGVuZC1wZXJjZW50KTsgIC8vIFNhZmFyaSA1LjEtNiwgQ2hyb21lIDEwK1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAkc3RhcnQtY29sb3IgJHN0YXJ0LXBlcmNlbnQsICRlbmQtY29sb3IgJGVuZC1wZXJjZW50KTsgIC8vIE9wZXJhIDEyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICRzdGFydC1jb2xvciAkc3RhcnQtcGVyY2VudCwgJGVuZC1jb2xvciAkZW5kLXBlcmNlbnQpOyAvLyBTdGFuZGFyZCwgSUUxMCwgRmlyZWZveCAxNissIE9wZXJhIDEyLjEwKywgU2FmYXJpIDcrLCBDaHJvbWUgMjYrXG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI3tpZS1oZXgtc3RyKCRzdGFydC1jb2xvcil9JywgZW5kQ29sb3JzdHI9JyN7aWUtaGV4LXN0cigkZW5kLWNvbG9yKX0nLCBHcmFkaWVudFR5cGU9MCk7IC8vIElFOSBhbmQgZG93blxufVxuXG5AbWl4aW4gZ3JhZGllbnQtZGlyZWN0aW9uYWwoJHN0YXJ0LWNvbG9yOiAjNTU1LCAkZW5kLWNvbG9yOiAjMzMzLCAkZGVnOiA0NWRlZykge1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KCRkZWcsICRzdGFydC1jb2xvciwgJGVuZC1jb2xvcik7IC8vIFNhZmFyaSA1LjEtNiwgQ2hyb21lIDEwK1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoJGRlZywgJHN0YXJ0LWNvbG9yLCAkZW5kLWNvbG9yKTsgLy8gT3BlcmEgMTJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KCRkZWcsICRzdGFydC1jb2xvciwgJGVuZC1jb2xvcik7IC8vIFN0YW5kYXJkLCBJRTEwLCBGaXJlZm94IDE2KywgT3BlcmEgMTIuMTArLCBTYWZhcmkgNyssIENocm9tZSAyNitcbn1cbkBtaXhpbiBncmFkaWVudC1ob3Jpem9udGFsLXRocmVlLWNvbG9ycygkc3RhcnQtY29sb3I6ICMwMGIzZWUsICRtaWQtY29sb3I6ICM3YTQzYjYsICRjb2xvci1zdG9wOiA1MCUsICRlbmQtY29sb3I6ICNjMzMyNWYpIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCwgJHN0YXJ0LWNvbG9yLCAkbWlkLWNvbG9yICRjb2xvci1zdG9wLCAkZW5kLWNvbG9yKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KGxlZnQsICRzdGFydC1jb2xvciwgJG1pZC1jb2xvciAkY29sb3Itc3RvcCwgJGVuZC1jb2xvcik7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJHN0YXJ0LWNvbG9yLCAkbWlkLWNvbG9yICRjb2xvci1zdG9wLCAkZW5kLWNvbG9yKTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI3tpZS1oZXgtc3RyKCRzdGFydC1jb2xvcil9JywgZW5kQ29sb3JzdHI9JyN7aWUtaGV4LXN0cigkZW5kLWNvbG9yKX0nLCBHcmFkaWVudFR5cGU9MSk7IC8vIElFOSBhbmQgZG93biwgZ2V0cyBubyBjb2xvci1zdG9wIGF0IGFsbCBmb3IgcHJvcGVyIGZhbGxiYWNrXG59XG5AbWl4aW4gZ3JhZGllbnQtdmVydGljYWwtdGhyZWUtY29sb3JzKCRzdGFydC1jb2xvcjogIzAwYjNlZSwgJG1pZC1jb2xvcjogIzdhNDNiNiwgJGNvbG9yLXN0b3A6IDUwJSwgJGVuZC1jb2xvcjogI2MzMzI1Zikge1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCgkc3RhcnQtY29sb3IsICRtaWQtY29sb3IgJGNvbG9yLXN0b3AsICRlbmQtY29sb3IpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoJHN0YXJ0LWNvbG9yLCAkbWlkLWNvbG9yICRjb2xvci1zdG9wLCAkZW5kLWNvbG9yKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KCRzdGFydC1jb2xvciwgJG1pZC1jb2xvciAkY29sb3Itc3RvcCwgJGVuZC1jb2xvcik7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyN7aWUtaGV4LXN0cigkc3RhcnQtY29sb3IpfScsIGVuZENvbG9yc3RyPScje2llLWhleC1zdHIoJGVuZC1jb2xvcil9JywgR3JhZGllbnRUeXBlPTApOyAvLyBJRTkgYW5kIGRvd24sIGdldHMgbm8gY29sb3Itc3RvcCBhdCBhbGwgZm9yIHByb3BlciBmYWxsYmFja1xufVxuQG1peGluIGdyYWRpZW50LXJhZGlhbCgkaW5uZXItY29sb3I6ICM1NTUsICRvdXRlci1jb2xvcjogIzMzMykge1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LXJhZGlhbC1ncmFkaWVudChjaXJjbGUsICRpbm5lci1jb2xvciwgJG91dGVyLWNvbG9yKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSwgJGlubmVyLWNvbG9yLCAkb3V0ZXItY29sb3IpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xufVxuQG1peGluIGdyYWRpZW50LXN0cmlwZWQoJGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC4xNSksICRhbmdsZTogNDVkZWcpIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoJGFuZ2xlLCAkY29sb3IgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgJGNvbG9yIDUwJSwgJGNvbG9yIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCgkYW5nbGUsICRjb2xvciAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCAkY29sb3IgNTAlLCAkY29sb3IgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KCRhbmdsZSwgJGNvbG9yIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsICRjb2xvciA1MCUsICRjb2xvciA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xufVxuIiwiLy8gUHJvZ3Jlc3MgYmFyc1xuXG5AbWl4aW4gcHJvZ3Jlc3MtYmFyLXZhcmlhbnQoJGNvbG9yKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcblxuICAvLyBEZXByZWNhdGVkIHBhcmVudCBjbGFzcyByZXF1aXJlbWVudCBhcyBvZiB2My4yLjBcbiAgLnByb2dyZXNzLXN0cmlwZWQgJiB7XG4gICAgQGluY2x1ZGUgZ3JhZGllbnQtc3RyaXBlZDtcbiAgfVxufVxuIiwiLm1lZGlhIHtcbiAgLy8gUHJvcGVyIHNwYWNpbmcgYmV0d2VlbiBpbnN0YW5jZXMgb2YgLm1lZGlhXG4gIG1hcmdpbi10b3A6IDE1cHg7XG5cbiAgJjpmaXJzdC1jaGlsZCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxufVxuXG4ubWVkaWEsXG4ubWVkaWEtYm9keSB7XG4gIHpvb206IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5tZWRpYS1ib2R5IHtcbiAgd2lkdGg6IDEwMDAwcHg7XG59XG5cbi5tZWRpYS1vYmplY3Qge1xuICBkaXNwbGF5OiBibG9jaztcblxuICAvLyBGaXggY29sbGFwc2UgaW4gd2Via2l0IGZyb20gbWF4LXdpZHRoOiAxMDAlIGFuZCBkaXNwbGF5OiB0YWJsZS1jZWxsLlxuICAmLmltZy10aHVtYm5haWwge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgfVxufVxuXG4ubWVkaWEtcmlnaHQsXG4ubWVkaWEgPiAucHVsbC1yaWdodCB7XG4gIHBhZGRpbmctbGVmdDogMTBweDtcbn1cblxuLm1lZGlhLWxlZnQsXG4ubWVkaWEgPiAucHVsbC1sZWZ0IHtcbiAgcGFkZGluZy1yaWdodDogMTBweDtcbn1cblxuLm1lZGlhLWxlZnQsXG4ubWVkaWEtcmlnaHQsXG4ubWVkaWEtYm9keSB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG5cbi5tZWRpYS1taWRkbGUge1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4ubWVkaWEtYm90dG9tIHtcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbn1cblxuLy8gUmVzZXQgbWFyZ2lucyBvbiBoZWFkaW5ncyBmb3IgdGlnaHRlciBkZWZhdWx0IHNwYWNpbmdcbi5tZWRpYS1oZWFkaW5nIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xufVxuXG4vLyBNZWRpYSBsaXN0IHZhcmlhdGlvblxuLy9cbi8vIFVuZG8gZGVmYXVsdCB1bC9vbCBzdHlsZXNcbi5tZWRpYS1saXN0IHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuIiwiLy9cbi8vIExpc3QgZ3JvdXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIEJhc2UgY2xhc3Ncbi8vXG4vLyBFYXNpbHkgdXNhYmxlIG9uIDx1bD4sIDxvbD4sIG9yIDxkaXY+LlxuXG4ubGlzdC1ncm91cCB7XG4gIC8vIE5vIG5lZWQgdG8gc2V0IGxpc3Qtc3R5bGU6IG5vbmU7IHNpbmNlIC5saXN0LWdyb3VwLWl0ZW0gaXMgYmxvY2sgbGV2ZWxcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgcGFkZGluZy1sZWZ0OiAwOyAvLyByZXNldCBwYWRkaW5nIGJlY2F1c2UgdWwgYW5kIG9sXG59XG5cblxuLy8gSW5kaXZpZHVhbCBsaXN0IGl0ZW1zXG4vL1xuLy8gVXNlIG9uIGBsaWBzIG9yIGBkaXZgcyB3aXRoaW4gdGhlIGAubGlzdC1ncm91cGAgcGFyZW50LlxuXG4ubGlzdC1ncm91cC1pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMTBweCAxNXB4O1xuICAvLyBQbGFjZSB0aGUgYm9yZGVyIG9uIHRoZSBsaXN0IGl0ZW1zIGFuZCBuZWdhdGl2ZSBtYXJnaW4gdXAgZm9yIGJldHRlciBzdHlsaW5nXG4gIG1hcmdpbi1ib3R0b206IC0xcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICRsaXN0LWdyb3VwLWJnO1xuICBib3JkZXI6IDFweCBzb2xpZCAkbGlzdC1ncm91cC1ib3JkZXI7XG5cbiAgLy8gUm91bmQgdGhlIGZpcnN0IGFuZCBsYXN0IGl0ZW1zXG4gICY6Zmlyc3QtY2hpbGQge1xuICAgIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKCRsaXN0LWdyb3VwLWJvcmRlci1yYWRpdXMpO1xuICB9XG4gICY6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBAaW5jbHVkZSBib3JkZXItYm90dG9tLXJhZGl1cygkbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzKTtcbiAgfVxufVxuXG5cbi8vIEludGVyYWN0aXZlIGxpc3QgaXRlbXNcbi8vXG4vLyBVc2UgYW5jaG9yIG9yIGJ1dHRvbiBlbGVtZW50cyBpbnN0ZWFkIG9mIGBsaWBzIG9yIGBkaXZgcyB0byBjcmVhdGUgaW50ZXJhY3RpdmUgaXRlbXMuXG4vLyBJbmNsdWRlcyBhbiBleHRyYSBgLmFjdGl2ZWAgbW9kaWZpZXIgY2xhc3MgZm9yIHNob3dpbmcgc2VsZWN0ZWQgaXRlbXMuXG5cbmEubGlzdC1ncm91cC1pdGVtLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbSB7XG4gIGNvbG9yOiAkbGlzdC1ncm91cC1saW5rLWNvbG9yO1xuXG4gIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gICAgY29sb3I6ICRsaXN0LWdyb3VwLWxpbmstaGVhZGluZy1jb2xvcjtcbiAgfVxuXG4gIC8vIEhvdmVyIHN0YXRlXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogJGxpc3QtZ3JvdXAtbGluay1ob3Zlci1jb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbGlzdC1ncm91cC1ob3Zlci1iZztcbiAgfVxufVxuXG5idXR0b24ubGlzdC1ncm91cC1pdGVtIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi5saXN0LWdyb3VwLWl0ZW0ge1xuICAvLyBEaXNhYmxlZCBzdGF0ZVxuICAmLmRpc2FibGVkLFxuICAmLmRpc2FibGVkOmhvdmVyLFxuICAmLmRpc2FibGVkOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbGlzdC1ncm91cC1kaXNhYmxlZC1iZztcbiAgICBjb2xvcjogJGxpc3QtZ3JvdXAtZGlzYWJsZWQtY29sb3I7XG4gICAgY3Vyc29yOiAkY3Vyc29yLWRpc2FibGVkO1xuXG4gICAgLy8gRm9yY2UgY29sb3IgdG8gaW5oZXJpdCBmb3IgY3VzdG9tIGNvbnRlbnRcbiAgICAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuICAgIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7XG4gICAgICBjb2xvcjogJGxpc3QtZ3JvdXAtZGlzYWJsZWQtdGV4dC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAvLyBBY3RpdmUgY2xhc3Mgb24gaXRlbSBpdHNlbGYsIG5vdCBwYXJlbnRcbiAgJi5hY3RpdmUsXG4gICYuYWN0aXZlOmhvdmVyLFxuICAmLmFjdGl2ZTpmb2N1cyB7XG4gICAgei1pbmRleDogMjsgLy8gUGxhY2UgYWN0aXZlIGl0ZW1zIGFib3ZlIHRoZWlyIHNpYmxpbmdzIGZvciBwcm9wZXIgYm9yZGVyIHN0eWxpbmdcbiAgICBjb2xvcjogJGxpc3QtZ3JvdXAtYWN0aXZlLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRsaXN0LWdyb3VwLWFjdGl2ZS1iZztcbiAgICBib3JkZXItY29sb3I6ICRsaXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXI7XG5cbiAgICAvLyBGb3JjZSBjb2xvciB0byBpbmhlcml0IGZvciBjdXN0b20gY29udGVudFxuICAgIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbiAgICAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiBzbWFsbCxcbiAgICAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiAuc21hbGwge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuICAgIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7XG4gICAgICBjb2xvcjogJGxpc3QtZ3JvdXAtYWN0aXZlLXRleHQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cblxuLy8gQ29udGV4dHVhbCB2YXJpYW50c1xuLy9cbi8vIEFkZCBtb2RpZmllciBjbGFzc2VzIHRvIGNoYW5nZSB0ZXh0IGFuZCBiYWNrZ3JvdW5kIGNvbG9yIG9uIGluZGl2aWR1YWwgaXRlbXMuXG4vLyBPcmdhbml6YXRpb25hbGx5LCB0aGlzIG11c3QgY29tZSBhZnRlciB0aGUgYDpob3ZlcmAgc3RhdGVzLlxuXG5AaW5jbHVkZSBsaXN0LWdyb3VwLWl0ZW0tdmFyaWFudChzdWNjZXNzLCAkc3RhdGUtc3VjY2Vzcy1iZywgJHN0YXRlLXN1Y2Nlc3MtdGV4dCk7XG5AaW5jbHVkZSBsaXN0LWdyb3VwLWl0ZW0tdmFyaWFudChpbmZvLCAkc3RhdGUtaW5mby1iZywgJHN0YXRlLWluZm8tdGV4dCk7XG5AaW5jbHVkZSBsaXN0LWdyb3VwLWl0ZW0tdmFyaWFudCh3YXJuaW5nLCAkc3RhdGUtd2FybmluZy1iZywgJHN0YXRlLXdhcm5pbmctdGV4dCk7XG5AaW5jbHVkZSBsaXN0LWdyb3VwLWl0ZW0tdmFyaWFudChkYW5nZXIsICRzdGF0ZS1kYW5nZXItYmcsICRzdGF0ZS1kYW5nZXItdGV4dCk7XG5cblxuLy8gQ3VzdG9tIGNvbnRlbnQgb3B0aW9uc1xuLy9cbi8vIEV4dHJhIGNsYXNzZXMgZm9yIGNyZWF0aW5nIHdlbGwtZm9ybWF0dGVkIGNvbnRlbnQgd2l0aGluIGAubGlzdC1ncm91cC1pdGVtYHMuXG5cbi5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbn1cbi5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjM7XG59XG4iLCIvLyBMaXN0IEdyb3Vwc1xuXG5AbWl4aW4gbGlzdC1ncm91cC1pdGVtLXZhcmlhbnQoJHN0YXRlLCAkYmFja2dyb3VuZCwgJGNvbG9yKSB7XG4gIC5saXN0LWdyb3VwLWl0ZW0tI3skc3RhdGV9IHtcbiAgICBjb2xvcjogJGNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kO1xuXG4gICAgLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIGEmLCBidXR0b24mIHRvIGEubGlzdC1ncm91cC1pdGVtLSN7JHN0YXRlfSwgYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS0jeyRzdGF0ZX1cbiAgfVxuXG4gIGEubGlzdC1ncm91cC1pdGVtLSN7JHN0YXRlfSxcbiAgYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS0jeyRzdGF0ZX0ge1xuICAgIGNvbG9yOiAkY29sb3I7XG5cbiAgICAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAkY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGJhY2tncm91bmQsIDUlKTtcbiAgICB9XG4gICAgJi5hY3RpdmUsXG4gICAgJi5hY3RpdmU6aG92ZXIsXG4gICAgJi5hY3RpdmU6Zm9jdXMge1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG4gICAgICBib3JkZXItY29sb3I6ICRjb2xvcjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vXG4vLyBQYW5lbHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBjbGFzc1xuLnBhbmVsIHtcbiAgbWFyZ2luLWJvdHRvbTogJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkcGFuZWwtYmc7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiAkcGFuZWwtYm9yZGVyLXJhZGl1cztcbiAgQGluY2x1ZGUgYm94LXNoYWRvdygwIDFweCAxcHggcmdiYSgwLDAsMCwuMDUpKTtcbn1cblxuLy8gUGFuZWwgY29udGVudHNcbi5wYW5lbC1ib2R5IHtcbiAgcGFkZGluZzogJHBhbmVsLWJvZHktcGFkZGluZztcbiAgQGluY2x1ZGUgY2xlYXJmaXg7XG59XG5cbi8vIE9wdGlvbmFsIGhlYWRpbmdcbi5wYW5lbC1oZWFkaW5nIHtcbiAgcGFkZGluZzogJHBhbmVsLWhlYWRpbmctcGFkZGluZztcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBAaW5jbHVkZSBib3JkZXItdG9wLXJhZGl1cygoJHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKSk7XG5cbiAgPiAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gIH1cbn1cblxuLy8gV2l0aGluIGhlYWRpbmcsIHN0cmlwIGFueSBgaCpgIHRhZyBvZiBpdHMgZGVmYXVsdCBtYXJnaW5zIGZvciBzcGFjaW5nLlxuLnBhbmVsLXRpdGxlIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgZm9udC1zaXplOiBjZWlsKCgkZm9udC1zaXplLWJhc2UgKiAxLjEyNSkpO1xuICBjb2xvcjogaW5oZXJpdDtcblxuICA+IGEsXG4gID4gc21hbGwsXG4gID4gLnNtYWxsLFxuICA+IHNtYWxsID4gYSxcbiAgPiAuc21hbGwgPiBhIHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgfVxufVxuXG4vLyBPcHRpb25hbCBmb290ZXIgKHN0YXlzIGdyYXkgaW4gZXZlcnkgbW9kaWZpZXIgY2xhc3MpXG4ucGFuZWwtZm9vdGVyIHtcbiAgcGFkZGluZzogJHBhbmVsLWZvb3Rlci1wYWRkaW5nO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkcGFuZWwtZm9vdGVyLWJnO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgJHBhbmVsLWlubmVyLWJvcmRlcjtcbiAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXMoKCRwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSkpO1xufVxuXG5cbi8vIExpc3QgZ3JvdXBzIGluIHBhbmVsc1xuLy9cbi8vIEJ5IGRlZmF1bHQsIHNwYWNlIG91dCBsaXN0IGdyb3VwIGNvbnRlbnQgZnJvbSBwYW5lbCBoZWFkaW5ncyB0byBhY2NvdW50IGZvclxuLy8gYW55IGtpbmQgb2YgY3VzdG9tIGNvbnRlbnQgYmV0d2VlbiB0aGUgdHdvLlxuXG4ucGFuZWwge1xuICA+IC5saXN0LWdyb3VwLFxuICA+IC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgLmxpc3QtZ3JvdXAtaXRlbSB7XG4gICAgICBib3JkZXItd2lkdGg6IDFweCAwO1xuICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICB9XG5cbiAgICAvLyBBZGQgYm9yZGVyIHRvcCByYWRpdXMgZm9yIGZpcnN0IG9uZVxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3A6IDA7XG4gICAgICAgIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKCgkcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgYm9yZGVyIGJvdHRvbSByYWRpdXMgZm9yIGxhc3Qgb25lXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgIEBpbmNsdWRlIGJvcmRlci1ib3R0b20tcmFkaXVzKCgkcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwIHtcbiAgICAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcbiAgICAgIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKDApO1xuICAgIH1cbiAgfVxufVxuLy8gQ29sbGFwc2Ugc3BhY2UgYmV0d2VlbiB3aGVuIHRoZXJlJ3Mgbm8gYWRkaXRpb25hbCBjb250ZW50LlxuLnBhbmVsLWhlYWRpbmcgKyAubGlzdC1ncm91cCB7XG4gIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xuICAgIGJvcmRlci10b3Atd2lkdGg6IDA7XG4gIH1cbn1cbi5saXN0LWdyb3VwICsgLnBhbmVsLWZvb3RlciB7XG4gIGJvcmRlci10b3Atd2lkdGg6IDA7XG59XG5cbi8vIFRhYmxlcyBpbiBwYW5lbHNcbi8vXG4vLyBQbGFjZSBhIG5vbi1ib3JkZXJlZCBgLnRhYmxlYCB3aXRoaW4gYSBwYW5lbCAobm90IHdpdGhpbiBhIGAucGFuZWwtYm9keWApIGFuZFxuLy8gd2F0Y2ggaXQgZ28gZnVsbCB3aWR0aC5cblxuLnBhbmVsIHtcbiAgPiAudGFibGUsXG4gID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUsXG4gID4gLnBhbmVsLWNvbGxhcHNlID4gLnRhYmxlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgY2FwdGlvbiB7XG4gICAgICBwYWRkaW5nLWxlZnQ6ICRwYW5lbC1ib2R5LXBhZGRpbmc7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkcGFuZWwtYm9keS1wYWRkaW5nO1xuICAgIH1cbiAgfVxuICAvLyBBZGQgYm9yZGVyIHRvcCByYWRpdXMgZm9yIGZpcnN0IG9uZVxuICA+IC50YWJsZTpmaXJzdC1jaGlsZCxcbiAgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCB7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXRvcC1yYWRpdXMoKCRwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSkpO1xuXG4gICAgPiB0aGVhZDpmaXJzdC1jaGlsZCxcbiAgICA+IHRib2R5OmZpcnN0LWNoaWxkIHtcbiAgICAgID4gdHI6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAoJHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKTtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICgkcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpO1xuXG4gICAgICAgIHRkOmZpcnN0LWNoaWxkLFxuICAgICAgICB0aDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogKCRwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGQ6bGFzdC1jaGlsZCxcbiAgICAgICAgdGg6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICgkcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEFkZCBib3JkZXIgYm90dG9tIHJhZGl1cyBmb3IgbGFzdCBvbmVcbiAgPiAudGFibGU6bGFzdC1jaGlsZCxcbiAgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQge1xuICAgIEBpbmNsdWRlIGJvcmRlci1ib3R0b20tcmFkaXVzKCgkcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpKTtcblxuICAgID4gdGJvZHk6bGFzdC1jaGlsZCxcbiAgICA+IHRmb290Omxhc3QtY2hpbGQge1xuICAgICAgPiB0cjpsYXN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogKCRwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSk7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAoJHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKTtcblxuICAgICAgICB0ZDpmaXJzdC1jaGlsZCxcbiAgICAgICAgdGg6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICgkcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRkOmxhc3QtY2hpbGQsXG4gICAgICAgIHRoOmxhc3QtY2hpbGQge1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAoJHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICA+IC5wYW5lbC1ib2R5ICsgLnRhYmxlLFxuICA+IC5wYW5lbC1ib2R5ICsgLnRhYmxlLXJlc3BvbnNpdmUsXG4gID4gLnRhYmxlICsgLnBhbmVsLWJvZHksXG4gID4gLnRhYmxlLXJlc3BvbnNpdmUgKyAucGFuZWwtYm9keSB7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR0YWJsZS1ib3JkZXItY29sb3I7XG4gIH1cbiAgPiAudGFibGUgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoLFxuICA+IC50YWJsZSA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQge1xuICAgIGJvcmRlci10b3A6IDA7XG4gIH1cbiAgPiAudGFibGUtYm9yZGVyZWQsXG4gID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQge1xuICAgIGJvcmRlcjogMDtcbiAgICA+IHRoZWFkLFxuICAgID4gdGJvZHksXG4gICAgPiB0Zm9vdCB7XG4gICAgICA+IHRyIHtcbiAgICAgICAgPiB0aDpmaXJzdC1jaGlsZCxcbiAgICAgICAgPiB0ZDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgICAgIH1cbiAgICAgICAgPiB0aDpsYXN0LWNoaWxkLFxuICAgICAgICA+IHRkOmxhc3QtY2hpbGQge1xuICAgICAgICAgIGJvcmRlci1yaWdodDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICA+IHRoZWFkLFxuICAgID4gdGJvZHkge1xuICAgICAgPiB0cjpmaXJzdC1jaGlsZCB7XG4gICAgICAgID4gdGQsXG4gICAgICAgID4gdGgge1xuICAgICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgPiB0Ym9keSxcbiAgICA+IHRmb290IHtcbiAgICAgID4gdHI6bGFzdC1jaGlsZCB7XG4gICAgICAgID4gdGQsXG4gICAgICAgID4gdGgge1xuICAgICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgPiAudGFibGUtcmVzcG9uc2l2ZSB7XG4gICAgYm9yZGVyOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuXG4vLyBDb2xsYXBzYWJsZSBwYW5lbHMgKGFrYSwgYWNjb3JkaW9uKVxuLy9cbi8vIFdyYXAgYSBzZXJpZXMgb2YgcGFuZWxzIGluIGAucGFuZWwtZ3JvdXBgIHRvIHR1cm4gdGhlbSBpbnRvIGFuIGFjY29yZGlvbiB3aXRoXG4vLyB0aGUgaGVscCBvZiBvdXIgY29sbGFwc2UgSmF2YVNjcmlwdCBwbHVnaW4uXG5cbi5wYW5lbC1ncm91cCB7XG4gIG1hcmdpbi1ib3R0b206ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcblxuICAvLyBUaWdodGVuIHVwIG1hcmdpbiBzbyBpdCdzIG9ubHkgYmV0d2VlbiBwYW5lbHNcbiAgLnBhbmVsIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIGJvcmRlci1yYWRpdXM6ICRwYW5lbC1ib3JkZXItcmFkaXVzO1xuXG4gICAgKyAucGFuZWwge1xuICAgICAgbWFyZ2luLXRvcDogNXB4O1xuICAgIH1cbiAgfVxuXG4gIC5wYW5lbC1oZWFkaW5nIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuXG4gICAgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSxcbiAgICArIC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwIHtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAkcGFuZWwtaW5uZXItYm9yZGVyO1xuICAgIH1cbiAgfVxuXG4gIC5wYW5lbC1mb290ZXIge1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgKyAucGFuZWwtY29sbGFwc2UgLnBhbmVsLWJvZHkge1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRwYW5lbC1pbm5lci1ib3JkZXI7XG4gICAgfVxuICB9XG59XG5cblxuLy8gQ29udGV4dHVhbCB2YXJpYXRpb25zXG4ucGFuZWwtZGVmYXVsdCB7XG4gIEBpbmNsdWRlIHBhbmVsLXZhcmlhbnQoJHBhbmVsLWRlZmF1bHQtYm9yZGVyLCAkcGFuZWwtZGVmYXVsdC10ZXh0LCAkcGFuZWwtZGVmYXVsdC1oZWFkaW5nLWJnLCAkcGFuZWwtZGVmYXVsdC1ib3JkZXIpO1xufVxuLnBhbmVsLXByaW1hcnkge1xuICBAaW5jbHVkZSBwYW5lbC12YXJpYW50KCRwYW5lbC1wcmltYXJ5LWJvcmRlciwgJHBhbmVsLXByaW1hcnktdGV4dCwgJHBhbmVsLXByaW1hcnktaGVhZGluZy1iZywgJHBhbmVsLXByaW1hcnktYm9yZGVyKTtcbn1cbi5wYW5lbC1zdWNjZXNzIHtcbiAgQGluY2x1ZGUgcGFuZWwtdmFyaWFudCgkcGFuZWwtc3VjY2Vzcy1ib3JkZXIsICRwYW5lbC1zdWNjZXNzLXRleHQsICRwYW5lbC1zdWNjZXNzLWhlYWRpbmctYmcsICRwYW5lbC1zdWNjZXNzLWJvcmRlcik7XG59XG4ucGFuZWwtaW5mbyB7XG4gIEBpbmNsdWRlIHBhbmVsLXZhcmlhbnQoJHBhbmVsLWluZm8tYm9yZGVyLCAkcGFuZWwtaW5mby10ZXh0LCAkcGFuZWwtaW5mby1oZWFkaW5nLWJnLCAkcGFuZWwtaW5mby1ib3JkZXIpO1xufVxuLnBhbmVsLXdhcm5pbmcge1xuICBAaW5jbHVkZSBwYW5lbC12YXJpYW50KCRwYW5lbC13YXJuaW5nLWJvcmRlciwgJHBhbmVsLXdhcm5pbmctdGV4dCwgJHBhbmVsLXdhcm5pbmctaGVhZGluZy1iZywgJHBhbmVsLXdhcm5pbmctYm9yZGVyKTtcbn1cbi5wYW5lbC1kYW5nZXIge1xuICBAaW5jbHVkZSBwYW5lbC12YXJpYW50KCRwYW5lbC1kYW5nZXItYm9yZGVyLCAkcGFuZWwtZGFuZ2VyLXRleHQsICRwYW5lbC1kYW5nZXItaGVhZGluZy1iZywgJHBhbmVsLWRhbmdlci1ib3JkZXIpO1xufVxuIiwiLy8gUGFuZWxzXG5cbkBtaXhpbiBwYW5lbC12YXJpYW50KCRib3JkZXIsICRoZWFkaW5nLXRleHQtY29sb3IsICRoZWFkaW5nLWJnLWNvbG9yLCAkaGVhZGluZy1ib3JkZXIpIHtcbiAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyO1xuXG4gICYgPiAucGFuZWwtaGVhZGluZyB7XG4gICAgY29sb3I6ICRoZWFkaW5nLXRleHQtY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGhlYWRpbmctYmctY29sb3I7XG4gICAgYm9yZGVyLWNvbG9yOiAkaGVhZGluZy1ib3JkZXI7XG5cbiAgICArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6ICRib3JkZXI7XG4gICAgfVxuICAgIC5iYWRnZSB7XG4gICAgICBjb2xvcjogJGhlYWRpbmctYmctY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGluZy10ZXh0LWNvbG9yO1xuICAgIH1cbiAgfVxuICAmID4gLnBhbmVsLWZvb3RlciB7XG4gICAgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYm9yZGVyO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRW1iZWRzIHJlc3BvbnNpdmVcbi8vXG4vLyBDcmVkaXQ6IE5pY29sYXMgR2FsbGFnaGVyIGFuZCBTVUlUIENTUy5cblxuLmVtYmVkLXJlc3BvbnNpdmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgLmVtYmVkLXJlc3BvbnNpdmUtaXRlbSxcbiAgaWZyYW1lLFxuICBlbWJlZCxcbiAgb2JqZWN0LFxuICB2aWRlbyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyOiAwO1xuICB9XG59XG5cbi8vIE1vZGlmaWVyIGNsYXNzIGZvciAxNjo5IGFzcGVjdCByYXRpb1xuLmVtYmVkLXJlc3BvbnNpdmUtMTZieTkge1xuICBwYWRkaW5nLWJvdHRvbTogNTYuMjUlO1xufVxuXG4vLyBNb2RpZmllciBjbGFzcyBmb3IgNDozIGFzcGVjdCByYXRpb1xuLmVtYmVkLXJlc3BvbnNpdmUtNGJ5MyB7XG4gIHBhZGRpbmctYm90dG9tOiA3NSU7XG59XG4iLCIvL1xuLy8gV2VsbHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBjbGFzc1xuLndlbGwge1xuICBtaW4taGVpZ2h0OiAyMHB4O1xuICBwYWRkaW5nOiAxOXB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkd2VsbC1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgJHdlbGwtYm9yZGVyO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuICBAaW5jbHVkZSBib3gtc2hhZG93KGluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNSkpO1xuICBibG9ja3F1b3RlIHtcbiAgICBib3JkZXItY29sb3I6ICNkZGQ7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsMCwwLC4xNSk7XG4gIH1cbn1cblxuLy8gU2l6ZXNcbi53ZWxsLWxnIHtcbiAgcGFkZGluZzogMjRweDtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtbGFyZ2U7XG59XG4ud2VsbC1zbSB7XG4gIHBhZGRpbmc6IDlweDtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtc21hbGw7XG59XG4iLCIvL1xuLy8gQ2xvc2UgaWNvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLmNsb3NlIHtcbiAgZmxvYXQ6IHJpZ2h0O1xuICBmb250LXNpemU6ICgkZm9udC1zaXplLWJhc2UgKiAxLjUpO1xuICBmb250LXdlaWdodDogJGNsb3NlLWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICRjbG9zZS1jb2xvcjtcbiAgdGV4dC1zaGFkb3c6ICRjbG9zZS10ZXh0LXNoYWRvdztcbiAgQGluY2x1ZGUgb3BhY2l0eSguMik7XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6ICRjbG9zZS1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIEBpbmNsdWRlIG9wYWNpdHkoLjUpO1xuICB9XG5cbiAgLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIGJ1dHRvbiYgdG8gYnV0dG9uLmNsb3NlXG59XG5cbi8vIEFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgYnV0dG9uIHZlcnNpb25cbi8vIGlPUyByZXF1aXJlcyB0aGUgYnV0dG9uIGVsZW1lbnQgaW5zdGVhZCBvZiBhbiBhbmNob3IgdGFnLlxuLy8gSWYgeW91IHdhbnQgdGhlIGFuY2hvciB2ZXJzaW9uLCBpdCByZXF1aXJlcyBgaHJlZj1cIiNcImAuXG4vLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL2NsaWNrI1NhZmFyaV9Nb2JpbGVcbmJ1dHRvbi5jbG9zZSB7XG4gIHBhZGRpbmc6IDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogMDtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuIiwiLy9cbi8vIE1vZGFsc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gLm1vZGFsLW9wZW4gICAgICAtIGJvZHkgY2xhc3MgZm9yIGtpbGxpbmcgdGhlIHNjcm9sbFxuLy8gLm1vZGFsICAgICAgICAgICAtIGNvbnRhaW5lciB0byBzY3JvbGwgd2l0aGluXG4vLyAubW9kYWwtZGlhbG9nICAgIC0gcG9zaXRpb25pbmcgc2hlbGwgZm9yIHRoZSBhY3R1YWwgbW9kYWxcbi8vIC5tb2RhbC1jb250ZW50ICAgLSBhY3R1YWwgbW9kYWwgdy8gYmcgYW5kIGNvcm5lcnMgYW5kIHNoaXRcblxuLy8gS2lsbCB0aGUgc2Nyb2xsIG9uIHRoZSBib2R5XG4ubW9kYWwtb3BlbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8vIENvbnRhaW5lciB0aGF0IHRoZSBtb2RhbCBzY3JvbGxzIHdpdGhpblxuLm1vZGFsIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR6aW5kZXgtbW9kYWw7XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcblxuICAvLyBQcmV2ZW50IENocm9tZSBvbiBXaW5kb3dzIGZyb20gYWRkaW5nIGEgZm9jdXMgb3V0bGluZS4gRm9yIGRldGFpbHMsIHNlZVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8xMDk1MS5cbiAgb3V0bGluZTogMDtcblxuICAvLyBXaGVuIGZhZGluZyBpbiB0aGUgbW9kYWwsIGFuaW1hdGUgaXQgdG8gc2xpZGUgZG93blxuICAmLmZhZGUgLm1vZGFsLWRpYWxvZyB7XG4gICAgQGluY2x1ZGUgdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24tdHJhbnNmb3JtKDAuM3MgZWFzZS1vdXQpO1xuICB9XG4gICYuaW4gLm1vZGFsLWRpYWxvZyB7IEBpbmNsdWRlIHRyYW5zbGF0ZSgwLCAwKSB9XG59XG4ubW9kYWwtb3BlbiAubW9kYWwge1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi8vIFNoZWxsIGRpdiB0byBwb3NpdGlvbiB0aGUgbW9kYWwgd2l0aCBib3R0b20gcGFkZGluZ1xuLm1vZGFsLWRpYWxvZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IGF1dG87XG4gIG1hcmdpbjogMTBweDtcbn1cblxuLy8gQWN0dWFsIG1vZGFsXG4ubW9kYWwtY29udGVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJG1vZGFsLWNvbnRlbnQtYmc7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRtb2RhbC1jb250ZW50LWZhbGxiYWNrLWJvcmRlci1jb2xvcjsgLy9vbGQgYnJvd3NlcnMgZmFsbGJhY2sgKGllOCBldGMpXG4gIGJvcmRlcjogMXB4IHNvbGlkICRtb2RhbC1jb250ZW50LWJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtbGFyZ2U7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3coMCAzcHggOXB4IHJnYmEoMCwwLDAsLjUpKTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgLy8gUmVtb3ZlIGZvY3VzIG91dGxpbmUgZnJvbSBvcGVuZWQgbW9kYWxcbiAgb3V0bGluZTogMDtcbn1cblxuLy8gTW9kYWwgYmFja2dyb3VuZFxuLm1vZGFsLWJhY2tkcm9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR6aW5kZXgtbW9kYWwtYmFja2dyb3VuZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJG1vZGFsLWJhY2tkcm9wLWJnO1xuICAvLyBGYWRlIGZvciBiYWNrZHJvcFxuICAmLmZhZGUgeyBAaW5jbHVkZSBvcGFjaXR5KDApOyB9XG4gICYuaW4geyBAaW5jbHVkZSBvcGFjaXR5KCRtb2RhbC1iYWNrZHJvcC1vcGFjaXR5KTsgfVxufVxuXG4vLyBNb2RhbCBoZWFkZXJcbi8vIFRvcCBzZWN0aW9uIG9mIHRoZSBtb2RhbCB3LyB0aXRsZSBhbmQgZGlzbWlzc1xuLm1vZGFsLWhlYWRlciB7XG4gIHBhZGRpbmc6ICRtb2RhbC10aXRsZS1wYWRkaW5nO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3I7XG4gIG1pbi1oZWlnaHQ6ICgkbW9kYWwtdGl0bGUtcGFkZGluZyArICRtb2RhbC10aXRsZS1saW5lLWhlaWdodCk7XG59XG4vLyBDbG9zZSBpY29uXG4ubW9kYWwtaGVhZGVyIC5jbG9zZSB7XG4gIG1hcmdpbi10b3A6IC0ycHg7XG59XG5cbi8vIFRpdGxlIHRleHQgd2l0aGluIGhlYWRlclxuLm1vZGFsLXRpdGxlIHtcbiAgbWFyZ2luOiAwO1xuICBsaW5lLWhlaWdodDogJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0O1xufVxuXG4vLyBNb2RhbCBib2R5XG4vLyBXaGVyZSBhbGwgbW9kYWwgY29udGVudCByZXNpZGVzIChzaWJsaW5nIG9mIC5tb2RhbC1oZWFkZXIgYW5kIC5tb2RhbC1mb290ZXIpXG4ubW9kYWwtYm9keSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogJG1vZGFsLWlubmVyLXBhZGRpbmc7XG59XG5cbi8vIEZvb3RlciAoZm9yIGFjdGlvbnMpXG4ubW9kYWwtZm9vdGVyIHtcbiAgcGFkZGluZzogJG1vZGFsLWlubmVyLXBhZGRpbmc7XG4gIHRleHQtYWxpZ246IHJpZ2h0OyAvLyByaWdodCBhbGlnbiBidXR0b25zXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAkbW9kYWwtZm9vdGVyLWJvcmRlci1jb2xvcjtcbiAgQGluY2x1ZGUgY2xlYXJmaXg7IC8vIGNsZWFyIGl0IGluIGNhc2UgZm9sa3MgdXNlIC5wdWxsLSogY2xhc3NlcyBvbiBidXR0b25zXG5cbiAgLy8gUHJvcGVybHkgc3BhY2Ugb3V0IGJ1dHRvbnNcbiAgLmJ0biArIC5idG4ge1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgLy8gYWNjb3VudCBmb3IgaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB3aGljaCBnZXRzIHRoZSBib3R0b20gbWFyZ2luIGxpa2UgYWxsIG90aGVyIGlucHV0c1xuICB9XG4gIC8vIGJ1dCBvdmVycmlkZSB0aGF0IGZvciBidXR0b24gZ3JvdXBzXG4gIC5idG4tZ3JvdXAgLmJ0biArIC5idG4ge1xuICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICB9XG4gIC8vIGFuZCBvdmVycmlkZSBpdCBmb3IgYmxvY2sgYnV0dG9ucyBhcyB3ZWxsXG4gIC5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxufVxuXG4vLyBNZWFzdXJlIHNjcm9sbGJhciB3aWR0aCBmb3IgcGFkZGluZyBib2R5IGR1cmluZyBtb2RhbCBzaG93L2hpZGVcbi5tb2RhbC1zY3JvbGxiYXItbWVhc3VyZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtOTk5OXB4O1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBvdmVyZmxvdzogc2Nyb2xsO1xufVxuXG4vLyBTY2FsZSB1cCB0aGUgbW9kYWxcbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAvLyBBdXRvbWF0aWNhbGx5IHNldCBtb2RhbCdzIHdpZHRoIGZvciBsYXJnZXIgdmlld3BvcnRzXG4gIC5tb2RhbC1kaWFsb2cge1xuICAgIHdpZHRoOiAkbW9kYWwtbWQ7XG4gICAgbWFyZ2luOiAzMHB4IGF1dG87XG4gIH1cbiAgLm1vZGFsLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coMCA1cHggMTVweCByZ2JhKDAsMCwwLC41KSk7XG4gIH1cblxuICAvLyBNb2RhbCBzaXplc1xuICAubW9kYWwtc20geyB3aWR0aDogJG1vZGFsLXNtOyB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICAubW9kYWwtbGcgeyB3aWR0aDogJG1vZGFsLWxnOyB9XG59XG4iLCIvL1xuLy8gVG9vbHRpcHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBjbGFzc1xuLnRvb2x0aXAge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6ICR6aW5kZXgtdG9vbHRpcDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIC8vIE91ciBwYXJlbnQgZWxlbWVudCBjYW4gYmUgYXJiaXRyYXJ5IHNpbmNlIHRvb2x0aXBzIGFyZSBieSBkZWZhdWx0IGluc2VydGVkIGFzIGEgc2libGluZyBvZiB0aGVpciB0YXJnZXQgZWxlbWVudC5cbiAgLy8gU28gcmVzZXQgb3VyIGZvbnQgYW5kIHRleHQgcHJvcGVydGllcyB0byBhdm9pZCBpbmhlcml0aW5nIHdlaXJkIHZhbHVlcy5cbiAgQGluY2x1ZGUgcmVzZXQtdGV4dDtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuXG4gIEBpbmNsdWRlIG9wYWNpdHkoMCk7XG5cbiAgJi5pbiAgICAgeyBAaW5jbHVkZSBvcGFjaXR5KCR0b29sdGlwLW9wYWNpdHkpOyB9XG4gICYudG9wICAgIHsgbWFyZ2luLXRvcDogIC0zcHg7IHBhZGRpbmc6ICR0b29sdGlwLWFycm93LXdpZHRoIDA7IH1cbiAgJi5yaWdodCAgeyBtYXJnaW4tbGVmdDogIDNweDsgcGFkZGluZzogMCAkdG9vbHRpcC1hcnJvdy13aWR0aDsgfVxuICAmLmJvdHRvbSB7IG1hcmdpbi10b3A6ICAgM3B4OyBwYWRkaW5nOiAkdG9vbHRpcC1hcnJvdy13aWR0aCAwOyB9XG4gICYubGVmdCAgIHsgbWFyZ2luLWxlZnQ6IC0zcHg7IHBhZGRpbmc6IDAgJHRvb2x0aXAtYXJyb3ctd2lkdGg7IH1cbn1cblxuLy8gV3JhcHBlciBmb3IgdGhlIHRvb2x0aXAgY29udGVudFxuLnRvb2x0aXAtaW5uZXIge1xuICBtYXgtd2lkdGg6ICR0b29sdGlwLW1heC13aWR0aDtcbiAgcGFkZGluZzogM3B4IDhweDtcbiAgY29sb3I6ICR0b29sdGlwLWNvbG9yO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICR0b29sdGlwLWJnO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xufVxuXG4vLyBBcnJvd3Ncbi50b29sdGlwLWFycm93IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xufVxuLy8gTm90ZTogRGVwcmVjYXRlZCAudG9wLWxlZnQsIC50b3AtcmlnaHQsIC5ib3R0b20tbGVmdCwgYW5kIC5ib3R0b20tcmlnaHQgYXMgb2YgdjMuMy4xXG4udG9vbHRpcCB7XG4gICYudG9wIC50b29sdGlwLWFycm93IHtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogNTAlO1xuICAgIG1hcmdpbi1sZWZ0OiAtJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiAkdG9vbHRpcC1hcnJvdy13aWR0aCAkdG9vbHRpcC1hcnJvdy13aWR0aCAwO1xuICAgIGJvcmRlci10b3AtY29sb3I6ICR0b29sdGlwLWFycm93LWNvbG9yO1xuICB9XG4gICYudG9wLWxlZnQgLnRvb2x0aXAtYXJyb3cge1xuICAgIGJvdHRvbTogMDtcbiAgICByaWdodDogJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgbWFyZ2luLWJvdHRvbTogLSR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci13aWR0aDogJHRvb2x0aXAtYXJyb3ctd2lkdGggJHRvb2x0aXAtYXJyb3ctd2lkdGggMDtcbiAgICBib3JkZXItdG9wLWNvbG9yOiAkdG9vbHRpcC1hcnJvdy1jb2xvcjtcbiAgfVxuICAmLnRvcC1yaWdodCAudG9vbHRpcC1hcnJvdyB7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6ICR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIG1hcmdpbi1ib3R0b206IC0kdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItd2lkdGg6ICR0b29sdGlwLWFycm93LXdpZHRoICR0b29sdGlwLWFycm93LXdpZHRoIDA7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogJHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gIH1cbiAgJi5yaWdodCAudG9vbHRpcC1hcnJvdyB7XG4gICAgdG9wOiA1MCU7XG4gICAgbGVmdDogMDtcbiAgICBtYXJnaW4tdG9wOiAtJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiAkdG9vbHRpcC1hcnJvdy13aWR0aCAkdG9vbHRpcC1hcnJvdy13aWR0aCAkdG9vbHRpcC1hcnJvdy13aWR0aCAwO1xuICAgIGJvcmRlci1yaWdodC1jb2xvcjogJHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gIH1cbiAgJi5sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgICB0b3A6IDUwJTtcbiAgICByaWdodDogMDtcbiAgICBtYXJnaW4tdG9wOiAtJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiAkdG9vbHRpcC1hcnJvdy13aWR0aCAwICR0b29sdGlwLWFycm93LXdpZHRoICR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAkdG9vbHRpcC1hcnJvdy1jb2xvcjtcbiAgfVxuICAmLmJvdHRvbSAudG9vbHRpcC1hcnJvdyB7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogLSR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci13aWR0aDogMCAkdG9vbHRpcC1hcnJvdy13aWR0aCAkdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkdG9vbHRpcC1hcnJvdy1jb2xvcjtcbiAgfVxuICAmLmJvdHRvbS1sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6ICR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIG1hcmdpbi10b3A6IC0kdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItd2lkdGg6IDAgJHRvb2x0aXAtYXJyb3ctd2lkdGggJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gIH1cbiAgJi5ib3R0b20tcmlnaHQgLnRvb2x0aXAtYXJyb3cge1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAkdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBtYXJnaW4tdG9wOiAtJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiAwICR0b29sdGlwLWFycm93LXdpZHRoICR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICR0b29sdGlwLWFycm93LWNvbG9yO1xuICB9XG59XG4iLCJAbWl4aW4gcmVzZXQtdGV4dCgpIHtcbiAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1iYXNlO1xuICAvLyBXZSBkZWxpYmVyYXRlbHkgZG8gTk9UIHJlc2V0IGZvbnQtc2l6ZS5cbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICBsaW5lLWJyZWFrOiBhdXRvO1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG4gIHRleHQtYWxpZ246IGxlZnQ7IC8vIEZhbGxiYWNrIGZvciB3aGVyZSBgc3RhcnRgIGlzIG5vdCBzdXBwb3J0ZWRcbiAgdGV4dC1hbGlnbjogc3RhcnQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICB3b3JkLWJyZWFrOiBub3JtYWw7XG4gIHdvcmQtc3BhY2luZzogbm9ybWFsO1xuICB3b3JkLXdyYXA6IG5vcm1hbDtcbn1cbiIsIi8vXG4vLyBQb3BvdmVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4ucG9wb3ZlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAkemluZGV4LXBvcG92ZXI7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIG1heC13aWR0aDogJHBvcG92ZXItbWF4LXdpZHRoO1xuICBwYWRkaW5nOiAxcHg7XG4gIC8vIE91ciBwYXJlbnQgZWxlbWVudCBjYW4gYmUgYXJiaXRyYXJ5IHNpbmNlIHBvcG92ZXJzIGFyZSBieSBkZWZhdWx0IGluc2VydGVkIGFzIGEgc2libGluZyBvZiB0aGVpciB0YXJnZXQgZWxlbWVudC5cbiAgLy8gU28gcmVzZXQgb3VyIGZvbnQgYW5kIHRleHQgcHJvcGVydGllcyB0byBhdm9pZCBpbmhlcml0aW5nIHdlaXJkIHZhbHVlcy5cbiAgQGluY2x1ZGUgcmVzZXQtdGV4dDtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLWJhc2U7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogJHBvcG92ZXItYmc7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRwb3BvdmVyLWZhbGxiYWNrLWJvcmRlci1jb2xvcjtcbiAgYm9yZGVyOiAxcHggc29saWQgJHBvcG92ZXItYm9yZGVyLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1sYXJnZTtcbiAgQGluY2x1ZGUgYm94LXNoYWRvdygwIDVweCAxMHB4IHJnYmEoMCwwLDAsLjIpKTtcblxuICAvLyBPZmZzZXQgdGhlIHBvcG92ZXIgdG8gYWNjb3VudCBmb3IgdGhlIHBvcG92ZXIgYXJyb3dcbiAgJi50b3AgICAgIHsgbWFyZ2luLXRvcDogLSRwb3BvdmVyLWFycm93LXdpZHRoOyB9XG4gICYucmlnaHQgICB7IG1hcmdpbi1sZWZ0OiAkcG9wb3Zlci1hcnJvdy13aWR0aDsgfVxuICAmLmJvdHRvbSAgeyBtYXJnaW4tdG9wOiAkcG9wb3Zlci1hcnJvdy13aWR0aDsgfVxuICAmLmxlZnQgICAgeyBtYXJnaW4tbGVmdDogLSRwb3BvdmVyLWFycm93LXdpZHRoOyB9XG59XG5cbi5wb3BvdmVyLXRpdGxlIHtcbiAgbWFyZ2luOiAwOyAvLyByZXNldCBoZWFkaW5nIG1hcmdpblxuICBwYWRkaW5nOiA4cHggMTRweDtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLWJhc2U7XG4gIGJhY2tncm91bmQtY29sb3I6ICRwb3BvdmVyLXRpdGxlLWJnO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgZGFya2VuKCRwb3BvdmVyLXRpdGxlLWJnLCA1JSk7XG4gIGJvcmRlci1yYWRpdXM6ICgkYm9yZGVyLXJhZGl1cy1sYXJnZSAtIDEpICgkYm9yZGVyLXJhZGl1cy1sYXJnZSAtIDEpIDAgMDtcbn1cblxuLnBvcG92ZXItY29udGVudCB7XG4gIHBhZGRpbmc6IDlweCAxNHB4O1xufVxuXG4vLyBBcnJvd3Ncbi8vXG4vLyAuYXJyb3cgaXMgb3V0ZXIsIC5hcnJvdzphZnRlciBpcyBpbm5lclxuXG4ucG9wb3ZlciA+IC5hcnJvdyB7XG4gICYsXG4gICY6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMDtcbiAgICBoZWlnaHQ6IDA7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICB9XG59XG4ucG9wb3ZlciA+IC5hcnJvdyB7XG4gIGJvcmRlci13aWR0aDogJHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XG59XG4ucG9wb3ZlciA+IC5hcnJvdzphZnRlciB7XG4gIGJvcmRlci13aWR0aDogJHBvcG92ZXItYXJyb3ctd2lkdGg7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG5cbi5wb3BvdmVyIHtcbiAgJi50b3AgPiAuYXJyb3cge1xuICAgIGxlZnQ6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogLSRwb3BvdmVyLWFycm93LW91dGVyLXdpZHRoO1xuICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogJHBvcG92ZXItYXJyb3ctb3V0ZXItZmFsbGJhY2stY29sb3I7IC8vIElFOCBmYWxsYmFja1xuICAgIGJvcmRlci10b3AtY29sb3I6ICRwb3BvdmVyLWFycm93LW91dGVyLWNvbG9yO1xuICAgIGJvdHRvbTogLSRwb3BvdmVyLWFycm93LW91dGVyLXdpZHRoO1xuICAgICY6YWZ0ZXIge1xuICAgICAgY29udGVudDogXCIgXCI7XG4gICAgICBib3R0b206IDFweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtJHBvcG92ZXItYXJyb3ctd2lkdGg7XG4gICAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHBvcG92ZXItYXJyb3ctY29sb3I7XG4gICAgfVxuICB9XG4gICYucmlnaHQgPiAuYXJyb3cge1xuICAgIHRvcDogNTAlO1xuICAgIGxlZnQ6IC0kcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDtcbiAgICBtYXJnaW4tdG9wOiAtJHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XG4gICAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7XG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAkcG9wb3Zlci1hcnJvdy1vdXRlci1mYWxsYmFjay1jb2xvcjsgLy8gSUU4IGZhbGxiYWNrXG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAkcG9wb3Zlci1hcnJvdy1vdXRlci1jb2xvcjtcbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgbGVmdDogMXB4O1xuICAgICAgYm90dG9tOiAtJHBvcG92ZXItYXJyb3ctd2lkdGg7XG4gICAgICBib3JkZXItbGVmdC13aWR0aDogMDtcbiAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogJHBvcG92ZXItYXJyb3ctY29sb3I7XG4gICAgfVxuICB9XG4gICYuYm90dG9tID4gLmFycm93IHtcbiAgICBsZWZ0OiA1MCU7XG4gICAgbWFyZ2luLWxlZnQ6IC0kcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDtcbiAgICBib3JkZXItdG9wLXdpZHRoOiAwO1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRwb3BvdmVyLWFycm93LW91dGVyLWZhbGxiYWNrLWNvbG9yOyAvLyBJRTggZmFsbGJhY2tcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkcG9wb3Zlci1hcnJvdy1vdXRlci1jb2xvcjtcbiAgICB0b3A6IC0kcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDtcbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgdG9wOiAxcHg7XG4gICAgICBtYXJnaW4tbGVmdDogLSRwb3BvdmVyLWFycm93LXdpZHRoO1xuICAgICAgYm9yZGVyLXRvcC13aWR0aDogMDtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRwb3BvdmVyLWFycm93LWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gICYubGVmdCA+IC5hcnJvdyB7XG4gICAgdG9wOiA1MCU7XG4gICAgcmlnaHQ6IC0kcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDtcbiAgICBtYXJnaW4tdG9wOiAtJHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XG4gICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAkcG9wb3Zlci1hcnJvdy1vdXRlci1mYWxsYmFjay1jb2xvcjsgLy8gSUU4IGZhbGxiYWNrXG4gICAgYm9yZGVyLWxlZnQtY29sb3I6ICRwb3BvdmVyLWFycm93LW91dGVyLWNvbG9yO1xuICAgICY6YWZ0ZXIge1xuICAgICAgY29udGVudDogXCIgXCI7XG4gICAgICByaWdodDogMXB4O1xuICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICRwb3BvdmVyLWFycm93LWNvbG9yO1xuICAgICAgYm90dG9tOiAtJHBvcG92ZXItYXJyb3ctd2lkdGg7XG4gICAgfVxuICB9XG59XG4iLCIvL1xuLy8gQ2Fyb3VzZWxcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gV3JhcHBlciBmb3IgdGhlIHNsaWRlIGNvbnRhaW5lciBhbmQgaW5kaWNhdG9yc1xuLmNhcm91c2VsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHdpZHRoOiAxMDAlO1xuXG4gID4gLml0ZW0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oLjZzIGVhc2UtaW4tb3V0IGxlZnQpO1xuXG4gICAgLy8gQWNjb3VudCBmb3IgamFua2l0dWRlIG9uIGltYWdlc1xuICAgID4gaW1nLFxuICAgID4gYSA+IGltZyB7XG4gICAgICBAaW5jbHVkZSBpbWctcmVzcG9uc2l2ZTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIH1cblxuICAgIC8vIFdlYktpdCBDU1MzIHRyYW5zZm9ybXMgZm9yIHN1cHBvcnRlZCBkZXZpY2VzXG4gICAgQG1lZGlhIGFsbCBhbmQgKHRyYW5zZm9ybS0zZCksICgtd2Via2l0LXRyYW5zZm9ybS0zZCkge1xuICAgICAgQGluY2x1ZGUgdHJhbnNpdGlvbi10cmFuc2Zvcm0oMC42cyBlYXNlLWluLW91dCk7XG4gICAgICBAaW5jbHVkZSBiYWNrZmFjZS12aXNpYmlsaXR5KGhpZGRlbik7XG4gICAgICBAaW5jbHVkZSBwZXJzcGVjdGl2ZSgxMDAwcHgpO1xuXG4gICAgICAmLm5leHQsXG4gICAgICAmLmFjdGl2ZS5yaWdodCB7XG4gICAgICAgIEBpbmNsdWRlIHRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgfVxuICAgICAgJi5wcmV2LFxuICAgICAgJi5hY3RpdmUubGVmdCB7XG4gICAgICAgIEBpbmNsdWRlIHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKTtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgIH1cbiAgICAgICYubmV4dC5sZWZ0LFxuICAgICAgJi5wcmV2LnJpZ2h0LFxuICAgICAgJi5hY3RpdmUge1xuICAgICAgICBAaW5jbHVkZSB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICA+IC5hY3RpdmUsXG4gID4gLm5leHQsXG4gID4gLnByZXYge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgPiAuYWN0aXZlIHtcbiAgICBsZWZ0OiAwO1xuICB9XG5cbiAgPiAubmV4dCxcbiAgPiAucHJldiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gID4gLm5leHQge1xuICAgIGxlZnQ6IDEwMCU7XG4gIH1cbiAgPiAucHJldiB7XG4gICAgbGVmdDogLTEwMCU7XG4gIH1cbiAgPiAubmV4dC5sZWZ0LFxuICA+IC5wcmV2LnJpZ2h0IHtcbiAgICBsZWZ0OiAwO1xuICB9XG5cbiAgPiAuYWN0aXZlLmxlZnQge1xuICAgIGxlZnQ6IC0xMDAlO1xuICB9XG4gID4gLmFjdGl2ZS5yaWdodCB7XG4gICAgbGVmdDogMTAwJTtcbiAgfVxuXG59XG5cbi8vIExlZnQvcmlnaHQgY29udHJvbHMgZm9yIG5hdlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5jYXJvdXNlbC1jb250cm9sIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6ICRjYXJvdXNlbC1jb250cm9sLXdpZHRoO1xuICBAaW5jbHVkZSBvcGFjaXR5KCRjYXJvdXNlbC1jb250cm9sLW9wYWNpdHkpO1xuICBmb250LXNpemU6ICRjYXJvdXNlbC1jb250cm9sLWZvbnQtc2l6ZTtcbiAgY29sb3I6ICRjYXJvdXNlbC1jb250cm9sLWNvbG9yO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRleHQtc2hhZG93OiAkY2Fyb3VzZWwtdGV4dC1zaGFkb3c7XG4gIC8vIFdlIGNhbid0IGhhdmUgdGhpcyB0cmFuc2l0aW9uIGhlcmUgYmVjYXVzZSBXZWJLaXQgY2FuY2VscyB0aGUgY2Fyb3VzZWxcbiAgLy8gYW5pbWF0aW9uIGlmIHlvdSB0cmlwIHRoaXMgd2hpbGUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIGFuaW1hdGlvbi5cblxuICAvLyBTZXQgZ3JhZGllbnRzIGZvciBiYWNrZ3JvdW5kc1xuICAmLmxlZnQge1xuICAgIEBpbmNsdWRlIGdyYWRpZW50LWhvcml6b250YWwoJHN0YXJ0LWNvbG9yOiByZ2JhKDAsMCwwLC41KSwgJGVuZC1jb2xvcjogcmdiYSgwLDAsMCwuMDAwMSkpO1xuICB9XG4gICYucmlnaHQge1xuICAgIGxlZnQ6IGF1dG87XG4gICAgcmlnaHQ6IDA7XG4gICAgQGluY2x1ZGUgZ3JhZGllbnQtaG9yaXpvbnRhbCgkc3RhcnQtY29sb3I6IHJnYmEoMCwwLDAsLjAwMDEpLCAkZW5kLWNvbG9yOiByZ2JhKDAsMCwwLC41KSk7XG4gIH1cblxuICAvLyBIb3Zlci9mb2N1cyBzdGF0ZVxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGNvbG9yOiAkY2Fyb3VzZWwtY29udHJvbC1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgQGluY2x1ZGUgb3BhY2l0eSguOSk7XG4gIH1cblxuICAvLyBUb2dnbGVzXG4gIC5pY29uLXByZXYsXG4gIC5pY29uLW5leHQsXG4gIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0LFxuICAuZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDUwJTtcbiAgICBtYXJnaW4tdG9wOiAtMTBweDtcbiAgICB6LWluZGV4OiA1O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxuICAuaWNvbi1wcmV2LFxuICAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCB7XG4gICAgbGVmdDogNTAlO1xuICAgIG1hcmdpbi1sZWZ0OiAtMTBweDtcbiAgfVxuICAuaWNvbi1uZXh0LFxuICAuZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQge1xuICAgIHJpZ2h0OiA1MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMTBweDtcbiAgfVxuICAuaWNvbi1wcmV2LFxuICAuaWNvbi1uZXh0IHtcbiAgICB3aWR0aDogIDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIGZvbnQtZmFtaWx5OiBzZXJpZjtcbiAgfVxuXG5cbiAgLmljb24tcHJldiB7XG4gICAgJjpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1xcMjAzOSc7Ly8gU0lOR0xFIExFRlQtUE9JTlRJTkcgQU5HTEUgUVVPVEFUSU9OIE1BUksgKFUrMjAzOSlcbiAgICB9XG4gIH1cbiAgLmljb24tbmV4dCB7XG4gICAgJjpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1xcMjAzYSc7Ly8gU0lOR0xFIFJJR0hULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLIChVKzIwM0EpXG4gICAgfVxuICB9XG59XG5cbi8vIE9wdGlvbmFsIGluZGljYXRvciBwaXBzXG4vL1xuLy8gQWRkIGFuIHVub3JkZXJlZCBsaXN0IHdpdGggdGhlIGZvbGxvd2luZyBjbGFzcyBhbmQgYWRkIGEgbGlzdCBpdGVtIGZvciBlYWNoXG4vLyBzbGlkZSB5b3VyIGNhcm91c2VsIGhvbGRzLlxuXG4uY2Fyb3VzZWwtaW5kaWNhdG9ycyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAxMHB4O1xuICBsZWZ0OiA1MCU7XG4gIHotaW5kZXg6IDE1O1xuICB3aWR0aDogNjAlO1xuICBtYXJnaW4tbGVmdDogLTMwJTtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgbGkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogIDEwcHg7XG4gICAgaGVpZ2h0OiAxMHB4O1xuICAgIG1hcmdpbjogMXB4O1xuICAgIHRleHQtaW5kZW50OiAtOTk5cHg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGNhcm91c2VsLWluZGljYXRvci1ib3JkZXItY29sb3I7XG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAvLyBJRTgtOSBoYWNrIGZvciBldmVudCBoYW5kbGluZ1xuICAgIC8vXG4gICAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgOC05IGRvZXMgbm90IHN1cHBvcnQgY2xpY2tzIG9uIGVsZW1lbnRzIHdpdGhvdXQgYSBzZXRcbiAgICAvLyBgYmFja2dyb3VuZC1jb2xvcmAuIFdlIGNhbm5vdCB1c2UgYGZpbHRlcmAgc2luY2UgdGhhdCdzIG5vdCB2aWV3ZWQgYXMgYVxuICAgIC8vIGJhY2tncm91bmQgY29sb3IgYnkgdGhlIGJyb3dzZXIuIFRodXMsIGEgaGFjayBpcyBuZWVkZWQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy9jbGljayNJbnRlcm5ldF9FeHBsb3JlclxuICAgIC8vXG4gICAgLy8gRm9yIElFOCwgd2Ugc2V0IHNvbGlkIGJsYWNrIGFzIGl0IGRvZXNuJ3Qgc3VwcG9ydCBgcmdiYSgpYC4gRm9yIElFOSwgd2VcbiAgICAvLyBzZXQgYWxwaGEgdHJhbnNwYXJlbmN5IGZvciB0aGUgYmVzdCByZXN1bHRzIHBvc3NpYmxlLlxuICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAgXFw5OyAvLyBJRThcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLDApOyAvLyBJRTlcbiAgfVxuICAuYWN0aXZlIHtcbiAgICBtYXJnaW46IDA7XG4gICAgd2lkdGg6ICAxMnB4O1xuICAgIGhlaWdodDogMTJweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2Fyb3VzZWwtaW5kaWNhdG9yLWFjdGl2ZS1iZztcbiAgfVxufVxuXG4vLyBPcHRpb25hbCBjYXB0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhpZGRlbiBieSBkZWZhdWx0IGZvciBzbWFsbGVyIHZpZXdwb3J0c1xuLmNhcm91c2VsLWNhcHRpb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDE1JTtcbiAgcmlnaHQ6IDE1JTtcbiAgYm90dG9tOiAyMHB4O1xuICB6LWluZGV4OiAxMDtcbiAgcGFkZGluZy10b3A6IDIwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAyMHB4O1xuICBjb2xvcjogJGNhcm91c2VsLWNhcHRpb24tY29sb3I7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC1zaGFkb3c6ICRjYXJvdXNlbC10ZXh0LXNoYWRvdztcbiAgJiAuYnRuIHtcbiAgICB0ZXh0LXNoYWRvdzogbm9uZTsgLy8gTm8gc2hhZG93IGZvciBidXR0b24gZWxlbWVudHMgaW4gY2Fyb3VzZWwtY2FwdGlvblxuICB9XG59XG5cblxuLy8gU2NhbGUgdXAgY29udHJvbHMgZm9yIHRhYmxldHMgYW5kIHVwXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuXG4gIC8vIFNjYWxlIHVwIHRoZSBjb250cm9scyBhIHNtaWRnZVxuICAuY2Fyb3VzZWwtY29udHJvbCB7XG4gICAgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQsXG4gICAgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0LFxuICAgIC5pY29uLXByZXYsXG4gICAgLmljb24tbmV4dCB7XG4gICAgICB3aWR0aDogMzBweDtcbiAgICAgIGhlaWdodDogMzBweDtcbiAgICAgIG1hcmdpbi10b3A6IC0xNXB4O1xuICAgICAgZm9udC1zaXplOiAzMHB4O1xuICAgIH1cbiAgICAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCxcbiAgICAuaWNvbi1wcmV2IHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMTVweDtcbiAgICB9XG4gICAgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0LFxuICAgIC5pY29uLW5leHQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcbiAgICB9XG4gIH1cblxuICAvLyBTaG93IGFuZCBsZWZ0IGFsaWduIHRoZSBjYXB0aW9uc1xuICAuY2Fyb3VzZWwtY2FwdGlvbiB7XG4gICAgbGVmdDogMjAlO1xuICAgIHJpZ2h0OiAyMCU7XG4gICAgcGFkZGluZy1ib3R0b206IDMwcHg7XG4gIH1cblxuICAvLyBNb3ZlIHVwIHRoZSBpbmRpY2F0b3JzXG4gIC5jYXJvdXNlbC1pbmRpY2F0b3JzIHtcbiAgICBib3R0b206IDIwcHg7XG4gIH1cbn1cbiIsIi8vXG4vLyBVdGlsaXR5IGNsYXNzZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gRmxvYXRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5jbGVhcmZpeCB7XG4gIEBpbmNsdWRlIGNsZWFyZml4O1xufVxuLmNlbnRlci1ibG9jayB7XG4gIEBpbmNsdWRlIGNlbnRlci1ibG9jaztcbn1cbi5wdWxsLXJpZ2h0IHtcbiAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XG59XG4ucHVsbC1sZWZ0IHtcbiAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcbn1cblxuXG4vLyBUb2dnbGluZyBjb250ZW50XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE5vdGU6IERlcHJlY2F0ZWQgLmhpZGUgaW4gZmF2b3Igb2YgLmhpZGRlbiBvciAuc3Itb25seSAoYXMgYXBwcm9wcmlhdGUpIGluIHYzLjAuMVxuLmhpZGUge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG4uc2hvdyB7XG4gIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG59XG4uaW52aXNpYmxlIHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuLnRleHQtaGlkZSB7XG4gIEBpbmNsdWRlIHRleHQtaGlkZTtcbn1cblxuXG4vLyBIaWRlIGZyb20gc2NyZWVucmVhZGVycyBhbmQgYnJvd3NlcnNcbi8vXG4vLyBDcmVkaXQ6IEhUTUw1IEJvaWxlcnBsYXRlXG5cbi5oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cblxuLy8gRm9yIEFmZml4IHBsdWdpblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uYWZmaXgge1xuICBwb3NpdGlvbjogZml4ZWQ7XG59XG4iLCIvLyBDZW50ZXItYWxpZ24gYSBibG9jayBsZXZlbCBlbGVtZW50XG5cbkBtaXhpbiBjZW50ZXItYmxvY2soKSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xufVxuIiwiLy8gQ1NTIGltYWdlIHJlcGxhY2VtZW50XG4vL1xuLy8gSGVhZHMgdXAhIHYzIGxhdW5jaGVkIHdpdGggb25seSBgLmhpZGUtdGV4dCgpYCwgYnV0IHBlciBvdXIgcGF0dGVybiBmb3Jcbi8vIG1peGlucyBiZWluZyByZXVzZWQgYXMgY2xhc3NlcyB3aXRoIHRoZSBzYW1lIG5hbWUsIHRoaXMgZG9lc24ndCBob2xkIHVwLiBBc1xuLy8gb2YgdjMuMC4xIHdlIGhhdmUgYWRkZWQgYC50ZXh0LWhpZGUoKWAgYW5kIGRlcHJlY2F0ZWQgYC5oaWRlLXRleHQoKWAuXG4vL1xuLy8gU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vaDVicC9odG1sNS1ib2lsZXJwbGF0ZS9jb21taXQvYWEwMzk2ZWFlNzU3XG5cbi8vIERlcHJlY2F0ZWQgYXMgb2YgdjMuMC4xICh3aWxsIGJlIHJlbW92ZWQgaW4gdjQpXG5AbWl4aW4gaGlkZS10ZXh0KCkge1xuICBmb250OiAwLzAgYTtcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuICB0ZXh0LXNoYWRvdzogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogMDtcbn1cblxuLy8gTmV3IG1peGluIHRvIHVzZSBhcyBvZiB2My4wLjFcbkBtaXhpbiB0ZXh0LWhpZGUoKSB7XG4gIEBpbmNsdWRlIGhpZGUtdGV4dDtcbn1cbiIsIi8vXG4vLyBSZXNwb25zaXZlOiBVdGlsaXR5IGNsYXNzZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gSUUxMCBpbiBXaW5kb3dzIChQaG9uZSkgOFxuLy9cbi8vIFN1cHBvcnQgZm9yIHJlc3BvbnNpdmUgdmlld3MgdmlhIG1lZGlhIHF1ZXJpZXMgaXMga2luZCBvZiBib3JrZWQgaW4gSUUxMCwgZm9yXG4vLyBTdXJmYWNlL2Rlc2t0b3AgaW4gc3BsaXQgdmlldyBhbmQgZm9yIFdpbmRvd3MgUGhvbmUgOC4gVGhpcyBwYXJ0aWN1bGFyIGZpeFxuLy8gbXVzdCBiZSBhY2NvbXBhbmllZCBieSBhIHNuaXBwZXQgb2YgSmF2YVNjcmlwdCB0byBzbmlmZiB0aGUgdXNlciBhZ2VudCBhbmRcbi8vIGFwcGx5IHNvbWUgY29uZGl0aW9uYWwgQ1NTIHRvICpvbmx5KiB0aGUgU3VyZmFjZS9kZXNrdG9wIFdpbmRvd3MgOC4gTG9vayBhdFxuLy8gb3VyIEdldHRpbmcgU3RhcnRlZCBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgYnVnLlxuLy9cbi8vIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGZvbGxvd2luZzpcbi8vXG4vLyBJc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMDQ5N1xuLy8gRG9jczogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vZ2V0dGluZy1zdGFydGVkLyNzdXBwb3J0LWllMTAtd2lkdGhcbi8vIFNvdXJjZTogaHR0cDovL3RpbWthZGxlYy5jb20vMjAxMy8wMS93aW5kb3dzLXBob25lLTgtYW5kLWRldmljZS13aWR0aC9cbi8vIFNvdXJjZTogaHR0cDovL3RpbWthZGxlYy5jb20vMjAxMi8xMC9pZTEwLXNuYXAtbW9kZS1hbmQtcmVzcG9uc2l2ZS1kZXNpZ24vXG5cbkBhdC1yb290IHtcbiAgQC1tcy12aWV3cG9ydCB7XG4gICAgd2lkdGg6IGRldmljZS13aWR0aDtcbiAgfVxufVxuXG5cbi8vIFZpc2liaWxpdHkgdXRpbGl0aWVzXG4vLyBOb3RlOiBEZXByZWNhdGVkIC52aXNpYmxlLXhzLCAudmlzaWJsZS1zbSwgLnZpc2libGUtbWQsIGFuZCAudmlzaWJsZS1sZyBhcyBvZiB2My4yLjBcblxuQGluY2x1ZGUgcmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoJy52aXNpYmxlLXhzJyk7XG5AaW5jbHVkZSByZXNwb25zaXZlLWludmlzaWJpbGl0eSgnLnZpc2libGUtc20nKTtcbkBpbmNsdWRlIHJlc3BvbnNpdmUtaW52aXNpYmlsaXR5KCcudmlzaWJsZS1tZCcpO1xuQGluY2x1ZGUgcmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoJy52aXNpYmxlLWxnJyk7XG5cbi52aXNpYmxlLXhzLWJsb2NrLFxuLnZpc2libGUteHMtaW5saW5lLFxuLnZpc2libGUteHMtaW5saW5lLWJsb2NrLFxuLnZpc2libGUtc20tYmxvY2ssXG4udmlzaWJsZS1zbS1pbmxpbmUsXG4udmlzaWJsZS1zbS1pbmxpbmUtYmxvY2ssXG4udmlzaWJsZS1tZC1ibG9jayxcbi52aXNpYmxlLW1kLWlubGluZSxcbi52aXNpYmxlLW1kLWlubGluZS1ibG9jayxcbi52aXNpYmxlLWxnLWJsb2NrLFxuLnZpc2libGUtbGctaW5saW5lLFxuLnZpc2libGUtbGctaW5saW5lLWJsb2NrIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgQGluY2x1ZGUgcmVzcG9uc2l2ZS12aXNpYmlsaXR5KCcudmlzaWJsZS14cycpO1xufVxuLnZpc2libGUteHMtYmxvY2sge1xuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS14cy1pbmxpbmUge1xuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUteHMtaW5saW5lLWJsb2NrIHtcbiAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSBhbmQgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgQGluY2x1ZGUgcmVzcG9uc2l2ZS12aXNpYmlsaXR5KCcudmlzaWJsZS1zbScpO1xufVxuLnZpc2libGUtc20tYmxvY2sge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXNtLWlubGluZSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikgYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXNtLWlubGluZS1ibG9jayB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikgYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSBhbmQgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpIHtcbiAgQGluY2x1ZGUgcmVzcG9uc2l2ZS12aXNpYmlsaXR5KCcudmlzaWJsZS1tZCcpO1xufVxuLnZpc2libGUtbWQtYmxvY2sge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1tZC1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLW1kLWlubGluZSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikgYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLW1kLWlubGluZS1ibG9jayB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikgYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGctbWluKSB7XG4gIEBpbmNsdWRlIHJlc3BvbnNpdmUtdmlzaWJpbGl0eSgnLnZpc2libGUtbGcnKTtcbn1cbi52aXNpYmxlLWxnLWJsb2NrIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGctbWluKSB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUtbGctaW5saW5lIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGctbWluKSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLWxnLWlubGluZS1ibG9jayB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICBAaW5jbHVkZSByZXNwb25zaXZlLWludmlzaWJpbGl0eSgnLmhpZGRlbi14cycpO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICBAaW5jbHVkZSByZXNwb25zaXZlLWludmlzaWJpbGl0eSgnLmhpZGRlbi1zbScpO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1tZC1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkge1xuICBAaW5jbHVkZSByZXNwb25zaXZlLWludmlzaWJpbGl0eSgnLmhpZGRlbi1tZCcpO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1sZy1taW4pIHtcbiAgQGluY2x1ZGUgcmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoJy5oaWRkZW4tbGcnKTtcbn1cblxuXG4vLyBQcmludCB1dGlsaXRpZXNcbi8vXG4vLyBNZWRpYSBxdWVyaWVzIGFyZSBwbGFjZWQgb24gdGhlIGluc2lkZSB0byBiZSBtaXhpbi1mcmllbmRseS5cblxuLy8gTm90ZTogRGVwcmVjYXRlZCAudmlzaWJsZS1wcmludCBhcyBvZiB2My4yLjBcblxuQGluY2x1ZGUgcmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoJy52aXNpYmxlLXByaW50Jyk7XG5cbkBtZWRpYSBwcmludCB7XG4gIEBpbmNsdWRlIHJlc3BvbnNpdmUtdmlzaWJpbGl0eSgnLnZpc2libGUtcHJpbnQnKTtcbn1cbi52aXNpYmxlLXByaW50LWJsb2NrIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuXG4gIEBtZWRpYSBwcmludCB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUtcHJpbnQtaW5saW5lIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuXG4gIEBtZWRpYSBwcmludCB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXByaW50LWlubGluZS1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblxuICBAbWVkaWEgcHJpbnQge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtZWRpYSBwcmludCB7XG4gIEBpbmNsdWRlIHJlc3BvbnNpdmUtaW52aXNpYmlsaXR5KCcuaGlkZGVuLXByaW50Jyk7XG59XG4iLCIvLyBSZXNwb25zaXZlIHV0aWxpdGllc1xuXG4vL1xuLy8gTW9yZSBlYXNpbHkgaW5jbHVkZSBhbGwgdGhlIHN0YXRlcyBmb3IgcmVzcG9uc2l2ZS11dGlsaXRpZXMubGVzcy5cbi8vIFtjb252ZXJ0ZXJdICRwYXJlbnQgaGFja1xuQG1peGluIHJlc3BvbnNpdmUtdmlzaWJpbGl0eSgkcGFyZW50KSB7XG4gICN7JHBhcmVudH0ge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbiAgdGFibGUjeyRwYXJlbnR9ICB7IGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7IH1cbiAgdHIjeyRwYXJlbnR9ICAgICB7IGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50OyB9XG4gIHRoI3skcGFyZW50fSxcbiAgdGQjeyRwYXJlbnR9ICAgICB7IGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfVxufVxuXG4vLyBbY29udmVydGVyXSAkcGFyZW50IGhhY2tcbkBtaXhpbiByZXNwb25zaXZlLWludmlzaWJpbGl0eSgkcGFyZW50KSB7XG4gICN7JHBhcmVudH0ge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuIiwiLyogXG5UaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuQ29weXJpZ2h0IChjKSAyMDEzLTIwMTUgYm9vdHN0cmFwLXNlbGVjdFxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuICovXG5cbi8vIE1peGluc1xuQG1peGluIGN1cnNvci1kaXNhYmxlZCgpIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLy8gUnVsZXNcbi5ib290c3RyYXAtc2VsZWN0IHtcbiAgLyp3aWR0aDogMjIwcHhcXDk7IElFOCBhbmQgYmVsb3cqL1xuICAvL25vaW5zcGVjdGlvbiBDc3NTaG9ydGhhbmRQcm9wZXJ0eVZhbHVlXG4gIHdpZHRoOiAyMjBweCBcXDA7IC8qSUU5IGFuZCBiZWxvdyovXG5cbiAgLy8gVGhlIHNlbGVjdHBpY2tlciBidXR0b25cbiAgPiAuYnRuIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gICAgcGFkZGluZy1yaWdodDogMjVweDtcbiAgfVxuXG4gIC8vIEVycm9yIGRpc3BsYXlcbiAgLmVycm9yICYgLmJ0biB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGNvbG9yLXJlZC1lcnJvcjtcbiAgfVxuXG4gIC8vIEVycm9yIGRpc3BsYXlcbiAgLmNvbnRyb2wtZ3JvdXAuZXJyb3IgJiAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBib3JkZXItY29sb3I6ICRjb2xvci1yZWQtZXJyb3I7XG4gIH1cblxuICAmLmZpdC13aWR0aCB7XG4gICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgfVxuXG4gICY6bm90KFtjbGFzcyo9XCJjb2wtXCJdKTpub3QoW2NsYXNzKj1cImZvcm0tY29udHJvbFwiXSk6bm90KC5pbnB1dC1ncm91cC1idG4pIHtcbiAgICB3aWR0aDogJHdpZHRoLWRlZmF1bHQ7XG4gIH1cblxuICAuYnRuOmZvY3VzIHtcbiAgICBvdXRsaW5lOiB0aGluIGRvdHRlZCAjMzMzMzMzICFpbXBvcnRhbnQ7XG4gICAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yICFpbXBvcnRhbnQ7XG4gICAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XG4gIH1cbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuZm9ybS1jb250cm9sIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiBub25lO1xuXG4gICY6bm90KFtjbGFzcyo9XCJjb2wtXCJdKSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLy8gVGhlIHNlbGVjdHBpY2tlciBjb21wb25lbnRzXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAge1xuICAmOm5vdCguaW5wdXQtZ3JvdXAtYnRuKSxcbiAgJltjbGFzcyo9XCJjb2wtXCJdIHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cblxuICAvLyBGb3JjZXMgdGhlIHB1bGwgdG8gdGhlIHJpZ2h0LCBpZiBuZWNlc3NhcnlcbiAgJixcbiAgJltjbGFzcyo9XCJjb2wtXCJdLFxuICAucm93LWZsdWlkICZbY2xhc3MqPVwiY29sLVwiXSB7XG4gICAgJi5kcm9wZG93bi1tZW51LXJpZ2h0IHtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICB9XG4gIH1cblxuICAuZm9ybS1zZWFyY2ggJixcbiAgLmZvcm0taW5saW5lICYsXG4gIC5mb3JtLWhvcml6b250YWwgJixcbiAgLmZvcm0tZ3JvdXAgJiB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG4gIC5mb3JtLWdyb3VwLWxnICAmLmZvcm0tY29udHJvbCxcbiAgLmZvcm0tZ3JvdXAtc20gICYuZm9ybS1jb250cm9sIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLy8gU2V0IHRoZSB3aWR0aCBvZiB0aGUgbGl2ZSBzZWFyY2ggKGFuZCBhbnkgb3RoZXIgZm9ybSBjb250cm9sIHdpdGhpbiBhbiBpbmxpbmUgZm9ybSlcbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zaWx2aW9tb3JldG8vYm9vdHN0cmFwLXNlbGVjdC9pc3N1ZXMvNjg1XG4gIC5mb3JtLWlubGluZSAmIC5mb3JtLWNvbnRyb2wge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLmlucHV0LWFwcGVuZCAmIHtcbiAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgfVxuXG4gIC5pbnB1dC1wcmVwZW5kICYge1xuICAgIG1hcmdpbi1yaWdodDogLTFweDtcbiAgfVxuXG4gID4gLmRpc2FibGVkIHtcbiAgICBAaW5jbHVkZSBjdXJzb3ItZGlzYWJsZWQ7XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgc2VsZWN0cGlja2VyIGJ1dHRvblxuICAuYnRuIHtcbiAgICAuZmlsdGVyLW9wdGlvbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIH1cblxuICAgIC5jYXJldCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogNDBweDtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAkYnRuLWRlZmF1bHQtYm9yZGVyO1xuICAgICAgaGVpZ2h0OiAzOHB4O1xuICAgIH1cblxuICAgIC5jYXJldDpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1xcZTg2MSc7XG4gICAgICBmb250LWZhbWlseTogXCJmb250ZWxsb1wiO1xuICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgY29sb3I6ICM2NjY2NjY7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAxMnB4O1xuICAgICAgdG9wOiA5cHg7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAmOmhvdmVyIC5jYXJldCB7XG4gICAgICBib3JkZXItY29sb3I6IGRhcmtlbigkYnRuLWRlZmF1bHQtYm9yZGVyLCAxMiUpO1xuICAgIH1cblxuICAgICY6Zm9jdXMgLmNhcmV0IHtcbiAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRidG4tZGVmYXVsdC1ib3JkZXIsIDI1JSk7XG4gICAgfVxuXG4gIH1cblxuICAmW2NsYXNzKj1cImNvbC1cIl0gLmJ0biB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAvLyBUaGUgc2VsZWN0cGlja2VyIGRyb3Bkb3duXG4gIC5kcm9wZG93bi1tZW51IHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgei1pbmRleDogJHppbmRleC1zZWxlY3QtZHJvcGRvd247XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcblxuICAgICYuaW5uZXIge1xuICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICB9XG5cbiAgICBsaSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICY6bm90KC5kaXNhYmxlZCkgYTpob3ZlciBzbWFsbCxcbiAgICAgICY6bm90KC5kaXNhYmxlZCkgYTpmb2N1cyBzbWFsbCxcbiAgICAgICYuYWN0aXZlOm5vdCguZGlzYWJsZWQpIGEgc21hbGwge1xuICAgICAgICBjb2xvcjogJGNvbG9yLWJsdWUtaG92ZXI7XG4gICAgICAgIGNvbG9yOiBmYWRlKCRjb2xvci1ibHVlLWhvdmVyLCA0MCUpO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkIGEge1xuICAgICAgICBAaW5jbHVkZSBjdXJzb3ItZGlzYWJsZWQ7XG4gICAgICB9XG5cbiAgICAgIGEge1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgICAgJi5vcHQge1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDIuMjVlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNwYW4uY2hlY2stbWFyayB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLnRleHQge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzbWFsbCB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMC41ZW07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm5vdGlmeSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IDVweDtcbiAgICAgIHdpZHRoOiA5NiU7XG4gICAgICBtYXJnaW46IDAgMiU7XG4gICAgICBtaW4taGVpZ2h0OiAyNnB4O1xuICAgICAgcGFkZGluZzogM3B4IDVweDtcbiAgICAgIGJhY2tncm91bmQ6IHJnYigyNDUsIDI0NSwgMjQ1KTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigyMjcsIDIyNywgMjI3KTtcbiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCBmYWRlKHJnYigwLCAwLCAwKSwgNSUpO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICBvcGFjaXR5OiAwLjk7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgfVxuXG4gIC5uby1yZXN1bHRzIHtcbiAgICBwYWRkaW5nOiAzcHg7XG4gICAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcbiAgICBtYXJnaW46IDAgNXB4O1xuICB9XG5cbiAgJi5maXQtd2lkdGggLmJ0biB7XG4gICAgLmZpbHRlci1vcHRpb24ge1xuICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICB9XG5cbiAgICAuY2FyZXQge1xuICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgIHRvcDogYXV0bztcbiAgICAgIG1hcmdpbi10b3A6IC0xcHg7XG4gICAgfVxuICB9XG5cbiAgJi5zaG93LXRpY2sgLmRyb3Bkb3duLW1lbnUgbGkge1xuICAgICYuc2VsZWN0ZWQgYSBzcGFuLmNoZWNrLW1hcmsge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgcmlnaHQ6IDE1cHg7XG4gICAgICBtYXJnaW4tdG9wOiA1cHg7XG4gICAgfVxuXG4gICAgYSBzcGFuLnRleHQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAzNHB4O1xuICAgIH1cbiAgfVxufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5zaG93LW1lbnUtYXJyb3cge1xuICAmLm9wZW4gPiAuYnRuIHtcbiAgICB6LWluZGV4OiAkemluZGV4LXNlbGVjdC1kcm9wZG93biArIDE7XG4gIH1cblxuICAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICAmOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGJvcmRlci1sZWZ0OiA3cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItcmlnaHQ6IDdweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDdweDtcbiAgICAgIGJvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkO1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGNvbG9yLWdyZXktYXJyb3c7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiBmYWRlKCRjb2xvci1ncmV5LWFycm93LCAyMCUpO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAtNHB4O1xuICAgICAgbGVmdDogOXB4O1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgYm9yZGVyLWxlZnQ6IDZweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1yaWdodDogNnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkIHdoaXRlO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAtNHB4O1xuICAgICAgbGVmdDogMTBweDtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgJi5kcm9wdXAgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgJjpiZWZvcmUge1xuICAgICAgYm90dG9tOiBhdXRvO1xuICAgICAgdG9wOiAtM3B4O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICAgIGJvcmRlci10b3Atd2lkdGg6IDdweDtcbiAgICAgIGJvcmRlci10b3Atc3R5bGU6IHNvbGlkO1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGNvbG9yLWdyZXktYXJyb3c7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiBmYWRlKCRjb2xvci1ncmV5LWFycm93LCAyMCUpO1xuICAgIH1cblxuICAgICY6YWZ0ZXIge1xuICAgICAgYm90dG9tOiBhdXRvO1xuICAgICAgdG9wOiAtM3B4O1xuICAgICAgYm9yZGVyLXRvcDogNnB4IHNvbGlkIHdoaXRlO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICAmLnB1bGwtcmlnaHQgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgJjpiZWZvcmUge1xuICAgICAgcmlnaHQ6IDEycHg7XG4gICAgICBsZWZ0OiBhdXRvO1xuICAgIH1cblxuICAgICY6YWZ0ZXIge1xuICAgICAgcmlnaHQ6IDEzcHg7XG4gICAgICBsZWZ0OiBhdXRvO1xuICAgIH1cbiAgfVxuXG4gICYub3BlbiA+IC5kcm9wZG93bi10b2dnbGUge1xuICAgICY6YmVmb3JlLFxuICAgICY6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICB9XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cC5vcGVuIHtcblxuICAgIC5idG4gLmNhcmV0IHtcbiAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiBkYXJrZW4oJGJ0bi1kZWZhdWx0LWJvcmRlciwgMTIlKTtcbiAgICB9XG5cbiAgICAuYnRuOmhvdmVyIC5jYXJldCB7XG4gICAgICBib3JkZXItbGVmdC1jb2xvcjogZGFya2VuKCRidG4tZGVmYXVsdC1ib3JkZXIsIDI1JSk7XG4gICAgfVxuXG59XG5cbi5icy1zZWFyY2hib3gsXG4uYnMtYWN0aW9uc2JveCB7XG4gIHBhZGRpbmc6IDRweCA4cHg7XG59XG5cbi5icy1hY3Rpb25zYm94IHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gICYgLmJ0bi1ncm91cCBidXR0b24ge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbn1cblxuLmJzLXNlYXJjaGJveCB7XG4gICYgKyAuYnMtYWN0aW9uc2JveCB7XG4gICAgcGFkZGluZzogMCA4cHggNHB4O1xuICB9XG5cbiAgJiBpbnB1dC5mb3JtLWNvbnRyb2wge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLm1vYmlsZS1kZXZpY2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuICBvcGFjaXR5OiAwO1xufVxuIiwiLyogQm9keSBzcGVjcyAqL1xuXG5ib2R5IHtcbiAgICBjb2xvcjogJHRleHQtY29sb3I7XG4gICAgYmFja2dyb3VuZDogJGJvZHktYmc7XG59XG5cblxuLyogTWVzc2FnZSB3YXJuaW5nIHVzZXJzIHRoYXQgc29tZSBmZWF0dXJlcyBtaWdodCBub3QgYmUgc3VwcG9ydGVkIGluIG9sZCBicm93c2VycyAqL1xuLmJyb3dzZXJ1cGdyYWRlIHtcbiAgbWFyZ2luOiAwLjJlbSAwO1xuICBiYWNrZ3JvdW5kOiAjY2NjO1xuICBjb2xvcjogIzAwMDtcbiAgcGFkZGluZzogMC4yZW0gMDtcbn1cbiIsIi8vIGJvd2VyOnNjc3NcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL2NzczMvX3VzZXItaW50ZXJmYWNlLnNjc3NcIjtcbi8vIGVuZGJvd2VyXG5cbiAvKiBUb3BiYXIgKi9cblxuLnRvcGJhciB7XG4gIHBhZGRpbmc6IDA7XG4gIGJhY2tncm91bmQ6ICMyMjI7XG4gXG4gIC5iYW5uZXItYXJlYSB7XG4gICAgYmFja2dyb3VuZDogIzIyMjtcblxuICAgIGgxIHtcbiAgICAgIG1hcmdpbjogMCAwIDAgLTgwcHg7XG4gICAgICBwYWRkaW5nOiAwIDAgMCA4MHB4O1xuICAgICAgaGVpZ2h0OiA1NXB4O1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgdXJsKCRraW1jaGktbG9nbykgbm8tcmVwZWF0IDI0cHggM3B4O1xuICAgICAgY29sb3I6ICRoaWdobGlnaHRzLWNvbG9yO1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1ib2xkOyBcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LXNpemU6IDEuNTcxZW07XG4gICAgICBsaW5lLWhlaWdodDogNTVweDtcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuICAgIH1cblxuICB9XG5cbiAgLnRhYi1hcmVhIHtcbiAgICBiYWNrZ3JvdW5kOiAkYnJhbmQtcHJpbWFyeTtcbiAgICBoZWlnaHQ6IDQwcHg7XG5cbiAgICBzcGFuLmhvc3RuYW1lIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktYWx0ZXJuYXRlO1xuICAgICAgY29sb3I6ICRoaWdobGlnaHRzLWNvbG9yO1xuICAgICAgZm9udC1zaXplOiAxM3B0O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIHBhZGRpbmc6IDhweCAwO1xuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgIEBpbmNsdWRlIGJveC1zaXppbmcoYm9yZGVyLWJveCk7XG4gICAgfVxuXG4gICAgdWwubmF2LW1lbnUge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIGxpc3Qtc3R5bGUtcG9zaXRpb246IGluc2lkZTtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDAgMCAwIDI0cHg7XG5cbiAgICAgIGxpIHtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICAgICBhLCAuZGlzYWJsZWQge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktYm9sZDtcbiAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICAgIGNvbG9yOiAkaGlnaGxpZ2h0cy1jb2xvcjtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgICAgZm9udC1zaXplOiAxM3B0O1xuICAgICAgICAgIHBhZGRpbmc6IDhweCA0MHB4O1xuICAgICAgICAgIG1pbi13aWR0aDogMTkwcHg7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAuZGlzYWJsZWQgeyBcbiAgICAgICAgICAgICAgY29sb3I6ICRkaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAuZGlnaXQtY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgICAuZGlnaXQtY29udGFpbmVyIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICAgICAgICAgIGhlaWdodDogMjJweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICM1NTU7XG4gICAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAjNTU1O1xuICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWJhc2U7XG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgICAgICBwYWRkaW5nOiAwIDhweDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmLmN1cnJlbnQge1xuXG4gICAgICAgICAgICAuZGlnaXQtY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH1cblxuICAgICAgICAgICYuY3VycmVudC5ob3N0cyB7IGJhY2tncm91bmQ6ICRob3N0cy1jb2xvcjsgfVxuICAgICAgICAgICYuY3VycmVudC5ndWVzdHMgeyBiYWNrZ3JvdW5kOiAkZ3Vlc3RzLWNvbG9yOyB9XG4gICAgICAgICAgJi5jdXJyZW50LnRlbXBsYXRlcyB7IGJhY2tncm91bmQ6ICR0ZW1wbGF0ZXMtY29sb3I7IH1cbiAgICAgICAgICAmLmN1cnJlbnQuc3RvcmFnZSB7IGJhY2tncm91bmQ6ICRzdG9yYWdlLWNvbG9yOyB9XG4gICAgICAgICAgJi5jdXJyZW50Lm5ldHdvcmtzIHsgYmFja2dyb3VuZDogJG5ldHdvcmtzLWNvbG9yOyB9XG4gICAgICAgICAgJi5jdXJyZW50LmFkbWluaXN0cmF0aW9uIHsgYmFja2dyb3VuZDogJGFkbWluaXN0cmF0aW9uLWNvbG9yOyB9XG5cbiAgICAgIH1cblxuICAgIH1cblxuXG4gIH1cblxuICAucGFuZWwtYWN0aW9ucy1hcmVhIHtcbiAgICBtaW4taGVpZ2h0OiA0MHB4O1xuICB9XG5cbn0iLCJAaW1wb3J0IFwiLi4vc3VwcG9ydFwiO1xuXG4vLyBUaGlzIG1peGluIHByb3ZpZGVzIGJhc2ljIHN1cHBvcnQgZm9yIENTUzMgcHJvcGVydGllcyBhbmRcbi8vIHRoZWlyIGNvcnJlc3BvbmRpbmcgZXhwZXJpbWVudGFsIENTUzIgcHJvcGVydGllcyB3aGVuXG4vLyB0aGUgaW1wbGVtZW50YXRpb25zIGFyZSBpZGVudGljYWwgZXhjZXB0IGZvciB0aGUgcHJvcGVydHlcbi8vIHByZWZpeC5cbkBtaXhpbiBleHBlcmltZW50YWwoJHByb3BlcnR5LCAkdmFsdWUsXG4gICRtb3ogICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYSxcbiAgJHdlYmtpdCAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQsXG4gICRvICAgICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itb3BlcmEsXG4gICRtcyAgICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbWljcm9zb2Z0LFxuICAka2h0bWwgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLWtodG1sLFxuICAkb2ZmaWNpYWwgOiB0cnVlXG4pIHtcbiAgQGlmICR3ZWJraXQgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLXdlYmtpdCAgICB7IC13ZWJraXQtI3skcHJvcGVydHl9IDogJHZhbHVlOyB9XG4gIEBpZiAka2h0bWwgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1raHRtbCAgICAgeyAgLWtodG1sLSN7JHByb3BlcnR5fSA6ICR2YWx1ZTsgfVxuICBAaWYgJG1veiAgICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYSAgIHsgICAgLW1vei0jeyRwcm9wZXJ0eX0gOiAkdmFsdWU7IH1cbiAgQGlmICRtcyAgICAgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1pY3Jvc29mdCB7ICAgICAtbXMtI3skcHJvcGVydHl9IDogJHZhbHVlOyB9XG4gIEBpZiAkbyAgICAgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1vcGVyYSAgICAgeyAgICAgIC1vLSN7JHByb3BlcnR5fSA6ICR2YWx1ZTsgfVxuICBAaWYgJG9mZmljaWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgICAjeyRwcm9wZXJ0eX0gOiAkdmFsdWU7IH1cbn1cblxuLy8gU2FtZSBhcyBleHBlcmltZW50YWwoKSwgYnV0IGZvciBjYXNlcyB3aGVuIHRoZSBwcm9wZXJ0eSBpcyB0aGUgc2FtZSBhbmQgdGhlIHZhbHVlIGlzIHZlbmRvcml6ZWRcbkBtaXhpbiBleHBlcmltZW50YWwtdmFsdWUoJHByb3BlcnR5LCAkdmFsdWUsXG4gICRtb3ogICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYSxcbiAgJHdlYmtpdCAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQsXG4gICRvICAgICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itb3BlcmEsXG4gICRtcyAgICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbWljcm9zb2Z0LFxuICAka2h0bWwgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLWtodG1sLFxuICAkb2ZmaWNpYWwgOiB0cnVlXG4pIHtcbiAgQGlmICR3ZWJraXQgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLXdlYmtpdCAgICB7ICN7JHByb3BlcnR5fSA6IC13ZWJraXQtI3skdmFsdWV9OyB9XG4gIEBpZiAka2h0bWwgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1raHRtbCAgICAgeyAjeyRwcm9wZXJ0eX0gOiAgLWtodG1sLSN7JHZhbHVlfTsgfVxuICBAaWYgJG1veiAgICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYSAgIHsgI3skcHJvcGVydHl9IDogICAgLW1vei0jeyR2YWx1ZX07IH1cbiAgQGlmICRtcyAgICAgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1pY3Jvc29mdCB7ICN7JHByb3BlcnR5fSA6ICAgICAtbXMtI3skdmFsdWV9OyB9XG4gIEBpZiAkbyAgICAgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1vcGVyYSAgICAgeyAjeyRwcm9wZXJ0eX0gOiAgICAgIC1vLSN7JHZhbHVlfTsgfVxuICBAaWYgJG9mZmljaWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgI3skcHJvcGVydHl9IDogICAgICAgICAjeyR2YWx1ZX07IH1cbn1cbiIsIi8vIFVzZXIgSW50ZXJmYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhpcyBmaWxlIGNhbiBiZSBleHBhbmRlZCB0byBoYW5kbGUgYWxsIHRoZSB1c2VyIGludGVyZmFjZSBwcm9wZXJ0aWVzIGFzXG4vLyB0aGV5IGJlY29tZSBhdmFpbGFibGUgaW4gYnJvd3NlcnM6XG4vLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1dELWNzczMtdXNlcmludC0yMDAwMDIxNlxuQGltcG9ydCBcInNoYXJlZFwiO1xuXG5cbi8vIFRoaXMgcHJvcGVydHkgY29udHJvbHMgdGhlIHNlbGVjdGlvbiBtb2RlbCBhbmQgZ3JhbnVsYXJpdHkgb2YgYW4gZWxlbWVudC5cbi8vXG4vLyBAcGFyYW0gJHNlbGVjdFxuLy8gICBbIG5vbmUgfCB0ZXh0IHwgdG9nZ2xlIHwgZWxlbWVudCB8IGVsZW1lbnRzIHwgYWxsIHwgaW5oZXJpdCBdXG5AbWl4aW4gdXNlci1zZWxlY3QoJHNlbGVjdCkge1xuICAkc2VsZWN0OiB1bnF1b3RlKCRzZWxlY3QpO1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwodXNlci1zZWxlY3QsICRzZWxlY3QsXG4gICAgLW1veiwgLXdlYmtpdCwgbm90KC1vKSwgbm90KC1tcyksIC1raHRtbCwgb2ZmaWNpYWxcbiAgKTtcbn1cbiIsIi5sb2dpbi1hcmVhIHtcbiAgICBtYXJnaW46IDkwcHggYXV0byAwO1xuICAgIHdpZHRoOiAzMDBweDtcblxuICAgIC5idG4tbG9naW4ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDUwcHg7IFxuICAgIH1cblxuICAgIC5jb2wtbWQtMTIsIC5jb2wtbGctMTIge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAuYm9vdHN0cmFwLXNlbGVjdCxcbiAgICAuc2VsZWN0cGlja2VyIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1saWdodDtcbiAgICAgICAgZm9udC1zaXplOiAxM3B0O1xuICAgIH1cblxuICAgIC5kcm9wZG93bi10b2dnbGUuc2VsZWN0cGlja2VyIHtcbiAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgIH1cblxuICAgIC5mb3JtLWdyb3VwIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICB9XG5cbiAgICAuZm9ybS1ncm91cDpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG5cbn1cbiIsIi5idG4ge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktYmFzZTtcbiAgICBmb250LXNpemU6IDEzcHQ7XG59XG5cbi5idG4tbG9naW4ge1xuICBAaW5jbHVkZSBidXR0b24tdmFyaWFudCgkYnRuLWxvZ2luLWNvbG9yLCAkYnRuLWxvZ2luLWJnLCAkYnRuLWxvZ2luLWJvcmRlcik7XG59IiwiLypcbiogUHJvamVjdCBLaW1jaGlcbipcbiogQ29weXJpZ2h0IElCTSwgQ29ycC4gMjAxNVxuKlxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTtcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuKlxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsXG4qIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuLmRpYWxvZy1ib3JkZXItZ3JleSB7XG4gICAgYmFja2dyb3VuZC1jbGlwOiBib3JkZXItYm94O1xuICAgIGJvcmRlcjogNnB4IHNvbGlkIHJnYmEoMTcwLDE3MCwxNzAsMC4zKTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICB0b3A6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIG1hcmdpbjogYXV0bztcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG59XG5cbi5kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXI6IDNweCBzb2xpZCAjOTk5OTk5O1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xufVxuXG4uZGlhbG9nLWNvbnRhaW5lciAuZGlhbG9nLXRpdGxlIHtcbiAgICBoZWlnaHQ6IDYwcHg7XG4gICAgcGFkZGluZzogMjBweCAwIDIwcHggMjBweDtcbiAgICBtYXJnaW46IDA7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgZm9udC1zaXplOiAyN3B4O1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbGlnaHQ7XG4gICAgZm9udC13ZWlnaHQ6IDMwMCAhaW1wb3J0YW50O1xufVxuXG4uZGlhbG9nLWNvbnRhaW5lciAuZGlhbG9nLWJvZHkge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmRpYWxvZy1jb250YWluZXIgLmRpYWxvZy1mb290ZXIge1xuICAgIGhlaWdodDogNTBweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4QUJGO1xufVxuXG4uZGlhbG9nLWNvbnRhaW5lciAuZGlhbG9nLWZvb3RlciAuZGlhbG9nLWJ1dHRvbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIHdpZHRoOiA3NXB4O1xuICAgIGhlaWdodDogMzBweDtcbiAgICBsaW5lLWhlaWdodDogMzBweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmRpYWxvZy1jb250YWluZXIgLmRpYWxvZy1mb290ZXIgLmRpYWxvZy1idXR0b246aG92ZXJ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVFRTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59IiwiLypcbiogUHJvamVjdCBLaW1jaGlcbipcbiogQ29weXJpZ2h0IElCTSwgQ29ycC4gMjAxNVxuKlxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTtcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuKlxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsXG4qIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuLy9cbi8vIE1vZGFsc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gLm1vZGFsLW9wZW4gICAgICAtIGJvZHkgY2xhc3MgZm9yIGtpbGxpbmcgdGhlIHNjcm9sbFxuLy8gLm1vZGFsICAgICAgICAgICAtIGNvbnRhaW5lciB0byBzY3JvbGwgd2l0aGluXG4vLyAubW9kYWwtZGlhbG9nICAgIC0gcG9zaXRpb25pbmcgc2hlbGwgZm9yIHRoZSBhY3R1YWwgbW9kYWxcbi8vIC5tb2RhbC1jb250ZW50ICAgLSBhY3R1YWwgbW9kYWwgdy8gYmcgYW5kIGNvcm5lcnMgYW5kIHNoaXRcblxuLy8gS2lsbCB0aGUgc2Nyb2xsIG9uIHRoZSBib2R5XG4ubW9kYWwtb3BlbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8vIENvbnRhaW5lciB0aGF0IHRoZSBtb2RhbCBzY3JvbGxzIHdpdGhpblxuLm1vZGFsIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR6aW5kZXgtbW9kYWw7XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcblxuICAvLyBQcmV2ZW50IENocm9tZSBvbiBXaW5kb3dzIGZyb20gYWRkaW5nIGEgZm9jdXMgb3V0bGluZS4gRm9yIGRldGFpbHMsIHNlZVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8xMDk1MS5cbiAgb3V0bGluZTogMDtcblxuICAvLyBXaGVuIGZhZGluZyBpbiB0aGUgbW9kYWwsIGFuaW1hdGUgaXQgdG8gc2xpZGUgZG93blxuICAmLmZhZGUgLm1vZGFsLWRpYWxvZyB7XG4gICAgQGluY2x1ZGUgdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24tdHJhbnNmb3JtKDAuM3MgZWFzZS1vdXQpO1xuICB9XG4gICYuaW4gLm1vZGFsLWRpYWxvZyB7IEBpbmNsdWRlIHRyYW5zbGF0ZSgwLCAwKSB9XG59XG4ubW9kYWwtb3BlbiAubW9kYWwge1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi8vIFNoZWxsIGRpdiB0byBwb3NpdGlvbiB0aGUgbW9kYWwgd2l0aCBib3R0b20gcGFkZGluZ1xuLm1vZGFsLWRpYWxvZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IGF1dG87XG4gIG1hcmdpbjogMTBweDtcbiAgYm9yZGVyOiA2cHggc29saWQgJG1vZGFsLWNvbnRlbnQtZmFsbGJhY2stYm9yZGVyLWNvbG9yOyAvL29sZCBicm93c2VycyBmYWxsYmFjayAoaWU4IGV0YylcbiAgYm9yZGVyOiA2cHggc29saWQgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7ICBcbn1cblxuLy8gQWN0dWFsIG1vZGFsXG4ubW9kYWwtY29udGVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJG1vZGFsLWNvbnRlbnQtYmc7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJvcmRlcjogM3B4IHNvbGlkICM5OTk7ICAgXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3cobm9uZSAhaW1wb3J0YW50KTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgb3V0bGluZTogMDtcbn1cblxuXG4vLyBNb2RhbCBiYWNrZ3JvdW5kXG4ubW9kYWwtYmFja2Ryb3Age1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogJHppbmRleC1tb2RhbC1iYWNrZ3JvdW5kO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkbW9kYWwtYmFja2Ryb3AtYmc7XG4gIC8vIEZhZGUgZm9yIGJhY2tkcm9wXG4gICYuZmFkZSB7IEBpbmNsdWRlIG9wYWNpdHkoMCk7IH1cbiAgJi5pbiB7IEBpbmNsdWRlIG9wYWNpdHkoJG1vZGFsLWJhY2tkcm9wLW9wYWNpdHkpOyB9XG59XG5cbi8vIE1vZGFsIGhlYWRlclxuLy8gVG9wIHNlY3Rpb24gb2YgdGhlIG1vZGFsIHcvIHRpdGxlIGFuZCBkaXNtaXNzXG4ubW9kYWwtaGVhZGVyIHtcbiAgcGFkZGluZzogJG1vZGFsLXRpdGxlLXBhZGRpbmc7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjtcbiAgbWluLWhlaWdodDogKCRtb2RhbC10aXRsZS1wYWRkaW5nICsgJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0KTtcbn1cbi8vIENsb3NlIGljb25cbi5tb2RhbC1oZWFkZXIgLmNsb3NlIHtcbiAgbWFyZ2luLXRvcDogLTJweDtcbn1cblxuLy8gVGl0bGUgdGV4dCB3aXRoaW4gaGVhZGVyXG4ubW9kYWwtdGl0bGUge1xuICAgIG1hcmdpbjogMDtcbiAgICBsaW5lLWhlaWdodDogJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0O1xuICAgIGZvbnQtc2l6ZTogMjdweDtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWxpZ2h0O1xuICAgIGZvbnQtd2VpZ2h0OiAzMDAgIWltcG9ydGFudDtcbn1cblxuLy8gTW9kYWwgYm9keVxuLy8gV2hlcmUgYWxsIG1vZGFsIGNvbnRlbnQgcmVzaWRlcyAoc2libGluZyBvZiAubW9kYWwtaGVhZGVyIGFuZCAubW9kYWwtZm9vdGVyKVxuLm1vZGFsLWJvZHkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6ICRtb2RhbC1pbm5lci1wYWRkaW5nO1xufVxuXG4vLyBGb290ZXIgKGZvciBhY3Rpb25zKVxuLm1vZGFsLWZvb3RlciB7XG4gIHBhZGRpbmc6ICRtb2RhbC1pbm5lci1wYWRkaW5nO1xuICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XG4gIGJvcmRlci10b3A6IDA7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG4gIEBpbmNsdWRlIGNsZWFyZml4OyAvLyBjbGVhciBpdCBpbiBjYXNlIGZvbGtzIHVzZSAucHVsbC0qIGNsYXNzZXMgb24gYnV0dG9uc1xuXG4gIC5idG4ge1xuICAgIHBhZGRpbmc6IDZweCAxMnB4O1xuICAgIG1pbi13aWR0aDogNzVweDtcbiAgICB9XG5cbiAgLy8gUHJvcGVybHkgc3BhY2Ugb3V0IGJ1dHRvbnNcbiAgLmJ0biArIC5idG4ge1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgLy8gYWNjb3VudCBmb3IgaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB3aGljaCBnZXRzIHRoZSBib3R0b20gbWFyZ2luIGxpa2UgYWxsIG90aGVyIGlucHV0c1xuICB9XG4gIC8vIGJ1dCBvdmVycmlkZSB0aGF0IGZvciBidXR0b24gZ3JvdXBzXG4gIC5idG4tZ3JvdXAgLmJ0biArIC5idG4ge1xuICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICB9XG4gIC8vIGFuZCBvdmVycmlkZSBpdCBmb3IgYmxvY2sgYnV0dG9ucyBhcyB3ZWxsXG4gIC5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxufVxuXG4vLyBNZWFzdXJlIHNjcm9sbGJhciB3aWR0aCBmb3IgcGFkZGluZyBib2R5IGR1cmluZyBtb2RhbCBzaG93L2hpZGVcbi5tb2RhbC1zY3JvbGxiYXItbWVhc3VyZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtOTk5OXB4O1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBvdmVyZmxvdzogc2Nyb2xsO1xufVxuXG4vLyBTY2FsZSB1cCB0aGUgbW9kYWxcbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAvLyBBdXRvbWF0aWNhbGx5IHNldCBtb2RhbCdzIHdpZHRoIGZvciBsYXJnZXIgdmlld3BvcnRzXG4gIC5tb2RhbC1kaWFsb2cge1xuICAgIHdpZHRoOiAkbW9kYWwtbWQ7XG4gICAgbWFyZ2luOiAzMHB4IGF1dG87XG4gIH1cbiAgLm1vZGFsLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coMCA1cHggMTVweCByZ2JhKDAsMCwwLC41KSk7XG4gIH1cblxuICAvLyBNb2RhbCBzaXplc1xuICAubW9kYWwtc20geyB3aWR0aDogJG1vZGFsLXNtOyB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICAubW9kYWwtbGcgeyB3aWR0aDogJG1vZGFsLWxnOyB9XG59XG5cbi5tb2RhbCB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHsgXG4gIC5tb2RhbDpiZWZvcmUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxufVxuXG4ubW9kYWwtZGlhbG9nIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufSIsIi8qXG4qIFByb2plY3QgS2ltY2hpXG4qXG4qIENvcHlyaWdodCBJQk0sIENvcnAuIDIwMTVcbipcbiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICdMaWNlbnNlJyk7XG4qIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qXG4qICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbipcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLFxuKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cblxuLy9cbi8vIE1lbnUtRmxhdCBEcm9wLURvd25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIERyb3Bkb3duIGFycm93L2NhcmV0XG5cbi5tZW51LWZsYXQge1xuXG4gICAgLmJ0biB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRraW1jaGktZHJvcGRvd24gIWltcG9ydGFudDtcbiAgICAgICAgbWluLXdpZHRoOiAxNjBweDtcbiAgICAgICAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktYm9sZDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLWJ0bjtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgIHBhZGRpbmc6IDRweCA0NXB4IDVweCAzOHB4O1xuXG4gICAgICAgICYgPiBpIHtcbiAgICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICAgICAgICB3aWR0aDogMjZweDtcbiAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDZweDtcbiAgICAgICAgfVxuXG4gICAgICAgICYgPiBpOmJlZm9yZSB7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNDBweDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgLmNhcmV0IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm9yZGVyLXRvcDogMCBcXDk7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgIGJvcmRlci1sZWZ0OiAwO1xuXG4gICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICBmb250LWZhbWlseTogXCJmb250ZWxsb1wiO1xuICAgICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgICAgIHNwZWFrOiBub25lO1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBpbmhlcml0O1xuICAgICAgICAgICAgd2lkdGg6IDEuMmVtO1xuICAgICAgICAgICAgaGVpZ2h0OiAxLjJlbTtcbiAgICAgICAgICAgIG1hcmdpbjogLjVlbTtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGZvbnQtdmFyaWFudDogbm9ybWFsO1xuICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMmVtO1xuICAgICAgICAgICAgY29udGVudDogJ1xcZTg2MSc7XG4gICAgICB9XG5cbiAgICB9XG5cblxuXG4gICAgLy8gVGhlIGRyb3Bkb3duIHdyYXBwZXIgKGRpdilcbiAgICAmLmRyb3B1cCxcbiAgICAmLmRyb3Bkb3duIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG5cbiAgICAvLyBQcmV2ZW50IHRoZSBmb2N1cyBvbiB0aGUgZHJvcGRvd24gdG9nZ2xlIHdoZW4gY2xvc2luZyBkcm9wZG93bnNcbiAgICAuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcbiAgICAgIG91dGxpbmU6IDA7XG4gICAgfVxuXG4gICAgLy8gVGhlIGRyb3Bkb3duIG1lbnUgKHVsKVxuICAgIC5kcm9wZG93bi1tZW51IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMTAwJTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB6LWluZGV4OiAkemluZGV4LWRyb3Bkb3duO1xuICAgICAgZGlzcGxheTogbm9uZTsgLy8gbm9uZSBieSBkZWZhdWx0LCBidXQgYmxvY2sgb24gXCJvcGVuXCIgb2YgdGhlIG1lbnVcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgbWluLXdpZHRoOiAxNjBweDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDA7IC8vIG92ZXJyaWRlIGRlZmF1bHQgdWxcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtYnRuO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDsgLy8gRW5zdXJlcyBwcm9wZXIgYWxpZ25tZW50IGlmIHBhcmVudCBoYXMgaXQgY2hhbmdlZCAoZS5nLiwgbW9kYWwgZm9vdGVyKVxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1lbnUtZmxhdC1kcm9wZG93bi1iZztcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICBAaW5jbHVkZSBib3gtc2hhZG93KG5vbmUgIWltcG9ydGFudCk7XG4gICAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuXG4gICAgICAgICAgLy8gQWxpZ25zIHRoZSBkcm9wZG93biBtZW51IHRvIHJpZ2h0XG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBEZXByZWNhdGVkIGFzIG9mIDMuMS4wIGluIGZhdm9yIG9mIGAuZHJvcGRvd24tbWVudS1bZGlyXWBcbiAgICAgICAgICAmLnB1bGwtcmlnaHQge1xuICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERpdmlkZXJzIChiYXNpY2FsbHkgYW4gaHIpIHdpdGhpbiB0aGUgZHJvcGRvd25cbiAgICAgICAgICAuZGl2aWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBuYXYtZGl2aWRlcigkbWVudS1mbGF0LWRyb3Bkb3duLWRpdmlkZXItYmcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgID4gbGkgPiBhIHtcbiAgICAgICAgICAgICAgLy9ib3JkZXItdG9wOiAxcHggc29saWQgJG1lbnUtZmxhdC1kcm9wZG93bi1kaXZpZGVyLWJnO1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRtZW51LWZsYXQtZHJvcGRvd24tYm9yZGVyO1xuICAgICAgICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdyhpbnNldCAwcHggMXB4IDBweCAwcHggJG1lbnUtZmxhdC1kcm9wZG93bi1kaXZpZGVyLWJnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICA+IGxpOmZpcnN0LWNoaWxkID4gYSB7XG4gICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJG1lbnUtZmxhdC1kcm9wZG93bi1iZztcbiAgICAgICAgICAgIEBpbmNsdWRlIGJveC1zaGFkb3cobm9uZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPiBsaS5jcml0aWNhbDpsYXN0LWNoaWxkID4gYSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBib3gtc2hhZG93KG5vbmUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIExpbmtzIHdpdGhpbiB0aGUgZHJvcGRvd24gbWVudVxuICAgICAgICAgID4gbGkgPiBhIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgcGFkZGluZzogNHB4IDZweDtcbiAgICAgICAgICAgIGNsZWFyOiBib3RoO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtbWVudS1mbGF0O1xuICAgICAgICAgICAgY29sb3I6ICRtZW51LWZsYXQtdGV4dDtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7IC8vIHByZXZlbnQgbGlua3MgZnJvbSByYW5kb21seSBicmVha2luZyBvbnRvIG5ldyBsaW5lc1xuXG4gICAgICAgICAgICAgICAgPiBpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyNnB4O1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gSG92ZXIvRm9jdXMgc3RhdGVcbiAgICAuZHJvcGRvd24tbWVudSA+IGxpID4gYSB7XG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgY29sb3I6ICRtZW51LWZsYXQtZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1lbnUtZmxhdC1kcm9wZG93bi1saW5rLWhvdmVyLWJnO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFjdGl2ZSBzdGF0ZVxuICAgIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGEge1xuICAgICAgJixcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRtZW51LWZsYXQtZHJvcGRvd24tbGluay1hY3RpdmUtY29sb3I7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgb3V0bGluZTogMDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1lbnUtZmxhdC1kcm9wZG93bi1saW5rLWFjdGl2ZS1iZztcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIC5kcm9wZG93bi1tZW51ID4gbGkuY3JpdGljYWwgPiBhIHtcbiAgICAgICAgYmFja2dyb3VuZDogJG1lbnUtZmxhdC1kcm9wZG93bi1jcml0aWNhbC1iZztcbiAgICB9XG5cbiAgICAvLyBEaXNhYmxlZCBzdGF0ZVxuICAgIC8vXG4gICAgLy8gR3JheSBvdXQgdGV4dCBhbmQgZW5zdXJlIHRoZSBob3Zlci9mb2N1cyBzdGF0ZSByZW1haW5zIGdyYXlcblxuICAgIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJGRyb3Bkb3duLWxpbmstZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG5cbiAgICAgIC8vIE51a2UgaG92ZXIvZm9jdXMgZWZmZWN0c1xuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOyAvLyBSZW1vdmUgQ1NTIGdyYWRpZW50XG4gICAgICAgIEBpbmNsdWRlIHJlc2V0LWZpbHRlcjtcbiAgICAgICAgY3Vyc29yOiAkY3Vyc29yLWRpc2FibGVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9wZW4gc3RhdGUgZm9yIHRoZSBkcm9wZG93blxuICAgICYub3BlbiB7XG5cbiAgICAgICAgLmJ0biB7XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgfVxuXG4gICAgICAvLyBTaG93IHRoZSBtZW51XG4gICAgICA+IC5kcm9wZG93bi1tZW51IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG5cbiAgICAgIC5jYXJldCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICMzYTM5M2I7XG4gICAgICB9XG5cbiAgICAgIC5jYXJldDpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnXFxlODY0JztcbiAgICAgIH1cblxuICAgICAgLy8gUmVtb3ZlIHRoZSBvdXRsaW5lIHdoZW4gOmZvY3VzIGlzIHRyaWdnZXJlZFxuICAgICAgPiBhIHtcbiAgICAgICAgb3V0bGluZTogMDtcbiAgICAgIH1cbiAgICB9XG5cbn1cblxuLy8gTWVudSBwb3NpdGlvbmluZ1xuLy9cbi8vIEFkZCBleHRyYSBjbGFzcyB0byBgLmRyb3Bkb3duLW1lbnVgIHRvIGZsaXAgdGhlIGFsaWdubWVudCBvZiB0aGUgZHJvcGRvd25cbi8vIG1lbnUgd2l0aCB0aGUgcGFyZW50LlxuLmRyb3Bkb3duLW1lbnUtcmlnaHQge1xuICBsZWZ0OiBhdXRvOyAvLyBSZXNldCB0aGUgZGVmYXVsdCBmcm9tIGAuZHJvcGRvd24tbWVudWBcbiAgcmlnaHQ6IDA7XG59XG4vLyBXaXRoIHYzLCB3ZSBlbmFibGVkIGF1dG8tZmxpcHBpbmcgaWYgeW91IGhhdmUgYSBkcm9wZG93biB3aXRoaW4gYSByaWdodFxuLy8gYWxpZ25lZCBuYXYgY29tcG9uZW50LiBUbyBlbmFibGUgdGhlIHVuZG9pbmcgb2YgdGhhdCwgd2UgcHJvdmlkZSBhbiBvdmVycmlkZVxuLy8gdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBkcm9wZG93biBtZW51IGFsaWdubWVudC5cbi8vXG4vLyBUaGlzIGlzIG9ubHkgZm9yIGxlZnQtYWxpZ25pbmcgYSBkcm9wZG93biBtZW51IHdpdGhpbiBhIGAubmF2YmFyLXJpZ2h0YCBvclxuLy8gYC5wdWxsLXJpZ2h0YCBuYXYgY29tcG9uZW50LlxuLmRyb3Bkb3duLW1lbnUtbGVmdCB7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiBhdXRvO1xufVxuXG4vLyBEcm9wZG93biBzZWN0aW9uIGhlYWRlcnNcbi5kcm9wZG93bi1oZWFkZXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogM3B4IDIwcHg7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xuICBjb2xvcjogJGRyb3Bkb3duLWhlYWRlci1jb2xvcjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgLy8gYXMgd2l0aCA+IGxpID4gYVxufVxuXG4vLyBCYWNrZHJvcCB0byBjYXRjaCBib2R5IGNsaWNrcyBvbiBtb2JpbGUsIGV0Yy5cbi5kcm9wZG93bi1iYWNrZHJvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgdG9wOiAwO1xuICB6LWluZGV4OiAoJHppbmRleC1kcm9wZG93biAtIDEwKTtcbn1cblxuLy8gUmlnaHQgYWxpZ25lZCBkcm9wZG93bnNcbi5wdWxsLXJpZ2h0ID4gLmRyb3Bkb3duLW1lbnUge1xuICByaWdodDogMDtcbiAgbGVmdDogYXV0bztcbn1cblxuLy8gQWxsb3cgZm9yIGRyb3Bkb3ducyB0byBnbyBib3R0b20gdXAgKGFrYSwgZHJvcHVwLW1lbnUpXG4vL1xuLy8gSnVzdCBhZGQgLmRyb3B1cCBhZnRlciB0aGUgc3RhbmRhcmQgLmRyb3Bkb3duIGNsYXNzIGFuZCB5b3UncmUgc2V0LCBicm8uXG4vLyBUT0RPOiBhYnN0cmFjdCB0aGlzIHNvIHRoYXQgdGhlIG5hdmJhciBmaXhlZCBzdHlsZXMgYXJlIG5vdCBwbGFjZWQgaGVyZT9cblxuLmRyb3B1cCxcbi5uYXZiYXItZml4ZWQtYm90dG9tIC5kcm9wZG93biB7XG4gIC8vIFJldmVyc2UgdGhlIGNhcmV0XG4gIC5jYXJldCB7XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgICBib3JkZXItYm90dG9tOiAkY2FyZXQtd2lkdGgtYmFzZSBkYXNoZWQ7XG4gICAgYm9yZGVyLWJvdHRvbTogJGNhcmV0LXdpZHRoLWJhc2Ugc29saWQgXFw5OyAvLyBJRThcbiAgICBjb250ZW50OiBcIlwiO1xuICB9XG4gIC8vIERpZmZlcmVudCBwb3NpdGlvbmluZyBmb3IgYm90dG9tIHVwIG1lbnVcbiAgLmRyb3Bkb3duLW1lbnUge1xuICAgIHRvcDogYXV0bztcbiAgICBib3R0b206IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICB9XG59XG5cblxuLy8gQ29tcG9uZW50IGFsaWdubWVudFxuLy9cbi8vIFJlaXRlcmF0ZSBwZXIgbmF2YmFyLmxlc3MgYW5kIHRoZSBtb2RpZmllZCBjb21wb25lbnQgYWxpZ25tZW50IHRoZXJlLlxuXG5AbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAubmF2YmFyLXJpZ2h0IHtcbiAgICAuZHJvcGRvd24tbWVudSB7XG4gICAgICByaWdodDogMDsgbGVmdDogYXV0bztcbiAgICB9XG4gICAgLy8gTmVjZXNzYXJ5IGZvciBvdmVycmlkZXMgb2YgdGhlIGRlZmF1bHQgcmlnaHQgYWxpZ25lZCBtZW51LlxuICAgIC8vIFdpbGwgcmVtb3ZlIGNvbWUgdjQgaW4gYWxsIGxpa2VsaWhvb2QuXG4gICAgLmRyb3Bkb3duLW1lbnUtbGVmdCB7XG4gICAgICBsZWZ0OiAwOyByaWdodDogYXV0bztcbiAgICB9XG4gIH1cbn1cbiIsIi5ob3N0cyB7XG5cbiAgICAvKiBCb290c3RyYXAgTW9kYWwqL1xuXG4gICAgLm1vZGFsLWZvb3RlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRob3N0cy1jb2xvcjtcbiAgICB9XG5cbn0iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= */
\ No newline at end of file
diff --git a/ui/new-ui-samples/css/menu-flat.css b/ui/new-ui-samples/css/menu-flat.css
new file mode 100644
index 0000000..7621201
--- /dev/null
+++ b/ui/new-ui-samples/css/menu-flat.css
@@ -0,0 +1,179 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.menu-content {
+ position: relative;
+ height: 35px;
+ width: 170px;
+}
+
+.menu-box {
+ width: 100%;
+ height: 30px;
+ border-radius: 3px 3px 0 3px;
+ cursor: pointer;
+ vertical-align: middle;
+ background: #4E4D4F;
+ color: #EDEDED;
+ float: right;
+ position: relative;
+ padding-bottom: 5px;
+}
+
+.menu-label {
+ position: relative;
+}
+
+.menu-icon-front,
+.list-icon-front {
+ position: relative;
+ font-size: 17px;
+ line-height: 32px;
+ padding-right: 10px;
+ padding-left: 5px;
+ color: #EDEDED;
+}
+
+.menu-icon {
+ position: relative;
+ float: right;
+ line-height: 35px;
+ padding-right: 10px;
+ padding-left: 10px;
+ color: #CFCFCF;
+ font-size: 10px;
+ border-top-right-radius: 3px;
+}
+
+.menu-container {
+ border: 1px solid #999999;
+ width: 100px;
+}
+
+.menu-list {
+ position: absolute;
+ z-index: 3;
+ float: right;
+ width: 100%;
+ top: 35px;
+ padding-left: 0;
+ cursor: pointer;
+ background: #3A393B;
+ margin: 0;
+}
+
+.menu-list li {
+ list-style: none;
+ position: relative;
+ color: #EDEDED;
+ border-top: 1px groove black;
+}
+
+.menu-list li:first-child {
+ border: none;
+}
+
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.menu-content {
+ position: relative;
+ height: 35px;
+ width: 170px;
+}
+
+.menu-box {
+ width: 100%;
+ height: 30px;
+ border-radius: 3px 3px 0 3px;
+ cursor: pointer;
+ vertical-align: middle;
+ background: #4E4D4F;
+ color: #EDEDED;
+ float: right;
+ position: relative;
+ padding-bottom: 5px;
+}
+
+.menu-label {
+ position: relative;
+}
+
+.menu-icon-front,
+.list-icon-front {
+ position: relative;
+ font-size: 17px;
+ line-height: 32px;
+ padding-right: 10px;
+ padding-left: 5px;
+ color: #EDEDED;
+}
+
+.menu-icon {
+ position: relative;
+ float: right;
+ line-height: 35px;
+ padding-right: 10px;
+ padding-left: 10px;
+ color: #CFCFCF;
+ font-size: 10px;
+ border-top-right-radius: 3px;
+}
+
+.menu-container {
+ border: 1px solid #999999;
+ width: 100px;
+}
+
+.menu-list {
+ position: absolute;
+ z-index: 3;
+ float: right;
+ width: 100%;
+ top: 35px;
+ padding-left: 0;
+ cursor: pointer;
+ background: #3A393B;
+ margin: 0;
+}
+
+.menu-list li {
+ list-style: none;
+ position: relative;
+ color: #EDEDED;
+ border-top: 1px groove black;
+}
+
+.menu-list li:first-child {
+ border: none;
+}
diff --git a/ui/new-ui-samples/css/radio-flat.css b/ui/new-ui-samples/css/radio-flat.css
new file mode 100644
index 0000000..752db90
--- /dev/null
+++ b/ui/new-ui-samples/css/radio-flat.css
@@ -0,0 +1,60 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ .radio-label {
+ position: relative;
+ cursor: pointer;
+ }
+
+ .radio-content {
+ margin-right: 10px;
+ }
+
+ .inline-radio {
+ display: inline-block;
+ }
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ .radio-label {
+ position: relative;
+ cursor: pointer;
+ }
+
+ .radio-content {
+ margin-right: 10px;
+ }
+
+ .inline-radio {
+ display: inline-block;
+ }
\ No newline at end of file
diff --git a/ui/new-ui-samples/css/selectmenu-flat.css b/ui/new-ui-samples/css/selectmenu-flat.css
new file mode 100644
index 0000000..fd55b86
--- /dev/null
+++ b/ui/new-ui-samples/css/selectmenu-flat.css
@@ -0,0 +1,177 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT 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-content {
+ position: relative;
+ height: 30px;
+ width: 170px;
+}
+
+.selected-box {
+ width: 75%;
+ height: 30px;
+ border: 1px solid #d8d8d8;
+ border-radius: 3px;
+ cursor: pointer;
+ background: #FFFFFF;
+ float: right;
+}
+
+.select-val {
+ display: none;
+}
+
+.select-label {
+ line-height: 32px;
+ vertical-align: middle;
+ position: relative;
+ margin-left: 20px;
+}
+
+.select-icon {
+ position: relative;
+ float: right;
+ line-height: 30px;
+ vertical-align: middle;
+ padding-right: 10px;
+ padding-left: 10px;
+ color: #555555;
+ font-size: 10px;
+}
+
+.select-icon:hover {
+ background: #FCFCFC;
+}
+
+.selectmenu-opt {
+ background: #FFFFFF;
+}
+
+.selectmenu-list {
+ border: 1px solid #d8d8d8;
+ width: 99%;
+ position: absolute;
+ top: 31px;
+ cursor: pointer;
+ padding: 0;
+ margin: 0;
+}
+
+.selectmenu-list li {
+ list-style: none;
+ position: relative;
+ height: 20px;
+ padding: 5px 0 5px 20px;
+ line-height: 21px;
+ vertical-align: middle;
+ border-bottom: 1px solid #d8d8d8;
+ z-index: 3;
+}
+
+.selectmenu-opt:hover {
+ background: #FCFCFC;
+}
+
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT 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-content {
+ position: relative;
+ height: 30px;
+ width: 170px;
+}
+
+.selected-box {
+ width: 75%;
+ height: 30px;
+ border: 1px solid #d8d8d8;
+ border-radius: 3px;
+ cursor: pointer;
+ background: #FFFFFF;
+ float: right;
+}
+
+.select-val {
+ display: none;
+}
+
+.select-label {
+ line-height: 32px;
+ vertical-align: middle;
+ position: relative;
+ margin-left: 20px;
+}
+
+.select-icon {
+ position: relative;
+ float: right;
+ line-height: 30px;
+ vertical-align: middle;
+ padding-right: 10px;
+ padding-left: 10px;
+ color: #555555;
+ font-size: 10px;
+}
+
+.select-icon:hover {
+ background: #FCFCFC;
+}
+
+.selectmenu-opt {
+ background: #FFFFFF;
+}
+
+.selectmenu-list {
+ border: 1px solid #d8d8d8;
+ width: 99%;
+ position: absolute;
+ top: 31px;
+ cursor: pointer;
+ padding: 0;
+ margin: 0;
+}
+
+.selectmenu-list li {
+ list-style: none;
+ position: relative;
+ height: 20px;
+ padding: 5px 0 5px 20px;
+ line-height: 21px;
+ vertical-align: middle;
+ border-bottom: 1px solid #d8d8d8;
+ z-index: 3;
+}
+
+.selectmenu-opt:hover {
+ background: #FCFCFC;
+}
diff --git a/ui/new-ui-samples/css/textbox-flat.css b/ui/new-ui-samples/css/textbox-flat.css
new file mode 100644
index 0000000..ef13afd
--- /dev/null
+++ b/ui/new-ui-samples/css/textbox-flat.css
@@ -0,0 +1,44 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ .textbox-container {
+ border: 1px solid #CCC;
+ border-radius: 3px;
+ }
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ .textbox-container {
+ border: 1px solid #CCC;
+ border-radius: 3px;
+ }
\ No newline at end of file
diff --git a/ui/new-ui-samples/css/vendor.css b/ui/new-ui-samples/css/vendor.css
new file mode 100644
index 0000000..2dcdc22
--- /dev/null
+++ b/ui/new-ui-samples/css/vendor.css
@@ -0,0 +1,1801 @@
+/*!
+ * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+/* FONT PATH
+ * -------------------------- */
+@font-face {
+ font-family: 'FontAwesome';
+ src: url('../fonts/fontawesome-webfont.eot?v=4.3.0');
+ src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg');
+ font-weight: normal;
+ font-style: normal;
+}
+.fa {
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ transform: translate(0, 0);
+}
+/* makes the font 33% larger relative to the icon container */
+.fa-lg {
+ font-size: 1.33333333em;
+ line-height: 0.75em;
+ vertical-align: -15%;
+}
+.fa-2x {
+ font-size: 2em;
+}
+.fa-3x {
+ font-size: 3em;
+}
+.fa-4x {
+ font-size: 4em;
+}
+.fa-5x {
+ font-size: 5em;
+}
+.fa-fw {
+ width: 1.28571429em;
+ text-align: center;
+}
+.fa-ul {
+ padding-left: 0;
+ margin-left: 2.14285714em;
+ list-style-type: none;
+}
+.fa-ul > li {
+ position: relative;
+}
+.fa-li {
+ position: absolute;
+ left: -2.14285714em;
+ width: 2.14285714em;
+ top: 0.14285714em;
+ text-align: center;
+}
+.fa-li.fa-lg {
+ left: -1.85714286em;
+}
+.fa-border {
+ padding: .2em .25em .15em;
+ border: solid 0.08em #eeeeee;
+ border-radius: .1em;
+}
+.pull-right {
+ float: right;
+}
+.pull-left {
+ float: left;
+}
+.fa.pull-left {
+ margin-right: .3em;
+}
+.fa.pull-right {
+ margin-left: .3em;
+}
+.fa-spin {
+ -webkit-animation: fa-spin 2s infinite linear;
+ animation: fa-spin 2s infinite linear;
+}
+.fa-pulse {
+ -webkit-animation: fa-spin 1s infinite steps(8);
+ animation: fa-spin 1s infinite steps(8);
+}
+@-webkit-keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+@keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+.fa-rotate-90 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
+.fa-rotate-180 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg);
+}
+.fa-rotate-270 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
+ -webkit-transform: rotate(270deg);
+ -ms-transform: rotate(270deg);
+ transform: rotate(270deg);
+}
+.fa-flip-horizontal {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
+ -webkit-transform: scale(-1, 1);
+ -ms-transform: scale(-1, 1);
+ transform: scale(-1, 1);
+}
+.fa-flip-vertical {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
+ -webkit-transform: scale(1, -1);
+ -ms-transform: scale(1, -1);
+ transform: scale(1, -1);
+}
+:root .fa-rotate-90,
+:root .fa-rotate-180,
+:root .fa-rotate-270,
+:root .fa-flip-horizontal,
+:root .fa-flip-vertical {
+ filter: none;
+}
+.fa-stack {
+ position: relative;
+ display: inline-block;
+ width: 2em;
+ height: 2em;
+ line-height: 2em;
+ vertical-align: middle;
+}
+.fa-stack-1x,
+.fa-stack-2x {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ text-align: center;
+}
+.fa-stack-1x {
+ line-height: inherit;
+}
+.fa-stack-2x {
+ font-size: 2em;
+}
+.fa-inverse {
+ color: #ffffff;
+}
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+ readers do not read off random characters that represent icons */
+.fa-glass:before {
+ content: "\f000";
+}
+.fa-music:before {
+ content: "\f001";
+}
+.fa-search:before {
+ content: "\f002";
+}
+.fa-envelope-o:before {
+ content: "\f003";
+}
+.fa-heart:before {
+ content: "\f004";
+}
+.fa-star:before {
+ content: "\f005";
+}
+.fa-star-o:before {
+ content: "\f006";
+}
+.fa-user:before {
+ content: "\f007";
+}
+.fa-film:before {
+ content: "\f008";
+}
+.fa-th-large:before {
+ content: "\f009";
+}
+.fa-th:before {
+ content: "\f00a";
+}
+.fa-th-list:before {
+ content: "\f00b";
+}
+.fa-check:before {
+ content: "\f00c";
+}
+.fa-remove:before,
+.fa-close:before,
+.fa-times:before {
+ content: "\f00d";
+}
+.fa-search-plus:before {
+ content: "\f00e";
+}
+.fa-search-minus:before {
+ content: "\f010";
+}
+.fa-power-off:before {
+ content: "\f011";
+}
+.fa-signal:before {
+ content: "\f012";
+}
+.fa-gear:before,
+.fa-cog:before {
+ content: "\f013";
+}
+.fa-trash-o:before {
+ content: "\f014";
+}
+.fa-home:before {
+ content: "\f015";
+}
+.fa-file-o:before {
+ content: "\f016";
+}
+.fa-clock-o:before {
+ content: "\f017";
+}
+.fa-road:before {
+ content: "\f018";
+}
+.fa-download:before {
+ content: "\f019";
+}
+.fa-arrow-circle-o-down:before {
+ content: "\f01a";
+}
+.fa-arrow-circle-o-up:before {
+ content: "\f01b";
+}
+.fa-inbox:before {
+ content: "\f01c";
+}
+.fa-play-circle-o:before {
+ content: "\f01d";
+}
+.fa-rotate-right:before,
+.fa-repeat:before {
+ content: "\f01e";
+}
+.fa-refresh:before {
+ content: "\f021";
+}
+.fa-list-alt:before {
+ content: "\f022";
+}
+.fa-lock:before {
+ content: "\f023";
+}
+.fa-flag:before {
+ content: "\f024";
+}
+.fa-headphones:before {
+ content: "\f025";
+}
+.fa-volume-off:before {
+ content: "\f026";
+}
+.fa-volume-down:before {
+ content: "\f027";
+}
+.fa-volume-up:before {
+ content: "\f028";
+}
+.fa-qrcode:before {
+ content: "\f029";
+}
+.fa-barcode:before {
+ content: "\f02a";
+}
+.fa-tag:before {
+ content: "\f02b";
+}
+.fa-tags:before {
+ content: "\f02c";
+}
+.fa-book:before {
+ content: "\f02d";
+}
+.fa-bookmark:before {
+ content: "\f02e";
+}
+.fa-print:before {
+ content: "\f02f";
+}
+.fa-camera:before {
+ content: "\f030";
+}
+.fa-font:before {
+ content: "\f031";
+}
+.fa-bold:before {
+ content: "\f032";
+}
+.fa-italic:before {
+ content: "\f033";
+}
+.fa-text-height:before {
+ content: "\f034";
+}
+.fa-text-width:before {
+ content: "\f035";
+}
+.fa-align-left:before {
+ content: "\f036";
+}
+.fa-align-center:before {
+ content: "\f037";
+}
+.fa-align-right:before {
+ content: "\f038";
+}
+.fa-align-justify:before {
+ content: "\f039";
+}
+.fa-list:before {
+ content: "\f03a";
+}
+.fa-dedent:before,
+.fa-outdent:before {
+ content: "\f03b";
+}
+.fa-indent:before {
+ content: "\f03c";
+}
+.fa-video-camera:before {
+ content: "\f03d";
+}
+.fa-photo:before,
+.fa-image:before,
+.fa-picture-o:before {
+ content: "\f03e";
+}
+.fa-pencil:before {
+ content: "\f040";
+}
+.fa-map-marker:before {
+ content: "\f041";
+}
+.fa-adjust:before {
+ content: "\f042";
+}
+.fa-tint:before {
+ content: "\f043";
+}
+.fa-edit:before,
+.fa-pencil-square-o:before {
+ content: "\f044";
+}
+.fa-share-square-o:before {
+ content: "\f045";
+}
+.fa-check-square-o:before {
+ content: "\f046";
+}
+.fa-arrows:before {
+ content: "\f047";
+}
+.fa-step-backward:before {
+ content: "\f048";
+}
+.fa-fast-backward:before {
+ content: "\f049";
+}
+.fa-backward:before {
+ content: "\f04a";
+}
+.fa-play:before {
+ content: "\f04b";
+}
+.fa-pause:before {
+ content: "\f04c";
+}
+.fa-stop:before {
+ content: "\f04d";
+}
+.fa-forward:before {
+ content: "\f04e";
+}
+.fa-fast-forward:before {
+ content: "\f050";
+}
+.fa-step-forward:before {
+ content: "\f051";
+}
+.fa-eject:before {
+ content: "\f052";
+}
+.fa-chevron-left:before {
+ content: "\f053";
+}
+.fa-chevron-right:before {
+ content: "\f054";
+}
+.fa-plus-circle:before {
+ content: "\f055";
+}
+.fa-minus-circle:before {
+ content: "\f056";
+}
+.fa-times-circle:before {
+ content: "\f057";
+}
+.fa-check-circle:before {
+ content: "\f058";
+}
+.fa-question-circle:before {
+ content: "\f059";
+}
+.fa-info-circle:before {
+ content: "\f05a";
+}
+.fa-crosshairs:before {
+ content: "\f05b";
+}
+.fa-times-circle-o:before {
+ content: "\f05c";
+}
+.fa-check-circle-o:before {
+ content: "\f05d";
+}
+.fa-ban:before {
+ content: "\f05e";
+}
+.fa-arrow-left:before {
+ content: "\f060";
+}
+.fa-arrow-right:before {
+ content: "\f061";
+}
+.fa-arrow-up:before {
+ content: "\f062";
+}
+.fa-arrow-down:before {
+ content: "\f063";
+}
+.fa-mail-forward:before,
+.fa-share:before {
+ content: "\f064";
+}
+.fa-expand:before {
+ content: "\f065";
+}
+.fa-compress:before {
+ content: "\f066";
+}
+.fa-plus:before {
+ content: "\f067";
+}
+.fa-minus:before {
+ content: "\f068";
+}
+.fa-asterisk:before {
+ content: "\f069";
+}
+.fa-exclamation-circle:before {
+ content: "\f06a";
+}
+.fa-gift:before {
+ content: "\f06b";
+}
+.fa-leaf:before {
+ content: "\f06c";
+}
+.fa-fire:before {
+ content: "\f06d";
+}
+.fa-eye:before {
+ content: "\f06e";
+}
+.fa-eye-slash:before {
+ content: "\f070";
+}
+.fa-warning:before,
+.fa-exclamation-triangle:before {
+ content: "\f071";
+}
+.fa-plane:before {
+ content: "\f072";
+}
+.fa-calendar:before {
+ content: "\f073";
+}
+.fa-random:before {
+ content: "\f074";
+}
+.fa-comment:before {
+ content: "\f075";
+}
+.fa-magnet:before {
+ content: "\f076";
+}
+.fa-chevron-up:before {
+ content: "\f077";
+}
+.fa-chevron-down:before {
+ content: "\f078";
+}
+.fa-retweet:before {
+ content: "\f079";
+}
+.fa-shopping-cart:before {
+ content: "\f07a";
+}
+.fa-folder:before {
+ content: "\f07b";
+}
+.fa-folder-open:before {
+ content: "\f07c";
+}
+.fa-arrows-v:before {
+ content: "\f07d";
+}
+.fa-arrows-h:before {
+ content: "\f07e";
+}
+.fa-bar-chart-o:before,
+.fa-bar-chart:before {
+ content: "\f080";
+}
+.fa-twitter-square:before {
+ content: "\f081";
+}
+.fa-facebook-square:before {
+ content: "\f082";
+}
+.fa-camera-retro:before {
+ content: "\f083";
+}
+.fa-key:before {
+ content: "\f084";
+}
+.fa-gears:before,
+.fa-cogs:before {
+ content: "\f085";
+}
+.fa-comments:before {
+ content: "\f086";
+}
+.fa-thumbs-o-up:before {
+ content: "\f087";
+}
+.fa-thumbs-o-down:before {
+ content: "\f088";
+}
+.fa-star-half:before {
+ content: "\f089";
+}
+.fa-heart-o:before {
+ content: "\f08a";
+}
+.fa-sign-out:before {
+ content: "\f08b";
+}
+.fa-linkedin-square:before {
+ content: "\f08c";
+}
+.fa-thumb-tack:before {
+ content: "\f08d";
+}
+.fa-external-link:before {
+ content: "\f08e";
+}
+.fa-sign-in:before {
+ content: "\f090";
+}
+.fa-trophy:before {
+ content: "\f091";
+}
+.fa-github-square:before {
+ content: "\f092";
+}
+.fa-upload:before {
+ content: "\f093";
+}
+.fa-lemon-o:before {
+ content: "\f094";
+}
+.fa-phone:before {
+ content: "\f095";
+}
+.fa-square-o:before {
+ content: "\f096";
+}
+.fa-bookmark-o:before {
+ content: "\f097";
+}
+.fa-phone-square:before {
+ content: "\f098";
+}
+.fa-twitter:before {
+ content: "\f099";
+}
+.fa-facebook-f:before,
+.fa-facebook:before {
+ content: "\f09a";
+}
+.fa-github:before {
+ content: "\f09b";
+}
+.fa-unlock:before {
+ content: "\f09c";
+}
+.fa-credit-card:before {
+ content: "\f09d";
+}
+.fa-rss:before {
+ content: "\f09e";
+}
+.fa-hdd-o:before {
+ content: "\f0a0";
+}
+.fa-bullhorn:before {
+ content: "\f0a1";
+}
+.fa-bell:before {
+ content: "\f0f3";
+}
+.fa-certificate:before {
+ content: "\f0a3";
+}
+.fa-hand-o-right:before {
+ content: "\f0a4";
+}
+.fa-hand-o-left:before {
+ content: "\f0a5";
+}
+.fa-hand-o-up:before {
+ content: "\f0a6";
+}
+.fa-hand-o-down:before {
+ content: "\f0a7";
+}
+.fa-arrow-circle-left:before {
+ content: "\f0a8";
+}
+.fa-arrow-circle-right:before {
+ content: "\f0a9";
+}
+.fa-arrow-circle-up:before {
+ content: "\f0aa";
+}
+.fa-arrow-circle-down:before {
+ content: "\f0ab";
+}
+.fa-globe:before {
+ content: "\f0ac";
+}
+.fa-wrench:before {
+ content: "\f0ad";
+}
+.fa-tasks:before {
+ content: "\f0ae";
+}
+.fa-filter:before {
+ content: "\f0b0";
+}
+.fa-briefcase:before {
+ content: "\f0b1";
+}
+.fa-arrows-alt:before {
+ content: "\f0b2";
+}
+.fa-group:before,
+.fa-users:before {
+ content: "\f0c0";
+}
+.fa-chain:before,
+.fa-link:before {
+ content: "\f0c1";
+}
+.fa-cloud:before {
+ content: "\f0c2";
+}
+.fa-flask:before {
+ content: "\f0c3";
+}
+.fa-cut:before,
+.fa-scissors:before {
+ content: "\f0c4";
+}
+.fa-copy:before,
+.fa-files-o:before {
+ content: "\f0c5";
+}
+.fa-paperclip:before {
+ content: "\f0c6";
+}
+.fa-save:before,
+.fa-floppy-o:before {
+ content: "\f0c7";
+}
+.fa-square:before {
+ content: "\f0c8";
+}
+.fa-navicon:before,
+.fa-reorder:before,
+.fa-bars:before {
+ content: "\f0c9";
+}
+.fa-list-ul:before {
+ content: "\f0ca";
+}
+.fa-list-ol:before {
+ content: "\f0cb";
+}
+.fa-strikethrough:before {
+ content: "\f0cc";
+}
+.fa-underline:before {
+ content: "\f0cd";
+}
+.fa-table:before {
+ content: "\f0ce";
+}
+.fa-magic:before {
+ content: "\f0d0";
+}
+.fa-truck:before {
+ content: "\f0d1";
+}
+.fa-pinterest:before {
+ content: "\f0d2";
+}
+.fa-pinterest-square:before {
+ content: "\f0d3";
+}
+.fa-google-plus-square:before {
+ content: "\f0d4";
+}
+.fa-google-plus:before {
+ content: "\f0d5";
+}
+.fa-money:before {
+ content: "\f0d6";
+}
+.fa-caret-down:before {
+ content: "\f0d7";
+}
+.fa-caret-up:before {
+ content: "\f0d8";
+}
+.fa-caret-left:before {
+ content: "\f0d9";
+}
+.fa-caret-right:before {
+ content: "\f0da";
+}
+.fa-columns:before {
+ content: "\f0db";
+}
+.fa-unsorted:before,
+.fa-sort:before {
+ content: "\f0dc";
+}
+.fa-sort-down:before,
+.fa-sort-desc:before {
+ content: "\f0dd";
+}
+.fa-sort-up:before,
+.fa-sort-asc:before {
+ content: "\f0de";
+}
+.fa-envelope:before {
+ content: "\f0e0";
+}
+.fa-linkedin:before {
+ content: "\f0e1";
+}
+.fa-rotate-left:before,
+.fa-undo:before {
+ content: "\f0e2";
+}
+.fa-legal:before,
+.fa-gavel:before {
+ content: "\f0e3";
+}
+.fa-dashboard:before,
+.fa-tachometer:before {
+ content: "\f0e4";
+}
+.fa-comment-o:before {
+ content: "\f0e5";
+}
+.fa-comments-o:before {
+ content: "\f0e6";
+}
+.fa-flash:before,
+.fa-bolt:before {
+ content: "\f0e7";
+}
+.fa-sitemap:before {
+ content: "\f0e8";
+}
+.fa-umbrella:before {
+ content: "\f0e9";
+}
+.fa-paste:before,
+.fa-clipboard:before {
+ content: "\f0ea";
+}
+.fa-lightbulb-o:before {
+ content: "\f0eb";
+}
+.fa-exchange:before {
+ content: "\f0ec";
+}
+.fa-cloud-download:before {
+ content: "\f0ed";
+}
+.fa-cloud-upload:before {
+ content: "\f0ee";
+}
+.fa-user-md:before {
+ content: "\f0f0";
+}
+.fa-stethoscope:before {
+ content: "\f0f1";
+}
+.fa-suitcase:before {
+ content: "\f0f2";
+}
+.fa-bell-o:before {
+ content: "\f0a2";
+}
+.fa-coffee:before {
+ content: "\f0f4";
+}
+.fa-cutlery:before {
+ content: "\f0f5";
+}
+.fa-file-text-o:before {
+ content: "\f0f6";
+}
+.fa-building-o:before {
+ content: "\f0f7";
+}
+.fa-hospital-o:before {
+ content: "\f0f8";
+}
+.fa-ambulance:before {
+ content: "\f0f9";
+}
+.fa-medkit:before {
+ content: "\f0fa";
+}
+.fa-fighter-jet:before {
+ content: "\f0fb";
+}
+.fa-beer:before {
+ content: "\f0fc";
+}
+.fa-h-square:before {
+ content: "\f0fd";
+}
+.fa-plus-square:before {
+ content: "\f0fe";
+}
+.fa-angle-double-left:before {
+ content: "\f100";
+}
+.fa-angle-double-right:before {
+ content: "\f101";
+}
+.fa-angle-double-up:before {
+ content: "\f102";
+}
+.fa-angle-double-down:before {
+ content: "\f103";
+}
+.fa-angle-left:before {
+ content: "\f104";
+}
+.fa-angle-right:before {
+ content: "\f105";
+}
+.fa-angle-up:before {
+ content: "\f106";
+}
+.fa-angle-down:before {
+ content: "\f107";
+}
+.fa-desktop:before {
+ content: "\f108";
+}
+.fa-laptop:before {
+ content: "\f109";
+}
+.fa-tablet:before {
+ content: "\f10a";
+}
+.fa-mobile-phone:before,
+.fa-mobile:before {
+ content: "\f10b";
+}
+.fa-circle-o:before {
+ content: "\f10c";
+}
+.fa-quote-left:before {
+ content: "\f10d";
+}
+.fa-quote-right:before {
+ content: "\f10e";
+}
+.fa-spinner:before {
+ content: "\f110";
+}
+.fa-circle:before {
+ content: "\f111";
+}
+.fa-mail-reply:before,
+.fa-reply:before {
+ content: "\f112";
+}
+.fa-github-alt:before {
+ content: "\f113";
+}
+.fa-folder-o:before {
+ content: "\f114";
+}
+.fa-folder-open-o:before {
+ content: "\f115";
+}
+.fa-smile-o:before {
+ content: "\f118";
+}
+.fa-frown-o:before {
+ content: "\f119";
+}
+.fa-meh-o:before {
+ content: "\f11a";
+}
+.fa-gamepad:before {
+ content: "\f11b";
+}
+.fa-keyboard-o:before {
+ content: "\f11c";
+}
+.fa-flag-o:before {
+ content: "\f11d";
+}
+.fa-flag-checkered:before {
+ content: "\f11e";
+}
+.fa-terminal:before {
+ content: "\f120";
+}
+.fa-code:before {
+ content: "\f121";
+}
+.fa-mail-reply-all:before,
+.fa-reply-all:before {
+ content: "\f122";
+}
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+ content: "\f123";
+}
+.fa-location-arrow:before {
+ content: "\f124";
+}
+.fa-crop:before {
+ content: "\f125";
+}
+.fa-code-fork:before {
+ content: "\f126";
+}
+.fa-unlink:before,
+.fa-chain-broken:before {
+ content: "\f127";
+}
+.fa-question:before {
+ content: "\f128";
+}
+.fa-info:before {
+ content: "\f129";
+}
+.fa-exclamation:before {
+ content: "\f12a";
+}
+.fa-superscript:before {
+ content: "\f12b";
+}
+.fa-subscript:before {
+ content: "\f12c";
+}
+.fa-eraser:before {
+ content: "\f12d";
+}
+.fa-puzzle-piece:before {
+ content: "\f12e";
+}
+.fa-microphone:before {
+ content: "\f130";
+}
+.fa-microphone-slash:before {
+ content: "\f131";
+}
+.fa-shield:before {
+ content: "\f132";
+}
+.fa-calendar-o:before {
+ content: "\f133";
+}
+.fa-fire-extinguisher:before {
+ content: "\f134";
+}
+.fa-rocket:before {
+ content: "\f135";
+}
+.fa-maxcdn:before {
+ content: "\f136";
+}
+.fa-chevron-circle-left:before {
+ content: "\f137";
+}
+.fa-chevron-circle-right:before {
+ content: "\f138";
+}
+.fa-chevron-circle-up:before {
+ content: "\f139";
+}
+.fa-chevron-circle-down:before {
+ content: "\f13a";
+}
+.fa-html5:before {
+ content: "\f13b";
+}
+.fa-css3:before {
+ content: "\f13c";
+}
+.fa-anchor:before {
+ content: "\f13d";
+}
+.fa-unlock-alt:before {
+ content: "\f13e";
+}
+.fa-bullseye:before {
+ content: "\f140";
+}
+.fa-ellipsis-h:before {
+ content: "\f141";
+}
+.fa-ellipsis-v:before {
+ content: "\f142";
+}
+.fa-rss-square:before {
+ content: "\f143";
+}
+.fa-play-circle:before {
+ content: "\f144";
+}
+.fa-ticket:before {
+ content: "\f145";
+}
+.fa-minus-square:before {
+ content: "\f146";
+}
+.fa-minus-square-o:before {
+ content: "\f147";
+}
+.fa-level-up:before {
+ content: "\f148";
+}
+.fa-level-down:before {
+ content: "\f149";
+}
+.fa-check-square:before {
+ content: "\f14a";
+}
+.fa-pencil-square:before {
+ content: "\f14b";
+}
+.fa-external-link-square:before {
+ content: "\f14c";
+}
+.fa-share-square:before {
+ content: "\f14d";
+}
+.fa-compass:before {
+ content: "\f14e";
+}
+.fa-toggle-down:before,
+.fa-caret-square-o-down:before {
+ content: "\f150";
+}
+.fa-toggle-up:before,
+.fa-caret-square-o-up:before {
+ content: "\f151";
+}
+.fa-toggle-right:before,
+.fa-caret-square-o-right:before {
+ content: "\f152";
+}
+.fa-euro:before,
+.fa-eur:before {
+ content: "\f153";
+}
+.fa-gbp:before {
+ content: "\f154";
+}
+.fa-dollar:before,
+.fa-usd:before {
+ content: "\f155";
+}
+.fa-rupee:before,
+.fa-inr:before {
+ content: "\f156";
+}
+.fa-cny:before,
+.fa-rmb:before,
+.fa-yen:before,
+.fa-jpy:before {
+ content: "\f157";
+}
+.fa-ruble:before,
+.fa-rouble:before,
+.fa-rub:before {
+ content: "\f158";
+}
+.fa-won:before,
+.fa-krw:before {
+ content: "\f159";
+}
+.fa-bitcoin:before,
+.fa-btc:before {
+ content: "\f15a";
+}
+.fa-file:before {
+ content: "\f15b";
+}
+.fa-file-text:before {
+ content: "\f15c";
+}
+.fa-sort-alpha-asc:before {
+ content: "\f15d";
+}
+.fa-sort-alpha-desc:before {
+ content: "\f15e";
+}
+.fa-sort-amount-asc:before {
+ content: "\f160";
+}
+.fa-sort-amount-desc:before {
+ content: "\f161";
+}
+.fa-sort-numeric-asc:before {
+ content: "\f162";
+}
+.fa-sort-numeric-desc:before {
+ content: "\f163";
+}
+.fa-thumbs-up:before {
+ content: "\f164";
+}
+.fa-thumbs-down:before {
+ content: "\f165";
+}
+.fa-youtube-square:before {
+ content: "\f166";
+}
+.fa-youtube:before {
+ content: "\f167";
+}
+.fa-xing:before {
+ content: "\f168";
+}
+.fa-xing-square:before {
+ content: "\f169";
+}
+.fa-youtube-play:before {
+ content: "\f16a";
+}
+.fa-dropbox:before {
+ content: "\f16b";
+}
+.fa-stack-overflow:before {
+ content: "\f16c";
+}
+.fa-instagram:before {
+ content: "\f16d";
+}
+.fa-flickr:before {
+ content: "\f16e";
+}
+.fa-adn:before {
+ content: "\f170";
+}
+.fa-bitbucket:before {
+ content: "\f171";
+}
+.fa-bitbucket-square:before {
+ content: "\f172";
+}
+.fa-tumblr:before {
+ content: "\f173";
+}
+.fa-tumblr-square:before {
+ content: "\f174";
+}
+.fa-long-arrow-down:before {
+ content: "\f175";
+}
+.fa-long-arrow-up:before {
+ content: "\f176";
+}
+.fa-long-arrow-left:before {
+ content: "\f177";
+}
+.fa-long-arrow-right:before {
+ content: "\f178";
+}
+.fa-apple:before {
+ content: "\f179";
+}
+.fa-windows:before {
+ content: "\f17a";
+}
+.fa-android:before {
+ content: "\f17b";
+}
+.fa-linux:before {
+ content: "\f17c";
+}
+.fa-dribbble:before {
+ content: "\f17d";
+}
+.fa-skype:before {
+ content: "\f17e";
+}
+.fa-foursquare:before {
+ content: "\f180";
+}
+.fa-trello:before {
+ content: "\f181";
+}
+.fa-female:before {
+ content: "\f182";
+}
+.fa-male:before {
+ content: "\f183";
+}
+.fa-gittip:before,
+.fa-gratipay:before {
+ content: "\f184";
+}
+.fa-sun-o:before {
+ content: "\f185";
+}
+.fa-moon-o:before {
+ content: "\f186";
+}
+.fa-archive:before {
+ content: "\f187";
+}
+.fa-bug:before {
+ content: "\f188";
+}
+.fa-vk:before {
+ content: "\f189";
+}
+.fa-weibo:before {
+ content: "\f18a";
+}
+.fa-renren:before {
+ content: "\f18b";
+}
+.fa-pagelines:before {
+ content: "\f18c";
+}
+.fa-stack-exchange:before {
+ content: "\f18d";
+}
+.fa-arrow-circle-o-right:before {
+ content: "\f18e";
+}
+.fa-arrow-circle-o-left:before {
+ content: "\f190";
+}
+.fa-toggle-left:before,
+.fa-caret-square-o-left:before {
+ content: "\f191";
+}
+.fa-dot-circle-o:before {
+ content: "\f192";
+}
+.fa-wheelchair:before {
+ content: "\f193";
+}
+.fa-vimeo-square:before {
+ content: "\f194";
+}
+.fa-turkish-lira:before,
+.fa-try:before {
+ content: "\f195";
+}
+.fa-plus-square-o:before {
+ content: "\f196";
+}
+.fa-space-shuttle:before {
+ content: "\f197";
+}
+.fa-slack:before {
+ content: "\f198";
+}
+.fa-envelope-square:before {
+ content: "\f199";
+}
+.fa-wordpress:before {
+ content: "\f19a";
+}
+.fa-openid:before {
+ content: "\f19b";
+}
+.fa-institution:before,
+.fa-bank:before,
+.fa-university:before {
+ content: "\f19c";
+}
+.fa-mortar-board:before,
+.fa-graduation-cap:before {
+ content: "\f19d";
+}
+.fa-yahoo:before {
+ content: "\f19e";
+}
+.fa-google:before {
+ content: "\f1a0";
+}
+.fa-reddit:before {
+ content: "\f1a1";
+}
+.fa-reddit-square:before {
+ content: "\f1a2";
+}
+.fa-stumbleupon-circle:before {
+ content: "\f1a3";
+}
+.fa-stumbleupon:before {
+ content: "\f1a4";
+}
+.fa-delicious:before {
+ content: "\f1a5";
+}
+.fa-digg:before {
+ content: "\f1a6";
+}
+.fa-pied-piper:before {
+ content: "\f1a7";
+}
+.fa-pied-piper-alt:before {
+ content: "\f1a8";
+}
+.fa-drupal:before {
+ content: "\f1a9";
+}
+.fa-joomla:before {
+ content: "\f1aa";
+}
+.fa-language:before {
+ content: "\f1ab";
+}
+.fa-fax:before {
+ content: "\f1ac";
+}
+.fa-building:before {
+ content: "\f1ad";
+}
+.fa-child:before {
+ content: "\f1ae";
+}
+.fa-paw:before {
+ content: "\f1b0";
+}
+.fa-spoon:before {
+ content: "\f1b1";
+}
+.fa-cube:before {
+ content: "\f1b2";
+}
+.fa-cubes:before {
+ content: "\f1b3";
+}
+.fa-behance:before {
+ content: "\f1b4";
+}
+.fa-behance-square:before {
+ content: "\f1b5";
+}
+.fa-steam:before {
+ content: "\f1b6";
+}
+.fa-steam-square:before {
+ content: "\f1b7";
+}
+.fa-recycle:before {
+ content: "\f1b8";
+}
+.fa-automobile:before,
+.fa-car:before {
+ content: "\f1b9";
+}
+.fa-cab:before,
+.fa-taxi:before {
+ content: "\f1ba";
+}
+.fa-tree:before {
+ content: "\f1bb";
+}
+.fa-spotify:before {
+ content: "\f1bc";
+}
+.fa-deviantart:before {
+ content: "\f1bd";
+}
+.fa-soundcloud:before {
+ content: "\f1be";
+}
+.fa-database:before {
+ content: "\f1c0";
+}
+.fa-file-pdf-o:before {
+ content: "\f1c1";
+}
+.fa-file-word-o:before {
+ content: "\f1c2";
+}
+.fa-file-excel-o:before {
+ content: "\f1c3";
+}
+.fa-file-powerpoint-o:before {
+ content: "\f1c4";
+}
+.fa-file-photo-o:before,
+.fa-file-picture-o:before,
+.fa-file-image-o:before {
+ content: "\f1c5";
+}
+.fa-file-zip-o:before,
+.fa-file-archive-o:before {
+ content: "\f1c6";
+}
+.fa-file-sound-o:before,
+.fa-file-audio-o:before {
+ content: "\f1c7";
+}
+.fa-file-movie-o:before,
+.fa-file-video-o:before {
+ content: "\f1c8";
+}
+.fa-file-code-o:before {
+ content: "\f1c9";
+}
+.fa-vine:before {
+ content: "\f1ca";
+}
+.fa-codepen:before {
+ content: "\f1cb";
+}
+.fa-jsfiddle:before {
+ content: "\f1cc";
+}
+.fa-life-bouy:before,
+.fa-life-buoy:before,
+.fa-life-saver:before,
+.fa-support:before,
+.fa-life-ring:before {
+ content: "\f1cd";
+}
+.fa-circle-o-notch:before {
+ content: "\f1ce";
+}
+.fa-ra:before,
+.fa-rebel:before {
+ content: "\f1d0";
+}
+.fa-ge:before,
+.fa-empire:before {
+ content: "\f1d1";
+}
+.fa-git-square:before {
+ content: "\f1d2";
+}
+.fa-git:before {
+ content: "\f1d3";
+}
+.fa-hacker-news:before {
+ content: "\f1d4";
+}
+.fa-tencent-weibo:before {
+ content: "\f1d5";
+}
+.fa-qq:before {
+ content: "\f1d6";
+}
+.fa-wechat:before,
+.fa-weixin:before {
+ content: "\f1d7";
+}
+.fa-send:before,
+.fa-paper-plane:before {
+ content: "\f1d8";
+}
+.fa-send-o:before,
+.fa-paper-plane-o:before {
+ content: "\f1d9";
+}
+.fa-history:before {
+ content: "\f1da";
+}
+.fa-genderless:before,
+.fa-circle-thin:before {
+ content: "\f1db";
+}
+.fa-header:before {
+ content: "\f1dc";
+}
+.fa-paragraph:before {
+ content: "\f1dd";
+}
+.fa-sliders:before {
+ content: "\f1de";
+}
+.fa-share-alt:before {
+ content: "\f1e0";
+}
+.fa-share-alt-square:before {
+ content: "\f1e1";
+}
+.fa-bomb:before {
+ content: "\f1e2";
+}
+.fa-soccer-ball-o:before,
+.fa-futbol-o:before {
+ content: "\f1e3";
+}
+.fa-tty:before {
+ content: "\f1e4";
+}
+.fa-binoculars:before {
+ content: "\f1e5";
+}
+.fa-plug:before {
+ content: "\f1e6";
+}
+.fa-slideshare:before {
+ content: "\f1e7";
+}
+.fa-twitch:before {
+ content: "\f1e8";
+}
+.fa-yelp:before {
+ content: "\f1e9";
+}
+.fa-newspaper-o:before {
+ content: "\f1ea";
+}
+.fa-wifi:before {
+ content: "\f1eb";
+}
+.fa-calculator:before {
+ content: "\f1ec";
+}
+.fa-paypal:before {
+ content: "\f1ed";
+}
+.fa-google-wallet:before {
+ content: "\f1ee";
+}
+.fa-cc-visa:before {
+ content: "\f1f0";
+}
+.fa-cc-mastercard:before {
+ content: "\f1f1";
+}
+.fa-cc-discover:before {
+ content: "\f1f2";
+}
+.fa-cc-amex:before {
+ content: "\f1f3";
+}
+.fa-cc-paypal:before {
+ content: "\f1f4";
+}
+.fa-cc-stripe:before {
+ content: "\f1f5";
+}
+.fa-bell-slash:before {
+ content: "\f1f6";
+}
+.fa-bell-slash-o:before {
+ content: "\f1f7";
+}
+.fa-trash:before {
+ content: "\f1f8";
+}
+.fa-copyright:before {
+ content: "\f1f9";
+}
+.fa-at:before {
+ content: "\f1fa";
+}
+.fa-eyedropper:before {
+ content: "\f1fb";
+}
+.fa-paint-brush:before {
+ content: "\f1fc";
+}
+.fa-birthday-cake:before {
+ content: "\f1fd";
+}
+.fa-area-chart:before {
+ content: "\f1fe";
+}
+.fa-pie-chart:before {
+ content: "\f200";
+}
+.fa-line-chart:before {
+ content: "\f201";
+}
+.fa-lastfm:before {
+ content: "\f202";
+}
+.fa-lastfm-square:before {
+ content: "\f203";
+}
+.fa-toggle-off:before {
+ content: "\f204";
+}
+.fa-toggle-on:before {
+ content: "\f205";
+}
+.fa-bicycle:before {
+ content: "\f206";
+}
+.fa-bus:before {
+ content: "\f207";
+}
+.fa-ioxhost:before {
+ content: "\f208";
+}
+.fa-angellist:before {
+ content: "\f209";
+}
+.fa-cc:before {
+ content: "\f20a";
+}
+.fa-shekel:before,
+.fa-sheqel:before,
+.fa-ils:before {
+ content: "\f20b";
+}
+.fa-meanpath:before {
+ content: "\f20c";
+}
+.fa-buysellads:before {
+ content: "\f20d";
+}
+.fa-connectdevelop:before {
+ content: "\f20e";
+}
+.fa-dashcube:before {
+ content: "\f210";
+}
+.fa-forumbee:before {
+ content: "\f211";
+}
+.fa-leanpub:before {
+ content: "\f212";
+}
+.fa-sellsy:before {
+ content: "\f213";
+}
+.fa-shirtsinbulk:before {
+ content: "\f214";
+}
+.fa-simplybuilt:before {
+ content: "\f215";
+}
+.fa-skyatlas:before {
+ content: "\f216";
+}
+.fa-cart-plus:before {
+ content: "\f217";
+}
+.fa-cart-arrow-down:before {
+ content: "\f218";
+}
+.fa-diamond:before {
+ content: "\f219";
+}
+.fa-ship:before {
+ content: "\f21a";
+}
+.fa-user-secret:before {
+ content: "\f21b";
+}
+.fa-motorcycle:before {
+ content: "\f21c";
+}
+.fa-street-view:before {
+ content: "\f21d";
+}
+.fa-heartbeat:before {
+ content: "\f21e";
+}
+.fa-venus:before {
+ content: "\f221";
+}
+.fa-mars:before {
+ content: "\f222";
+}
+.fa-mercury:before {
+ content: "\f223";
+}
+.fa-transgender:before {
+ content: "\f224";
+}
+.fa-transgender-alt:before {
+ content: "\f225";
+}
+.fa-venus-double:before {
+ content: "\f226";
+}
+.fa-mars-double:before {
+ content: "\f227";
+}
+.fa-venus-mars:before {
+ content: "\f228";
+}
+.fa-mars-stroke:before {
+ content: "\f229";
+}
+.fa-mars-stroke-v:before {
+ content: "\f22a";
+}
+.fa-mars-stroke-h:before {
+ content: "\f22b";
+}
+.fa-neuter:before {
+ content: "\f22c";
+}
+.fa-facebook-official:before {
+ content: "\f230";
+}
+.fa-pinterest-p:before {
+ content: "\f231";
+}
+.fa-whatsapp:before {
+ content: "\f232";
+}
+.fa-server:before {
+ content: "\f233";
+}
+.fa-user-plus:before {
+ content: "\f234";
+}
+.fa-user-times:before {
+ content: "\f235";
+}
+.fa-hotel:before,
+.fa-bed:before {
+ content: "\f236";
+}
+.fa-viacoin:before {
+ content: "\f237";
+}
+.fa-train:before {
+ content: "\f238";
+}
+.fa-subway:before {
+ content: "\f239";
+}
+.fa-medium:before {
+ content: "\f23a";
+}
diff --git a/ui/new-ui-samples/favicon-16x16.png b/ui/new-ui-samples/favicon-16x16.png
new file mode 100644
index 0000000000000000000000000000000000000000..16085801d05bf8a5e7aeee24f6ed40f778352ff0
GIT binary patch
literal 1301
zcmb7CeN@tC6n-H~#X0q8nUR5l{b*?Z5D<l|6iE>=Gc&bxnxd_=+(O&>*wJijbEnl7
z_BB&$ZnZq()M^{9lYLlfsW}!V8cHA}5`G|Z0EzwlYk%#J-E-dioO{oG?s?C1pRbdX
z;@mN-FaQ8|ZhUMCf}V@dWeJi=As*Wia4L-EM+4Au#%&>YDN^I};#2ql99auM`AGn*
zNUQt}0HrVhx*PzQ7Xk1ssgZ2k0025MIWd)k49K^%tJ4QwP=1};A)HLxKTN-C%0Bu6
z7Ef#(nM*5uNx3y15NS*#j<{q+<T)Gwykh)mY#`YBxYF>3*_t4Sg9RNLc}o4xd?yGl
zmV+HT&-Ah#^~)W{9k_$7mxkFmK`*YT<tJU7pGp-eu?G(rT8-&Y_giFF+e{YJsc)J|
zYM#u5{?J0I`BSE{IyJja#jbnJmb2T{sRPO#-SvR=D(ZoD`=BbVzn|Ugz$IBoX=dgg
zV`9;4rch3ms5U-VZhfkOKb^<(%!F-LO7;T3)S7!@?!zOaj7}A+Z*)VaG(tRuW6$8?
z^!S+BzyuSVVM-`AW*$BVu&){23i|zC@|8JvFpgtsa4dBILrdJGA;hl{^edU2BjJ+S
zTEcuQ!Pd3TJ{V!`Nnb7Kh6IY>z2jm|tBiK-ZxCd<NwnO9>@OniLn;1(9+F^`wqF}o
zA~UxTY|rTSk(32l-b%s!Ai)rIpJsir%+!QzTmMeMv&*vy0vTnmj&@*-TGr#X?|ikK
zeXB3h_K3V7jarZ<d*uEeTBwUE(Napfutkjx6LB|ZxQ;fG<sLlWOb_bUuls8XQ8jd6
zI=I&WG999q3`Ej9mbBZ(Z0NBblFh8snyGIsRK*-!Jr9pru8py7OvScYw@R#8(8EdS
z`4m}iAsZ|qdJ9!+`B@*+Y>pRCZ-egZpl1e1Zd|K16O9WEI`(w~8_6|_nA+EiH>y>#
zC-}o8rK!=xb~qdbhGX@JpE`soNsHe6-+}UU0m+Z6mbrwdC-_j5j{?sd9JVI+N^^Y#
z=i`ja#ttt~e_<KGpj?@OPKBGDd7m@U#H&ZJ-oU$NB4f8r89<&GB7HDC9gZ8bW$o69
z@n|gZd`B3XS()vzrPSF2wTk3~as^J+Elxi7G$#{_q5?$o7kwVQGgNzurndxS6>fCR
z=_ztr;<coCXZ+&-QG0lCu@9^Eej9@n&O$Dq<2>q&@g^}`udcs_w5;6N=+u?cyc{HG
z6nfsC&7k0r8;`snyNh+yc}3b;@WYQ%RH5%q#$k`Gp=J2GO6l;E!TwEnm=r-2xsf{j
zSFG{!TkikR8|&Nu^hrlY9scY^qKn8gA&JZ9`4)6_J?rW7LSeqrXvTegswh6oFNmsm
z<xS^;$;~(NZ`>6BQvLn18A1M}4!g=vefjdP%wcr}8uQlwO4h6Qs-o^5w|k4q(LLS}
zzc#G8BAQbwpYz*CE$pqO9#$MHtv~tr#24SJ2+fcbS*ofVX}8PK^2Wi{yW0=gzdU^^
zyjV7{6!T`{;E<%)_I~A+_OdBT>}=bB;<)W}1q}cXuKKsY?CXdMK|)TtFh5r)VCH=y
zKmdfn6nY5E2%*5Klt?BGX42_oIE)Fy8tbJ+Yy3+nKA8Ve!Ds(XxNtpS3LyY4Cn;7O
HlXK!9%tbg#
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/favicon-194x194.png b/ui/new-ui-samples/favicon-194x194.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a53d0fd8f71375c866fcbfa1b8f1ae4c86f0bba
GIT binary patch
literal 21106
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/favicon-32x32.png b/ui/new-ui-samples/favicon-32x32.png
new file mode 100644
index 0000000000000000000000000000000000000000..c6e103f554d36acc5f1e1e217664b5b49ff0bff7
GIT binary patch
literal 2165
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/favicon-96x96.png b/ui/new-ui-samples/favicon-96x96.png
new file mode 100644
index 0000000000000000000000000000000000000000..f1c1f2c3f10bdbd7dfe0bd66396a06310997a3cd
GIT binary patch
literal 8147
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/favicon.ico b/ui/new-ui-samples/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..cb3a3dc2f9c9ce0e5d3e14f0adab89c28c729ce0
GIT binary patch
literal 15086
zcmeHO30PBC+78mXO<TJ-wrXqG!cEvi*mt=svWSWsTC~_2chuI}=`vNP&eNGrXa2F%
zTD!XM3sgaiS_KzeKtMKuge5EqBtS^WzJBxFX!wDmg@W_X{Lkch&hwpf?)RPZo^#K3
z-|vJ*v!U72o_&^v(vG(32^!6hMx)u;-A^CI{N0%6<@F%VpwVJ}OQSJS2Opuu{d^QO
z8tVO;AKA3qmTcbh9ND<r_EGkdD}=rD4zWbRBUWl!ox_X@r*V`%DLI%%N{<wvTo+mY
z-GC_CuMrcw?h;p3jZDyWxSDlRSE;VUeW$LK^K4|t;V($l37DbDl+BT4#0-R?;|4KN
zevio2w6a9HPR<{d^_)a?i|;y}z$-LZu-`ta>*yD=^jYd9`U_tTWKZRFlrW}rm9d!8
zQa1}mS*fRuw8+iU2LI|Wo=B3P+POe??(|Z{**<N^SvFymWTj_N>&DRSw>Gkuo>(_^
z!a#MziVw!b$&YVlX2BS*T-^lUOtlTAcaQ6sDp|#r2-f>#6uiT+`*O{1Mh#?7@^(%Q
zEY5avy>9q2wA`3CyWHq~h5M3A4VS?et>MV-rF&3A<B>ndQ!2X0ErTGT-fURPGc76L
zzLMI&Wg1%7`ZV6#=xzT<V|?g%TI1?_#~@CwHPyUv&&a&Zec7p=OY9S_a(n+wbjH;E
zKKEXDSQ$>oRWA^^y6*xjP2%Jl(;};033r;MKl6hcS6=X|jj-nTmX5o-$2gu*C$MfA
zwggm}f>H|fKkK90{!M$Y_}1_G-nD2nWgAQvjt{1bEPd>6-!d-TsWoVZqsXCmxxM50
z{terUgPS$^Aq{&o0?GqOdRKHTUH)dIUB{w$hwg6{d8riX@v6MvEml0&+s+!lz~Qm)
zhBY_xXNsY4R^#<|y+jTPcIq$ZIBKLz*?QPK(`fi;nf}!KuPL9l+Vq!KL+fT&&27C=
zvY`1dnPkc6Bsz>;z|{G@9;8WGm#Bz;dvW)~{x-eS7fGH?>AaR_Z_jTW+dKbZaR3?(
z8fY}Z-)Xewn;37U(Yi3NL`S3Tc@T0Hn2&j_7$_b27#dB7aVn2mXY4RUV4&6~%a2-k
z{-6KIvM<Jw<vRz}$Ajq#(K%vN`*mV`X94ka=PklAeh0E6dEeNQqJ0Z-ExkatA38@0
z_a&3nU-em!2C{otp7<wXoFtb>Y|kflNsEZf@=D@{f=^^C8;HNCn~7+(h_I}GR(rB#
zZy+f?ASPu;fs`KuQhcxr^VUSyefP8ZXtjBmY`Z`_f$RQuY_nQkL4dNJ08J|ax=sQN
z-2@nwgu<X8_G=}CowW>X_Zw8bQR<Trr9A~ChUl)N;<(m>kyf3-%J!?cUlkGp+^;|*
zBtYNE0;9qm>-Izp?*AJko;kX9pO>g|$+rFeh@qA2MhyB)h%skDqW%obm1P`%ReTC(
z#^8UrXW7Y0iF#Edwz-39vnv?nK5|W)|C#O@-#^MLeg2@}`R><>1NhoDzmH8h6GwT}
z9UDc~eV0bI?yrhcp3uh|vtT})ho$-p;@1>sJqKSqjfQ=1+gV6_*i}Y!E9#jBRg)`U
z-ONr^w}kh!qqAW8D77%qzPp<JmbA##i7KBg`N9Uz15=~h53P^uJ|UTB{1MVjm&|GE
zoMl6)pVAfQ5o6nL5FyeMR+6m3#j&%{#j;-aFQ@ai%lOXQtUl|e_x0^IF_J?YXDKrc
zsiuptM3eJ=f4j$>j;{ZHVuIwzjk)@>Fi&@O!%*rg=Q`T9tn+=j`OV;fyKnhM{Irqj
zow@$y=Z8`Tr5oFN@S}KDhAL6}L&RWhd0a<k`wGv0$k&JRS~o{3i{JLCKL4ik?=#Y;
zxE)P@VZe9ru(G3C_NGO59L|YRoqUGUalfb?>v>r>ft{lr@Vt1JYezP6Srv+vz93Ey
zfa<sXuNS}L=bP~XG2}Ibs*kMMl|nXr8&AcFA2eQWS9B*ig@(e=Tlzo6-qQE!&wTEb
zplYsDZO2MB$kzlw#Tu8&%j@WFl<lwikwrUf$h)7}#oqgPwBu3jc;~a4Gj4Z`5Xd(}
z+&!atc7<`XwcPXEiO=5PPPu^RCFoqmftGbXrn0pztF6z6E1gcNorxc{LeDZIgbM)X
z)texdZ#uB(uEFv?uW~2PzQdiSY2ms+`)Ur<t>=i#*1P}ew)e;DbV^Mp&TH#ArACOs
z`d`KRU+0-VvFhPjb4NMX9>iRCkgoOx!3IA`<wo{M)<2bbUd!{x_9qI=u#|67Ew3_K
z#>I8+OE!hvS9Vu&9iW5j30+u!{d!Jg`9@F6nr6i~9O-mglgP@`slsbaFsI%ODP@K;
z%Zl|qYt}99)H!8b`%VeAU%b-GRI}FYZw0@bX8Wo8y(d2NF0{;@Ut2$8pK=o8tmcAi
zG4_1}zI(o@YR(<Kckl9Yxi3CZ%%#URaEVU^D_E;4RykSDu}A$X!uR-;PVcQdlsF?(
zJ&BQ}`JR=pH*;#t5M5)cNUk&vYCpakE*g6!L~!U_0DsO<>ZEiTUw2Pn>`}~NWT?+N
z=jpmUN{!V4)uzuPN{!U9bWp!LK`m~DK`m|Pe0W3NJFx!ojC~4E#t-TU=c_tjw*tcy
z-+cXmYu>}a-12XlT@=t_`q7)0f7qk!k!Smdl`)+BJm30-g@Mh+8~y_0c@FRW9n4#O
z@CVUbp2slYIX8gbG!DP9V#6Ip?~+X6!dRB@si9&y@52kd86fB`4HiOvK!fa@PxZEw
z-W9~xE`^plv3&0cx?~f6hdG2y6Isr=E-&A+37^*fQUtyI(`dU+<t$bgEb^1;(;_-Q
z`qO&NkoJ%)@2cNk@vAE;4Q_#|uvWMm-eSBI#1|d*Dc!S&Q}psHlRKWALGRubPge>e
z=^dG2^tN3Qbn*TeJh>$~s11u;46r851Ru;d!Uu~r<?k#~Od4t*oa0o#QyAE2u8kCf
zAg¥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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/fontawesome-webfont.eot b/ui/new-ui-samples/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000000000000000000000000000000000000..33b2bb80055cc480e797de704925acaba4ba7d7d
GIT binary patch
literal 60767
zcmZ^KRZt~7(B;J)F79w~9o+Te?(XjH&fxCu?l25GxVsF4ySuv$FtFcl?ZaQSwVg^%
z=TxUFPpR~&#OMkD@VNv4ApdL7fd6R_fFuaOf1JGX|78ES{~!H-3{trm=l{C@18@M6
z04IPWz#Sk0@B&x>-2R(6{D%MlDnRu=v;uel>;WbK*Z&wwfaZUU>whse|7Q&dzyV+a
zu>aRt03ZO{e<Le^^S?Oi|4&ZP|C12_5LJ`<e|8K7QJ@aEbOBs?00!u>exJqtnMc<t
z6-QJ!k|Y6mXBU+THRNvRZ{q?1qlt7npNM#e>t)u@3*s3?X{FA#mos?(EHiB~!|8@P
zHSlRJs7(;#_>C{=bF-qE5ypoWCp8a4ibb~`lhZnsG|vfL7aUvoGS2-d*~C|XaoBvh
z)O~O54lz6Cpp#=U3+W8~m1Jh8i50Z0*3oy3VuiZ5`2+1iW8vld^?2b-5vInw2r)>+
zBk>4J@ryU{&4p#$YBDZMdxcBDJsA;7G>@f)+)zgBLlWL5hewQPFC~yxlnbk9*X(
zX6Nyk%u$KnC?+U9G(y2iD+SyylAV&6#ewy1sMOvYn8_<ECmd9*Xw@>8i!Kynzg}H0
z4auYFzNM=OCc=Iv&<dnDmNT6Q59-raSv+NRwZadIBcalCVYJ7uxTLRXkol;h6B`0h
zJ|qOYEI%e#V9tI1Jb67rH2Xn4Z`%ZKWaL9&4iU!qCrRTl$pECqsG8DFRm3EQnT#HS
zb2gR)t15k~rGoi!!^F+5Q0q@N&8)ev?1jtTAvj;|RCsD6hQxx%@(;@_YKnEuU|OCq
zxDZSeRs5A%(oSzUU42zVi(z8QMoq8!yoJKG_hz}Ro`vPEWh=Ko+y7?p!}I77lZJty
zh)Hvqx!BBK%|EzeTRKyrZs_X6!d-2X_V{!U$XO?8T2he&UOJ&FX<$^CGnU&1c#hNP
zAVh2aa5lEMTiG3nC@|4&za{zy1_jN1kpEjxLuXsTh6!P?t{85lC85SJ!+Ce}LL?%l
z1vF;vS`Ug_mD`0?C3_u}`#Mk&ShmePUokUtc2i*%*QN)|=jUD95k)6dCw3==@7{qB
z$7;Y>ODQ{g6!7A7$%nE6ugJnWBI<~x@AL14_)b-BR2^5j5xS%Z>r!+poCp`hi4>|d
z9sS!BL~)07L%H$A45}!FIeVD8mA>Iv+YDVss|8qla@15boMWkFNfWfDcu~V;BRW}Q
zHbxiK4@ii6{-TFM8V8~H(`(W90xoPe(J*~^m@1@uv-sR;GZ;fq0&I9AMxQ?Vj%|y)
znW!EhuS6QM8RtXJPl!X8!v_!0WPYQz2Kb3pN!J}xCaK2iqm;({?@bivA!C@15rM+7
z&G)j>oszdf@qGAJ>EM)Noqiu=aHZvQ`s%T<l8epbe2(c55(MWCo-@W~@=EWd1Z#Z_
z0M{EOGry+<{-mIx2)I-9OH#PzYd!1LQth+1)G<}af!tC8{UFFA8P-wo+GnQRSYCu$
z?2*kNQj6LNhs{||Tvet&Ig(wzE^g1+8~&EEQ<-57d%$^085^l*bgrnsgfa(>AQzCI
z^t-&7(S%JstVz3stdszdF*a}FnFVMn+jW8TWR%lwK!uh-pLG@1-6E)abeJaJKBS-)
zo)b#7F_1DGpAWCn8AB+pkf45{br3o&6pprbhCJ7vMUq;vFqGXt!r|5P&xe}~Ab8v`
z{flS%lJlHITsGT`+OO>I@)EiKE2yK$&O{)(z?Sm+<7CQ~JEy!94B#r=rfZL)7-<#T
zdZ<OK&Q3L{TpfoEuyLtmiEYuk)O(AvZmJ&`Oi*PhV%?fAUj!*{venf%-!qX-R+{;#
z9B9#<1Y`l)gLaTgbz^ZO;;$$nqWf9Emn@}_@Gx&uQV3cVqc{MI;7=_HxPzcraI)cE
zZTt){>RO4^2)@5yT?)5!`*JS2U~bZ0<`U{OtdT!}rzCDXUY|PH<6d~oBIdw@k*ys*
zCd-VfTJkXJm!Zl#%AcV}BvG^-S>jkKVz1S*!!X9UyyjtV*o|Te8+`#P&68*9&;eh>
zV61v>QV;fMXYCAaE~+B4q7E=E3TUEs;p78<htc#TCulS+L*qNHGqeJ<$$Xq`O6#0c
zjgf3GYpZV*1bDyoD9Emw0T##nnrcw@J{zU62TA&=VS55LkDMr-fk#agb(xn$FH1{C
zr=o^a5o$Bg{O*P}-mugx>YVYUDE(*1*Q|etMpC*bEv$<arHzaHZh0}cdb}6_`lC~j
z6hj#6%qbDblS-_qLIE#D<|ukAXW#s1v0su6c$Gf<dEwc%Y+U(f=KiC7S_wqstoZCB
z=CNcCA<2doC=^qHXHLPk?nXxf8J*w1dIGTpVmWWd{%5Hu8SP!r=hL7L?)+&}k;kMl
zAdq<@N@>T^WtPR)u&3=mnqXpc1Z>uUM%F_cf?AUM%{Un{jTEyS{Tuyf>|lssBMH8r
z(lKw^ft~6)I_&ZCDnm8bs{JBH+MlTj1WC!4P(GR0_%ISZ)JIF_`Q;hPK37yom=XN4
zaH=;q{au8;lPsuw1q8EJ)iOd`zX(pJ_IHkw72{x^g<`7Ob}ZUfcsjYQG@R$rq)kZv
zpqwOr<?(PPXJktVcQ9>u@H+~VJ)V<XD$FBuBiV2;=RZn>2?V_+5^~E2XfJqi$dPYc
z!u6};1!o7$;YRm~I8N9)8EVGJ8seK2T&Zo0`gwfpFh_7HQ1*(<%h7W%^Jc2Vr$&`v
zLcMdy#71nJVjuBXLQV1?z45kUb3p*RDk$a*;$ZZ`U%oYltOpF3a(<!Qa;)Q(!Ax{Q
zj%jLqVFO=o!woRm=R+X0;^XS54s5ND8pb%?xq|wA0UWgZ@CYQfk}kR$dK=+Hiys-(
z*4OP}?E%pry+-T~V9XB~Z>Xp<^+`YwE#TC#TLVlES?7)-kVN6kxX~Q{^V~e;AGN-I
zsVK!c&bzlPgMWREEQrJ5g$^2RkIh+uUk2dW%W%`X#tn-GewEs`E=hzpO~m;weWc#F
zfKaIO!K7Gix2T6*jgEq;FbY+P3W);*e;{1~&F}@Vmm?0w!zHwl)l=Gd)KHj)o}^y|
zn&V3(`0<MiJX`fZ`euX>{7>$K>N#7qT;YtclZ86!!>NoNqXV?Wgu6)kVg+j1SzNq6
zs39?@@wJ)mkzROo7H?tuo8}==6J5%5$-l|@Ct@9Nf8lWZcBl!@61%|TNN_REs&R;0
z1t+Vo4j#}gVJ?RUdgt9xij}OY2cXs&#wqfIv7^gXp;`wwEh#OLSE>wg>R5lDY$?R%
zx~X*^1LM%D*JirmpBuDvaUVxo8T8=!UR&e|WHJNB3i}}RiddkV_^q6*Wj!zy2}L#!
z`@WtPC?>_fy{9v0Ef)W~Vcay?_404FPO;Z$jl*0&tZk*~G-m;qBA01OxK#n)NGpSC
zkXJXbl9ZcUCz$<ZjbV}_Xvk7Asu)EPTuOZ>4i}$d*3ALQ<nw(We>4?sOb)7cn@`N0
z7(MEWHX%`mg~RN_j*Bcg5!!DV$V%zz2Sq*Mq7{arbD^ZBQvQ&}P*TwD{*8}lYoYMp
z9Ay%^y*sH%S6R#?j9C>K_B<J!oZeAj>B~FnTux>wAXJAP1Uz6R=ohF(Vuulg2Z3R-
z{oL}A_KKvz-O*-+bUw+c#U}?GooWRi4S9nLI_TL@V#>{T9+!Wgu-r~!-(F{obENUu
z#@~d&be*nF^H_{cS?jt~NMAu#uY)%J*J5>nnkuie6+&ztH$f7}jo5N%rscJjC_yLD
z%Pf{zbPBF1Am0^wjVE;_P7JkfMEe6Y20BKHUJ_8fAZ-}D@k5YtG8vIApZhAxulthJ
zazt($#?^JJ4Y-shRpkKsJ4=jlEobY`VCSYO&J)iVL0WZ}er!qFlU~vZhI?A-I<>ui
z0<JzzF(EFB)uf2%Jau%=n|Y>*3g@=)u7Ee${zBrcXc4U9j*>EHMb0Ll;-ay-Fk)b@
z5F=x;?*@S)xdR_=NzpBKRlgpNp>uU@tu7ny1KLL6L|AG5^BwM94L?Uy2n`G7G;~l_
z=p@JiHvp%2WAq22q*PJ&VJ<l*Ls<+8e*e(KeOC%}lV+;GyON9NnsB>@@$mAx3UIw0
zwwm8%==0ikJf||)kPI<qa(IpQGVmusG^~iV*)QW<yKIt67DC+jdg+qxY;kR-AZxxi
zSPfdGwm^H5nzA1@=i^uYQNwn1V@<r=BE2#80U&yajYXiF2PE9I*J>{7r7p~r4P?;Y
zi?Cwwuwx(FD*;-p5VKK0{wjZUh<~o0W*?rhQhG|$&9vloUm!(lH^RU0nVgUaaG%YA
z{QF5K^88O2Rw-L8hAx*-1yDQ0d3ehRULceHR8Jf_>Gwk8?SAcZk#T5}Z|H8pP;T2n
z5Cz@+$n3+liVJn;Wmj5&#%JwybF5(yEOZRi$jWVl2+a7C&msDxeoB^9DFGXS1*y=K
zxK#dRa>b-%sl5t?mtjL6qL}wxHMWn9YcCA^4rfA1S4O*jP+%l3+yf|K)`~B&mdyzj
zAM>5dsp;Aq?-FH%{y`UaWY<OD`!%l<D)Mk`L@G<utvgIdEu+uFUe&91kr)}!USDQO
zVqotc#~nCmnW^i1GUqHr496nRMZ;G#AesUi3kej(*D-#1y;&Lyi!>j3de&E{guy&U
zSq(Qgn7z11aCUJ~*Nin6D*O$ZLnx#wwdKN^>p%=c9iBjbNgY!)UCd1z7vhM5;VNjN
zI_b!HJFB#nszk0ebH)~HiJz~v5FV{GY4>@qybr6tzaeTFM^Q64fhn0Kz1B)NkYpMy
zYQn2Dv@l?a2F-7UStSNdO<}OEp`jdaPJq@tljHo-YTb>79%Y4ddpW2-0Rs(KU>CO4
ziNk|G9esRy+&^K!<>a4=Ung1~FFR1{-axStIjGGrK(UWlEW^x`pXcJ9^vYz<vxNxp
zj<^$1%SvBKExA8i8abmT>Q|>ihW@Kis253o+|;8(8#b9DX8JZcx`lL8+=vF(Q)T0F
zp{F^5L`84~pHJ})N47<MKZXN0oIf<yf`pT9z)6Iq4ws}3$xIZI&k-o%zCxAhz%vb`
z;~N{SsdxR<O@>Z~Jk;aF=1()Pd$^YTb~EdhOB7_46wXveC;4(#$g-4GmjE3f^jCfY
z>R0)#1}pL2ZaA;cO%mr_s;`6MyWb#4*X3e~ubnHeo8rkyhbWzvgbe#&nYY7R9Y+ne
zfk-t+qDXRnQ5IhHoAqAE8i@c;hy(Jf_BJr9;`?MM9^IbvBOMq$N2$TWMAfj!&Pqe-
zi6yA#2)e*Mh4iNg#Mr&&DpzrGk_8d`A->sV2ZQ_30U7(7foAz#ND|L~r9v)BeiZaa
zfbmbor-~yOg&uxskH-sxWZWA1M}oInpSVVD+9FMm#ZG|dsDMJ!WvB$<L+3T*vF~FY
zLG$s9xEBUK>#BB^?9UWc>n|@l)J}16{3SLj0K<MfCrZX(Lhgw7(^IE*>_pu-g}pSQ
zv@mNGLqy413Co_SI=psLkVgP)8(ri4`RnzZOR%M-`Ao7xf);&55$B+YBeLOq@=-l3
z4=OtsgmuauO|KCwOZZV!jC)sHx^k|dcVrZj*;%h%lQLBTM5@Ij2i)d2F;bnn=2(p1
zAy+i>=!1<TAwZW<@dzEc85GCUbG(#pQ76>pJ4J~g>m6EfLmKc17;47GyqZ99>M;{J
zRsK2ilwk+YVHF#S8lY^%#7+^8VY2I3_uBOECog37U7kjQh>HQy?ABBywy4+#C#~kD
z4zkNSHA5Wq8}Hunr!^|>oiX9a@BlwL<`wh;m2fw?xyTktD&o%!)#GGj(oM1p11Ntg
zj?T;B9<5!m>OkZc?l$mk?xdM@C3@HZ-M<JC!Fm3ote5&t67gMEj)?*LebaXrv@)~c
zRBDPg{J8huc*afLDU3)z(l)Q5r~kfnR3u`wD1(mb3qn~;@?bsBGGeDKh=Q*!Wx>e3
znfzI3Om6^+j={VwJuGO2TeZCCe%wqKCF-T(K79Lfi_8Mi?k=SE!mAi2N4-<;Se%PR
zl2g`8<RMeeBR6!%Z~vWfe^Mm*O#TpA2*7Uh&&Fdy&cm_iOIUORCaR9SQhQqRSs~?#
zRB7|LQwAI8s-~ukSygniN0ZUo<ngY6-&NiKS%7C6T6;@2<rn#a^zGSc+*ZB4MIH}k
zU5ZrXir9+KtV$S4JIRqe7n1KOIDsYZ*whR8>0j97gXi!k1M<#6hP2XOw>MgYL3^X<
z4e?wH8rjgRA{n#Qm8-3ZdrQ(N^q^;57^~VLI1{Nu19}I9bSFe+$WTMpoiv;BO1w+z
zsLSX|XjNp7em;#&frJ_`B8ZtjB%Jn_Y$V_Kih$Rnp@)PH`u#VEq~DaXs0|vdwHryu
zJyQ|qP5eP|GO6^i1Ayqpd;7A>@LbLB^6xorxyxI1l}^9$*K;JOaoaaJR!Jf)LI**y
zw^)48gHJEY_K;J*2cDLH5zEOfZ0VV+hs;j|<IXdA081�ly@k*2(3WLEleNarQ}K
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%0DKehr}RFC`2XTB_<sB5
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
J000000038FvZ??8
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/fontawesome-webfont.svg b/ui/new-ui-samples/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000..1ee89d4
--- /dev/null
+++ b/ui/new-ui-samples/fonts/fontawesome-webfont.svg
@@ -0,0 +1,565 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
+<metadata></metadata>
+<defs>
+<font id="fontawesomeregular" horiz-adv-x="1536" >
+<font-face units-per-em="1792" ascent="1536" descent="-256" />
+<missing-glyph horiz-adv-x="448" />
+<glyph unicode=" " horiz-adv-x="448" />
+<glyph unicode="	" horiz-adv-x="448" />
+<glyph unicode=" " horiz-adv-x="448" />
+<glyph unicode="¨" horiz-adv-x="1792" />
+<glyph unicode="©" horiz-adv-x="1792" />
+<glyph unicode="®" horiz-adv-x="1792" />
+<glyph unicode="´" horiz-adv-x="1792" />
+<glyph unicode="Æ" horiz-adv-x="1792" />
+<glyph unicode="Ø" horiz-adv-x="1792" />
+<glyph unicode=" " horiz-adv-x="768" />
+<glyph unicode=" " horiz-adv-x="1537" />
+<glyph unicode=" " horiz-adv-x="768" />
+<glyph unicode=" " horiz-adv-x="1537" />
+<glyph unicode=" " horiz-adv-x="512" />
+<glyph unicode=" " horiz-adv-x="384" />
+<glyph unicode=" " horiz-adv-x="256" />
+<glyph unicode=" " horiz-adv-x="256" />
+<glyph unicode=" " horiz-adv-x="192" />
+<glyph unicode=" " horiz-adv-x="307" />
+<glyph unicode=" " horiz-adv-x="85" />
+<glyph unicode=" " horiz-adv-x="307" />
+<glyph unicode=" " horiz-adv-x="384" />
+<glyph unicode="™" horiz-adv-x="1792" />
+<glyph unicode="∞" horiz-adv-x="1792" />
+<glyph unicode="≠" horiz-adv-x="1792" />
+<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
+<glyph unicode="" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+<glyph unicode="" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
+<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+<glyph unicode="" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z " />
+<glyph unicode="" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
+<glyph unicode="" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
+<glyph unicode="" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+<glyph unicode="" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
+<glyph unicode="" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+<glyph unicode="" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+<glyph unicode="" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+<glyph unicode="" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+<glyph unicode="" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
+<glyph unicode="" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57 q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -4 -0.5 -13t-0.5 -13q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5 q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
+<glyph unicode="" horiz-adv-x="1408" d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142 q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5 t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68.5 -0.5t67.5 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5 t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
+<glyph unicode="" horiz-adv-x="1024" d="M0 -126l17 85q6 2 81.5 21.5t111.5 37.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5 q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2 t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5 q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
+<glyph unicode="" d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1 t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5 t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49 t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
+<glyph unicode="" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
+<glyph unicode="" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+<glyph unicode="" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+<glyph unicode="" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
+<glyph unicode="" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
+<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
+<glyph unicode="" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+<glyph unicode="" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+<glyph unicode="" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
+<glyph unicode="" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+<glyph unicode="" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+<glyph unicode="" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+<glyph unicode="" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+<glyph unicode="" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
+<glyph unicode="" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+<glyph unicode="" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
+<glyph unicode="" horiz-adv-x="1664" d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45 t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+<glyph unicode="" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="" horiz-adv-x="2048" d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
+<glyph unicode="" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960z" />
+<glyph unicode="" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+<glyph unicode="" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+<glyph unicode="" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+<glyph unicode="" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
+<glyph unicode="" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
+<glyph unicode="" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+<glyph unicode="" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+<glyph unicode="" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
+<glyph unicode="" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+<glyph unicode="" horiz-adv-x="1024" d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
+<glyph unicode="" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
+<glyph unicode="" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+<glyph unicode="" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5 t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+<glyph unicode="" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+<glyph unicode="" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+<glyph unicode="" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
+<glyph unicode="" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
+<glyph unicode="" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
+<glyph unicode="" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " />
+<glyph unicode="" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " />
+<glyph unicode="" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
+<glyph unicode="" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" />
+<glyph unicode="" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
+<glyph unicode="" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
+<glyph unicode="" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
+<glyph unicode="" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+<glyph unicode="" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
+<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
+<glyph unicode="" d="M829 318q0 -76 -58.5 -112.5t-139.5 -36.5q-41 0 -80.5 9.5t-75.5 28.5t-58 53t-22 78q0 46 25 80t65.5 51.5t82 25t84.5 7.5q20 0 31 -2q2 -1 23 -16.5t26 -19t23 -18t24.5 -22t19 -22.5t17 -26t9 -26.5t4.5 -31.5zM755 863q0 -60 -33 -99.5t-92 -39.5q-53 0 -93 42.5 t-57.5 96.5t-17.5 106q0 61 32 104t92 43q53 0 93.5 -45t58 -101t17.5 -107zM861 1120l88 64h-265q-85 0 -161 -32t-127.5 -98t-51.5 -153q0 -93 64.5 -154.5t158.5 -61.5q22 0 43 3q-13 -29 -13 -54q0 -44 40 -94q-175 -12 -257 -63q-47 -29 -75.5 -73t-28.5 -95 q0 -43 18.5 -77.5t48.5 -56.5t69 -37t77.5 -21t76.5 -6q60 0 120.5 15.5t113.5 46t86 82.5t33 117q0 49 -20 89.5t-49 66.5t-58 47.5t-49 44t-20 44.5t15.5 42.5t37.5 39.5t44 42t37.5 59.5t15.5 82.5q0 60 -22.5 99.5t-72.5 90.5h83zM1152 672h128v64h-128v128h-64v-128 h-128v-64h128v-160h64v160zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M735 740q0 -36 32 -70.5t77.5 -68t90.5 -73.5t77 -104t32 -142q0 -90 -48 -173q-72 -122 -211 -179.5t-298 -57.5q-132 0 -246.5 41.5t-171.5 137.5q-37 60 -37 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 42 -47.5 74t-15.5 73q0 36 21 85q-46 -4 -68 -4 q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q77 66 182.5 98t217.5 32h418l-138 -88h-131q74 -63 112 -133t38 -160q0 -72 -24.5 -129.5t-59 -93t-69.5 -65t-59.5 -61.5t-24.5 -66zM589 836q38 0 78 16.5t66 43.5q53 57 53 159q0 58 -17 125t-48.5 129.5 t-84.5 103.5t-117 41q-42 0 -82.5 -19.5t-65.5 -52.5q-47 -59 -47 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26zM591 -37q58 0 111.5 13t99 39t73 73t27.5 109q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -48 2 q-53 0 -105 -7t-107.5 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -70 35 -123.5t91.5 -83t119 -44t127.5 -14.5zM1401 839h213v-108h-213v-219h-105v219h-212v108h212v217h105v-217z" />
+<glyph unicode="" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
+<glyph unicode="" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
+<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
+<glyph unicode="" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
+<glyph unicode="" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" />
+<glyph unicode="" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
+<glyph unicode="" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" />
+<glyph unicode="" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5 t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704 q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" />
+<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" />
+<glyph unicode="" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+<glyph unicode="" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
+<glyph unicode="" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
+<glyph unicode="" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
+<glyph unicode="" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
+<glyph unicode="" horiz-adv-x="1792" d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5 t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5 q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" />
+<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
+<glyph unicode="" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
+<glyph unicode="" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+<glyph unicode="" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+<glyph unicode="" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" />
+<glyph unicode="" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+<glyph unicode="" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
+<glyph unicode="" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
+<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" />
+<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" />
+<glyph unicode="" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
+<glyph unicode="" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
+<glyph unicode="" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
+<glyph unicode="" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
+<glyph unicode="" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
+<glyph unicode="" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" />
+<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
+<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
+<glyph unicode="" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
+<glyph unicode="" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
+<glyph unicode="" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" />
+<glyph unicode="" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
+<glyph unicode="" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
+<glyph unicode="" d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" />
+<glyph unicode="" d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" />
+<glyph unicode="" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
+<glyph unicode="" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
+<glyph unicode="" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
+<glyph unicode="" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
+<glyph unicode="" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
+<glyph unicode="" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" />
+<glyph unicode="" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
+<glyph unicode="" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
+<glyph unicode="" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" />
+<glyph unicode="" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" />
+<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
+<glyph unicode="" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
+<glyph unicode="" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1024" d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14 q78 2 134 29z" />
+<glyph unicode="" d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
+<glyph unicode="" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
+<glyph unicode="" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
+<glyph unicode="" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
+<glyph unicode="" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
+<glyph unicode="" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324 l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" />
+<glyph unicode="" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
+<glyph unicode="" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
+<glyph unicode="" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " />
+<glyph unicode="" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
+<glyph unicode="" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237 q104 139 172.5 292.5t82.5 226.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="2176" d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40 t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29 q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9 q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102 t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" />
+<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69 q-46 32 -141.5 92.5t-142.5 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13 t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5 t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21 t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286 t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273 t273 -182.5t331.5 -68z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" />
+<glyph unicode="" horiz-adv-x="2048" d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64 q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
+<glyph unicode="" horiz-adv-x="2304" d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433 q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
+<glyph unicode="" d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q43 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0 q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
+<glyph unicode="" horiz-adv-x="1280" d="M981 197q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -49 2q-53 0 -104.5 -7t-107 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -56 23.5 -102t61 -75.5t87 -50t100 -29t101.5 -8.5q58 0 111.5 13t99 39t73 73t27.5 109zM864 1055 q0 59 -17 125.5t-48 129t-84 103.5t-117 41q-42 0 -82.5 -19.5t-66.5 -52.5q-46 -59 -46 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26q37 0 77.5 16.5t65.5 43.5q53 56 53 159zM752 1536h417l-137 -88h-132q75 -63 113 -133t38 -160q0 -72 -24.5 -129.5 t-59.5 -93t-69.5 -65t-59 -61.5t-24.5 -66q0 -36 32 -70.5t77 -68t90.5 -73.5t77.5 -104t32 -142q0 -91 -49 -173q-71 -122 -209.5 -179.5t-298.5 -57.5q-132 0 -246.5 41.5t-172.5 137.5q-36 59 -36 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 41 -47.5 73.5 t-15.5 73.5q0 40 21 85q-46 -4 -68 -4q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q76 66 182 98t218 32z" />
+<glyph unicode="" horiz-adv-x="2304" d="M1509 107q0 -14 -12 -29q-52 -59 -147.5 -83t-196.5 -24q-252 0 -346 107q-12 15 -12 29q0 17 12 29.5t29 12.5q15 0 30 -12q58 -49 125.5 -66t159.5 -17t160 17t127 66q15 12 30 12q17 0 29 -12.5t12 -29.5zM978 498q0 -61 -43 -104t-104 -43q-60 0 -104.5 43.5 t-44.5 103.5q0 61 44 105t105 44t104 -44t43 -105zM1622 498q0 -61 -43 -104t-104 -43q-60 0 -104.5 43.5t-44.5 103.5q0 61 44 105t105 44t104 -44t43 -105zM415 793q-39 27 -88 27q-66 0 -113 -47t-47 -113q0 -72 54 -121q53 141 194 254zM2020 382q0 222 -249 387 q-128 85 -291.5 126.5t-331.5 41.5t-331.5 -41.5t-292.5 -126.5q-249 -165 -249 -387t249 -387q129 -85 292.5 -126.5t331.5 -41.5t331.5 41.5t291.5 126.5q249 165 249 387zM2137 660q0 66 -47 113t-113 47q-50 0 -93 -30q140 -114 192 -256q61 48 61 126zM1993 1335 q0 49 -34.5 83.5t-82.5 34.5q-49 0 -83.5 -34.5t-34.5 -83.5q0 -48 34.5 -82.5t83.5 -34.5q48 0 82.5 34.5t34.5 82.5zM2220 660q0 -65 -33 -122t-89 -90q5 -35 5 -66q0 -139 -79 -255.5t-208 -201.5q-140 -92 -313.5 -136.5t-354.5 -44.5t-355 44.5t-314 136.5 q-129 85 -208 201.5t-79 255.5q0 36 6 71q-53 33 -83.5 88.5t-30.5 118.5q0 100 71 171.5t172 71.5q91 0 159 -60q265 170 638 177l144 456q10 29 40 29q24 0 384 -90q24 55 74 88t110 33q82 0 141 -59t59 -142t-59 -141.5t-141 -58.5q-83 0 -141.5 58.5t-59.5 140.5 l-339 80l-125 -395q349 -15 603 -179q71 63 163 63q101 0 172 -71.5t71 -171.5z" />
+<glyph unicode="" d="M950 393q7 7 17.5 7t17.5 -7t7 -18t-7 -18q-65 -64 -208 -64h-1h-1q-143 0 -207 64q-8 7 -8 18t8 18q7 7 17.5 7t17.5 -7q49 -51 172 -51h1h1q122 0 173 51zM671 613q0 -37 -26 -64t-63 -27t-63 27t-26 64t26 63t63 26t63 -26t26 -63zM1214 1049q-29 0 -50 21t-21 50 q0 30 21 51t50 21q30 0 51 -21t21 -51q0 -29 -21 -50t-51 -21zM1216 1408q132 0 226 -94t94 -227v-894q0 -133 -94 -227t-226 -94h-896q-132 0 -226 94t-94 227v894q0 133 94 227t226 94h896zM1321 596q35 14 57 45.5t22 70.5q0 51 -36 87.5t-87 36.5q-60 0 -98 -48 q-151 107 -375 115l83 265l206 -49q1 -50 36.5 -85t84.5 -35q50 0 86 35.5t36 85.5t-36 86t-86 36q-36 0 -66 -20.5t-45 -53.5l-227 54q-9 2 -17.5 -2.5t-11.5 -14.5l-95 -302q-224 -4 -381 -113q-36 43 -93 43q-51 0 -87 -36.5t-36 -87.5q0 -37 19.5 -67.5t52.5 -45.5 q-7 -25 -7 -54q0 -98 74 -181.5t201.5 -132t278.5 -48.5q150 0 277.5 48.5t201.5 132t74 181.5q0 27 -6 54zM971 702q37 0 63 -26t26 -63t-26 -64t-63 -27t-63 27t-26 64t26 63t63 26z" />
+<glyph unicode="" d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150 v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103 t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328 v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" />
+<glyph unicode="" d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123 v-369h123z" />
+<glyph unicode="" d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101 v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="2038" d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14 q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24 q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33 q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5 t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43 q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5 t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13 t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" />
+<glyph unicode="" d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10 q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14 q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14 t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44 q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" />
+<glyph unicode="" d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5 t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5 q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126 t135.5 51q85 0 145 -60.5t60 -145.5z" />
+<glyph unicode="" d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5 q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28 q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11 q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q106 35 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5 q20 0 20 -21v-418z" />
+<glyph unicode="" horiz-adv-x="1792" d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48 l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23 t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128 q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128 q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" />
+<glyph unicode="" d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9 t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9 t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9 t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68t68 28t68 -28l228 -228h368l228 228q28 28 68 28t68 -28t28 -68t-28 -68zM864 1152q0 -93 -65.5 -158.5 t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5 q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819 q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5 t100.5 134t141.5 55.5z" />
+<glyph unicode="" horiz-adv-x="768" d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z " />
+<glyph unicode="" horiz-adv-x="2304" d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67 t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-5 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70 v-400l434 -186q36 -16 57 -48t21 -70z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658 q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204 q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" />
+<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5 t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217 t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5 q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89 q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" />
+<glyph unicode="" d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5 q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5 q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z " />
+<glyph unicode="" horiz-adv-x="1792" d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188 l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5 t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1 q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" />
+<glyph unicode="" horiz-adv-x="2048" d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384 q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5 l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5 t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" />
+<glyph unicode="" d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384 q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" />
+<glyph unicode="" d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64 q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37 q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" />
+<glyph unicode="" horiz-adv-x="2304" d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11 q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245 q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785 l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242 q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236q0 -11 -8 -19 t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786q-13 2 -22 11t-9 22v899 q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" />
+<glyph unicode="" d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127 t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5 t-103 128v128q0 69 103 128t280 93.5t385 34.5z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197 q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8 q-1 1 -1 2t-0.5 1.5t-0.5 1.5q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4l-3 21q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5t-3.5 -21.5l-4 -21h-4l-2 21 q-2 26 -7 46l-99 438h90v107h-300z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107 h-290v-107h68l189 -272l-194 -283h-68z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" />
+<glyph unicode="" d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400 v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79 q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5 q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243 l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" />
+<glyph unicode="" d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406 q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" />
+<glyph unicode="" horiz-adv-x="1792" d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546 q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94 q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55 t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97q14 -16 29.5 -34t34.5 -40t29 -34q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5 t-85 -189.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194 q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5 t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348q0 222 101 414.5t276.5 317t390.5 155.5v-260q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 q0 230 -145.5 406t-366.5 221v260q215 -31 390.5 -155.5t276.5 -317t101 -414.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170 t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136 q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
+<glyph unicode="" horiz-adv-x="1792" d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251 l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162 q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33 q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5 t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="" d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85 q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392 q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072 q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58 q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47 q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171 v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" />
+<glyph unicode="" d="M825 547l343 588h-150q-21 -39 -63.5 -118.5t-68 -128.5t-59.5 -118.5t-60 -128.5h-3q-21 48 -44.5 97t-52 105.5t-46.5 92t-54 104.5t-49 95h-150l323 -589v-435h134v436zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5 t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153 t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5 q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20 t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5 t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" />
+<glyph unicode="" horiz-adv-x="2048" d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25 q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5 q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109 q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137 l863 639l-478 -797z" />
+<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23 t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" />
+<glyph unicode="" d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15 t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2 t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160 q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5 q0 -26 -12 -48t-36 -22z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179 q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" />
+<glyph unicode="" d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256 q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
+<glyph unicode="" d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5 t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" />
+<glyph unicode="" d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5 t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5 t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91 q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9 t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323 l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" />
+<glyph unicode="" horiz-adv-x="1792" d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23 zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5 t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" />
+<glyph unicode="" horiz-adv-x="1792" d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1755 1083q37 -37 37 -90t-37 -91l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234l401 400 q38 37 91 37t90 -37z" />
+<glyph unicode="" horiz-adv-x="1792" d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5 t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q3 -2 11 -7 t11 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" />
+<glyph unicode="" horiz-adv-x="1792" d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
+<glyph unicode="" d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36 q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q70 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5 t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87 q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19 t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121 q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
+<glyph unicode="" horiz-adv-x="1792" d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5 t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38 h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1112 1090q0 159 -237 159h-70q-32 0 -59.5 -21.5t-34.5 -52.5l-63 -276q-2 -5 -2 -16q0 -24 17 -39.5t41 -15.5h53q69 0 128.5 13t112.5 41t83.5 81.5t30.5 126.5zM1716 938q0 -265 -220 -428q-219 -161 -612 -161h-61q-32 0 -59 -21.5t-34 -52.5l-73 -316 q-8 -36 -40.5 -61.5t-69.5 -25.5h-213q-31 0 -53 20t-22 51q0 10 13 65h151q34 0 64 23.5t38 56.5l73 316q8 33 37.5 57t63.5 24h61q390 0 607 160t217 421q0 129 -51 207q183 -92 183 -335zM1533 1123q0 -264 -221 -428q-218 -161 -612 -161h-60q-32 0 -59.5 -22t-34.5 -53 l-73 -315q-8 -36 -40 -61.5t-69 -25.5h-214q-31 0 -52.5 19.5t-21.5 51.5q0 8 2 20l300 1301q8 36 40.5 61.5t69.5 25.5h444q68 0 125 -4t120.5 -15t113.5 -30t96.5 -50.5t77.5 -74t49.5 -103.5t18.5 -136z" />
+<glyph unicode="" horiz-adv-x="1792" d="M602 949q19 -61 31 -123.5t17 -141.5t-14 -159t-62 -145q-21 81 -67 157t-95.5 127t-99 90.5t-78.5 57.5t-33 19q-62 34 -81.5 100t14.5 128t101 81.5t129 -14.5q138 -83 238 -177zM927 1236q11 -25 20.5 -46t36.5 -100.5t42.5 -150.5t25.5 -179.5t0 -205.5t-47.5 -209.5 t-105.5 -208.5q-51 -72 -138 -72q-54 0 -98 31q-57 40 -69 109t28 127q60 85 81 195t13 199.5t-32 180.5t-39 128t-22 52q-31 63 -8.5 129.5t85.5 97.5q34 17 75 17q47 0 88.5 -25t63.5 -69zM1248 567q-17 -160 -72 -311q-17 131 -63 246q25 174 -5 361q-27 178 -94 342 q114 -90 212 -211q9 -37 15 -80q26 -179 7 -347zM1520 1440q9 -17 23.5 -49.5t43.5 -117.5t50.5 -178t34 -227.5t5 -269t-47 -300t-112.5 -323.5q-22 -48 -66 -75.5t-95 -27.5q-39 0 -74 16q-67 31 -92.5 100t4.5 136q58 126 90 257.5t37.5 239.5t-3.5 213.5t-26.5 180.5 t-38.5 138.5t-32.5 90t-15.5 32.5q-34 65 -11.5 135.5t87.5 104.5q37 20 81 20q49 0 91.5 -25.5t66.5 -70.5z" />
+<glyph unicode="" horiz-adv-x="2304" d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27 q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128 q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="2304" d="M671 603h-13q-47 0 -47 -32q0 -22 20 -22q17 0 28 15t12 39zM1066 639h62v3q1 4 0.5 6.5t-1 7t-2 8t-4.5 6.5t-7.5 5t-11.5 2q-28 0 -36 -38zM1606 603h-12q-48 0 -48 -32q0 -22 20 -22q17 0 28 15t12 39zM1925 629q0 41 -30 41q-19 0 -31 -20t-12 -51q0 -42 28 -42 q20 0 32.5 20t12.5 52zM480 770h87l-44 -262h-56l32 201l-71 -201h-39l-4 200l-34 -200h-53l44 262h81l2 -163zM733 663q0 -6 -4 -42q-16 -101 -17 -113h-47l1 22q-20 -26 -58 -26q-23 0 -37.5 16t-14.5 42q0 39 26 60.5t73 21.5q14 0 23 -1q0 3 0.5 5.5t1 4.5t0.5 3 q0 20 -36 20q-29 0 -59 -10q0 4 7 48q38 11 67 11q74 0 74 -62zM889 721l-8 -49q-22 3 -41 3q-27 0 -27 -17q0 -8 4.5 -12t21.5 -11q40 -19 40 -60q0 -72 -87 -71q-34 0 -58 6q0 2 7 49q29 -8 51 -8q32 0 32 19q0 7 -4.5 11.5t-21.5 12.5q-43 20 -43 59q0 72 84 72 q30 0 50 -4zM977 721h28l-7 -52h-29q-2 -17 -6.5 -40.5t-7 -38.5t-2.5 -18q0 -16 19 -16q8 0 16 2l-8 -47q-21 -7 -40 -7q-43 0 -45 47q0 12 8 56q3 20 25 146h55zM1180 648q0 -23 -7 -52h-111q-3 -22 10 -33t38 -11q30 0 58 14l-9 -54q-30 -8 -57 -8q-95 0 -95 95 q0 55 27.5 90.5t69.5 35.5q35 0 55.5 -21t20.5 -56zM1319 722q-13 -23 -22 -62q-22 2 -31 -24t-25 -128h-56l3 14q22 130 29 199h51l-3 -33q14 21 25.5 29.5t28.5 4.5zM1506 763l-9 -57q-28 14 -50 14q-31 0 -51 -27.5t-20 -70.5q0 -30 13.5 -47t38.5 -17q21 0 48 13 l-10 -59q-28 -8 -50 -8q-45 0 -71.5 30.5t-26.5 82.5q0 70 35.5 114.5t91.5 44.5q26 0 61 -13zM1668 663q0 -18 -4 -42q-13 -79 -17 -113h-46l1 22q-20 -26 -59 -26q-23 0 -37 16t-14 42q0 39 25.5 60.5t72.5 21.5q15 0 23 -1q2 7 2 13q0 20 -36 20q-29 0 -59 -10q0 4 8 48 q38 11 67 11q73 0 73 -62zM1809 722q-14 -24 -21 -62q-23 2 -31.5 -23t-25.5 -129h-56l3 14q19 104 29 199h52q0 -11 -4 -33q15 21 26.5 29.5t27.5 4.5zM1950 770h56l-43 -262h-53l3 19q-23 -23 -52 -23q-31 0 -49.5 24t-18.5 64q0 53 27.5 92t64.5 39q31 0 53 -29z M2061 640q0 148 -72.5 273t-198 198t-273.5 73q-181 0 -328 -110q127 -116 171 -284h-50q-44 150 -158 253q-114 -103 -158 -253h-50q44 168 171 284q-147 110 -328 110q-148 0 -273.5 -73t-198 -198t-72.5 -273t72.5 -273t198 -198t273.5 -73q181 0 328 110 q-120 111 -165 264h50q46 -138 152 -233q106 95 152 233h50q-45 -153 -165 -264q147 -110 328 -110q148 0 273.5 73t198 198t72.5 273zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="2304" d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42 q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604 v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569 q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73 t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
+<glyph unicode="" horiz-adv-x="2304" d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260 l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279 v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040 q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168 q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5 t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21 h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5 t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
+<glyph unicode="" horiz-adv-x="2304" d="M322 689h-15q-19 0 -19 18q0 28 19 85q5 15 15 19.5t28 4.5q77 0 77 -49q0 -41 -30.5 -59.5t-74.5 -18.5zM664 528q-47 0 -47 29q0 62 123 62l3 -3q-5 -88 -79 -88zM1438 687h-15q-19 0 -19 19q0 28 19 85q5 15 14.5 19t28.5 4q77 0 77 -49q0 -41 -30.5 -59.5 t-74.5 -18.5zM1780 527q-47 0 -47 30q0 62 123 62l3 -3q-5 -89 -79 -89zM373 894h-128q-8 0 -14.5 -4t-8.5 -7.5t-7 -12.5q-3 -7 -45 -190t-42 -192q0 -7 5.5 -12.5t13.5 -5.5h62q25 0 32.5 34.5l15 69t32.5 34.5q47 0 87.5 7.5t80.5 24.5t63.5 52.5t23.5 84.5 q0 36 -14.5 61t-41 36.5t-53.5 15.5t-62 4zM719 798q-38 0 -74 -6q-2 0 -8.5 -1t-9 -1.5l-7.5 -1.5t-7.5 -2t-6.5 -3t-6.5 -4t-5 -5t-4.5 -7t-4 -9q-9 -29 -9 -39t9 -10q5 0 21.5 5t19.5 6q30 8 58 8q74 0 74 -36q0 -11 -10 -14q-8 -2 -18 -3t-21.5 -1.5t-17.5 -1.5 q-38 -4 -64.5 -10t-56.5 -19.5t-45.5 -39t-15.5 -62.5q0 -38 26 -59.5t64 -21.5q24 0 45.5 6.5t33 13t38.5 23.5q-3 -7 -3 -15t5.5 -13.5t12.5 -5.5h56q1 1 7 3.5t7.5 3.5t5 3.5t5 5.5t2.5 8l45 194q4 13 4 30q0 81 -145 81zM1247 793h-74q-22 0 -39 -23q-5 -7 -29.5 -51 t-46.5 -81.5t-26 -38.5l-5 4q0 77 -27 166q-1 5 -3.5 8.5t-6 6.5t-6.5 5t-8.5 3t-8.5 1.5t-9.5 1t-9 0.5h-10h-8.5q-38 0 -38 -21l1 -5q5 -53 25 -151t25 -143q2 -16 2 -24q0 -19 -30.5 -61.5t-30.5 -58.5q0 -13 40 -13q61 0 76 25l245 415q10 20 10 26q0 9 -8 9zM1489 892 h-129q-18 0 -29 -23q-6 -13 -46.5 -191.5t-40.5 -190.5q0 -20 43 -20h7.5h9h9t9.5 1t8.5 2t8.5 3t6.5 4.5t5.5 6t3 8.5l21 91q2 10 10.5 17t19.5 7q47 0 87.5 7t80.5 24.5t63.5 52.5t23.5 84q0 36 -14.5 61t-41 36.5t-53.5 15.5t-62 4zM1835 798q-26 0 -74 -6 q-38 -6 -48 -16q-7 -8 -11 -19q-8 -24 -8 -39q0 -10 8 -10q1 0 41 12q30 8 58 8q74 0 74 -36q0 -12 -10 -14q-4 -1 -57 -7q-38 -4 -64.5 -10t-56.5 -19.5t-45.5 -39t-15.5 -62.5t26 -58.5t64 -21.5q24 0 45 6t34 13t38 24q-3 -15 -3 -16q0 -5 2 -8.5t6.5 -5.5t8 -3.5 t10.5 -2t9.5 -0.5h9.5h8q42 0 48 25l45 194q3 15 3 31q0 81 -145 81zM2157 889h-55q-25 0 -33 -40q-10 -44 -36.5 -167t-42.5 -190v-5q0 -16 16 -18h1h57q10 0 18.5 6.5t10.5 16.5l83 374h-1l1 5q0 7 -5.5 12.5t-13.5 5.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048 q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="2304" d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109 q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118 q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151 q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31 q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5 l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5 l418 363q10 8 23.5 7t21.5 -11z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128 q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161 q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" />
+<glyph unicode="" horiz-adv-x="1408" d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704 q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167 q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+<glyph unicode="" d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5 t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53 q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24 t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61 t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10 t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5 t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11t55.5 -11t52.5 -38q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5t47 37.5 q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-35 0 -55.5 11t-52.5 38q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38t-58 27 t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448h256v448 h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51 t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" />
+<glyph unicode="" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
+<glyph unicode="" horiz-adv-x="1792" d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9 t9 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20 q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50 t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1 q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" />
+<glyph unicode="" d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73 q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110 q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5 t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5 t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5 t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
+<glyph unicode="" horiz-adv-x="2304" d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94 q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469 q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400 q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" />
+<glyph unicode="" d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5 h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327 q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5 q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" />
+<glyph unicode="" horiz-adv-x="1280" d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q18 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119 t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5 t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14 q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88 q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5 t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206 q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307 t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14 t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" />
+<glyph unicode="" d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5 t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+<glyph unicode="" d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55 q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410 q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" />
+<glyph unicode="" d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" />
+<glyph unicode="" horiz-adv-x="2048" d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335 q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5 q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360q2 0 4.5 -1t5.5 -2.5l5 -2.5l188 199v347l-187 194 q-13 -8 -29 -10zM986 1438h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13 zM552 226h402l64 66l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224 l213 -225zM1023 946l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196 l-48 -227l130 227h-82zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" />
+<glyph unicode="" d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" />
+<glyph unicode="" d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384 q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021 q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25 q209 0 374 -102q172 107 374 102z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101 q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284 q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" />
+<glyph unicode="" d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34 l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114 v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378 v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51 h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5 t-43 -34t-16.5 -53.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832 q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126.5t-103.5 132.5t-108.5 126t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5 t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113 t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5 q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920 q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920 q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="2048" d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20 l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83 q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83 q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314 v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83 q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
+<glyph unicode="" d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14 t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5 q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31 t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" />
+<glyph unicode="" horiz-adv-x="2304" d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5 t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105 l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226 t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" />
+<glyph unicode="" d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12 q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384 q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5 t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221 q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124 t127 -344z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292 q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1280 1504q0 14 9 23t23 9h416q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-419 -420q87 -104 129.5 -236.5t30.5 -276.5q-22 -250 -200.5 -431t-428.5 -206q-163 -17 -314 39.5t-256.5 162t-162 256.5t-39.5 314q25 250 206 428.5 t431 200.5q144 12 276.5 -30.5t236.5 -129.5l419 419h-261q-14 0 -23 9t-9 23v64zM704 -128q117 0 223.5 45.5t184 123t123 184t45.5 223.5t-45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123 t223.5 -45.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5 t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="" d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64 q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64 q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9 t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5 t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23 t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391 q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391 q0 -226 -154 -391q103 -57 218 -57z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230 q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9 t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128 q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -29 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23 t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9 t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5 t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1728 1536q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-229 -230l156 -156q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-156 157l-99 -100q87 -104 129.5 -236.5t30.5 -276.5q-22 -250 -200.5 -431t-428.5 -206q-163 -17 -314 39.5 t-256.5 162t-162 256.5t-39.5 314q25 250 206 428.5t431 200.5q144 12 276.5 -30.5t236.5 -129.5l99 99l-156 156q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l156 -156l229 229h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM1280 448q0 117 -45.5 223.5t-123 184t-184 123 t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22 t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5 t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M2029 685q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-131q-12 -119 -67 -226t-139 -183.5t-196.5 -121.5t-234.5 -45q-180 0 -330.5 91t-234.5 247 t-74 337q8 162 94 300t226.5 219.5t302.5 85.5q166 4 310.5 -71.5t235.5 -208.5t107 -296h131v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM640 128q104 0 198.5 40.5t163.5 109.5t109.5 163.5 t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5 t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" />
+<glyph unicode="" horiz-adv-x="1280" d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5 l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5 q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" />
+<glyph unicode="" d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5 t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233 l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" />
+<glyph unicode="" horiz-adv-x="1792" d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216 q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
+<glyph unicode="" horiz-adv-x="2048" d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5 t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" />
+<glyph unicode="" horiz-adv-x="2048" d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136 q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69 t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" />
+<glyph unicode="" horiz-adv-x="2048" d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704 q-26 0 -45 -19t-19 -45v-384h1152z" />
+<glyph unicode="" d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
+<glyph unicode="" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56 t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
+<glyph unicode="" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47 t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 204v-209h-642v209h134v926h-6l-314 -1135h-243l-310 1135h-8v-926h135v-209h-538v209h69q21 0 43 19.5t22 37.5v881q0 18 -22 40t-43 22h-69v209h672l221 -821h6l223 821h670v-209h-71q-19 0 -41 -22t-22 -40v-881q0 -18 21.5 -37.5t41.5 -19.5h71z" />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" horiz-adv-x="1792" />
+</font>
+</defs></svg>
\ No newline at end of file
diff --git a/ui/new-ui-samples/fonts/fontawesome-webfont.ttf b/ui/new-ui-samples/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..ed9372f8ea0fbaa04f42630a48887e4b38945345
GIT binary patch
literal 122092
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 +|+&Vdls@0SAya!5R?!
ziVniRxeJP4Y;H*nR85uKLQ+b)snu%yXP=4xXp%p*V(|Ms+&!Ts<#?NwEy!5pm*V^D
z-Dg(@-2T08jZHJMJ;tBX$}KEx30j?M*HUJ5Mb<~Bq<Un=C;#_kOHy7e|JdkKcz*Ee
zGj+SopRVQ`_$w~mh%GWcetyk=PCmoouGCU~#iw{&tg$w#Vt=+dES^WdCG*L~+vTBZ
zAGo!&)fce1Ok4#F378B5!>@%FJ=7BOwx*lFd+F$0K&xW1pdHaQkd=Bs^f@3fK$p_V
zG9Hv2&)O0|T2OPy!GKHF0X#SXs4z0Taeg=3QC~5u`}}#6=S3N37Oi2%(w*yCCSSO<
zyLqvN<$urJ`x3fcQz5`fWSUx3WgYwdE#Xz6*&n-Zbw~V+<z1NvUz)w`k*8LVdwSeP
z<1%-Qoq1*VxX!p&v1MLqwQQe%9)DGjOxwDA_9auI&gSp8RBVhi4Q^SZl(`*M$>{iC
zvns#ZXmMIqg)QTL7MZ;K`UR~kCQXi&)xL25g^ye`E2@RW`phY`J}1GhPoTK=wg^jS
zns~aMSW_T9(k<xdp~i6}iL|C;e$i2yXRr1^BI;y2H?p#+i~Roh7p|W?Vf`IZ)m3#@
z(&Espyy6-!4?%puyidtad!xN_Yjp3-mapA#7Ek+XyLH~m?X~4jyDDGIt*UC}>1JEf
z?H?bX?7T1k`f}^KrDwT)O2xQ#Ilv(aC0M;dm(kt|>3YmubBNSoB<_T?25ll$8=6Rh
z5r8U~Rhl9!p)LqJks|QabdX~_-6T^Vh;0oAU<RZWfgAND2!0_g1oCh5wsI015{y%K
zVZnpPz1quhU*LwoWc+;b#fwWbAN;t@@gn9daaV#RwJLkiWob|X3RlyW<(0C>$ux&w
zujJkfnis{aOi@)^-BSrwuIVv;KOM6ud(XYJ%&#%7$o2=~I|BZyc%;FVOGX}x;4i62
z#nhmr3{_xm8B?8h#<mPBu5>BmmRlFiViv2+8B>%c?Q8O1dDL_H+<36jQ)hFz84vhc
zn6)AnaW$~B*0cN8Z{ro=Xh3n4xt!ZC<`EwQQ%qwl3*E+A>3#@s3*(qj!l5yPn88L_
z7(_^#A%s8eICk+?(7#06W3w+ENk(Qvq%6VGX~IBf;(<^An=lx<G}N19P*ep&gkZci
zg=d$TV>=tdS801ZTsp8Wn^&D$b;III8>|cq?v&%ITV+`EV8j&r1NHBD%&}Fg9G&f1
zB@$7x?VS#%Ta^bTS%o@e%vFW1syAZHIppB6k|AF>n>jVk6?IAb!PfQ{9-DjWA@^+k
zw_86a>y;LL{@f*Ps-wd0*uFuG`SGFjxHdW15tQ4;rGts;TFz^$6Twqn6uiqAd4|xe
zmC7B)$|*i7uS3T40ob)v1O`<p684{vD5v5`0@mXqr{O5><>;P*W4}nzfnD?w$^S>~
zHq8}fG)A;rG)l!$Sn7xz$MJu=-DB+&J}N(Yyh}&BbgXe*wD_MM>3?XfKdOym?~iTs
z2)vZSPHFm|8s!g_(~Z>}Q`<=FZEAFyLu2!&g7?z$WABgc>)1S#p!guN_B00#_m7Kv
zYS!sLUQ&AWozhaJ>4D*T*;S`X4*qrcsxnfb<m#y(6MFbDxZ+Gucp!v9dXxExu)zIi
zN8_Z?$@!fwt1$qDM$8JqnTq@e7ze*o6U{y$j*7TanjR@550DuJJszcl|08==(q9RR
zhLihPkoyY~A95t?|8*aGse?i)=t2|KL;q|S`H?8qV48{`Wmv_i(4nL=r%qzZ3VoCy
zVWIgG98|GSMK->Y(R7AGx|D|8$Y*Rmv^}5Qe(2D4-oO12yVqCYaHdH>)ZkV9?A|Af
zcMffTg6;RK&;popG4Lj!uXOmXR7p*^CU}#!X0TKlhJgex3ob?Qws>(WOu#fO7KENG
zx212(mOf?6@f^$caZnQ<h>mJm^z`0R3rNL71-Im3y528}vY6j_f{Hm6JQ6!WmWtg9
zSuIL}$Ac_mlca&eD~G00inpirU`vp-f<kAY+QGAc?MC~&kijzW>SRd~Vw+a|c~y>I
z9kS{9-|9H>D!q;M4fY$o>YtNO8of^@+A^s>CsArsPVNg)DO-q2ec$LE>}P#^Ad`HO
z^*xbF{Rxr|!7B-RS%<u9l$65-e1tV6gx<1gpurBrjr%;)=1y}P_r}>c_7oc@7wjse
z&9euO$5W}etj*s13L9s<V%A--DS^Z_>8%m!=~2pQ=|0jf%lC~@L-#6KQz6HXovb%R
zn`vUze(*aadj+Q>r&Be8qz}Sqr7cN%axzJg!2m!GQzeIC9T8xap{TBa&x=BS9f0@;
zQnXi$bBtG(XjhzjS=8Fx+G2@bcJ3A05|&HES!29C?D2%#<BcqyfYkh%R}A#)m3wZs
zK7RWz&#QtT&3V7P{c-D!=6cos4j9t_W0RyVX)ao2&Zd;YT!z}29|*n#s>uEYggFSu
z66gc+2e}`T#gyxqaGLLcykqOZt-V}|d5y=sF)v%Q<k0p(!2hA`a&}r9j5!<=UA}OL
zj5pSF%K$NJ)?L@jV)<TUKv})o7+4MaxPwvFi)uQ0dH--d`5!%R*0TLjx$g0z8cj2e
zK-P5M;6yDR{t~npsES8dv)Jk=Y5_YfV21Pq;P)G)m16albZw%rmj@R@Rsh9yg`Sb<
zI2`hux=YyC#dOUd604r9?Ynfcv?CCQ&@7<lid~e3oc_qd4x6^6*gIb|;_(OHHgaP1
z_Zf$;+J1%{wkRH(Ei|d2Ru9%rS#<f{XEyc$Wkmce=jXLXzSvK{vqFv3D8*jB>bE(|
zJQgc^&By^?H1yxH$9Oty=T2A6#l5>aCNA$?ylnd9bVwi=6lpE?{YK37cwsd-8d(&k
zmDIB*Pb^_F^k3{##MTuoC`-FLJfk+J4AEQZoZ6h47Wl*9Ps+N>jHP8|m*LEGek)Fw
zmGL#kw~Adfr_#oUr_#Vw+GGoR1<#hTFNg=qj1TZARYLR0z#joUVm@aeC+r14h{VZA
zKxAlRC3Z9p7%uLzqymZ)gGyVjm^5Nhp*5q7F8PNf=uRM`hU$cpbb!S<h*pvGgZ_XP
zRNST{<#8MK=9J_Q{&VI1qu(a_vlIAXx9|&U6EZ0D0S+pH#xjLuB${e#mw)PyMEv>5
zR%OH<Ua_iI`5lqt*@(l>U$ENpD+T8uDA)W-yTz;@GWOkoe+dhgWL$;%PxBg4sI6Ta
ze%s0K<S+OmC%t*{X_|n-j!1s8Xv@x_osbpoCVQ%r+Cq~f`l&55`w4e0^wy7l`6H@j
zOh3)HVKzpp7k#}_y-~fBJSHIF6!eE!qZ^LD9FE7s>Vz;~o3C;PB5Hpm;6y4xFeUaC
zf&0l8j&}GG9ARoXOVFWd6Clwzlas(8_%&lVr)J4)0=%0zmZa%D1iQdQSdZ?L-$IrK
zBjrccQ+#%(rkP_G9`0Hg@>A*|5I1_O>1WW;@fT?5FfcTH7&?Lwbl8Ec#m-+435*<W
zIwJf9n{~MUBAlF5KfQ)jsRTWy#fx^zH(H>$5<SO3wVeL#XvUK?OlF7qlQwH<V`!X)
z*Tm?yjBUhle@ovxy1!#ygwFDz6W9}URRf$rA?Y`ff|zqwLQGL-T^PjzjL{lXUl^I9
z6hEUl#F6})(6~y}qahs4@qBRTLFGyHO;Ajdm4{5rag*v7TcvVu{%!8}`=6wlhycpp
zMB+)m^3(j=`L{*VyoBpi#;kKC>b$5>rzv_XF+v9zD9cb4RpaM=)FLWJ1^ixm1HFmk
zzgd6^(pU_`B<T(%Y;4#KKv|kQA~t;TDT0xh=~x6q!RAp0drCibSqwh)oJK)pXfRlI
z457rcIg$*R!!-IC);NZA8fh2V5*6B2Y|Y7SDDeY2<y%egIO#2={cjX{)7J5fOa&m+
ztgUeiVHrptvKi3DG1LMJI+Dp@Q!J$omFxY_JmdGT^jAbE5vf4(<SXo!F(bkr{;=YO
z3fPg;j!jtDcu{LXhJ&mWZ3R9cavZjDBZif#;#-AzH#Ynh$5k+?-biia)xN<oEs|@Z
zJ~Z99<hSUJFA7HH0D!65H-AhUNat9@Ws{}ZpqK$U1T;k-GzO_Hm;()DAzEV^g<wyH
zIJ;N^`!BQ{iIP^5`Dec{aU`qY%b#5F*PJ`NOLusznRrd>gavgIrd=XRG{$2!ldH>F
zZcOX@ickCa7tT4b^k-$h3pK~gva;5AswouRHX}im`=|PS!HMJNPaV@GX{1lYdrdC(
zsbEHAHXCF_VM#Q%!AxRQmq%G9N-$F{8ngEH3L`!=uB3zfq{jETd|aZENErR%<dg42
z#!P;5Y<ox6$awezN+W(Ckn#@8XrMj-ZG^@HaYKWIK{st;V6QF8;Qnw~JO?Vtl<PqE
zFkBYTp$_Hqn`!B8jy-y*SWcHd8XJ3oU6qR5mHhLg;{Kz5PToZijJd!~3~`F5hpS`b
zfGAG$c%eSRha>YvxN8bVKsfz~13CUchHa`O3fzesD>u+~Ivd1!`)v{1o;^71x6v7=
zQTdljtS(P7DrMh0^+Uszlz*6!;;6n9?54@dh=^IU2c~8va9RV(dySQ}ynp5QUxYL4
z5OKW7zw^VI%zuh!;Ls~dibv>KGPM2>6YAkH{}?<0eZo%|CIndFU0fA5l>jQ>Mbkf~
z;ODKzR^(lK`Y!+8{<8<m`Co5+0&KJzgPGIs;1BaVGI#<?=wOvE@mn6<op+zRV*d}G
z<L|E8KX~6`P*A>L{8l)^RI$mdl2Vvv*rjDaM=g+I$N+k4<JkLv`-EJL?6up3_yJTA
zv`?Bey)~a@$y90qnIPo1!Gz*=(uXWarHo(m{?_TROvx-TewDa1(Sv*YgrUOTRBC=|
zBMOjN8E{=j?JvBKXf5(BA#MWH0<9KUWQmCq9HH8u%x_D#wxm%%OXjn!)2Fxce&g48
zf2uW;;<qPxwhcv+$pv@;OD@RZ?JR}2<AMCPT6$jwxOIV=mEy=0J2p&unHzthn?Uy3
z0@Or)TE7xiiH@KuetT_u8@ih0nGb0TwUyQqz4IBoGgtKeE)FK(kGeHX02am;FQs0>
zR%IJTiV`f<(+UqHmZI@nkmUWix0S||WIPL!N#j=-Yq*<YE>h?_-b&+|1I^h_egXwv
zE&~MXf(J=h=zYmXfv4eU)$WV8pa~|wW)MR*u<jEdzhYfit*Uz69*6F5%Qt2o<KG(q
zSH>lH!23~($Pq_%+gaQC*0;~pYOU^o*BZf2S^4CPyV<=&iJ(*|4G<<8h*|<fG0X#i
zTocQW_yWv(k?tb&f|-ZV?XNcDD|h2%1xwhwSr0JBm2wzOx!d>(rENCWLnX)nm%SYk
z<%bP&sXU6$6Lz@t0Ln+i11N&#fJSo;-J$+fy$Vt<qR~#%j?=YUSn-{rA*X3K&z`a&
z{N7VGo7#tYEZCzF@QU>~46MT|WEg-jVk+!4jNXpAemE5L3J-%mkzuggkjZoQq^qKQ
z;ayx(VIU%SDDkf18Z_%Yk);Y1R3d5;^}?2wNt>~z{D5!r;H!f3g$srg!_8DR({1Mr
zXh^4lbPB7(?M=491_VBSs`~w=ibytcag*`BfOO;iri+oUXks=b&0EZ7E&^NOmhnD&
z6Hi=*+aEVx65iG=AIBq?;r@dU7VoeYx?{XFe5Z78BOV2kLs)Ran$h%>Au7F;){_0L
zX}SO!)o&8&d^|bG92q8$_?LW8p9BIp__)tzbG_!W*$@)s>n;q*a4BeZ@zjaGJn!-c
zoX<N0es&Sx?9eP0&5^&?<_6aaQ6~NY_h#W=5CXS6pQt1+><poo2!XO_V=Y3%90<V$
zg-Ga@X47X3Lv1qApfF6Cxrls%#YK`dvD{$P+Gq49qW#f?(edpYB8`|y{)>*f#>n;G
zs$)-spz5eQfr;%E)YR9`yXBViHcidtrf#AX`<l!5l@9hwf4?!Vqr9R*UjJxy$KnqB
zRX>VaK~eRZkOp&ztjl-Hv$rgK;)#Vg`G^N9=rDqatUz*Qn2|s#h#rA-CCf7yo4_|k
zlS~;P2rU;(Q$Q_|rEC|_lQ2Ogb2SBjP?~di(nLOIy!N}DSoCGViZy{fO#f<xrvgpJ
zpMU-8z<qn&`@^2`ja`*h4FNB=$a2^Gt|+&zc;NZX?O*xwm+nv7(t(<ES$bN`Bg3xg
zf<w0k%Yd!Q*7&d6z_jz%4H)0reCc>~ezqqYic~5t&8gQeY@6&?X4+aZSN-IX?FpY-
zwx*M|v^Q*By=$xB^RR9pH*>>6R3aZenhtaKf{l1UAl-CW2sl+>@Nl|HAzjjlW^G8C
zcxG?!nG<IyY~{W^E8ERnw`}J6gzkV2iht3r^Ont>yQ-x($5{RHtv7vcUGd7An+sQH
z$U(o+xGOpMW5p#3l9NiqNJJ9yaQJZo*u`AXL^Ojb1DpWIX}C|;32iuswcNosrkXKf
zroM6TW9%OG3cDx&Of+!)m!oyjoo5H+O9T6ibpBl<y)O{h$9@U>@L%rZ*|)ZBxaR8=
zbmr^VY}oeJOMm?<pHvt9^7VmeG;sD#<0ms~-!%TrLT}X0tbK!pj6c0Wa`T}+v~>V<
zPdPlTW=LlN^4noS*9sdQ-`I90shuW80#XCT%ofL+g-0pL`2FC8V19&h<aYuPgA-~y
z2yNcDXvI48<<or6NH5r}>=I-3#)&qcW2a}_UB}J|1U}AQV9s+_wb^`XBvBQYJ;{e}
zW@Q%EA4tzWU~K!%{8!i|*If1KY3Kjjr0?A^t$!2s(=hmDBi;Oq&Y#OW4xj6pjcON6
z|HYo_p6Wj{k9V!d0lyk<GbY^rMl*Z=j9s&9vP(Yq{4U=+&wcr-E!i)D)xg{hy^X!w
zFW@Oo5QSa;BXE)o6VG7_PvBT^6w-)N7g)(@f6eYJU?rz4)h4}DYK}`aQ@qJqS@L$y
z?tB!8$?u{A+r@t1(Cv2JWwhIzPWkEMxoOiXYicUVbhkQ@kSJo4r0!GqN$~jt`gS9j
zO<_KurV<K`Mn)$8<O~GBs%CKJ7wNEyC9n35%l16lr+Ra`Ly_H@@!v*1qdI%7F7CD-
z9<+02Lt5kCVzQyQWNy#7JpAK*J^gBLYk$w9`MG{quf}928#MCY^16Dh+&*|%_c$GE
ztt<mCtFQ$g!8xb;NMBEub~1{Ygt0u?4w|gF$pZRJ=_*MI$4x8l<d`$0+rqkATpt$R
z6!0<b70b7exmV&32Ci_J-HQ*WfS7Y|<{MzWa3$(D`o^aDfViHcBMik+5=P^q<cLEJ
z$_!tJsV36UG!~HsLv)hk<hR}m*BR)8n0dk#QIf^7R2_UsSZq*YG1hOMah1ndjI@=;
z0FHy77e&y}7)lIZUU)*Hs#P3&Nhi~59(yEnf5m!M2f)R&!!A^UuXvM!J+#375~d+K
zA6aMuo3wOWdzI2cBSX}%Z}?^$TLG4^3*7baqhz`U^W@>u{K3wJp{kaa1>**2=NdS!
zYVhMDeRgbP$I8~8=I++X6;ldD$Q!!o>PJO}qzQ{U8_Hr$mGv{Gt~hVUOtX$L7mH6R
z)vKR5qkV3Dr4W-0x}f&%huXWJF<EzoYnrB}&-;qFj|~y7lk)arfvV1FO<kM2SMFGR
zc1v75JnD*B9OK3$$uKZ(l0>8_2ojL!nhG42N@r4SDcS?ob_$Kq#jt5Ax^&dI@V(g!
zUNDYNobIhqWR=<AKd4U#)|XY;AA07_qpatv@3BwHO~$8;Uw+o|Z!=sLSS&Kdqqt=k
zw`9T{O>^tcW!iz8-~QbC&zkdwm7?Y#`DzhfyupB=ii$fKBpp>UqIebaA1%%QuJNcb
z*Ld{1AkQIo7~i?HsiA3U=Xf(q!H39Y+ssj5qLCc$&wbB${+VZ3_xD5zKy50dC?R5m
z@C3hTq-g15G;kQll~Pc9Qi+j#I0=yj`HmO3%7TvSUJ}@zEDe6?iK2A(34g}V-++|A
z!cRv3ROiru_N4r0A#*N~9}H{nG!g`x@@A@hSQ^ZKfjX$Jj32d|f@#!_I!)Rrr{tjZ
z2P<sGylRp=5juf1YJv;Jf*>PZ(y5VXd)SLtpb_|&gIA_?gV=U*6s$h!>QrF<!K}ru
zE4)9Fa<eSrg~1y(73t?$kF`(dIk(Xd6Hhqy;#$6+uKAsEfAI;dam5Dv*8uBdeIT*m
zxDpB(IWLGLBWLfovjb&bBNq-caf#&|{Z{+PBSx>71JEDf337mC@}GvhFHx|zPzq=A
z7}Qm=TLsfnpkG1nwUec>*&!uN44@gcL;j%%-tohD*@?HDW%5A+nn5X&@^~uv7k?-~
zNb;1s9E#4AFGf<WBGQK$??di4q_U*Ev(x68KxXU_dwumpRc=Sx>8lQ=^a9LaLWHe7
zU}h{_L&Zr^>UOO@kzKuO*J_3%?_0e~?#qk3+)r0yyHG=6PFG+J`K1Qb1Y~CJ%QTy&
z)jJD9^p7Aquo?v;L|m?@UtdveJl*(-?i2krnQFEeDJ5HzF%Av(uQ@W+_&1dmUL3>A
z=T_GmTU+Kts;X<*KAhR)zVqiATQ$Y2lr)B9ITG*Jgl!G1T>wPH4FLBF=@+&o0y7fn
z0Lpkj1dCW&rD|Hr7SyuJuUaWsSc%pa>s9D$@c{k-cd@K4$^E3|6ZoA_b{wEPN>dD2
zHRTLKFMP@hN3^~ruLr4LXdG$>Pz~iQgr{gvcY?wV(wxCQhJHaPtj!d1Jckj$PnG^I
z0T|5;IZtu?ho!M}A_t6jJSXS!sEp-K<dhuEVL|>rLCT_LO^3=>2jc=_ISg`>PAN!%
zVK5F14Z4y}U}w6(v83C^0uO>SO`lmleb&^~E3Q><`t6yOtHx(8oL3ogMuMAWZoMZ`
zcHbAad}rVKiQtVJVD2F7nq=5@$PbrW>lUV*-Pf+D^y^#KHg{Y(m6h`a+gui9+ETVs
zUNdL=Ck`$5S<hg6<f%g#AIwFe{ZPTOqGr+C(q2obqCG=Bse~(MOEJnui!wlF1JAu!
z^~U&_JEvWB+vET7ANjZFlCZ!)llZbf-iL5oKeG1i|Lh<0pNGu}T8LL+{P8aAStK(c
zKe<}?rZ>Uz#pLu#xQn*Jx@YlBT=Jx1nkN*av>XSR=%w!SVoAt-K3De|U)0x8=Xw_&
zwg+ArJV5b3m0TgV-{9-yJBP^|{7yE1ot9gWIWECC2eQk|0{*3_Z%sGR19cr15$<L1
zTR8^b)Ys`@1@qs3_1;|Wgm^%uqnPu#+P&yUko?4jYYj~^hRS4+Xo4wl9NBN{!dV29
zE~pqdwvxjHFd1tvx_4G7auz0F{`!W+WC})S`P=Kf)^tsy-1}N|QA1rczxL_FkH7Rh
zYwmmerCZnqy>e4cY@OF>(-tp3car=xOvn~D)cf(UI2)38U96^w9<FOx6y=ZH^3vmd
ztoiwu9zXoF@ldbah)vGB&ZaF~y0RP1m$2xE+^}~$iW%}^UT%~QOVG@Ueo;Ih;nhq%
z1KCP&jTA|jK*m#yAM}Mx)yE@;|3rRapD6_S0U`t2{?CN?5w)2Ce((;|NcCeRQ)wUv
zdXI=31P%do1*kjP_$c0EC=6TyH#3;apgdXyG04CEu$&W6Bp<-80Fy8CXyjbhPuPPs
z9l9Rg?zh{nO4ivOdiYtpkA-XMuhyM*+ugdY%M*4Sw7G_hhIUZVn#R(i76%n|bh^WK
z6y>@59ljQ2C%5#t0)c?5$HI3iEk4Kn_dC5Uiqh3lxY1ItDLa%Fuk-$YwtOLs(U2g*
z0l=`G0yU0=arf74epXgnKVgQ==FqFQ>nr_^OUIYFZ6CJ<&($p-tFYQ!i$dd4Wz1_I
zE^4<rELB(QD}Am@n?@D&^n@nVgt<3Au+QVJD8Hgyk>{)lavoeWM^=!naC>m0GE6t%
z1AZQE&8g?J>0Y?fEg$_?o+9`q9DJjog_A;V<e>l(X#z)r8@Nn>lT?I=fa2X^Vd_;%
zxJo0qC8y=IRvV)gn*gi=DN~4`=ZtUs``Ih6doa-~+x;9wJ6C0msR>VI(01LO&#_tT
z1~!X#-g%uZSm{Zqa0Z00B8mkZ&4~xETY0u|?0b`|9%Xe~uiqWM>41E@@u#=;c+RP_
zg7bt6k*4S}Hr7-ySywjqC);m-YtNqio*h4)TUM70rZk3|il*tZ%fobQ-8r6J%F5-d
zkM3T$V9u+<bT^i)4j;eGBavpXN^9eA9l>ds6T%jbo{~5a{py0vBi%-#9ZQ6k3H>w#
z<HaD17}h{VOdg-$ugH~!l$Nk104>z2Jh`aZ=<Ch)M#_@)p>`!zJ}yz8MywELvT}TQ
zg8I{2uIX2+YJHi2JJy(+Xib4S{oEai^LoE=?beVnKnR!l66+^VEDNU^(=E$)&z|t~
zhJ#O1)hV89SvdIzQ`W7CT>Y`e@JzKimZ?qn@;Oa+TfBVUrz2IKdGlk<v&yG>+3Li(
z^W%wyGlHS@3vYk)jK;bJ8J^25D7$4rru>>+4aw<yx1D#vLBIvkl|XL5(>f$YTSj3t
zi~?=I7!Dc}U@hIH3Yw=%B^N&)CP7y!Lw>A84AD>t>_b+g_#ZC{Pf0FGid;Q7Jfg$H
z)fjUJGQQd>b=`{GEkA|P)A-7yGZyot>l5S3Q%ZZNK3NvQc(UH+MY)3;o}N%!yL)*{
zx~9%v=ASTSeZqK0j9DzSHTV1_TlRgPb;>F0L`6(S%8+VTGw;;$S<SKe^E_3NvzE@|
zUW;4T@;P6kHWO=BXNDU;c6DUUx+y=Hys-J=gBP54^~_n*lks)S&JH#&yair}G-`F@
z#yz}8UAR6JoUt$wpD*Zv&&yer_;JulCj}gqvtt7cs{_ZsdvZYG;<_~V`zU$V!4g3h
zTso9VNWf!|_#wcepfO3{NibK4pRDB?XY{V#uw(t)GGCXkZ0`CU8&>zuX#57B#b-X3
zLjYypX<{qOpIdU>ye3b}!Wq#}C^}<di>GPcbxWT5M*d|!{<)_pz_RaDp_dEo#by`-
z$yg_4iN^{-ygV|~m|*il!9;a3uaXPYE9`NK0AXs!cn;oIZbXqH!iXYD6|yA#U@@Q|
zuVz!^K7W3IOdhj>Dd{JbS*%xy1tU(=Tpc#xlv&fAhe(Dix}7(JX&fL0R?K9CSqx-%
zexP8pE?`{-b(JLTN_&g97FbX0*rrB+EGTO9mP~C(h87Qy+tNHLS_$zNZ~x&B@3Yxk
z=gpbKrp)E@{;+??ZS(jaWcd%eyK~%D_DU()xs!kO)z+CaTU%z$8vHc7^TCI=t?$n7
zW4ltm+KCVGt4b+N!qJkF!&<b1<^yC2QUc~o6zvNla70GJB23FPj(`Jifw3cQ&kGDR
z0O}5Z96YA6tc80WtU~QEE{&ufx`6gF5puEhf`@n?gM<X;9$6fXFMtWHba*S+8>z^(
z-{q3Y;~CO-G1+Jjp-|w_G{rR-ONf)52Bv=47`bTwN##K542uYgy2lagV=fv%6J}ag
zoAJ|fnA@lGTTLA#-}f}8kc<|2uL&VC$YxQnXk|>Q5ud!&KpF9zP({*nq>2=6$6P}Y
zDP_?Ov4X%Lj)p<&aGzQs4#L#7p%cLK4G6Uk)Fv*4lv9BqyXw$(a$pxQ%S2Bg(KBJT
za1B&GRJ*4FMb<*@7Q>Ls`%TETm|!h%a!&Bh8o04}7<nLBEUYAa9(C+Y@E;a(JZwGK
zl7+ntEkPkg5-1tSx2YghB0wo}#O(X?hor;Gw}+(pcO1?wyW^!R8ZxQMsWTRA^SK5w
zCEFIvm|B_2G+go09m^0&Ew-kcqhl;q*TL_2?8m)}o_fFc$B$J$btE_E?yYC4ZS^$^
zTiWKYnnly#%FbFfzpZ6qO?{hs=GMFC<e>QyQcS2bDXvn1e<ELz5WGc_&=R&tcL0BA
zh@b%b^)yV@kw_P^;gU1%h6A-)rnLnrDnxUJb<jlqw&^aQ#B^Ia1xg!sWlb2DFsSb;
z8NSED&!UNq$Lg*Evm$=-G?)lt{AeK!iwoFZi^FNPI2_GZtHo!vW>kw!mTk7EX0yUS
z+`3b7W7qI>;^P<I$vmcbJn{>Nwhwr`AzSODRcoi$pP4)(x-p$P?}hU`nJX*DCC{wS
zu3a^$&KjK1Jw5E75(or6nnTw^jW(OJYwipRU=a!p2+MLHzpq&xb_;$Phpt6beLS?c
zx+<&ny3G#Zt9_e8Q$mXBf%&|h%Qj1y%;hf<+TfO;_b+SD(8}7*yydKG&RTVawXUoz
z60yh5uwJnW7j9nMR;DFDwKmqr>J-`Pa>3WNBOFeRcf#j4b+a4_%O>Lq&J(&)Az$jp
zf_Iziy%?9Tcpe>-s)`~Gw6z1az_i7OHKuVe9|g<x(?#g}Z194qOqzN@kbPDJ>1!aP
zOtQ!vk|=l?>qp2w)?aOI;pP#Nc<53Kp|R)Ag{rl;uDBy0bQ$Z16=1dsphoK+u|kJ{
zLnk6u2li9);l?5Wlo0O;ViyWg*j~Xu8><H#8Z9C0sW<}H``QsNSFloMS@9r{Ezx>H
z^=p>JV*<uN2H)tiJ8Tx4O|kkH1v>vYrSak!9ebwt-Z-&5R2C{*TR!RaNzYt-)6cf&
z_6>gGy6;c=Z3nK+TOTS<%*&m<=)rI8?EJ%Ie@|e^d>dC3D*{XM7slOQQ58KS0uTSB
zk69;#%R+4v=l%CzZmR3653d+k8LCd4@pBfq{R!h6C)&qVR$e}@?3{4jqxF~n?8sNA
zPno)Cf^Gfs@XD~w>$Qcnx`${?7#&0$189taqtJT{gh{1AJ&70v;1KCU668ribX^t3
zhQ^1I3|>BFcq~f71v?Crh=4t~e$DENmTdK6>$-(G<1c4UsFkbiKE0)*xqL;1OZU~<
zQ!%$(>6$cSl1&e?p6~48HLeP)ucNs$;Hqp;$|ueC&(>sCSFxhJxuZq**{kH*31>2I
zZs9uX;_7Tm#p*TdgZ2Qtp8T^Xl`9REu0UsVhtFE!s^NRS)5C(g4RyOJWp^xPuk}H0
zV&Z(!Pt!Jj^xkxm1Deu1;s>(kH$~4F+GbR#xW|y+PhZh12n$xgml>x-6ZWhSkhO=I
z|3d?o<e(1v^ttD<PdiQ<xkNgVVh7GT%h;%{{O}ki0=@+eGmEsk<f8=)N6{yU^rmnH
zBbt6nsvu@W#Aon0Qn(6Ve*hp4?|KD!sVZ@KP9~#9LpI;!4v+44gyakEYUfT(ub)_N
z3&?U=q#|syPslXQR8^<$<DG2Mr?d&a`tpQl(!D`&KcyrOTVYo%jnPUuV4L2pYfj#N
z*9CG2(F~mRiAJ|A6jik|nkM3_D#3dvc@pLIz6si=j2An(Pj{;7%%+Sysgx=r_=U}t
zwj6so>D`661FCVw<VZ<hO^cTTB!|L6#~o6_f<S__19HYTZTXDzS<fe4HGc9r<Jjx9
zjjum_$&=ObXk){cduJ}{UNr6+w(14T;obXsH}@tlIZxTJZk8*0vyp%2|7^ZT*~_nA
ztJ=d~+@_@Dad$2|XTkknwxtrg4__3Vbk#JQSX<{0<>Y?{jU?pULJ}C45vYoSRng|#
zEdTpMXLqt>+Axj`NkcDx{$BMx<L`6l9yWfFxAMQSx?er}lBh=-dQ8mgQd*<1-k|;b
zU)<iXd%{hRg4Fsn$@ujjE6V@XeJWD%N8{Ip5Vl8n?u2pqLbc5I(|>)}xk&bvsSDXX
zCw^?2{GjV5eiHOf5*c%Mr_C9HG!Yb#oEt`X4B<Da<x((bN<joAEM?3<{-A6{yc)T`
zXx~q9Z~8mxN+Je+ox<7Rod71tS##JY+^~@#DQhF%ZOV3s-xZ_=U=~xLuR$4NmkUAM
zOEJjeL2ZEO8}l<APQM206Q}<J9DA9RW2kpc_lR36E)NVi{U@ME;=Ks6<VSe197)@$
zAvdE9^!*`3#2xma1vNwj3Z@b3SxE5^T?Z@Jrw-rYQexzu16Be)W;)dJE!^*`ytO>R
zL&i7WD2KIEMD1gVE3UkiI}z3+dRHXL9AAP#>-9e`uMPMjGSk?9J^PJUnMZip8sCiu
zg7NY<*sKswl;2wE^Ez+6@(Sa%$0`DW+VY>XTUh0noGe*>7nlv_tKWFmh|^e-fD|X9
z9jXzj2;4%kFGc+n+;Tuzk8letE;pH>i%YOkNu*cBGroKL_-=+D{vIiH_&w3AeDWcs
z%r*F~t4vY8XpXe!yWZ99va5Zy_q!gpmYym69W4echN_*t&3^0jdY$<jjDEppX3LxT
znoM_hCjVHo!0lHH*?W@&e-l6haaQ<ANf&U7i(&h7L2lcmw6%kf5cGCDMnEHbCDp5F
zkQFRIFf`+QW836zB^A(o6UV12pZHu8e4Q#}n|G&p=K%XMgLz%fxZ2puu90&TFAeHg
zwkqylvnd^)-ZG`WYI1W$L-?l7tCwHVwx%0RCEJ6+g#4`WlX~M_=)nLxS;%erfp_eH
z-{~OW;NA?ZS3^7ji%VWaB!VCz=n+gB=?dVMkjfCb>?4UVqB4?X3juAaWchB-l(S+N
z&&yw}28{P7to-=1A742^=|@MhSYSpLTK}czOilmkc?&GmEYJTbJ@uTWPsh%h;_=M8
zm`z~gc%bFdb<?J;yR;?$mhnn!53RbM)`r#he&*fV4>C3C4-oB!pwPyNgSWr?nR{2G
z{cPy(LpwB!x<~Lga770JPsi~@n}Ir^GleIoBU#6r$99OXiD4i^Jo6Za!6Pvc^faDV
zd-qn^9CgoS9MzTe&rYz_JM`+nt+z%S>TMIAt*@+hWS*;Y*sAu9DOF#2>#ddbqs#Ez
zn8$dC9<$evRNfFBU3I<9QGNUERd(B`GA2JK;7W(gVZ&H?q%g`O_Y?EKDPaRGRw|Dy
z%GgX<e+UCqDvm^OEu!CG%}0|;B)KV#R3VMb_g5vV&Yc7IRA=4XIaRaf#A0)w|L&5*
z1t}z307!h`l0!;dNFqOW_)}8~V#t^+3~NAF8J}M3tg9J6Ep`3lA$E1CFfuSHv#fE(
z)Z51evrCqgPs-=A*-{~7Pv(+?U6V`+<g6*CD9!5kM%__)etU3fSGIQd&Y7JMLJHls
z7@u}v4%iMQA(aud45x|5dc(F#)F>%>3BKb*(S$*|6R(HOANCuxSwK)y;86q#k7&c7
zYg6PVLK|^h9HG}I8W#pHQ0(`{Vztvd>nb@!({t-wWz6pj1ub*V#fatmn-?Lh;Q~`S
zsjOYG{DtS)2EmOyxgcW<O!?IFH{SU)V^ih0a_Eu=4sKvqhaSH^HEn!NowIg2FLPA{
z%fdDm%Ph$8Tv>BNT$VMyBpU+N9Z!X)&S+egnG{$ETiRjqWLfO2rP-{>?@-*y%z`Pi
zKCw^jxhNEz)OGNZiw}0r+_}3p+qE><K3~Qldi_=yITYl#Le?!{ODT>7g*$*`O9#WF
z>4ba<_hMAVSkhvl|6+R+!fq1d6nEJswZIjCd?9yAA!LC12)Q<xLzts5YN}gX7LI`i
z4rs{Hv{O$`G3^(R0LMxp-j+K{Ve)i<d-gv7p~K)T@T8D$V|-en3xIr^e7%GsUC2;q
z&AAj4h<FR_@3hh5*bbpvJLM3M%KTzS0Jw?Pokl)L1XEsdL=ak9ds@-<0K-TeQZ}0x
z({5EyHR(;0Op!FrImBL&?z2>3uG^;5T(`}?=GHNDEkw~%X7MZ_ac%){Ey`)Yww7e-
z%367<7~1?y6I8484+qr(U}M-!K3dSD)q*l2A}HS8R&d|bHFy~^iqKD2fSgMG3(20?
zupRcpcMq}m55R+O72Aj;5{KFQ<W)Jwh?|qI<zd+PpahjiQR4ufLgH}hL;WB{+axpr
z!XKzw(I{XDa(-)xizbHPTi9OewWq40ZnH6lO~{nrFEo{HT*aJYo3<WB(fUGTA|nk&
zX=99&+X!z~XjdAW71|{lMuRo%nJPYRFsfb3$vq!_8FP(o)kTnyY@~t3IGx;={71D5
z%4akSH~~Z^*1hSB83<zwMI+g$xr8sKn1<oTkUyrFBDV45c3o&ThGzK`Fdz+$X;@)>
z<^-JC*)Mn*u9W%?KvF}21xel37RHxKx?t3yrP2Y|`e@{BBbZ&{d{bD>C=5ZM-j+(Y
zh+8_ue!&p!5OfQ1`=FTskkF0-BPA+{A5>hZme+<*cY7OzS|LPa6(zKA$^{0RrE93l
zHl$Du2|y^cpBB=I?<CnGYC_|X!`>_^3AcyBDc}_p;dmGc$W7WqdK)2JJcftcfl~A^
z&Im>!1TL_72~n^_A!C6Y6q_DPL(zjikPN1lf~}AwhK_`p+E7)yc`pnmHv~UmEe(<n
zC>o8W#$c2Xelv|;b;;BkYBb#;Ye#XFg<u*0Dk6k-wYR3)L+#?_z<SiqE*KoM)(jq?
z;X#X<+u=k|+eVM#ZQ|5M>Jgv-3|?EB#)!@-xs6zI<Y*EQI}zbyVBOOMxf*66g#s>o
z-jwNR3H1dnLtI7t@iAT?@=Wg5xC*_o$Caw_@-T!DGI!XS2D@gP4S^5coXN7PS@022
z4V$ZMm)#zlW|ei7xdXDL6=$6}qlz4nRbA&yQxPiBujtmWrY6ecnx;D-O0_bFF4wwM
zr((7FRhMjaSXJ5Kw%C~0V_{a+Vv(aZe}!Iw2%L7Clf#hOX~P>;)gtRLn^NXg6@|$#
ztZtfsm<JwSV^Lk2jt=Qual0%YZU4DCLIKJ)tHv7r9Cp?o7`W<a9hbdMXB;i}ITXcV
z;bCaUnOu%&ri#WRZlX%K1y9K~7sQf?rxJqoD(6l|KvpX(HiuVrNA-lCt9G5M5fudy
zwzS%($_O!N<p>iT;A%*fofs$1tQxmN1j9&eUZW%S78LRhM4Lq8F^o)a)ZDtt)iSwU
zmC-ZR#_bl}f*6R5xpnx2xx7jcU#4XkZYw0zsuj{|wOZD>tc18%mVHi}M|N0cFL#H$
zhmYJN`(+>W^j43|ZHisfX{tC2x>bi2!Av<8lPbHdF2%_)cQEc$WZhrEAzO!O!5DOB
ze3yBd&B1hwrdj+v!~hl{=5Yd~IELO@CaZRe<f__iutUJOLII;Gu*=mHtA(ppMYH;4
z&86yIr^TaKf*K+)VvN*~yIi$corrwO@bM-sOcU#NC~mb3V`(D?1s`5u#R!D~cje4&
zaWRJ*W2RdXZJF5=#E0Yv*{PN*h!?4F-GTwdaJwUDf|a>+)nip;O>=0n3nRJsPMt9i
zx?pEfuYx&qVH#O1tuV(KvRsFl&UUM&)@oW5A5C)6Gd$2xuBbsp#@qCuC&aaifX$N7
zbf<<dE_r1IeXUXa7UuNXWzDB4s-=v}mF_sR0&aAl0%d`f1Bw9wl?dhIbf5)(*$p2a
zu2>p8wz${B-7w04J^;`tTQ$2A`s@my4C52btm?8salpNH-2%;s>_gx+)uQ-4R=mlM
zuYg1HZP5|#6{D(Jm|cN}0<Xm!aGRzM-kkV2-UGu-2esCMX(mXM@d7L>uBm|Hat$lj
z&aE;&Dvmj^H9M=l<?fK8S6D!?$x?7AsNEpsBSG>eEK>O*BDAp7ZHHP1HlZZ@M2L3K
zsT3kq4Tgoi6EjIG{+ayQ<mb5&X3mGw5AfH*<Nthz=}<HI#&P(7(XYR$-gm9l?KNp{
z_InghUP_*z{Ls1w*uM0P-JdoEOYtgujs4KTCVAByNc$l2z(2van7$Adpp@X*orD!0
zS>lP`2vIHcaAUufIySFJMEV;!1;&&dawLSJ2Q~H45fpPMOMioq3YgZrII=fSmm&Te
zG0ov~A_-eh#3e6=iUVD1eru^&y%yh3@{0&@ur4+H^bsXhYEXWO?;{}$hzJfR`6KL2
z_BOsFgQ0*9iN-_B9N8{n#zv0;DKSZFgfLY>#E64HjrcOboE40AVG|%3k^<=&eTSM<
z*$iU7UZ};T4<M9h@T#K^f3V)}HL3&~QzK@IRQjmXeHelP`Vs(S_9SuWTZ0A+>mFf+
zXvIbb<2Q3oNTNXAHQ*IVGD2SiA;%hG9mPk0Xue3UU=<Pv;urCtxU0&>L+paP(P<Dl
z;)6SP8xI)|-Aw~TS}ACx?#7qM9=h8faX9MG1;n}XR^t*L5?`X~$440`ikAGlQ$JUg
z9`h6h(IS6bs#&~Sl%RL3egTJwGnK=*dm$m81ZmJRX%)IIY`ZcZGExFV1477D*n<xq
z{T1kfC28?%&?p6WBeMAsM!0yE7fSFYk6pZb>6YuX1v{q9=vI}{pN+P4FW!CI?#11<
z!e^rg&DeJG*#!$zIlg7-?u#E=qIS=ivSWdEooPVGbLzEA7O}Mrjp1bF?RnQ}J~6E}
z3%gUJy6~mx{3DB&T&r%oy)qeYY+xJ3O#(kz@(kUrZGoL;93B^!U=)aD0V`YuE)P@N
zB$K(Z2=oEUrEn8eVc}YP(Zog$w@IcqyNPGgcor!NaUlHlA!i|exSFX?M_+~sX_Xwa
z`}K}GcX`B7EytrrD(dT^_eS&6qer53>B@Vf(U&Xg$Ci?BJnP<NJFZ!FWZ60AoV|0$
z@|Ty7$>URjs68fEJ0j)ox(?lMM;f-SKdOlAkMchv5v|xCO`}jn_2@$R*N-mSzwE3Z
zE!%PJ+2@>tnn!18U0|)|fLkjtMuPK)%0L*40*xxvH<BgcOH;YmA34zvbb04ijwpQ(
zGd5**@5Tf5H$BC2kGu}2#9hB`i@FiO@98_c4s2X7t?I|%9hX3tJRWt2F$;*AE>>8(
zX&o=nps<}+Ssd}hp(hEdf9sgF@kDOptPb`!tRK_v0|I{IE#oNv594Scch0#t-gvHD
z&h9dCv~k5uV;TE=b&}m>T#*!A8G0Y`d>QymmljE@rH#@KX}7cww@8W$OBuvZCmAEH
zZme+-=b%9;Bfi*x-jZc3s8+f}<ZBzLdj+*khPH)C2eME>=cY(lhn)tx9njL0a{-UQ
zoEZ^IPzlwHKRlI&mXZj3SRb%<daL}T;K$je>_k*nt8z|{*Ogy%nMDCjyl&a9du}^>
zrCndQbl3i6Gp){@JDt{<%l7YDx=vT?8_(Kv&#q<bbd<DQ#=qq9dYri`RgRum-PF8f
z^@a1(=Ba5(b5nZ$g{#dIbM?kuXGUa~3OecMy?g)|v(E~e&!t4<-dz6gU*vXfZjuq>
z%0QyllLg6lOSi%%PFQ$HX8EG!*Y@0*Szhh5&YNd-Rxi)o*)!$R^qI?B?_4-xB2&8A
zEfziNsZ9j-HtcGdlAuF=O3SW>ggEfN$@WCRGCm@EKo+t8j`3{PSaL<L1*&e35;6L-
z?BHG*n+7Hg_>1<9YD9EM!ZHM3W+1Wp@aAbEXnZaMI%<K4+gcDW1MwXFw22V(ioIkw
zqY3;^TA};^eNlnYCl$zJe`aUS_!(=&7K`I|Sf`OAZ+$M+$-gj@3NDy#`7BoWb^{(p
z9mdz{erEiPf7bY!@hN<Ru8&-_@kJS_u6OY7O3usy+8Cm(?^3T*uOl4@c_0DYOu?h+
zcqH<s2#!LL5RxVI1pHHSpLRrYR8p^dc-yTP4*u<m*B*KJDt?}As>f-|KX&Ft8~69f
zmT60~%cteP5vi$6m9qz7RPC@C7frhol6pSt!UwiJe4%W)>XVQB=8F7dHiu`bji0~p
zz{X2@2LCo~d3NbEKC3KM8LKcZ!o4mVdk_-+D^b}x+QSRBIx^PoL}`}!jSL1`I0P*P
z2RJ+@_`*#=eGL1!qA0=i<0LQoVI>;oD@;^cPL|*klFJ2b#vg1G+@@A8hvAknO$Y)x
z95R`{VqW;RXCFSD!OEg_L<q?_*F+mDw*`vM@h2pjQB0ClqT%rmVqQAxRMc4)HU1dw
z6?0PT6TDYTv`qpPX`@uvunB<vf7mKU$X5%xEz)d(qM-=W)HhT6V@8zzu>9y)dBret
zYL3v{adD({zev%6y?Lr6Esmjn(3)Av)Ul=E2?~m)=mq90?9h;lk7`{}3pe)q$&s1K
zF{1FN9xc_j9XHjAqc4^gcv(Eg?iQzfAB^J6xs-o5_6i$`PK{|npWL+W)xW_atW)X%
z*1lA_4(LFv8X<hmwCZU{A2N`Phz~(wKk^4jkWa2bgm@u`5E~Vw8~8BPn9jp>DbvzQ
z)TXAVVd**c{z-#y{pKYbyC+SYRM~h*#4<7A_e}R}WDC!4>Ey-%ZG3n4_{#F8+Ox{e
zpFHovnM-G}8`VFV<KS~q9OC0S<BOXZw=~STZKL{D>7CNiTE2L7_c>=&MzfX<+l+c2
z<C%l!T;-V0vyUWvEz4UQ$A!x)CQoUZv}{iEvZnU(PUD;AfVzBs`RWTUsDG@^;Z643
zXk2PsKYU}%xQ^&k+|W0z7r3-wtZ9O65_=e#{1Aal|AU}(K-`!c8!(Z$7?$Hi0g!|o
z{{{6UJW7ae&a{&tjQ)eL#8wF`meT$|-rfVSt@7L(*L#Nc-j+Nh%aR<=cspKEVrMwh
z*$D}W$#e!}6CfmrB&<Lo1PGMT7zzanDU{7^dh3=^S~i8Yw6rxX<)gHW_Ldf6>*V`A
z?~!cTNq~F*_y0kBmd<$R^FH(U^phXp7u*|=J(KGjd--Kds@^$qv(aRg&GW6*b&D_B
z*3mw3;#-q?nxcPWx9P_C#zv=hb$0FEHs_jgHa*FWYi;>9IZ|HQ*4&wxKC`@XPN4u8
zGS$P->P$q+&sq9-@)DQ1DAu*R#TkT5c~j%k=BCA+?d@&uid_FmO}uXNnue-K#aO4u
zS8O-yt(Hw=^JCF6p>SGEKQ3D2@dg7etsV0_^T4NM=)x+pI=P_nBD$;Ask%Yu^Pt)~
zkY=yP=gO+BT4VCNL6ZS^ub~DSG#*sLn~LuD5(aOk<w%{#MT&R~>bDrEMOsH)T|YLe
z7cIe-+5?3P=kCaF%x6MNq6N8tm{nUIX<fXeXHjG6SVxh=qq9Ngb`_ScwhHrKo^b(W
z{qlIH)+Xw$S`RYZO`E>)+{5?o+||<RwL5a;g-+{m8ge--2#XowDInup69z+$^?XZQ
z`)B2Yi)S^5D|4OUqTI%&&f90NykTK;yC(ugz(OOm7%_{^Z)PT~Eubqlxs)rOId?|I
zgr;$!a7E?x8N0gfU^9>B6rI?Y=^MDhlRu1x`*EnWl8^vaXefW?b(*7~oTKXQ7<E3n
zZT`2<M}KdmKO;h85zVe9bmpGLS;r%PQAXT1^0$#^Uv_8qw@BRWBSBV9Ky>Y+c|;p_
z?a-kzd?*gV4mz{0W*wgXhOC#dS=kvni4F%(-j>F6a6ul3K#x&FsI+lb#Qmm8@FAzp
z0v7cVrGSy(414K2EV>a$WhKrNCtx>t-szOJv_J9U%9Z)~_+uA8`)o@K{>0y>ucW?}
zJ`jJvpM9&Ip2ef}^sMvw>-lr}E0sb1T+6em<>@Oze)<5zPD<zhB>vy7@oQ!dYl|3s
zvB)~)84A_|n2;2U(2@y{YTAMUQw2XTGHvh?rg)XKS|S}Vt-QpN-?A8<G03WmJe#3+
zS;OYINFEX-$tJ|OIc#<5A?`CcgIb<<jSoV7A!!0J)u$fn91Whgq`t?4sinR_jm>9;
z;*gQQ1pPrhX0ZA&n^{6%@2w0L;w6DT@C2wI<h3+kHVtPgmH`MaboONarqo*S07SS5
z$P_n15P=6V0|f^Sqx5uqy(BghicZ2jAn!0OS>j&bys_D3D0gpYz3@MKcKz|%^-o-~
zw6tqxz8=^IT1U<6_uqW~RU2EUS@luG54J7LS>=#kQ8HQ0=WvTo=<F$l-;a;G>eD0J
zUfA2zz31}wo^OTBA>CN$^;^%n`R%*+fA`}>t&yEe3aTe=ThLjhET6n_DZBVD+y^YX
zZa}*j;`=kTbE?U;(v_pDupxX&<+y1Ubys6>Q>6=hhBD9kmdF1*dG`|=dLG|%R_W}S
z7LR0<wT|jn@4e~XD>k%H<-B!Otqc4s{f;Mz|I5VbUbMLIp?D*U|8f2u7j};8-hJ7`
zwYP_4qqWT8bG0o#^449K-uJgfErmN56;w^wI&W%~vU2sUL&3Zx*Ce@Z%Ll1u9;by|
z)`k_He2PiH)QQwVWR^j1<zr?6qyu~ktwGdTWHccc9rD0MJBTXd6Gu+iNF7)rq&27+
z&CrUiJLim<J+-WQ&b(5$NhmQES#k`9X%n04x*~~|x;c>zi<N&bxMkg?%e@{;@k4Vf
z$3<Ia&5X5NxM5;(Q&Vw4Sy@4OH9J3<OyD0Q#P}hOn6=I5bj3Q#Dmo%Cz7**4Z28^-
z!O=2%!KT{Qg=cMfC6PF==<MBMUQSuHxh8LMP3fevd~-o-&xEQuwWZ}{V`3GZ6)m%C
z6u1T?k@H~`vn^>tXs=mdb;m;P=ms~4*2>4A=Gm@k38h?%QSReOqnb`hAk@KZMmg2u
zWEfLN3)Wt0HkaCLTH<VI0Obp;2Cas+tE;K25&n=^dRAiWROQ2?2mU-Rx@6jZ<_Hyd
zD!ezoICcEYUu<D_9o#={M%ARrRfl6;fx5!+8xkdRaw^@WtxM{gHZE<j+T!kU_IA-8
zs_WT2uYU5@J>tf<-dg|Wo9l)5iYB#pC1;&A@1pJVx?85qIao2*S&|r2R3-iR#<{oF
zPfRQxf6ZA_w@+zKw1tD?);3+fXKp;)yryE^y1BK3HwS8$x8;mQV#5maSV6EBHJ;r(
zd1G^)xM|aGf4k{zlF_*CMuRMdx$uo8X_==-g-VJ7nu_4OjUk2+h7rXOCPY+@LWGbU
ztA6yVM^XC8Z8y#=v5@YyWai!@duNuYJE3I5k%1)9CMkL3L#Uxa%VGf?wk+Ar`mXAV
zx|RO-uQ_z_tXUTyQg=!T@;BoFg>S{gK$0GzyhI>kpkXY5>{v-ewZK16jcHTCDS)n|
zB;WynO)P+<OyXJm*agr2S|We^SyWskEH^yMg`70f0s);2;tTv{Y#8?^p)<TreKw&<
z3Q387m!=EJ<osd4VIb%TA5}jjC9>bc6B47$cs8LvI}}C4Q5S>+FEgAs@HB<`WC{<Y
z#)Jm{aXx$~jt7}lflUo<g*S>VwBVzA0`nn-bP4Ao<!m=xM6-DUDLK#!1Rkk-AnB4`
z9(F8U&Ux5AVDeMDK$ADJRUs9UXgbtRyu8E39Mx>U$!dwyv?1hASSK`J-FGbeMbr*x
zLu7|m%lH+2hkjSvGt+mRM~954(F6$fWSH1_eTYvMng#A35UnSOG7VgL5UC3lZ;X6n
ziKIgLpo86jj0t7q*oG^{O*y}Yv6}OzjQcK|I<9nOr*h>o<Al;y0Mj#HeQW6i<5K0j
zg>C1}n<@8ASRpnIzE5nK7^sT<YgI{QRaIrl?%&7R!r6yvl!1h<GOx(#EXu3YB|h?(
z+%SGt&vM@94}<1!!jTPp6iSQ`0m?JT=@ne_NK*xJL=?&qcG}@S<B3rAIxjn0d4jEA
z>*fn{SFiidYUw)V$vF$hFYuU@Cm|ZKPFMq{tQ-HpYvOf-Vet>Fx^v~q&S~eIGx)pI
z3xad~u1PidHK|{*>)5Ab#~uoeZ7ldxy6w|z5IkDJH&EDj5!9Qc$0p4rEi62FB}~>M
zO(6s%D0#J-i(XOQyZu4s=jZB}{wkx*uIqerSI-X*&Y5%YhdnDFn|xK4)nngA=DOi_
zmivmB3%K0(Ub*P{1I8TvL4#mi(SzGx!&6fx9?Y_CT)Jj6Kysl(gPrfM@~;WoDxATP
z1$if(DF8u0%3&=|Ytj&<PAjDh#8Mt-RH4OvWY6IGGw4xiIhEstvCE}7wEbVB8wvDP
zxhYn9QnS}u47XS)AYs=RgQkEpV1c5jC)Z%`A_OHrX0$tu!0HjKR<`VPw?Z3u>aBa3
zrj#^!8>4m6P0=VL>tQLwx2!Oo;C*&u4DU914F*z07F+ODQxM;WO;+*<_zb>v>a8f%
zX>Q$nQd5e$#EH`df5GPl>4YdlELnfx6qsRjGkfN$uYffO@uTDugGDlyv7~11$aoDh
zJKB$8xEz`6@{IhGr*B{;b@%Tz+F*5sZcWQ_ySwYwgKm47u#*3hdXevh^nF)<!xcGk
zdBpV%Ld}A{d&Z~NGJeB!!K9{$KFan6%B{hGvQM7bGV@?@*UXk}R{oRlBH!&)@9R?r
zexH~3JEnbtUUKcH%40OHi7uc4Ko`8U{=sVqqXe3I$lMs)B*Pcg+hc@sj&VbvU*H!;
zp?(nuEX`1QlsjI(Zr`Gyzv7nNrQ;^GzQk6&{yLkJg#{+t{HK6{eadcUAF$h{B#;TV
zyg048d+D6<n_^o1)qi8ozx{L=Ak5=94L;cSSp0zp)b&BdWN?GFt<J8+P#tPxD5dvH
z&>Gm6<1~Q(7ndM|`@ink(0xv%Ft@C3*7R>O;~jUTzD4*9$G-x_L2mk5=ndCO$(~2n
z&b_6valYGCV6^r;^3o$8T=loFfOHu6{HxI%c3<#1Y}JD&HR2U=lB`LTdmB?6^u57F
zk@qm*xQGel<|;7?+92+9no{ps@+8E-NzW-8B)!w(lz%4q?QAMij6A@ufe(ZDbGLtB
zca9+E+Qs5E%w+S6<E+jchu)}Et;FEMnw7@kp(v{?eKrI`1b}24CkUnfwAX0;foMs#
zWxf)TJp*~AQB)q*qSL^t&_~+pZbiej)~7u~<hJ@NjDd8o0EiOYogEU{*Oz${-81T}
zb_RY`pQZQ1t-r5vm^bMIuGVbL619%$B?=RXykP6ARZT33mfU$uZFaQ$s8ha}aef>?
zr?hI2V;A!v9v4e6fO3<!ymkxhcC%K`3b%=2m&IhRTHMreL8;ConH)}&<k6Mxx^fpk
zbvpRz1szR`tIR+_W96EYY{7qC!z}&xgjq^cQdWXD3D2gE_uO(z5Al}Ovu0Hb9j2JY
zWvr-})?zHuIvm;}W6QMc<BAHS%OVR;GRKu&H~i_KAiS|s5LOaXO7;%W5y%{RXbpmt
zS3?GOMx7Q02QflfM;52_NPq`%cE559ho}*`9S9x>2=qxMNDnSRM~kfArLY{Kw=)JQ
zU_PUtJT_Vjz?h<YdRd6yPn*=axPL(keGC@{)s#WzCyNd1K{tqm%2$G)N<!0746QlI
zl+<-G^nofy`qI%KZf?Q!)sUP7!5Pb_FpO$KssSD&P0w<aAlk!g4?7Ya1fky*aBZrk
zdQ`8P-aBdY6$h`_JgLJt#+bCcXGvn;kz7~a+#*%x<dj>+SGc>DceyLZTgr2CDy5d@
z@^wqDfAT+{yncy@MsQgws`0kajM}Le&n_>Yeeu*avrT2DZ(e`>H?f<&=C-X>GqzXf
z)<=WEXl<U)Ur}9FTU%CL;rHd$(zW{B>g_YCw%)etfvpoJY<+;!|6Y!98{n}zT=mbD
z9o*gq)&O%9-tE<1I|&+S8Qx{8)rL4j6*kRsqSs|Ho0T6UC1rxAr0hm|Nfq$&L@yOv
z?p84_SvP8de@5JgB$n91%Ha~i8Bj`Y^MJk%NR`w_AR$~vOCmZ4I1`9NMqEe6N`?u;
z?R}Jpkmgvp@btEK8Jfm^{^EX0df81$FIO0aj79#M^T{HAI}@9ytbj#+-@QUNa*=dX
zsTEWUnKpY-trg}sxt)IBI}Q03*y+D_2zL4zZ3SefA5}&)oth#Ma5zK0$}m!5e0@n7
z=`(1BJB?X|{gN{FqVc*7xZi9B&~-1BmUX+7kIqm?6p_nOJg!%#Sq#0vkkw0VI~uNH
z161l<aY80ltn{@F-cSPu0IAxEGvJn1PL4*L$Kti*r<yMfIlrjpa4B~9!oedK9yUdr
zdOEyKlVKX0GA`!;n|vT=!;uieph8gU@%^M`==+TN4%jqIN?+R51>k-lQ+qBvc<{oG
zy+^h$wbgdK=w96l?6R)b)$SMD3VM19+7d@LEXgaOSzeO2gb+H0&pLJ$8YdLgmbh$7
zw;$OH+w@P~eHUnJXba+dlIga9jx)o*0f0y6a07(86*gMF-c<XrD)I=nLL_MOhCtA1
z7SPD&ksRE*j!*{v3m29M=@O-m)qZEnI2ES)?st&q+30AAP+VKM;5gGCF9_3dq{U&>
z24e5rO_#<^LF*9mH~uBsR(h13N8f$-=mGby4{`X8{37suPUSqV;XLfbNm0H4$0^OB
zU%L<Ri&uMAwxMY_Elz@`OQOd~nvG)Kz>iLb`Zm3WLUyW2i*<P{jn$6&s9s}AFGr7*
zdIvQispKXmXbvn(;G%?R%K;pVI357c*vm<4|6t#;1G44-+B7i~O9#F8h)6mb`JB2E
zz5mkaIWh4y1LnR~fE*w5x&-)J;_VB0PxHtyhT@P=j{yr_LOo717~15Pu0*2ii%)gX
zz6@wK9ML7-J(@VMj8HX633F5&+q*?cruxw8k^y5XL^zv5KV<=<afO!0I#{lmh<3+1
zhXJLEtqyfaah`{B20VHYgNnEWI#zpvI%%k<s8gnl;|T`FO;N|j&{ov&>!4}J4^UzY
zxi6K(v>5!1CV^<eM4{B%7$V)YWxb=1zv$z5HdtiE(1GJITD%Fv3Og6H1S;0<Jk$YN
z!Sr&S;lO-4N0@T2LI|hQLNZr5vy64LP96oP!bY9T$H^BY?VXT>cftX7fzhn|)C_+=
zEZ8Xxfg5MwZIB|VpKLj)1Z{_}!d!d+{wM=U8irbo)8gC?<;pxW8)rV@l)xvj-V+)T
zv^;J3>>aj%p2X|<+pwXC^K_q`&ffNr=0}=WHGj~20uIUs52SL22;<TDvFk8`NHsz0
zB0+Q!)_(T+==*8JecA7$?;m~s|N8l_`rhdJGVp$C+&(ymQ*fV<^>hdgeE5jCy#y^|
z*uYVC=vd4;&c1%8<NrVI7tT<Ik!2>FR;n8Z;es}G0Fx4VA+hbxRLu2XLq|gu%(|8u
z{`t#~{<m&aPWPGNlAXALz)kyA1}@8enzWZ+GH0ID{8sbX|NB|;KN+QI(hsh7c)aFt
zHj`K$Ak)S$PbsLApbg;zQ-h_Rj<Rv|p^sMSA2gBBKVk%&+Q}nF%J3auXS9CZ(RUIw
zPXQe~smY8&{++DysE6bWuZ~TY0F~^66rA{98>3$_q6Tk}k|844p@AeHS7M*)cGlg^
z8SXyX^5gR1=|k9As9JvvOh+P(H=)|6TQsXiTByl4RhMDsT)g|zeTd#v9Y&flPBOg-
zrkpR&DsRHKDtCt-Rqfa5t`$`Mo$?~=*H-;Ah!oO*1)IL%MR4of&7hywnV~~OjtBZO
zHti&lfq?6IS0d1>T5<TJ)5(-A=$<hfQ^&ZDP7L)~og?2vuM{fC{6j1r{bBjXQl7xu
zxKBTL4lp-q9Sh-aRKa7Cu+F|t)xQ>3$fc*#R1x+SjiOPKocodb2Ksu3xy2AJGV;JU
zO>I8@QYI1{8pEGPmz0v+QlYglT|{NUOT{{v<#draSsm-*bq!>_t%KVTuGYbX0T1O;
z#%g>rAU<?Sro5~4_9v9zPNL@T?oA|m`?^D+WM5x06zcAy^KSZO5{oAKSvQjrZj=b&
zf5>50Lx}bEhx$T#f6}kVzMu7ma2339s0o=#h}TW~=xCwu0G}5Ig{UD<IfAsPbHp3M
z4PmfJLh__$dL8UeV4aV?n+UP~kk}VWP)y264KmOr`uh6bJ&H^g$z)$>u%GjfNp9;V
z{tG$jGxUe79odwKxGr@R(*Pz;Hp84j`k*LNMcwgZn((+Z5?-he_CZviQf<(lOm-9|
zqV!=e{>QMj8mMMzd1<&@s!C_5NJE}j=^~+U>ckpdE~QT`8+`-cQcH!;k1UyxKv~pM
zjebCA8d)#_eD+N7zoZ&)abrlL#q=LCOCmhMturv`bQgu~#%e$$Diw&ydjkj6Mx(Ne
zUBwQb_VO`)1HTa)^_E@AF7>%nF7x)Xpj^MmluNZIa{nLXoZ$%`eJB^1Zbw}d=24l{
z&s~Kt@Ncm<P_ENm7G|ndpsJwol*y7RLNB12jlN9%I8*ZtsYaSNqP<4up>V40HS(fV
z^HsG@7n&NAy@7;xC<x1{0Tqj#f7;8uy=H2Tp<LV5at+&GVPMN-qURY{c;{waM7hpb
z-P5#!fS#n5$?kKs6BX<<mx&f(d<olmKay40pk|%S8e$koG;q>`V(8T(T0l9?5J6oT
zxTl%IyrFk~?Lly+-sbO|$t+ThNd1a(@>%fpI*^@vraobsnXDY|q&}g#r)SpJXne8!
z49%(1Hy&eU<8f^uA)pbQzk=-{ZOeC)ABsxT5M|8)chak{PUEtC!C3@tg4^~}{h<&k
zK?1Q*DAi9!W-V;gLP*5VNH;>aiZjVgFFL2yLPW>f(iK}iQNm4#YRkmhC9#B(?8p7}
zAjV}#DVKXeU%gZ|T;ydX7LXSX%%EId3!?0<VZHQe{?>^Dy+9=8pC7>I<?db;-l|vJ
zVz>7qE*Exm0R>W#cE#>t1-EN(UN`YM-B_ilY*=Pcz$ElIIz#}$P?@nd(yDN3s|^=B
z9gD)glWqYEwFVp^hH?7VaxGK8s!<-K!iq1CaAxGbF`|a+O?;}y{+Yfm@Fr+xBROL5
z!LM=bD9uTzQ8m;X0=9kB1ifr5bUd)XkWHp`#tIHG^(pE2)B1jKW+)UI<TpsP&0c>@
zXbX)dWM%ez7DB>nZk!Ai0rL?SKJiB7*ObeaXS6*fW3SYkl^pknr+_FxcavVzDdvsq
zZqn;ln?OQ6X*XyICSVLM<PR^rr@ukeZ0S;xU0cY+k3|lVSR0Ns7Wa2;5usr^?GHkN
zE^p})`p7kaFONqyfcaH#Kh1S2@~P#v3Mgkr83Cb%vkpU}8fvC5zd_WTQsOOL3<VRD
zXZS(tOC?5^m>$^Db%yIyZasMUgtia*CIcca2|bSHUvoMhgV-o2#WIl>nLX*yN&Q;w
z&0HD1SMT7q39n$CjsyhLHwdkq<4#@8cT$R{B-k*0ux0sy<;xF9pQ^vU2nFnxUSZ#X
zWt3fV*@0(}j{&(0l>fuIb3rwvr>><JPM<FRogQ7D`nLMxAs(cmY*U{+K=lJ3oAwzo
z;S479%qZplqS?bwRQ*3Q0D-ThpM?&W=gDPm5e6r!H)>T!u6cwX4`Br=IMx5k<ERP2
zRbF$6XhU9HyUiiXk+zjvzj@oresavxAkmYC66gv)yQ_}%en<I}t}tM5xNU}rwxeN9
z@6HAF1!f9z=C{#?kYtr}FV~P=FA3i(!bkH#wpfgs0QMK2mY~eY=9hKsBf}XvnqUW0
zLB5DN(k8lKEQ9Yrg+%5sZXHwg=A>4qxCrPsb6V%O=Fmp?=Fs8O2hSgK>y!tl+){e}
z!NkhLm(RU#?&XJ9Ci+`rSKRR9Bg<wb?>%_shH%@J!J18XZ@l5I8xO3%dt*)TO4idg
zzoTRR$j!wU+~+ZwJojC&c>nZrtF?Ukex`r*;+b1oA_lE%Oxx-SyI=e0=-kCS*3O<E
z3C*3gcE_SQy{Kl^yz&upW}52KwE9x&%dKTvh~lXPms<O1OUY@IqZ2jt3;Z{J8;4#L
zJ{X<3iLU{=omc}LSOF$sVAK-j$6D-h)1m~+7vki3fwBq)$7>nuHNyF`<N{tUZZQY`
z^JjGfeZ@-y%5R)?u%Rx?VKL{x)gl#|7l|y~fD1h&kE>ALE<M~n&^MG|3X)x4{aId{
zaCW4$K)K0pkCYX#jo!z4shVn49$?LNlfK>7q})_D3DyGsZ0NwU-l~cawJQcwdS1BU
zcZqzTBuk;N1k?zp8gi#X#oC~E&P?qL_@TyLA%v`gJzoIjA4-i&{wL=}f3EyIs`m$S
zD)l*6+;>Heer&a0G4gpWKupI!Hht{_A1Q+$J+KygCVlk4`=jtN*vl8*c;kh50bbL!
zYE@Uj53jOU`Sj*5n4VJTF?u}x8j$Pd%F$P{=I!b0=H+mQSUTW_Odc0Bb^aT5)BCH(
zrfXH16Y%S)u1dpyuWmItmG(@v^!myiR8=tiPwQrag@8~RVC6?OXpnLJ*VnI7G8RZd
z#zTa1GN8o%do@vwg6#4CR^d561D%2<y~@z~{xvit8Go*fLaE5EfvZdeq?lkb!qs8|
ziV>$ZX>~%^k##5}(nBu2Q{H^D@9;Z^``%PwIet@2zRCJdd4?We$19cg@Oo2Oth@;<
zhB9^^1N{MqivPG?glKUD{4=eU<PX15vrDs|M+bdd^C)WOabx`lodN|0%KgwWa)S*W
z;~w-I?m;bJT^PDP>YlH>p8c)tV^{=+o(02^Ij*BJxyWKP%sg?Y9+tFs+wm`H@3-S$
z`V98uK`@MBw>>rVJHKuC_7SI<%Zf&Q8$h_!-!=5wE%g2`k~(N)z5tpYl5%0ow(vVX
z&Dy52Pt;>2`%?NOy<_T6cK!mp(o41Y)J`$FgGu_M4~ev;?jyWW6ae(xi#&V_(N|<n
z22H@y>3~f+U*MPu;9*9X4b#@aOavjJ4{{GpEUJ`TgWO&-F@zxQ$@{OGJAU<j%a6VP
z+3|*RRy8!_mW{h$;M@o@geI)cya)!R+!rzGeslBU$+?NiTbkA?pRKSt?e<VXWYIV7
z?%eW|EwP%5j(ZIS1qJM{LeJ7rRl_Bz`?uPnIYFye+!|?e3|MKrOaE{*kx_eRN{%~a
zX-C8w&d*)kWYD{!!ut`or?fTJ*5KM=mhDc6klLZT%itzTkfnFBW*f~zt<F>L;#(ZU
zyD(m1Ky#3H7(ydG-kNIsh(-cF_Wze=5fhKU`0}F<zWFQhFMqws?UEZU)vk&_S)|PC
z3%J%kzR~3_sk-3U{a2NTZyb2=f7Dijzt6tr>2CJ$bNcgtxLIj@YDalLfV6V8eq>EH
zNs{>craFW6xI@tWaH;;;687=`tRW#sk(|Qy2SpTLc8U_o>&8?}%c!blLg?gLlF>RD
zsT?UQFeaQ<5d=&aLpqSrN+V-HDd)G)MjgZDC$H1Zll~69KoMoz;kitQV%xaR&Fcnm
z6CtVtu%QiB(|q8+oTiw<divTanipY`a<$|$w^=L_+o>K1-#BdruA&;LDyOsthU;9U
z@QKgxutV}$WRrT3>N$Po(y}Gy<V(QtY39_Ec<nTAP1v3Q9`qqwI?`$3a;(9L=?XGA
z;wBG11y+`${HW|UU~QD`E|=C)SX!5>)x&=@M<~51@z$Lq?_swczn?unnGk4*MaPC5
z!6zx(D2iid)6IMKG@2buA7F>>nKIilFzP<#MDCA|QJ)AWzc_hJdxhMO=+R=-p&V^5
zI()K-9J4Nta~mZuPdIrp@K{k7Ic~Y+d?ww+m~#8X{G-jRt;NhfQ*K%)dwmX{GF};v
zomXC{+!%6}vwywo&dc?@i`3vwq5VXyv4u?>Y%REtt(wT{ly52KaMb*_znP<9_D{Al
z)S&BRKOHkh8P};J4uPFa!PjO#SR*eVt(@LLMGPT=_*V+wV)BKlq@!3idV{GxZ^Y<y
z%NmP4=(OpiZx3i9f*kP*iC|eVoVIi>D-^xpi{Yz4x)A~VBpfkezXOg14SVj+f%OLb
zFz0?zYb<m1*~zXOpi?BzcFH>{lne7<%9xirCM7cloWb4^mJ4y-zc5M-hJW|NFHD15
ze}lj7zTtbsZY<uJ(|;Qbxcgs&$7r%}`HA}&lK+X1yvj3r6lWR{HN#_&?-8Utu!wn>
zE~p3>_ZrA+gvdWGV1<B-eqH(kfHk@rGyjCA_|Yx3WkP?)70G#JwUA|N%hJ30)eRG7
zl*AqU)X$%ip5nWyeA`{SBu9Dol2~bR+oV9wl3EhnaY?KlK2~f2V2VXcT4tv&X7bU%
zT7hgd0py0Bpg9{zK|8^T5KW?~qJ|cD-98dlx&EQr3pno~hEXO(C7)_>LLh@?k-YyK
z;0EdiQdmq4H^to3k+TVb!q8v=f_v60xE!2*wM-hyp^vgBPil-7vkAU?8tT4YHLp{D
zR>ZI@s6au=BOcEu%n_U$1i+B;u`}XfUGq~nf1-Sn1|4EfTvHxS;|j4^9^u-o*QEZT
zzM9>9Qe*NDeUKSWYWP?{z$%7BO;%8JKTk2$djVk!vDu!8Q~5Z^R0tyG`ox1zEfkhJ
znKKPbq<s9T2Sr+VK7T;@zGuCfqDqtX%6mq9jMD@SRGi`<=ADhlw(+@<nGDd+5k(_k
zKT>M(DFV5KL`ewoMB6y=b|QnbAoTgc(fIj>wG_msl*Pw1;LPUPH><h&?A8gTk*OA^
z*>bl<)<d_~b=SVR%%6F{FHEgp-rN%O`sU|23Zky^c{fCYO_e2yyqvS_`aQ;c3p2L$
z+)Ol#7n<gDKIQEqpBEY_>f|MtC^`bW3YR;~TZADF{Y)33^yGSAXxX@~jS_p~09S|6
z+xoc7fepiDew^xyNo)H^5}^&1;T&uVPzKTm6DK|5BQC^#P?_RljF*HAYs0V4&t-8s
zjk8=9CF^XIh5G5;w2`za4IPWL<y1=}EAmE7A?drKo(Q2JL<m|5U>hzmQWxgH5H<DV
z1q3#UE|?a%LotBo)gFpNR7Nu(U{eBShj{7dNBzJfG#G8SDN6FWr>{b88^MDsqCV#u
z#`Zk*lJH?l5vAH$XU(c@9#d0c^{x*@=dC~Q%Bty$XEcZ(+<Wg}iNWk~`%m1<BFui@
zdr}M-p5~JG?o&Qfel6VlN-)=%*wBuY@!?oi+!S0E&6}`mRpavJrqY&hmpa~L@*flT
zp-z*(PMzd4*Gc@Eb^2RMk;IX8>e_VPm6KMjo+f=omEL|OSk6wZ(Zu!bO&xKnkZ^Jk
z@)lehvD!fA93{VXFR5Pm2*5H5a)f~=CRrB{^d8oJW;5jsCSy%0O>Dd!$0CkJ9485O
zN2)8Fo;#>18&inAggpiq*06UtUO*2{Fwi)vID8Xy9zbD%#Rth74mhV|LY(E`skq{W
zbq>M~A>0rO)m7D<YPum@tZ(p;#*i>bC^8M>M4MbPdrW6}NA$c9^O_1T>8WU)9~l$b
zG-v+#`O*A}XxEA(hN!^;#7&_fDjr$U6|KPa^A~h&!d>%Q6CYGEfXMnIW#!&+Rb8cX
zm$E13&`%e~Z;8ubHH>xRq8;U(V`eW|I=8f|YMi&cEaDd=V2CnFGwRWFNygQIw2b%~
zrvWFE60Iq5vVUX#X>=6np-w}Z{&g`8(E+ZG*M!o?v<igyDiHDlMe6Oh$saPKV_=%M
zmAA=lf@d|s!AZ?=<@4j@b1Np2zf+#}AHYTYJK$$iewU;NlPazy9kaEH=D_je2jB#I
z{5VE}1-#65l+Oek0akOYO+&>oaB@)?*P+p~3VBKe;?R-~V?lV`QMk0%qmP(v4TWV$
z>y?|2A84rWK4%lstl+{a_1SYCFt?3!kuHl^-?>KRqSOt?53IdMn7wA*X0-x!LcVfy
z^1yLdcMZVh)N9#QwR9*(JQ<)@&>nA~8lF$%p7e7v$*5Y)WbWGlT7xiKK)+&vMWkTb
z8Yd-`#IEIk?Q36k)sDS&c5|-TUblD0Rjb-nCl?`sOgGn!pZ1jaa7wfA{{0uv?F{Gu
zn;Ynyd-4AJ7pjC1-y<GLGlZKFA$sV8H`cK4L&oE3qz6Q{y(ycy!&D&a4A*pGF*$+h
zH|*>wYKD&~8OVtwS)pJXgF%p~J6wUDsE>t6EK<PoIjvd8vj(_XO2)REjCkGZ7A7jt
zivhG-5<IvLC`>~><tQhgw-j(6_Kb9<g$D})>eJJjG6$1}pNP6HjG%mq!h%$xdXtOa
zF#{J@R1zlZNzLZ#)x~bls!;QmDXnhFQEa#P9A??oIAMKb4(t+ER$(=<J`sS(W?3EH
z-AbR`pkv*F)3nz2@b<xe8tGza!~OZ2E1Rc<^%0%9+HVX^pD@W;Qbu(P7nqzvH^7H!
zO!!ZRIKQofMSQ4kfJO$hAZm3aTwq8;ycjy7@;B5MVe-nooH=Fwn;)684I!aQQinW!
z35&cy`9I3vM6K13aG3jzcDB2_>o}XwWUE_Jxm1??Lb>VDu5RTryRly~B*1^WS<V7x
zNVwcAiBQjNbAE8G3*`YVg-rauDq}E2M*-ZTl=fl#i6{eP4DIW8D~~*4$qhE%|B~{^
zOUfT<`%P(Z&G(yIN`!%wEG8O5;lU~5)AYxt%<1g>5xthr2k!gg2Eoxp0pAa)Dudxq
zvZ1#++q@%wV=cn2UuHEf*IJU|nh+NMysK8Ye3ZT!w;|-c2KUwCM!JvREc|MeQhD_E
z@oBKb1jRyGZ3(S^<oAV_@j3N%crB|@UgiZ6Cy)L<m5Pd{7V~A?M+Nz+?;`?=e;*4W
z|8xUZ#S!(Fc>UA0;qO)}$woH-Q(ItkVcF;gI87g9njhXYYD0`FgIIn_z0^(^t@Qth
zHv-yeM288xPSXbo9xvh`DV8;0WD$f<#3k3%MP1=I@-WF!X@h<6no41{_qk^+4|&-J
ziLI+nU2Ibt<zzDTpQ)dS4?L9m@V&aaYm^UHvsFUqarV}Um3Q5R`Z0|ew$Oiq<`TAE
z*dVyVIvMYE!HtZ$<ad>S4Zf3_JcW(PW8Y!#cMMEzlAewYOa*y+QTdFS*y<bZypzpi
zV`#wAc(Ln1yg`Q$b(zs!V~r$2Q^~Y2L}Cdd0WD3*37;3ih8Z3k)HF-zBt4vJ`gS1t
z4f+q2>*?b}MO^FFOBUnVyOga;t+I93*?=O~yFoF#y?VWEb^B*G^%0fnYnlva$jMFW
z$xWZNueRy+Ue;}OO7HWfcd%FK_38z~+1K5B?{#MbY@7e+cG*`i-QyOn;N1GR3wKT?
z56H<o3%|`Tq%L&tS-RTpay!-e&-sQ3+K)s8m1Cd^A_%J%6E`jBfPW@`6DdUYDsFWv
z4y8GRK!T@28#aS+jN}B*b@nt>gTAixp-G{0z#7SEf-2W@ZY5*?(AZ-kt=$`fjUfGZ
zCbN|a?aRFBcqev_!j=A9<^SNYo$0jZD&a#F%J&>ZG|}_Ie6km))`HaDue4Ng9SW2u
zNl}$`fXSFG3(^ug+N*!`IZHMc!%)aK6qk9rV=<JuI{bUq5w#_BIrw&xkA02}Il3GK
zFqn~1sa&Jav&)h7?xFIq;WDsa4;3ftFs-La_h%51hLeW%G*M)ai*ct9iUQ526zuiU
zm{7rh|DaQ^dnKp(!>KtT1=UTMeb=Hq^?}vxu-y8Ni8(DviyOFyYrp>&<=tDY2BXvR
z5?l7Vj{jgZv4U*0pclDKsPF?e)xz9((8)~i+-h;SEw{3QzkGkK%#aP2uIgS_?taPQ
zG#bR0NBc--#;S>9n`CDO;iMdb0%hBQEFp}}9`OjdRTYGhN#5?Tosv-?b+dDtlO<eE
zS2UH3y7UJ0W&O!I?ThlyapWQoFM~Y1TF^qNs)6e<33X{zO##*sB$$Ch4uV2U>RIJk
zwqDo(f=oGCQb(|YA?uBJ_2ACv#^~P0ExnC<qEYc`oa~{Ky-}$}c{W8DwDc6#Gh~^;
zQ&>umIECv5cSP|}?-ty*F)AL6;vt;uiEhM@8(vpcS)U|p*w)Ft2XftMvU_HnWXW;%
zG#;y}N@1jjDj(Z?-B4qTPSq%Ug)bK=B`K*iH1yzpMmTX1rc@tCSp~9`(2t*0-d2HG
zlGr!y?j`OUzUO{Svy%fD>}L5ASl)qb&fQ2*X#%4JS;qnZ`c58~%qyO77WYxml}E2P
z_ZsXh(O2wrK&#<wLzf4|d!nQzg|BEIu#cnB0+#f8;S5ew`Q!=6aAuH5AnCZkdvSdY
z*agz5HxM}vb6&ANL@r-_#YI7-4=;t|u>+rkO3T!1F#sUWWgWb8T1dfrS+XD&6_Tbt
zs~gPTaKDlL0djeU6&p&x<E<WTUKEZASmQZ6R{jgl=C~Nn#I@No?IYZyvSPSLz4=y`
zczO108m9YNP<M~&8OMA&azy8l3cUT0zJs_VFvMU^vgH)g7qA;|scr0LZ&)45?;IAZ
z16aVyfDlspQ~hFcS#Itvxm~%-gx>6eu?KId?QUfMVWCH?7J4L=5JC)dQ|TAFm*I(9
za&wn;XO}d)opQ)G8ml0UZ=Dt>+G);>1ALrHv&e&7330If)Q4(A2;M`^pxF{1HSD`t
zKQQ>m<Q>9&yyb8oK=y@_?2-)kSCnG7iFL+6AktZA#gd{bG2#NWkMOLdv(cR=e#E*#
z4|;)kv+F1O&uI)B?={*09WIt_sJQQ%VzW6Q#6~pNqqrZGpqor7z47rYx-VMO^7tRj
zNO8he?y9Zqg%w5U%Pyj-r|0xv0ORC@29j(j3}$NhoIw2J-i9O6b5ZaH1==VYF_h(2
zc#6{@Ed5C~JN3tt8c5{7<Bo|ZxRau=Vib=FT9M`{ESfx$viN{fCk+OUYZRpz-AdAh
zPM^}}n&?vcd`?HPkSx9h{+|hQsw6+pkv%7#9Vt)}!5|WZM<S`v2uINDhB>uNr2QHq
z5?@^=M{z1y>~Q+9N=$UIgm34W%f!ANiA0dMJQ!3G1<G%}ewny$vT6zk0M%EPDM9bY
zr|4V1&9;AzY$D;#tfoW_l)lv8$V!@iLVP8=ofznzM*J6em~K!c*x+r*TLUkV_>lD}
zmdSP6%<7REfV8`~hfJh0{N;3Nk_<Gi)~6nlqB);%r6iDMpI3Y>BAQLIWO4a}=m6J;
z%3b4EP~T1z#C9sw%64{6|Jr5993z&BUW+8z+&RGl>)sct*_(EQQS{3}#gDWxFWSH%
z_@M((_Kbb;5@%6Ct_NvnEEe;hkD5J{z6L3okdKGSzjIl(T3qACI<4ER&NrCGhwodC
zl1Ub6nvjtuxdq4r+XB%Jv)Q)AWZQWaQqRbE0g^;v=<@a$M0<=U%A+#lBQ^P4XTyzu
zkYsgQq_*PmS)h<4Z4eZFT9YFVqRBe|+-x~#1=V!Lzkl@f5r_!ukaNf=mvome=wVgV
z6w0gYTTbg;P!e3HTu*l%!LYx?W!Z0a{^5b&@6qQNFEKH}Am<h>pYbcFb-%@>T=qB~
zL|K_83T&J=ATzDR2~2H6EGKy`q6d)iWGwX=$C?K;T7@2^YZ%fs0X+!a$*TcxM{<7z
zteRGQ<EKZR)+;QoiMzWxa%6{Xoz8AE2wV3>qjPrWN4sk4<K?p|CyuGeaXfp6%W{R)
zIc{Tni&N_`&(Yhg7SY$xwy0#q1&)&F^oq*5#_onmFe|M1=I;UzQENP8C@Zh=<6BoC
zFOW%C70@r7om*Wv#^<p+Bf+vU<C>?9Irv)sV-}aw`mnYzTw>Qc-G^<+gC#m6dA@}m
zfwFio;&Qrum9e%7i_?9!4}I2#HsB2aq$@8ad;s?y2N$e%AhgSAvka1fX83Yi*;Faf
z>w~~3?sHo2^S$}qds&gysP{Z$Hz=?40qSGRfjhm*0_q!f$GBfyPemiX#%cXarQ-oe
zgC%RN&O?v6A5m_#JDp~>`6Ywp5{ql$T&ER3Y;{>KqkD1KIu9}*>E|UK$_s8iOzLt9
zN2fAEOFU#aQdtgIyS+Y$uP)LJB07u$%G6<|;t25p=hg~KAH<;Or@;hZAin>l@*}<8
z==_Px_$yb`I7as)z2`>`qd~9y^jCb${hk%7dsKx@b6VF~Tnn7m9*awuXt&#)%A(jJ
z|6&Kb+hw;pQa^NAdaTX`F3UP#c06Hm5idi+B<cVdBOKBajo>Mu5=6qoB^w%yL)3)u
zkkZqM+r%W-K1il8XRytw7nBFt7t~IQ&SkkbW0vlxEB%O{556F-d*Naw!R}P{{`36N
z&TF`E6Ux35aq*Z8q(VU1^gzh8!$Uhya~?*9E8>Dl7Z8|;a0}POBXj|Px#|T~Milvo
z5hHvbi;F|09j1pOX9dwO(A80&WcFSic{8a)Nrxjrm~(VGaQk*dly^ex&Z{Gn+0j{d
z&B2w;VdYna0{G*%?$-H_`gPxV{a)-%4x#ros_R4HYiW1x667<pUlowgV(ZS)`S<#D
zE7`ec%Ym!xMx(rRGu?81;iI4#3ji1NCIfYo*@KAIOF@)Ib_*Hy3wA7-3}KX}Zt?qt
z9&D{fp@;L@_&Bb!#WsuCuiV0V{OZ;WkfHn1H;{abh+OG2v}28CD#sb}QbHKm?L3jX
z!nh{_Xwg#E0P)LFgB0mFuJctl)YW+EYp_9H>Dmej$o&8wt!~rO36=(&v}vX5oHy;<
zVbRsh+HuL;Tf0hbbxw7?P_Vfg$?}Yr8Jpisgm0Z&eCzCsdRkx4FPqY`xO%o;-xTYp
znov=d@0yZR)KcA9IzcBl7fvi|jukn@<P$S;k6b-v)8tC8baH?V0`cI<8g`hmf{wcx
z8~nHM*`ThV`JB`pMU6!{X04!nkBPF`9)Kgq=i!>L57`76)MyN7>b`;s&ZlD#VHl-j
zB+0JtlS#VD($3U`B@O&zZ?Rfa_aT5ZGz1F~f;jkVt5xZ-dPBvH1O23EAe0A87qS;*
z-dl`$GZmxK3!8x#VEZFpjnEy60nQfdM#GnnK9`T<o5fyhM|M#fUpO87L^c!!9ZN-4
zFBLiU>~Lu*aY~8?k1Ct7A=n9L)*<O1U^v$9L0cIi(@fONMU848Kh#BZSd5UGE$t`4
z#V6Ik!KEsgQ0o{Xl_|9Y<{So8*u%hlc<9DDBzdUA1l85h-c{q0?*0B$Go=WWQlA1~
ziM%6}KGMWN&_nt0PwYrN#kL~1Ad<<MogZ8vG$_|;Z6>S1^Z6S}|MbfLs+_L8JNf;)
z-j{lQQ)!pntk67=p8<Y?CQk0Anx5!&UiO!>1c%cATyAmupO>UQ);mow_U#fc-LT=%
zp$!{^BdHBUUPjitmg*fHt~WWclb$jyHfGhEB5kv4CVpu<e2seFF`{;^Gq%D|wf}g!
zS}TLY)srqcr3sASzjk5#qOWx{en~DHhiGl!#zoIqRidaE!0CnURL6(Wju4~Ih5plb
zwG_(MEMNqrlGJwswm4A|bi(@h$w>`A!M6K!wH^l5XaB$hd@MOne@J~kTz}he{YTgG
z%<aLAtXb{h8r43d&n47mxB^P(^sOQEj;iyB))>~ngoY}(?Q~7SwhjG$#s=VHUVbG#
z*W1YpI0_m?>9N6Go_Wki;jlvrnm8P!=+1@+76Nh-s3(StCIpn-$kIYiB$TH`p18QV
zwym?HdUEPpXQ=eYfyS<#liDi$&bZAUjm=+U7d&&yHe7z_+}(HQE2Z}`B;$0p&F$O$
zhw&SxZJSZQ@N{)<Xxnw}+$y_Xw^b)ub}sVeUbklb;U5Z>+qSWXb$;1ywm6#>KAqY&
zG~b8n-oQPehwJ|3bZ%7jTwm54U!(4?W!LYSFKGxVUHO6Up04(TqpK;`oVGo<o*VLg
z0(=1JVV7lk9S$Gp%+V;;7zRjxg8XWfV@<0gJZ8$P2D=P88LAS%5Vk>Of=rBr;tR(Q
zFcbo$NG~Bz1f$VlAl3^l4%9OUv=0ShQg4GztZ+DNaYIw$vZ5J|iMKDBxjPbw73KJQ
zsyf2XfWe?M<+@#giq6Wg4PK)zCsL<M%rk3SAH4+c6oNxR8@RA=d|7BlYh&xU=$1({
zgo0oI*bC8saA{6d5Vj>2g`F+Yl6YB*+vO>!E^f*9$7YljYW;329|xpY(4Z~IkAk-a
z_kT%`<<Sy+)a&8WFj6?f35G)$R|t?7d3$7<gxaH7#LPgRXlgh2nHpk!1KT=F`KzS2
zicnuNgDqUySrKr#b4@yfA>a&mRQ33CieiDt?wN~jpXiuTbXlUw5VtuT6{47FiPWD}
zXf56z54A3ywax1GYoo<8WB&Y>;_3pA%iU5IFNwA|!;2Ez1R<IuTncY6RvHKv2s0*a
ziH<|V%?J_ld`9PE;QpbdnpTXA)yVa7jpkdLM>IddD5<L@Z+Hxn27tB|df+RDWPg!5
z;JMYMjd(R_^}PcFfgAR43$c%+WuPmnu@CYBcYFm93WCR~8*1xoDc2JPfmE|va%zr+
zL+}XXenW&k8sg&&?7c2d8MX1Q8cF~QQpN2as^ZQE@C_cr0Pzc1&G^NPz@Kpx5pT|O
zz<`kV)WnIY=enlNV&89%N5cl~L?q~Od)auMc}yhS-X1C%W7Z7_qB&Sso9A)otqpoE
zEA(rba%mzVcwEMbrB@=A;YU}NO)$FMfE&L`h+PG!ad*mc*7TaXS^AJJVw%Rnp1i7>
zpvM!esmk*_-rmk3tlPCFyq*0!TTS?vJE{>C@<3rt%?Fc}CG6hGdzI^p%X959R;c{L
zFW3s0fAis5Psx}f_R*ciC7ve?c~-BpI2LTav^f}y<u=WjP!nKgk4bF2y{6{&+LZYH
zd1cMA%_cXOEjsq_{L&UWZYiCQNXX)6p7Aa7t!wz%1^b%vVzIm?z6-XnZOWeu?1G;m
zeQwkVhctb*R*BCJ;4J+aYsK*RSPIOWJ({aDw`m^Yayr%o3LTNb{MA-RYY0QvQ4>B*
zw`4l64x^)v##4Q?F2V;4LfKF0Sm=c@+#rZm^UT0HZHNyML~#=J36U|(%W6b)I^y=?
zHLlFqBSwX&k`Dm=r;bqZ#kkMw^~KrTv(6f9+Niv+el-g%S(1-r$!v+<Trswu9Wwwk
zw{*#p^0D>s>7Kh3WUb=SV7$E}o|_k+G!=r1km_ByP<S<9UEK6kD)3a(5=#Kb%})yN
z^W(w5+6z}(E2Fs^rm!b+qm$ZWxw*0SNzq(3dud&Dg+;%ViOyg?EBZydmz8@vDk?gT
zEMK1bDf?Ktyu>4h*e2z|Du1+f`E#9t#`?EY>&G@U1m{_5j75_ct(zUKsfo@$hFx7S
zXb^w$#-vGaOinHOa7S~O*5lE3HE;Qtj&*Lg4#$!ehVj2M+q8r0<||)JerOJ!j&(iM
zMK77FSQ^@*{u*{rxjrm-OW7Xi?70uo<?_E^J&U7vk=L0tEDf$|xSSGCPo^0i^JJ7V
zte(+DVS(}A!PqArw=u=oo$z_~eNr3{e{M3RK4o1dqtW|GiC;P96j)CD?_P0@Q<+v#
zNGTrBg*IC`TW$9Yp2bq%bUSS2!g(R_T5|D$+?t_HR2F#hgGfL)<rV}F(%*RT;ReR9
zz+ao6)yEmc5pwq?jx{s=g=2d?1y4DV2Yt`8NPumBy1*qi=o~-DcPVQiZo5NIIguG#
z8D!to|2BJqf?NJwp~>v{HB-K0wOWeAIp#<zE-2v$1Z?&W6MkX8a^!ST^(oL<kk2!$
zj~dm|kTGu}4->7Epm2OFQ*I9m#!Qc9L?LMM6-_~5IBd5eL>>xz!Dh2>nDYC<y}zHb
z(QdT~>2q;k`h4j$2TQn}&R8lLb0XJ$;z-}7dnR<Q*5~BtS9eahXVb`2;(Zg~0s7>F
zXk8b)N`vHOY>+(66W7&2?#I6dkHHL~`(x$1idQaEypXAVH?W0Jcq~fIVG9+f@;$kN
z%~gEL{cI8Yi}F3iDYh!FDt}_*mG?F&zr~GMh&Oe!T=-rJ%6rnUl|L!3F{|<q<?qUm
zS)RC8`LXg3HWnfX)?j%rXba_7$do366~`kZt2Epe<CL5->;M8&)FtB&u3$(+9(5rL
zeQ&B&e2fj;7-1KRy@S7oB`-C8uJAxSwczK%IWtp7+2icmi<Pay#0zh_@QRz+&1`9^
zJ%aM|r;Z347Ed@bfxYqM;V0QA$}Rg?4|_TF<N{&pUs6*7!qbomGviLRuR((hN<yB_
zV0VG=+kj;TI)v(a(w3=QGx@D!WOCarMrD1&s1Yd7y~3S*XWw(m2kvh~0#bQSk@6lA
z;648MB}w*rao+dxiuvYyJLU`=oU>!c9O?WyJI)iX9N)3`t&5qhuVZ}bf<Pp~9{v2G
zhdzHuxZ$4MF=KM?!9yPn-@YSjzEGqG`jw6JL#fGl;$$K~)YMAq2xhll{P4vWKP)`V
zck+mQL4)_vPw9Wz^HRX7;K6rXVY$Y@Y8t{L+|V>XQ_d6Wmn(Hj-SQs6$OcCFe~E{c
zSNerVQ!{%RQc0Z}$2?oURDJ>a2#Qo}*Q~>LywK8<DjcN0g60v{08AejII$ub+$T9C
zg9~%Pqmc(ZBY{YKJOdj6-#eF<V;CT1A{6S-pHu#ch9blo<ukETzq2l$mm4eUY}jml
ze&zV-qIAQur5C;Do?2F={7(6(v?AfmU)Ip_-aF&#mMzrVEM-LtUwv*}#gw@TcTPy_
z{DaWY@6p;H4=j+&O2dQ7t)CyZc`UL{Fho27gP2#?Sd_o#INQy}+}2`e!ad_>gdB6{
zI-KTa$Hr}Cxff1an$+uW5iSZw4Eo9{ov|>G8!_nea`pPipfj+hz0*CmQgrCug>{kc
zXYGa?Z`2kxicj6E`15OX9eZQJE#|y2!CFK03%ehj8Ys`tx0x!O(M1(A+-)S}r)_$A
zPSKkn>#rwD3i~Jc)cOV<8qUMsU1&kHuRxhP>%r-|YLO!ugvtih7XGJ(g;QfZh9nGX
zTjz_oE|Co2JcZ%vnp;%LO5^jV=@%c^APNoTldpTi-5xKy?f$Y@yT?*dnE(76;iBqB
zlWe<F>AA}+2W*vheDP>uzU>Nwqjbx!6`)(hN^2y&w@AzMTBl|GqfC6<Ur->8WyRSv
zTDY~e!s}k|MAnyy=b4waS1ooI%w<iUfL3-xbCu(E`E@XG$-11BsEg-F8#ZXow>HiR
zR;+SO*dYA0&f5?kA2b)*++*`QuK9V9T<b10b-8nwTHG-Y{MxG3*&&jj1FcC+({XaI
zM9o?Vs^BA1ULk_<1g0=XBDofLpaINB3yKeS`5s=<b8O43@O@Lab&Pe(Oeg)5%~T$-
zgxbf>diA478xtCrU2s8@5c*YM(b=09mCHJ1@nGsier+8RNM_s5)r_@qsMz3X54#jO
zO6V}k!D!L9+F&Rix#CG%+RB=XYIBT?!P#8T<ea)S9s5cb-L`7d73{9;_M85sm-&jv
z_}H~SVUvwz3wsvk+@mZXw`0QufsK_av#Sr^jgtvcM%@vOph@R%7_Ax;KC@etyNnjA
zQMtpSH@N%N$TSE;b|r~e$)w%olKM$WGZ3Qo#5*;jEcekn)BYgDaBv7>H8_uXh1Ae{
zJa!9PPH$(cERxGL5TZ9p{V_Yk%ax=ZuS6duGy}ktm-#!nb_N?L@j$xCl*xf8bQ&tb
zs6q+-(4O=Ue`BSU*MPrMqZ!clrQb=qGO|VuX@Q^v0biu;qautdm9QU80m#PeDxiVz
zPINK+wYQ=@V?2T|Ehdq46DbrCQlWCO#3yq}3co{E2Q!QV{0}+^!sc^(<*o7gmnN&0
zE}YOhXHLy6H{Gyx%Y#$b_Y{_|Tsvjg^4i+jkqHNtck}Yc*Vjke#p%-?W=K}ZChXbs
zY$y~i#EJZm_YNP*&o3;TP?Tt|S-$n+=cS8Ur%xYW?=)#|+O%<uXonj&=}JjvPC|bm
zV(m6@Pf<q{E(#P)ukMBKrWVqlHaWPHT&4tPYUgr9IR2m1xk6oP*Wkx{gqy_k2HzL%
zK>dj}Y2cf50B^IwAE*J?a7%H$n!K~LZYjM7mNR)%s_Yy>`N5E)J4qi2F%m5mt0SXM
zor8iF$!i_X0rdssLj)>@K}s`2eHL0O_PdbJ7xJ>>A+I;&8yqNUX<pdUBF#>ePj6Y+
za<HYeq=ikZNC@BCm>gV{+%!dJw&<p=cyq;6oyDwUN9gyKlF}9_&qwc3|GnB$qRcIA
zX(?sjD`|11)>b6`L}!0ew}}ejR(4avb31oF*RbEB)0z*IlpHW?b(YjknWsvdo3V~E
zB_*HGGT6F+6Ap(^H!EUQYzq4X0~(Bn7Q><1r;X`QDHbETqXP#FrGwZ49PHY78<5*U
zyCFn_R@09-Qdhbd$T*$Q!iitJa15%$0*IWB5o8mJ<JTB&$4ZLdbsPi5hj1Od0w19z
z7E~Tzp(O$KW%a}Hn7Sfh`J|u>D``SvG&-#UCyDqBU1_L?Ng9u-|Fl@2J@r^%K(Fvh
zd`&GVw~N-(5>(R$KAy_s@%pNDT8NZXBLEGcO7(H%#-u9afA@HX6X*e~5JT`uFR{>Y
zn9CQaFjQ(<;fXf`k>quU4IS^NCcv$TGUNrs+ww)2H}FO(BWbhftyB|~y$$E6bpy_+
zX!Udx|32=;qRHQk*P?}}QPVF@w{yNM+-x!+(XYHrvKbK<r`#q<vMB110nq^$1p#gj
z3mTBhR|Gq2V8&??e|S;Y6fdwblfmP(SeUgi$16#0Q{2|9)oZ;u(Ojd+37*1{<F#*e
zGQ*f0krn0!^8{va=!{y)q;oLl_B-5+c@6qFvmm*p*BJCxHV7rbkZdr?qQUI$G?WE$
z>ai%;b4nbs!f?=Q5d^K)q_c>*v+KQ{60gYe^DIu^Y-DlP>OCO|iN<89s6sB5-1iym
zVnM#X#99%TELtYIjTIMMR^~IA1$<KL5q*N-5WKb`);=qBr)bg|1Q_~7lgPd;7#v#J
zAZrEDTH-XA9y6Lns}2bfC4Hl85pD3b69r}zB&fvn%x)DL++IQF_eBFSeQZUpV{Odo
zGZyBTEp*LrmrW_E$<4bv;Yt*h`ekDwgZC*jS{FL<{hqo|O`*Z!6wL4fDHO#*_oWg4
z>IuHmQqk!)UO2X++$4eUIrDYM5*l-#XEjSgZC89k-G-uZlYm!MxT;}^4XlRA7!1}I
zI)hGwRq)1~cDKvecvf+9YiHe9Q#=$7i&kc}1?)j-4RbLqs={od$)Z)}GCg3g^hSZ%
zjmQXw?iQ3=oqk(R(4J>3)RoF(&vU!S-?gJykjgKrh_@8Lzo2byev#KRp-?X(!((+V
z6DQ`l5Obc8^NT$OQNPz_5GCC>sHw&k*vbk7(PUtGE^j_7DUxhfvyWK=vfgKdQ;CC_
z4Gx1<i;{@i0?8$T`-BS)(&3ryE}KCz2=I;3ioj%Q37Ac71qM-<Gk$DGp7y?R&b4~K
zr(k?;E@EdUtTBfq-xUU1MX_jWuBz~N=<RwzHt1^Ywy80_wj!t9m&aT?LZ0<Y0?ug2
zB$hY=0$f^{&HWQSQd5gYSPKPvgT$QuCWjuLez0E$Mfq=nRxj9?#iErgGL#Btkx3_B
zFz5KZUU(8aCD*i|UFS69c`=O9Nx7jM##$^G)@Fyvx5#848!a-JC8M*jurutIMT@OO
z>o<E%whpVqpv}>1Lsn5+Ry!f?_|MvDg$BRfn@5?$*VcEqudChi{8_t8JuEL+a<pT`
zuC42vUt3f)rC1OOqiA%!%bX`it@9fu@0l<~4p&8TP^}!3Y1$NXK}~+pWXr^vW2Hiz
zc?g<_3LuBH!E&$?9AHe0kRd$|ZI&2|OJQ1}eQN4qP!f=dkQ{?T7#v!mu3iR7q7%s#
zi_=q_?f{DkzB=_;@NAN%WThb3>u=n9WyJQ>hX-0cA?0Vv5w^Ii`i6tMV^PVu?t+UC
z_Jvr5_|6+YT{LF%je~#3f-cN{`tupH_ivwc(Ucb3d*WecaJNt2GbzUfQ)<!7$sH|q
zrTIo=0X&*5YZcLxTF=Zy*UmH@5pJkzJ6mVH_}wK-Zd=}AwJ`aYZ{0KDA2)x}Qt-+9
z)Bh}<%h>gIyT1EoU{ZaHM=AW^5oXRwjO)y;E7AHeyucdjWZ{ME*T3>ghR@-?jcpVW
z4%#ik>kNU!upGeGg5pOZSR<Pscv-{}Q3iG_*%h!gQEO8CsG7hE7mFz6F%MD$M+B}&
z@;aek_DVO!n-<Tk>dDV7aoP@*b`%$t1uDmFd9b@9xw$<yZDGsdv%I0M2{m)7N~-g!
zYyNqE=jEFxvW@Q^-Pbd-^EzeVhnwwP=@TZ?346PGUVWM0<k#u!_JCuiKV0Zfls7D?
zC>X!Fvvp}p)LP`Vx{KpAq4M%jOZl?>(aAdx9euaUzWIktzOHj-&p!1;8K4uifv71v
zxkq{zEKdX;X&q<<WbcEHiag&5p@b_9u+Gr6jHR`{L2JZ1BjJ)x3m#x7Tm~*G^#LY+
z5S4R1sYYLcmPLH|;ZMBzqTeDFc$D9ehL@e?EPUTKvrW=!y}|0R@^=e-hL(Ff%?&f=
ziWjU%c)umJ&6H;S#8+789(WWV=nmNOZ2MY0c(x=j8vM9Z*`xf_;q{bx-A02F%+VRV
zGvs{@D>iHx{LsP1vHhsl2%Uo}rJUj=3MGkJPp&f=ZD$f-9aT6N&ma|WE9lS}3`i%E
zWc!h^?UOXb>krbFT`MH%gxg3(>+nr6DiiV5P;|-tzzYOA47cpS1<2!~fyF(}ha?OP
zCRZK2gor~V;Q(44@bQ^A8UT9~*W~@F{NDyd5KXM;t(XY=i{anpf6A*VZUm5O=Q@^L
z*9nX#rF;K>?BD+%489hnY{3C#jm-%F>`yBuPOJbxXuxS>w;fO(C~Yjx^Rwi}jY`rl
zcGCm<)v^MgqaRsv$m2H6=t9H98Q#%*m|9_C%aji}M!Fgk6PHcoe>es}CqOTieqI_e
zL8(lDuirhmg_q<tWi0K*LrO2d-V2xw_VRE!l6;POG-1#+3`sCPpkHVjuxwzdyuP9=
z8YRkXISeY5#S2^gMJ>%m{?>(KDqv)h7LOt@AF{W-)4B@+;8u!@a|>CZpnID4+SAa8
zIAn{r5x{RF^mvV$_zVOAd10d<D-=5xC!8OIfrC4%b3l;;w@BhK8xW`qUQz}NSiquS
zDm@PHrSOIXdQ9Ka+ur){t=pEWJGNP}EALorR^^??j3MJ=$~#t@MR^DAr-sKKGsu#i
z72!u#^q8U0@E9BiZ5CFP{!uUuzXorsv&r4cEAZgbF8|zO`Fyz+E?%s<TedmOpMP$#
z<5yO#{%SU>zbdcbSG(o&&&|Bglk$({OX25Tg|;TTMr2LPDIhXlMtOEup548^h_lH&
zdpLXsaRSVokLw$sP=5Yc&(BUGL~Gw6ESRz7%4PkxQ>xbO&oSpW%N)+|!lj2#+<5+Z
zV+yRgzo0htPxRf>qI~aH`v4%g`<WO2>!Md!?(N@XzL)lBg)w6aX1%)o#uJBYoCVfm
z%xP6etlEi7sW<o(=1R}enugKySxRIfQV46aXE1&_p`q!l#a8$ZkGo@<!3166mQD7Z
zVJr*GWC3}^d$rxr4NN2tD~$S52)~Ha;lluQ5vCtN7F4DODd1b+u0&9PP{Sa$hlWEK
zgCY&I!yp@myxMM{VYI&n<8r<8dD)$qxN>Z=W=&_a)%K)2*AEzC$IqMksX+b5TtF^8
zCeAnp+)~%E{(v$$mHYuS{y;!#;|F%V4*!0a>p9szCWJiKgUMh#Zn3@!$JaXdpSJZP
zG?B&B2i4aozY#Q-{on_f;3rR>9Ms(?b!slh2_y$qj`P(N2;c?;2zs(MhSd=oOv&el
zBLy;^Lg_<SAY^d_8gMPNO42r8tVYl_Bpi5Z@u`5(519svYEU|8L-QG=7!pm8N<#2O
zA;akQ_>TF<%rZL)90}qXzEKUKL|+0(0)N8o&hHvG!7m#9E*o@Jk~6Y>%8{*S`*Vzu
zO+DXe(Tb9-ggMP#S+?ulwKjWReQ9y7MbJ78Mp>}xv^gynr^8eCA9L&6LGbtB>9r24
z-dR}E7Hz3SJPw2jw~>Y7)mriM#QUMT)dgdUJ*_Cj{<CCTEI&t*-Db0A;iO9FtNf8k
zrM4Wc>=LCh6WaZLWAU}UO#2PHSJt|~Z%U%cQ@t@auVrynuFUjBO+B5(6D{UKgWz?U
z0s=G3j)HJg?UI<Ot+2AdAV`7IrENVI8f`G?;GZDd4CGp>Ir&|kU0wqnGf}-tM60fc
z<y#XSl8I?W=Hf8~P)N3DX*4F96|wY1kmYDHBE%eyF$AtlF{@6Tl0b;`yl~nkPhTrV
zwgPB^JTCbQ>LFj^rFb=Z64&rfe53-SSQXKQZvz^!aF)mG?3lAdk0gb8I!C@W|MBua
zZr(Vjvhwu}n^!<e>{U)4{)6&ctD%>%!+&5=7MphH$4W|hU-{=-`>syj&z4M^P%de$
zHm&yRUsjZt3$oQ{9=EJx$NU_ZzSM_;xfhT3mq>EJ-@+Cws)-w_>jV1SqPDgN7v+vM
z7v%2#$6(=Pn>7$FoD>S)W(mpwGAppkrsZq9iwd7!arUxc-s3IZH%_+tK02)KuI;#P
ze@|Qct|vEbXHxS1%cmu-x0*2wgyz=q+bvcA&^epd3oDlIZp7D7hVk7NeBD1rw#@EM
zZ4U;V)xo)sbxf*rY6}`GwE=)z4D%P;pdoR=|5rod{c#BKVBH-E{-*@TMaXsxV(CB>
zq;&2B&prFV!Dk91&nUO0UV0qv-%{P<FQp!3MfVmiU%u$`Lx(<>Tb1CTa?Yw>G5-(P
zq+g~=ln;KjiX9zff6o7<f+-69A@L6vfmcJ69<z$Xu4*+<jbQZ!J+=x^E&v@?@YU0?
zOvf@5PIVPB6mpUkVh%`D8`dBzO=T?|$`^$eFYj5ke0Gc7u~j+xnhWVzj<M3UMN^kA
zUb%2yc-sqCY#X0b7tnd9bgY=WFj20Ze96j%tu<k<3;>1Tl*U?XtfuqamLgf}h8+_!
zlC`pa@rp}3gm~+$1@mV#I~=}ht$%vgt{vC1?|1EJ4T;wL9Ha3)<qH;w<*>JoTb+7K
z*|fd$D&3J;Gs^b&GEop6d5zPyPtJ9?#x#!~UuCmj)Twn(nzm)@H#%}UyUtoXZ*o2S
z2bKnOzVUTU1%hwZC39QzotQu34Oi-X%@r}B3OYd#e2f1Idnb8lyLsFa=dz#`Bt{l0
zIS2hk;U1<kFVbJP&l#r-raqaoUHaufN#<|+9C6m1?JPKP!7k;$m}S?3iEQ#oH~>$@
z=9>2Q`MY*y@tQf{maua2xEoOXk&0MI2F!bgpeZStP70bySg9rjz5mMssDx`zlN<Db
zFAJo~8n=`;l$TZY8sw4<G|`;bBrkJtbIvoCmGXa50f*C?QdZDx5cyN0y`aHHNF&mh
zvhkE<RLyRxocz+#iWu)I@0W=Y<vP>hVx}YahO#7#<^d#4EZ}yi;am<k#ipJ)$V%)Z
zpCxlT9LpRVeEw_1St0EL*)ubIuk#G(`;r>YUh-ua{OPE5mK`&9DipuUmut@kU+&S=
zg9`XKO9n2@*?@Hbs6Y@)S=7g=k%*B_-Vul&gsK{r23OdF$OMEGh$q)JDX;zDcIE%l
z_TGU}Rq6ZqoO|!|$@H3OnM_SDlgXrKQb<BbASBd4AoSjQADRt8MVg8d6?<6~EGW9M
zu4{L3-PNy!-BovWb?pVnTz}8GlR!Xs@$<)za_8Q2&+VtY<$0g?#~a?fTeo&Mm~b}!
zc?DxH`x)$lA>EgJ$m(ai8JT)aaqXnp^?q^(KSxXc5Yl}_x?VZ*!3{)y@L`f!wYB)e
z?H~l&@_y>lIC2ra@3FE<ZECoBQtgl_QvSnu+{;7HNy?Ri3|}rV1HoHItqj!YOaBTs
zQOq;6lt@7YgE@`L91t0VznGAs#lP_6ai3`YMVIRG>#9n%ZFN#{UX~*}%i@$PSy=w^
z?4=FGw}rF@m8q^kr^INX^Z87fm06?Gx2~Ff`T3qYcI)W88Y64SjE*jl=C%|~7;Z|-
zwT`Tr1v{NTCW9ok$03#Z7#I?r`iy8w?#|ueX{jocskLVZ2s{FPh%&xwRlg?=V>BER
z)E7Z@X(PiWRXRakq53lr>4Vpk$ZaRo0~*;O6`KZDbj37fFSKtn7k`pJ{`(%a{x7UV
zAy2V<I`FGkqmZo9q*{<?CHZrla6&25`+NTQlfW!bt0fYJHg1tMcAZ^2O*Pbqmy3<G
zd`;KD3U5Og{ZrUS$1}`l^cj-5F8gD%(fN`ObJh|da7a)u2u6zwv5CKszvIxSF>1tU
zQeJuoq+8e^-4~7C{zZM^O#dsIJLwaO%i<XSgOH!9Mc^%?UOXy?L!$vpKMd%?3yxq|
zMm!<fTR#LQib>K!BXK<vX*vX57&t(f12dY}fNo?VE-ozg1eo~?Z;HoK4AQdJ)-r?>
z#o{+D<i=-i){bABle2cbc5|jA5*b-ve`YlM<2zrLF19-WIUS$V-Q~RTMrT)d?l^!?
zIdxv)P#<}*PrjV=#A10KtBuiFb&SpG$&1CLW>yo<_GO1PtXbOUTkLb?@5$%i4rJyd
zm<Fl<d4rrJZ%`;Jm*TOR+G73v3?n9@1%RDK+cAMhvfpfl8DD&Em9|0p{MAGtSxT-#
zeZ^E*Xoj|WZk77@=-{Ct1_0muaEX3d)zNitiF8zXUaKa`zZ8{?s>o~6M6Yw2Dn~}M
z56(H5YOZLHX5Sb|?f?+0ST>qgj@)80SB$R6zH!cBYhNEJp2NSy{4}z1il_VzQ)>B`
z;+)&&9=2NO%B>N3TP02!A*IE#k@WPDLsm=0=;EB7IX$#WH2dbLWJGz+P)#xaT#1Z7
zJ%^N2>ViRYF~!hBW2bL{P8(>n0_+OB(sY=ScuNtwhd~Gb`cX3j1|k?rX?u_qR*9qj
zDl!<1!h-T4{rSk$+S;kPzt2-;DoR3ZEL0NB=<5xYRQmHC4zdol!(cTTO;!WeSfcb+
zpO0BNbCMkO8qFJhLx!ZSNs|R+d<%>o%#4h(l8}FdEp2HkV}Qk6Ar>p}V_@#LjG)hj
zkJ=v_Ax3L%6paKQ;}Wn4V8RYC0%IjBIFSOHq<w^HVTQ9s=>c!C4^~NwV7hd{vm{2?
zAC*`MzAYm)z}6{BgV9n8ze*a6nOc3ZD9u-l?Eta}NU&|*R7Vy)_aCuLtdZHd7XGu`
zOoQ5Bcy-t&l}>`}8f~lZ<p0%QCQVb!AssJVOO$gI(PoZQN%UyV)w~3JEgLs4p2M!2
z{KoJ8UEX&KnNM22+O_K|{wTkPKT6jSZPrODKfdg;kNIc$+xchd8WX>DU!P$zSq`Ik
zu)@)q0?&LID`q@SqJWo5r8lUFjDL)mu|NSNOM9M}+dVR>vKs6fm&zxecOtPyBF;|Z
z+V6k%P5#hK=JvbhWimzQUARTKnNyEm_A#lv;2!Y)sqHQ<#HQ#edjrvl13ubad{L8x
zGZ{IHju`y#$wfE|SH*wz5r5^|e<WS+yu*J=BA>DM`4it>yXt0QdWEJ9jT;Xqc3=79
z;naHrC$Bp2iA&rDR^hcvI~tt#de-;1VUdsvN(B#mK4k_ldHb6%*c6bX8lLU5{{?AH
z7|Mj?!h$%<_OiY44997OBO^{kM1)21U%4aW6n2zLu<{dDBqBZzu?GwtKZ_FRJm>x=
z=|X$42mAY<UoOI&kRr$(;7+CuC2A0ZqC}8)(}RBWD>Nr560Xph0*b!@uZSAL`nhL`
z<Ue}uUjA+VF#q<woSvyN7n!*>^O+t_#U++!l}M_~${2-Q)2opyn6k1O<yiiR+01og
zH`mP^=bsz0atQvBiif3AMw=_+p<}+5e!~pk&>;bSgj$I|YVu%U$k4#+>t@SxWk_B~
z_#Qm}0^k{tv6W(Dh#>%HhXG8Z)HeckO%Jz7l&%)2F&45DQmV2tVksg1=LfpV3bX2~
zcRrozzov6_UU8(P%n|brSL|l$5|v6N^Xw4vJPGa4Xcm2eJFEQk+E>S_)xl|Hm*{??
z<Io~-eO!ZU+VKUaKzA?7l~C8O8evG(yHLd-Vv$C6Q}?vsZU8jLBL$uu-fE!^1*jut
z8Y(%yE|hYr#z*_dZOC-&pVgY6u~b{fYCVxzi#m$)hE1ChE}J(Yx+1-5ZY*<TYOXP>
za(t10q%E?T+<f`AVJ!s>LkeP@6JiC8{J(p)eO%@n-@KLR(%hz8^PZQRs$1TA-j?sn
zv*fDs;RN-Sbd{G(EYHxT7ENLglyBeA9`uyY$elH-y~txPVVcHOU)kBTtg$?n?i*6q
z79T#LeeJT2?((LQSLC+qGiowIIo#8G+OIFJjiE^cJuvELk?dZ)4+|_BS;%ct4^+i?
z(Js6hWWs@;rGLu7*bA5<opc~oCnu>w%4;l4SA~AOLA);u7$<^sWRgm>7Bd=R6u>dT
zhgHl9*vJ0Z5df{|+=cfDW-sCW(FIO!@d;GlVnH+(&K~r$9QE9o#UHDRem|pclFF*n
zXv!{q?6Pu=MrTcYF{ZL&{J6EuyUE`(hk^yQlZqpfKb?y6$M^^MW1CN%+6-7k8)=M_
zg_CLvv#u<vyn0A}!H^*Z`9uCuTOz(`^OgK<{67Bhm78ypL@Ia9m{5<=YsJ+HmlXlB
z(<|Cnu59mELHPSNkS@M);*4GM)SB}Ac^b9OrYcBJFHqUYk+oySR#c7~m;BjnpH$ma
zuru)!Iey#dj*ii{@%6$lb6xEu*V0}2%-6|_4@vB-S?ck+cYHc};`s3sM}NA*=k+YA
zo_<xu-BR+Rvol(|^7a)g+S~XQn#0vsCFh!?-erc~oQZ6s^F_<ibEwG@J)6O&La&Am
z38_UH>JNZPlL+4@DJrlRPPqg0$$_8&pBJ7r;TwVHNFoJAV)Bz>I>JZeU}eT!<fFu<
zI4}E%)TEZyTt&!LF_}zik`}BZWbH>q%|%7cOouZw)9K30bWj%3K2Uld-^PCG&29=;
z1oofoc#Sj`6gD*#`YJU4kn7mVCvWtXhMR&O=^oL~`}c`{-ovk=XDK3=OVws66}O~P
zX_yo>7Z;;&f^cS+Gn33ZzP)eD_T$I5vm3V`?|VyK9Sjf6pC=>og2INz=}j4)Vn(ju
z|HLiG8XERjYHZG_cTAab$5i`v;Y@?%5f{dR3cN*dBLGE|L=Fj1A&fmjo_oAJClN>b
z!9$fq3NC#!z`TRK8&f-%_bhh=?E9Csk6dOq8tmlqee|cZV)-r0$jA$P9LzC$)riH5
zM(`gS?RMkpwe3rnv=Im<4ny&WYd0G04#T=s$GSEIYTb9C<Act3w@TyUF0=s5K<G97
zH%&VtrXPA|f;>fUS}I0?&_#6?AdKlQE>JP5qVK_n&X6XoB!2fm-?QW@(sbsb2m7`@
zixReEC50>{4*u?^GY=63e;Qz;EN1>a-+XuPWo0+>KRk5i)B{9SS;l{pSzeymKmQ0i
zB;|ks?ip+V^ey7&S7O9^6EQxmYb(=BPIhgL4Tcr=kdsXB)-FCR5!=c+&r{tnMu|kJ
zG7<L)oOE)`b2Rsw6IPN8JU^XoJvPLbgBxGRn!*tSwj=lp1hx)S^11b<R}!C-rgh}H
zS6_X#oiQc;O`7<}Xu<W25qlbWFleshKIzL~j$z*t{wmaIWR4NnD`4L2YrnPqaI*01
zD(+^$4nl2>UVINaq|z5I#J3Du)6zi@!<|$Yji6aE!nQZL@eAXKxh0ZicVtHR@B3Gn
zjSp-v8Z6PV>raGhH{9{yhUU7*Pedy>u$IAZkg1P%B92-|M#d-5-$VgXJ;e?$n=DCe
z%XrPe%)zFw?=h^BpU!{33Q@+-a_Os>1Gb2ci(V4FCVEfw579qGpNhT^Q8Zbxi=}G6
znvsI~g`#_1QaBW_8K93!MTsg#FcQECPw`N6a->ru#0yN}!cZ=Z;8a^-Bto~s6pO=x
z7*c{5+g)NyR1NZwTq#_KnV5560*$(uYGQ)Pv`SVDn<zvWT#!z}EIlFah+dmSEmA5e
zLqY%wIgGAJcN)SdjhHl~n&Dm;cKNhfHCdhs6+`mZ9Q0*Z*n_##h5`U3mt;%bVm%AI
z36aWltan>l&;#Rhc@#a-x4+UhW3fYG;$3d7Ri`GO$do379eJ81npEkna-B`5d4!PL
z%z0PmMe`K(S>pDp>}aOZq_C<A*-(y`REl*{wL~G6b5c#JK2N=If;LoN?QE2(($dT-
z^N;Ht*%`KUwO5%XlQJ12`i`ngvUP0MkHKTba=X)FW7e#zjPa-P7Yrpgv)<Bh3CI^l
z)HwJd-4aEP%5cK1$Y9qH;KB$qnayihHKnO!ZnV-Bt=9Sv-gkWO6b3#@v0v&`xom#3
zC$&1G1#Lp1bvK(+N-IrFYNTu9bw)0Av01CJuyfVs6a^<{NJ^T{Z`NtdY)G5>XitGJ
zoi$pudPDZm)HE%NfEIVmVGD&ArRHt1Nv4rN8DdzDWVt-4x%LjZJjX#u3z<CG<O^DI
zbftzCjXW~uwimL%@-8<NOO<`2QnTE}xh3KpCF@f?n9sifzmY}>`*aqQB4w5vfl5lO
z?@&n!5M@KpoU|9{F~0l<@<}oBH2_2afJ{;@K|2v3{b(cbT2UZgvX{Y56|Djl2h|qg
zD*=84@*EBU@|w0IiZG;do`6)O&aSAjU%LW*xi~5`*=WD6$z3HjxRy3=j)`STjg-jJ
z=S?ll7@H+kWgCo^NS@VMkgAsJEUX5cz*@CIY4<8+3bDdMIu({2mnXi(XCFFZ+~Vl6
z!wl2ntZOLUw{mS->hPLIqc<<j;f$<*ga0@G2LH*Q<H7RwVeNSab+fn9<;#|BF3r9-
z%j6qf*AWdC8r0_W0%&VSMVf<UIgeec+Lou*C{)>2qfBaKQaA;$T8u`m(MdQJ$usBV
zI66j=P+3`skQ-(!E;8zBTH(H{918I?JvU?ZYlr!N{(k<lKM+UH_&e4w85VOYWPW4F
z>KH%rhJbUpJ;getY30UyFq)l<ZE<0i>=doWc%XsXF-Sjw(8~ibR#>E<_B9t)v#bTu
z1F*PmR+`7aQPnTjnJvXM7ZQ#LQWr-Qb-^~rM%~oQg@6hw55kfW1k@A^bZoGisUj9(
z;NWt5_Pc8C8?9YDboA=+L(I7~s{Km8-#^>$+JEy?ssk$j>}J37K+pc0_q*z|?G2r)
zN4G3fjk<@OwR&{(QuUZ8>XrM2I<5mf`0I@2nObHrGh0$~>r~j$jPs!Q<^#^U$Hpj^
z4IjOlyxw!b70Wd>bgmiQv{*al{u<Q*rGIw7Pb)Hddd22B^oscFsyjATgBx2jwb__=
zX7A`VlNue_^+J{8dFiR{8?9W%Sz4DXM?YHEf4|9lan<Fd4x70qi5G(*0psrw<g1(@
znvB?$xrmp%74Mq9E&+~9XAit~p}nHXq7N{5>4KdW4WD|rsC14WG;H|lXgimpq2nLS
zR5;j6YenH^M7=^W;u-xqF|n{g47(O0*5MNdQHvT9`vrdCScpKha{;bRRi0oGCN_GV
zs7_p%jZS3JF}r{$H)dx^>$$qRkyg&lN?J^t)w+5{Hd7Xa8xv{jEmpmPBND%|EN?oa
zs8z~s9LKOW2Wu;esWyNj>~&VE3b<UU7Bxp$k1^k8&@oR{?>O@l^GKqZduQgu)Bid%
z=LDb2RPv{9Dh_SgUFI1z;_GUeLdH2f+|c_PCtp2U<Mu1a-oDf7M6NUi1ph>=nVZGr
zGB6sHgZASk77=?!r#QmQ8a`PAo_}tf^%1-4aydz7lroBkRDcJJ(@AuUgw<-jj2F;E
zfFVsxVX3%qq(f4~09}1jlVZ`RSc@hV-H?N`a`!(n6W9HVlYN>fb~D$w6aR8AtYOO^
zBkND=QhI7TY^ve8QaOeWJ>xHM`lLD-CE{oP_=DtIBrf2J!7WNB)c6Yv=b89PLTojh
z%xDK1A%3w@G!`vkmFQB@e$gGGM@7A84@nU|Y43%?gp5e%S<ztdrMat2R4zoNv+-q=
zH0FP8|NmXzkfdscZ!e89ea7iRd=ezfbNhN~CxJ$%C)5o}$WS6p;CK433nKcjyM!GV
z+usc&QzFiRmh@cq=v&iQ4oQgS?n5eWQK%$@+vpCRiN~oeoGys4yl|EO)zU$AFIs`@
zB7lqa@Q@g(4N)8yzB|RlRf|So3|ItY!BwI|h?)Mq=ylPDki>o_8dwkW2;vKWVLgRP
zLLq_hWC-6GjKlw@ZT2GV<6`aS!u_;8Q4}AXCjyG^!u|i(?f+~0yx950F=|{pBce;v
zo1{8A$8_}H*5bdl;<<VZ8tkB?NB`~2=ME6oXfuw{2KawiNZ?dGCD;rlSn?;&9?E}n
zvDJspRv5(bbkWr_l!7VAox_~F(Tg6|_kXB6=wy&Z7~ssbT(7uW(Eeb3g>p-^-T}}f
z+~nslT)ut-2zQu&uOIQqzvn1vb9_V=f8=N@;d_#x$M^X6`d$>^j&VLNz#U775BnV-
zeT3Q{C((`&It5)X4m+y`R}Uk;bR>GA5aCN@96={RKm|mcevt>k*@Yay#%jo(kV~<H
zCdcs$yOXuCkNBw%r(cwUY^Dl~t87_cfo1Eu3jXd<tu0#{gax@`CDA{YUR|42|7CS;
zqWRIqcf3KGD#ryX*0s{*dNRFrRKwO5y5K?;^M)@wIFv4LNStU}x#(bX+p0x3<~_@Q
zx-7TSsq7rTd(4UZSDqL?ucG;eWmpb9xNP>Sw&sJ2R<<?YxCnOH7|36HF&@!aUC3rI
zD$^M!YDhjR1Z$>u>Es;7ha^-!CTH@}(fjV+H=6zGn&<s}FVil?M*PoT6aV(c8^6V8
z6KpM_vvFYX%Zp*A59W{*`T>(P%Q!KmiJ=H6OkZrAi6`PQ=J7;BqCtGx=T5{NwT?v0
z?E{9S*PLx;dIPy#q>EYq=@OpjnS{t&p+h7cg8Fn7URD&URU<A+1`?%OdVL{oTt>&&
zfjBf8JC0pq$UwLcF_nerZ*X9n-j^8k&j5|~uk_y_prg=hahJlxiv?J9(Qaa74?mxu
zFMey#Ms{-j7~jY@icbYRe9RWJ@i8&Oi2GMTM(HIF;eW3M(SW_)Eb@>qv%8m+9bSCj
zefK4H4y>)djVKN;e)7pD6P0|ouS$DTtv(5EGKT(Yt9+y<5Ys+RuEw%gq3G4d0{r5~
zwXvkVke7+X44zvKJVXGI2sQYkKpU`>!8O1_x(hR&bm-#1Cs5^D>M@%Ao<cCVz;Hs5
z_FfM*g;Y*-H~5@9(h?p)qJ5o<CFFqq_Ue_o_ows6-cAtlYgfEFgGnr0cBYtwUi}0A
zCt@2u;VHh4|2NY<_Ocb#_by#t(6Kb$khqb%Z$1B~Ii1fY9*spozbE_48^mzg2bb$y
zi`Eq0arCL7tyllWQMYlz!|iFeuNk&(R9R~OH^dhd`kxE7pKLryqkvktz^F;>KlH|_
zZ6TLIUNT6j#{M5MMhg$hX@A573EzTOP1r&UB5PT^l))aw6Z}rHaYfHn^McKzS|7M|
z)s$mTu4feWP2>i$cXRykO_#h{b%k<h!4f6UHOvK(!PDn^6ZvcUzF4;8rp%(nr6V$R
z{4<YrPU0VYXUXiemLUq`wg>Osa_QmUr-#VGwI#Jg(Te92^eln9QVP#R5Hi47^oqb5
zKxKI<|HHsSwO7Hco_vPls8Qsl5r64W6?9^lQ!D~uuSk-6)k{}h^-^Nz?%8(x?A98$
z`#_7S-I%traW?zLk&T;<9NDz-$Ugr2<NPqyGuzfYZu^96A2BJ#OnDfTPaG#o&P|WM
z>daGb?3QG@_qVjh+%k`>VkrCJ#v?fXp@%j-$^XDVz4@U7%O{fiZp>%M{wLt@`yRJG
zNN<$kdFtR(pr~NswHGEG2sG{xsswHtw>)43tE37GRXY6i8`AG2WwDgfen*k)&=dt&
z9pD%5F6~*eq=(loZ!ei-E6S}{ZL@|e+s(#ywl8TGyVrQ_<k{CN$oPFHPVC$BC+2T*
z!>}s;FG)zqkGo#nxpVrAooq(WlBFZsmhdm$zN{?YXv8@xR$Dz{W<j3-AGvPG#MM{M
z>N~M_--$Q(@J|u{D)JU!C4A5HojYILwNnIE^`FN`zLOx&7A&$k(2<8xrYyMc;TOW!
zg7RdxLtAD+W1CA8Mn;3c;z5vucE%d$8vtdBKWKoy>k`w<r&5F@22c`Z{ZR@e6c<CH
zH?#E`hM$POuas)!>CEu#qt{kX$#=8dQ%KG$^NzSu5<jjgFz6fi$UZqCz5DN_iD2Hl
z{IiC?8QVhE0&l)GpV|MGUTIDV`6@jP%JhGd()GLE<Gc2!w-2e%>BwGpu}T>vi}<U}
zPPWu<FKPBol&Y9Ae*46xYvznXGRGOI6*_(OhB1lH`0JcrM45>XlSO3ieOj}beW;qh
z@(C50?sjmD(VT57=AY;H`iFas>1MM+&o+_y&wkOt?=X%Te|=XSf)!c2MpKz=BQcCm
zag5N^rd!wFMqsE$8l+sBxKJV;;Gm$mm9v4o9+(m-jE|Zi1h5O<A8j5M3I!o2kxpvT
zwk_;W;~A?wA(C4eF)I}DdUZF_jP{AJ=vM2ub~)x)Zkfu8rru(i<LKH-HqzrJ0lqOq
zW-!PSw&W&Uv4FzR6r=Iv5*V2{YTr6()22y$*H)pe!$^(!C5(K$Lugy?m(Ty_4JY}e
zao0lTFN<Lyj+vZ$_Wp=wDQxDydg~BKDdS<BKESEd$=jVi=(#zMP{zbzS;s@f=tIPk
z%X1HLl1gzW>7(#z!fPU1k}sg|31JiRKpOOulfv_fAXibIZ+rj&x`FA?gB}^BpW^J2
z&f;(sfnP1T6rThfrjRInHon*9QxLu|HDDmSKNgnH(`B5}-^UGs)aS`=EI%f@ftuIt
z4A{J0TVSUS$a-?^*+m@O`ZyrKFAx@k#u^hmnDqjtsGs#KIm**95u<%^6s0saYM?Yt
zC^eweC)g4P$^png^(r#R!^6#TJ<V^wKGSX%r)^vG_j`b`aCCdW;Qx5tzI?Au>RP**
zSl+a%ZQl8zjr>CoywYQFXSkKl?e`xdIkQX#XV$A1_<%@5nqgVGJj>{m*=H&3pNC94
zGgHDgugtSP#Y=Q~mZ8J)q<)t>Q|7O)RAo%Kz!5~KJSy-?fDK$uX#P1VD}{a?#9Gu4
z^>8BoO)IhR;_O{6{shUh0`YJL>m-MJGx4~apW@=bbdfx!(M1lqh|Yz+r^Ej%<sxo5
z;uihTL(4ImHHk(cZgCngEt^C;p^x4ux(E8`33z&<w1;9qhi?EQHa77Z>ARJ(MsT>%
z7l=%c)H0Y3gI{qWEcH|d4n`5hM_?udWSy3W5p;2GM{*qj`rvvCBlU^_(blw{0bAzi
zg<Hv8w5FL9uyik-0zpGU2ZDhugiD$Y(gI;0V~AkJp^X9QvC)17p^g@aEc7I>`)Emu
zLatV;Ns8P|GL@<ngtH>wD}s~NNRxZ!b0f0BF*+Ti9+#TR$mAA_Tt-rl+iXe&V=^%c
z<s^%RQKgtnDXMO4t0i)yQ7%!F&HRTZlR~Ox^m;}sRZKD%lrpSgTc(_fGNS<-V82k2
z%U{rFz~w~LYK>7dO|90NwM3;NTC?WQYJIAnNF*vCF<>%B1i{SPSM>cSMei8h{VZ|m
zBBd*CKm0YLRH)U8#P?q-Qi@J6%~}~EjJ1-)ljPq-AyvwyDP(?pqg=i*E^m1KWx3*|
z*X8J#|Nj09rSgmKRpP$yQc}L_OL2ep0}}83@R>x;o0$dtwjZQQ{SRclUO9r#{!XSe
zd`I3gDARb!Hzw0J<TP0A6FTNIp7~OtQ7gYByi%=p@y5@UTCMVP^0`W@<z@d&(d$!|
zu3*+9dRr=%=@WZa+{Wlr*sTcE=1=vSZ%5Nhj-!GdGzBsPWttTM>=eaNLm@4dh_m~j
zTO5UI_E#+`W(?$Aa&XmaNcP>$-}Krla_}PC$4C#E`r1JK*I3b*QFkYCEq9OVyL-?E
z$sDx7Wui_zSr0$dSBbbZIu{s_W7>=O)oG#?qPXZX%n2AZF^LJoX1_RNk?K4&RWzaC
zcj~@{b4_TUXuVPs+Beldpg<<Wb*POOP(f;cr7<Az^25>#%efQ61b7glYDDH*Fvwv)
zEc1a#AZSG3C+foT3)?QDiOuMgMdITQn7K{^83&YH9Co*DWVJ%Y|3O8j(Ez}N2!v(f
z^0I4Ph^!})n*2+u-@oU&@tPDX5i2<Pq|s_QQxvWDSyNJ!ZWFPn^m58ipo;SLqS4`@
zWHX}Rpw&^z5EWT}>0ZVxZVB5<T+Ax#@|Jux$88hrYxL@r9XsTx=Pz@rNU7?y9`T7G
z(sNqGj7)V&3(U~22nmEd)^h%|R7E&NYG_uD9HeHW7hkrq{f5Gj#*_z+0I_S`ki)#)
zdP!&;yEd~^>Sse7Skdvvj5m^)Q*4J=T(@A%q7tPQ4ywWJEcuP7CjT40jlo1IsqywB
zVGMZ?H4FlEAq&Tam&)a=R}k#Hc-w3^a?!Uur{VCSxReFEH4(G%Lx&sqw>qamJH)nx
zxq9i<jF`Yo&WNXV{)RWk#^)vGk&lh3TA7tiNAxYT7h$8###EC@oF->Hi4Wy&u>GYP
z$s_Xy^|R#jcl@^Jry&_$cmv9*2N;3ZUb@XDUjkGUyal)p@<7Z8K1Tz4(dS3H8r!g0
zVucuAnL`o|c3und*7rVJ$A8*9i&L>^RGdUPw}t<p{>f*4!z=h~?%bQD1{o*e;B>ut
z?p&fHsq^L?k{UP`=TRNP`}m6gn2s~lmNU4ImQcy_x3mD^4M3rU&k+3!?ncU73G4x#
zQ79_x;?JB$8oMrU$*ddET%F&}Up<kCSFJ8`msGib+XLRAvBcX)uC^QICH_pTKv;U(
z$GgEe@XKe)1n0nSdL|4#5qN+&s#XErbJ0iO;(elCYV>I9Sqw4yH{3TtimYCGNF4PS
z_dr}Z`~C;)F<zjVqM~MjMIJyKfNh+BgwtQs#lMS}lE?$*NfBijMKSytkcI&BInysb
zGx0cZmh?Yc@jr*YIFchVJLk!+`QRFvX<B@QIsLeh%Z@{Og|mOi#m29A93$A9{H=Cd
z$ASeNHhVQ`1y++!MUZEph<+<f4(GMMQe@wyJO{sF3<B6;AS)&&2Uz<NiU1EcL@h0b
zAoN0uSu4=r1W`mOa%l-#CUotKepv$PM#ia>w<G-wlFi(%B}d(c&6~BwMw3`KeLA>$
z^-tQ3W5?=?1K@fqGB5_?Z}|FbuFRY`NmFIsA=rxV&?FkIhsc3LCW%fLF|FgDS!ar9
zHG7O*eO(5|7crLZDK$p)R2IFkpHi#qZ+lA@*o4FbZ%ttP1WnLIXFws#GA}II`Si7@
z<@}FCj%1;~<&lx6Ie9F>8IT$@(MzA7C_0G(ZT}bFKMI?{gx~mNRWynhW37ey%Mlie
zFd`4=9fZ70FfRnDHy%+sG)NRWF|A8?1~2-=q+6D%3@cgLBag^ftfb2RuExWv)qlUR
zoL`xuVXk1zDb@YIzv+$O%mJL~+i!8^0IooC5DsnNPh41@kl@TLJ+%TWeNSTr`e*Rx
zx#D-wZD?c_#3Bg;aRx+B3TQj#R4Ow?Y4AIh;V}%WNjhfZ!Dc@3J2R%#{PC8&wsuF&
zoaxKD$J&WKb=;b@Bko$c>y|f;KJ-+X)K*tsqj#4TMq+=urHXm}1<PgpH#eu|<m)0!
zulgI<wHChqF2A4u@`diZzGxz$W4+&>=smQFaH?S1tdV0or%ibLFa3Ue!GFu*8!Mni
z>0v>)QJw|^Jm}&mvM~Dx49(ElbYedw6ZGd~ra@RTk_K?|UzrK~L;S-}Kh1`*_AUQV
zE74-|`f3Lmp16&B^=bZLl9ITM4X5|LYRWeCy_%lRhOvSISa24SSs(f~Z|-}K>^}P8
zC67GvNY{sC7Qc}Hax-CkN6Bvfx~#+p8J5HcDJe|4C4)i!B_<sr{0EezkK*a+gNRo{
zcI`~INveWjs)I8fvtBYh2NRwUw*dc!gnIZ2sgOyl2_L~FrpQTZy`v19$*+Q)$-H5*
zMVEhm2d81rG$N|{?#~xaR2^P1xpf!`9=V-ZZzZQ+xpV#Hv$WN!y4GlGYb1MQP0i4e
zOKR5Kap$_LrmEcmMQuw_TXSjFh??4=?Tf0{-p%yo{$cImPl@86w=I0UIGDBUma^-Q
z-^_o0tHjEGwRYDu<4|=?U2&v7v%bB(KJ%(oYj#c1`m$BA+HmQRWZ6#o$ikT1?|Y|Q
zs5Ck$it-DBFMMf;K>|}802qL;NsuoW%k-dBpH?j7&=rH2Cnz-=nU{VULc#R%+wOU$
z{qFW>&V2oh!|_ZfQ%lw-3tl40l(_8lXF5Bd0s8+}A|TY*;h=}oGu*>(OFShMkig%P
z2g{zhCwV&b7tAlPCI1LSH;r`@bRzT*y)UYhAg!>ANvonJ{~(QkmJYhsOJwq2-sj&3
zNraG%mw*5LzmUl<G4V(GV?bIS`G9Ob<>vcx_?}NFF$ATP_=I%l5YByy-$dUd5g`gh
z@-<%PG_?9+eYCIuJ(3f^Bm%7fMkY#50NtO4!cg-s4Up7;KLju$x<Z*lz(XKV5ae>u
ze8T1em&~GP06;+mj6wF-=Mljlij{c8Lz@a`w^nJjL5Ic;ipPwcOm)ia;BcdX0HS+y
zk0;1-<`E9Ztn7A!!JTf*^Nb(aXf{<0wQ^~h1sUoTwNw$x8BtK5l@Bf}_5*(5&&T+q
z|K85*dxyZD!^pxjR~^`Udt+fx>(*(*TbE9EIc)`=REcDnt|8T)zbMW9=)<{7(mno0
zoo<=B$>}V);aDukZS?50k@c(AFP_y=snex^&$YI&t$F6`Escn`pZ>|7pGbRB1`^tv
z3c79xHmfe6xz_;oa~&o=Q@|Gl1P%Y7*n##*8qh{9uo%N~MI%e4Fk=7-WGQCR)KE&H
zI~FuU#JNZT@}W(W?!~eYC%|biX!chN7W+h6DRv9kOB@iThX_XnBW4bu=CgrCP`YWL
zQL^<Q@CdMeGduSU{-(KQ&g_~!@9An1fA28cOQ%jPbs5^dVp-W-{-!rdYIN`IsmWgZ
zsapLncipkl&itZ@Mfshj$LiewQma4p)E+Azm!Ca9JAYjHv06T}ri4}xcuVJ!ZcaP3
z)NbzZdD{)HQgf*{Krd2K^CrSYQZD_7e-3d+&wX_1r5}+B!~s=&bmUh$$;?{G>-VM?
z6qeqZJx0ao92G^LqvZOdo{|#B^u-JKf2H61I!OFgW3uloEo3INWsb>go7j3wo&IZu
z;%j}~Ev*xUqOO)(>h)hK6kqA<Z)srywTyC1=3OP3C7yd<Pu#=LJnAW`aLih;c)Fvc
z#1rsf$6c9YlngGN5D9mNdpviy%%QU}RLM{#L{lYwl5xSGB}E*3DXhkGM9V0;(GSBI
zWx8Vff6dVduv<xomBoYxAS_%=7*0A045R2<EP};`Ftvq8!8@%pig66mBw#)aN4&Jm
z32luI#9<R)>@=zc4y2?rruf2iuS`SNys0yN&8@Az!0p3J3oFK~EYA*PED6=OWS#6D
zZZ9Zk?Ns<1FK3v`S#sKiAz$v5&tb3RDtv_1LX*?GO9C<e#r!59@e7#ggE7h<)mF#I
z-qE8v!~P9U=h88Svo)-)K4NA4Gjr;^+T(RGwb*UVmT4A_up)?liakoU=2|TI{OUsa
z8dLk<m=*0tt2=K67&+eY7ncXD%)8*b@%tjh9Z7f1S>9a<cy~pT;~0nN`=xfw`9M-3
z+Q*wtb4du%D0GGP45~OlYQT#To3tJ<#NeGqs3H*&W;{%Gg~Ury^}#TW5AZ_*0ozyv
zISHs|UmBsQ2(Tw?qG{1|IBC+sCCr6P$89&=yT81meEs@WB*mAd-Mu~(%xN4mrZI=#
zJ7n#`nn&uYn<hVXWq12j^2i4q_W{RrHO{K)EOg31X(%xTx+VXR+@mQ~j~-i@_-c4*
zS=)&6GV}D=GuVlh?blpNUVTZW$jaDs#3Bm>-N>Zq%IPTO->{X=Yrd_5%NV`D!CCJb
zx#L(~-%~l`nJJUfJrfc)jDPUCV5p*dTsfHxij}8YioF@@pW^syw{q&`W5<@2kHa_)
zIiNqrUr(d6<irb%wHE}TuuX>tymi#~B6#IW$=H3S(c$`3)|6N3Yf9Ni>MmjaF!;+e
zUZy2@XzGsg{HaSCuSiWC;al0SFZgDRs1)1~f510$3Y<<<@SyfD>J_7=umGUBN%^CY
zgJ~W+A?3nx2Kl3kfwNbjgri)Ws7k>W2&`nAmyW0iS4DozA$F4(GoRWNXs8cWHfopj
zkpCRyzr86|X95?U&lE15@=&~`CH~Me_$gAP1Tqw{u7iJFc@s(Dj6F-dbtCwlyw&Vs
z?8c4X{{G=D6`jMpnQcpQ(b2y<s22OtF}alf!|^j^>1<=js5Y$Iwd$`2CmzJSs7HJJ
z51wrfCP^wMMZxGo>0i*iTu5<D8zEXCL7Y9-(7?bI>V<U=5){R9qJWz5u%Mn^v_6~w
z_CRW5M`0eJQ0U}KifD;iW(KxGeQd*yW81eEv{w|SyNxOm)w5jd*q~2t(wUT6(CCQE
zhZ;MgGC;*+|A{Oc8PmwrF<Hia?cVy8qiT$9Wx0_<qR#x)DPm5hADRJk6hiIaHF%6=
zT62|Z2g$0ajhc$fhBr)WD-(Crsf$!ZEGA3;I6rHt#+YVu!+>-B5Tidgle0>u=*<Q(
z1G8KXh$2&q{h^?fF@x9?6qQd_vBr!#4r!Ki37i>8S*!{&=raPBy9e^~P=V){N|Z_8
z&0zO8^XtU~l{pY((KvxzHYknyDDw+t0HlZ(3zb%V0j(g#nwk2-jI7$)tPIu`4%u^Z
z?4j`I1<4ZT-l8Ba2^R4`xPy1`AKhy4dQ$VN?CtVI6aT@pr1kj+Na+b?(d8?mf7n+~
zE8I#Pcil`J_i&2#!Z0ZR_{om!9J?bYn|yg;!QI^T{HcS(n^{)D>6lILzD(SA5y!3D
zK221w`19C@7x;I6LtNkN-1#kdpm@l1luH|)8t_2D#EK_Ca2#DyKL%6_G<zrz;X=tr
z9tj+FcC}8K!k2%ecc;h=7PkA$34Vp2Wzr>a4Q7b%t)bH*C;S7)_;)NEa37?L^Y%@<
zMV%2cu)S1GMQ)FTa7`5~*=grpRY-D2uiAf25SxktW*v0h#Mk`WdZ$`$F!Lcl%X%f?
zoOt>D(=$mMJDE>EclE#U$4tW2pL<%J5j3*BrqgP1R^RiNGn@MULGR)0I8-Ez2~-}z
zmrLroVJa#1cYX>Lpyu#?^SVIkEPQUt08I;%#uC9>47y?wh%G-lcrX9b0-*XYS7@}-
zp>M64{p1xRM_%#d?5Rf^E~lxud7uPCLD!af#Bl9F;&?4_dH~FKQh?^M4*o^Tp?1wS
zg-v#aoKZ}kjl<u-SsH7vK=N;jEu>k=H_uqK_O%1a40SPZLv+Kya^ACPAOk|zP%~OV
zHV47WdC_HC_`amDEr{ha?;+P*;7k;YAc+sI#6S8Ae_<8I^Jm0y(RRp}{fIPSl*9-^
zU3YjzaNfap=R%Mx8dU%<R8Z)EV89rI_l6NE7bq}cTEmcwhK4bVqR^2%3S+Q`jz#dL
z(&>}#yRe3EUdit42XnF?$hM}YXP0R`grxWrU4azj|Io$?LpE#PvD~b?Gc7iEMzIEa
zF-FPMa!p09&uYy*mYaE3rp=a~Rig3Yz*Oc5Fk=v}eq`8Y!zr`w&9d3NIc3<HuC2)P
zS>sY^hRyBb6bjQSa;ZtdaS9W^bC(%eKb`K>Y^gNU>T)61s%3R4o5SYX3)6#EiGp(o
z`?6DAc1EHw?cjTnFA3~nB(?)9mH<5vI~{O_Sgz<Bxe9JQ#_3AU#`hy4D}1s%-Z8e4
zqc{d|A*7JP=aN9h<QlrF5I6;ILIxa^9PhUla;Xy5XPa;HUFA)kpX$AK>c-mGxN&P1
zkwWsJ%_puK>WmSIO&K{8xA}ZF?wK=H^p||4$}3y5V%P1fS7!Kqf?h%8N{V$G$dE!2
z#dSbSAy0}YLJ^09y-);Y23Sz(?=J#GFQ`j1HqjKFq?_+ydMVJapMS5Xujk}Ri71hF
z@?0Sc6zV_)CU){<Uk^2*4wMiPm@=@<h~h9P$K%|2dw5`3&r$pJSHt@qkV*V_zlCP4
zBn_=GO8F2ml4BnA)5e*Ga*T;$Xhz~<t`{tN{0~ns{DFxZvATWZL^7M9w0v}xKL97g
z?1_wsR(WE(%6xPT-8JT@S(Q8tYgQDV*H`_bh)9HtD3JVuFtJ8yLr)6RP}9(91apWG
zG<z1+G$1F5MH|MAs{EQ^zOEcKZo`HLHZosVbzo&&N7dH|@*^7tOH7FeHkPf{s<o@j
z5dODeoK(BIbi)H1N>^*8<2JA-2a8SuzERL6b+B4g!J0e{8QGTMt_72@VEq-G7O)gs
zC?6tX_`oi4PO-zQgNGi(6nJq^xM>hE1QJZ0gSU#4G&2JE4b*Fx+UbZ2SGzC~2~>k{
zgBY11#(dlS+p`r$TZ%GMpT2pNjeRWlyLy8mHh$5Q{2Bi5ls;FWy?x~7m?2`QKci5k
zC??3|id03X;ytBR*{M*-?eYooG+<t+DY{#Izuuw8zx@+vRRyZ0A}9Ryg+@j8?elH<
z3UO%E=5!^wFZbJeoG^CtBLYP)y$0-`;O8A5GZ^YgcK?Amv;9jsUCM=$CxmnN^j}J^
zA2M)#+))y{D!f|`IDLG1Snya6bAefi0C+D&5OpAE5&NSODWD2?MV6@8AO#IW(BNmL
zz}Vqlz~3nTrCo?yuy^KH)tBu1GQ$6j|6AnCeV0~!HFK|vH0)Tu;)fN>caR3=jW^!l
zAK>D@qVS$+die}H{v@eWz1Fh+(4qA$uc`PaPmX8Lyu2;Mzda-v96~ZfXbDKiKvf}(
zO-atKYRslIvkSF2+=9G)$LZ*h{KCnJl4j^Uf18eIboBaf`~7s62bH`Rt9kMLo=B0H
z1KSzIcn)?47l(j`^Da)ele0R7@AuMXg2kX!CibhviDw)Eh6&i2pMQ1te>sZ86Fk3#
z-;&^U;kKPefLyL3s-rvG!n$*33E26#JwOwJB+CY6R^<mJSv|M9J7C|u*&ayz9}Xc`
zq$p-HWQHO|SJX1Bwao7?YaIq>!`O3I9feck#Po9u{u80?Ql>qM=mDZa(A~~X007ni
zFNEOf<lBrOvo~M}fNx=xPwIB!vugldrvk@?f%}xy%KQte8b)cliIMzHtF-SON+U(m
zC@J&68rPe^{zNaG34lVLV@brA-adHQgn}4=;vx%)o;*q4nXnYbc(hZ<xeh!5#&C)t
z;(`PdR6q|4VUp~C{z@Kc_VbJO_1wyrALI8uOy;i7yR~N@V9;|>zW6h8O@Qleo(n8A
zs^qN~Y8)fa(<;~ao9E%s&&bt&JOjsnF6qPdXlAN1#9L9syCCI&azYS<lH$xc9xay`
zvJZe5_*-lNHX1Rb5~-ff^pL+<*bIU+;*L)6pluHnQ>;M0o@~-Zi_PquO%H9tKk~!I
z&heWzjqlv}x7dg?cXpI#O=z4D9`6{<)Y~Oos#m&5Ty3cjG=_&(Hovgu%&2*_D`pQL
z!x5QBO1QBjX0NE3({W~vEi;I0E0gNDPwOU`f|;zNW7VpTQ7c!D>i^|`Vs02aw0>e@
zvL)S&2v&|bB&;oU0?ll|N|aiQ+q!oa|Bs_fylHviC8PmXPr~27v@kEtxAZ8n&)VxR
zvNH;nd8BFP%%()M#tsiACz=jf@*v(B_1|jX;XteMq8WL0hA4hKCIk!;aHha5YhdHo
zFz#!vNt_u&8s34xJe+?V>^n;raKriG<RSV$A>nSZ|X4tIB-k{^!WONb}gen;{@
zi64-tkkKm(GR$z%3_40d;*?78X7RQK4Hy;x7rYM|!U-{s0c>L;qOLF4lIe$F@fD)<
zgW*dc?;nb25+cy9TFiPeHbFxlr6+`OL4eqx8tAIUs$lWY-V~0Axr+UyTvK4P+V`;q
ztNAZ<UV{o4rc7_jlMOkeEH<`OdRN$=s=hl<jU1=>WaZ1lWsXFrxV)@{zeHxwAgyH~
zIU8VZV4WKNg*u?}a@8&uY2HvMclh)7N#5B6lIb*=d{U;yq*5!Ik2DyRaz)^ys3tg$
zNw*cYJY3JTI`sex^2dwcHmXeuVrn%NnzDfQtF=qb%*dHW-8g29*Phj-QF!%<r(X;j
z6)hSW_;by9Au{8hT8Tktd7t8`XdWTz--!#~j^^Y^N{L>`tR?u4_<DkbM+XHe=?(r*
z18oqvOF148C@`4b!4m=8kb3wNaT>WH7Qv4`=syHJIKL(Eiz~&54~Z{sI|U>yK||u>
zKSTIqMZ$4d>-W<OzkM;bw=YIV3NCi0*W(Uw@17B`t6VIOLo-Dw(zo#(G_s+TM&tPU
zd#%YBg|Q@EK*S5yQOGFNx&r1SidaMp1FeV#fXo%N+yD*(tWz=OymHPM+P$HD!)&Hy
z)0R!cSp9y*@XtT_e7Iu2=x3$svVR>Ieb1)pWsGj00{AHsC#$z9_VG&P5q=Y2!f!gF
zRO<GF{F!4?8SV+i{*-HtY1!Fn#`T5xvrnI*XdO4MRgt3KN3^mz)3U3oviIp#ify}h
zZ&RpHsFB}z=+KRFTJiB$UU{5W6aisQaRYJmJKF2cd8w-5Kkk6PWu9mqIwzGy@tFp4
z_6^{tf9o&h?u3;^_|gN%T*&9C?Z3u_T!JJ%jN&E8%fb(z{9#dofBjp(TF4G-ncaea
z{J`-8p?S!>9uSUxxuxi|;Efk!84*AkLisTAvarD?fBLt6wJ?G9S=7?+nP+|$4nsy!
zVJZ@I4gNNvj1`?0(RvcPL@#N<Sa%ffTnBV_J9<bFWFU!@rG_X(Tq4&502dx=ePAge
zq0oe&5m4`YIY|@2Xl$1LvIgV_D9kP~H|~puw5YV2Nw-FZteRWNOnmSE@vAD+ilswk
zHU2-lvs3n`SICCS%3;mFggg{}^wIa<<yThVkfE}e|7~{`L$Xnk9Is!xX?j<cpQ}BT
z<>o&ZE3NL-l6fQeA8)-G+t2yJA-5u$=OGoId=ew#&BG^_@jo5DIor)Y?+XXhWGb=A
z7nYd=)uY!AjPHAdXU>J~oW?V_7>QIc0AO@A`@vc)*d)=RFl6R}{R0CmbbeT+0zt~e
zKqp7D!Nr1C7KX{BrM6gK3`1OhO{UXeRRpq36Q@lp<En!7msDLr?ot|x-A3cE`taD|
z>{4r}B2$|Ws*#-P^o+a?GFBJW<=R~Kx}{U)lGKFUS(atfj2LPj7Y=&s!mhHIQt!>Q
zaOpWU{_KL$?8B8CZtAHSd0^%UA4%V~KA7I|v@P?{u6LgKTX&N?bVb?d_l`W$tf}7a
z))gkAJ^QyVyZ?!Y4tK8cXB}al*45noINa{v@(<sXAJw|AsM|=Se?75pQ$$j;Gu;@b
zLnzg`;sWm)&A(-Zv{EHV)FOBaK%Ne#rWk=M9x3M+5=t4upsF-@X+jrFUYLle_zLYx
zY7Qd=gaUP_lu-<ZN2rx-I10;F_`=>Lee?=-5fZDhs?%G_lrjE0hD3?x7G3Jfrb~ZE
z#Qxi7-_9Hu(zfm(2)^?J6~QqLW=r#;EjKb(7GxLXf}5H2#%s(!-0yu$thpXG?w^Ea
zF2fR;ZFb3#;2^phxQUbz6Zz)x4Xd0y!)#7$WVUGSD<{otviMA{G>`J?bh3K-+<IHO
z$?PFE*$u^squu6a_L(!n$;3jR(Vl%bNSX)Rp%2{4BjA78BH9a1gJYsUi#`&4OPmC_
z2s91qg(*gIV%V3w>EeNH_-W9?ggvY`D)k1Xp!u|bk_@hZ0kSoytq8mnvW;Un#}?JU
z(Jkqy9t2qdRm}yQ9`&bL!cs3y83RRFP*`z9G;A?~Eg!XnqNJP$Sq}79Ub<I`&nT$$
z$+&?234&he!rK7a0pBfo6X%WxsW*v+ar?=cg&s(Grcu*ufvAG3zzIN^Nwn08312L}
zIxZ_gqd;=9vm$v?4rdOf<Qa8la%C0FVyr|ibudO%J}rs43|5EHc6!3t?2@#`AeRo*
z1Vf6Dog$AI0~Tjdo?1?b&*_o|oXrPiW`kX>3yn>;N}c93<jx%Bn(vT0k&?+ElgUhm
zEJntfqt8nhv8gtfL+-Lqj%Io@b^s5r*OoxA4YO*?D{_a~9kSa@c7?;76KO0-eV$9<
za)~i$afI_Aci>{OfOF_hwbY{1m9Pdy5mHOtSdtZCEl#&T>UW#hU2|s7!`E)gF3euK
z6pKyQKD_75HA30yoWk6>b8`!GR?{-F?YxFMA<gWnV8LwzrJxz>g&84tX6Qct^dJBD
z;)_IbYl*}+LuF1)OAUe>7HPeV3NBm86(AX^Olrtz0<tzwW&k6DG1$Zv>GE8xmdTUm
zsj`h5=UAL(v$|L|Iog;Rv;>)=nd&V=JSLsLR2|K7rKgn3DvKJ%FVR~^r1zg6^c(c-
ztTn(C&Q{N!tb}1Ln?G%^<cA`|oi9-e?S;$l+&631zB`vMOcI7KTy)(PlP6zs-J*rN
zIrZQ!BXB<?#}fr+8k%Lf7VHmG!2_}cxzn!@U5~zkRtKhB+KT)}VMR=X{eeD(aEt8e
z*y<lgV9r6iqB9g7hJ~R9pcFJJ!7ogWWH?ELR-wi!c#4RM5ksIGnD6}tuQcd2MBzM!
zb5r<F!UCd-UM}(r{~sy!IT1xx>F`OuiW!X6r#hyOm^`^Tr@~cJLt+_Gr^#+|TGKO1
zvnzbLewo2x&bMS{H-=-x?9V8uuFlO0ghI`;W;SPXKh_+AN9``&$nz3UYM}4Fx%=kM
z-A9<K8#~80?t0^~Rm+yGdW>A!Hm9YkWJ-;kcv_=B$$%7!N`H#BGCzhrsqfj{DMd4u
zHh1wy0^#wb^<SZEqe8FNn(W#BXvmwPO_8X~MtgQBR+-W2uPMy03$z+%?4FT$l+lF7
z?cRK4et>z7UUaUEj5&Fdzgu3?S<+m}AGuOHJg<m9vYqjrQI!lIUc!BcC7lak%kQ5H
z7-YFrLyvR-Jr#g9IRbvG*F=98oq{DwPJF<$Oa&??4Bo1s7ye?e$#02RAW#6U>QDYq
z@d8`oFk+Ft5sZ5#Z_rD}K7%d{*pX4q!7`6Bg!*_aQ5<Fh{1_*q|Ak4#0|`Wj3B(eP
zSi(_=@6kePM{zO51BE)T30Dtd7>amJbdD0Xq-S+hVFz}4OlV#7zf_1R!U@sRz_5mS
z9%rPhg?_lwTo}o{7-mtIBB2HMnotIh0V@<DJ*2R2;5MO0kYoeKVGz~P9?MaI4&B8r
z5;aML#*KYQWO8mF!oqa}uLB4P9FZPSgW?rZSX6jBkyYb!n40E>TX*dumD8RKjq1oC
zp3L@<S^Q^oNnReG-Dj?yR61#!?NVFA^6rImN4GKulsbnsXw8ssZ0q=0M7Xy0*B9{b
zzw^$4J$uA&CEL~_Th#WhVTqA(B6Xm}63ZAZx0Trbk^ab0+cC?jA)$M%1&J%OvR*LX
zH9Xl2SBG5>MlJkv?vghx^`8|N^0$()(V`Qka`*i*8OP{K-FH?ba;#>XzQ&q9q~`kk
zGXCE-Q>v~8tXC?Fz9Dv90rZN${&oMJJ^UB7%#SlSZUoI_VR}($%POC@puqd3HMU`c
z$L7!S+ajUOD}7}n_Do#6E%g%Hu+7`6rI{KxsDJG~=fo)srY&X1%uif0Vnji-c=*D1
zDm+6%&Pwu)vm!7*kN^5D{HdrQ8u0y-#~w?(Wpo)q!$l@^b`s6_@qHykQ;OpfZ+;vd
zF(S&`URjx&o0m6@sK;0klEhS2mX(pU+4y6|pD9zavyYHVY0X3@EueqO%J@sl%g3k8
zoW{w<TCHa+A-O!=S)AiBO(Pl?tVY=OxFT||#;lM|1^COESdOcf;Hu1B{MSU2SU#rA
zrd3FRhsrFqY2jn^t7mx2Y$<RxEB!87Xao&%E&t8SFIQA-zoMKWtU~8B1VVqt*AyLx
zSyO~QInX~<(00>+?W+;3h1K&J(KkppXcnXpK~bck;u0|$SJ)zfAohzgOx;xOg%lx(
z{(|d~MwyG#rRi!Z<^v3|R1l#cRHVRy0Tsh5WPqfuP{je73%e%z7xscnDOW<d?o5JN
z0v8r!6Uz7;MGbn9a2ZRFfvNyCqyIXP9^p}<QcUtX0Ism-u7dnN&`E^L(39Y1VTDEs
z)DdqKX^Ae7DM+oxU=SPit(7D*Zyh+AkJD{~VPN}oG%ia)V#-lUS(QzrvE_|y%X3DG
z0e<u`NEiyvY2@fZHck)gax^Psa2Nz474D*dHOpdWmC_QTVx=qs4#}owvrb%)&57+q
zER`rFDPj$Rp2Q(BQyHq%e6RRyGcpIGi>8QEuvf|v6Qfg}y;^F1Kq2L1G7_Sf;Q-AM
zE|QsQV>vmEmzHHpa@Yr>Hkl%V2)<H<j_Dvox#K*^;X%ElR3k6Q@ZapLV#ggaU`vLr
z9#<7Ro-C3{<x+mPT&f&0M3dfF;48Gqx+REeLQYJHOzcD&BAHJ~Ls9_wwTJzItdta;
zR3=k`rcNvoKa-*xDYi(*4I^CZcswA7dI(;4E=MafjMk>u$RVRdKFyNC-=H$$lwzrP
z0;2T14Z?LMNhAuH(h4>=nGdN^LEvT&H)pBTIt|_x%yhPAG}@69LfJpmiM33Mf~*uv
zmE_XF!UJqN{qv6kx=10gPGd3eP;S^Aq8pNO12nJ*8jRRW7yWVqWB@8A(B?!<V>F3S
zKoAq)CW?9^8eoc(VVn^O1(S&dfdP{Rh&FK+gCKDP=?PFI&{{^%3J}OIOr?wd<AXRJ
zI$^l@!uBVrG#NY=z0*-j9$6?U44?YEw%(T(D67@iwYTQx*VF~w`ObE?zNvd;ewYLe
z-JA8fx~lBJ(6qcXRVKMylaiLFP;A|oTB6O{w~twv6Kae_WZU-n(mKMGe0FYaZf-66
zKz`w*?nTwnxiiYOrHxrei})wzeC=n=5WiP`(luu4r{y)a6f;s7Elvvr8_H^|YKzuw
z(=W;JXAtkAOHE5<v;N;GpG&z?TKK$e2b<<9;o-e?^S>j1`Cx5nQAu86oo&Ceq=r04
zubjvKdr5U{+tPSNG&IX?FyyJ32M2#P*cQ~lS9}9KTM26pWp&acg_qYu?ax7RAyf*8
zYIIgarf>j00F|Za{s2<P)3hQ~jH4cSOu(>)gQnM9`30;Sv3+mtMUb0TTRu8%78jNg
z#ZM0??6Of<dE8LgKCUwO*;6v4{*$eLDnf3-9_C*D;EP2qbNB6?`@6K!<y!5~S(2E-
zE<bg*j8Sx>!p&*vnG>(Q`<opHh}dB;(!f2VLBF|+%tHk_z9P}$+2=4r?txImoxAz4
z9FSiOoQz2e%X<IQML|9i)zc`3i#`~ae3YSyAK3+&4{z_ft}~zO9eB{a%=fofE~+GT
z^!fhxgFevzaOB_2PvcfpPn{p;<9san;G3Ty+9~`&?oK@KZ+me1+|<7k7xHl=eQHsP
zQUX&2L?N_&SkUOmd$DceLD%qrWd<_<MGxW)Q3(#;p8DCs9@tkX#15(H5YQw##|Sl;
zB5Lq@;w0(Kmn!&Y6;gH)e5aFY`+939byE)ui8N@2he#|mT+=`zYJCqQxQ!Aqy7RxR
zv;SFv@J{(&)ah&KShJ#oeN4EAJN!jO{yT)6B>gzSYyo9SaSxR82w74nr3{OZT)YiD
zN^(3fV}=~?A2R<9@4{^yx@=A9tNa&4`*M26to9P^O6}IBD<6DxSN)Z8$tsDWZ!pva
zAoO40VaRI>3WsN*-@N`Z(aP-^O*sp++J>xxM|bakK0mWTDwnfa7emYp#vZAmiNW%R
zXP_noJVX@{Q|JqY$l&u)3m3Yh9>b#9LMLo|cwmtP8(|o|RV(t~Kwx|5w2e;*pMzi(
zOD1&ih0{drEAu8*ubo;sZ%TL1Xr`!n-Ic>62I=HHhq&m_q?;ey_V?{$FAFeAA{Vd3
ztjnwx+tM6m<7)H4*#F)D5dWhG5nGc1E<?r4GuwsSjzZ2xGLGEIoSMJ3a{ld87O&m@
z2i>B3r-m5<dY{^HzrX)RqPU?kW+;)UlwxJ#daE^<O60-HmBXQ}OdNPcSIZe?fl8Gk
z@93nbBqhK?t>r09RKRD!7=|&-3luv%c3K*n1cU*_4$#al;-CQ%4X}$e7a?E;QLr8c
ziAhp_eA3@$D-?f%D}PSnHh<*hpGC2_pP4WxSvLE_uD<7)SZ|_NB0A3h*!AITRQ!`d
zs0+F!(aRB`u244nZ<9{Pgu1=S`;qXtAFaR-EsT(&0oy)7&UZNC%_3j|nFz%}BORh-
zM8ljM{^<58Yc@VSk=a<@_jvHq4#M%@|7G1%%gUtnB~_XXwXFsKeu=27p?X|m$GQo}
zHpNFVb;W0XXqj(r{4@Vu*DbHC6c+~5{k2`?J{pjD&i9&ynRvbEO3^_&Hh6SY9;BQE
z2%!~ZLkd%+8_DwIx&f*Ua8!b{De#B=`UX|IpgB>GTmRpr`Xw|*G`n*S%wKLuMW;kL
zZ2^ZXt05!J>1)f)Y4f>EmY~&}<#GhtI)z={bYUaMD^$tJZS%oK5~5Xpd4#anmE{G&
z2+eGf{0n!@8BtS7WSGH`?l1&8ng6;Gr|u(%-D)?R?Y2~h(`GYh)n;rv`U|l}V!gsn
zM{08C1@%&Gc5^S>O1*q+;QwM)+uAWK;>@<Dxyu53TK?;X&~D;_UrbE(1rJitg@LK`
z;J-}tlPE616P=2aUM7as({WDJ7iZAs61^f3=5fpe5;RmCsfDi+XlVhYi0mxBFyOMt
z<AU$b=~)qzK9~RaMr1m9?KLvx%_ms#>iLHgqBqHu*O*HZAIx8kQgREn5~3UVkLNPC
zup$8c&bv3TrzP)=P8GC=(QXzLdKL}-qf>=&zfw_9yC!idI?bnicP}%Pu8=p@XmuuX
z1cWidGo0jGO**00K&51zAPgD=&xL-?O%Qcc36gRpL)XS|hin<S@Sst+JjOwoNfCZx
zkzme(hC<siO=5#V9_k7_uV|lCyYT|VEDZ!BbPf=!6be_7&rgP&*jqklcuQfat3a7n
zK5lh;_x&^feB*;7OYEaGPO_E%`P%O<8+*+k=8V017BK0VWvShlk6ae0ZXY|YxkSnS
zZqe}3`9x)Qahp>emga&6HYV{pGweVTeZBi>fAQqDO(QOGjGQwrwCJJko-Zd?M-HU>
z$bp++8=v#i{)vIAsnai6w!8SnDQ%e*X>LnS`J4u=ZsB1doHLd79PzXQSW{~83eMqA
zDHki|0CdG5@{i-mAU}J}5TOOHB9(RVq;$eF(@B8_yCL@0lpOP;15<=BL%6_A{R>%G
zeBd*$FC^!f0$(xABZjV^!ZRe?ww}>WneGe~+DS+Glm<&_aL9;w$BakjvRv2w3m)$>
zDl0OVj$d}*@a)CQb7fw0hA&#uk~#0d?7>Jf^3i>@iWI+tNl`MsJdMWJSgddwm$gZ?
z-Q%1xjUyvfT-I=P-rkw3nhF*_Hl56WWXVFibwOLx{VV3&Id7F|a@mB^`k;LW^YLKR
znb7V9Uoz#Zb;CO*Ixh>ekJ4^?XzC*PimQkoY!VP{av3dJ30z-<i}zz?lRvD0yyZ8p
z+OcC5*#ac)n>4sAAsU$7Sh~hoDY*8$<3@J!-|?^T-*t|>0@?7+$H^wYU;jN)hJKM1
zgk1FMO#j^w?ri7)u=n(e!gYkeHsRXbL+4$Q@cj_n0krKk=iQ7j?o%iUhJPCUX@ysv
zde6{3Ah@ITYiZvIh9TYqA7Qp|LLvYf-$2`pATOk02uY(k=0FsN>63~UD51I<hIJ|s
znmjPw32T(-4ao#f^Dl(F*5frzG}Fei2X1{_UrLscG(K(G9Ftgld|O53{ThW?WAf_n
z?>bIoq=G-i@8VC5XsF>2={?U|`tC%oKx7(RI^*(_)Y}eU_L0#a2x}sbktiq3I7Z?P
zX=mKW`Jawo^X2I3JtV$u*52oc?6{ThvlOY7PQp#zvh6q#&WkfmxvzREpOt#}Jp|4!
zCDQ1l@csk(Srl;aivf)l=0<@dh5E7Gz;+CyZRdQywSk4!;DNV{g@XpRX$telCI%f3
zEY^r(f|67zz|H8d7m-i!xWbKZwiwL)erPV~d3H95y_UYY7O%KT9B^>~SKyxxV<K*J
zIE+l(NbaRh=Y$B0xNVmFL1HIki2XtN91Bqn@-s6k61O;=7C!FE&1Dvb9FCA9F(GkV
zJTh!pB%WL{6BaKbFAQH<QL%D3Up7;i7cRq`@)PETT<SZfaY1Mb^eaLO4^ly&u2c3Y
zAyff_HyvX=G~G%SvWMaOqd-8si|9v3?Q$ABf>=DtS%leM{Ai&sQR^!#^f6EQh|JQL
zN!Qsc$MNsp_aJ}bcNX?-TF|$A90}gH?VI~&lVydzt-7u6@vr}XoqY#jR8{u(-20}b
z_d)_8lR^*zB$G@E3rQ$OK@<c*K_pC)mt@FfW|#s55hG2+28gJDh$2Nq6xRl}z*-Oi
z0g+W~=&GwOvaXA$A$j?J=e{=~vFz^mpX9z<&#mX4+s-|A+j*t2=4J9-0z1p!{v*4$
z=A|qv|6652L1n>|Dc4vtv#fV-e^NQIJ7}(d@?UI8rgie<ZOS_zFJ_@1ShIwU<$t_b
zIsbu`?rwyEG3-Z-h19mG!2f`dV=g7d(ixe!t34P+1LK)B2`8i(MhP8H3>acuffaO=
z29_95Sukd(8x(2!Vk-c!$`w;*j6Dh1x4;=1uDj8wgi0yKQHO|!A~jvSsElz5X~iWb
zmEl@4LQBMm&Z%GJ^yAVVZ(vKmQss^`DLW&4K&Eo|q1e7r!<w(ii;Ev$za%3vDLtZJ
z>Bv6u1si+)>6Zupw*G$1|4Wp&eA(gQ14mzb-NZi8rsU`-eeco3(<`RpsiNCL%ocui
z(Zt6rh2|?u!uvegXJC<c@{Hc|hxfT;^Tewb@5kNs!Iz9G8=rmI#D|8D?-w~^NBjM5
z&%LMg%aj)q*k4AKw0kC)2lV15leDy2nF{eJRUc)x|CqJ)j+DsctI{V_R}?7^UQ)j5
z(H)O5J}_@wY`!hbkd{%{I}Xxf;^MM;rz9p1UVdp`Us^aMMIGU$NZXhVS7%r%!W&}3
zGd`JGEH6kIn^rbIiXCxGkUL(CF-G6)S|wjzJ;te2MwQLDp<=Dl{)%frDFeF+t?e<l
z5%Z!H+`cE-^g33ct#?qZILJgdrJWuc=(7LNrzo2?oxmqxNf%qAG<(3L7jHya(n-L4
z8H>XdR*HEi^07sa?Ad$An(Yy98-^E@mWQSk<y7&LM<TZe-4E%@tmJOX$uDM2eFqt%
zdh;nA4|d!=+0ZM-I4CV`kTEvNn9FWualHCkLvoB^a9ZonIv&08*{=`m|HrOP6_w3_
zyvs*r-TrHbanHSTV7NIvmY0|7qaw`1-aK~n&Ee+ANP{JP1SBDZ40}U*yA2plKg<h2
z$YvT^a98b5s1wY_1oMY@tni|RdOG;fVj$6rdOk6NV{M3oLQu4zMLI3s2HoUQz83~8
z)Q{f!#ZuO?^ov`SJX)J?!kv+554bB~kX9<uVln@{XVZliG8wQoU-|_b)4mc=v5`_M
zId<qac_a@^$fjsRO?GOT;1r@&y2x*EEp8A8I2opXv~__sJ2Dyc`aN4Vf)h2yCWi<q
zb~=8&yJzT|ntU+1cW-=BmBbOYrK5ZI9=*smA^{RHd(BAholun6JK2sIe{ll8a->c9
z*)|f!zU8mlMlM`F^TN@Y%a_m8=gnNspYu{I^ikSuBMJ*g*xC{kzaqD<y7W2gY$Hb4
zl)8k3X9kSm4_<_Z;4O82u0vaK49&!?Xh~%j`V%6ggAIeGN|f$VPTlhjD^^}oE>~Ux
zf5pvw){Z&t6?1m%m?O2$*}?Ynoc8-L``59deCtK`9fS@Lpn$j32tlsI%kZ_}$MS&s
z-3Y#iTe1FIgPYwCffjDl?a(~|j_Vh7ujuyaUc>ny=GPeJh>)pYP$mm*b6YgJhJg^&
zO?<JB54m0#>S!ncJ+$D0w}rYPwgKa43zxnqSSEuHjUA>qpda3T0<!_LBxNI7l0XXf
z1__&n#c>u^WGKKQCn-^~fR_Zan@ow=w*p)exNVZaK!6vEa&Q)6NJ<Fd**P%=JjIn1
zH-uxzmHOp`aGMmD8OKcJc)btV3S&t{W?f4BVX0UAJ_*mJMk}6}!Wd<COiEIQeqVeq
z=}3I9)c7}9#xZ?H5~SJP5nU9`?usSfcaqXgFUIw1&tXfI9d|1`SVQc9_UjoxiVb%D
z(u)z%e7myX6^_T(qjUL_OkWX`me{VmU(V)6k5DGFE6wd51Dm4Uu18;4U7@`F;J(e<
z!7TfD+5_y8Pe0Wke$^<=jqbSTJ>{=x)&3nfE@xj2n9Q=zE|FNG`F(>~xq=n7w{FHy
zKRj<y|980b_$^l&_$>*2^~#2jka%cMn$1ZWvGMWomSl4{8?Wyh9}>c94SnMg2D>bJ
zmKDVsL(R#S1pF+?#&BgFvm{1DDlh5#wjXBI%EoA^w;oT3;@*kG-elMBH*?l{;6U_+
zYmA1`;~jWz>u`m#vNtPI9@9r5{BEOx%^S%^Z2kD<-Db%KL0QoeyIDk-^45cF=$TK<
z%Fkop;^C)18wh!;`&dELoyr#<=d$G&II1E6H3q&!y^@cIt<Ha{eARxN@+C|C+utgg
z1FvyJp$;}o#EO(~R=hnxGWWo)28z|S3yB8r>gS0C&oAbX_3-@S_H&D$*B^bVVzAPC
zaK(s0(shepWp!;Mm%Q@IlB{RgV<baei61;lr8|p3cWwgLDZTW52{2u+lYl975fks-
zlLd=S7OTrvEe7I>Dbj%lCsD#9qe{ly_`_`G(TS|~hRc*2J6?C+Q0C!9%4Q$l>!|4;
zseGhV%&nK+*|+P~^-XN-p@az|46~Y*KFYqS*B)i|!z)Hio87Tbx$*L8Y!M%NVHm6B
z@pGov&r`~j4<qBPBd$q0%&u_VzvM}cM&OOHp9HTlQFLMp#pHt&NM&3RxZ;Zn(m}k%
zv_-f}SWLjRSbZ$dBwnUUDoQfR>lZIPu<!FVYd+t1pk;w!{b|O(S-0*R#+85Fa^%4U
zkH3C;?b_3?Kfb`x{M59AJ9qw2{O+3jKY41Ccfqm1u`N3f>gQcBmtMbS&Gn`FpKqQu
z>%!L35mLuhciwqbyEHI2)9K8RZr9(peq{Tk0&86(Cet*Z-hwgudNG@(+g@06{I`AQ
z|LU*KRY7OONduJ=jV5Re?$msg7Joy0n)oPRq{Yi*#z%qs@0ktD&uqPrwe`$GN9e<|
z>#iEa2E2T4`#q7j?%cvZPDo2j=*Xl9AW#b5j_>Hpo}jNXNtkB|^ICkjZas5mtN(Re
z)tmkBsOP`Er~TfMC6*6Cdvj0+WnxXC2aTsU;z;sNA4ou<cj5+t1I-35;o&&>y%c<U
zSAt)7GVZ_JfEPgPL8slgEj1UE`exjYybW?rSAkRQ0o@jGs_8H-!PQ#v1xEzkluP=x
zf@ssEZi=2m>aM`r0LVX9<X@0b{0AYDY~%|e1HVzYZzDzl8aNo{Uqvur=*T2aA8}rc
zBO~m|U@{G6!s5XgO(MBb*Zy;d*|4GQ0Kb=SZaZ)_o>EeO<x!5PzEEjGZ-^T2h;qz>
zYS#4j5ndMWV+lSM55q<Cg%`4Yc;c|9`}bG*g7Ic&cPzi<g%@sF^!)S62RXw=56kh`
zQ>4D5s`?a{WEM{tUwldbgp4s!n3ZRRq(!DAhW9D9S+G5|QrX2Oj*vFCS1YFs{oi^^
zIqCDQ>Gpqj#t=(n#^4N65thLj8G|iDW(>|4OzMUqxITX@>sLQz=XhUFC*Sz29&sZ6
z%;y)Wxn(zHT@nI`+zI&w<pV+!bNdb+Vq#%<KN_;shO#IrOfqu3@kQf4%`bfDe|KWd
z6Aixfo@-gmbg^L7dXvUvLmW9oX))obdg%1Vji)7L<LQSUI?Ya(5BmB2LFMIx*ps;x
z{D+EM_T->)ww(MnQb5n_jrx+dmvYO?a}A^E`|!i~B1M{y_6Pm?06NKS!kfclVKmqz
zX6HZ&ddNwgDbVI5%_-=Brb|?lI@!R!9SEM-bH;csa0iotBEwpyUvvD_#>wmEdmHM#
z^X{Lt?k`6ls(pX5A-%UbGGUmk{CM-y&u(R@N9Mh^an;ggTc*`5y`?IxJ|@0z%wHcG
z+Bn>5j!NkDr>ADTs_09lJ%?Uj{ot|U>GPH@nK!-o`3D}{d&O{lpSXm`WZQL4|H);C
zS@gBHZ`*$RwKvLDE!k=Du~)@EbTm6RJ0U7Ab<~&(uVnX$(&n@+AbqLW*BOWtZ>n`L
z4$(FO7?NnG04zduUxDPHVC5|Y9OA`Vq0?N|WDxHfpb>(k4qNkdIY6{bnm!3Wdfa)U
zjf)oA4p9vqUtz1@idoXzLVG*C*M&29Xfs*5pMtc5ojfs{?>?k%pG5bH3e)4#&F++b
zQqNc@x{mIQ>{6?uOU{<&oBAY&M&}`Lzm&*=(RvBeeELPi_D#$-^+OT6m0RWipCrni
z5fx<H7q72D`nI*0{a?#$&_U8Rq;2=R2b0Y>hPTY|>A2_rT<W;hESsuB`EYd{V(!$%
zQG6NQHdp?~vYR?PF~4SF9#1cUhNHK|<GfiH7b015;w+GJnr)H9#6DX+GRF&%;84dd
znZ<g7yOk5{8+JoS<!y(QHs!R`0hgEC_wyZxl(XE;rYWbDHa3;D;H0j-B6etOdqp(1
z30h(;`WB0%>!{}sw6{z87KpxVY5zNaKp0p{ouZ2!64S1WkJsyBhQxC4JLBdx&cnaM
zI$#W5?%IR_nhw59IYJcnfBqCFiMzLd_{kR1w6#Dn67d6oAro(PBv>Gd6gwv-33trI
zG28!;BumJKh)n>S;?T$~(<V)dEsC8q3FbfiP@w<hKdEhy78Ql6I35$9w!4Mt=&xmW
zT71lLN=ZcVUz5W{1=Mki0(=p9izB$-RU%Wr>ocjDU?)QU*Tf2z&4#874;{(|;zD_g
z^4`$U;VH@+%7?M=M1cPgi5`!w(=XWn#C)0VzKzn&(djI4ID(0bVkCBkCX4F45mQ)k
zAP|DVSi&Ni4jaqNAgSQ4>7qAMG4_H%Xi1R|=rhSxAV6A#f!o@YCh>}yGpQn4W-=Y;
zp;IdDrrsud<rK(f!7mK|Qn(=^EG9N7B5QD5Xhc|eSVU;t;H-$GSO@?ygi90ztV@rq
zZf;-OygH=M;Hz!ZPA2mG$73$dO3zJm4s)jEre|Fmb9}!k_2k6zsRN>MQ=o#bWL30q
ztDc+VIK-}TeQbz?C-N-j6mz@@FTeN7%z!k8Og!cnZi<JaMUOqJkoL{ZD^@fQ_ul5R
zr+idV5e|Nl(g9^F2V|F(We-?cHlVbm|JCC^v)sJtZZU4QfqhJe8|%}tR)$=YNRHDK
zoMX{}35{QtOxkPGHo$3f0>qgrlP6hl?E_B|iL-V(RfemO|2+_EP}Cpsyjjo^SSn*I
zh)(R!AfOMe(|xbq+z~!{(TnvDe-|A-e*9%KUD>Ifx=XvZ!^e$FzVX=#LHDm(R+HO@
z>wJ?xN$Y3O_e<`u#8-ObQf2b|vv2XryAS?+!uM2?@<wKSY|K4Fa<LI_Xu<Y)&%Jkc
zuKv~K<4j>+Y;wPOS>uE+7NzC{cgRx*xj=7It$h+(2BjsX^>%pi2m;2Oo#m-1A9P$;
z<?fr_7b`m2fX5Dg&uw>g{-FaO%4y7T$J0n?0dGP&@y=pr4V*zZUWnA2(s0xv6^lDO
zs5P8ase4vkGZWfG)ut!G$HNURHy-{`Y5Vc;jU)Z@E=vLbUf-0VGfVs9Et9<JMX#QC
zby0Pm#G?9_&K#Q3*Pzc$xon<)q|(wa1vh)?N)>AF3LC@b_)PKER=GU9Z{Oi^dH(pK
z%y2}72t!kolcM!ueKXVI<I}SGhU+7flTyJ|pMv<pGmFMc;}ui`DLR)Rh5dH6U44~{
z)~+q$PJ620p0bemK%9u;dS?#y*NRhd*iZ8wJhKAcc?&QLo5x`o5$IIGqE4QHNoDAn
zi3T0Zhj??TV^wTnY{yDNG@G56X{da~n30%}VO(7j%X8|LyWQr@xItmJyk^YI%`o_t
zsrAa~vRm8}va%+)Zz(&iaGfzk(syi!ME_|#HZ_6u>X748AawgnPbS;BYW>GC@!W8U
zGLi3!Pf1Ns^472V=;wiBDzdUF#ti%!bGXj)*gJ1AMqxgK(=-;ZGZ8~INwo(bb#TKD
z?WAta#SCWHI7JKVW3%YY2uk0geDJ|(+W*6zBDMup<Jy1U5*~K@XG?dm0lTnqCC+5%
z3`lDISlNRkoNhsdk?Es%vDo#?zFHj>w_5o&mQIUQD9R)5MG1b79FmVISd?f#Gr0Z9
z5^)n6{1#ws0Xrb_mc(e^Q`h~N%>Xtgwkf5bNKCom+R5RG%KEm=%JFw+$Mj;e+E%iV
z2DVwb5E<KX#kcRRzyA95@2Q#r<-t5+CKZqwmFW%2Pb=G$wY_3yzsm-1Zewy{_~dKZ
z=Ge$zPIti&DCoA>=Rn=+um-%8C=EoH>P%o^|HJCF^}{I~*z7=!KwCgkfJuVNpnU2f
zU9?oTYBwre<Y%TRjcWWr`C#{|E#<g$duf6>xAjbGuDQ?fm^fp3$D?!}rk=m)U%OoS
z$2Mw#CEY-UaY-_}?Bi`L;qsZgqf_H&Em|}yJ~evx1?@PEz*Srk<IqUR&Hi;eKpF+c
zkN;9WLLX|P#3b-KqlvUa>8W+ngRQgh_sVzgzZZo^v-G#;d~}_za~YcH){Di`+6XNb
z8@a4=<6FO9Kp<Gm`a^7BQsl@=yvlQ7=0&X3+DhDWZ6qlszrwNqsch7C*yrpLi>&pY
zAc0f6R1)Z*CQZ30y=Nr|6#dVYfJR<eD2Jqk=7q8l2UzVY2sugqL2TsGSyMERX{8(4
z>W%-$S|T)fYopB#?&Dl@YN*eHy6)CEjWaZlnv#VJe^ZN?b`m`?g&JdVv%3sutP{oQ
zO(MrL^uNV>%O4OJ!Vrw8iFgJ+8Uk-6tC*}{C<VP?F|=P7!>ll4Y!y=$qY{40zt@W9
zS7{LD$300AZml0a^7!LN4zry0doZnO_0_LiSML*t(EOL%=FYv1SL~r)vPXDG|6H$}
z-4)$~Om&N1BUVQsP&&cqOMpn}j)RMtbMazG-8^5q<@3|qO4a@b1|xmc`0-InJEoO_
z29|C+{rMJLir07kqI_c_+E58OtTVu`^*cC+skNYMIHeRsSM4=KiD?-hB!GmRIHeRF
z3cMmTiAgGB**NUNaHE5iWYim~3#-%|(LvLgu}60sSDx5c`QiEF%H~mlqxVcOhphPg
z);S+e75LMw<&{5WJhxgnDmwimr|{q2^2rv7MZRtO_*PV;)QSp(1Fl8bKGx3^R8!R1
zvd*fr5a-*T(&yBx#`?{l%)Ry7d!y7oSkXPy*s2g8FiP1J->+BOHu2fsp42DpI4jSd
zw_5q7-GpO))kWC{7u4ZDwX=`0sKe>HhW}89z?uI@c!Puq`>j^3Dh2L|X<#u#;R5@*
za4s4zhqrXE8dPDr^3$`Q?hV|If`bFL8+Bd(%S}nWSj67bdspvzOY4<7pdjvsoAw0c
zb?fB79;sACK4I-i%}{sGDD9~k3$BX#EzOSE!!jOukwx{%SYQ{u@$VWMLMAr`(9&(J
zbz5nB7wRb$+ejY6#qsn{#07y#Y!H=fF{-F0TJf2FGpZI}WT?dWD$r09fr*_!u-h10
zH46SE4lf3S7;UKe-Ep=i==~*)x3Q7wJqAvCQ#Lr<ezhSq1u=y@So^!fZjI)>;Y(59
z7kZA|G+rtH660?v_FysoLJl>DKsg)<#}*aax+XO?u|5tmiv}4<FQN<AMk(I%0n6E?
zoZPYWv)jXn;%uVaZ<?;=@gNqN2i0;<S3Q2YI6_Gal9fFlZ&SWq9T&Cwt7Yq1?5=3F
zIk!w#Vcv?1drOUI`WCe`TC<6v7iIZL@D%BB@=I+-QfjD`DA(P{C<&U#!Vn9w+nA!^
z`kZ?9i@iUs?UH)TicH@@9{wo^r5Y3(x<@%B(p?<x+Wy)6XOwrhhnjb?UXN^Lmgl1J
z6dd|0>$fK~bP$4HxVi_25`O|^S5B#ZdrniWoSu8~foadNl4l=b@tgJf`;_yWRrft=
zYVA+-WMaBFSE4;8bsid=-_gKY#<2kFnl8|kQ{)H(qJ}&jT~kaVMKlBG*gzTKwKSpy
z)G1xZ+ug@}Mss;_MxE8w3o^ljiHj(pun@<KRU8R1E>K@ef}7#-Osh3hX?`>9%ORuZ
zm;07)K5(GJLT-i@Yi8SyOe>%C^_r3r_D;yA)sKJO@dP}kWP(KnTM<ahpaZ=hM<-r1
z|JQ>W3&9{ckq{&!7#A`1>)Kw&J|b4{xOPF~9`QQR+7wKF(iKZ~zEQuCMepc0an8>A
z(aZXTW`(6C4zOlJYT>|Xru2ph!$)5?t)h5Fd46idhff_)&h_fkD=m>n6^tL4C_V0c
z^{$4(rOKw6FYLJG%8HVldj{4FoH)j62z{{c^e@@8v=I%HR$pB<vaPIql66W$z%k^B
zeM-lhxfAmShV-5$MNMpMLUF`8dOqrI8P*MDBnd@_9e)~(Y3(f5)5Yq$XD9@1N+9!e
zGl%{l3At-#4mVSAVk}swgw$_<8t7Cvwn#dZ@|c0gM7xHRF0EcU?s6twmfYKzY>JCA
zo2{1`GDeqFg@;CYZvJL_ZSD4N6ln9t|F97xnk5~aH}9bG%>#egp;Rq*&O6Ah*M%5D
zEdz6GWrJ3G8m~29KPpj*NQhr<N*EJrGLNaS<(ZW6S|reJetXL|S2h^xC=%s}^3B0{
zGnTP?pMLiN#7t~<_=)wODu*ae>;>nb7KZ3_#n=?X(>9hMUm14XyUej&@=Hkcm8x3k
zP@j}B9k*jjCbT7Yv%rr3`+q@ds)D2%j2icoYl%KRXyPJRNk=*{GeZDQ*SG6@(a?e@
z2GR`~T{>hILRKN&>!9f<kUiMPf&|?X<Q5T+s3#x@o%j$NleQXxfp+&HQFZ@k^a=p4
zU^64);v$qyaS^Q%ampsLu$jWrkv^`F=|<Pn7LX|+y{J+i4i=~Tp1yB<eB6@BpF#*k
zi}sL!^3ZRg)p$Ev3&)+cu4uN&f!eB3{bPpX7c+AlJ!(T|AT6e!MEMGIQ@WLpFcH@Q
zgtQCsMH$LP7sG`Bdj5~Ly@dQ@6RyrB#P>zmiv>+gCvS*A26kR7=d-_rge(t<hz$AV
zmypN^7|HM}myU#Iv$H29B=sopIyQD)d|dB7y;HKg%G>ejA4hUA+Gn$iY}u2fi-n&*
zAD3(gTZ*!&>>7`$D(yl?Z3-42@uxBT1kun!G{i!jGfYQgbf>Nj2k>IEhvVwj+O;PP
zQ$BmBqavjrr?Iz!!B>xPFej4l+KPuhgSmy06m(jgc_s?37F^h~n6MKJwso5&$6_m>
zy>L9Dm}%6twkl_f*%(Du*5glRV~Ultt*zLV9mVFeQHsv_zEP)Cw6?Uiw@Rcj2yT;f
z7mz%D)V83OpqDfrWD<SW(<}w^6VX)V*iymDDytw?dvJ;Rl%D4B7oK@9Iy&*f>BQ*h
z_nx_cIo9{$(I~_WTL0qG_LfC27!F4D?;my0@WLXgW$BA;t>TR+c9g_N(GQ!0J<=9^
z`;XEOKKMlGcfF?ihk5y2eH*o+1E+7o$SUZz$?s-MeNvX~r)+g}w@@BYNu3u!hnCVQ
zG|5=S)kv`5(8YY11)~?8Oj+V^835PZ#nrF^ldfaoGNbawzm<dLTRXnGG$A)P;ZnZo
zW8<fM<7IKV1LF@JJ0@+suuAW4uReAxCsvvrn|rMNZOL{lH@5xmSfoVhf?~ZscGQr)
zRZ+u!)P<QSH@c%=efeEb@BB{rCL{zaKtfR9i}(S~h*~8A+WB2)XGn;MN%JI)<6S`7
zkA-P6l4(^H#r}JW(BFtSgE}R{TGZ@O7Im#KV?PTg?m{QO?(wj5!hQqrOK0rnM`lt6
za?{M+;F{s?3WgzA@*|zX!@ZY?kK9{yRuN9~54s0+g44GM_zDU~<<LVXvq)Q~#;fL`
z^Bho8_yzMsVZdV7m43H8_9$nUJHk`i1QXOn-pL(G<OhD5+k8<TEo^sxBk#O`ysU$o
z7A(vEpjU`6Ejk<GvWYa*xFaYXkyeYYDHsp=lN;%(>io{o(%BizM-U$RG@%fd{DePr
z)MW*QF++8aliaBONDsP8K|6GE(?jp_hgpQv^k7~^Tj<~inailps$dw3Ta*QUA}!<t
zIRCR|?n*P5b`QNpmq6iA&U3-^wYHAd^s7y}&hu&*oxVG)7JpO_POFPl*pdFlvcf%`
z;vyU%#anb0P*jdCH*)WaM>Y4?;ur2xOJ}?A2Mp=K@DwkpU>#{N6+t)3N0%Sc75)g1
zw7c?%xCTK*=v#DGl0x1FL3P=KX~0h>>9lgeO!-HAA|8sD?7~fT7x|?0gDMyg!3a2{
z0k=UaZ09d%gARhHvT6DZ<U<E#M;s&%-(W&L2tT-^ToJ+k3D^s8PZn_zd^bhqhkH2r
z>0u^6a$}mA?C>iJy6ZvVq1w8~@q1><r>3%{MKDX9?UWx%2YN{tOp7iBc}s!2P;gHX
zszoiQ7A{qkL4!xw3d&<w92BQ!N1CI_T|z!dQCN{C`9o>pu-l}SRj11(Gv!UxEp&v>
zAvb~rOgiedlj0EJT141{Abgh&cQWgtQyOL{N{`$KmK61UnySOC3F*0Ez9tAy?N8<)
zeK4KZT@v&oy(@h+PlRg~<VNvz!N9DAjV3qEJ)PXBY+BkPO!v6|z?>7zGwGU&AYDsC
z)HBLa3b$BF3$#Fi>IlXM_cHh=2kjbMFs|;p9${<Yf3=qH0hA8ZIC7_a|DHnFNK(PJ
z|8@Lop457v_{d+2zpF0Djy#5uPX0mF-5!ML4o_`Mahi3Vo$!w%zhM26yFt*!&VM6r
z#HrFqK`UE2e*w%tVTNDld6<8qFa#4+6qgDYOygp{gZU$!!vE@*2(Hcl|GzZsRIb*Y
zU?Z7_?czE<Ov;iL=`YtG(YG0f8MYeQjn^1oGu4^eAw6NW`E<zTA=^Wg(21cdLr;a}
zhOG-99X>DoU_?>G^oU0zM@MdtN{kv8wKe*>=oQhQ#|(&hB({HSOPn>H$Ipo0n-HJi
zf++bFiS0>wNehx%lg=imBv&V&>UCYO{V4-drlo93Iht}NH9fT~)s^~8>KDBedsp<H
z)%&^L-}V{ZXIY=`(=Jat(06d(MSWlE+n!#S?n>XDe#SD)a))KV<&%t}j71q|GG}CN
z&s4IOWt{}4)K~o$_1lk&=@WA1=X~A2qJM4w9sN&Vl6XnwC0j4~Xh6k)?YZXMg@fV;
z?HY7qaPHt0gHH{~7}7H2lf26O<opFzqjkP@r}a!hUBNR2?-x!fTv>SBR%Bae`@U#G
z(Hq56iqDlSDNQeRmF^vC9D2?0>fuk9MVAdNTT*tud_hHYMOnqX5mQFIG_v=|Wg{OQ
z`SqxYqm<FBFCAK$SUIoq>&vEGw*T^Jm!BOoc1**VWn&&4vwzIFvHizZj;$U0(iQqE
zrd;vEIM2A_SJqv*>8j|f)?9UVyk~stgxCpn6V6;c?dr8xpPraJan8gauDN6KfhiNG
z?7cSp+LCLRTzmAo-q$r;_smq?)B#hknYwW5_Nm`bE1R}p+H2F!UqA8sUDMO151ZaH
zUAdv+h8^@bBYDQM8DCUY&g?&Pt9`6}h5d)>YpNfqK2(!lb64$*+UIJ2mUHE`vQjs=
z?uB}D{rvi;8xk9qG@Nj7$4JK_$7{3nvkGTTn{}cwywTP8bmKW^wex=G*{1ZShNg8*
z2VG{@4A&#BbM7K{i~FD_-m}4TZuXqnN4$C7g}w~mM&Chyq5rACfWVG91Lka>+i&j9
zd3nth^GoJ0od5of{cm*LxOYL~g0Tx0+?0OPft!?tl?y!!*DZW);n|xjZ+6{$Zqfe5
z)r-GaGGWQOCEqVCT<Tx??XscE7B2hx)?Le6mhZi7!fnfL`)GxA#ljUY-JW>+9k-vo
zW5OK=?;LmM3wO=CYu8;r-#z8-l`E51o?W$O)%UAQR?k}f+&w948t(0X@2Rz)+;{2$
z*8@A(Wvm;!ZpC`zdguC&HjLiz!h=&D+`DnW#`zo1J(RX-#-`SXS3eT_$m&PhH&5Jr
z{L#8ck8hc^<&~}JTQ_Xu+bXu5*nZ-%B|EZq%-C`0@#@FV?CiI*Vdu#w!k>6$mu{D9
z*UnvSPi}uIe7AA;%-#1tZGF1#&(VMO|M~1Q+n>#N_L=8KKL61Rd-tw*vF)XkFAshB
zxmQYF+4^e9t1Yj-*1Dl}Z|k@Fvi5D?U$lSu{?@-t{L34!RlMH+^=IA)ePhKNuN+7|
zP<dd(fws369Nc@b{cZo--yd=v+JE?|BU6sFy));XPmbmtz2oS)W7Wrv$Jf0(?A`ZI
zj63o4dl~Od*Zx+&*LHHw$wPk~_Se0CJ^%iI_Z!~d`~LZhe>#S_#vtB{R(AMtC}L&8
zC<LYcVsytbEHOQiLA>ItnHlKO49(1O7u2trCENsDq?z@)e!8bLvjI{vPikf(VB0ja
zN%shg*34#HUwv9Lhv?$jLCqYd8^Au%%#pfb+^m@o=<u?UW`0YT$ERs#Y@P8Hn)z*A
zXwdwDq)Xvzz|-W$+OJvX#p?j|ILGnp(siT3Cp`z!x6|>8h+XHx-IivUt-3tHS3MZ!
z5jZt-Lca**6E+zqxH4P`x)x=xMC>laIRgCF<mc8kL7xa!kGnEX#O~En_d$MM`X7WR
zA2oIBAB0H%Rh(0hf*0vIMEdEvLgb|YDz7Uh+aJU<0lAWqFDeI>PuA6mxYAJyH(dOv
zBl7vZdLx(`gb1cu2MBLB7_w7sP%K`gQH$_Rq7EA2W``@eJ0N`|08=m)7of;igU~*$
zPQ7rUR_I=<zt?Kio_^HuQ0$QoK}po~?LFWIi<JKNkV8;IYHnPjmWF@_Nk*Q7v8Mw|
zsHU$$O$Ct4u_&1fx)p!qXGLxbz)dm~tx_u7RlK6QQp;S~RZo*34>JH)FaBhtOFi;G
z{P-Yvf^ANR7Xx*7K_1o$aQCm&tzr_c>lh&Y4X-~zGGizUW8rw!0SrXAskK^nH;aY@
z`&c|{70(h_BJN5hvtBF(cY}LF+98P$Nyja#3~cgbfvd0|1Tgexm#_hl|D20w?dd(X
zJeH6B?*dlHY!Et943R0NY$)Wy3}eF~AEq3<jUzDc7{x}jOCfasGIlu|!^W~J*f@42
zyNZox6WG;kBAdjnVUuwm`C42rnu@0-uV>TQ4QvLh!jqVGR?TWyEt6Rtt7i?&!Dg{W
zye`tjT+EFb&1_Jef9fJ|?&V{C7GQJOT-*n0#(v+8YyrE8Eo3+2Ap91#h%IJI*iwj>
zzLhO!x3LxMc6JB5likJcW-Hk$wwm3;*06ioT6Q11pFP0VvGr^Ndys8p53x<`VaTi4
z%pPT1*jBcUZD)_M9qe(olRd$9u_xJ6Y&UzF{h2+(o@LLm=h+Kv58KOLWG}Io*(>Z-
zh~M7F_OrjR*Vyaq4cv%2z}{j9+1u<8JIs!-ci2&Oj2&n1vJ>n*c9Q*-z0W>ir`U(=
zBla=-gni0Rv(MP)>~HJ~_9gp@{hfUc2H$VlKiC=e9XreZ$-Za*Vn48dvvcf6cAovj
zerCV0Hg<uvvku(k@5G!BBHp;f@oFVEaudfZ-FSC8jED0G9?7G4G>_r2JdVfn1fIx~
zbQwIE_ku+CRNkBS;c2`tPv;h%fyWKAcsB3Hb9jG#2_L`*@?4A>gZU7i$Md<B7w|%E
z<3+rfm+(?Pl>dnj<HLCwFXt6}1Ru#q@zMNJUdb=xm-8`vEWd(}<5%*l_;@~nU(F}-
zN&Ff<nNQ)@^6U6i@RnWAr}G>53|_@&ayzfq9p^Q?mdm`3*YgJM;Inumck(9g;%@HY
zv$>c1xSt3396p!N<IQ|NzmYHCH}Qr1X5PYY;fwfUzJxF3%lNH)Ilm3hd*9CQ;CJ%7
z_}zRZU&UARd-xjM7+K5j<M;Ci_&UCxZ{QE|jr<|Li9gIA;hXuRd<);oxAE=#F}{O8
z&Uf-B_%8k=e~RzsPxC+XXZW-HIsQC<f$!ma`HTD|{xW}szsg(rKE9v-g}=sM=Wp;g
z`2qeGKgi$ahxlQBgujCefXDc8{w_bk-{U9wU-|p|1AdBs$UovA^H2Dv{51cJf6o8L
zzu;f;ulV2j*Zdp)E&m5U!@uKa`9Jyh{9pVB{%?Mc|H#ktpZL%G7v9D%@OIw872YX<
zG)P>MB)w#ijF4AomO`XZT<-{%BBV$u3a@L#NU>6!6fY%6iBgi3EcKF7q*UD+Q^4iO
z%NvnLx-~B^sOM{TtELxddZDJ<G`&dEi#5GO(@QmdgsNLBRo$lQw#re4dZ*pzGc*N!
zjvAv+wtH(D%(82a>~wo%Lj&x7z0Ys=hSH}>Zu0n>^#Pyk)z>+kO=f>XmDBF6m$|>e
zL}rK2&)tniuiWIGBb(;C-Az>vms#lUfM0Ug)fs(`dY9cP)wt^oey`ovpl@(D$!5eR
zSJ|C@z2DI!>%DG!ZFsGFuFDAnIh%tPW57dh28XNKJul4Tv^Q7PIJ`AZ8EJZCyWixM
z>%6kB!Aw~Z5jx#9jruyLy*?C$sr59tU9vB9j@ub%lB<xPFwIB_glOh~$2i+t<F1uW
z)u;~WlHXphhw|yG-R?#+eVXjvMuW%eaQTfj_9oeD*VnmSe)v0UjSj!v>8J_w%k%tI
z4YH%Y!5=Eja~-w*hEVv`yQ-XWoj+VP*2pfu><v>bUJ4$enr8)ken(xip2`yDaMdE5
z3a6Px*vLA2jZC#xHOEmayG<TPjX&U(jUL%m<8X#H**#U1SJ`W{*HVP2VdPV;b@&aw
z2D?`_)HKMbA!@J)pI`P=RoiPC=i0rs5p{M{VbEp{8uV1@29F&`0K{;6Om%KA1rHa&
zgBB5!W--XK<QjiC(wXCRt0j*JT0{{-JkEfxiV!2T$>GwBVJZ>{XOp{8=n=C6GO7fT
zP~Z@UtIn;0`D(nf?D93Z{Sg|NiWMOMR867Pc3047_j=uPMNNjOMv)7%Y7TfpRfE6?
zQALDD$d1o3U#_YPIGy2|+1F%uI-})zHBNhzy(?S#dPkjK@09Iz=p$a)EH?wu&>A6R
zsByY|ayaVC<#5%Dyc<xTF4<gTcgn6>yVvNoyK3D{rW$us6WZI@WUqJ0{?K531w38#
zNcjW0`{&BCKLSPfcqqymblC7ZV4>_)6ARNUl!YiQ<8x%M-+>fkG<$>F>zEJpwL3$A
z@l`dz3xBwOuEP(!R4bm4jL=@#!c~l~LgHSx)F?OW(VKl{Ez7<Le?y?D+E*3uP{l=Q
zHp(v9Lj)mdusiF*1a(nqiisK&BqGA;a5Vxs)fP5+0=@<mD*`=9_JVAH!nhg*330fL
zNZixV99Hi@3e_qesMLXyF*rekTn5qK!vu<}2}K4wuWAhy0R*r~E3i3OR-+oTF#s}D
z(-;O6L#Lq%u9dt#pVUxWYpw=1pz>V$YT4-wtD$PGL&f^#&;~SPm5SZMNd4U;OaV`b
z(5XUVROGC>h>@{9Ttoy>J)8obo<I~0Xt=vtHqP~;&o>zSc3-2<2#Sh23#s-x<hmNW
zPYxx_Rr`sd-s=u{KvrCh1|Vdh)>tjuK_R4?fFDiiX%6++Jpz9m9=*>#M-HXdsj3E|
zHUi_^ULY3_IJw&iis5xM%KipKSl<v50FCk@S{Zq$cFG1IucHQJK2Xybf@Va1(0wDj
zOrqMO>)q~p5dSV35Z2AXfHstyLs93lzlutVenLicQq@4!8m1aWU7_EAvb%hGpW6#m
z!$*LbgbAG|II<CnV2n_4O^<xLfiU&J|5^-5)o!$Ln1;?2GCYXdWFZ>w2fq4c&{i`r
z-HW!jgCc_Fg@U#>fM^Ds)n?EIv~#^2DXLgxgNCkf)v98uiH6durrI#T`WxInRK9HX
z1sr~AF*6|*rD&|dKqbo<Vcej~G*XJ;go;oda5&Lh>dgT5(6|#~Z$j#JSB-3Jl4~0s
z{;)dA5>lBZBkMB8fd*0U`ntS2Ii}VfKtoj_pZHQ`#`bVg@vnyy@UMrRS|#)%e3)t!
zfM(T96jj7eK~1%?uMxwB(P{UPCJ@CR-sG;Pa*5s;uHn1Dx6s)Ew_nX#m}*qp8Krf(
zP#86=0i(aOIaDJBsF>*PB#`Pbsv8+3d#F6mLtPX`v@ROZ;}a7QgRco0G1Os%a7j&a
zgQ*^)yT@K@2ALChVWznRfkg^~AT7Y_S~KbxqnF)@9#kubhzuc^GpdW;X#@zwL>(+d
zr`OkjiiHqJ6^6@3A~wKEeU-JiG_2dm66On_N22>WJV5I}wQ54Jl7etgVE%lnJBM5&
zV*sTHX_gat(MS^=qp!gsJ8L6@1C5%S7#gCgKwg1E0f(;vHR=VilWE|YS5pfDrH$Hx
z0tf`@;i4i)4<{l}-GKywYVbEXZTcFYufPc01j!6lsVY^ZprSsEj&Z<uhsWpeRb3pA
zV!GUdgO<LkAg=&Z22A}ZQ$~zr$S+D8oH<aO8p#)qW~YqlEYS?rATSnLtWig^5JA={
zD#V;`4ONGHveO`pZcQVbiXay;1*l7*izPYWmFlZKQovU$Ib2?8mZw?r2CAh-?_8<c
zUqjPmIi#!4MhiMr-Ha@H8tm2RkyQoO(%3FnKgelyz%Tm}f9piWiU>Lj8XVKZM*fJd
zppZVc@MesrfofSD+BA!P9-29XKEk;x3{|G77I=e6HAp%pfI;GgITq~oUVD?V4s+T@
zuVk-v>Fe@~^CPPr{%R0*P-C?jKnb1RFu%}*Q<T$<gf32|BD&cFp6<ScSJB;k)h<34
z(_Hslp9$U6>vq%{&@lq@kWEK5jV->$W)B86cfjkL9l)S~=>Sm0ZL9-XcFKDC&;agt
zcqCtdnzpFOM2j2899gOk)blxwhPkq%+Kq*S3;zgEY>gCUM|V&uH@Ouis09d)!A^Aw
zPF_WkwQkG@#PUO{{Nj@EIhcxLRx0v@P$hX0>c}P>s@&vcrB4BUsI5wD^eLiGF?~wt
zBbIHI`6KdB*Y<q4loC*B0a*#Clz>VJsFZ+838=JGUsaeVAgaj(h{8N1Q<x_fi<S8!
z5m8|tfC}>fRG0^#!aM@X&!Z3d<`Ymp0p%l^!h9rCm`@P-1d&e=`C8sai6v@f{wRX8
z5}cLbtOREzI4i+f3C>DzR!XUWQYs(_aLM9B5CvNHMr#p{7Hi(h{Lvx=ffi^<juxw3
z_=wdmbc(!?;wYq43n|q?O0`gU5NM$WdMPDrql9e~t&M<e1Y{#18v)q}$VNam%4!io
z6cI!bK@<^0k(Sj;;YUD4#b}Z`;YUEl<WWpO#RODL9>tVQF(m`eZ3M0%6D3nj5G4dr
zLJ))(g@hM{gcpT`7lniug@hM{gcpS+1W`&5r367pQ3#~Kr%+#K70n2wfJt}|1R;eD
zNP!O^Y=jgxLJC_R(y-+r4I5#EjWEJS7-7pRHO!GgOJO9Guu)t#LJ1q8gpE+bMkrw;
zl&}#>*zze6D<xtj2to!MA%l&O!A8hnBV@1<GS~<iY=jIpLIxWl1K8T=Ll8v1@JbMU
W2%>->3J9Wr?l-V&_Su?ry8j2p&Q&b{
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/fontawesome-webfont.woff b/ui/new-ui-samples/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000000000000000000000000000000000000..8b280b98fa2fa261aa4b0f8fd061f772073ef83e
GIT binary patch
literal 71508
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
F003Px<E8)r
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/fontawesome-webfont.woff2 b/ui/new-ui-samples/fonts/fontawesome-webfont.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..3311d585145b1cc1b9581e914acbb32d8542b4f5
GIT binary patch
literal 56780
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/fontello.eot b/ui/new-ui-samples/fonts/fontello.eot
new file mode 100644
index 0000000000000000000000000000000000000000..4485477e781e2444c35c47b5b8944695fcb79af3
GIT binary patch
literal 42700
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
DzM+#I
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/fontello.svg b/ui/new-ui-samples/fonts/fontello.svg
new file mode 100644
index 0000000..7efcd70
--- /dev/null
+++ b/ui/new-ui-samples/fonts/fontello.svg
@@ -0,0 +1,220 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Copyright (C) 2014 by original authors @ fontello.com</metadata>
+<defs>
+<font id="fontello" horiz-adv-x="1000" >
+<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
+<missing-glyph horiz-adv-x="1000" />
+<glyph glyph-name="user" unicode="" d="m786 66q0-67-41-106t-108-39h-488q-67 0-108 39t-41 106q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q5 0 24-12t41-27 60-27 75-12 74 12 61 27 41 27 24 12q34 0 62-11t48-30 34-45 24-55 15-60 8-61 2-58z m-179 498q0-88-63-151t-151-63-152 63-62 151 62 152 152 63 151-63 63-152z" horiz-adv-x="785.7" />
+<glyph glyph-name="help-circled" unicode="" d="m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="search" unicode="" d="m643 386q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-22-50t-50-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
+<glyph glyph-name="tag" unicode="" d="m250 600q0 30-21 51t-50 20-51-20-21-51 21-50 51-21 50 21 21 50z m595-321q0-30-20-51l-274-274q-22-21-51-21-30 0-50 21l-399 399q-21 21-36 57t-15 65v232q0 29 21 50t50 22h233q29 0 65-15t57-36l399-399q20-21 20-50z" horiz-adv-x="857.1" />
+<glyph glyph-name="dot-2" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 32-32 78 32 78 78 32z m350 0q46 0 78-32t32-78q0-44-33-77t-77-33q-46 0-78 32t-32 78 32 78 78 32z" horiz-adv-x="570" />
+<glyph glyph-name="arrows-cw" unicode="" d="m843 261q0-3 0-4-36-150-150-243t-267-93q-81 0-157 31t-136 88l-72-72q-11-11-25-11t-25 11-11 25v250q0 14 11 25t25 11h250q14 0 25-11t10-25-10-25l-77-77q40-37 90-57t105-20q74 0 139 37t104 99q6 10 29 66 5 13 17 13h107q8 0 13-6t5-12z m14 446v-250q0-14-10-25t-26-11h-250q-14 0-25 11t-10 25 10 25l77 77q-82 77-194 77-75 0-140-37t-104-99q-6-10-29-66-5-13-17-13h-111q-7 0-13 6t-5 12v4q36 150 151 243t268 93q81 0 158-31t137-88l72 72q11 11 25 11t26-11 10-25z" horiz-adv-x="857.1" />
+<glyph glyph-name="print" unicode="" d="m214-7h500v143h-500v-143z m0 357h500v214h-89q-22 0-38 16t-16 38v89h-357v-357z m643-36q0 15-10 25t-26 11-25-11-10-25 10-25 25-10 26 10 10 25z m72 0v-232q0-7-6-12t-12-6h-125v-89q0-22-16-38t-38-16h-536q-22 0-37 16t-16 38v89h-125q-7 0-13 6t-5 12v232q0 44 32 76t75 31h36v304q0 22 16 38t37 16h375q23 0 50-12t42-26l85-85q15-16 27-43t11-49v-143h35q45 0 76-31t32-76z" horiz-adv-x="928.6" />
+<glyph glyph-name="cancel-circled" unicode="" d="m641 224q0 14-10 25l-101 101 101 101q10 11 10 25 0 15-10 26l-51 50q-10 11-25 11-15 0-25-11l-101-101-101 101q-11 11-26 11-15 0-25-11l-50-50q-11-11-11-26 0-14 11-25l101-101-101-101q-11-11-11-25 0-15 11-26l50-50q10-11 25-11 15 0 26 11l101 101 101-101q10-11 25-11 15 0 25 11l51 50q10 11 10 26z m216 126q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="edit-alt" unicode="" d="m0-150l0 1000 646 0-164-164-318 0 0-672 672 0 0 319 164 164 0-647-1000 0z m363 363l0 118 6 0q39 2 72-30 39-39 39-88l-117 0z m51 176l367 367 125-125-367-367z m397 397l64 64 125-125-64-64z" horiz-adv-x="1000" />
+<glyph glyph-name="login" unicode="" d="m661 350q0-14-11-25l-303-304q-11-10-26-10t-25 10-10 25v161h-250q-15 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 10 25t25 10 26-10l303-304q11-10 11-25z m196 196v-392q0-67-47-114t-114-47h-178q-7 0-13 5t-5 13q0 2-1 11t0 15 2 13 5 11 12 3h178q37 0 63 27t27 63v392q0 37-27 63t-63 27h-174t-6 0-6 2-5 3-4 5-1 8q0 2-1 11t0 15 2 13 5 11 12 3h178q67 0 114-47t47-114z" horiz-adv-x="857.1" />
+<glyph glyph-name="logout" unicode="" d="m357 46q0-2 1-11t0-14-2-14-5-11-12-3h-178q-67 0-114 47t-47 114v392q0 67 47 114t114 47h178q8 0 13-5t5-13q0-2 1-11t0-15-2-13-5-11-12-3h-178q-37 0-63-27t-27-63v-392q0-37 27-63t63-27h174t6 0 7-2 4-3 4-5 1-8z m518 304q0-14-11-25l-303-304q-11-10-25-10t-25 10-11 25v161h-250q-14 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 11 25t25 10 25-10l303-304q11-10 11-25z" horiz-adv-x="928.6" />
+<glyph glyph-name="download" unicode="" d="m0 84v73q0 33 24 56t57 24 56-24 24-56v-73q0-17 12-29t30-13h531q18 0 30 13t12 29v73q0 33 24 56t56 24 57-24 24-56v-73q0-84-59-143t-144-60h-531q-84 0-144 60t-59 143z m155 359q0 33 24 57 23 23 56 23t57-23l105-106v344q0 33 24 57t56 23 57-23 24-57v-344l110 110q24 24 57 24t56-24q24-23 24-56t-24-57l-247-247q-24-25-57-25-32 0-56 25l-242 242q-24 24-24 57z" horiz-adv-x="937.5" />
+<glyph glyph-name="th-large" unicode="" d="m429 279v-215q0-29-22-50t-50-21h-286q-29 0-50 21t-21 50v215q0 29 21 50t50 21h286q29 0 50-21t22-50z m0 428v-214q0-29-22-50t-50-22h-286q-29 0-50 22t-21 50v214q0 29 21 50t50 22h286q29 0 50-22t22-50z m500-428v-215q0-29-22-50t-50-21h-286q-29 0-50 21t-21 50v215q0 29 21 50t50 21h286q29 0 50-21t22-50z m0 428v-214q0-29-22-50t-50-22h-286q-29 0-50 22t-21 50v214q0 29 21 50t50 22h286q29 0 50-22t22-50z" horiz-adv-x="928.6" />
+<glyph glyph-name="th" unicode="" d="m286 154v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q22 0 38-15t16-38z m0 285v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q22 0 38-16t16-38z m357-285v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q23 0 38-15t16-38z m-357 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q22 0 38-16t16-38z m357-286v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q23 0 38-16t16-38z m357-285v-108q0-22-16-37t-38-16h-178q-22 0-38 16t-16 37v108q0 22 16 38t38 15h178q23 0 38-15t16-38z m-357 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q23 0 38-16t16-38z m357-286v-107q0-22-16-38t-38-15h-178q-22 0-38 15t-16 38v107q0 23 16 38t38 16h178q23 0 38-16t16-38z m0 286v-107q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v107q0 22 16 38t38 16h178q23 0 38-16t16-38z" horiz-adv-x="1000" />
+<glyph glyph-name="th-list" unicode="" d="m286 154v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q22 0 38-15t16-38z m0 285v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q22 0 38-16t16-38z m714-285v-108q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37v108q0 22 16 38t38 15h535q23 0 38-15t16-38z m-714 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q22 0 38-16t16-38z m714-286v-107q0-22-16-38t-38-15h-535q-23 0-38 15t-16 38v107q0 23 16 38t38 16h535q23 0 38-16t16-38z m0 286v-107q0-22-16-38t-38-16h-535q-23 0-38 16t-16 38v107q0 22 16 38t38 16h535q23 0 38-16t16-38z" horiz-adv-x="1000" />
+<glyph glyph-name="star" unicode="" d="m929 489q0-12-15-27l-203-197 48-279q1-4 1-12 0-11-6-19t-17-9q-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
+<glyph glyph-name="star-empty" unicode="" d="m634 290l171 165-235 35-106 213-105-213-236-35 171-165-41-235 211 111 211-111z m295 199q0-12-15-27l-203-197 48-279q1-4 1-12 0-28-23-28-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
+<glyph glyph-name="users" unicode="" d="m331 350q-90-3-148-71h-75q-45 0-77 22t-31 66q0 197 69 197 4 0 25-11t54-24 66-12q38 0 75 13-3-21-3-37 0-78 45-143z m598-356q0-66-41-105t-108-39h-488q-68 0-108 39t-41 105q0 30 2 58t8 61 14 61 24 54 35 45 48 30 62 11q6 0 24-12t41-26 59-27 76-12 75 12 60 27 41 26 23 12q35 0 63-11t47-30 35-45 24-54 15-61 8-61 2-58z m-572 713q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m393-214q0-89-63-152t-151-62-152 62-63 152 63 151 152 63 151-63 63-151z m321-126q0-43-31-66t-77-22h-75q-57 68-147 71 45 65 45 143 0 16-3 37 37-13 74-13 33 0 67 12t54 24 24 11q69 0 69-197z m-71 340q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z" horiz-adv-x="1071.4" />
+<glyph glyph-name="upload" unicode="" d="m0 84v73q0 33 24 56t57 24 56-24 24-56v-73q0-17 12-29t30-13h531q18 0 30 13t12 29v73q0 33 24 56t56 24 57-24 24-56v-73q0-84-59-143t-144-60h-531q-84 0-143 59t-60 144z m155 407q0 33 24 57l247 247q23 23 57 23 33 0 56-23l243-242q23-24 23-57t-23-57q-24-23-57-23t-57 23l-105 105v-344q0-33-24-57t-56-24q-33 0-57 24t-24 57v344l-110-110q-24-23-57-23t-56 23-24 57z" horiz-adv-x="937.5" />
+<glyph glyph-name="circle-thin" unicode="" d="m429 707q-73 0-139-28t-114-76-76-114-29-139 29-139 76-113 114-77 139-28 138 28 114 77 76 113 29 139-29 139-76 114-114 76-138 28z m428-357q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="dot-circled" unicode="" d="m571 350q0-59-41-101t-101-42-101 42-42 101 42 101 101 42 101-42 41-101z m-142 304q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="ok" unicode="" d="m932 534q0-22-15-38l-404-404-76-76q-16-15-38-15t-38 15l-76 76-202 202q-15 16-15 38t15 38l76 76q16 16 38 16t38-16l164-165 366 367q16 16 38 16t38-16l76-76q15-16 15-38z" horiz-adv-x="1000" />
+<glyph glyph-name="check-empty-1" unicode="" d="m625 707h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v464q0 37-26 63t-63 26z m161-89v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
+<glyph glyph-name="clock-2" unicode="" d="m0 349q0 188 134 322t322 134 321-134 133-322-133-321-321-133-322 133-134 321z m119 0q0-140 99-238t238-99 238 99 99 238-99 238-238 99-238-99-99-238z m172-69l0 117 117 0 0 213 117 0 0-330-234 0z" horiz-adv-x="910" />
+<glyph glyph-name="ok-squared" unicode="" d="m382 125l343 343q10 10 10 25t-10 25l-57 57q-11 10-25 10t-25-10l-261-261-118 118q-10 11-25 11t-25-11l-57-57q-10-11-10-25t10-25l200-200q11-11 25-11t25 11z m475 493v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
+<glyph glyph-name="pin" unicode="" d="m268 368v250q0 8-5 13t-13 5-13-5-5-13v-250q0-8 5-13t13-5 13 5 5 13z m375-197q0-14-11-25t-25-10h-239l-29-270q-1-7-6-11t-11-5h-1q-15 0-17 15l-43 271h-225q-15 0-25 10t-11 25q0 69 44 124t99 55v286q-29 0-50 21t-22 50 22 50 50 22h357q29 0 50-22t21-50-21-50-50-21v-286q55 0 99-55t44-124z" horiz-adv-x="642.9" />
+<glyph glyph-name="eye" unicode="" d="m929 314q-85 132-213 197 34-58 34-125 0-104-73-177t-177-73-177 73-73 177q0 67 34 125-128-65-213-197 75-114 187-182t242-68 242 68 187 182z m-402 215q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-12 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m473-215q0-19-11-38-78-129-210-206t-279-77-279 77-210 206q-11 19-11 38t11 39q78 128 210 205t279 78 279-78 210-205q11-20 11-39z" horiz-adv-x="1000" />
+<glyph glyph-name="attach" unicode="" d="m783 77q0-65-44-109t-109-44q-75 0-131 55l-434 434q-63 64-63 151 0 88 62 150t150 62q88 0 152-63l338-338q5-5 5-12 0-9-17-26t-26-17q-7 0-13 5l-338 339q-44 43-101 43-59 0-100-42t-40-101q0-58 42-101l433-433q35-35 81-35 36 0 59 23t24 59q0 46-36 81l-324 324q-14 14-33 14-16 0-27-11t-11-27q0-18 14-33l229-228q6-6 6-13 0-9-18-26t-26-17q-7 0-12 5l-229 229q-35 34-35 83 0 46 32 78t77 32q49 0 83-36l325-324q55-54 55-131z" horiz-adv-x="785.7" />
+<glyph glyph-name="unlink" unicode="" d="m245 141l-143-143q-5-5-13-5-6 0-13 5-5 5-5 13t5 13l143 142q6 5 13 5t13-5q5-5 5-12t-5-13z m94-23v-179q0-8-5-13t-13-5-12 5-5 13v179q0 8 5 13t12 5 13-5 5-13z m-125 125q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13 5 13 13 5h178q8 0 13-5t5-13z m706-72q0-67-48-113l-82-81q-46-47-113-47-68 0-114 48l-186 187q-12 11-24 31l134 10 152-153q15-15 38-15t38 15l82 81q15 16 15 37 0 23-15 38l-153 154 10 133q20-12 31-23l188-188q47-48 47-114z m-345 404l-133-10-152 153q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l153-153-10-134q-20 12-32 24l-187 187q-47 48-47 114 0 67 47 113l82 82q47 46 114 46 67 0 114-47l186-187q12-12 23-32z m354-46q0-8-5-13t-13-5h-179q-8 0-13 5t-5 13 5 12 13 5h179q8 0 13-5t5-12z m-304 303v-178q0-8-5-13t-13-5-13 5-5 13v178q0 8 5 13t13 5 13-5 5-13z m227-84l-143-143q-6-5-13-5t-12 5q-5 6-5 13t5 13l142 142q6 5 13 5t13-5q5-5 5-12t-5-13z" horiz-adv-x="928.6" />
+<glyph glyph-name="link" unicode="" d="m812 171q0 23-15 38l-116 116q-16 16-38 16-24 0-40-18 1-1 10-10t12-12 9-11 7-14 2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7-11 9-12 12-10 10q-19-17-19-40 0-23 16-38l115-116q15-15 38-15 22 0 38 15l82 81q15 16 15 37z m-392 394q0 22-15 38l-115 115q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l116-116q15-15 38-15 23 0 40 17-2 2-11 11t-12 12-8 10-7 14-2 16q0 22 15 38t38 15q9 0 16-2t14-7 10-8 12-12 11-11q18 17 18 41z m500-394q0-67-48-113l-82-81q-46-47-113-47-68 0-114 48l-115 115q-46 47-46 114 0 68 49 116l-49 49q-48-49-116-49-67 0-114 47l-116 116q-47 47-47 114t47 113l82 82q47 46 114 46 67 0 114-47l114-116q47-46 47-113 0-69-49-117l49-49q48 49 116 49 67 0 114-47l116-116q47-47 47-114z" horiz-adv-x="928.6" />
+<glyph glyph-name="home" unicode="" d="m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z" horiz-adv-x="928.6" />
+<glyph glyph-name="info" unicode="" d="m357 100v-71q0-15-10-25t-26-11h-285q-15 0-25 11t-11 25v71q0 15 11 25t25 11h35v214h-35q-15 0-25 11t-11 25v71q0 15 11 25t25 11h214q15 0 25-11t11-25v-321h35q15 0 26-11t10-25z m-71 643v-107q0-15-11-25t-25-11h-143q-14 0-25 11t-11 25v107q0 14 11 25t25 11h143q15 0 25-11t11-25z" horiz-adv-x="357.1" />
+<glyph glyph-name="info-circled" unicode="" d="m571 82v89q0 8-5 13t-12 5h-54v286q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h53v-179h-53q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h250q7 0 12 5t5 13z m-71 500v89q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h107q8 0 13 5t5 13z m357-232q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="export" unicode="" d="m786 298v-144q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h142q7 0 13-6t5-12q0-15-15-18-43-15-74-34-5-2-9-2h-62q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v119q0 11 10 16 16 7 30 21 9 9 20 4 12-5 12-16z m132 277l-214-214q-10-11-25-11-7 0-14 3-22 9-22 33v107h-89q-181 0-245-73-66-77-41-264 2-13-11-19-5-1-7-1-9 0-14 7-6 8-12 17t-22 38-28 56-21 64-10 68q0 27 2 50t8 51 15 49 27 45 38 42 52 34 70 27 89 17 110 6h89v107q0 24 22 33 7 3 14 3 14 0 25-11l214-214q11-11 11-25t-11-25z" horiz-adv-x="928.6" />
+<glyph glyph-name="export-alt" unicode="" d="m561 236l196 196q11 11 11 25t-11 25l-196 197q-17 17-39 7-22-9-22-32v-90q-66 0-121-11t-90-28-64-44-42-53-25-61-12-62-3-62q0-101 93-226 6-6 14-6 4 0 7 1 13 5 11 19-25 197 34 264 26 29 73 42t125 13v-89q0-24 22-33 7-3 14-3 14 0 25 11z m296 382v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
+<glyph glyph-name="share" unicode="" d="m679 279q74 0 126-53t52-126-52-126-126-53-127 53-52 126q0 7 1 19l-201 100q-51-48-121-48-75 0-127 53t-52 126 52 126 127 53q70 0 121-48l201 100q-1 12-1 19 0 74 52 126t127 53 126-53 52-126-52-126-126-53q-71 0-122 48l-201-100q1-12 1-19t-1-19l201-100q51 48 122 48z" horiz-adv-x="857.1" />
+<glyph glyph-name="share-squared" unicode="" d="m714 183q0 49-35 84t-84 36q-46 0-80-33l-135 67q1 9 1 13t-1 13l135 67q34-33 80-33 50 0 84 36t35 84-35 84-84 35-84-35-35-84q0-4 1-13l-134-67q-35 32-81 32-49 0-84-35t-35-84 35-84 84-35q46 0 81 32l134-67q-1-9-1-13 0-49 35-84t84-35 84 35 35 84z m143 435v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
+<glyph glyph-name="retweet" unicode="" d="m714 11q0-8-5-13t-13-5h-535q-5 0-8 1t-5 4-3 4-2 7 0 6v335h-107q-15 0-25 11t-11 25q0 13 8 23l179 214q11 12 27 12t28-12l178-214q9-10 9-23 0-15-11-25t-25-11h-107v-214h321q9 0 14-6l89-108q4-6 4-11z m357 232q0-14-8-23l-179-214q-11-13-27-13t-27 13l-179 214q-8 9-8 23 0 14 10 25t26 11h107v214h-322q-9 0-14 7l-89 107q-4 5-4 11 0 7 5 12t13 6h536q4 0 7-1t5-4 3-5 2-6 1-7v-334h107q14 0 25-11t10-25z" horiz-adv-x="1071.4" />
+<glyph glyph-name="attention-alt" unicode="" d="m286 154v-125q0-15-11-25t-25-11h-143q-14 0-25 11t-11 25v125q0 14 11 25t25 10h143q15 0 25-10t11-25z m16 589l-15-429q-1-14-12-25t-25-10h-143q-14 0-25 10t-12 25l-15 429q-1 14 9 25t25 11h179q14 0 25-11t9-25z" horiz-adv-x="357.1" />
+<glyph glyph-name="attention" unicode="" d="m571 83v106q0 8-5 13t-12 5h-108q-7 0-12-5t-5-13v-106q0-8 5-13t12-6h108q7 0 12 6t5 13z m-1 208l10 257q0 6-5 10-7 6-14 6h-122q-7 0-14-6-5-4-5-12l9-255q0-5 6-9t13-3h103q8 0 13 3t6 9z m-7 522l428-786q20-35-1-70-10-17-26-26t-35-10h-858q-18 0-35 10t-26 26q-21 35-1 70l429 786q9 17 26 27t36 10 36-10 27-27z" horiz-adv-x="1000" />
+<glyph glyph-name="attention-circled" unicode="" d="m429 779q116 0 215-58t156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58z m71-696v106q0 8-5 13t-12 5h-107q-8 0-13-5t-6-13v-106q0-8 6-13t13-6h107q7 0 12 6t5 13z m-1 192l10 346q0 7-6 10-5 5-13 5h-123q-8 0-13-5-6-3-6-10l10-346q0-6 5-10t14-4h103q8 0 13 4t6 10z" horiz-adv-x="857.1" />
+<glyph glyph-name="location" unicode="" d="m429 493q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m142 0q0-61-18-100l-203-432q-9-18-27-29t-37-11-38 11-26 29l-204 432q-18 39-18 100 0 118 84 202t202 84 202-84 83-202z" horiz-adv-x="571.4" />
+<glyph glyph-name="trash" unicode="" d="m286 439v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m143 0v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m142 0v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q7 0 12-5t5-13z m72-404v529h-500v-529q0-12 4-22t8-15 6-5h464q2 0 6 5t8 15 4 22z m-375 601h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q22 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
+<glyph glyph-name="doc" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z" horiz-adv-x="857.1" />
+<glyph glyph-name="docs" unicode="" d="m946 636q23 0 38-16t16-38v-678q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v160h-303q-23 0-38 16t-16 38v375q0 22 11 49t27 42l228 228q15 16 42 27t49 11h232q23 0 38-16t16-38v-183q38 23 71 23h232z m-303-119l-167-167h167v167z m-357 214l-167-167h167v167z m109-361l176 176v233h-214v-233q0-22-15-38t-38-15h-233v-357h286v143q0 22 11 49t27 42z m534-449v643h-215v-232q0-22-15-38t-38-15h-232v-358h500z" horiz-adv-x="1000" />
+<glyph glyph-name="doc-text" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-572 483q0 7 5 12t13 5h393q8 0 13-5t5-12v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36z m411-125q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z m0-143q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z" horiz-adv-x="857.1" />
+<glyph glyph-name="doc-inv" unicode="" d="m571 564v264q13-8 21-16l227-228q8-7 16-20h-264z m-71-18q0-22 16-38t38-15h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304z" horiz-adv-x="857.1" />
+<glyph glyph-name="doc-text-inv" unicode="" d="m819 584q8-7 16-20h-264v264q13-8 21-16z m-265-91h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304q0-22 16-38t38-15z m89-411v36q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v36q0 7-5 12t-13 5h-393q-8 0-13-5t-5-12v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v35q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-35q0-8 5-13t13-5h393q8 0 13 5t5 13z" horiz-adv-x="857.1" />
+<glyph glyph-name="file-pdf" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-287 331q18-14 47-31 33 4 65 4 82 0 99-27 9-13 1-29 0-1-1-1l-1-2v0q-3-21-39-21-27 0-65 11t-72 29q-123-13-219-46-85-146-135-146-8 0-15 4l-14 6q0 1-3 3-6 6-4 20 5 23 32 51t73 54q8 5 13-3 1-1 1-2 29 47 60 110 38 76 58 146-13 46-17 89t4 71q6 22 23 22h12q13 0 20-8 10-12 5-38-1-3-2-4 0-2 0-5v-17q-1-68-8-107 31-91 82-133z m-322-229q30 13 77 88-29-22-49-47t-28-41z m223 513q-9-23-2-73 1 4 4 24 0 2 4 24 1 3 3 5-1 0-1 1t0 1-1 1q0 12-7 20 0-1 0-1v-2z m-70-368q76 30 159 45-1 0-7 5t-9 8q-43 37-71 98-15-48-47-110-16-31-25-46z m361 8q-14 14-78 14 42-16 69-16 8 0 10 1 0 0-1 1z" horiz-adv-x="857.1" />
+<glyph glyph-name="file-word" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-656 500v-59h39l92-369h88l72 271q4 11 5 25 1 9 1 14h3l1-14q1-1 2-11t3-14l72-271h89l91 369h39v59h-167v-59h50l-55-245q-3-11-4-25l-1-12h-3l-1 12q-1 2-2 11t-3 14l-81 304h-63l-81-304q-1-5-2-13t-2-12l-2-12h-2l-2 12q-1 14-4 25l-55 245h50v59h-167z" horiz-adv-x="857.1" />
+<glyph glyph-name="file-excel" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-547 131v-59h157v59h-42l58 90q3 4 5 9t5 8 2 2h1q0-2 2-6 2-2 3-4t3-4 4-5l60-90h-43v-59h163v59h-38l-107 152 108 158h38v59h-156v-59h41l-57-89q-2-4-6-9t-5-8l-1-1h-1q-1 2-3 5-3 6-9 13l-59 89h42v59h-162v-59h38l106-152-109-158h-38z" horiz-adv-x="857.1" />
+<glyph glyph-name="file-powerpoint" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-554 131v-59h183v59h-52v93h76q43 0 66 9 37 12 59 48t23 82q0 45-21 78t-56 49q-27 10-72 10h-206v-59h52v-310h-52z m197 156h-66v150h67q29 0 46-10 31-19 31-64 0-50-34-67-18-9-44-9z" horiz-adv-x="857.1" />
+<glyph glyph-name="file-image" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-72 250v-178h-571v107l107 107 71-71 215 214z m-464 108q-45 0-76 31t-31 76 31 76 76 31 76-31 31-76-31-76-76-31z" horiz-adv-x="857.1" />
+<glyph glyph-name="cog" unicode="" d="m571 350q0 59-41 101t-101 42-101-42-42-101 42-101 101-42 101 42 41 101z m286 61v-124q0-7-4-13t-11-7l-104-16q-10-30-21-51 19-27 59-77 6-6 6-13t-5-13q-15-21-55-61t-53-39q-7 0-14 5l-77 60q-25-13-51-21-9-76-16-104-4-16-20-16h-124q-8 0-14 5t-6 12l-16 103q-27 9-50 21l-79-60q-6-5-14-5-8 0-14 6-70 64-92 94-4 5-4 13 0 6 5 12 8 12 28 37t30 40q-15 28-23 55l-102 15q-7 1-11 7t-5 13v124q0 7 5 13t10 7l104 16q8 25 22 51-23 32-60 77-6 7-6 14 0 5 5 12 15 20 55 60t53 40q7 0 15-5l77-60q24 13 50 21 9 76 17 104 3 15 20 15h124q7 0 13-4t7-12l15-103q28-9 50-21l80 60q5 5 13 5 7 0 14-5 72-67 92-95 4-5 4-13 0-6-4-12-9-12-29-38t-30-39q14-28 23-55l102-15q7-1 12-7t4-13z" horiz-adv-x="857.1" />
+<glyph glyph-name="cog-alt" unicode="" d="m500 350q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m429-286q0 29-22 51t-50 21-50-21-21-51q0-29 21-50t50-21 51 21 21 50z m0 572q0 29-22 50t-50 21-50-21-21-50q0-30 21-51t50-21 51 21 21 51z m-215-235v-103q0-6-4-11t-9-6l-86-14q-6-19-18-42 19-27 50-64 4-6 4-11 0-7-4-11-13-17-46-50t-44-33q-6 0-11 4l-64 50q-21-11-43-17-6-60-13-87-4-13-17-13h-104q-6 0-11 4t-5 10l-13 85q-19 6-42 18l-66-50q-4-4-11-4-6 0-12 4-80 75-80 90 0 5 4 10 5 8 23 30t26 34q-13 24-20 46l-85 13q-5 1-9 5t-4 11v103q0 6 4 11t9 6l86 14q7 19 18 42-19 27-50 64-4 6-4 11 0 7 4 11 12 17 46 50t44 33q6 0 12-4l64-50q19 10 43 18 6 60 13 86 3 13 16 13h104q6 0 11-4t6-10l13-85q19-6 41-17l66 49q5 4 11 4 7 0 12-4 81-75 81-90 0-5-4-10-7-9-24-30t-25-34q13-27 19-46l85-12q5-2 9-6t4-11z m357-298v-78q0-9-83-17-6-15-16-29 28-63 28-77 0-2-2-4-68-40-69-40-5 0-26 27t-29 37q-11-1-17-1t-17 1q-7-11-29-37t-25-27q-1 0-69 40-3 2-3 4 0 14 29 77-10 14-17 29-83 8-83 17v78q0 9 83 18 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 1 17 1t17-1q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-9 83-18z m0 572v-78q0-9-83-18-6-15-16-29 28-63 28-77 0-2-2-4-68-39-69-39-5 0-26 26t-29 38q-11-1-17-1t-17 1q-7-12-29-38t-25-26q-1 0-69 39-3 2-3 4 0 14 29 77-10 14-17 29-83 9-83 18v78q0 9 83 17 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 2 17 2t17-2q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-8 83-17z" horiz-adv-x="1071.4" />
+<glyph glyph-name="wrench" unicode="" d="m214 29q0 14-10 25t-25 10-26-10-10-25 10-26 26-10 25 10 10 26z m360 234l-381-381q-21-20-50-20-29 0-51 20l-59 61q-21 20-21 50 0 29 21 51l380 380q22-55 64-97t97-64z m353 243q0-22-12-59-27-75-92-122t-144-46q-104 0-177 73t-73 177 73 176 177 74q32 0 67-10t60-26q9-6 9-15t-9-16l-163-94v-125l108-60q2 2 44 27t75 45 40 20q8 0 13-5t4-14z" horiz-adv-x="928.6" />
+<glyph glyph-name="calendar" unicode="" d="m71-79h161v161h-161v-161z m197 0h178v161h-178v-161z m-197 197h161v178h-161v-178z m197 0h178v178h-178v-178z m-197 214h161v161h-161v-161z m411-411h179v161h-179v-161z m-214 411h178v161h-178v-161z m428-411h161v161h-161v-161z m-214 197h179v178h-179v-178z m-196 482v161q0 7-6 12t-12 6h-36q-7 0-12-6t-6-12v-161q0-7 6-13t12-5h36q7 0 12 5t6 13z m410-482h161v178h-161v-178z m-214 214h179v161h-179v-161z m214 0h161v161h-161v-161z m18 268v161q0 7-5 12t-13 6h-35q-8 0-13-6t-5-12v-161q0-7 5-13t13-5h35q8 0 13 5t5 13z m215 36v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50v715q0 29 21 50t50 21h72v54q0 36 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 36 27 63t63 26h35q37 0 63-26t27-63v-54h71q29 0 50-21t22-50z" horiz-adv-x="928.6" />
+<glyph glyph-name="calendar-empty" unicode="" d="m71-79h786v572h-786v-572z m215 679v161q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h36q8 0 13 5t5 13z m428 0v161q0 8-5 13t-13 5h-35q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h35q8 0 13 5t5 13z m215 36v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50v715q0 29 21 50t50 21h72v54q0 36 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 36 27 63t63 26h35q37 0 63-26t27-63v-54h71q29 0 50-21t22-50z" horiz-adv-x="928.6" />
+<glyph glyph-name="clock" unicode="" d="m500 546v-250q0-7-5-12t-13-5h-178q-8 0-13 5t-5 12v36q0 8 5 13t13 5h125v196q0 8 5 13t12 5h36q8 0 13-5t5-13z m232-196q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="block" unicode="" d="m732 352q0 90-48 164l-421-420q76-50 166-50 62 0 118 25t96 65 65 97 24 119z m-557-167l421 421q-75 50-167 50-83 0-153-40t-110-112-41-152q0-91 50-167z m682 167q0-88-34-168t-91-137-137-92-166-34-167 34-137 92-91 137-34 168 34 167 91 137 137 91 167 34 166-34 137-91 91-137 34-167z" horiz-adv-x="857.1" />
+<glyph glyph-name="zoom-in" unicode="" d="m571 404v-36q0-7-5-13t-12-5h-125v-125q0-7-6-13t-12-5h-36q-7 0-13 5t-5 13v125h-125q-7 0-12 5t-6 13v36q0 7 6 12t12 5h125v125q0 8 5 13t13 5h36q7 0 12-5t6-13v-125h125q7 0 12-5t5-12z m72-18q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-21-50t-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
+<glyph glyph-name="zoom-out" unicode="" d="m571 404v-36q0-7-5-13t-12-5h-322q-7 0-12 5t-6 13v36q0 7 6 12t12 5h322q7 0 12-5t5-12z m72-18q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-21-50t-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
+<glyph glyph-name="down-circled2" unicode="" d="m625 332q0-7-6-13l-178-178q-6-5-12-5t-13 5l-179 178q-8 9-4 20 5 11 17 11h107v196q0 8 5 13t13 5h107q8 0 13-5t5-13v-196h107q8 0 13-5t5-13z m-196 322q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="up-circled2" unicode="" d="m624 361q-5-11-17-11h-107v-196q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v196h-107q-8 0-13 5t-5 13q0 7 6 13l178 178q6 5 13 5t12-5l179-178q8-9 4-20z m-195 293q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="left-circled2" unicode="" d="m643 404v-108q0-7-5-12t-13-5h-196v-108q0-7-5-12t-13-5q-7 0-14 5l-178 178q-5 5-5 13t5 13l179 178q5 5 13 5 7 0 12-5t6-12v-108h196q7 0 13-5t5-12z m89-54q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="right-circled2" unicode="" d="m643 350q0-8-5-13l-179-178q-5-5-13-5-7 0-12 5t-5 12v108h-197q-7 0-12 5t-6 12v108q0 7 6 12t12 5h197v108q0 7 5 12t12 5q7 0 14-5l178-178q5-5 5-13z m89 0q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="down-dir" unicode="" d="m571 457q0-14-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 11-11 25t11 25 25 11h500q14 0 25-11t10-25z" horiz-adv-x="571.4" />
+<glyph glyph-name="up-dir" unicode="" d="m571 171q0-14-10-25t-25-10h-500q-15 0-25 10t-11 25 11 26l250 250q10 10 25 10t25-10l250-250q10-11 10-26z" horiz-adv-x="571.4" />
+<glyph glyph-name="left-dir" unicode="" d="m357 600v-500q0-14-10-25t-26-11-25 11l-250 250q-10 11-10 25t10 25l250 250q11 11 25 11t26-11 10-25z" horiz-adv-x="357.1" />
+<glyph glyph-name="right-dir" unicode="" d="m321 350q0-14-10-25l-250-250q-11-11-25-11t-25 11-11 25v500q0 15 11 25t25 11 25-11l250-250q10-10 10-25z" horiz-adv-x="357.1" />
+<glyph glyph-name="down-open" unicode="" d="m939 399l-414-413q-10-11-25-11t-25 11l-414 413q-11 11-11 26t11 25l92 92q11 11 26 11t25-11l296-296 296 296q11 11 25 11t26-11l92-92q11-11 11-25t-11-26z" horiz-adv-x="1000" />
+<glyph glyph-name="left-open" unicode="" d="m653 682l-296-296 296-297q11-10 11-25t-11-25l-92-93q-11-10-25-10t-25 10l-414 415q-11 10-11 25t11 25l414 414q10 10 25 10t25-10l92-93q11-10 11-25t-11-25z" horiz-adv-x="714.3" />
+<glyph glyph-name="right-open" unicode="" d="m618 361l-414-415q-11-10-25-10t-26 10l-92 93q-11 11-11 25t11 25l296 297-296 296q-11 11-11 25t11 25l92 93q11 10 26 10t25-10l414-414q10-11 10-25t-10-25z" horiz-adv-x="714.3" />
+<glyph glyph-name="up-open" unicode="" d="m939 107l-92-92q-11-10-26-10t-25 10l-296 297-296-297q-11-10-25-10t-26 10l-92 92q-11 11-11 26t11 25l414 414q11 10 25 10t25-10l414-414q11-11 11-25t-11-26z" horiz-adv-x="1000" />
+<glyph glyph-name="angle-left" unicode="" d="m350 546q0-7-6-12l-219-220 219-219q6-6 6-13t-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="357.1" />
+<glyph glyph-name="angle-right" unicode="" d="m332 314q0-7-6-13l-260-260q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l260-260q6-5 6-13z" horiz-adv-x="357.1" />
+<glyph glyph-name="angle-up" unicode="" d="m600 189q0-7-6-13l-28-27q-5-6-12-6t-13 6l-220 219-219-219q-5-6-13-6t-13 6l-27 27q-6 6-6 13t6 13l260 260q5 6 12 6t13-6l260-260q6-5 6-13z" horiz-adv-x="642.9" />
+<glyph glyph-name="angle-down" unicode="" d="m600 439q0-7-6-13l-260-260q-5-5-13-5t-12 5l-260 260q-6 6-6 13t6 13l27 28q6 6 13 6t13-6l219-219 220 219q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="642.9" />
+<glyph glyph-name="angle-circled-left" unicode="" d="m507 72l57 56q11 11 11 26t-11 25l-171 171 171 171q11 11 11 25t-11 25l-57 57q-10 11-25 11t-25-11l-253-253q-11-11-11-25t11-25l253-254q11-10 25-10t25 10z m350 278q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="angle-circled-right" unicode="" d="m400 72l253 253q11 11 11 25t-11 25l-253 253q-10 11-25 11t-25-11l-57-56q-11-11-11-26t11-25l171-171-171-171q-11-11-11-25t11-26l57-57q11-10 25-10t25 10z m457 278q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="angle-circled-up" unicode="" d="m650 214l57 57q11 11 11 25t-11 26l-253 253q-11 10-25 10t-26-10l-253-254q-10-10-10-25t10-25l57-57q11-10 25-10t25 10l172 172 171-172q11-10 25-10t25 10z m207 136q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="angle-circled-down" unicode="" d="m454 125l253 253q11 11 11 26t-11 25l-57 57q-10 10-25 10t-25-10l-171-172-172 172q-10 10-25 10t-25-10l-57-57q-10-11-10-25t10-26l253-253q11-10 26-10t25 10z m403 225q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="angle-double-left" unicode="" d="m350 82q0-7-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13z m214 0q0-7-5-13l-28-28q-6-5-13-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q6 6 13 6t13-6l28-28q5-5 5-13t-5-12l-220-220 220-219q5-6 5-13z" horiz-adv-x="571.4" />
+<glyph glyph-name="angle-double-right" unicode="" d="m332 314q0-7-6-13l-260-260q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l260-260q6-5 6-13z m214 0q0-7-5-13l-260-260q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13z" horiz-adv-x="571.4" />
+<glyph glyph-name="angle-double-up" unicode="" d="m600 118q0-7-6-13l-28-28q-5-5-12-5t-13 5l-220 219-219-219q-5-5-13-5t-13 5l-27 28q-6 6-6 13t6 13l260 260q5 5 12 5t13-5l260-260q6-6 6-13z m0 214q0-7-6-13l-28-28q-5-5-12-5t-13 5l-220 220-219-220q-5-5-13-5t-13 5l-27 28q-6 6-6 13t6 13l260 260q5 6 12 6t13-6l260-260q6-6 6-13z" horiz-adv-x="642.9" />
+<glyph glyph-name="angle-double-down" unicode="" d="m600 368q0-7-6-13l-260-260q-5-6-13-6t-12 6l-260 260q-6 6-6 13t6 13l27 28q6 5 13 5t13-5l219-220 220 220q5 5 13 5t12-5l28-28q6-6 6-13z m0 214q0-7-6-13l-260-260q-5-5-13-5t-12 5l-260 260q-6 6-6 13t6 13l27 28q6 5 13 5t13-5l219-220 220 220q5 5 13 5t12-5l28-28q6-6 6-13z" horiz-adv-x="642.9" />
+<glyph glyph-name="down-big" unicode="" d="m899 386q0-30-21-50l-363-364q-22-21-51-21-29 0-50 21l-363 364q-21 20-21 50 0 29 21 51l41 41q22 21 51 21 29 0 50-21l164-164v393q0 29 21 50t51 22h71q29 0 50-22t21-50v-393l164 164q21 21 51 21 29 0 50-21l42-42q21-21 21-50z" horiz-adv-x="928.6" />
+<glyph glyph-name="left-big" unicode="" d="m857 350v-71q0-30-18-51t-47-21h-393l164-164q21-20 21-50t-21-50l-42-43q-21-20-51-20-29 0-50 20l-364 364q-20 21-20 50 0 29 20 51l364 363q21 21 50 21 29 0 51-21l42-42q21-21 21-50t-21-51l-164-164h393q29 0 47-20t18-51z" horiz-adv-x="857.1" />
+<glyph glyph-name="right-big" unicode="" d="m821 314q0-30-20-50l-363-364q-22-20-51-20-29 0-50 20l-42 42q-22 21-22 51t22 51l163 163h-393q-29 0-47 21t-18 51v71q0 30 18 51t47 20h393l-163 164q-22 21-22 51t22 50l42 42q21 21 50 21 29 0 51-21l363-363q20-20 20-51z" horiz-adv-x="857.1" />
+<glyph glyph-name="up-big" unicode="" d="m899 308q0-28-21-50l-42-42q-21-21-50-21-30 0-51 21l-164 164v-393q0-29-20-47t-51-19h-71q-30 0-51 19t-21 47v393l-164-164q-20-21-50-21t-50 21l-42 42q-21 21-21 50 0 30 21 51l363 363q20 21 50 21 30 0 51-21l363-363q21-22 21-51z" horiz-adv-x="928.6" />
+<glyph glyph-name="left-circled" unicode="" d="m714 314v72q0 14-10 25t-25 10h-281l106 106q11 11 11 25t-11 25l-51 51q-10 10-25 10t-25-10l-202-202-51-51q-10-10-10-25t10-25l51-51 202-202q10-10 25-10t25 10l51 51q10 10 10 25t-10 25l-106 106h281q14 0 25 10t10 25z m143 36q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="right-circled" unicode="" d="m717 350q0 15-10 25l-51 51-202 202q-10 10-25 10t-25-10l-51-51q-10-10-10-25t10-25l106-106h-280q-15 0-26-10t-10-25v-72q0-14 10-25t26-10h280l-106-106q-10-10-10-25t10-25l51-51q10-10 25-10t25 10l202 202 51 51q10 10 10 25z m140 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="up-circled" unicode="" d="m717 351q0 15-11 25l-202 202-50 50q-10 11-25 11t-26-11l-50-50-202-202q-10-10-10-25t10-26l50-50q11-10 26-10t25 10l105 105v-280q0-14 11-25t25-11h71q15 0 25 11t11 25v280l105-105q11-11 26-11t25 11l50 50q11 11 11 26z m140-1q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="down-circled" unicode="" d="m717 349q0 16-11 26l-50 50q-10 10-25 10t-26-10l-105-105v280q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-280l-105 105q-11 11-25 11t-26-11l-50-50q-10-10-10-26t10-25l202-202 50-50q11-10 26-10t25 10l50 50 202 202q11 10 11 25z m140 1q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="cw" unicode="" d="m857 707v-250q0-14-10-25t-26-11h-250q-23 0-32 23-10 22 7 38l77 77q-82 77-194 77-58 0-111-23t-91-61-62-91-22-111 22-111 62-91 91-61 111-23q66 0 125 29t100 82q4 6 13 7 8 0 14-5l76-77q5-4 6-11t-5-13q-60-74-147-114t-182-41q-87 0-167 34t-136 92-92 137-34 166 34 166 92 137 136 92 167 34q82 0 158-31t137-88l72 72q16 18 39 8 22-9 22-33z" horiz-adv-x="857.1" />
+<glyph glyph-name="ccw" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z" horiz-adv-x="857.1" />
+<glyph glyph-name="level-up" unicode="" d="m568 514q-10-21-32-21h-107v-482q0-8-5-13t-13-5h-393q-12 0-16 10-5 11 2 19l89 108q5 6 14 6h179v357h-107q-23 0-33 21-9 20 5 37l179 215q10 12 27 12t28-12l178-215q15-17 5-37z" horiz-adv-x="571.4" />
+<glyph glyph-name="level-down" unicode="" d="m18 707h393q7 0 12-5t6-13v-482h107q22 0 32-20t-5-39l-178-214q-11-13-28-13t-27 13l-179 214q-14 17-5 39 10 20 33 20h107v357h-179q-8 0-14 6l-89 108q-7 7-2 19 5 10 16 10z" horiz-adv-x="571.4" />
+<glyph glyph-name="shuffle" unicode="" d="m372 582q-34-52-77-153-12 25-20 41t-23 35-28 32-36 19-45 8h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q139 0 229-125z m628-446q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107q-18 0-48 0t-45-1-41 1-39 3-36 6-35 10-32 16-33 22-31 30-31 39q33 52 76 152 12-25 20-40t23-36 28-31 35-20 46-8h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z m0 500q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-143q-27 0-49-8t-38-25-29-35-25-43q-18-34-43-95-16-37-28-62t-30-59-36-55-41-47-50-38-60-23-71-10h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q27 0 48 9t39 25 28 34 26 43q17 35 43 96 16 36 28 62t30 58 36 56 41 46 50 38 59 24 72 9h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
+<glyph glyph-name="exchange" unicode="" d="m1000 189v-107q0-7-5-12t-13-6h-768v-107q0-7-5-12t-13-6q-6 0-13 6l-178 178q-5 5-5 13 0 8 5 13l179 178q5 5 12 5 8 0 13-5t5-13v-107h768q7 0 13-5t5-13z m0 304q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-768q-7 0-13 6t-5 12v107q0 8 5 13t13 5h768v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
+<glyph glyph-name="history" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z m-357 161v-250q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13v35q0 8 5 13t13 5h125v197q0 8 5 13t12 5h36q8 0 13-5t5-13z" horiz-adv-x="857.1" />
+<glyph glyph-name="expand" unicode="" d="m639 473q10-19-3-36l-178-250q-11-16-29-16t-29 16l-179 250q-13 17-3 36 10 20 32 20h357q22 0 32-20z m75-391v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
+<glyph glyph-name="collapse" unicode="" d="m639 227q-10-20-32-20h-357q-22 0-32 20-10 19 3 37l179 250q10 15 29 15t29-15l178-250q13-18 3-37z m75-145v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
+<glyph glyph-name="expand-right" unicode="" d="m607 350q0-18-15-29l-250-179q-17-12-37-2-19 9-19 31v358q0 22 19 31 20 10 37-2l250-179q15-11 15-29z m107-268v536q0 8-5 13t-13 5h-535q-8 0-13-5t-5-13v-536q0-8 5-13t13-5h535q8 0 13 5t5 13z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
+<glyph glyph-name="collapse-left" unicode="" d="m571 529v-358q0-14-10-25t-25-10q-11 0-21 6l-250 179q-15 11-15 29t15 29l250 179q10 6 21 6 14 0 25-10t10-25z m143-447v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
+<glyph glyph-name="play" unicode="" d="m772 333l-741-412q-13-7-22-2t-9 20v822q0 14 9 20t22-2l741-412q13-7 13-17t-13-17z" horiz-adv-x="785.7" />
+<glyph glyph-name="play-circled2" unicode="" d="m661 350q0-21-18-31l-304-178q-8-5-18-5-8 0-17 4-18 11-18 31v358q0 20 18 31 18 10 35-1l304-178q18-10 18-31z m71 0q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="play-circled" unicode="" d="m429 779q116 0 215-58t156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58z m214-460q18 10 18 31t-18 31l-304 178q-17 11-35 1-18-11-18-31v-358q0-20 18-31 9-4 17-4 10 0 18 5z" horiz-adv-x="857.1" />
+<glyph glyph-name="stop" unicode="" d="m857 743v-786q0-14-10-25t-26-11h-785q-15 0-25 11t-11 25v786q0 14 11 25t25 11h785q15 0 26-11t10-25z" horiz-adv-x="857.1" />
+<glyph glyph-name="cloud" unicode="" d="m1071 207q0-89-62-151t-152-63h-607q-103 0-177 73t-73 177q0 74 40 135t104 91q-1 15-1 24 0 118 84 202t202 84q88 0 159-50t105-128q39 35 93 35 59 0 101-42t42-101q0-42-23-77 72-17 119-75t46-134z" horiz-adv-x="1071.4" />
+<glyph glyph-name="table" unicode="" d="m286 82v107q0 8-5 13t-13 5h-179q-7 0-13-5t-5-13v-107q0-8 5-13t13-5h179q8 0 13 5t5 13z m0 214v108q0 7-5 12t-13 5h-179q-7 0-13-5t-5-12v-108q0-7 5-12t13-5h179q8 0 13 5t5 12z m285-214v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m-285 429v107q0 8-5 13t-13 5h-179q-7 0-13-5t-5-13v-107q0-8 5-13t13-5h179q8 0 13 5t5 13z m285-215v108q0 7-5 12t-12 5h-179q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h179q7 0 12 5t5 12z m286-214v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m-286 429v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m286-215v108q0 7-5 12t-13 5h-178q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h178q8 0 13 5t5 12z m0 215v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m72 178v-607q0-37-27-63t-63-26h-750q-36 0-63 26t-26 63v607q0 37 26 63t63 27h750q37 0 63-27t27-63z" horiz-adv-x="928.6" />
+<glyph glyph-name="off" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34-167 34-136 92-92 137-34 166q0 102 45 191t126 151q24 18 54 14t46-28q18-23 14-53t-28-47q-54-41-84-101t-30-127q0-58 22-111t62-91 91-61 111-23 110 23 92 61 61 91 22 111q0 68-30 127t-84 101q-24 18-28 47t14 53q17 24 47 28t53-14q81-61 126-151t45-191z m-357 429v-358q0-29-21-50t-50-21-51 21-21 50v358q0 29 21 50t51 21 50-21 21-50z" horiz-adv-x="857.1" />
+<glyph glyph-name="check" unicode="" d="m786 331v-177q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q35 0 65-14 9-4 10-13 2-10-5-16l-27-28q-6-5-13-5-2 0-5 1-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v141q0 8 5 13l36 35q6 6 13 6 3 0 7-2 11-4 11-16z m129 273l-455-454q-13-14-31-14t-32 14l-240 240q-14 13-14 31t14 32l61 62q14 13 32 13t32-13l147-147 361 361q13 13 31 13t32-13l62-61q13-14 13-32t-13-32z" horiz-adv-x="928.6" />
+<glyph glyph-name="asterisk" unicode="" d="m827 264q26-14 33-43t-7-55l-35-61q-15-26-44-33t-54 7l-149 85v-171q0-29-21-50t-50-22h-71q-29 0-51 22t-21 50v171l-148-85q-26-15-55-7t-43 33l-36 61q-14 26-7 55t34 43l148 86-148 86q-26 14-34 43t7 55l36 61q15 26 43 33t55-7l148-85v171q0 29 21 50t51 22h71q29 0 50-22t21-50v-171l149 85q26 15 54 7t44-33l35-62q15-25 7-54t-33-43l-148-86z" horiz-adv-x="928.6" />
+<glyph glyph-name="chart-bar" unicode="" d="m357 350v-286h-143v286h143z m214 286v-572h-142v572h142z m572-643v-72h-1143v858h71v-786h1072z m-357 500v-429h-143v429h143z m214 214v-643h-143v643h143z" horiz-adv-x="1142.9" />
+<glyph glyph-name="bug" unicode="" d="m911 314q0-14-11-25t-25-10h-125q0-96-37-162l116-117q10-11 10-25t-10-25q-10-11-25-11t-26 11l-110 110q-3-3-8-7t-24-16-36-21-46-16-54-7v500h-71v-500q-29 0-57 7t-49 19-36 22-25 18l-8 8-102-116q-11-12-27-12-13 0-24 9-11 10-11 25t8 26l113 127q-32 63-32 153h-125q-15 0-25 10t-11 25 11 25 25 11h125v164l-97 97q-11 10-11 25t11 25 25 10 25-10l97-97h471l96 97q11 10 25 10t26-10 10-25-10-25l-97-97v-164h125q15 0 25-11t11-25z m-268 322h-357q0 74 52 126t126 52 127-52 52-126z" horiz-adv-x="928.6" />
+<glyph glyph-name="certificate" unicode="" d="m768 350l77-75q17-16 11-39-7-23-29-29l-105-27 30-103q6-23-11-39-16-18-39-11l-104 30-27-105q-5-23-28-30-7-1-11-1-17 0-28 13l-75 77-76-77q-15-17-39-12-23 7-28 30l-27 105-104-30q-23-7-39 11-17 16-10 39l29 103-105 27q-22 6-29 29-6 23 11 39l77 75-77 75q-17 16-11 39 7 23 29 29l105 27-29 103q-7 23 10 39 16 18 39 11l104-29 27 104q5 23 28 29 23 7 39-11l76-77 75 77q16 17 39 11 23-6 28-29l27-104 104 29q23 7 39-11 17-16 11-39l-30-103 105-27q22-6 29-29 6-23-11-39z" horiz-adv-x="857.1" />
+<glyph glyph-name="tasks" unicode="" d="m571 64h358v72h-358v-72z m-214 286h572v71h-572v-71z m357 286h215v71h-215v-71z m286-465v-142q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v142q0 15 11 26t25 10h928q15 0 25-10t11-26z m0 286v-143q0-14-11-25t-25-10h-928q-15 0-25 10t-11 25v143q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 286v-143q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v143q0 14 11 25t25 11h928q15 0 25-11t11-25z" horiz-adv-x="1000" />
+<glyph glyph-name="sort-up" unicode="" d="m571 457q0-14-10-25t-25-11h-500q-15 0-25 11t-11 25 11 25l250 250q10 11 25 11t25-11l250-250q10-10 10-25z" horiz-adv-x="571.4" />
+<glyph glyph-name="sort-down" unicode="" d="m571 243q0-15-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 10-11 25t11 25 25 11h500q14 0 25-11t10-25z" horiz-adv-x="571.4" />
+<glyph glyph-name="sort" unicode="" d="m571 243q0-15-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 10-11 25t11 25 25 11h500q14 0 25-11t10-25z m0 214q0-14-10-25t-25-11h-500q-15 0-25 11t-11 25 11 25l250 250q10 11 25 11t25-11l250-250q10-10 10-25z" horiz-adv-x="571.4" />
+<glyph glyph-name="gauge" unicode="" d="m214 207q0 30-21 51t-50 21-51-21-21-51 21-50 51-21 50 21 21 50z m107 250q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m239-268l57 213q3 14-5 27t-21 16-27-3-17-22l-56-213q-33-3-60-25t-35-55q-11-43 11-81t66-50 81 11 50 66q9 33-4 65t-40 51z m369 18q0 30-21 51t-51 21-50-21-21-51 21-50 50-21 51 21 21 50z m-358 357q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m250-107q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m179-250q0-145-79-269-10-17-30-17h-782q-20 0-30 17-79 123-79 269 0 102 40 194t106 160 160 107 194 39 194-39 160-107 106-160 40-194z" horiz-adv-x="1000" />
+<glyph glyph-name="spinner" unicode="" d="m277 100q0-33-24-57t-57-23q-33 0-56 23t-24 57 24 57 56 23q33 0 57-23t24-57z m241-107q0-30-21-51t-51-21-50 21-21 51 21 50 50 21 51-21 21-50z m-339 357q0-37-27-63t-63-26-63 26-26 63 26 63 63 26 63-26 27-63z m580-250q0-26-18-44t-45-18-44 18-18 44 18 44 44 19 45-19 18-44z m-464 500q0-41-29-69t-70-29-69 29-29 69 29 69 69 29 70-29 29-69z m259 107q0-45-32-76t-76-31-75 31-32 76 32 76 75 31 76-31 32-76z m303-357q0-22-15-38t-38-16-38 16-16 38 16 38 38 16 38-16 15-38z m-116 250q0-18-13-32t-32-13-31 13-13 32 13 31 31 14 32-14 13-31z" horiz-adv-x="875" />
+<glyph glyph-name="database" unicode="" d="m429 421q132 0 247 24t181 71v-95q0-38-57-71t-157-52-214-20-215 20-156 52-58 71v95q66-47 181-71t248-24z m0-428q132 0 247 24t181 71v-95q0-39-57-72t-157-52-214-19-215 19-156 52-58 72v95q66-47 181-71t248-24z m0 214q132 0 247 24t181 71v-95q0-38-57-71t-157-52-214-20-215 20-156 52-58 71v95q66-47 181-71t248-24z m0 643q116 0 214-19t157-52 57-72v-71q0-39-57-72t-157-52-214-19-215 19-156 52-58 72v71q0 39 58 72t156 52 215 19z" horiz-adv-x="857.1" />
+<glyph glyph-name="lifebuoy" unicode="" d="m500 850q102 0 194-40t160-106 106-160 40-194-40-194-106-160-160-106-194-40-194 40-160 106-106 160-40 194 40 194 106 160 160 106 194 40z m0-71q-106 0-201-51l108-108q46 16 93 16t93-16l108 108q-95 51-201 51z m-378-630l108 108q-16 46-16 93t16 93l-108 108q-51-95-51-201t51-201z m378-228q106 0 201 51l-108 108q-46-16-93-16t-93 16l-108-108q95-51 201-51z m0 215q89 0 152 63t62 151-62 152-152 62-151-62-63-152 63-151 151-63z m270 121l108-108q51 95 51 201t-51 201l-108-108q16-46 16-93t-16-93z" horiz-adv-x="1000" />
+<glyph glyph-name="cubes" unicode="" d="m357-61l214 107v176l-214-92v-191z m-36 254l226 96-226 97-225-97z m608-254l214 107v176l-214-92v-191z m-36 254l225 96-225 97-226-97z m-250 163l214 92v149l-214-92v-149z m-36 212l246 105-246 106-246-106z m607-289v-233q0-20-10-37t-29-26l-250-125q-14-8-32-8t-32 8l-250 125q-3 1-4 2-1-1-4-2l-250-125q-14-8-32-8t-31 8l-250 125q-19 9-29 26t-11 37v233q0 21 12 39t32 26l242 104v223q0 22 12 39t31 27l250 107q13 6 28 6t28-6l250-107q20-9 32-27t12-39v-223l242-104q20-9 32-26t11-40z" horiz-adv-x="1285.7" />
+<glyph glyph-name="cube" unicode="" d="m500-59l357 195v355l-357-130v-420z m-36 483l390 141-390 142-389-142z m465 140v-428q0-20-10-37t-28-26l-393-214q-15-9-34-9t-34 9l-393 214q-17 10-27 26t-10 37v428q0 23 13 41t34 26l393 143q12 5 24 5t25-5l393-143q21-8 34-26t13-41z" horiz-adv-x="1000" />
+<glyph glyph-name="bullseye" unicode="" d="m571 350q0-59-41-101t-101-42-101 42-42 101 42 101 101 42 101-42 41-101z m72 0q0 89-63 152t-151 62-152-62-63-152 63-151 152-63 151 63 63 151z m71 0q0-118-83-202t-202-84-202 84-84 202 84 202 202 84 202-84 83-202z m72 0q0 73-29 139t-76 114-114 76-138 28-139-28-114-76-76-114-29-139 29-139 76-113 114-77 139-28 138 28 114 77 76 113 29 139z m71 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="windows" unicode="" d="m381 289v-364l-381 53v311h381z m0 414v-367h-381v315z m548-414v-439l-507 70v369h507z m0 490v-443h-507v373z" horiz-adv-x="928.6" />
+<glyph glyph-name="cancel-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m86-420l154 154-86 86-154-152-152 152-88-86 154-154-154-152 88-86 152 152 154-152 86 86z" horiz-adv-x="840" />
+<glyph glyph-name="plus-1" unicode="" d="m550 400q30 0 30-50t-30-50l-210 0 0-210q0-30-50-30t-50 30l0 210-210 0q-30 0-30 50t30 50l210 0 0 210q0 30 50 30t50-30l0-210 210 0z" horiz-adv-x="580" />
+<glyph glyph-name="plus-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m52-470l200 0 0 102-200 0 0 202-102 0 0-202-202 0 0-102 202 0 0-202 102 0 0 202z" horiz-adv-x="840" />
+<glyph glyph-name="minus-1" unicode="" d="m550 400q30 0 30-50t-30-50l-520 0q-30 0-30 50t30 50l520 0z" horiz-adv-x="580" />
+<glyph glyph-name="minus-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m252-368l-504 0 0-102 504 0 0 102z" horiz-adv-x="840" />
+<glyph glyph-name="help-circled-1" unicode="" d="m454 810q190 2 326-130t140-322q2-190-131-327t-323-141q-190-2-327 131t-139 323q-4 190 130 327t324 139z m-2-740q30 0 49 19t19 47q2 30-17 49t-49 19l-2 0q-28 0-47-18t-21-46q0-30 19-49t47-21l2 0z m166 328q26 34 26 78 0 78-54 116-52 38-134 38-64 0-104-26-68-42-72-146l0-4 110 0 0 4q0 26 16 54 16 24 54 24 40 0 52-20 16-20 16-44 0-18-16-40-8-12-20-20l-6-4q-6-4-16-11t-20-15-21-17-17-17q-14-20-18-78l0-8 108 0 0 4q0 12 4 28 6 20 28 36l28 18q46 34 56 50z" horiz-adv-x="920" />
+<glyph glyph-name="heart-empty-1" unicode="" d="m790 642q70-64 70-156t-70-156l-360-330-360 330q-70 64-70 156t70 156q64 58 152 58t150-58l58-52 56 52q64 58 152 58t152-58z m-54-260q42 40 42 104 0 66-38 100-38 38-102 38-52 0-104-48l-104-92-106 92q-48 48-102 48-64 0-104-38-38-36-38-100 0-66 44-104l306-286z" horiz-adv-x="860" />
+<glyph glyph-name="mail-1" unicode="" d="m30 586q-32 18-28 40 2 14 26 14l846 0q38 0 20-32-8-14-24-22-14-6-192-102t-182-98q-16-10-46-10-28 0-46 10-4 2-182 98t-192 102z m850-100q20 10 20-10l0-368q0-16-17-32t-33-16l-800 0q-16 0-33 16t-17 32l0 368q0 20 20 10l384-200q18-10 46-10t46 10z" horiz-adv-x="900" />
+<glyph glyph-name="star-1" unicode="" d="m440 790l120-336 320 0-262-196 94-348-272 208-272-208 94 348-262 196 320 0z" horiz-adv-x="880" />
+<glyph glyph-name="star-empty-1" unicode="" d="m880 454l-262-196 94-348-272 208-272-208 94 348-262 196 320 0 120 336 120-336 320 0z m-440-238l150-124-62 178 144 114-176-4-56 202-54-202-176 4 142-114-62-178z" horiz-adv-x="880" />
+<glyph glyph-name="link-1" unicode="" d="m294 116q14 14 34 14t36-14q32-34 0-70l-42-40q-56-56-132-56-78 0-134 56t-56 132q0 78 56 134l148 148q70 68 144 77t128-43q16-16 16-36t-16-36q-36-32-70 0-50 48-132-34l-148-146q-26-26-26-64t26-62q26-26 63-26t63 26z m450 574q56-56 56-132 0-78-56-134l-158-158q-74-72-150-72-62 0-112 50-14 14-14 34t14 36q14 14 35 14t35-14q50-48 122 24l158 156q28 28 28 64 0 38-28 62-24 26-56 31t-60-21l-50-50q-16-14-36-14t-34 14q-34 34 0 70l50 50q54 54 127 51t129-61z" horiz-adv-x="800" />
+<glyph glyph-name="attach-1" unicode="" d="m244-140q-102 0-170 72-72 70-74 166t84 190l496 496q80 80 174 54 44-12 79-47t47-79q26-96-54-176l-474-474q-40-40-88-46-48-4-80 28-30 24-27 74t47 92l332 334q24 26 50 0t0-50l-332-332q-44-44-20-70 12-8 24-6 24 4 46 26l474 474q50 50 34 108-16 60-76 76-54 14-108-36l-494-494q-66-76-64-143t52-117q50-48 117-50t141 62l496 494q24 24 50 0 26-22 0-48l-496-496q-82-82-186-82z" horiz-adv-x="939" />
+<glyph glyph-name="eye-1" unicode="" d="m500 630q92 0 177-25t141-62 99-77 63-71 20-45-20-44-63-71-99-78-141-62-177-25-177 25-141 62-99 78-63 71-20 44 20 45 63 71 99 77 141 62 177 25z m0-494q92 0 157 63t65 151q0 90-65 153t-157 63-157-63-65-153q0-88 65-151t157-63z m0 214q8-8 37-2t50 11 25-9q0-44-33-75t-79-31-78 31-32 75q0 46 32 77t78 31q14 0 10-23t-12-47 2-38z" horiz-adv-x="1000" />
+<glyph glyph-name="attention-1" unicode="" d="m957-24q10-16 0-34-10-16-30-16l-892 0q-18 0-28 16-13 18-2 34l446 782q8 18 30 18t30-18z m-420 50l0 100-110 0 0-100 110 0z m0 174l0 300-110 0 0-300 110 0z" horiz-adv-x="962" />
+<glyph glyph-name="doc-text-1" unicode="" d="m212 308l0 90 280 0 0-90-280 0z m388 492q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-500 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l500 0z m0-800l0 700-500 0 0-700 500 0z m-110 592l0-88-280 0 0 88 280 0z m0-392l0-88-280 0 0 88 280 0z" horiz-adv-x="700" />
+<glyph glyph-name="doc-text-inv-1" unicode="" d="m600 800q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-500 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l500 0z m-460-208l0-88 420 0 0 88-420 0z m420-480l0 88-420 0 0-88 420 0z m0 196l0 90-418 0 0-90 418 0z" horiz-adv-x="700" />
+<glyph glyph-name="share-1" unicode="" d="m650 200q62 0 106-43t44-107q0-62-44-106t-106-44-106 44-44 106q0 6 1 14t1 12l-260 156q-42-32-92-32-62 0-106 44t-44 106 44 106 106 44q54 0 92-30l260 156q0 4-1 12t-1 12q0 62 44 106t106 44 106-43 44-107q0-62-44-106t-106-44q-52 0-90 32l-262-156q2-8 2-26 0-16-2-24l262-156q36 30 90 30z" horiz-adv-x="800" />
+<glyph glyph-name="shareable" unicode="" d="m340 350q0 68 47 114t113 46 113-46 47-114q0-66-47-113t-113-47-113 47-47 113z m-114 60q-14-60-66-60l-160 0 0 120 118 0q40 124 145 202t237 78q164 0 284-116 16-18 16-43t-16-43q-18-16-43-16t-43 16q-78 82-198 82-100 0-176-62t-98-158z m614-60l160 0 0-120-118 0q-40-124-144-202t-238-78q-164 0-282 118-18 18-18 43t18 41q16 18 41 18t43-18q82-82 198-82 100 0 176 63t98 157q12 60 66 60z" horiz-adv-x="1000" />
+<glyph glyph-name="ccw-1" unicode="" d="m532 736q170 0 289-120t119-290-119-290-289-120q-142 0-252 88l70 74q84-60 182-60 126 0 216 90t90 218-90 218-216 90q-124 0-214-87t-92-211l142 0-184-204-184 204 124 0q2 166 122 283t286 117z" horiz-adv-x="940" />
+<glyph glyph-name="cw-1" unicode="" d="m408 760q168 0 287-116t123-282l122 0-184-206-184 206 144 0q-4 124-94 210t-214 86q-126 0-216-90t-90-218q0-126 90-216t216-90q104 0 182 60l70-76q-110-88-252-88-168 0-288 120t-120 290 120 290 288 120z" horiz-adv-x="940" />
+<glyph glyph-name="arrows-ccw" unicode="" d="m186 140l116 116 0-292-276 16 88 86q-116 122-114 290t120 288q100 100 240 116l4-102q-100-16-172-88-88-88-90-213t84-217z m332 598l276-16-88-86q116-122 114-290t-120-288q-96-98-240-118l-2 104q98 16 170 88 88 88 90 213t-84 217l-114-116z" horiz-adv-x="820" />
+<glyph glyph-name="play-1" unicode="" d="m486 376q14-10 14-26 0-14-14-24l-428-266q-24-16-41-6t-17 40l0 514q0 30 17 40t41-6z" horiz-adv-x="500" />
+<glyph glyph-name="pause" unicode="" d="m440 700q90 0 90-64l0-570q0-66-90-66t-90 66l0 570q0 64 90 64z m-350 0q90 0 90-64l0-570q0-66-90-66t-90 66l0 570q0 64 90 64z" horiz-adv-x="530" />
+<glyph glyph-name="record" unicode="" d="m350 700q146 0 248-102t102-248q0-144-102-247t-248-103-248 103-102 247q0 146 102 248t248 102z" horiz-adv-x="700" />
+<glyph glyph-name="stop-1" unicode="" d="m526 650q74 0 74-64l0-470q0-66-74-66l-450 0q-76 0-76 66l0 470q0 36 18 50t58 14l450 0z" horiz-adv-x="600" />
+<glyph glyph-name="switch" unicode="" d="m700 592l0-140-500 0 0-90-200 160 200 170 0-100 500 0z m300-420l-200-160 0 90-500 0 0 140 500 0 0 100z" horiz-adv-x="1000" />
+<glyph glyph-name="loop" unicode="" d="m800 540q42 0 71-29t29-71l0-290q0-40-29-70t-71-30l-700 0q-40 0-70 30t-30 70l0 290q0 42 30 71t70 29l250 0 0 110 200-180-200-180 0 110-210 0 0-210 620 0 0 210-150 0 0 140 190 0z" horiz-adv-x="900" />
+<glyph glyph-name="cloud-1" unicode="" d="m760 494q100 0 170-68t70-166-70-166-170-68l-578 0q-74 0-128 52t-54 124q0 74 53 126t129 52q2 0 10-1t10-1q-2 12-2 38 0 108 78 184t188 76q90 0 160-52t94-134q28 4 40 4z" horiz-adv-x="1000" />
+<glyph glyph-name="certificate-outline" unicode="" d="m1019 395q22-15 22-44t-22-43l-96-64 51-104q14-26-3-49t-41-26l-115-7-7-117q-3-25-25-40t-50-2l-104 51-65-96q-16-24-43-24-27 0-43 24l-64 96-104-51q-26-14-49 2t-26 40l-7 117-117 7q-25 3-40 25t-2 50l51 104-96 64q-24 16-24 43t24 44l96 64-51 104q-14 27 2 50t40 25l117 7 7 115q3 25 26 41t49 3l104-51 64 96q13 21 43 21t43-21l65-96 104 51q26 14 50-3t25-41l7-115 115-7q25-3 41-25t3-50l-51-104z m-210-156q-9 17-4 36t21 30l70 46-70 47q-36 26-17 66l37 75-83 5q-20 1-34 15t-15 34l-5 83-75-37q-40-19-66 17l-47 70-46-70q-26-36-66-17l-75 37-5-83q-1-20-15-34t-34-15l-84-5 38-75q9-18 3-36t-22-30l-69-47 69-46q16-11 22-30t-3-36l-38-75 84-5q20-1 33-15t15-34l6-84 75 38q10 5 22 5 29 0 44-23l46-70 47 69q11 16 30 22t36-3l75-38 5 84q1 20 15 34t34 15l82 5z" horiz-adv-x="1041" />
+<glyph glyph-name="certificate-1" unicode="" d="m863 449l115-78q12-8 12-21t-12-21l-115-78 61-123q7-14-1-25t-20-13l-139-10-9-138q-1-12-12-20t-25-2l-124 62-78-116q-7-11-21-11t-21 11l-78 116-123-62q-14-6-25 2t-13 20l-10 139-137 9q-13 1-22 13t-1 25l63 123-117 78q-11 7-11 21t11 21l117 78-63 124q-7 12 1 24t22 13l137 9 10 139q1 12 13 20t25 1l123-61 78 116q7 11 21 11t21-11l78-116 124 61q13 7 25-1t12-20l9-139 139-9q12-1 20-12t1-25z" horiz-adv-x="990" />
+<glyph glyph-name="windows-1" unicode="" d="m0-43l105 371q35 20 86 31t83 13l34 1q50 0 104-10 101-20 144-61l-104-370q-36 28-79 45t-69 21l-26 4q-34 3-65 3-16 0-42-1t-84-14-87-33z m126 477l105 371q35 20 86 32t84 12l33 1q51 0 104-10 101-20 144-61l-104-371q-36 28-79 46t-69 20l-26 4q-35 3-64 3-16 0-42-1t-84-13-88-33z m431-513l104 371q37-28 81-45t68-21l25-4q34-3 65-3 16 0 43 2t84 13 86 32l-104-371q-35-20-86-31t-84-12l-33-2q-51 0-104 10-101 20-145 61z m120 475l104 370q37-28 81-45t68-21l25-4q34-3 65-3 16 0 43 2t83 13 87 32l-104-370q-35-20-86-31t-85-13l-33-2q-52 0-103 11-101 19-145 61z" horiz-adv-x="1233" />
+<glyph glyph-name="spin5" unicode="" d="m462 850c-6 0-11-5-11-11l0-183 0 0c0-6 5-11 11-11l69 0c1 0 1 0 1 0 7 0 12 5 12 11l0 183 0 0c0 6-5 11-12 11l-69 0c0 0 0 0-1 0z m250-47c-4 1-8-2-10-5l-91-158 0 0c-4-6-2-13 4-16l60-35c0 0 0 0 0 0 6-3 13-1 16 4l91 158c3 6 2 13-4 16l-61 35c-1 1-3 1-5 1z m-428-2c-2 0-4-1-6-2l-61-35c-5-3-7-10-4-16l91-157c0 0 0 0 0 0 3-6 10-8 16-5l61 35c5 4 7 11 4 16l-91 157c0 1 0 1 0 1-2 4-6 6-10 6z m620-163c-2 0-4 0-6-1l-157-91c0 0 0 0 0 0-6-3-8-10-5-16l35-61c4-5 11-7 16-4l157 91c1 0 1 0 1 0 6 3 7 10 4 16l-35 61c-2 3-6 5-10 5z m-810-4c-5 0-9-2-11-6l-35-61c-3-5-1-12 4-15l158-92 0 0c6-3 13-1 16 5l35 60c0 0 0 0 0 0 3 6 1 13-4 16l-158 91c-2 1-4 2-5 2z m712-235l0 0c-6 0-11-5-11-11l0-69c0-1 0-1 0-1 0-7 5-12 11-12l183 0 0 0c6 0 11 5 11 12l0 69c0 0 0 0 0 1 0 6-5 11-11 11l-183 0z m-794-5l0 0c-7 0-12-5-12-12l0-69c0 0 0 0 0-1 0-6 5-11 12-11l182 0 0 0c6 0 11 5 11 11l0 69c0 1 0 1 0 1 0 7-5 12-11 12l-182 0z m772-153c-4 0-8-2-10-6l-34-60c-1 0-1 0-1 0-3-6-1-13 4-16l158-91c6-3 13-2 16 4l35 61c3 5 1 12-4 15l-158 91 0 0c-2 1-4 2-6 2z m-566-5c-1 0-3 0-5-1l-157-91c0 0-1 0-1 0-5-3-7-11-4-16l35-61c3-5 10-7 16-4l157 91c0 0 0 0 0 0 6 3 8 10 5 16l-35 61c-3 3-7 5-11 5z m468-121c-2 0-4 0-6-1l-61-35c-5-4-7-11-4-16l91-157c0-1 0-1 0-1 3-6 11-7 16-4l61 35c5 3 7 10 4 16l-91 157c0 0 0 0 0 0-2 4-6 6-10 6z m-367-3c-4 1-8-2-10-5l-91-158c-3-6-1-13 4-16l61-35c5-3 12-1 15 4l92 158 0 0c3 6 1 13-5 16l-60 34c0 1 0 1 0 1-2 1-4 1-6 1z m149-57c-7 0-12-5-12-11l0-183 0 0c0-6 5-11 12-11l69 0c0 0 0 0 1 0 6 0 11 5 11 11l0 183 0 0c0 6-5 11-11 11l-69 0c-1 0-1 0-1 0z" horiz-adv-x="1000" />
+<glyph glyph-name="spin2" unicode="" d="m46 144l0 0c0 0-1 0-1 0-8 18-15 37-21 55-6 19-11 38-15 58-19 99-8 203 35 298 3 6 10 8 15 5 1 0 2 0 2-1l0 0 80-59c5-3 6-9 4-14-5-12-9-25-12-38-4-12-7-26-9-39-11-67-3-137 23-201 2-5 0-10-4-13l0 0-80-56c-5-4-12-3-16 3-1 0-1 1-1 2l0 0z m120 574l0 0c0 1 0 1 0 1 15 13 30 25 46 37 16 11 33 22 51 31 89 50 192 72 297 60 6-1 10-6 10-13 0-1-1-1-1-2l0 0-31-94c-2-5-8-8-13-7-13 0-27 0-40 0-14-1-27-2-40-4-68-11-133-40-186-84-4-3-10-3-14 0l0 0-79 58c-5 3-6 11-2 16 0 0 1 1 2 1l0 0z m588 65l0 0c0 0 1 0 1 0 17-10 34-21 50-32 16-12 31-25 46-38 74-69 127-160 148-262 2-6-2-12-9-13-1 0-1 0-2 0l0 0-100 1c-5 0-10 4-11 9-3 13-8 26-12 38-5 12-10 25-17 36-31 61-78 113-137 150-5 3-6 8-5 13l0 0 31 92c2 6 9 9 15 7 1 0 2-1 2-1l0 0z m244-535l0 0c0 0 0 0 0 0-4-20-9-39-15-57-7-19-14-37-22-55-44-92-114-170-205-221-6-3-13-1-16 4 0 1-1 2-1 2l0 0-30 94c-2 6 1 12 6 14 11 7 22 15 32 23 11 9 21 18 30 27 49 48 84 109 101 176 2 5 6 8 11 8l0 0 98-1c6 0 11-5 11-11 0-1 0-2 0-3l0 0z m-438-395l0 0c0 0 0 0 0 0-20-2-40-3-60-3-20 0-40 1-59 4-102 12-198 54-276 125-5 4-5 11 0 16 0 0 1 1 1 1l0 0 81 58c5 3 12 2 16-2 10-8 20-16 32-23 11-7 22-14 34-20 62-31 131-45 200-41 6 0 10-3 12-8l0 0 29-92c2-6-1-12-7-14-1-1-2-1-3-1l0 0z" horiz-adv-x="1000" />
+<glyph glyph-name="picture" unicode="" d="m357 529q0-45-31-76t-76-32-76 32-31 76 31 75 76 32 76-32 31-75z m572-215v-250h-786v107l178 179 90-89 285 285z m53 393h-893q-7 0-12-5t-6-13v-678q0-8 6-13t12-5h893q7 0 13 5t5 13v678q0 7-5 13t-13 5z m89-18v-678q0-37-26-63t-63-27h-893q-36 0-63 27t-26 63v678q0 37 26 63t63 27h893q37 0 63-27t26-63z" horiz-adv-x="1071.4" />
+<glyph glyph-name="menu" unicode="" d="m857 100v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 25t25 11h785q15 0 26-11t10-25z m0 286v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25v72q0 14 11 25t25 10h785q15 0 26-10t10-25z m0 285v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 26t25 10h785q15 0 26-10t10-26z" horiz-adv-x="857.1" />
+<glyph glyph-name="sliders" unicode="" d="m196 64v-71h-196v71h196z m197 72q14 0 25-11t11-25v-143q0-14-11-25t-25-11h-143q-14 0-25 11t-11 25v143q0 15 11 25t25 11h143z m89 214v-71h-482v71h482z m-357 286v-72h-125v72h125z m732-572v-71h-411v71h411z m-536 643q15 0 26-10t10-26v-142q0-15-10-26t-26-10h-142q-15 0-26 10t-10 26v142q0 15 10 26t26 10h142z m358-286q14 0 25-10t10-25v-143q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v143q0 14 11 25t25 10h143z m178-71v-71h-125v71h125z m0 286v-72h-482v72h482z" horiz-adv-x="857.1" />
+<glyph glyph-name="list-alt" unicode="" d="m214 189v-35q0-8-5-13t-13-5h-35q-7 0-13 5t-5 13v35q0 8 5 13t13 5h35q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-5h-35q-7 0-13 5t-5 12v36q0 7 5 13t13 5h35q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-6h-35q-7 0-13 6t-5 12v36q0 7 5 13t13 5h35q8 0 13-5t5-13z m643-286v-35q0-8-5-13t-13-5h-535q-8 0-13 5t-5 13v35q0 8 5 13t13 5h535q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-5h-535q-8 0-13 5t-5 12v36q0 7 5 13t13 5h535q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-6h-535q-8 0-13 6t-5 12v36q0 7 5 13t13 5h535q8 0 13-5t5-13z m72-393v464q0 8-6 13t-12 5h-822q-7 0-12-5t-6-13v-464q0-7 6-12t12-6h822q7 0 12 6t6 12z m71 607v-607q0-37-26-63t-63-26h-822q-36 0-63 26t-26 63v607q0 37 26 63t63 27h822q37 0 63-27t26-63z" horiz-adv-x="1000" />
+<glyph glyph-name="ajust" unicode="" d="m429 46v608q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41z m428 304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="circle" unicode="" d="m857 350q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="circle-empty" unicode="" d="m429 654q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="circle-notch" unicode="" d="m1000 350q0-102-40-194t-106-160-160-106-194-40-194 40-160 106-106 160-40 194q0 124 56 231t155 177 218 87v-145q-124-25-205-124t-81-226q0-73 28-139t77-114 113-76 139-28 139 28 114 76 76 114 28 139q0 128-81 226t-205 124v145q120-17 218-87t155-177 56-231z" horiz-adv-x="1000" />
+<glyph glyph-name="fork" unicode="" d="m161 29q0 22-16 38t-38 15-38-15-15-38 15-38 38-16 38 16 16 38z m0 642q0 23-16 38t-38 16-38-16-15-38 15-38 38-15 38 15 16 38z m357-71q0 22-16 38t-38 16-38-16-15-38 15-38 38-16 38 16 16 38z m53 0q0-29-14-54t-39-39q-1-160-126-231-38-21-114-45-71-22-94-39t-23-56v-15q24-14 39-39t14-53q0-45-31-76t-76-32-76 32-31 76q0 29 15 53t39 39v458q-25 14-39 39t-15 53q0 45 31 76t76 32 76-32 31-76q0-29-14-53t-39-39v-278q30 15 86 32 30 10 49 17t39 17 33 22 22 29 16 38 5 51q-25 14-39 39t-15 54q0 45 31 76t76 31 76-31 31-76z" horiz-adv-x="571.4" />
+<glyph glyph-name="sitemap" unicode="" d="m1000 154v-179q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q23 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q22 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107q0 29 21 51t51 21h285v107h-53q-23 0-38 15t-16 38v179q0 22 16 38t38 16h178q23 0 38-16t16-38v-179q0-22-16-38t-38-15h-53v-107h285q29 0 51-21t21-51v-107h53q23 0 38-15t16-38z" horiz-adv-x="1000" />
+<glyph glyph-name="stethoscope" unicode="" d="m714 457q0 15-10 25t-25 11-26-11-10-25 10-25 26-11 25 11 10 25z m72 0q0-34-20-62t-52-39v-220q0-89-73-152t-177-63-176 63-74 152v73q-91 12-153 72t-61 140v286q0 15 11 25t25 11q3 0 9-1 9 16 26 27t36 10q30 0 51-21t21-51-21-50-51-21q-18 0-36 10v-225q0-59 53-101t126-41 126 41 53 101v225q-18-10-36-10-30 0-51 21t-21 50 21 51 51 21q19 0 36-10t26-27q6 1 9 1 15 0 25-11t11-25v-286q0-80-61-140t-153-72v-73q0-59 52-101t126-42 126 42 53 101v220q-32 12-52 39t-20 62q0 45 32 76t76 31 75-31 32-76z" horiz-adv-x="785.7" />
+<glyph glyph-name="shield" unicode="" d="m607 314v357h-250v-634q67 35 119 76 131 103 131 201z m107 429v-429q0-48-18-95t-47-84-66-71-70-57-68-43-50-28-23-11q-7-4-15-4t-14 4q-9 4-24 11t-50 28-68 43-70 57-66 71-46 84-19 95v429q0 14 11 25t25 11h643q14 0 25-11t10-25z" horiz-adv-x="714.3" />
+<glyph glyph-name="heart-1" unicode="" d="m790 644q70-64 70-156t-70-158l-360-330-360 330q-70 66-70 158t70 156q62 58 151 58t153-58l56-52 58 52q62 58 150 58t152-58z" horiz-adv-x="860" />
+<glyph glyph-name="search-1" unicode="" d="m772 78q30-34 6-62l-46-46q-36-32-68 0l-190 190q-74-42-156-42-128 0-223 95t-95 223 90 219 218 91 224-95 96-223q0-88-46-162z m-678 358q0-88 68-156t156-68 151 63 63 153q0 88-68 155t-156 67-151-63-63-151z" horiz-adv-x="789" />
+<glyph glyph-name="menu-1" unicode="" d="m650 400q22 0 36-15t14-35-15-35-35-15l-600 0q-20 0-35 15t-15 35 14 35 36 15l600 0z m-600 100q-20 0-35 15t-15 35 14 35 36 15l600 0q22 0 36-15t14-35-15-35-35-15l-600 0z m600-300q22 0 36-15t14-35-15-35-35-15l-600 0q-20 0-35 15t-15 35 14 35 36 15l600 0z" horiz-adv-x="700" />
+<glyph glyph-name="back" unicode="" d="m750 540q40 0 70-29t30-71l0-290q0-40-30-70t-70-30l-690 0 0 140 650 0 0 210-500 0 0-110-210 180 210 180 0-110 540 0z" horiz-adv-x="850" />
+<glyph glyph-name="home-1" unicode="" d="m888 336q16-16 11-27t-27-11l-84 0 0-310q0-14-1-21t-8-13-23-6l-204 0 0 310-204 0 0-310-194 0q-28 0-35 10t-7 30l0 310-84 0q-22 0-27 11t11 27l400 402q16 16 38 16t38-16z" horiz-adv-x="900" />
+<glyph glyph-name="pencil-1" unicode="" d="m718 680q32-32 47-64t15-48l0-16-252-252-290-288-238-52 50 240 290 288 252 252q54 12 126-60z m-494-640l24 24q-2 44-52 94-22 22-45 35t-35 13l-14 2-22-24-18-80q28-16 46-34 24-24 36-48z" horiz-adv-x="780" />
+<glyph glyph-name="location-1" unicode="" d="m250 750q104 0 177-73t73-177q0-106-62-243t-126-223l-62-84q-10 12-27 35t-60 89-76 130-60 147-27 149q0 104 73 177t177 73z m0-388q56 0 96 40t40 96-40 95-96 39-95-39-39-95 39-96 95-40z" horiz-adv-x="500" />
+<glyph glyph-name="logout-1" unicode="" d="m502 0l0 100 98 0 0-100q0-40-29-70t-71-30l-400 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l400 0q42 0 71-29t29-71l0-150-98 0 0 150-402 0 0-700 402 0z m398 326l-198-196 0 120-450 0 0 150 450 0 0 120z" horiz-adv-x="900" />
+<glyph glyph-name="login-1" unicode="" d="m800 800q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-450 0q-40 0-69 30t-29 70l0 100 98 0 0-100 450 0 0 700-450 0 0-150-98 0 0 150q0 42 29 71t69 29l450 0z m-350-670l0 120-450 0 0 150 450 0 0 120 200-194z" horiz-adv-x="900" />
+<glyph glyph-name="publish" unicode="" d="m900 800q42 0 71-30t29-70l0-600q0-42-29-71t-71-29l-198 0 0 98 200 0 0 462-802 0 0-462 200 0 0-98-200 0q-40 0-70 29t-30 71l0 600q0 40 30 70t70 30l800 0z m-770-168q38 0 38 38 0 16-11 26t-27 10-27-11-11-25q0-16 11-27t27-11z m100 0q38 0 38 38 0 16-11 26t-27 10-27-11-11-25q0-16 11-27t27-11z m672 6l0 62-602 0 0-62 602 0z m-404-198l242-240-150 0 0-300-184 0 0 300-150 0z" horiz-adv-x="1000" />
+<glyph glyph-name="window" unicode="" d="m900 750q42 0 71-30t29-70l0-600q0-42-29-71t-71-29l-800 0q-40 0-70 29t-30 71l0 600q0 40 30 70t70 30l800 0z m-670-94q-16 0-27-11t-11-25q0-16 11-27t27-11q38 0 38 38 0 16-11 26t-27 10z m-138-36q0-16 11-27t27-11q38 0 38 38 0 16-11 26t-27 10-27-11-11-25z m810-570l0 460-802 0 0-460 802 0z m0 540l0 60-602 0 0-60 602 0z" horiz-adv-x="1000" />
+<glyph glyph-name="chart-pie" unicode="" d="m368 770l0-368-368 0q18 146 121 249t247 119z m106 0q156-20 261-139t105-279q0-174-123-298t-299-124q-160 0-278 105t-140 263l424 0q20 0 35 14t15 36l0 422z" horiz-adv-x="840" />
+<glyph glyph-name="chart-line" unicode="" d="m34 284q-42 10-32 56 10 42 54 32l98-24-52-80z m890-12q14 12 33 11t31-15q32-32-2-64l-252-226q-12-12-30-12-14 0-28 10l-286 220-54 14 50 80 36-8q12-4 16-8l264-204z m-490 220l-350-550q-12-22-38-22-12 0-24 8-16 10-20 29t6 33l374 588q8 16 28 20 18 6 36-6l246-156 226 326q10 16 28 19t34-9q38-24 12-62l-252-362q-24-36-62-12z" horiz-adv-x="1003" />
+<glyph glyph-name="chart-area" unicode="" d="m964 732q16 22 16-4l0-768-964 0q-12 0-15 7t5 17l230 288q20 22 40 2l74-66q10-8 21-7t17 11l158 238q16 26 38 4l112-104q20-20 38 4z" horiz-adv-x="980" />
+<glyph glyph-name="chart-bar-1" unicode="" d="m750 800q22 0 36-15t14-35l0-850-200 0 0 850q0 50 40 50l110 0z m-300-300q22 0 36-15t14-35l0-550-200 0 0 550q0 50 40 50l110 0z m-300-300q22 0 36-15t14-35l0-250-200 0 0 250q0 50 40 50l110 0z" horiz-adv-x="800" />
+<glyph glyph-name="air" unicode="" d="m85 534q-16-14-36-12t-34 18q-14 14-12 36t18 36q48 40 79 60t89 40 129 4 159-66 155-53 100 16 89 67q38 30 70-6 32-40-6-72-122-110-234-110-100 0-222 70-68 38-119 52t-93 0-65-29-67-51z m736-110q38 32 70-6 32-40-6-72-40-34-65-53t-72-38-97-19q-96 0-222 70-68 38-119 52t-93 0-65-29-67-51q-14-14-35-12t-35 18q-32 40 6 72 38 34 60 50t69 38 88 23 105-15 134-56q68-38 119-52t93 0 65 29 67 51z m0-256q38 32 70-6 14-14 12-36t-18-36q-40-34-65-53t-72-38-97-19q-96 0-222 70-68 38-119 52t-93 1-66-29-66-52q-14-14-35-12t-35 18q-32 40 6 72 38 34 60 50t69 38 88 23 105-15 134-56q68-38 119-52t93 0 65 29 67 51z" horiz-adv-x="905" />
+<glyph glyph-name="database-1" unicode="" d="m686 208q14 20 14-2l0-100q0-74-104-135t-246-61q-140 0-245 61t-105 135l0 100q0 8 4 10t10-8q32-52 125-86t211-34 211 34 125 86z m2 254q8 16 12 0l0-116q0-68-102-114t-248-46q-144 0-247 46t-103 114l0 116q0 20 14 0 30-46 124-75t212-29 212 29 126 75z m-338 328q144 0 247-39t103-93l0-64q0-58-103-99t-247-41-247 41-103 99l0 64q0 54 103 93t247 39z" horiz-adv-x="700" />
+<glyph glyph-name="flow-cascade" unicode="" d="m520 120q50 0 85-35t35-85-35-85-85-35q-80 0-110 74l-164 0q-88 0-131 54t-43 118l0 464q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-114q0-78 78-78l164 0q30 72 110 72 50 0 85-35t35-85-35-85-85-35q-80 0-110 74l-164 0q-42 0-78 16l0-194q0-78 78-78l164 0q30 72 110 72z m0 300q-28 0-49-20t-21-50q0-28 21-48t49-20 49 20 21 48q0 30-21 50t-49 20z m-470 280q0-28 21-48t49-20 49 20 21 48q0 30-21 50t-49 20-49-20-21-50z m470-768q28 0 49 20t21 48q0 30-21 50t-49 20-49-20-21-50q0-28 21-48t49-20z" horiz-adv-x="640" />
+<glyph glyph-name="flow-tree" unicode="" d="m868 112q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 114q0 78-76 78l-100 0q-44 0-78 12l0-204q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 204q-30-12-76-12l-100 0q-34 0-53-19t-22-33-3-26l0-114q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 114q0 64 43 118t131 54l100 0q76 0 76 52l0 140q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-140q0-52 78-52l100 0q86 0 129-54t43-118l0-114z m-678-112q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m212 700q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m138-700q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m280-68q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="940" />
+<glyph glyph-name="flow-line" unicode="" d="m168 162q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-378z m-116 488q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="240" />
+<glyph glyph-name="flow-branch" unicode="" d="m640 650q0-80-74-110-6-58-28-101t-61-69-68-38-75-26q-42-14-63-22t-47-24-38-40-16-60q70-30 70-110 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-204q40 30 138 60 58 18 84 29t51 41 29 76q-70 32-70 108 0 50 35 85t85 35 85-35 35-85z m-588 0q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z m400 600q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="640" />
+<glyph glyph-name="flow-parallel-1" unicode="" d="m240 650q0-76-72-110l0-378q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85z m-50-600q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m-70 532q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z m448-420q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-378z m-116 488q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="640" />
+<glyph glyph-name="dot" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z" horiz-adv-x="220" />
+<glyph glyph-name="dot-3" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z m350 0q46 0 78-32t32-78q0-44-33-77t-77-33-77 33-33 77q0 46 32 78t78 32z m350 0q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z" horiz-adv-x="920" />
+<glyph glyph-name="cd" unicode="" d="m460 810q190 0 325-135t135-325-135-325-325-135-325 135-135 325 135 325 325 135z m0-610q62 0 106 44t44 106q0 64-43 107t-107 43q-62 0-106-44t-44-106 44-106 106-44z" horiz-adv-x="920" />
+<glyph glyph-name="back-in-time" unicode="" d="m532 760q170 0 289-120t119-290-119-290-289-120q-138 0-252 88l70 76q82-60 182-60 126 0 216 90t90 216q0 128-90 218t-216 90q-124 0-213-86t-93-210l142 0-184-206-184 206 124 0q4 166 123 282t285 116z m-36-190l70 0 0-204 130-130-50-50-150 150 0 234z" horiz-adv-x="940" />
+<glyph glyph-name="list" unicode="" d="m100 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m0 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m0 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m200-100q-20 0-35 15t-15 35 15 35 35 15l350 0q22 0 36-15t14-35-15-35-35-15l-350 0z m350-100q22 0 36-15t14-35-15-35-35-15l-350 0q-20 0-35 15t-15 35 15 35 35 15l350 0z m0-200q22 0 36-15t14-35-15-35-35-15l-350 0q-20 0-35 15t-15 35 15 35 35 15l350 0z" horiz-adv-x="700" />
+<glyph glyph-name="list-add" unicode="" d="m350 400q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z m0-200q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z m620 200q30 0 30-50t-30-50l-170 0 0-170q0-30-50-30t-50 30l0 170-164 0q-30 0-30 50t30 50l164 0 0 170q0 30 50 30t50-30l0-170 170 0z m-620 200q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z" horiz-adv-x="1000" />
+<glyph glyph-name="progress-0" unicode="" d="m1000 450l0-250q0-42-29-71t-71-29l-800 0q-40 0-70 29t-30 71l0 300q0 40 30 70t70 30l800 0q42 0 71-30t29-70l0-50z m-100-250l0 300-800 0 0-300 800 0z" horiz-adv-x="1000" />
+<glyph glyph-name="pencil-2" unicode="" d="m0-143l68 343 274-273z m137 392l422 422 259-260-421-422z m531 494q2 39 31 69t69 31 66-26l131-130q25-26 24-66t-30-69-69-30-66 24l-131 131q-27 27-25 66z" horiz-adv-x="989" />
+<glyph glyph-name="cog-2" unicode="" d="m0 272l0 156 150 16q14 45 38 88l-96 117 109 109 117-95q41 23 88 37l16 150 156 0 16-150q45-14 88-37l117 95 109-109-96-117q24-43 38-88l150-16 0-156-150-16q-14-47-38-88l96-117-109-109-117 96q-43-24-88-38l-16-150-156 0-16 150q-47 14-88 38l-117-96-109 109 96 117q-24 41-38 88z m355 78q0-60 42-102t103-42 103 42 42 102-42 103-103 42-103-42-42-103z" horiz-adv-x="1000" />
+<glyph glyph-name="cog-circled" unicode="" d="m0 350q0 207 147 354t353 146 354-146 146-354-146-354-354-146-353 146-147 354z m195-47l92-10q8-29 22-52l-59-73 68-68 73 59q23-14 52-22l10-92 94 0 10 92q29 8 52 22l73-59 68 68-59 73q14 23 22 52l92 10 0 94-92 10q-8 29-22 52l59 73-68 68-73-59q-23 14-52 22l-10 92-94 0-10-92q-29-8-52-22l-73 59-68-68 59-73q-14-23-22-52l-92-10 0-94z m217 47q0 37 26 63t62 25 63-25 25-63-25-62-63-26-62 26-26 62z" horiz-adv-x="1000" />
+<glyph glyph-name="cogs" unicode="" d="m0 245l0 97 94 8q8 30 23 55l-60 74 68 69 74-61q26 16 55 23l8 94 97 0 10-94q29-7 55-23l74 61 68-69-60-74q16-25 23-55l94-8 0-97-94-10q-7-29-23-55l60-72-68-70-74 60q-26-15-55-23l-10-94-97 0-8 94q-29 8-55 23l-74-60-68 70 60 72q-15 26-23 55z m221 49q0-37 26-64t64-26 63 26 26 64-26 63-63 26-64-26-26-63z m318 238l8 72 70-2q8 22 20 39l-37 57 54 45 49-49q20 10 41 14l14 66 72-8-2-68q22-8 39-22l57 39 45-54-49-49q10-20 12-43l68-14-8-70-68 0q-8-20-22-37l39-59-56-45-47 49q-22-8-43-12l-14-66-70 6 0 70q-20 8-37 20l-59-37-45 54 49 49q-8 20-12 41z m31-446l6 51 49 0q6 16 14 28l-26 43 37 33 36-37q13 7 29 9l10 49 48-6 0-48q16-6 28-16l41 27 31-41-35-35q6-14 10-29l47-12-6-51-49 0q-4-15-14-27l28-43-40-33-35 37q-13-8-29-10l-10-49-49 6 0 51q-13 4-27 14l-41-28-31 41 35 35q-6 14-8 30z m118 14q-4-21 8-36t32-18 34 10 17 33-10 36-31 18l-6 0q-17 0-31-13t-13-30z m17 451q-4-27 14-49t45-24 48 15 23 45-14 47-44 25l-7 0q-26 0-44-17t-21-42z" horiz-adv-x="1000" />
+<glyph glyph-name="calendar-1" unicode="" d="m0-150l0 649 893 0 0-649-893 0z m0 705l0 221 109 0 0-141 200 0 0 141 275 0 0-141 199 0 0 141 110 0 0-221-893 0z m168 139l0 156 82 0 0-156-82 0z m59-619q0-112 123-112 47 0 84 32 39 31 39 80 0 68-78 90 48 15 64 48 12 28-2 73-27 62-107 62-51 0-86-26t-37-77l72 0q0 45 49 46 43 0 45-52 0-49-84-47l0-57q48 0 68-8 23-11 23-46 0-57-54-61-43 0-47 55l-72 0z m281 146q49 14 88 47l0-297 70 0 0 371-64 0q-38-37-94-58l0-63z m135 473l0 156 82 0 0-156-82 0z" horiz-adv-x="893" />
+<glyph glyph-name="doc-new" unicode="" d="m0-150l0 818 188 182 519 0 0-348-86 0 0 260-369 0 0-156-166 0 0-668 418 0 0-88-504 0z m373 207l0 162 209 0 0 207 160 0 0-207 207 0 0-162-207 0 0-207-160 0 0 207-209 0z" horiz-adv-x="949" />
+</font>
+</defs>
+</svg>
\ No newline at end of file
diff --git a/ui/new-ui-samples/fonts/fontello.ttf b/ui/new-ui-samples/fonts/fontello.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..c1167906ee073765a9d01aead457c4b25c530735
GIT binary patch
literal 42532
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
P^z$#-zOUl!Fe&{XToHil
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/fontello.woff b/ui/new-ui-samples/fonts/fontello.woff
new file mode 100644
index 0000000000000000000000000000000000000000..e0007cf3c54b81e62aeaeec8976b8feb2e5a21c0
GIT binary patch
literal 24196
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
G0002s37CTb
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/glyphicons-halflings-regular.eot b/ui/new-ui-samples/fonts/glyphicons-halflings-regular.eot
new file mode 100644
index 0000000000000000000000000000000000000000..b93a4953fff68df523aa7656497ee339d6026d64
GIT binary patch
literal 20127
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/glyphicons-halflings-regular.svg b/ui/new-ui-samples/fonts/glyphicons-halflings-regular.svg
new file mode 100644
index 0000000..94fb549
--- /dev/null
+++ b/ui/new-ui-samples/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,288 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
+<font-face units-per-em="1200" ascent="960" descent="-240" />
+<missing-glyph horiz-adv-x="500" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="400" />
+<glyph unicode=" " />
+<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
+<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode=" " />
+<glyph unicode="¥" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
+<glyph unicode=" " horiz-adv-x="650" />
+<glyph unicode=" " horiz-adv-x="1300" />
+<glyph unicode=" " horiz-adv-x="650" />
+<glyph unicode=" " horiz-adv-x="1300" />
+<glyph unicode=" " horiz-adv-x="433" />
+<glyph unicode=" " horiz-adv-x="325" />
+<glyph unicode=" " horiz-adv-x="216" />
+<glyph unicode=" " horiz-adv-x="216" />
+<glyph unicode=" " horiz-adv-x="162" />
+<glyph unicode=" " horiz-adv-x="260" />
+<glyph unicode=" " horiz-adv-x="72" />
+<glyph unicode=" " horiz-adv-x="260" />
+<glyph unicode=" " horiz-adv-x="325" />
+<glyph unicode="€" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
+<glyph unicode="₽" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
+<glyph unicode="−" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="⌛" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
+<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="☁" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
+<glyph unicode="⛺" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
+<glyph unicode="✉" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
+<glyph unicode="✏" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
+<glyph unicode="" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
+<glyph unicode="" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
+<glyph unicode="" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
+<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
+<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
+<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
+<glyph unicode="" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
+<glyph unicode="" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
+<glyph unicode="" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
+<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
+<glyph unicode="" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
+<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
+<glyph unicode="" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
+<glyph unicode="" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
+<glyph unicode="" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
+<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
+<glyph unicode="" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
+<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
+<glyph unicode="" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
+<glyph unicode="" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
+<glyph unicode="" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
+<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
+<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
+<glyph unicode="" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
+<glyph unicode="" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
+<glyph unicode="" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
+<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
+<glyph unicode="" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
+<glyph unicode="" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
+<glyph unicode="" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
+<glyph unicode="" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
+<glyph unicode="" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
+<glyph unicode="" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
+<glyph unicode="" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
+<glyph unicode="" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
+<glyph unicode="" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
+<glyph unicode="" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
+<glyph unicode="" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
+<glyph unicode="" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
+<glyph unicode="" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
+<glyph unicode="" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
+<glyph unicode="" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
+<glyph unicode="" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
+<glyph unicode="" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
+<glyph unicode="" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
+<glyph unicode="" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
+<glyph unicode="" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
+<glyph unicode="" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
+<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
+<glyph unicode="" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
+<glyph unicode="" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
+<glyph unicode="" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
+<glyph unicode="" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
+<glyph unicode="" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
+<glyph unicode="" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
+<glyph unicode="" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
+<glyph unicode="" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
+<glyph unicode="" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
+<glyph unicode="" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
+<glyph unicode="" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
+<glyph unicode="" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
+<glyph unicode="" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
+<glyph unicode="" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
+<glyph unicode="" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
+<glyph unicode="" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
+<glyph unicode="" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
+<glyph unicode="" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
+<glyph unicode="" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
+<glyph unicode="" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
+<glyph unicode="" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
+<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
+<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
+<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
+<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
+<glyph unicode="" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
+<glyph unicode="" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
+<glyph unicode="" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
+<glyph unicode="" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
+<glyph unicode="" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
+<glyph unicode="" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
+<glyph unicode="" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
+<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
+<glyph unicode="" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
+<glyph unicode="" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
+<glyph unicode="" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
+<glyph unicode="" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
+<glyph unicode="" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
+<glyph unicode="" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
+<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
+<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
+<glyph unicode="" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
+<glyph unicode="" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
+<glyph unicode="" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
+<glyph unicode="" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
+<glyph unicode="" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
+<glyph unicode="" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
+<glyph unicode="" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
+<glyph unicode="" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
+<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
+<glyph unicode="" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
+<glyph unicode="" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
+<glyph unicode="" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
+<glyph unicode="" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
+<glyph unicode="" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
+<glyph unicode="" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
+<glyph unicode="" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
+<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
+<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
+<glyph unicode="" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
+<glyph unicode="" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
+<glyph unicode="" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
+<glyph unicode="" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
+<glyph unicode="" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
+<glyph unicode="" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
+<glyph unicode="" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
+<glyph unicode="" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
+<glyph unicode="" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
+<glyph unicode="" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
+<glyph unicode="" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
+<glyph unicode="" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
+<glyph unicode="" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
+<glyph unicode="" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
+<glyph unicode="" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
+<glyph unicode="" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
+<glyph unicode="" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
+<glyph unicode="" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
+<glyph unicode="" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
+<glyph unicode="" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
+<glyph unicode="" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
+<glyph unicode="" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
+<glyph unicode="" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
+<glyph unicode="" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
+<glyph unicode="" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
+<glyph unicode="" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
+<glyph unicode="" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
+<glyph unicode="" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
+<glyph unicode="" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
+<glyph unicode="" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
+<glyph unicode="" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
+<glyph unicode="" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
+<glyph unicode="" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
+<glyph unicode="" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
+<glyph unicode="" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
+<glyph unicode="" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
+<glyph unicode="" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
+<glyph unicode="" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
+<glyph unicode="🔑" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
+<glyph unicode="🚪" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
+</font>
+</defs></svg>
\ No newline at end of file
diff --git a/ui/new-ui-samples/fonts/glyphicons-halflings-regular.ttf b/ui/new-ui-samples/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..1413fc609ab6f21774de0cb7e01360095584f65b
GIT binary patch
literal 45404
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/glyphicons-halflings-regular.woff b/ui/new-ui-samples/fonts/glyphicons-halflings-regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..9e612858f802245ddcbf59788a0db942224bab35
GIT binary patch
literal 23424
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
G`u_lkUM?>H
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/glyphicons-halflings-regular.woff2 b/ui/new-ui-samples/fonts/glyphicons-halflings-regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..64539b54c3751a6d9adb44c8e3a45ba5a73b77f0
GIT binary patch
literal 18028
zcmV(~K+nH-Pew8T0RR9107h&84*&oF0I^&E07eM_0Rl|`00000000000000000000
z0000#Mn+Uk92y`7U;vDA2m}!b3WBL5f#qcZHUcCAhI9*rFaQJ~1&1OBl~F%;WnyLq
z8)b|&?3j;$^FW}&KmNW53flIFARDZ7_Wz%hpoWaWlgHTHEHf()GI0&dMi#DFPaEt6
zCO)z0v0~C~q&0zBj^;=tv8q{$8JxX)>_`b}WQGgXi46R*CHJ}6r+;}OrvwA{_SY+o
zK)H-vy{l!P`+NG*`*x6^PGgHH4!dsolgU4RKj@I8Xz~F6o?quCX&=VQ$Q{w01;M0?
zKe|5r<z7o5`*yS~8)MszG41q#5{WWPpy7G9^(-fD<g4HS2Pp6}MR#f7LIoFspeCvR
z3+c{Ov}|bDFijfL*xJ&DWaU}da`Er7tg~)(Y2IDkd3AD?w7jnSneG!-SaWI)p`xDU
zXH9Mys?(WBfmfBO!_){Max(NjX;ffVH@MAGD6y!?&l=$WE1+*S^Cx4)$U?A><_7CD
z=eO3*x!r$<gNx(8nyyp{U13{MWIQu>aX2iFh3;}xNfx0v;SwB<Fg``NKlv&}sOOia
zl_SskHz$qk-Tj7B2@DHwWBbat?O%&GCL=1*D=EFRpwKHcVF9o~HnwAo=XtT&qlRWE
zVi`v1=H&nBv?M!wAX!1fF?LWbbVvCAjN!ns70n|1u$9{ZL&9b)AXkF-t^%6Wna*`f
z*04(m<0Gx@4&<!XDochu+x!F|DAC{R)c4o_TK-_!s|@9}TbCv3Sp`&zta~M|$%-V1
ztq`DddvEXU8JrjLh=Ul_yYF^%B5>fGG+@Z;->Hhvq<wD;VB@ph6#6G_6lL5#3gkx~
zHFE%Z^IuN$3X)Ju)24Q9Ro)B9zI%GT-16@8|DPH7fB1}tA~RrY4U!xKmRBRxkiA|Q
zKr4+b2V=R(Yj3HIK~EcS6>fF4r__4$mU>Dl_1w;-9`~5rF~@!3;r~xP-hZvOfOx)A
z#>8O3N{L{naf215f>m=bzbp7_(ssu&cx)Qo-{)!)Yz3A@Z0uZaM2yJ8#<s6khOy@V
z&}wI!ds<}Wi3oZ(j|&tv|KA}5cx}QpZ^By#9KFAF@B1dVuQA$!NDxA6LE`KPadPU;
zQjo+AqqndYk0@McX!H;i$Tx}X(u#SHJ%&iNTJu#<Xz9=-I1o~2(*?vBfO^7b&8^8!
zI*Z@{F?FmY+=Z{Cp`Jcc{axky6qgRBtRkQEW;eW-3-wE{UVkT;s_VTolPg6pyu@CK
zSyeS%s7^u`F5b$ErP4Ux#VgLuk2sI{EPRQ3O?-?&iV@{?VSLbGh?0Noj@91Fh1H!U
z01AI>OGlzm?JO5gbrj~@)NB4@?>KE(K-$w}{};@dKY#K3+Vi64S<@!Z{(I{7l=!p9
z&kjG^P~0f46i13(w!hED<gesU<d5XH<k#ev<OXsrxsqH=M#%^{mn<fylX>Jga;*Eb
z`!n|++@H8VaKG<9>VDh(y89J#=;Z$ei=GnD5TesW#|Wf)^D+9NKN4J3H5PF_t=V+Z
zdeo8*h9+8&Zfc?>>1|E4B7MAx)^uy$L>szyXre7W|81fjy+RZ1>Gd}@@${~PCOXo)
z$#HZd3)V3@lNGG%(3PyIbvyJTOJAWcN@Uh!FqUkx^&BuAvc)G}0~SKI`8ZZXw$*xP
zum-ZdtPciTAUn$XWb6vrS=JX~f5?M%9S(=QsdYP?K%Odn0S0-Ad<-tBtS3W06I^FK
z8}d2eR_n!(uK~APZ-#tl@SycxkRJ@5wmypdWV{MFt<T5%<QMMP#rTv8Dn)!jr4End
z8!An$TjN_QZBN_|-%;s$96wO$ZrvL{QYl%F!EaP1Th9SiDvOmh5WrK}3{64{{_F&y
zrSMy`6AG<_-)~t&XssC4d+gCHeK9;{jV1y%Xrvg1Cy#-D2g;>YBUY#g-Vv?5AEBj1
z`$T^tRKca*sn7<ZK}0!&|7AkCI;jT+6~rYE0#BU5AkxqT6Y+wF*hUg{if$klH$Np(
z14lF>gt%s@XUD-t>bij-4q-ilku9^;QJ3Mpc`HJ_EX4TGGQ-Og)`c~qm51<|gp7D@
zp#>Grssv^#A)&M8>ulnDM_5t#Al`#jaFpZ<#YJ@>!a$w@kEZ1<@PGs#L~kxOSz7jj
zEhb?;W)eS}0IQQuk4~JT30>4rFJ3!b+77}>$_>v#2FFEnN^%(ls*o80pv0Q>#t#%H
z@`Yy-FXQ9ULKh{Up&oA_A4B!(x^9&>i`+T|eD!&QOLVd(_avv-bFX~4^><K+`NUjl
zUA`n*5<n{f%?!4-)qpuLcwM`4xUD6=$ki+M2U1n6MQw*G7TmC^qdRw?b*#WSFG;)w
z)HldC)uy>o{%mzzrg_i~SBnr%DeE|i+^}|8?kaV(Z32{`vA^l!sp15>Z72z52FgXf
z^8ZITvJ9eXBT1~iQjW|Q`Fac^ak$^N-vI^*geh5|*CdMz;n16gV_zk|Z7q8tFfCvU
zJK^Pptnn0Rc~<r0!CgppAqmePbR1#5Tubl85FQ4lTg)+g8UrHdY9Ka1?3OcBFeRlE
zzYpoom?Fp2nZ{a4hDYQEn^Tkbje;(-5yZ};a0h|L)2vg*F=grd*^|WBo1OU#S-~Fv
zcDpzl2xPHbu|lC2Y@t*8{!%Fh(i78$=lQReu7C@B0!fO~hV;@Uos_RW`!LXs+NQHy
z@F$dGXT35dG@wzAM4<{W&5|=hvLeY%j@6DPfZK{_NfpP!+NaV|XArkdMWmsrp|+Y0
zNxjY}2dUoGHC2{GT?~El9hnDW?KmWthwM10KJ(#NAOW%mXq6&t9<|PZ;%Xe7E+vTD
zfEY+f$1Mv<nx@^jBQcU4Ljg4P-dWxOH-zo(t`hB8-Ik$N3~vY;K2XYCp*Fv_2blJm
zPc;8GW*QB>egGIAK}uv<M%BWA$}X1PZ}r3ec_|6TIBdoXwlXq~Ws001rqVG;8=+eP
zbcwJ)A;^UcGF*T_xCk`{#MzU|C0f_+{M&2Zk_ZN2^_{NVK>99VZm2WLPezQQ5K<`f
zg{8Ll|GioPYfNheMj-7-S87=w4N0WxHP`1V6Y)0M&SkYzVrwp>yfsEF7wj&T0!}dB
z)R~gGfP9pOR;GY_e0~K^^oJ-3AT+m~?Al!{>>5gNe17?OWz)$)sMH*xuQiB>FT2{i
zQ>6U_<n)x#cJkNUc|V)^vL|15d~)i9%UIk7`0hyQQOX6dwG{=#lR`i}3*A_(-}<aV
z6Bs$mG_#ni!&Ir*LWx4DW1y|U7^_H;P@~Q(g7S%hUz3y7SxDI<tR$+-%3z@EM);%g
zLObKN!YkVml!Zc2Qm{14ydZQ0tvYlF^&(mmMY>8}Ay~r4li;jzG+$&?S12{)+<*k9
z<^SX#xY|jvlvTxt(m~C7{y<eW|86c<M_B#9!3F3@>{3g>7TX#o2q$xQO|fc<%8r<e
zu{@uYv6wTaDS(!pU?WCA5)2p&Mj+Ip;0XTMc8zb%VkCGB2k$Gg;JkJFCbWHte9BlD
zCR^F6kT^z*ExAP|FFuMd7tu$>E@A3=UW(o?gVg?gDV!0q6O!{MlX$6-Bu_m&0ms66
znWS&zr{O_4O&{2uCLQvA?xC5vGZ}KV1v6)#oTewgIMSnBur0PtM0&{R5t#UEy3I9)
z`LVP?3f;o}sz*7g<a{wL*dZXtI5+zcTbzINq%3Vx?sa^oH8-vb96eb6k)$k`VM?dj
z8y1_mUUalhn>5qdTxJl^gk3>;8%SOPH@B)rmFOJ)m6?PlYa$y=RX%;}KId{m<ya`&
zf~xC+0#uqMzpD#MstCV?tz>9R#2=LNwosF@OTivgMqxpRGe}5=LtAn?VVl6VWCFLD
z7l#^^H8jY~42hR)OoVF#YDW(md!g(&pJ;yMj|UBAQa}UH?ED@%ci=*(q~Opn>kE2Q
z_4Kgf|0kEA6ary41A;)^Ku(*nirvP!Y>{FZYBLXLP6QL~vRL+uMlZ?jWukMV*(dsn
zL~~KA@jU)(UeoOz^4Gkw{fJsYQ%|UA7i79qO5=DOPBcWlv%pK!A+)*F`3WJ}t9FU3
zXhC4xMV7Z%5RjDs0=&vC4WdvD?Zi5tg4@xg8-GLUI>N$N&3aS4bHrp%3_1u9wqL)i
z)XQLsI&{Hd&bQE!3m&D0vd!4D`l1$rt_{3NS?~lj#|$GN5RmvP(j3hzJOk=+0B*2v
z)Bw133RMUM%wu<VkMnpWWVN&K8^*s5oqf-N`_{oZG|c^)?fe5daI7j+I{GC?6;bAe
zUSXe$6^9Vy1KrCfsOM#a9`s`Ns00)gifk>_+$vbzOy?yk#kvR?xGsg-ipX4wKyXqd
zROKp5))>tNy$HByaEHK%$mqd>-{Yoj`oSBK;w>+eZ&TVcj^DyXjo{DDbZ>vS2cCWB
z(6&~GZ}kUdN(*2-nI!hvbnVy@z2E#F394OZD&Jb04}`Tgaj?MoY?1`{ejE2iud51%
zQ~J0sijw(hqr_Ckbj@pm$FAVASKY(D4BS0GYPkSMqSDONRaFH+O2+jL{hI<DV209S
z)XR~VgGa)M^-;}1&#S3{@xzwR6~@}^V}twZy;sZcsTJr0S5s{W-N3D9v%1<w%kip_
zCaGQ)_4?SD)S-wrJ3}!#J==&-iR8Kz)nLlnoRC&l|C1fmMV-bqBD82vt61QE6dSAF
z*iJKFHPeAzx_T}Ct>ltJSJT~e)TNDr(}=Xt7|UhcU9eoXl&QZRR<9WomW%&m)FT~j
zTgGd3-j}Uk%CRD;$@X)NNV9+RJbifYu>yr{Fk<C+0Z7wvVjq!VGjwL>O;p>_&njI>
zyBHh_72bW<C>;8}oGeY0gpHOxiV597j7mY<#?WMmkf5x~Kf<RrP*$<_TMcAZ<977s
zG-{sG-<y$aNL=Fg)E11z=zEyh@&Zlt<-N$5T)Lf&<pEj#+<|}`9f4puO~YVB6Jm!v
z!37dKVIz9-hLJpqcp?V#EU09HXG3YfV3A{zn-)630R_n7NwnfVYInEHeM$w$$$F=a
zUOHAT9sN4j{@RNZd%w-R1}Mm~Ligs&9Lc5wlF9RUjyxD1L}DW%Q=_4K^pa5dNOiqV
zfiDy5dvZ1fJ9kyK6XwwJ5_8s27to%QJf!DXz~EWpbJWE5-c5LQu!j^}nqmNv+H<%h
z5ssJ<c#g^_qKPkFd;?x87%*ynZQ!gsBex|=gx*awoyTyPQBBvZ@H#pgVq8NqXJ!Gg
zuwA`+(oi^5nIKiFlTl*U=ybY+9YY+wRG&TyaG*FVHfLWlmTb<UHm6AP5eOjK&H%@T
z4@jLl_YGv5Jmy2q={B>k*re(&tG_mX<3&2cON*2u%V29tsXUv{#-ijs2>EuNH-x3)
zPBpi+V6gI=wn}u164_j8xi-y(B?Au2o;UO=r6&)i5S3Mx*)*{_;u}~i4dh$`VgUS-
zMG6t*?DXDYX0D2Oj31MI!HF>|aG8rjrOPnxHu4wZl;!=NGjjDoBpXf?ntrwt^dqxm
zs(lE@*QB3NH)!`rH)5kks-D89g@UX&@DU9jvrs<xLUb7(M^4Zb6^^3tZR7!hc=SMz
zY6*prxO{uSb2$<j;JZB!{&!N@FRiO@L`rit7J5FDJBlZG-SI^R&~X)B26E|MJx3Zp
zy@feJ>Y)aI=9b4n<X@Mg2JK5FwM5CTI(2DlYHRLE7-h-ky&9}X`qiByDxrocwQ6k!
zk>Py3bfdX_U;#?zsan{G>DKob2LnhCJv8o}duQK)qP{7iaaf2=K`a-VNcfC582d4a
z>sBJA*%S|NEazDxXcGPW_uZ&d7xG`~JB!U>U(}acUSn=FqOA~(pn^!aMXRnqiL0;?
zebEZYouRv}-0r;Dq&<B?o>z9>s#Rt1<!G80gW3Q`9g34ikcEkn<~yB0GE=440i1w9
z%Vr=2{=&=rZq4E{&?AkG<{r866K366I$gg?dF2R5T^g;GEw`9Q*Nk^(b|;|+1mb*%
z#4u&?3d3JFi15;ot8Oc19^cux;^0|4tLG@q3aUT$?2-_vk$Lj@p(S^1tSf2`gC-^+
z=%QnjUZHg-onrhZ@o1lIHV_2Dq?*qAxhgUYKOD3{$4MNkw#KqGMg~{D*qK}6#+(MI
zLiJU8?@7)@l#?NnZ90q6`<!@a)Mc05$F6R?dVF0a42_U&5!rIVRk%it+OLoWl=%^V
zt}(_79f^HAArEdKM!qJXXY$(d|4@mB-2tz!8yh<&*Y>HL`0p4bB)A&sMyn|rE_9nh
z?NO*RrjET8D4s(-`nS{MrdYtv*kyCnJKbsftG2D#ia@;42!8xd?a3P(&Y?vCf9na<
zQ&Ni*1Qel&Xq{Z?=%f0<LS^x97`leNoS?M1&H-Xn(H4XTZqAYsYIOp+zQ7v^2WLR!
z_a_8#QR|eBZg?(rHeyy)Ce#d@UAa5k@2V9cLthMp76uClo{creD&Bgz9m%@;ZGciy
zb&;xZf|B4Crm;}`+FCG!wta2!yrIkn%Jpu&re1E<PjbmrrsBbowaz-9RpTeuXu#&D
zFm4Z8p>SRqQt5m|Myg+8T=GDc)@^};=tM>9IDr7hdvE9-M@@<0pqv45xZTeNecbL-
zWFQt4t`9>j8~X%lz}%We>Kzh_=`XO}!;4!OWH?=p*DOs#Nt({k^IvtBEL~Qafn)I^
zm*k{y7_bIs9YE}0B6%r`EIUH8US+MGY!KQA1fi-jCx9*}oz2k1nBsXp;4K<_&S<R|
z+!NEpcbfYC>N}}w<)!EylI_)v7}3&c)V;Cfuj*eJ2yc8LK=vugqTL><#65r6%#2e|
zdYzZ)9Uq7)A$ol&ynM!|RDHc_7?FlWqjW>8TIHc`jExt)f5W|;D%GC#$u!%B*S%Z0
zsj&;bIU2jrt_7%$=!h4Q29n*A^^AI8R|stsW%O@?i+pN0YOU`z;TVuPy!N#~F8Z29
zzZh1`FU(q31wa>kmw{$q=MY>XBprL<1)Py~5TW4mgY%rg$S=4C^0qr+*A^T)Q)Q-U
zGgRb9%MdE-&i#X3xW=I`%xDzAG95!RG9<s#0S@%P{4ssMj6|f(PFTtK{&eg=M$et?
zer_yKYB>)s?v_5+qx`7NdkQ)If5}BoEp~h}XoeK>kweAMxJ8tehagx~;Nr_WP?jXa
zJ&j7%Ef3w*XWf<k`Dtf*esPy5LFqg?XcIB9IkPk2PVCIR^-+n7<HvnNOxS;rSNY$k
z!q<-6euEMl;SCbnVwt5PhJlC8e8)6(eeUqB*8$mMnR$Q&;ETvMu%R;lTOg&_)?8$`
zEVa^()w5!O5o`IR%tYnnz9leJ+<2|7dp$e$)VGU<0VsrN2!{)e*i2Km_!HkTy_op@
zsnIk4PS0pBq&7e1Cq-WNe*ebQP_BP_b6V^hnOf6Jl*FDBLVJ=#%yjrBiM`Z%lGFDo
zwHH-yVfi&trZbO`$d`z6e!q^9z6z!R^x64FT@j!px;*Fv`gCn5ntcrW!_Q4ZK!=`N
zoJV-<2+l^+1!xdB0GlIyi1aL@Bfyw-3;j%CdMMseXt6XU(|7@G1YlJY;FZ<6E=3Wj
z<90D&lAbgUUnehHsAREwMtG=6$~8Hjj0}TB^$|Sk>?V*nR)|IOMrX;$*$e23m?QN`
zk>sC^GE=h6?*Cr~596s_QE@>Nnr?{EU+_^G=LZr#V&0fEXQ3IWtrM{=t^qJ62Sp=e
zrrc>bzX^6yFV!^v7;>J9>j;`qH<hDH19MMT1+`8y)sG%_MO<QWhJX7}-!&K#jas?d
zy;gZO2VIR5z1H^NXfFwADaHGprj9Kyw6No$Yqd_S(T={z#2gbNW$Y;;P#5j-{0Iqq
z{Yz6(ka&r*xSggxVdEyX?Y53QVJz#Wj2B2nNYC=~i46iAU6ds(WkjB{Reo2yZ2cFH
z1KOLbJ7d1#n3MMhVE&yyAfdi+kxdP<3vBD^E`m_9S2y(rq1mIzE*dZNSDYg|SM_8n
zmO6SnMKXq{pYHbK`f8yE_&F1K$=pH5Q;<_Q=ykx1w&1KgW?4A9Z6Hh0ujuU5gw(c)
z&7nRlgcqO=4PWSIrL^%aZQ)})*BEYH(5EdFt~HS|W2m{IuJL*etT$vJP@H=66XgN5
z8Q}8pvQ~ulll!Gl9Z+^=yi)!QQl!(y;INZ9hFT3RpTQp9WD<t=u9}FyLz|lM^T%K;
z_F;6vJrfj%Yd?0P?KC4$4d|po%oYftn%JedFIyM&26HYvVHGfC#(R&nCXS+Z{t)t^
zVSWJ}WdR7#^Eiv>DQ4uc92eVe6nO@c>H=ouLQot``E~KLNqMqJ7(G+?GWO9Ol+q$w
z!^kMv!n{vF?RqLnxVk{a_Ar;^sw0@=+~6!4&;SCh^u<XeQK8Ry4Gm-T(Vj*P>tT=I
zo&$CwvhNOjQpenw2`5*a6Gos6cs~*TD`8H9P4=#jOU_`%L<QahFX*>!W;$57NjN%4
z39(61ZC#s7^tv`_4j}wMRT9rgDo*XtZwN-L;Qc$6v8kKkhmRrxSDkUAzGPgJ?}~_t
zk<g7QLp>woGS4=6lsD`=RL|8L3O9L()N)lmEn-M15fRC{dhZ}7eYV%O-R^gsAp{q4
z!C1}_T8gy^v@SZ5R&Li5JMJy+K8iZw3LOGA0pN1~y@w7RRl#F()ii6Y5mr~Mdy@Kz
z@FT4cm^I&#Fu_9I<Lt*^+@1e0b(+y4E>X(HAFP{XLbRALqm&)>m_we>a`hfv?eE|t
z?YdDp2yAhj-~vuw^wzVDuj%w?exOcOT(ls(F*ceCe(C5HlN{lcQ;}|mRPqFDqLEzw
zR7ldY+M6xe$$qLwekmk{Z&5cME$gpC?-8)f0m$rqaS|mj9ATNJvvyCgs(f2<G?s#j
zlCyq7V=W|3+#5GMRv3jyMSve^Et#Ab=u*f=lMF{rP2hXbA~Thc4Er=Whg%hdYCNEj
z;kX^FSJSNv%HwF&_?QB}Y>{r;2E!oy$k<WRsM?7~2V-%l??892FJ&Nc|D((m<^gBU
z9InVbh@;KM5Dz*apz7ga>5{jik#(;S>do<#m0wVcU<}>)VtYmF9O0%(C>GDzPgh6X
z9OkQLMR~y7=|MtaU!LDPPY7O)L{X#SC+M|v^X2CZ?$GS>U_|aC(VA(mIvCNk+biD|
zSpj>gd(v>_Cbq>~-x^Y3o|?eHmuC?E&z>;<!5?S(?^O9r&S^X+pEvdora!<1(g^2R
zF}c9cL+{oKVWq$6?rtz|xpFbl44EDmFIBCjiJb-Y3(jwkFAqQImExJNVfoWvtZ)_T
zk4V<B4M+9tw4kQKIG^34KQl&&Fz^SMfZ1Rr!}rgT#M3;D3P+k<)V-V;IAUzgk0mWE
z!YO?vo&!phIu^NE0<F?&&>Ij`%{$Pm$hI}bl0Kd`9KD~AchY+goL1?igDxf$qxL9<
z4sW@sD)nwWr`T>e2B8MQN|p*DVTT8)3(%AZ&D|@Zh6`cJFT4G^y6`(UdPLY-&bJYJ
z*L06f2~BX9qX}u)nrpmHP<M#fk<GgBNMKYA_9QYh8<vJ<9@F-~(AqGXdLPEfJFTIn
zp64R)U5xUof+~(#vZUz{EaXw4SAp0Y;12Y-Y*XpA#>G#La#tiZ23<>`R@u8k;ueM6
znuSTY7>XEc+I-(VvL?Y>)adHo(cZ;1I7QP^q%hu#M{BEd8&mG_!EWR7ZV_&E<NEPM
zcuS4Ye{%Gqtc-n!er+G|*<cWkM>GO;d(hGGJzX|tqyYEg2-m0zLT}a{COi$9!?9yK
zGN7&yP$a|0gL`dPUt=4d^}?zrLN?HfKP0_gdRvb}1D73Hx!tXq>7{DWPV;^X{-)cm
zFa^H5oBDL3uLk<C+v0>aFDWgFF@HL6Bt+_^g~*o*t`Hgy3M?nHhWvTp^|AQDc9_H<
zg>IaSMzd7c(Sey;1SespO=8YUUArZaCc~}}tZZX80w%)fNpMExki-qB+;8xVX@dr;
z#L52S6*aM-_$P9x<jdu9ktlJz@92>FuIui;dN#qZ_MYy^C^hrY;YAMg;K`!ZpKKFc
z9feHsool)`tFSS}Su|cL0%F;h!lpR+ym|P>kE-O`3QnHbJ%gJ$dQ_HPTT~>6WNX41
zoDEUpX-g&Hh&GP3ko<AA>F4##?q*MX1K`@=W6(Gxm1=2Tb{hn8{sJyhQBoq}S>bZT
zisRz-xDBYoYxt6--g2M1yh{#<qP09xNr@s6w?MS->QWFCISux}4==r|7+fYdS$%DZ
zXVQu{yPO<)Hn=TK`E@;l!09aY{!TMbT)H-l!(l{0j=SEj@JwW0a_h-2F0MZNpyucb
zPPb+4&j?a!6Z<r#zSSW!Qu(5~6_6s0G^U8i@%ox>nPTB>$t`(XSf-}`&+#rI#`GB>
zl=$3HORwccTnA2%>$Nmz)u7j%_ywoGri1UXVNRxSf(<@vDLKKxFo;5pTI$R~a|-sQ
zd5Rfwj+$k1t0{J`qOL^q>vZUHc7a^`cKKVa{66z?wMuQAfdZBaVVv@-wamPmes$d!
z>gv^xx<0jXO<J6=m}BiiJow`eU@2UA*K~Z_jqm?*Cp?B28V2;3;6C}+*8byL=EIJc
z@2%))H|zSX{#wNl1dKR;V_`{wA-N5-aN?q$&CIR<EVd6v!|e;ZYX_h;K*-tj_Xr#R
zVD!mpcMXWrZqS|`IB=hKzaZzy6X`0CowC9wPYMg&9n}1avJ{}*L0iZ!p`>z;7HIQS
z4RBIFD?7{o^IQ=sNQ-k!ao*<ZRhqeGmf|{bY%Roxqzv&YHX(&*=PS#s1OR(zw~6*G
zAZll^YspPb$=6UL<F@2FynT_exO*?%>+V*|-^I2=UF?{d>bE9avsWbAs{sRE-y`7r
zxVAKA9amvo4T}ZAHSF-{y1GqUHlDp4DO9I3mz5h8n|}P-9nKD|$r9AS3gbF1AX=2B
zyaK3TbKYqv%~JHKQH8v+%zQ8UVEGDZY|mb>Oe3JD_Z{+Pq%HB+J1s*y6JOlk`6~H)
zKt)YMZ*RkbU!<JI!}T{8zEt+(a&daxMztju*ROn;npHenq}*@86I)b4J&uF~&?iJt
zN?o)&ELAxfueHiio3Ybyik@o*@icyb9qQo*!QuvA1&u?hUYT)4qQ$O|oMH`uQ%7^!
z_}}e+S%sZ4PL@FquF`ewt{)}v@KZ#Df*{vuY6%Mec{@2I-?T|VsMToX1VvAe%n^j)
zvdeu6s1|35v#f;_moF<I`PGAy?=_uDS;`<l<OfIk_>GPHzJltmW-=6zqO=5;S)jz{
zFSx?ryqSMxgx|Nhv3z#kFBTuTBHsViaOHs5e&vXZ@l@mVI37<+^KvTE51!pB4Tggq
zz!NlRY2ZLno0&6bA|KHPYO<dkI`ky_l{+0el>MY;;LZG&_lzuLy{@i$&B(}_*~Zk2
z>bkQ7u&Ww%CFh{aqkT{HCbPbRX&EvPRp=}WKmyHc>S_-qbwAr0<20vEoJ(!?-ucjE
zKQ+nSlRL^VnOX0h+WcjGb6WI(8;7bsMaHXDb6ynPoOXMlf9nLKre;w*#E_whR#5!!
z!^%_+X3eJVKc$fMZP;+xP$~e(CIP1R&{2m+iTQhDoC8Yl@kLM=Wily_cu>7C1wjVU
z-^~I0P06ZSNVaN~A`#cSBH2L&tk6R%dU1(u1XdAx;g+5S^Hn9-L$v@p7C<o$=Hu{J
zxrz+#TM>CF&PqV{Z?R$}4EJi36+u2JP7l(@fYfP!=e#76LGy^f>~vs0%s*x@X8`|5
zGd6JOHsQ=feES4Vo8%1P_7F5qjiIm#oRT0kO1(<jgC4I6wQ2{Xo|wjm0krd64efBC
zGt(LP9FC(njlia=(c_lTukVx-yR9~Gt`YfGKRT==f^$Uqz)t!SwGPI)kuvX+Zjvmv
zgh<^_T!LG;_|>?Z_Dk6<DV?iVez|GsZJ9q9|E_~n&^oZp@ZP#r)@50Y)8mRQBV<Zt
zDX+2G&swV0HIzU2B)jGgp<HCCR~bCFxw$OKhJS{dJFnQcxWhHg&GJ*Y)wr*`8kbb7
zRF?6Y&IrteW+;JBSq`vvJy8vQL|A_+2fW`8-8lH@zNvF93Bm{k%c!o-fCV)*0t~GU
zSfWy;Y#>oX&j=Xd8Klk(;gk3S(ZFnc^8Gc=d;8O-R9tlGyp=2I@1teAZpGWUi;}`n
zbJOS_Z2L16nVtDnPpMn{+wR9&yU9~C<-ncppPee`>@1k7hTl5Fn_3_KzQ)u{iJPp3
z)df?Xo%9ta%(dp@DhKuQj4D8=_!*ra#Ib&OXKrsYvAG%H7Kq|43WbayvsbeeimSa=
z8~{7ya9ZUAIgLLPeuNmSB&#-`Je0Lja)M$}I41KHb7dQq$wgwX+EElNxBgyyLbA2*
z=c1VJR%EPJEw(7!UE?4w@94{pI3E%(acEYd8*Wmr^R7|IM2RZ-RVXSkXy-8$!(iB*
zQA`qh2Ze!EY6}Zs7vRz&nr|L60NlIgnO3L*Yz2k2Ivfen?drnVzzu3)1V&-t5S~S?
zw#=Sdh>K@2vA25su*@>npw&7A%|Uh9T1jR$mV*H@)pU0&2#Se`7iJlOr$mp79`DKM
z5vr*XLrg7w6lc4&S{So1KGKBqcuJ!E|HVFB?vTOjQHi)g+FwJqX@Y3q(qa#6T@3{q
zhc@2T-W}XD9x4u+LCdce$*}x!Sc#+rH-sCz6j}0EE`Tk*irUq<m0`(;!&c&G7p#_P
zOJ|kT&v8z(QpAQ%C~^@e!Ck!ICE1vSkA<!Djfg-q)Xjj-!hve17Fw+LN`@{UJN)Br
zZQc5>)y^za`}^1gFnF)C!yf_l_}I<6qfbT$Gc&Eyr?!QwJR~RE4!gKVmqjbI+I^*^
z&hz^7r-dgm@Mbfc#{JTH&^6sJCZt-NTpChB^fzQ}?etydyf~+)!d%V$0faN(f`rJb
zm_YaJZ@>Fg>Ay2&bzTx3w^u-lsulc{mX4-nH*A(32O&b^EWmSu<mNHl&EF)N<Qwv@
z+ghjNCfO8{=RX6l;$%bV;UJwTS<t3aZ9alZA|`Nj-rR_)P~(S$140`CMywS0w4K@n
zvEbSGG>k{#HJk}_ULC}SB(L7`YAs>opp9o5UcnB^kVB*rmW6{s0&~_>J!_#<Q!IQA
zfO6pF51Khiw-3ES&zJ|$tcLa{0mAHdM*u;#&JjS6&2$71z|3e-)lO=LCK!MP<y1Y+
z19)^hGF`6{P@#NOEe8oq!=8hZ$>+cEWib@v-Ms`?!&=3fDot`oH9v&$f<52>{n2l*
z1FRzJ#yQbTHO}}wt0!y8Eh-0<gy=!05)T$dd<p&_-XL+(loOF(KU||XB_8&Ud`&j6
zW~wWblPi)_Dt+fy0AJi)GpeZiwq|YIuGrGcv(nscAa@~_m+trFF56NgiRrAWJI3uF
z`lhjQpmFmzF^U1!<RrqC-I>*|Um3vjX-nWH>`JN5tWB<ptoGg-$7O92<yOQsP=C)b
zJ`}#bAW@wa=e0GehF6uTNUcd|*Ba&dCiyhdjY(|NMK^uobI9q$ZChi=zU%>_gnW%;
zUJ0V?_a#+!=>ahhrbGvmvObe8=v1uI8#gNHJ#>RwxL>E^pT05Br8+$@a9aDC1~$@*
zicSQCbQcr=DCHM*?G7Hsovk|{$3oIwvymi#YoXeVfWj{Gd#XmnDgzQPRUKNAAI44y
z{1WG&rhIR4ipmvBmq$BZ*5tmPIZmhhWgq|TcuR{6lA)+vhj(cH`0;+B^72{&a7ff*
zkrIo|<cYW*47-TiTWhvB;>pd-Yxm+VVptC@QNCDk0=Re%Sz%ta7y{5Dn9(EapBS0r
zLbDKeZepar5%cAcb<^;m>1{QhMzRmRem=+0I3ERot-)gb`i|sII^A#^Gz+x>TW5A&
z3PQcpM$lDy`zb%1yf!e8&_>D02RN950KzW>GN6n@2so&Wu09x@PB=&IkIf|zZ1W}P
zAKf*&Mo5@@G=w&290aG1@3=IMCB^|G4L7*xn;r3v&HBrD4D)Zg+)f~Ls$7*P-^i#B
z4X7ac=0&58j^@2EBZCs}YPe3rqgL<Jxn$r!S8QWfkb&3miwnf<3dO#?*0r^D`z@0O
zyL}HbgfghMrA1DVzkMTz<h8XjNM2zx@b$YHrE<H$adW4nu!w{$k5e-y$OIJc^n_-#
z?T4cd%<Il(cWf@2Jy-ZR<%BHt;L>AA1L3Y}o?}$%u~)7Rk=LLFbAdSy@-Uw6lv?0K
z&P@@M`o2Rll3GoYjotf@WNNjHbe|R?IKVn*?Rzf9v9QoFMq)ODF~>L}26@z`KA82t
z43e!^z&WGqAk$Ww8j6bc3$I|;5^BHwt`?e)zf|&+l#!8uJV_Cwy-n1yS0^Q{W*a8B
zTzTYL>tt&I&9vzGQUrO?YIm6C1r>eyh|qw~-&;7s7u1achP$K3VnXd8sV8J7ZTxTh
z5+^*J5%_#X)XL2@>h(Gmv$@)fZ@ikR$v(2Rax89xscFEi!3_;ORI0dBxw)S{r50qf
zg&_a*>2Xe{s@)7OX9O!C?^6fD8tc3bQTq9}fxhbx2@QeaO9Ej+2m!u~+u%Q6?Tgz{
zjYS}bleKcVhW~1$?t*AO^p!=Xkkgwx6OTik*R3~yg^L`wUU9Dq#$Z*iW%?s6pO_f8
zJ8w#u#Eaw7=8n{zJ}C>w{enA6XYHfUf7h)!Qaev)?V=yW{b@-z`hAz;I7^|DoFChP
z1aYQnkGauh*ps6x*_S77@z1wwGmF8ky9fMbM$dr*`vsot4uvqWn)0vTRwJqH#&D%g
zL3(0dP>%Oj&vm5Re%>*4x|h<Em3JO)$O&GXE=ft3p^9G|#?0DwWLK`p_K)+<TTv{{
z-sme#4+Oqqf)?$*$pWS2gvP{&alHNwIjdG2eeVgB&W~2ncQkQT<TEB}+r+U*Sz^2(
z{JDq=6~A;9bd6M;^@ummf%1~8*<luPLU&L(KPlUFmFbIAFWF(Em5xC%IhGNzYpP8O
zT+`%G-QRPYJlIrWo{iAsK!Q9!P2vkE5P#|jye^?ECnY~D$0dPb9DZfa1?v)yz@3g&
z;g&G9%`bXU)%GaSxc!s&q+yw?s&G0kHmhpF|71o$Tvo0$rpbSM(^6^d{uv91%{b|=
z$*Kl!b^WeJ@0d+rhNnHIz4cl+;iLmd<L-)VhjV!~YbEu}d>1J2X*mK5BH1?Nx_#7(
zepgF`+n)rHXj!RiipusEq!X81;QQBXlTvLDj=Qub(ha&D=BDx3@-V*d!D9PeXUY?l
zwZ0<4=iY!sUj4G>zTS+eYX7knN-8Oynl=NdwHS*nSz_5}*5LQ@=?Yr?uj$`C1m2OR
zK`f5SD2|;=BhU#Ama<P~$VvhmI_^8ZNrt}1AvOV7X(sz*+2GbCZLT;rBdYe9QGvD6
z)XZ03krf;EL7R4cKP%`*;hM_&31edpDiHr|`}C4$VA4K?4)t-d*ee|SqdnPMHN?%7
zx3<>TKe9QaSHQ_DUj1*cUPa*JICFt1<&S3P3zsrs^yUE;tx=x^cmW!Jq!+hohv_B>
zPDMT<UQS`;VV^r@irLILT~0+N33M1<u)sr18hR(<Wra9eQt=0KCN|yzvNvA<AN<3k
zV|hxRkue$##Qs23TChJ;07NqT3L1xe)KK-*%TLpc>0D&08dC4x@cTD<NY(g*?y)&(
z$O8b2Q6sg#wt{+cv-4vv@-+5_NBvTr6Ex1qad@WizC1F1SdwV9_ihN`8RHq?sk5jC
z#WILtbwaI9L(u>$o1$x%So1Ir(G3_AVQMvQ13un~sP(cEWi$2%5q93E7t{3VJf%K?
zuwSyDke~<K40T94pahUuQl0-LemUU;AvE^<Z_y9Yyr$?J0su3Gy5f{LKemD(&L1%W
zWEvyy)Y1GLmYP8(i-d%GK_O{23yX~H+%H&Rou8u`;RWM|q&*T>7KuB2?*#DV8YzJw
z&}SCDexnUPD!%4|y~7}VzvJ4ch)WT4%sw@ItwoNt(C*RP)h?&~^g##vnhR0!HvIYx
z0td2yz9=>t3JNySl*TszmfH6`Ir;ft@RdWs3}!J88UE|gj_GMQ6$ZYphUL2~4OY7}
zB*33_bjkRf_@l;Y!7MIdb~bVe;-m78Pz|pdy=O*3kjak63UnLt!{^!!Ljg0rJD3a~
z1Q;y5Z^MF<=Hr}rd<hCKOY==|sWDSuzL8iiX7^T&s)i%HRX)g)$n}ULLiX`pwGBZP
z9gmSoR&T(}(1y>oz>yRczx+p3RxxgJE2GX&Si)14B@2t21j4hnnP#U?T3g#+{W+Zb
z5s^@>->~-}4|_*!5pIzMCEp|3+i1XKcfUxW`8|ezAh>y{WiRcjSG*asw6;Ef(k#>V
ztguN?EGkV_mGFdq!n#W)<7E}1#EZN8O$O|}qdoE|7K?F4zo1jL-v}E8v?9qz(d$&2
zMwyK&xlC9rXo_2xw7Qe0caC?o?Pc*-QAOE!+UvRuKjG+;dk|jQhDDBe?`XT7Y5lte
zqSu0t5`;>Wv%|nhj|ZiE^IqA_lZu7OWh!2Y(627zb=r7Ends}wVk7Q5o09a@ojhH7
zU0m&h*8+j4e|OqWyJ&B`V`y=>MVO;K9=hk^6EsmVAGkLT{oUtR{JqSRY{Qi{kKw1k
z6s;0SMPJOLp!som|A`*q3t0wIj-=bG8a#MC)MHcMSQU98Juv$?$CvYX)(n`P^!`5|
zv3q@@|G@6wMqh;d;m4qvdibx2Yjml}vG9mDv&!0ne02M#D`Bo}xIB0VWh8>>WtNZQ
z$&ISlJX;*ORQIO;k62qA{^6P%3!Z=Y1EbmY02{w^yB$`;%!{kur&XTGDiO2cjA)lr
zsY^XZWy^DSAaz;kZ_VG?uWnJR7qdN18$~)>(kOoybY0~QYu9||K#|$Mby{3GduV~N
zk9H7$7=RSo+?CUYF502`b76ytBy}sFak&|HIwRvB=0D|S`c#QCJ<t@a2hh9FA+>Pq
zP)uOWI)#(n&{6|C4A^G~%B~BY21aOMoz9RuuM`Ip%oBz+NoAlb7?#`E^}7xXo!4S?
zFg8I~G%!@nXi8&aJSGFcZAxQf;0m}942=i#p-&teLvE{AKm7Sl2f}Io?!IqbC|J;h
z`=5LFOnU5?^w~SV@YwNZx$k_(kLNxZ<T-w9G;`)wdHJoGV2amO-<vG?pZ@XJ#Uo$J
zb+q{_L}lvg?U~@|P1*dSegkN;ajNUGhmyA=S^CQ6@p}9uJKGF3&96BmwaXxSvK>DE
z3cf08^-rIT_>A$}B%IJBPcN^)4;90BQtiEi!gT#+EqyAUZ|}*b_}R>SGloq&6?opL
zuT_+lwQMgg6!Cso$BwUA;k-1NcrzyE>(_X$B0HocjY~=Pk~Q08+N}(|%HjO_i+*=o
z%G6C6A30Ch<0UlG;Zdj@ed!rfUY_i9mYwK8(aYuzcUzlTJ1yPz|Bb-9b33A9zRh<?
zEh+^J@0OOsX>Gl>Ny-Q<wjX~nWiOR}_^4D)POdKUaI)X<DM%#y>#JAq-+qtI@B@&w
z$;PJbyiW=!py@g2hAi0)U1v=;avka`gd@8LC4=BEbNqL&K^UAQ5%r95#x%<j2Twi<
zWI28Jof9kY(Ikv>^qRB%KLaqMnG|6xKAm}sx!Q<xJn;TKhAi-lV_zy<;)6u(yxe`r
zG8s+nu+7X=I2SJx?KI|R<|o>wo}J=2C;NROi$mfADui4)y(3wVA3k~{j^_5%H)C6K
zlYAm1eY**HZOj($)xfKIQFtIVw<YDEZ~5huBx;6h(9UoYDe-u{#QQBex`xo0d_SF-
zZ{zr8r-x@oa=@P7G8Gz%Q<2A7_lyD&aeZ-!inR%aZ-5;iEO&XuPoZbZ6OcnjG1hFD
z=btAA?MyXPGxhQ_`_b@us-{heIodKJbCj6!H57FlM3sv+z|<{D?1@zfhGGSCy3ZI2
zt4}F|%ocaJQVlIK<}Wp7+&rp6QOq<JYmAuckgc6Zxd{^=DJ9>$4&yvz9>(Crs>Gh{
zya6-FG7Dgi92#K)64=9Csj5?Zqe~_9TwSI!2quAwa1w-*uC5!}xY`?tltb0Hq740<
zsq2QelPveZ4chr$=~U3!+c&>xyfvA1`)owOqj=i4wjY=A1577Gwg&Ko7;?il9r|_*
z8P&IDV_g2D{in5OLFxsO!kx3AhO$5aKeoM|!q|VokqMlYM@HtsRuMtBY%I35#5$+G
zpp|JOeoj^U=95HLemB04Yqv{a8X<^K9G2`&ShM_6&Bi1n?o?@MXsDj9Z*A3>#XK%J
zRc*&SlFl>l)9DyRQ{*%Z+^e1XpH?0@vhpXrnPPU*d%vOhKkimm-u<I9o!2{*RVUW0
zkpjTAF;dx9>3c%Q^v3RKp9kx@A2dS?QfS=iigGr7m><)YkV=%LA5h@Uj@9=~ABPMJ
z1UE;F&;Ttg5Kc^Qy!1SuvbNEqdgu3*l`=>s5_}dUv$B%BJbMiWrrMm7OXOdi=GOmh
zZBvXXK7VqO&zojI2Om9};zCB5i|<210I{iwiGznGCx=FT89=Ef)5!lB1cZ6lbz<Vs
z!O6)(KPRgm>gDn07*he}G&w7m!;|E(L-?+<?McI~@TA!vj4RjYnCoT*FH)-pRq74Q
z67E9_umMJOIut_@Dx-Z2hEzHqy0(3L!ra}x0phZ^)OD)P*BAJetYupvu9iOfKMRY*
z59R&ZxVR$6O$s<?dV};ZTu5t!)CO9!I>cz@0<9Z<nFBx*sw*AzBdboG>I~LqYQE<f
zdA084i)nAbA%sHr3I6f)x0A6_C#f|)+7km{+VWc=8p6a>7>HnPA436}oeN2Y(VfG6
zxNZuMK3Crm^Z_AFeHc~CVRrSl0W^?+Gbteu1g8NGYa3(8f*P{(ZT>%!jtSl6WbYVv
zmE(37t0C8vJ6O-5+o*lL9XRcFbd~GSBGbGh3~R!67g&l)7n!kJlWd)~TUy<jO~Zhv
z@xvBaLkBZ#>Xus#!&G6sR%(l(h1$xyrR5j_jM1zj#giA&@(Xl26@n<9>folx!92bQ
z24h<Dc4e3SQJcr^RE3|QaY*5jX?vj3>570+<)4!$!IQ(5yOU|4_E6aN@4v0+{Kx~Z
z;q7fp%0cHziuI%!kB~w}g9@V+1wDz0wFlzX2UOvOy|&;e;t!lAR8tV2KQHgtfk8Uf
zw;rs!(4JPODERk4ckd5I2Vq|0rd@@Mwd8MID%0^fITjYIQom^q;qhP8@|eJx{?5xX
zc1@Fj*kDknlk{c-rnCloQ3hGh7OU+@e<M~mcEvZ$(y*X$K0x5}s~CQD$(YxML3psk
zFM|TBc-aWBLjK@0qr{-u^ogBxgUZ2q9fo2sjGh*5M_>fO3>fkRMcM>J?AeVP<Ux|u
zIt<28*boJGNgvZU&+HIxSJU@0MMOMk7(|dJT9}B#3C^H5%`@R9`pq2cDNIDmG&|fk
z=;qP1KP0X0%WFW{10wdnB1|TJr}_3V9m=|9t1&c+%CUUz+SxZxbB`X)efq{sF+1tq
zKf-%4B#;+_1Fv@}nSe1EebC@A=zceZ+9L=HMG!TLs$d<`aVBpK$8UGu%?r!ZUz3ID
zw2G?KI8ia%8jnZwySwx2`P0dY`Re&F893$F0%*A8SHESTm@B%nT<YZ$)QN^ti`2>&
zlfzX%cdp=N+4S#E*%^=BQ+N`A7C}|k%$|QUn0yI6S3$MS-NjO!4hm55uyju)Q6e!}
z*OVO@A#-mfC9Pha6ng((Xl^V7{d+&u+yx)_B1{~t7d5e8L^i4J>;x<7@5;+l7-Gge
zf#9diXJ$&v^rbN5V(ee%q0xBMEgS6%qZm7hNUP%G;^J44I!BmI@M*+FWz0!+s;+iQ
zU4CuI+27bvNK8v>?7PZnVxB=heJ&_ymE0nN^W#-rqB%+JXkYGDuRw>JM_LdtLkiq*
z6%%3&^BX$jnM@2bjiGc-DymKly)wVkA-pq;jSWL#7_*moZZ4I|-N}o8SK?sIv)p|c
zu~9-B%tMc=!)YMFp*SiC0>kfnH8+X5>;+FFVN{~a9YVdIg1uGkZ~kegFy{^PU(4{(
z`CbY`XmVA3esai686Yw8djCEyF7`bfB^F1)nwv+AqYLZ&Zy=eFhYT2uMd@{sP_qS4
zbJ&>PxajjZt?&c<1^!T|pLHfX=E^FJ>-l_XCZzvRV%x}@u(FtF(mS+Umw<d2c`9Rr
zR+?yr(!A0r|CD~t7GFV?aaA(6z5nz_Nm0i$V6I-ucK$u?K&%hkODCkY(1+;DS|bQF
zb4mg|54xl}b6Ewc=m`{a+NEN`d1?%=>$e+IA74e>gCdTqi;6&=euAIpxd=Y3I5xWR
zBhGoT+T`V1@91OlQ}2YO*~P4ukd*TBBdt?Plt)_ou6Y@Db`ss+Q~A-48s>?eaJYA2
zRGOa8^~Em}EFTmKIVVbMb|ob)hJJ7ITg>yHAn2i|{2ZJU!cwt9YNDT0=*WO7Bq#Xj
zg@FjEaKoolrF8%c;49|`IT&25?O$dq<?{UbIQ0;9Tr9TA6pzz%=H>8kp3#la9&6aH
z6G|{>^C(>yP7#Dr$aeFyS0Ai_$ILhL43#*mgEl(c*4?Ae;tRL&S7Vc}Szl>B`mBuI
zB9Y%xp%CZwlH!3V(`6W4-ZuETssvI&B~_O;CbULfl)X1V%(H7VSPf`_Ka9ak@8A=z
z1l|B1QKT}NLI`WVTRd;2En5u{0CRqy9PTi$ja^inu){LJ&E&6W%JJPw#&PaTxpt?k
zpC~gjN*22Q8tpGHR|tg~ye#9a8N<%odhZJnk7Oh=(PKfhYfzLAxdE36r<6<oD}e5;
zMPsE4+rk0d2jE*#p84SO^!fW~`j-|(WExf+!}WMlI2oGcLeMqZ%ofC97d<+nflE=C
zww(j#(;Qr&ut3IEyIwm>a?A;rO&ELp_Y?8Pdw(PT^Fxn!eG_|LEbSYoBrsBA|6Fgr
zt5LntyusI{Q2fdy=>ditS;}^B;I2MD4=(>7fWt0Jp~y=?VvfvzHvQhj6dyIef46J$
zl4Xu7U9v_NJV?uBBC0!kcTS0UcrV7+<p(Ba=Bk7*SXvlcpQJatnzmyl-^GA6y=0YH
zU!Qp*(5v5`qcU7GH`fZ53mR)&#Os~1d`1FKAc~R?v^F@3sPXWHk(`{v@BF<NgpL1h
zOYj$ZQX-EI8H4?Ypq8IMFE`LLGMYNju;D(Aux0jFNCc@>@~is?Fi+jrr@l3XwD|uG
zr26jUWiv>Ju48Y<K5Q0UFt#$Wh-3Y^huuiZIhuP~4SRD>^#qn7r9mwIH-<mOw=)2D
z<iCzV917q@YTEy}IJiO<?It)?BnA;jg`vU#wb|e4BpbC^HJE}Jh7S%#;t@=RHEzf3
zve@!5mXtmM3~}?iGNYp|t2UDZWtZs+?hWj`+Vz*5E0~r*FRY^QnYC-}Vte5CD38TA
z2heFf8>Pv6Y|V|V-GZ&+&gQ?S?-`&ts{@5GXPqbmyZjUACC&oVXfNwUX0}ba(v978
zp8z!v9~8Zx8qB<QXT5I&+92wF0pO{dS4(N<h_+P+tKZn8-IlF)tWr~gMeIiH-&7y0
zvL&hwU_I>@7>oFPDm^iR@+yw`79YF)w^OHB_N;&&x7c3l^3!)IY#)}x)@D(iNaOm9
zC=^*!{`7<aJO;!0Q_GA?kGJMA-q_;pS6#JcnV+|?H`ki8UM3IyaP&Y_Cob&3B{Pk)
zm4w3$nw_t--`?`O5&1RGdSO&%Hqq;;K{ebNOqKIk%%SGD!F=%uOt^n7pXHX$w+HIP
z8dL)o*Jpb{DXQ+Ru13)nl`bL_X#5zH`D&t|K|2sG@Zx^L{-A|#-X*Z;4E;wV8qs|w
zT>={3*S=%iU=KsPXh=DDZcc``Ss>057i{pdW8M@4q+Ba@Tt%OytH!4>rbIbQw^-pR
zGGYNPzw@n=PV@)b7yVbFr;glF*Qq3>F9oBN5PUXt!?2mdGcpv^o1?Thp`jP10G2Yi
z(c93td3F3SW!Le5DUwdub!aDKoVLU6g!O?Ret21l$qOC;kdd@L#M&baVu&JZGt&<6
z!VCkvgRaav6QDW2x}tUy4~Y5(B+#Ej-8vM?DM-1?J_*&PntI3E96M!`WL#<&Z5n2u
z<QPxSVI}f8nvsYEV@sQO)6fswrNtp@sU=8(-b8Mb5P$r8S==I%7kh4B)_n@!DLI2Z
z4PP(&9*0`aDCzk=7Hs;qt@l};2A|ee_lp|_XHg@k->o`P!~vBT$YOT~gU9#PB)%JZ
zcd_u<u8SkTyW@XV6qrAJ#qjS(2-MC6glNGYe|r3T`ER-;ck$QHoSn3~1RN=RR%nUZ
zKf8<#6k1k~H@+pG{73t5FQeCnhxF-1&my@?)3Sx2>=m^LYzC!pH#W`yA1!(fA;D~b
zG#73@l)NNd;n#XrKXZEfab;@kQRnOFU2Th-1m<4mJzlj9<frYer6HiQx@?8?NJ2Do
zObcl_ecl~1qF&eiOVBk0#ZN-|Dd_D_4Xx*PUVf?)>b3pv-GF$elX7ib9!uILM_$ke
zHIGB*&=5=;ynQA{y7H93%i^d)T}y@(p>8vVhJ4L)M{0Q*@D^+SPp`EW+G6E%+`Z;u
zS3goV@Dic7vc5`?!pCN4<JvL_48+Q8LQ@>4Ts@*{)zwy)9?B||AM{zKlN4T}qQRL2
zgv+{K8bv7w)#xge16;kI1fU87!W4pX)N&|cq8&i^1r`W|Hg4366r(?-ecEJ9u&Eaw
zrhyikXQB>C9d>cpPGiu=VU3Z-u4|0V_iap!_J3o+K_R5EXk@sfu~zHwwYkpncVh!R
zqNe7Cmf_|Wmeq4#(mIO&(wCK@b4(x0?W1Qtk(`$?+$uCJCGZm_%k?l32vuShgDFMa
ztc`{$8DhB9)&?~(m&EUc=LzI1=qo#zjy#2{hLT_*aj<618qQ7mD#k2ZFGou&69;=2
z1j7=Su8k}{L*h&mfs7jg^PN&9C1Z@U!p6gXk&-7xM~{X<iLOVw!aav*!V=`4l#Z}C
z96Cuv>`nqH#aGO`;Xy_zbz^rYacIq0AH%4!Oh93TzJ820%ur)8OyeS@K?sF1V(iFO
z37Nnqj1z#1{|v7=_CX`lQA|$<1gtuNMHGNJYp1D_k;WQk-b+T6VmUK(x=bWviOZ~T
z|4e%SpuaWLWD?qN2%`S*`P;BQBw(B__wTD6epvGdJ+>DBq2oV<pcqb&6wR<4FA$2v
z5~)nCP^#1#txj(+n#>lf&F*lz+#avb4<LeKI6+c0!*aYJO0uGAzkT?h&<)eF9oO@N
zFp85j%ZswAo3`tRahjKP+mG|QpZEJg2u4s0CrFBBSdJG&Nmf)%H%!ZRT+a`}C{EHW
zFUqQJ+O8kQX<pWCKhEoZ-tYH^5fsA-lA;-w;{{QY6;;y>)3P1c^Mf#olQheVvZ|Z5
z>xXfgmv!5Z^SYn+_x}K5B%G^sRwiez&z9|f!E!#oJlT2k<v)*-8Izce`)2-oo#(W-
zoudGWwGo@1CGNHF$IO1;TKoQC#d=r1zr6R{_1!X`9kp|Iknh0E@*R+w*=1K9s{o0$
zk>COV0000$L_|bHBqAarB4TD{W@grX1CUr72@caw0faEd7-K|4L_|cawbojjHdpd6
zI6~Iv5J?-Q4*&oF000000FV;^004t70Z6Qk1Xl<E0000001Beth!e-qIiLWEb%ZLV
zlu{~6UVVTb6vR4Bl(ZyCk|ase4n~5DnVFfHdC{Mq``+`wUsuh>{X9oJ{sRC2(cs?-
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/high.png b/ui/new-ui-samples/images/high.png
new file mode 100644
index 0000000000000000000000000000000000000000..5f5fcea79a4be9eb82d05df7ee8d981df6967bf0
GIT binary patch
literal 812
zcmV+{1JnG8P)<h;3K|Lk000e1NJLTq000>P000>X1^@s6#OZ}&00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!zDYzuRCwB~
z)@x|ZaU93-|2ghQ=90@8#kSOpMPW#pMGceN+(T|PJP@LI;F2P87si9RKd@ykQ`YhT
zVJ;8IWw}JkEpy4`9O`iJ{_68DozB^gv-7Lhes%u8|L^;|{lC9?%1)O%QA%U9#sG{_
z-2qMT6K`=FmAHtP2uA9tVUz$}F#&UthHv<U*XpPNT3|TF=~*!j<6$g8`eB!9>-;=U
zXw+}u*DP&TS;)Z@EJr?;;PSt-3J=l)$IuNQunpTIEW>v^m$RtAZgkgxrfLa;;XzWd
zLrYbPeYj~2GYePcYXE6_ZnLSz6RRH-ZK%|;&Bh|^$9!C{jy>A=me_(>xPkF_N9Tj|
z;!G`3q;eNK2~?~$MVOAK7-_Ths$m|+B7l_&(4Tre=G79w(Y|b@eW8|TBkm&|)2x97
zX@&(z(kQBUAypfh>%>-CVGZx)X$d#uhfZf33t}VA)JE?`2$N9Y{9j4NG6LD=pTc$h
zHqfi%XR|qj_cTh^=EYNnp|6(hxI17A(o?7Go*phlXD9xWq583cWLS{)cFL3%LONOX
zDZN!&+WCcc7Nog;^s8=E&mhUF1FC(tOkXUTa*@M%PjM1cl5~3g_NNBFk)p(xsM1z-
zjRm=))SazUmZ*}Yy}squnGPs}c1%zJ8|)07+7ho4U4<UZNzjswKrek3)n29TqxcBR
zKSS#oz&c;8Q+g1e-2`cu%mK~DF03wb&d9R)CVh~Xv=t#YNKp63N!=@lFshF18(y-N
z`*M|q|7LSH3%kXBSZkjO2IC0USr)CMbDQyG4X{9;#8TXecKuqKo~UcrHgB=&5?sX#
zd__}qQU)Kb+J|eFiM8RO+WwJvrc;)q8`0_&`e4J0M}0iP9+bOF6wALvcGAjl4t=x?
qLzJC;x{zMk1*bMudM9G}BftP0OtN`NjudzR0000<MNUMnLSTXlM1j8m
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/icon-centos.png b/ui/new-ui-samples/images/icon-centos.png
new file mode 100644
index 0000000000000000000000000000000000000000..5afb7b4b63462412d825f63542beb1f7e26b3d7f
GIT binary patch
literal 4734
zcmV-^5`pcBP)<h;3K|Lk000e1NJLTq002J#002A)1^@s6(aU0S00006VoOIv0RI60
z0RN!9r;`8x010qNS#tmY3h)2`3h)6!tTdPa000McNliru)C(I02nLeE_`m=F03CEi
zSad^gZEa<4bO1wgWnpw>WFU8GbZ8({Xk{QrNlj4iWF>9@01@IzL_t(|+U1*hcvRKh
z$3N%ZnaMIFAqh#y3V{%o5Fj9gC1DY;#iC$^YO7C+h_9~|#0>=mSt5p|A_ceVTdio-
zqR<x*go4NpAwWpj5yBGoB?%-mlg!M$zxR&>N`OGZ=G*o>&-rKWnS0Lnw=d_yT^=H$
ziAcJLOcs&){HF{N(M6=2h?y;hr&L5{h)9@-{6~OK6Omlw`~fN3`>B}j3l0(alZe#$
zcjtJTm}b8BY>r%5e7_WZnIO(B6U20%_ln5-A`)@8B|y6yz=58?d)~8K8#*_S!#KYW
z0QdemxN@iI;wkwZFcFBlo8Z+Q1`d!8GSe(M+{Ur?S&Z|0t8S|_e49UoPm5>Dl*RrT
z@B-jaO8x7CujF_)kiQzIH`jM=8ii4MsG2PmwnhW+Ydu1gPw?l!D5cb~e@U?y5esl1
zV$SfM&aUs=nt@Sr@Z!_US5{0haUc3$%JQZwabFk+GG0WY@3ak2H2`9*)Ww<-N`ThD
zRMT-R(YgKw3`fCb8!E(8f*3B8H4t>)Dg^OuIv87%$IF$)ZyqoKaMuD)8E{%DW!x_C
zO@IZ087yMnSd^3n5W6X69Sj%ZDY-;9r7Cci<xazWa322cCt;25jcJ-ygi+aoP`X8w
zrp}5frkLgpVJKaplv)iuqm(*V6Y!RrvC<4VdVWp#@sg}+sU<*UKzm|?x^b#Bhl2Af
z5izP9(9ar1v(WyaSwIAIADksVZ2NdEB9{w*;9J*UB|nxLW*R1Y=5EDtrleY4={AkV
zeOeNp6dh0-J7%e&5_6(7o4ivWqbcngk4+*2I?^PxKWCl0SaWzZ7s?B+S{LHil!UrJ
ztMXn~VJSKPvz9BltCYfdx`cb4?T&wV09kJ@!{hQ?6PnfEMo2;g;YrbV#^5Ow74GNi
z85P)>o{iqd<vGLm2cD}0e&sr?TBazi0_^1zAn&scteLck*e;FfHT_rEBLXiGrpj8S
zZpv?Iw`MIh;(~h6Id%+Z9C>U!IvI!O<Zbn!2fo|M+DVIvYS)0YQGKWr8T9|d)!8fo
zB!xdtpieA$r#_*mZ2xT!9ZavmzWLiYo_&b;Ud?HIUlL-<PX}Hpjk><^cnk-dj{bqO
z&Rukj9Z7_}EyC^f&AQD(+o!t`*R=`T|C+_FIh(Qi+pq=t{uJO9v4P#`*=Q!s!+uRs
z*?!g@8Ha{W$JkMX+go$Hf)m|lq4l87q&$_*jxRQ``Q4QmZZGYJ-Anh0{VP=97WS$Y
zcoCBZLEY&P^AbLK5N+x|P4jw>Q0zLu+9R){P^34=AlNVAmL)(;q0N(Nqzp;tz;`>y
znz0<i<0WNC8p)4$B)(@ex=-wfPmuo=QR5u}uZRokL3+bU6ua_Su;*7CC|pRJ$Y*F9
z^(-e#b69m~6kfwg&qgzdu&3Pgp)5WY?s>L5?VjnzuCF(<=8Z)lkorPz?iqS7*|S!#
zV&pu+lA`$8A0MGkWZj#RHcL$x#s+nxX}yOzc3~ZxkN=TU&k44kco$O)nuZR*ZIrU-
z%p6u99z)lLljt1#8d*oDa-uZ5b_epa()OvYBtM=??kDTW`DhJFQ>4Doo5nv+BKPBU
z<bApx(=hS6+;p4Rk8ZE`MYmb*2<Js9T_WnF;P9McL%}3UD*d?IC?)6Q2kbBUmX!L>
zRN8<aS$`x0l%h-AIO_T~uDJvVq&$^Q^5dx-ShADsSu60Cc}W?PPRn1nXV2WNY<_Pg
zhQ~lmA^-c`tjk<XXtPKn+cn@CnbXaK7ZD$z2T0J7;+3q(e~~h8aTRywF-qBVbQ-(Q
zenrcO-;x^r3Wct{{E+`LPS0t2H-3kxfKCYJbwOMGZFGG3K2ip!kvDq-t0pYK;%lYL
z$e+`CP-oUpTgvA5e!y^ht3-kO7UuE&t8*zmb%DwREM7#^ErG8D{wTtD5!3gyV;e3{
z_4&fK6Cbem>|7G-Jw$TE6O?*Ru<pnN+(ro<Vnz@Z(6QS8TJ1L4{#RF$9%)a`pVzYO
z<8>%as}S`*E!p<TI(B}s3Dav{BRW(Z&pyb>oFf29z$75)Mm9i1lvdpX;4#x<ym313
zXq4MgUcsL0(9>f&$vycId(O-uIbtv^!v}G}eT>zIU&Cv<=-MEIaC@t(f*?)TXg~B`
zT0WM_?zvmo^4>}SIt;s)rv2Km{qrnxK3aomnAb}^Fuf*)g{697p`$18ZVe>Bs$B!P
z4fu^|m@|J|yglaoQFHOSJT=lGujyp-@tN#C^Cig<zoSF+ixj%{vFgxhO5DdujTwoL
zrEZn~1UCw!<*z%C_m}l#y|oP8$3mA;eP}(XGaIKbBj>}_RYd)IBR98zv18}yM~@bD
z1wN}z0xF48N4w%jU*Jj8FsJVRdW(Ji<nJgy@2ahbCimn=>^%KBjf4BrE^;X4-Xc~X
z8qGQ9E|k(xKEWuTAT+;vm|l}jGgpxF=e6iQ7ShN3g1D}UY?`@(U4P5IF2}EqJQZ0R
z4={SvHykY}>LemFf%es?K!A2dvGGwc%&`S)evDd|xwyiJ+(aSKYr5Ee>J#>yokMcO
z6SNHfEv4?`Y(4P~ZqtQN!ejWgn}{CPo(o5d$eX<$5uyFCdrA03E4F{Wk=(zmuNCl1
zxqvBb+_;~NjQQG`GbLStS=XovE5P4U3EUqTVz|ATyXI{6-!N?{?$UBprG6@<2=#A4
zLdXNCTEs=?%MVfH+DEI1CkgP0rMT<>N@=EMk14j<V>F=5>gTTC<bl>S?9q%y_qE{2
zs(rZ5IcU;1xyCt?ZnF>=8^VbT&P(TAv0^tR!@tnSPw1bTm{@<FhztidDW#+myhVwK
z9eBd<7_aY{yESa%^kultmR39#s1q4TzuAMa2H6nt)=~ikO<B;D6^q@1W>cbTwqj84
z00)7dVoHCb+-r9mCa!W1hTDr6wT#vj=vJMq?1PLQGY^NO{1OpbwTj{G8NV?iBkQiy
zH1z_I1L#0AB_c12VZM^TY<JkQ5ntnVR;?FmR-KT9aFniYHd;k#iiSO#)Bg9}O{Hr~
zfuWV)I|5TnF1XS@_+TX)HtfHpe4w<njDmtf%*#?<(-gXNX~MYi{ml6Iu+6}4fqWoA
z1CF6osb7d4pE^F*j*)LMOVe}>|4=(rR8>y{-b&H40U>UWL2<EzJ5j1u3eKG?!Qm)Z
zKo}5Qxp%p$bZvdblxas+|JZ1C#zKk@o~<Yk3Dk)SqTi>3(d{<8-r5-;5wO{GELI)O
z*9y8aZ8l4xQfdlNQd!%-UyO2JXBm{08(@@!n6*c!S=pF%n6YE#UJ`qNxVTVe%=nEo
zYaY2v*R>JAKPtgTT9i_55m~4-rQ*6a`7mwN{UNJfpMNo2tcV5zd|8#9&krkhqcl}h
zg-6#lh7RjRUAv91zRIGw*r^S9s#|bCfbZ{thziGW(zk5KJNU#uguPx{-1&>~p2@CV
zMyT1aH5!23?q8)<*05nc#*cr9q?Xb7z$jp;Qp&9CCK;AW!{7ntiijh=XY*MBF~JGn
z4*8Ul<HeU)xNGMz=FiVTs{wcs2o1F};*~!5``gIOT*TkL%A#$%h75WlO)v8n#TT4k
zMO;vKtfm)F!FPC%Eyu6jIIJ<f@t)p*`|zR~6F^z~v4p1rO)mj&-XfYQQwB=2W|8}W
zfk0lRrN20gEB)5@C`Q$5T7O@UH~JHj5MFB|CjucMc7{KHA8BccOn++$3+Cq#9BgOs
z;B@K)*w}OSE7lcE;6!OQnmrod<mV9)Tsd#zE!>W8%VF5!?!UQupi(qWh#({5A!*Vi
zA{Q8b4d8MW_(}=*JBnu;bZdI1`^0_(#0J;c5Q%`Vua#F{y`NsalKAMum3;YS7IwRh
zF=HR3SFa>AO}J2g6p!J=ZIpuP#nxy5zO7zBJPur0BQY)<!tb8(SR=dEy84sQIGoJP
z0kmoryI0q>=Yb_x0KW*{qg^9JG=SwOo`~uYzo+*f24bt@TVqk5FtI;f(h`|AbuqJN
zuO}+1E)ysIlC-oYeDMAXii(_7_-T~nQ<nP{)|lS-wa-AjrMNbY#&diXejVP#*06s?
zVZR0=p-BXjrwlY(w~pNjJPxe62JnmEy;^lKGO$!>>ZQP#;C&W9E4oF$F7SHw>hRLb
zeMn17<PXypvtU6EAt81qX8e+-%_5ncxrpV<cUJMi7b6sR{v678%)}Dj0l$>dfZ*Di
zfpKmdzRAy55a32CpfqA)Ld^L1upFh-?}4pKsq487w|1Q*!CUDTMroQ>+BH3q`1pEP
zx%>)uW?|ImzNDuo^8R}(Sg;_6y1{lvjqXdURx!N$&T<wm+*ZB$Fg=tX_=d6_v#`eX
z#W#64m>yhPCt?)s!mstqSfhJfn*d^>1;k^i+Z?6HSBjCq+G;p{Idi?*4YDLJuw5w}
zDQz3@!Jh`vpke4G0*F9(cmPwT4x~eeMogWunAx+}5g8fG)TzIsQ>O%8dhsjf&(Eol
zG`UWEDqh_Czr?jQ155P1_;;F)c$_%1Ud3~K75=Hyu*E-IRRzRE54#8d&TpdyB>?;g
z<lKPc7qLl=l*uqmwep8OxSVb#O?sH5q$os$h=@Q&ymCKn+cqTg&2L${bUXFy2QhAZ
zKVoA;$b9qL+J&r2!+m%@Wjkh}2Pff|G7_cxQkFXv@2U0pCjB?IMguMpKo4z&fBT8x
zabOhf;<CozZ7f|2Y}s;%(WAd1E-sXD<NK4+wgIob_5d9_He%MS<t$v7L*2Umj2qvd
z7A>Nf{?-x}Ey}%#{*-|`{~OA3r(uo#Iliq&AY$Om9*a@96TddEVvXsI9@+-~4w+zj
zE9^t%C8s;nrB$$V=P`y3{R~~#_~erzB)5toW8wn7`Fa!a@nK|U4kS4_hF4yh!;&T2
zZ>3{_`_SKUZJvlFA{GDCX@KC|JQnw%1^9Q!q)yil!6?VEb|^;i?wg7UwA#fFioDzc
zGBOshbH_0zPhP~b<vXcgKZr?h4j?)vm<i+Ovwq!vZuvHq(s3VINLk)n=)ukKYxjDE
z3T&H-=jd{b;ypOC$6%Hg+;nra)|LK?1Q<U2a|#QcL`Mbl+L#B3jR|Jbq=l?lv5VVw
zi%d-1hrb0e@M}9B)w&`IbmdG!S^P1bC%Bc(ZmLTwBAh$tz-rZbZg_9HcW=gf@2_C_
z@?Ez*C9P0_1-K7<i6y2tJ}sU`%8M$1|CIfCkH^awf89u4ZUK)zl1jUF4R1eqG%OLF
zu*UYmIJ*UR{x>y_`0glp5!klvFk{EeBQVg9F=HR3MT_X$c6k61EMe{Nzb6B;{2Z>W
zZ(tPfy^Un8nWsafLfo&M0DJeH;OVFTLP<#(v)*}(HYssetv5}nK0y+bOBWI^yO?N=
z>4kslWK7pdoNJ!NIKTg&_t~zRcgWyrnxcJ&cns65){2V=$Bz|}k`l)oZ#>N6#d(yK
zd#com!@~pd^Rt5UG6U)pg00z;a78aqX+GEz9!1%LFi)+=+VH_@jhoVJ=oJy(Z3k~^
znmX65TQf;dPrPv%S=UHxTHm*ELU^EIdQ`db&&H-w3Z*$Q#EU{<m}Qh(HE1!Y$~$~4
zL1@YfN-qTQ*y0D&$Te1$#%e4EHNAcsT}x*g3uKlX7dovu{F*xL$g8rU+bG3rmSNKa
zuxLJ)PAg&(AABEeBZnEjmbz<!=PCi!bll$Sr#I;eHJ}~H<RaJp9$CkxsG}FwU$&XL
z%$i*MMI$CCowT^|hMzU;JB9Wtu={%1*)3Og@6?Mcn}IEXFN$3Ilhz#>uTDC)T(jdN
z2(f|bbdDQKfGy?+V3<;BCwF+<@f-aj(j54s%X6;h%0nZx<0V;F0dErWARS^x7=D(}
zWxycd)ZO^l;EsQ00_*`s`dLF)c8Yz?j1KH_nE}*k5Y&VA(Jy-aETKz)my}X>1^8VX
zBBDejQN+wDE<0#0-uI+@xH(alA9zk2?vo-S--<}nnqDXQS0zGI5&4J1ecH%7`LQ_N
zXFMXZSVSWDcOR7!kR)O*G)zyKh&e|@8vRFnR9IC7WQK?&{*-6=Kk6Dayw&uIx&QzG
M07*qoM6N<$f~4IfuK)l5
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/icon-debian.png b/ui/new-ui-samples/images/icon-debian.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff49a39696fdfa5f232b0e79de04d90af6557111
GIT binary patch
literal 4239
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
D^V29c
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/icon-fedora.png b/ui/new-ui-samples/images/icon-fedora.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b9dd06d1f766a3285cd0fb587c0be4114bfac47
GIT binary patch
literal 4449
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
S9$oyI0D9VncWN{pBmW0TFKp8Q
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/icon-gentoo.png b/ui/new-ui-samples/images/icon-gentoo.png
new file mode 100644
index 0000000000000000000000000000000000000000..50d928fbfa30560fe873cf3de438a8f0c10a8f96
GIT binary patch
literal 15307
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/icon-opensuse.png b/ui/new-ui-samples/images/icon-opensuse.png
new file mode 100644
index 0000000000000000000000000000000000000000..83fe4d5df0f59b52dd609b3bd16838f4d2570ab8
GIT binary patch
literal 3046
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/icon-ubuntu.png b/ui/new-ui-samples/images/icon-ubuntu.png
new file mode 100644
index 0000000000000000000000000000000000000000..d92c00f357b6b0e1542413f6aaf0de8ef4b8d130
GIT binary patch
literal 4818
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
T?|XFr3GiA;OR-Yk^22`sn~zF<
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/icon-vm.png b/ui/new-ui-samples/images/icon-vm.png
new file mode 100644
index 0000000000000000000000000000000000000000..50dac50c5a0ee59f4e79170434f53bb3b94390e3
GIT binary patch
literal 2976
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/logo-white.png b/ui/new-ui-samples/images/logo-white.png
new file mode 100644
index 0000000000000000000000000000000000000000..0add8428122507bd2993aa01a939b9247294a0f9
GIT binary patch
literal 7438
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
M07*qoM6N<$f{<Y(^#A|>
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/logo.ico b/ui/new-ui-samples/images/logo.ico
new file mode 100644
index 0000000000000000000000000000000000000000..446143f066a60f479b2cb8f8d04ab3c97ff60e56
GIT binary patch
literal 1214
zcma)*3rLeu6vyu=X_;nPV)$&PPF)r(wTQ|dTGOUtnOdf0mZ=cR#99xbub1{BqnD9^
z^Z>PV6h)fUny6#CN{3di2P{*h2ek@Oq0a4o*=I}2Iv?krbAR`oKi_vQA0faVCr83o
zF{!X2#Dx$Nz}$(sm^sgR<Jj30yCMGpMl1z837jm3H1$<DU4IV>Tbdw<FM-;Hi<#et
z=I}n~iB^qh8{XzCNyvT<I;$&znmT~?eFXZgAE@Om?1h(6Iq+2e1-ca!zOAO7n3*};
zXq6n?2kF<!f%cez;-Fgx4$e+xo{WR;oqhc_OW;#nF!Zm|JK}m8gi6aC+##`QA5PmJ
zfeZ(o(}%&&1P5#*1vVbnssk~XhN5bNz=T)>5^+BS=V54SJ|^z)5I7%kU;>-skiq*{
z5B^=eF<T)pK9+)bV;9UCK>t-HOi+bkR-wK1xpfXL;S<?ho1pQ5gYzxiHR~=e+XHS(
zYe7QMZb3IjWV72H-JpD~6z(tbgwn1o$D2s!YteWNJS!i9l%iW?+34Lvr*KL(6{_X|
zobEjAb{lD|4qsmYvGF;~r0Aunc#>=c)0W4s|D{#(q9~vaX{rGms=((Wn*~LeWqIu}
zkGvlzwaxjL25hey2bVweu<xK*t+@Oa_)UKTK^x4IwmKMOjm@oL`l)}_NGPy}tdb}w
zHa>H`ji2N7m}Xsj#j7-`#=Dv}`)h&)9th^&^dR%>WH_MB8KcIXVf8p&s1xD|_k)R-
zrk$Z0-|Gf}&4Au$KhU$k?3YR5by~D9M&-q$=ocNz4!IY&p7%OxuJf&+Ei-G(23hU;
zHTLhMtjFR9ExVbPQVLzBFlROcIZ|#jmX6fm_hsVa3XP<aKAeAt8dqp&oBW=V^+d>Q
zkcNnm%Ds?ggd^Rv2~9_o82cv;p6LSBD_g_s-n1uZ8#<EeLwTm~LE9J!Zdo@M&*jFU
zoM+Z%F5)(8$8y`Wz~%Pd;Nlx@aH{<lk}}CcRMRXZMD&%Uhz3Ze$jpg#uec1IlFMPW
MDQ4iZEk#_;cNAJoqyPW_
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/logo.png b/ui/new-ui-samples/images/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..5be8d514bacdcc0d080a5b2f12314aa7ee94a8b2
GIT binary patch
literal 17195
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/logo.svg b/ui/new-ui-samples/images/logo.svg
new file mode 100644
index 0000000..a3e57e1
--- /dev/null
+++ b/ui/new-ui-samples/images/logo.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="387" height="366"
+ viewBox="0 0 387 366" overflow="visible" enable-background="new 0 0 387 366" xml:space="preserve">
+<path fill="#D91F2F" d="M303.868,82.71c25.172-8.604,27.898-42.319,7.13-55.331c-1.923-1.04-16.93-10.998-43.506-11.999
+ c-39.783,1.486-71.632,13.167-92.662,62.139c-0.25,2.109-0.508,6.054,1.977,3.206c0,0,0.284-0.329,0.443-0.515
+ c15.153-23.034,69.707-29.756,88.572-8.681c0.625,0.72,1.297,1.634,2.003,2.274C276.457,82.654,293.688,86.191,303.868,82.71"/>
+<path fill="#F19125" d="M336.691,227.692c20.913,16.439,50.687,0.387,50.306-24.119c-0.174-2.18,0.018-20.188-13.601-43.033
+ c-22.892-32.571-50.019-52.939-102.551-43.944c-1.906,0.938-5.355,2.866-1.615,3.403c0,0,0.432,0.059,0.674,0.093
+ c27.571,0.183,62.889,42.3,55.469,69.596c-0.263,0.916-0.665,1.977-0.817,2.918C321.826,204.661,328.231,221.044,336.691,227.692"/>
+<path fill="#8CC643" d="M228.105,329.358c-4.421,26.23,23.926,44.686,45.259,32.619c1.831-1.197,17.731-9.65,31.27-32.543
+ c17.636-35.689,22.531-69.258-10.515-111.072c-1.737-1.225-5.082-3.33-3.762,0.211c0,0,0.152,0.406,0.24,0.637
+ c13.04,24.293-7.028,75.463-34.545,82.018c-0.932,0.207-2.055,0.361-2.955,0.68C241.207,305.282,229.893,318.749,228.105,329.358"/>
+<path fill="#27AEE4" d="M81.133,285.823c-25.04,8.973-27.272,42.725-6.314,55.43c1.939,1.01,17.088,10.746,43.677,11.357
+ c39.757-2.072,71.43-14.219,91.738-63.496c0.22-2.113,0.421-6.061-2.023-3.176c0,0-0.279,0.33-0.438,0.521
+ c-14.811,23.254-69.259,30.777-88.434,9.982c-0.637-0.711-1.321-1.615-2.038-2.246C108.544,285.476,91.262,282.192,81.133,285.823"
+ />
+<path fill="#06659E" d="M48.671,141.301c-21.969-14.995-50.596,3.023-48.569,27.447c0.321,2.165,1.34,20.143,16.463,42.022
+ c25.03,30.957,53.465,49.455,105.273,36.947c1.839-1.063,5.151-3.219,1.382-3.502c0,0-0.432-0.031-0.678-0.047
+ c-27.52,1.672-65.589-37.975-60.023-65.709c0.202-0.933,0.531-2.018,0.62-2.968C65.053,163.281,57.561,147.365,48.671,141.301"/>
+<path fill="#BA1E70" d="M164.882,38.837c6.497-25.793-20.29-46.448-42.516-36.122c-1.919,1.049-18.444,8.206-33.764,29.946
+ c-20.424,34.171-27.98,67.243,1.628,111.558c1.632,1.359,4.798,3.726,3.765,0.089c0,0-0.119-0.417-0.188-0.651
+ c-11.062-25.255,13.021-74.663,40.974-79.004c0.945-0.132,2.076-0.198,3-0.441C149.9,61.794,162.255,49.273,164.882,38.837"/>
+</svg>
diff --git a/ui/new-ui-samples/images/low.png b/ui/new-ui-samples/images/low.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f891d648d7d72c558a942ab77befb1cdd368235
GIT binary patch
literal 813
zcmV+|1JeA7P)<h;3K|Lk000e1NJLTq000>P000>X1^@s6#OZ}&00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!zez+vRCwB~
zmRU$tVHC&j+-%X%DAIN?+o)`y2U}iR9)g0RqJ;|TAtCCeg*HOyHCk<7p@<61z!rr>
zC~UBW7K%zKgCQylCmUL{z?|xL;(uWnX3S<h@bfU<`+aBm&UeoBm0c-!5=b}b4U=H5
zbU)}0ZO{mhp$e+u9kj;VC@q13Tvz~wFbuxKXLzrTx<Dq(fcbiM8qUItju<I`gVMJ7
zb+{<6KR~mhw5a?r4VJ)Wm<<~s5FJ&lkuh){hQcS<2gPyH@B?0pYfuS?V5A&csuccR
z=SD5egZ)a?C8eu4QJ!O@N@=qUq{9iA;yv_?^nz^){XVRRnhqN9qz;Op1P01rZnTk^
zFb`T}?4y&Mm{U98IShwoo)HUg4P?P_xa*`QuV5GaRCV?-BNJe(4*DoWoYdtq+=Kow
z*;V;jG*_X?=^U}NU68|z%}BmV`PqLS^uMHDMn;>F9Pp_vL^{!kwVhv(Z4va;KkX(v
z!JIt}D#2vsVP0rcfhyG`!y@^rADPlOQj8!dou%q+wm%{G4TIG94yS0OR=Tfr$kolZ
z);&>G)}-5;tUQ(W>#QHRs_7PW&;jJr!rh&u0c);L<m_@)ZK*4-EA?QdQg#zgCUF+0
zaMC*SEEuP2QRk{{pMx;0hUvWc27Ls|I%vS&FJfIln{S7%a0b434Kg6l)73qPu%K4W
za;r9pCvBQ1g}h&)ZobnlAl%YXM0`;*K3ns|=E!Y0pft8}cl??+Hq=IG+}fn9XY)H+
zZ-ui~>&?Mc@W>wcVm>5BXddJ%jmK03;dWAGXSfjd%F#w0dX3jX(&Dt~MH;(yc<ZD~
z72R9-20hdjtb@;y&H#&QqYgaM-iJg`Rc2Fih4dC(*jVvtkC!Tx@^}L;(I-(@l~n=b
rm5!+}SRUIzYS4hIkWQG=KLQK@;61`6RS)H800000NkvXXu0mjfY}$8n
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/med.png b/ui/new-ui-samples/images/med.png
new file mode 100644
index 0000000000000000000000000000000000000000..06106551316ec16a148c346941ddec92f9d16bc9
GIT binary patch
literal 873
zcmV-v1D5=WP)<h;3K|Lk000e1NJLTq000>P000>X1^@s6#OZ}&00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!`$<GWRCwB?
zmT5@TVGxIR*Dg1-gDktK)CxPKp!-V}1r|oxMF$mSMF$ii6%o{jK17+_cVI*XW}sb=
zNJWWd2T@o`8A*3|Bpqvlxz#i96Bb)#+Z}jz*!{onJM+%We`cLIm##XRkv7l?#=vyx
zZqODQpaPyiKHP>6Q19=cR?Qgb3$q{<V&Nxzg-<#t3?g7Mr07{DoPigC7#Rr%rS0(R
za6w*w29IuOw@QFSm<Jmn88$$H@2#2|83gB`AAEtmu+L8z>fnvI0(o!<2FRiL3SoUy
zBQdaFp}Gji;Gr!{>64Ny2V(WyZc_@cOy|DM%~#l#!df^1E8vD5>{Q}Az#dov4`3!#
zariiGT&xiJlVUi4p-ing4h!KmOtss(v@i)~KrL*Mfl=rku)GBW4&^0-^{W(~o$wsu
zV1X?#BjK<bBIQL98)B5miH^XeBW!11l0vu}eyKV;n-TMPuo8U~yf7DLJN{3iAq_*8
z{9L%N-^RLBes-J7P|cz^B`+A61S1r-^NkLhks+$GXL`5>dO3oZc<C}3i8mu%t;*CE
zysE5FWSF$Io!<~;M%wE~k96x0jYLb=O1sU-cYTSFz8RvCa_LA_ug5+r;Scmw<2xLp
zkrL@H(v@bUP_28ks;pWqBUmZ+c}XqTk6fzhT6NIwv<JIxdXNUJxjvP%i&VAQE_t1&
z2g?+)TW~UnT%5v5>&#PNs9uXwm)iDOr~&Ig6Il2TeFSm>G+^tuvadjgZ&Q_?hHs4x
zvOu1PYhd+eLy4N@W*y>B8Z=K*S)ZkDzDqCU9i_tS^qKKdnkP1P?^^p-7;T;;Xx`XN
z8K`k<ld_D%?`gjk&N}Tk2Uo&l-+9s~{UJ-OrcQ$^U7>7F!qiMN<Y<MGUZ@W8&-k@A
zJx62LlDA$uTeo`;KcF4-PzRqT?FPG5niB49>5oLYsw`0x(ex(0uua9OGhV7tEG$)l
z{w1nWWnF{e3deYLXSW8@M;mZjQ`AyO{|Ybw4NBe};aPP+00000NkvXXu0mjfdFFsc
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/index.html b/ui/new-ui-samples/index.html
new file mode 100755
index 0000000..cb8d257
--- /dev/null
+++ b/ui/new-ui-samples/index.html
@@ -0,0 +1,134 @@
+<!--
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<!DOCTYPE html>
+<html class="no-js" lang="">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="description" content="">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Kimchi</title>
+ <link rel="apple-touch-icon" sizes="57x57" href="apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="manifest.json">
+ <meta name="apple-mobile-web-app-title" content="Kimchi">
+ <meta name="application-name" content="Kimchi">
+ <meta name="msapplication-TileColor" content="#4d4d4d">
+ <meta name="msapplication-TileImage" content="mstile-144x144.png">
+ <meta name="theme-color" content="#ffffff">
+ <!-- Place favicon.ico in the root directory -->
+ <link rel="stylesheet" href="css/vendor.css">
+
+ <link rel="stylesheet" href="css/menu-flat.css">
+ <link rel="stylesheet" href="css/button-flat.css">
+ <link rel="stylesheet" href="css/radio-flat.css">
+ <link rel="stylesheet" href="css/checkbox-flat.css">
+ <link rel="stylesheet" href="css/textbox-flat.css">
+ <link rel="stylesheet" href="css/selectmenu-flat.css">
+ <link rel="stylesheet" href="css/fontello.css">
+ <link rel="stylesheet" href="css/main.css">
+ <script src="js/vendor/modernizr.js"></script>
+</head>
+
+<body>
+ <div class="topbar">
+ <header class="banner-area">
+ <div class="container">
+ <h1 id="logo">Kimchi</h1>
+ </div>
+ </header>
+ <nav class="tab-area">
+ <div class="container">
+ <span class="hostname">hostname</span>
+ <ul id="tabs" class="nav-menu">
+ <li><a href="#" class="disabled">Host</a></li>
+ <li><a href="#" class="disabled">Guests<span class="digit-container">18</span></a></li>
+ <li><a href="#" class="disabled">Templates<span class="digit-container">06</span></a></li>
+ <li><a href="#" class="disabled">Storage<span class="digit-container">102</span></a></li>
+ <li><a href="#" class="disabled">Networks<span class="digit-container">37</span></a></li>
+ <li><a href="#" class="disabled">Administration</a></li>
+ </ul>
+ </div>
+ </nav>
+ </div>
+ <div class="content">
+ <div class="login-area">
+ <div class="err-area">
+ <div id="messUserPass" class="alert alert-danger" role="alert">O usuário ou senha inseridos estão incorretos. Por favor, tente novamente.</div>
+ <div id="messSession" class="alert alert-danger" role="alert">Fim do limite do tempo da sessão, por favor se autentique novamente.</div>
+ </div>
+ <form id="form-login" class="form-horizontal">
+ <div class="form-group">
+ <label for="username" class="sr-only">Usuário</label>
+ <input type="text" class="form-control" id="username" name="username" required="required" placeholder="Usuário" autofocus="">
+ </div>
+ <div class="form-group">
+ <label for="password" class="sr-only">Senha</label>
+ <input type="password" class="form-control" id="password" name="password" required="required" placeholder="Senha">
+ </div>
+ <div class="form-group">
+ <button type="submit" class="btn btn-login col-md-12 col-lg-12">Log In</button>
+ </div>
+ <div class="form-group">
+ <select id="userLang" class="selectpicker col-md-12 col-lg-12 ">
+ <option value="en_US">English (US)</option>
+ <option value="zh_CN">中文(简体)</option>
+ <option value="pt_BR">Português (Brasil)</option>
+ <option value="de_DE">Deutsch (Deutschland)</option>
+ <option value="es_ES">Español (España)</option>
+ <option value="fr_FR">Français (France)</option>
+ <option value="it_IT">Italiano (Italia)</option>
+ <option value="ja_JP">日本語 (日本)</option>
+ <option value="ko_KR">한국어 (대한민국)</option>
+ <option value="ru_RU">Русский (Россия)</option>
+ <option value="zh_TW">中文(繁體)</option>
+ </select>
+ </div>
+ </form>
+ </div>
+ </div>
+ <script src="js/vendor/jquery.js"></script>
+ <script src="js/vendor/jquery-ui.js"></script>
+ <script src="js/vendor.js"></script>
+ <script src="js/vendor/bootstrap.js"></script>
+ <script src="js/vendor/bootstrap-select.min.js"></script>
+ <script src="js/main.js"></script>
+ <script src="js/menu-flat.js"></script>
+ <script type="text/javascript">
+ $(document).ready(function() {
+ $('span.hostname').text(window.location.hostname + ':' + window.location.port);
+ $('.selectpicker').selectpicker();
+ });
+ </script>
+</body>
+
+</html>
diff --git a/ui/new-ui-samples/js/button-flat.js b/ui/new-ui-samples/js/button-flat.js
new file mode 100755
index 0000000..bc72544
--- /dev/null
+++ b/ui/new-ui-samples/js/button-flat.js
@@ -0,0 +1,419 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT 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( factory ) {
+ if ( typeof define === "function" && define.amd ) {
+
+ // AMD. Register as an anonymous module.
+ define([
+ "jquery",
+ "./core",
+ "./widget"
+ ], factory );
+ } else {
+
+ // Browser globals
+ factory( jQuery );
+ }
+}(function( $ ) {
+
+var lastActive,
+ baseClasses = "ui-button ui-widget",
+ typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+ formResetHandler = function() {
+ var form = $( this );
+ setTimeout(function() {
+ form.find( ":ui-button" ).button( "refresh" );
+ }, 1 );
+ },
+ radioGroup = function( radio ) {
+ var name = radio.name,
+ form = radio.form,
+ radios = $( [] );
+ if ( name ) {
+ name = name.replace( /'/g, "\\'" );
+ if ( form ) {
+ radios = $( form ).find( "[name='" + name + "'][type=radio]" );
+ } else {
+ radios = $( "[name='" + name + "'][type=radio]", radio.ownerDocument )
+ .filter(function() {
+ return !this.form;
+ });
+ }
+ }
+ return radios;
+ };
+
+$.widget( "wok.buttonFlat", {
+ version: "@VERSION",
+ defaultElement: "<button>",
+ options: {
+ disabled: null,
+ text: true,
+ label: null,
+ icons: {
+ primary: null,
+ secondary: null
+ }
+ },
+ _create: function() {
+ this.element.closest( "form" )
+ .unbind( "reset" + this.eventNamespace )
+ .bind( "reset" + this.eventNamespace, formResetHandler );
+
+ if ( typeof this.options.disabled !== "boolean" ) {
+ this.options.disabled = !!this.element.prop( "disabled" );
+ } else {
+ this.element.prop( "disabled", this.options.disabled );
+ }
+
+ this._determineButtonType();
+ this.hasTitle = !!this.buttonElement.attr( "title" );
+
+ var that = this,
+ options = this.options,
+ toggleButton = this.type === "checkbox" || this.type === "radio",
+ activeClass = !toggleButton ? "ui-state-active" : "";
+
+ if ( options.label === null ) {
+ options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
+ }
+
+ this._hoverable( this.buttonElement );
+
+ this.buttonElement
+ .addClass( baseClasses )
+ .attr( "role", "button" )
+ .bind( "mouseenter" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return;
+ }
+ if ( this === lastActive ) {
+ $( this ).addClass( "ui-state-active" );
+ }
+ })
+ .bind( "mouseleave" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return;
+ }
+ $( this ).removeClass( activeClass );
+ })
+ .bind( "click" + this.eventNamespace, function( event ) {
+ if ( options.disabled ) {
+ event.preventDefault();
+ event.stopImmediatePropagation();
+ }
+ });
+
+ // Can't use _focusable() because the element that receives focus
+ // and the element that gets the ui-state-focus class are different
+ this._on({
+ focus: function() {
+ this.buttonElement.addClass( "ui-state-focus" );
+ },
+ blur: function() {
+ this.buttonElement.removeClass( "ui-state-focus" );
+ }
+ });
+
+ if ( toggleButton ) {
+ this.element.bind( "change" + this.eventNamespace, function() {
+ that.refresh();
+ });
+ }
+
+ if ( this.type === "checkbox" ) {
+ this.buttonElement.bind( "click" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ });
+ } else if ( this.type === "radio" ) {
+ this.buttonElement.bind( "click" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).addClass( "ui-state-active" );
+ that.buttonElement.attr( "aria-pressed", "true" );
+
+ var radio = that.element[ 0 ];
+ radioGroup( radio )
+ .not( radio )
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ });
+ } else {
+ this.buttonElement
+ .bind( "mousedown" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).addClass( "ui-state-active" );
+ lastActive = this;
+ that.document.one( "mouseup", function() {
+ lastActive = null;
+ });
+ })
+ .bind( "mouseup" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).removeClass( "ui-state-active" );
+ })
+ .bind( "keydown" + this.eventNamespace, function(event) {
+ if ( options.disabled ) {
+ return false;
+ }
+ if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
+ $( this ).addClass( "ui-state-active" );
+ }
+ })
+ // see #8559, we bind to blur here in case the button element loses
+ // focus between keydown and keyup, it would be left in an "active" state
+ .bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
+ $( this ).removeClass( "ui-state-active" );
+ });
+
+ if ( this.buttonElement.is("a") ) {
+ this.buttonElement.keyup(function(event) {
+ if ( event.keyCode === $.ui.keyCode.SPACE ) {
+ // TODO pass through original event correctly (just as 2nd argument doesn't work)
+ $( this ).click();
+ }
+ });
+ }
+ }
+
+ this._setOption( "disabled", options.disabled );
+ this._resetButton();
+ },
+
+ _determineButtonType: function() {
+ var ancestor, labelSelector, checked;
+
+ if ( this.element.is("[type=checkbox]") ) {
+ this.type = "checkbox";
+ } else if ( this.element.is("[type=radio]") ) {
+ this.type = "radio";
+ } else if ( this.element.is("input") ) {
+ this.type = "input";
+ } else {
+ this.type = "button";
+ }
+
+ if ( this.type === "checkbox" || this.type === "radio" ) {
+ // we don't search against the document in case the element
+ // is disconnected from the DOM
+ ancestor = this.element.parents().last();
+ labelSelector = "label[for='" + this.element.attr("id") + "']";
+ this.buttonElement = ancestor.find( labelSelector );
+ if ( !this.buttonElement.length ) {
+ ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+ this.buttonElement = ancestor.filter( labelSelector );
+ if ( !this.buttonElement.length ) {
+ this.buttonElement = ancestor.find( labelSelector );
+ }
+ }
+ this.element.addClass( "ui-helper-hidden-accessible" );
+
+ checked = this.element.is( ":checked" );
+ if ( checked ) {
+ this.buttonElement.addClass( "ui-state-active" );
+ }
+ this.buttonElement.prop( "aria-pressed", checked );
+ } else {
+ this.buttonElement = this.element;
+ }
+ },
+
+ widget: function() {
+ return this.buttonElement;
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-helper-hidden-accessible" );
+ this.buttonElement
+ .removeClass( baseClasses + " ui-state-active " + typeClasses )
+ .removeAttr( "role" )
+ .removeAttr( "aria-pressed" )
+ .html( this.buttonElement.find(".ui-button-text").html() );
+
+ if ( !this.hasTitle ) {
+ this.buttonElement.removeAttr( "title" );
+ }
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+ if ( key === "disabled" ) {
+ this.widget().toggleClass( "ui-state-disabled", !!value );
+ this.element.prop( "disabled", !!value );
+ if ( value ) {
+ if ( this.type === "checkbox" || this.type === "radio" ) {
+ this.buttonElement.removeClass( "ui-state-focus" );
+ } else {
+ this.buttonElement.removeClass( "ui-state-focus ui-state-active" );
+ }
+ }
+ return;
+ }
+ this._resetButton();
+ },
+
+ refresh: function() {
+ //See #8237 & #8828
+ var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
+
+ if ( isDisabled !== this.options.disabled ) {
+ this._setOption( "disabled", isDisabled );
+ }
+ if ( this.type === "radio" ) {
+ radioGroup( this.element[0] ).each(function() {
+ if ( $( this ).is( ":checked" ) ) {
+ $( this ).button( "widget" )
+ .addClass( "ui-state-active" )
+ .attr( "aria-pressed", "true" );
+ } else {
+ $( this ).button( "widget" )
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ }
+ });
+ } else if ( this.type === "checkbox" ) {
+ if ( this.element.is( ":checked" ) ) {
+ this.buttonElement
+ .addClass( "ui-state-active" )
+ .attr( "aria-pressed", "true" );
+ } else {
+ this.buttonElement
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ }
+ }
+ },
+
+ _resetButton: function() {
+ if ( this.type === "input" ) {
+ if ( this.options.label ) {
+ this.element.val( this.options.label );
+ }
+ return;
+ }
+ var buttonElement = this.buttonElement.removeClass( typeClasses ),
+ buttonText = $( "<span></span>", this.document[0] )
+ .addClass( "ui-button-text" )
+ .html( this.options.label )
+ .appendTo( buttonElement.empty() )
+ .text(),
+ icons = this.options.icons,
+ multipleIcons = icons.primary && icons.secondary,
+ buttonClasses = [];
+
+ if ( icons.primary || icons.secondary ) {
+ if ( this.options.text ) {
+ buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
+ }
+
+ if ( icons.primary ) {
+ buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
+ }
+
+ if ( icons.secondary ) {
+ buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
+ }
+
+ if ( !this.options.text ) {
+ buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
+
+ if ( !this.hasTitle ) {
+ buttonElement.attr( "title", $.trim( buttonText ) );
+ }
+ }
+ } else {
+ buttonClasses.push( "ui-button-text-only" );
+ }
+ buttonElement.addClass( buttonClasses.join( " " ) );
+ }
+});
+
+$.widget( "ui.buttonset", {
+ version: "@VERSION",
+ options: {
+ items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
+ },
+
+ _create: function() {
+ this.element.addClass( "ui-buttonset" );
+ },
+
+ _init: function() {
+ this.refresh();
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "disabled" ) {
+ this.buttons.button( "option", key, value );
+ }
+
+ this._super( key, value );
+ },
+
+ refresh: function() {
+ var rtl = this.element.css( "direction" ) === "rtl",
+ allButtons = this.element.find( this.options.items ),
+ existingButtons = allButtons.filter( ":ui-button" );
+
+ // Initialize new buttons
+ allButtons.not( ":ui-button" ).button();
+
+ // Refresh existing buttons
+ existingButtons.button( "refresh" );
+
+ this.buttons = allButtons
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
+ .filter( ":first" )
+ .addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
+ .end()
+ .filter( ":last" )
+ .addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
+ .end()
+ .end();
+ },
+
+ _destroy: function() {
+ this.element.removeClass( "ui-buttonset" );
+ this.buttons
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-corner-left ui-corner-right" )
+ .end()
+ .button( "destroy" );
+ }
+});
+
+return $.ui.button;
+
+}));
diff --git a/ui/new-ui-samples/js/checkbox-flat.js b/ui/new-ui-samples/js/checkbox-flat.js
new file mode 100644
index 0000000..8a2564f
--- /dev/null
+++ b/ui/new-ui-samples/js/checkbox-flat.js
@@ -0,0 +1,86 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+// How to use:
+// $(".selector").checkboxFlat({
+// id: "t", //Checkbox base id.
+// name: "test", //Checkbox name.
+// content: ["apple", "banana", "orange", "cherry"], //Contents of the checkbox set.
+// checked: [1,3] //Set the checked item, which starts with number 1.
+// });
+// $(".selector").click(function() {
+// console.log($(".selector").checkboxFlat("value")); //Get value of the checked checkbox.
+// });
+
+ (function($) {
+ $.widget("wok.checkboxFlat", {
+ options: {
+ id: "",
+ name: "",
+ content: [],
+ checked: []
+ },
+
+ _create: function() {
+ var that = this;
+ var idBase = that.options.id;
+ var name = that.options.name;
+ var checked = that.options.checked;
+ var content = that.options.content;
+ var html = "";
+ for (var i=1;i<content.length+1;i++) {
+ if($.inArray(i,checked) < 0) {
+ html += "<div class='checkbox-item checkbox-inline icon-check-empty-1' id='" + idBase + i + "' name='" + name + "'></div>" +
+ "<label class='checkbox-label checkbox-inline' for='" + idBase + i + "'>" + content[i-1] + "</label>";
+ } else {
+ html += "<div class='checkbox-item checkbox-inline icon-ok-squared' id='" + idBase + i + "' name='" + name + "'></div>" +
+ "<label class='checkbox-label checkbox-inline' for='" + idBase + i + "'>" + content[i-1] + "</label>";
+ }
+ }
+ $(html).appendTo(that.element);
+ $(".checkbox-item").on("click", function() {
+ var tickID = $(this).attr("id");
+ var tick = tickID.substring(idBase.length,tickID.length);
+ if($(this).hasClass("icon-check-empty-1")) {
+ $(this).removeClass("icon-check-empty-1");
+ $(this).addClass("icon-ok-squared");
+ checked.push(Number(tick));
+ } else {
+ $(this).removeClass("icon-ok-squared");
+ $(this).addClass("icon-check-empty-1");
+ checked.splice($.inArray(Number(tick),checked),1);
+ }
+ });
+ },
+
+ value: function() {
+ var value = new Array();
+ var vContent = this.options.content;
+ var vChencked = this.options.checked;
+ for(var i=0;i<vChencked.length;i++) {
+ value.push(vContent[vChencked[i]-1]);
+ }
+ return value;
+ },
+
+ _destroy: function() {
+ this.element.remove();
+ }
+ });
+ })(jQuery);
diff --git a/ui/new-ui-samples/js/main.js b/ui/new-ui-samples/js/main.js
new file mode 100755
index 0000000..80d83e9
--- /dev/null
+++ b/ui/new-ui-samples/js/main.js
@@ -0,0 +1 @@
+console.log('\'Allo \'Allo!');
diff --git a/ui/new-ui-samples/js/menu-flat.js b/ui/new-ui-samples/js/menu-flat.js
new file mode 100644
index 0000000..3352a2b
--- /dev/null
+++ b/ui/new-ui-samples/js/menu-flat.js
@@ -0,0 +1,98 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// How to use:
+// $("#test-bar").menuFlat({
+// content: [1,2,3,4,5,6], //Set content of the menu.
+// icon: "icon-edit-alt", //Set icon of the menu button.
+// listIconList: ["icon-edit-alt","icon-edit-alt","icon-edit-alt","icon-edit-alt","icon-edit-alt","icon-user"]
+// //Set icons of the menu list.
+// // name is optional which set the name of the menu list.
+// });
+// $("#test-bar0").on("click", function() {
+// alert("hello");
+// });
+// $("#test-bar1").on("click", function() {
+// console.log("hello");
+// });
+
+
+(function($) {
+ $.widget("wok.menuFlat", {
+
+ options: {
+ name: null,
+ icon: null,
+ label: null,
+ content: null
+ },
+
+ _create: function() {
+ var that = this;
+ var icon = that.options.icon;
+ var label = that.options.label;
+ var content = that.options.content;
+ var name = that._setName(that.options.name);
+ var html = "<div class='dropdown menu-flat' id='" + name + "'>" +
+ "<button class='btn btn-primary dropdown-toggle' type='button' data-toggle='dropdown'>" +
+ "<i class=" + icon + "></i>" + label + "<span class='caret'></span></button>" +
+ "</div>";
+ $(html).appendTo(that.element);
+ html = that._setValue(content);
+ $(html).appendTo(that.element[0].children[0]);
+ },
+
+ _setName: function(name) { // Set name
+ var ids = [];
+ $(".menu-flat").each(function() { // Store each .menu-flat instance ID in an array
+ ids.push(this.id);
+ });
+
+ for (this.uuid; $.inArray('wok-dropdown-menu-' + this.uuid, ids) !== -1; ) {
+ this.uuid++; // increment uuid based on .menu-flat instances in the page
+ } // this is necessary to make widget factory skip non-existing uuids from static elements
+ // and prevent duplicated id attributes in the proccess
+
+ if (!name) { // if name is null, a new name will be given with the widget uuid
+ name = 'wok-dropdown-menu-' + this.uuid;
+ } else if ($('#' + name).length) { // if name already exists...
+ name = name.concat('_', +this.uuid); // adds a suffix with uuid
+ }
+
+ return name;
+ },
+
+ _setValue: function(content) {
+ var that = this;
+ var name = that.element[0].children[0].id;
+ var html = "<ul class='dropdown-menu'>";
+ $.each(content, function(index, data) {
+ that.options.content[index] = data.toString();
+ html += (data.critical ? "<li class='critical'>" : "<li>");
+ // <a id=" widget id _ list index" class="action name" href="# action name ">
+ html += "<a id=" + name + '_' + index + " class=" + data.action + " href='#" + data.action + "'><i class='" + data.icon + "'></i>" + data.name + "</a></li>";
+ });
+ html += "</ul>";
+ return html;
+ },
+
+ _destroy: function() {
+ this.element.remove();
+ }
+ });
+})(jQuery);
diff --git a/ui/new-ui-samples/js/radio-flat.js b/ui/new-ui-samples/js/radio-flat.js
new file mode 100644
index 0000000..401ef62
--- /dev/null
+++ b/ui/new-ui-samples/js/radio-flat.js
@@ -0,0 +1,86 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * //How to use:
+ * $(".selector").radioFlat({
+ * id: "t", //Base id of the radio set.
+ * name: "test", //name of the radio.
+ * whichChecked: 2, //First selected position, starts from 1.
+ * content: ["apple", "banana", "orange", "cherry"] //set the content array.
+ * });
+ *
+ *
+ * $(".test-bar").click(function() {
+ * console.log($(".test-bar").radioFlat("value")); //this is how to get the value of selected radio value
+ * });
+ *
+ *
+ *
+ */
+
+ (function($) {
+
+ $.widget("wok.radioFlat", {
+ options: {
+ id: "",
+ name: "",
+ whichChecked: "",
+ content:[],
+ },
+
+ _create: function() {
+ var that = this;
+ var radioName = this.options.name;
+ var labelID = this.options.id;
+ var checked = this.options.whichChecked;
+ var num = Number(this.options.content.length);
+ var html ="";
+ if(num >0) {
+ for(var i=1;i < num+1;i++) {
+ var tmpLabelID = labelID + i;
+ html += "<div class='icon-circle-empty inline-radio radio-label' id='" + tmpLabelID + "'></div>" +
+ "<label class='radio-content inline-radio' for='" + tmpLabelID + "'>" + that.options.content[i-1] + "</label>";
+ }
+ $(html).appendTo(that.element);
+ $("#" + labelID + checked).attr("checked", "true");
+ $("#" + labelID + checked).removeClass("icon-circle-empty");
+ $("#" + labelID + checked).addClass("icon-dot-circled");
+ }
+ $(".radio-label").on("click", function() {
+ $(".radio-label").removeClass("icon-dot-circled");
+ $(".radio-label").addClass("icon-circle-empty");
+ $(".radio-label").removeAttr("checked");
+ $(this).removeClass("icon-circle-empty");
+ $(this).addClass("icon-dot-circled");
+ $(this).attr("checked", "true");
+ var thisID = $(this).attr("id");
+ that.options.whichChecked = thisID.substring(labelID.length,thisID.length);
+ });
+ },
+
+ value: function() {
+ var value = Number(this.options.whichChecked) -1;
+ return this.options.content[value];
+ },
+
+ _destroy: function() {
+ this.element.remove();
+ }
+ });
+ })(jQuery);
diff --git a/ui/new-ui-samples/js/selectmenu-flat.js b/ui/new-ui-samples/js/selectmenu-flat.js
new file mode 100644
index 0000000..de17dcd
--- /dev/null
+++ b/ui/new-ui-samples/js/selectmenu-flat.js
@@ -0,0 +1,130 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+// How to use:
+// $(".selector").selectmenuFlat({
+// content: [1,2,3,4,5,6], //Set content of the select menu
+// selected: 2 // set the selected option, starts from "1"
+// });
+// $(".selector").selectmenuFlat("value", "4"); //Set value.
+// var t = $(".selector").selectmenuFlat("value"); //Get value
+// console.log(t);
+
+
+ (function( $ ) {
+ $.widget("wok.selectmenuFlat", {
+
+ options: {
+ content: null,
+ name: null,
+ selected: null,
+ parentid: null
+ },
+
+ _create: function() {
+ var that = this;
+ var name = that.options.name || $(this.element).attr("id");
+ var value = that.options.content;
+ var parentid = $(this.element).attr("id");
+ that.options.parentid = parentid;
+ var html = "<div class='selected-box'>" +
+ "<input class='select-val'>" +
+ "<span class='select-label'></span>" +
+ "<span class='select-icon icon-down-open'></span>" +
+ "</div>";
+ $(html).appendTo(that.element);
+ html = that._setValue(value);
+ $(html).appendTo(that.element);
+ $("#" + parentid).addClass("select-content");
+ var sel = that.options.selected || 1;
+ sel = that.options.content[Number(sel) -1];
+ that.options.selected = $.inArray(sel, that.options.content) + 1;
+ $(".select-val", "#" + parentid).text(sel);
+ $(".select-label", "#" + parentid).text(sel);
+ $(".selected-box", "#" + parentid).on("click", this._toggleOpt);
+ $(".selectmenu-opt", "#" + parentid).on("click", function() {
+ var selectedText = $(this).text();
+ that.options.selected = $.inArray(selectedText, that.options.content) +1;
+ $(".selected-box .select-label", "#" + parentid).text(selectedText);
+ $(".select-val", "#" + parentid).text(selectedText);
+ $(".selectmenu-list", "#" + parentid).prop("style", "display:none");
+ $(".select-icon", "#" + parentid).removeClass("icon-up-open");
+ $(".select-icon", "#" + parentid).addClass("icon-down-open").css({
+ "border-left": "none"
+ });
+ });
+ $(document).mouseup(function(e) {
+ var container = $(".selectmenu-opt");
+ if(!container.is(e.target) && container.has(e.target).length === 0 && $(".select-icon").hasClass("icon-up-open")) {
+ $(".selectmenu-list", "#" + parentid).prop("style", "display:none");
+ $(".select-icon", "#" + parentid).removeClass("icon-up-open");
+ $(".select-icon", "#" + parentid).addClass("icon-down-open").css({
+ "border-left": "none"
+ });
+ }
+ });
+ },
+
+ _setValue: function(value) {
+ var that = this;
+ var html = "<ul class='selectmenu-list' style='display:none'>";
+ var name = this.options.name || $(this.element).attr("id");
+ $.each(value, function(index, data) {
+ that.options.content[index] = data.toString();
+ html += "<li id='" + name + index + "' class='selectmenu-opt'>" + data + "</li>";
+ });
+ html += "</ul>";
+ return html;
+ },
+
+ _toggleOpt: function() {
+ var thisButton = $(this).parent().attr("id");
+ if($(".select-icon", "#" + thisButton).hasClass("icon-down-open")) {
+ $(".selectmenu-list", "#" + thisButton).prop("style", "display");
+ $(".select-icon", "#" + thisButton).removeClass("icon-down-open");
+ $(".select-icon", "#" + thisButton).addClass("icon-up-open").css({
+ "border-left": "1px solid #d8d8d8"
+ });
+ } else {
+ $(".selectmenu-list", "#" + thisButton).prop("style", "display:none");
+ $(".select-icon", "#" + thisButton).removeClass("icon-up-open");
+ $(".select-icon", "#" + thisButton).addClass("icon-down-open").css({
+ "border-left": "none"
+ });
+ }
+ },
+
+ value: function(value) {
+ var parentid = this.options.parentid;
+ if(!value) {
+ return $(".selected-box .select-val", "#" + parentid).text();
+ }
+ if (value <= this.options.content.length) {
+ this.options.selected = value;
+ var selectedText = this.options.content[value-1];
+ $(".selected-box .select-label", "#" + parentid).text(selectedText);
+ $(".selected-box .select-val", "#" + parentid).text(selectedText);
+ }
+ },
+
+ _destroy: function() {
+ this.element.remove();
+ }
+ });
+ })(jQuery);
diff --git a/ui/new-ui-samples/js/textbox-flat.js b/ui/new-ui-samples/js/textbox-flat.js
new file mode 100644
index 0000000..cd9eca0
--- /dev/null
+++ b/ui/new-ui-samples/js/textbox-flat.js
@@ -0,0 +1,39 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// How to use:
+// $(".selector").textboxFlat({
+// hint: "hint"
+// });
+
+ (function($) {
+ $.widget("wok.textboxFlat", {
+ optons: {
+ hint: ""
+ },
+
+ _create: function() {
+ this.element.addClass("textbox-container");
+ this.element.attr("placeholder", this.options.hint);
+ },
+
+ destroy:function() {
+ this.element.remove();
+ }
+ });
+ })(jQuery);
diff --git a/ui/new-ui-samples/js/vendor.js b/ui/new-ui-samples/js/vendor.js
new file mode 100644
index 0000000..ef0e2ec
--- /dev/null
+++ b/ui/new-ui-samples/js/vendor.js
@@ -0,0 +1,5523 @@
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2015 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/master/LICENSE
+ */
+
+// vim: ts=4 sts=4 sw=4 expandtab
+
+// Add semicolon to prevent IIFE from being passed as argument to concatenated code.
+;
+
+// UMD (Universal Module Definition)
+// see https://github.com/umdjs/umd/blob/master/returnExports.js
+(function (root, factory) {
+ 'use strict';
+
+ /* global define, exports, module */
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(factory);
+ } else if (typeof exports === 'object') {
+ // Node. Does not work with strict CommonJS, but
+ // only CommonJS-like enviroments that support module.exports,
+ // like Node.
+ module.exports = factory();
+ } else {
+ // Browser globals (root is window)
+ root.returnExports = factory();
+ }
+}(this, function () {
+
+/**
+ * Brings an environment as close to ECMAScript 5 compliance
+ * as is possible with the facilities of erstwhile engines.
+ *
+ * Annotated ES5: http://es5.github.com/ (specific links below)
+ * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
+ * Required reading: http://javascriptweblog.wordpress.com/2011/12/05/extending-javascript-nativ…
+ */
+
+// Shortcut to an often accessed properties, in order to avoid multiple
+// dereference that costs universally. This also holds a reference to known-good
+// functions.
+var $Array = Array;
+var ArrayPrototype = $Array.prototype;
+var $Object = Object;
+var ObjectPrototype = $Object.prototype;
+var FunctionPrototype = Function.prototype;
+var $String = String;
+var StringPrototype = $String.prototype;
+var $Number = Number;
+var NumberPrototype = $Number.prototype;
+var array_slice = ArrayPrototype.slice;
+var array_splice = ArrayPrototype.splice;
+var array_push = ArrayPrototype.push;
+var array_unshift = ArrayPrototype.unshift;
+var array_concat = ArrayPrototype.concat;
+var call = FunctionPrototype.call;
+var max = Math.max;
+var min = Math.min;
+
+// Having a toString local variable name breaks in Opera so use to_string.
+var to_string = ObjectPrototype.toString;
+
+var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
+var isCallable; /* inlined from https://npmjs.com/is-callable */ var fnToStr = Function.prototype.toString, tryFunctionObject = function tryFunctionObject(value) { try { fnToStr.call(value); return true; } catch (e) { return false; } }, fnClass = '[object Function]', genClass = '[object GeneratorFunction]'; isCallable = function isCallable(value) { if (typeof value !== 'function') { return false; } if (hasToStringTag) { return tryFunctionObject(value); } var strClass = to_string.call(value); return strClass === fnClass || strClass === genClass; };
+var isRegex; /* inlined from https://npmjs.com/is-regex */ var regexExec = RegExp.prototype.exec, tryRegexExec = function tryRegexExec(value) { try { regexExec.call(value); return true; } catch (e) { return false; } }, regexClass = '[object RegExp]'; isRegex = function isRegex(value) { if (typeof value !== 'object') { return false; } return hasToStringTag ? tryRegexExec(value) : to_string.call(value) === regexClass; };
+var isString; /* inlined from https://npmjs.com/is-string */ var strValue = String.prototype.valueOf, tryStringObject = function tryStringObject(value) { try { strValue.call(value); return true; } catch (e) { return false; } }, stringClass = '[object String]'; isString = function isString(value) { if (typeof value === 'string') { return true; } if (typeof value !== 'object') { return false; } return hasToStringTag ? tryStringObject(value) : to_string.call(value) === stringClass; };
+
+/* inlined from http://npmjs.com/define-properties */
+var defineProperties = (function (has) {
+ var supportsDescriptors = $Object.defineProperty && (function () {
+ try {
+ var obj = {};
+ $Object.defineProperty(obj, 'x', { enumerable: false, value: obj });
+ for (var _ in obj) { return false; }
+ return obj.x === obj;
+ } catch (e) { /* this is ES3 */
+ return false;
+ }
+ }());
+
+ // Define configurable, writable and non-enumerable props
+ // if they don't exist.
+ var defineProperty;
+ if (supportsDescriptors) {
+ defineProperty = function (object, name, method, forceAssign) {
+ if (!forceAssign && (name in object)) { return; }
+ $Object.defineProperty(object, name, {
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ value: method
+ });
+ };
+ } else {
+ defineProperty = function (object, name, method, forceAssign) {
+ if (!forceAssign && (name in object)) { return; }
+ object[name] = method;
+ };
+ }
+ return function defineProperties(object, map, forceAssign) {
+ for (var name in map) {
+ if (has.call(map, name)) {
+ defineProperty(object, name, map[name], forceAssign);
+ }
+ }
+ };
+}(ObjectPrototype.hasOwnProperty));
+
+//
+// Util
+// ======
+//
+
+/* replaceable with https://npmjs.com/package/es-abstract /helpers/isPrimitive */
+var isPrimitive = function isPrimitive(input) {
+ var type = typeof input;
+ return input === null || (type !== 'object' && type !== 'function');
+};
+
+var ES = {
+ // ES5 9.4
+ // http://es5.github.com/#x9.4
+ // http://jsperf.com/to-integer
+ /* replaceable with https://npmjs.com/package/es-abstract ES5.ToInteger */
+ ToInteger: function ToInteger(num) {
+ var n = +num;
+ if (n !== n) { // isNaN
+ n = 0;
+ } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
+ n = (n > 0 || -1) * Math.floor(Math.abs(n));
+ }
+ return n;
+ },
+
+ /* replaceable with https://npmjs.com/package/es-abstract ES5.ToPrimitive */
+ ToPrimitive: function ToPrimitive(input) {
+ var val, valueOf, toStr;
+ if (isPrimitive(input)) {
+ return input;
+ }
+ valueOf = input.valueOf;
+ if (isCallable(valueOf)) {
+ val = valueOf.call(input);
+ if (isPrimitive(val)) {
+ return val;
+ }
+ }
+ toStr = input.toString;
+ if (isCallable(toStr)) {
+ val = toStr.call(input);
+ if (isPrimitive(val)) {
+ return val;
+ }
+ }
+ throw new TypeError();
+ },
+
+ // ES5 9.9
+ // http://es5.github.com/#x9.9
+ /* replaceable with https://npmjs.com/package/es-abstract ES5.ToObject */
+ ToObject: function (o) {
+ /* jshint eqnull: true */
+ if (o == null) { // this matches both null and undefined
+ throw new TypeError("can't convert " + o + ' to object');
+ }
+ return $Object(o);
+ },
+
+ /* replaceable with https://npmjs.com/package/es-abstract ES5.ToUint32 */
+ ToUint32: function ToUint32(x) {
+ return x >>> 0;
+ }
+};
+
+//
+// Function
+// ========
+//
+
+// ES-5 15.3.4.5
+// http://es5.github.com/#x15.3.4.5
+
+var Empty = function Empty() {};
+
+defineProperties(FunctionPrototype, {
+ bind: function bind(that) { // .length is 1
+ // 1. Let Target be the this value.
+ var target = this;
+ // 2. If IsCallable(Target) is false, throw a TypeError exception.
+ if (!isCallable(target)) {
+ throw new TypeError('Function.prototype.bind called on incompatible ' + target);
+ }
+ // 3. Let A be a new (possibly empty) internal list of all of the
+ // argument values provided after thisArg (arg1, arg2 etc), in order.
+ // XXX slicedArgs will stand in for "A" if used
+ var args = array_slice.call(arguments, 1); // for normal call
+ // 4. Let F be a new native ECMAScript object.
+ // 11. Set the [[Prototype]] internal property of F to the standard
+ // built-in Function prototype object as specified in 15.3.3.1.
+ // 12. Set the [[Call]] internal property of F as described in
+ // 15.3.4.5.1.
+ // 13. Set the [[Construct]] internal property of F as described in
+ // 15.3.4.5.2.
+ // 14. Set the [[HasInstance]] internal property of F as described in
+ // 15.3.4.5.3.
+ var bound;
+ var binder = function () {
+
+ if (this instanceof bound) {
+ // 15.3.4.5.2 [[Construct]]
+ // When the [[Construct]] internal method of a function object,
+ // F that was created using the bind function is called with a
+ // list of arguments ExtraArgs, the following steps are taken:
+ // 1. Let target be the value of F's [[TargetFunction]]
+ // internal property.
+ // 2. If target has no [[Construct]] internal method, a
+ // TypeError exception is thrown.
+ // 3. Let boundArgs be the value of F's [[BoundArgs]] internal
+ // property.
+ // 4. Let args be a new list containing the same values as the
+ // list boundArgs in the same order followed by the same
+ // values as the list ExtraArgs in the same order.
+ // 5. Return the result of calling the [[Construct]] internal
+ // method of target providing args as the arguments.
+
+ var result = target.apply(
+ this,
+ array_concat.call(args, array_slice.call(arguments))
+ );
+ if ($Object(result) === result) {
+ return result;
+ }
+ return this;
+
+ } else {
+ // 15.3.4.5.1 [[Call]]
+ // When the [[Call]] internal method of a function object, F,
+ // which was created using the bind function is called with a
+ // this value and a list of arguments ExtraArgs, the following
+ // steps are taken:
+ // 1. Let boundArgs be the value of F's [[BoundArgs]] internal
+ // property.
+ // 2. Let boundThis be the value of F's [[BoundThis]] internal
+ // property.
+ // 3. Let target be the value of F's [[TargetFunction]] internal
+ // property.
+ // 4. Let args be a new list containing the same values as the
+ // list boundArgs in the same order followed by the same
+ // values as the list ExtraArgs in the same order.
+ // 5. Return the result of calling the [[Call]] internal method
+ // of target providing boundThis as the this value and
+ // providing args as the arguments.
+
+ // equiv: target.call(this, ...boundArgs, ...args)
+ return target.apply(
+ that,
+ array_concat.call(args, array_slice.call(arguments))
+ );
+
+ }
+
+ };
+
+ // 15. If the [[Class]] internal property of Target is "Function", then
+ // a. Let L be the length property of Target minus the length of A.
+ // b. Set the length own property of F to either 0 or L, whichever is
+ // larger.
+ // 16. Else set the length own property of F to 0.
+
+ var boundLength = max(0, target.length - args.length);
+
+ // 17. Set the attributes of the length own property of F to the values
+ // specified in 15.3.5.1.
+ var boundArgs = [];
+ for (var i = 0; i < boundLength; i++) {
+ array_push.call(boundArgs, '$' + i);
+ }
+
+ // XXX Build a dynamic function with desired amount of arguments is the only
+ // way to set the length property of a function.
+ // In environments where Content Security Policies enabled (Chrome extensions,
+ // for ex.) all use of eval or Function costructor throws an exception.
+ // However in all of these environments Function.prototype.bind exists
+ // and so this code will never be executed.
+ bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this, arguments); }')(binder);
+
+ if (target.prototype) {
+ Empty.prototype = target.prototype;
+ bound.prototype = new Empty();
+ // Clean up dangling references.
+ Empty.prototype = null;
+ }
+
+ // TODO
+ // 18. Set the [[Extensible]] internal property of F to true.
+
+ // TODO
+ // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).
+ // 20. Call the [[DefineOwnProperty]] internal method of F with
+ // arguments "caller", PropertyDescriptor {[[Get]]: thrower, [[Set]]:
+ // thrower, [[Enumerable]]: false, [[Configurable]]: false}, and
+ // false.
+ // 21. Call the [[DefineOwnProperty]] internal method of F with
+ // arguments "arguments", PropertyDescriptor {[[Get]]: thrower,
+ // [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},
+ // and false.
+
+ // TODO
+ // NOTE Function objects created using Function.prototype.bind do not
+ // have a prototype property or the [[Code]], [[FormalParameters]], and
+ // [[Scope]] internal properties.
+ // XXX can't delete prototype in pure-js.
+
+ // 22. Return F.
+ return bound;
+ }
+});
+
+// _Please note: Shortcuts are defined after `Function.prototype.bind` as we
+// us it in defining shortcuts.
+var owns = call.bind(ObjectPrototype.hasOwnProperty);
+var toStr = call.bind(ObjectPrototype.toString);
+var strSlice = call.bind(StringPrototype.slice);
+var strSplit = call.bind(StringPrototype.split);
+
+//
+// Array
+// =====
+//
+
+var isArray = $Array.isArray || function isArray(obj) {
+ return toStr(obj) === '[object Array]';
+};
+
+// ES5 15.4.4.12
+// http://es5.github.com/#x15.4.4.13
+// Return len+argCount.
+// [bugfix, ielt8]
+// IE < 8 bug: [].unshift(0) === undefined but should be "1"
+var hasUnshiftReturnValueBug = [].unshift(0) !== 1;
+defineProperties(ArrayPrototype, {
+ unshift: function () {
+ array_unshift.apply(this, arguments);
+ return this.length;
+ }
+}, hasUnshiftReturnValueBug);
+
+// ES5 15.4.3.2
+// http://es5.github.com/#x15.4.3.2
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/…
+defineProperties($Array, { isArray: isArray });
+
+// The IsCallable() check in the Array functions
+// has been replaced with a strict check on the
+// internal class of the object to trap cases where
+// the provided function was actually a regular
+// expression literal, which in V8 and
+// JavaScriptCore is a typeof "function". Only in
+// V8 are regular expression literals permitted as
+// reduce parameters, so it is desirable in the
+// general case for the shim to match the more
+// strict and common behavior of rejecting regular
+// expressions.
+
+// ES5 15.4.4.18
+// http://es5.github.com/#x15.4.4.18
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/…
+
+// Check failure of by-index access of string characters (IE < 9)
+// and failure of `0 in boxedString` (Rhino)
+var boxedString = $Object('a');
+var splitString = boxedString[0] !== 'a' || !(0 in boxedString);
+
+var properlyBoxesContext = function properlyBoxed(method) {
+ // Check node 0.6.21 bug where third parameter is not boxed
+ var properlyBoxesNonStrict = true;
+ var properlyBoxesStrict = true;
+ if (method) {
+ method.call('foo', function (_, __, context) {
+ if (typeof context !== 'object') { properlyBoxesNonStrict = false; }
+ });
+
+ method.call([1], function () {
+ 'use strict';
+
+ properlyBoxesStrict = typeof this === 'string';
+ }, 'x');
+ }
+ return !!method && properlyBoxesNonStrict && properlyBoxesStrict;
+};
+
+defineProperties(ArrayPrototype, {
+ forEach: function forEach(callbackfn /*, thisArg*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var i = -1;
+ var length = self.length >>> 0;
+ var T;
+ if (arguments.length > 1) {
+ T = arguments[1];
+ }
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.forEach callback must be a function');
+ }
+
+ while (++i < length) {
+ if (i in self) {
+ // Invoke the callback function with call, passing arguments:
+ // context, property value, property key, thisArg object
+ if (typeof T !== 'undefined') {
+ callbackfn.call(T, self[i], i, object);
+ } else {
+ callbackfn(self[i], i, object);
+ }
+ }
+ }
+ }
+}, !properlyBoxesContext(ArrayPrototype.forEach));
+
+// ES5 15.4.4.19
+// http://es5.github.com/#x15.4.4.19
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Arra…
+defineProperties(ArrayPrototype, {
+ map: function map(callbackfn/*, thisArg*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = self.length >>> 0;
+ var result = $Array(length);
+ var T;
+ if (arguments.length > 1) {
+ T = arguments[1];
+ }
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.map callback must be a function');
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self) {
+ if (typeof T !== 'undefined') {
+ result[i] = callbackfn.call(T, self[i], i, object);
+ } else {
+ result[i] = callbackfn(self[i], i, object);
+ }
+ }
+ }
+ return result;
+ }
+}, !properlyBoxesContext(ArrayPrototype.map));
+
+// ES5 15.4.4.20
+// http://es5.github.com/#x15.4.4.20
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Arra…
+defineProperties(ArrayPrototype, {
+ filter: function filter(callbackfn /*, thisArg*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = self.length >>> 0;
+ var result = [];
+ var value;
+ var T;
+ if (arguments.length > 1) {
+ T = arguments[1];
+ }
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.filter callback must be a function');
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self) {
+ value = self[i];
+ if (typeof T === 'undefined' ? callbackfn(value, i, object) : callbackfn.call(T, value, i, object)) {
+ array_push.call(result, value);
+ }
+ }
+ }
+ return result;
+ }
+}, !properlyBoxesContext(ArrayPrototype.filter));
+
+// ES5 15.4.4.16
+// http://es5.github.com/#x15.4.4.16
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/…
+defineProperties(ArrayPrototype, {
+ every: function every(callbackfn /*, thisArg*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = self.length >>> 0;
+ var T;
+ if (arguments.length > 1) {
+ T = arguments[1];
+ }
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.every callback must be a function');
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && !(typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {
+ return false;
+ }
+ }
+ return true;
+ }
+}, !properlyBoxesContext(ArrayPrototype.every));
+
+// ES5 15.4.4.17
+// http://es5.github.com/#x15.4.4.17
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/…
+defineProperties(ArrayPrototype, {
+ some: function some(callbackfn/*, thisArg */) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = self.length >>> 0;
+ var T;
+ if (arguments.length > 1) {
+ T = arguments[1];
+ }
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.some callback must be a function');
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && (typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {
+ return true;
+ }
+ }
+ return false;
+ }
+}, !properlyBoxesContext(ArrayPrototype.some));
+
+// ES5 15.4.4.21
+// http://es5.github.com/#x15.4.4.21
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Arra…
+var reduceCoercesToObject = false;
+if (ArrayPrototype.reduce) {
+ reduceCoercesToObject = typeof ArrayPrototype.reduce.call('es5', function (_, __, ___, list) { return list; }) === 'object';
+}
+defineProperties(ArrayPrototype, {
+ reduce: function reduce(callbackfn /*, initialValue*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = self.length >>> 0;
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.reduce callback must be a function');
+ }
+
+ // no value to return if no initial value and an empty array
+ if (length === 0 && arguments.length === 1) {
+ throw new TypeError('reduce of empty array with no initial value');
+ }
+
+ var i = 0;
+ var result;
+ if (arguments.length >= 2) {
+ result = arguments[1];
+ } else {
+ do {
+ if (i in self) {
+ result = self[i++];
+ break;
+ }
+
+ // if array contains no values, no initial value to return
+ if (++i >= length) {
+ throw new TypeError('reduce of empty array with no initial value');
+ }
+ } while (true);
+ }
+
+ for (; i < length; i++) {
+ if (i in self) {
+ result = callbackfn(result, self[i], i, object);
+ }
+ }
+
+ return result;
+ }
+}, !reduceCoercesToObject);
+
+// ES5 15.4.4.22
+// http://es5.github.com/#x15.4.4.22
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Arra…
+var reduceRightCoercesToObject = false;
+if (ArrayPrototype.reduceRight) {
+ reduceRightCoercesToObject = typeof ArrayPrototype.reduceRight.call('es5', function (_, __, ___, list) { return list; }) === 'object';
+}
+defineProperties(ArrayPrototype, {
+ reduceRight: function reduceRight(callbackfn/*, initial*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = self.length >>> 0;
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.reduceRight callback must be a function');
+ }
+
+ // no value to return if no initial value, empty array
+ if (length === 0 && arguments.length === 1) {
+ throw new TypeError('reduceRight of empty array with no initial value');
+ }
+
+ var result;
+ var i = length - 1;
+ if (arguments.length >= 2) {
+ result = arguments[1];
+ } else {
+ do {
+ if (i in self) {
+ result = self[i--];
+ break;
+ }
+
+ // if array contains no values, no initial value to return
+ if (--i < 0) {
+ throw new TypeError('reduceRight of empty array with no initial value');
+ }
+ } while (true);
+ }
+
+ if (i < 0) {
+ return result;
+ }
+
+ do {
+ if (i in self) {
+ result = callbackfn(result, self[i], i, object);
+ }
+ } while (i--);
+
+ return result;
+ }
+}, !reduceRightCoercesToObject);
+
+// ES5 15.4.4.14
+// http://es5.github.com/#x15.4.4.14
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/…
+var hasFirefox2IndexOfBug = ArrayPrototype.indexOf && [0, 1].indexOf(1, 2) !== -1;
+defineProperties(ArrayPrototype, {
+ indexOf: function indexOf(searchElement /*, fromIndex */) {
+ var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);
+ var length = self.length >>> 0;
+
+ if (length === 0) {
+ return -1;
+ }
+
+ var i = 0;
+ if (arguments.length > 1) {
+ i = ES.ToInteger(arguments[1]);
+ }
+
+ // handle negative indices
+ i = i >= 0 ? i : max(0, length + i);
+ for (; i < length; i++) {
+ if (i in self && self[i] === searchElement) {
+ return i;
+ }
+ }
+ return -1;
+ }
+}, hasFirefox2IndexOfBug);
+
+// ES5 15.4.4.15
+// http://es5.github.com/#x15.4.4.15
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/…
+var hasFirefox2LastIndexOfBug = ArrayPrototype.lastIndexOf && [0, 1].lastIndexOf(0, -3) !== -1;
+defineProperties(ArrayPrototype, {
+ lastIndexOf: function lastIndexOf(searchElement /*, fromIndex */) {
+ var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);
+ var length = self.length >>> 0;
+
+ if (length === 0) {
+ return -1;
+ }
+ var i = length - 1;
+ if (arguments.length > 1) {
+ i = min(i, ES.ToInteger(arguments[1]));
+ }
+ // handle negative indices
+ i = i >= 0 ? i : length - Math.abs(i);
+ for (; i >= 0; i--) {
+ if (i in self && searchElement === self[i]) {
+ return i;
+ }
+ }
+ return -1;
+ }
+}, hasFirefox2LastIndexOfBug);
+
+// ES5 15.4.4.12
+// http://es5.github.com/#x15.4.4.12
+var spliceNoopReturnsEmptyArray = (function () {
+ var a = [1, 2];
+ var result = a.splice();
+ return a.length === 2 && isArray(result) && result.length === 0;
+}());
+defineProperties(ArrayPrototype, {
+ // Safari 5.0 bug where .splice() returns undefined
+ splice: function splice(start, deleteCount) {
+ if (arguments.length === 0) {
+ return [];
+ } else {
+ return array_splice.apply(this, arguments);
+ }
+ }
+}, !spliceNoopReturnsEmptyArray);
+
+var spliceWorksWithEmptyObject = (function () {
+ var obj = {};
+ ArrayPrototype.splice.call(obj, 0, 0, 1);
+ return obj.length === 1;
+}());
+defineProperties(ArrayPrototype, {
+ splice: function splice(start, deleteCount) {
+ if (arguments.length === 0) { return []; }
+ var args = arguments;
+ this.length = max(ES.ToInteger(this.length), 0);
+ if (arguments.length > 0 && typeof deleteCount !== 'number') {
+ args = array_slice.call(arguments);
+ if (args.length < 2) {
+ array_push.call(args, this.length - start);
+ } else {
+ args[1] = ES.ToInteger(deleteCount);
+ }
+ }
+ return array_splice.apply(this, args);
+ }
+}, !spliceWorksWithEmptyObject);
+var spliceWorksWithLargeSparseArrays = (function () {
+ // Per https://github.com/es-shims/es5-shim/issues/295
+ // Safari 7/8 breaks with sparse arrays of size 1e5 or greater
+ var arr = new $Array(1e5);
+ // note: the index MUST be 8 or larger or the test will false pass
+ arr[8] = 'x';
+ arr.splice(1, 1);
+ // note: this test must be defined *after* the indexOf shim
+ // per https://github.com/es-shims/es5-shim/issues/313
+ return arr.indexOf('x') === 7;
+}());
+var spliceWorksWithSmallSparseArrays = (function () {
+ // Per https://github.com/es-shims/es5-shim/issues/295
+ // Opera 12.15 breaks on this, no idea why.
+ var n = 256;
+ var arr = [];
+ arr[n] = 'a';
+ arr.splice(n + 1, 0, 'b');
+ return arr[n] === 'a';
+}());
+defineProperties(ArrayPrototype, {
+ splice: function splice(start, deleteCount) {
+ var O = ES.ToObject(this);
+ var A = [];
+ var len = ES.ToUint32(O.length);
+ var relativeStart = ES.ToInteger(start);
+ var actualStart = relativeStart < 0 ? max((len + relativeStart), 0) : min(relativeStart, len);
+ var actualDeleteCount = min(max(ES.ToInteger(deleteCount), 0), len - actualStart);
+
+ var k = 0;
+ var from;
+ while (k < actualDeleteCount) {
+ from = $String(actualStart + k);
+ if (owns(O, from)) {
+ A[k] = O[from];
+ }
+ k += 1;
+ }
+
+ var items = array_slice.call(arguments, 2);
+ var itemCount = items.length;
+ var to;
+ if (itemCount < actualDeleteCount) {
+ k = actualStart;
+ while (k < (len - actualDeleteCount)) {
+ from = $String(k + actualDeleteCount);
+ to = $String(k + itemCount);
+ if (owns(O, from)) {
+ O[to] = O[from];
+ } else {
+ delete O[to];
+ }
+ k += 1;
+ }
+ k = len;
+ while (k > (len - actualDeleteCount + itemCount)) {
+ delete O[k - 1];
+ k -= 1;
+ }
+ } else if (itemCount > actualDeleteCount) {
+ k = len - actualDeleteCount;
+ while (k > actualStart) {
+ from = $String(k + actualDeleteCount - 1);
+ to = $String(k + itemCount - 1);
+ if (owns(O, from)) {
+ O[to] = O[from];
+ } else {
+ delete O[to];
+ }
+ k -= 1;
+ }
+ }
+ k = actualStart;
+ for (var i = 0; i < items.length; ++i) {
+ O[k] = items[i];
+ k += 1;
+ }
+ O.length = len - actualDeleteCount + itemCount;
+
+ return A;
+ }
+}, !spliceWorksWithLargeSparseArrays || !spliceWorksWithSmallSparseArrays);
+
+//
+// Object
+// ======
+//
+
+// ES5 15.2.3.14
+// http://es5.github.com/#x15.2.3.14
+
+// http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implem…
+var hasDontEnumBug = !({ 'toString': null }).propertyIsEnumerable('toString');
+var hasProtoEnumBug = function () {}.propertyIsEnumerable('prototype');
+var hasStringEnumBug = !owns('x', '0');
+var equalsConstructorPrototype = function (o) {
+ var ctor = o.constructor;
+ return ctor && ctor.prototype === o;
+};
+var blacklistedKeys = {
+ $window: true,
+ $console: true,
+ $parent: true,
+ $self: true,
+ $frames: true,
+ $frameElement: true,
+ $webkitIndexedDB: true,
+ $webkitStorageInfo: true
+};
+var hasAutomationEqualityBug = (function () {
+ /* globals window */
+ if (typeof window === 'undefined') { return false; }
+ for (var k in window) {
+ if (!blacklistedKeys['$' + k] && owns(window, k) && window[k] !== null && typeof window[k] === 'object') {
+ try {
+ equalsConstructorPrototype(window[k]);
+ } catch (e) {
+ return true;
+ }
+ }
+ }
+ return false;
+}());
+var equalsConstructorPrototypeIfNotBuggy = function (object) {
+ if (typeof window === 'undefined' || !hasAutomationEqualityBug) { return equalsConstructorPrototype(object); }
+ try {
+ return equalsConstructorPrototype(object);
+ } catch (e) {
+ return false;
+ }
+};
+var dontEnums = [
+ 'toString',
+ 'toLocaleString',
+ 'valueOf',
+ 'hasOwnProperty',
+ 'isPrototypeOf',
+ 'propertyIsEnumerable',
+ 'constructor'
+];
+var dontEnumsLength = dontEnums.length;
+
+var isArguments = function isArguments(value) {
+ var str = toStr(value);
+ var isArgs = str === '[object Arguments]';
+ if (!isArgs) {
+ isArgs = !isArray(value) &&
+ value !== null &&
+ typeof value === 'object' &&
+ typeof value.length === 'number' &&
+ value.length >= 0 &&
+ isCallable(value.callee);
+ }
+ return isArgs;
+};
+
+defineProperties($Object, {
+ keys: function keys(object) {
+ var isFn = isCallable(object);
+ var isArgs = isArguments(object);
+ var isObject = object !== null && typeof object === 'object';
+ var isStr = isObject && isString(object);
+
+ if (!isObject && !isFn && !isArgs) {
+ throw new TypeError('Object.keys called on a non-object');
+ }
+
+ var theKeys = [];
+ var skipProto = hasProtoEnumBug && isFn;
+ if ((isStr && hasStringEnumBug) || isArgs) {
+ for (var i = 0; i < object.length; ++i) {
+ array_push.call(theKeys, $String(i));
+ }
+ }
+
+ if (!isArgs) {
+ for (var name in object) {
+ if (!(skipProto && name === 'prototype') && owns(object, name)) {
+ array_push.call(theKeys, $String(name));
+ }
+ }
+ }
+
+ if (hasDontEnumBug) {
+ var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
+ for (var j = 0; j < dontEnumsLength; j++) {
+ var dontEnum = dontEnums[j];
+ if (!(skipConstructor && dontEnum === 'constructor') && owns(object, dontEnum)) {
+ array_push.call(theKeys, dontEnum);
+ }
+ }
+ }
+ return theKeys;
+ }
+});
+
+var keysWorksWithArguments = $Object.keys && (function () {
+ // Safari 5.0 bug
+ return $Object.keys(arguments).length === 2;
+}(1, 2));
+var originalKeys = $Object.keys;
+defineProperties($Object, {
+ keys: function keys(object) {
+ if (isArguments(object)) {
+ return originalKeys(array_slice.call(object));
+ } else {
+ return originalKeys(object);
+ }
+ }
+}, !keysWorksWithArguments);
+
+//
+// Date
+// ====
+//
+
+// ES5 15.9.5.43
+// http://es5.github.com/#x15.9.5.43
+// This function returns a String value represent the instance in time
+// represented by this Date object. The format of the String is the Date Time
+// string format defined in 15.9.1.15. All fields are present in the String.
+// The time zone is always UTC, denoted by the suffix Z. If the time value of
+// this object is not a finite Number a RangeError exception is thrown.
+var negativeDate = -62198755200000;
+var negativeYearString = '-000001';
+var hasNegativeDateBug = Date.prototype.toISOString && new Date(negativeDate).toISOString().indexOf(negativeYearString) === -1;
+var hasSafari51DateBug = Date.prototype.toISOString && new Date(-1).toISOString() !== '1969-12-31T23:59:59.999Z';
+
+defineProperties(Date.prototype, {
+ toISOString: function toISOString() {
+ var result, length, value, year, month;
+ if (!isFinite(this)) {
+ throw new RangeError('Date.prototype.toISOString called on non-finite value.');
+ }
+
+ year = this.getUTCFullYear();
+
+ month = this.getUTCMonth();
+ // see https://github.com/es-shims/es5-shim/issues/111
+ year += Math.floor(month / 12);
+ month = (month % 12 + 12) % 12;
+
+ // the date time string format is specified in 15.9.1.15.
+ result = [month + 1, this.getUTCDate(), this.getUTCHours(), this.getUTCMinutes(), this.getUTCSeconds()];
+ year = (
+ (year < 0 ? '-' : (year > 9999 ? '+' : '')) +
+ strSlice('00000' + Math.abs(year), (0 <= year && year <= 9999) ? -4 : -6)
+ );
+
+ length = result.length;
+ while (length--) {
+ value = result[length];
+ // pad months, days, hours, minutes, and seconds to have two
+ // digits.
+ if (value < 10) {
+ result[length] = '0' + value;
+ }
+ }
+ // pad milliseconds to have three digits.
+ return (
+ year + '-' + array_slice.call(result, 0, 2).join('-') +
+ 'T' + array_slice.call(result, 2).join(':') + '.' +
+ strSlice('000' + this.getUTCMilliseconds(), -3) + 'Z'
+ );
+ }
+}, hasNegativeDateBug || hasSafari51DateBug);
+
+// ES5 15.9.5.44
+// http://es5.github.com/#x15.9.5.44
+// This function provides a String representation of a Date object for use by
+// JSON.stringify (15.12.3).
+var dateToJSONIsSupported = (function () {
+ try {
+ return Date.prototype.toJSON &&
+ new Date(NaN).toJSON() === null &&
+ new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1 &&
+ Date.prototype.toJSON.call({ // generic
+ toISOString: function () { return true; }
+ });
+ } catch (e) {
+ return false;
+ }
+}());
+if (!dateToJSONIsSupported) {
+ Date.prototype.toJSON = function toJSON(key) {
+ // When the toJSON method is called with argument key, the following
+ // steps are taken:
+
+ // 1. Let O be the result of calling ToObject, giving it the this
+ // value as its argument.
+ // 2. Let tv be ES.ToPrimitive(O, hint Number).
+ var O = $Object(this);
+ var tv = ES.ToPrimitive(O);
+ // 3. If tv is a Number and is not finite, return null.
+ if (typeof tv === 'number' && !isFinite(tv)) {
+ return null;
+ }
+ // 4. Let toISO be the result of calling the [[Get]] internal method of
+ // O with argument "toISOString".
+ var toISO = O.toISOString;
+ // 5. If IsCallable(toISO) is false, throw a TypeError exception.
+ if (!isCallable(toISO)) {
+ throw new TypeError('toISOString property is not callable');
+ }
+ // 6. Return the result of calling the [[Call]] internal method of
+ // toISO with O as the this value and an empty argument list.
+ return toISO.call(O);
+
+ // NOTE 1 The argument is ignored.
+
+ // NOTE 2 The toJSON function is intentionally generic; it does not
+ // require that its this value be a Date object. Therefore, it can be
+ // transferred to other kinds of objects for use as a method. However,
+ // it does require that any such object have a toISOString method. An
+ // object is free to use the argument key to filter its
+ // stringification.
+ };
+}
+
+// ES5 15.9.4.2
+// http://es5.github.com/#x15.9.4.2
+// based on work shared by Daniel Friesen (dantman)
+// http://gist.github.com/303249
+var supportsExtendedYears = Date.parse('+033658-09-27T01:46:40.000Z') === 1e15;
+var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z')) || !isNaN(Date.parse('2012-12-31T23:59:60.000Z'));
+var doesNotParseY2KNewYear = isNaN(Date.parse('2000-01-01T00:00:00.000Z'));
+if (!Date.parse || doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExtendedYears) {
+ // XXX global assignment won't work in embeddings that use
+ // an alternate object for the context.
+ /* global Date: true */
+ /* eslint-disable no-undef */
+ Date = (function (NativeDate) {
+ /* eslint-enable no-undef */
+ // Date.length === 7
+ var DateShim = function Date(Y, M, D, h, m, s, ms) {
+ var length = arguments.length;
+ var date;
+ if (this instanceof NativeDate) {
+ date = length === 1 && $String(Y) === Y ? // isString(Y)
+ // We explicitly pass it through parse:
+ new NativeDate(DateShim.parse(Y)) :
+ // We have to manually make calls depending on argument
+ // length here
+ length >= 7 ? new NativeDate(Y, M, D, h, m, s, ms) :
+ length >= 6 ? new NativeDate(Y, M, D, h, m, s) :
+ length >= 5 ? new NativeDate(Y, M, D, h, m) :
+ length >= 4 ? new NativeDate(Y, M, D, h) :
+ length >= 3 ? new NativeDate(Y, M, D) :
+ length >= 2 ? new NativeDate(Y, M) :
+ length >= 1 ? new NativeDate(Y) :
+ new NativeDate();
+ } else {
+ date = NativeDate.apply(this, arguments);
+ }
+ // Prevent mixups with unfixed Date object
+ defineProperties(date, { constructor: DateShim }, true);
+ return date;
+ };
+
+ // 15.9.1.15 Date Time String Format.
+ var isoDateExpression = new RegExp('^' +
+ '(\\d{4}|[+-]\\d{6})' + // four-digit year capture or sign +
+ // 6-digit extended year
+ '(?:-(\\d{2})' + // optional month capture
+ '(?:-(\\d{2})' + // optional day capture
+ '(?:' + // capture hours:minutes:seconds.milliseconds
+ 'T(\\d{2})' + // hours capture
+ ':(\\d{2})' + // minutes capture
+ '(?:' + // optional :seconds.milliseconds
+ ':(\\d{2})' + // seconds capture
+ '(?:(\\.\\d{1,}))?' + // milliseconds capture
+ ')?' +
+ '(' + // capture UTC offset component
+ 'Z|' + // UTC capture
+ '(?:' + // offset specifier +/-hours:minutes
+ '([-+])' + // sign capture
+ '(\\d{2})' + // hours offset capture
+ ':(\\d{2})' + // minutes offset capture
+ ')' +
+ ')?)?)?)?' +
+ '$');
+
+ var months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];
+
+ var dayFromMonth = function dayFromMonth(year, month) {
+ var t = month > 1 ? 1 : 0;
+ return (
+ months[month] +
+ Math.floor((year - 1969 + t) / 4) -
+ Math.floor((year - 1901 + t) / 100) +
+ Math.floor((year - 1601 + t) / 400) +
+ 365 * (year - 1970)
+ );
+ };
+
+ var toUTC = function toUTC(t) {
+ return $Number(new NativeDate(1970, 0, 1, 0, 0, 0, t));
+ };
+
+ // Copy any custom methods a 3rd party library may have added
+ for (var key in NativeDate) {
+ if (owns(NativeDate, key)) {
+ DateShim[key] = NativeDate[key];
+ }
+ }
+
+ // Copy "native" methods explicitly; they may be non-enumerable
+ defineProperties(DateShim, {
+ now: NativeDate.now,
+ UTC: NativeDate.UTC
+ }, true);
+ DateShim.prototype = NativeDate.prototype;
+ defineProperties(DateShim.prototype, {
+ constructor: DateShim
+ }, true);
+
+ // Upgrade Date.parse to handle simplified ISO 8601 strings
+ var parseShim = function parse(string) {
+ var match = isoDateExpression.exec(string);
+ if (match) {
+ // parse months, days, hours, minutes, seconds, and milliseconds
+ // provide default values if necessary
+ // parse the UTC offset component
+ var year = $Number(match[1]),
+ month = $Number(match[2] || 1) - 1,
+ day = $Number(match[3] || 1) - 1,
+ hour = $Number(match[4] || 0),
+ minute = $Number(match[5] || 0),
+ second = $Number(match[6] || 0),
+ millisecond = Math.floor($Number(match[7] || 0) * 1000),
+ // When time zone is missed, local offset should be used
+ // (ES 5.1 bug)
+ // see https://bugs.ecmascript.org/show_bug.cgi?id=112
+ isLocalTime = Boolean(match[4] && !match[8]),
+ signOffset = match[9] === '-' ? 1 : -1,
+ hourOffset = $Number(match[10] || 0),
+ minuteOffset = $Number(match[11] || 0),
+ result;
+ if (
+ hour < (
+ minute > 0 || second > 0 || millisecond > 0 ?
+ 24 : 25
+ ) &&
+ minute < 60 && second < 60 && millisecond < 1000 &&
+ month > -1 && month < 12 && hourOffset < 24 &&
+ minuteOffset < 60 && // detect invalid offsets
+ day > -1 &&
+ day < (
+ dayFromMonth(year, month + 1) -
+ dayFromMonth(year, month)
+ )
+ ) {
+ result = (
+ (dayFromMonth(year, month) + day) * 24 +
+ hour +
+ hourOffset * signOffset
+ ) * 60;
+ result = (
+ (result + minute + minuteOffset * signOffset) * 60 +
+ second
+ ) * 1000 + millisecond;
+ if (isLocalTime) {
+ result = toUTC(result);
+ }
+ if (-8.64e15 <= result && result <= 8.64e15) {
+ return result;
+ }
+ }
+ return NaN;
+ }
+ return NativeDate.parse.apply(this, arguments);
+ };
+ defineProperties(DateShim, { parse: parseShim });
+
+ return DateShim;
+ }(Date));
+ /* global Date: false */
+}
+
+// ES5 15.9.4.4
+// http://es5.github.com/#x15.9.4.4
+if (!Date.now) {
+ Date.now = function now() {
+ return new Date().getTime();
+ };
+}
+
+//
+// Number
+// ======
+//
+
+// ES5.1 15.7.4.5
+// http://es5.github.com/#x15.7.4.5
+var hasToFixedBugs = NumberPrototype.toFixed && (
+ (0.00008).toFixed(3) !== '0.000' ||
+ (0.9).toFixed(0) !== '1' ||
+ (1.255).toFixed(2) !== '1.25' ||
+ (1000000000000000128).toFixed(0) !== '1000000000000000128'
+);
+
+var toFixedHelpers = {
+ base: 1e7,
+ size: 6,
+ data: [0, 0, 0, 0, 0, 0],
+ multiply: function multiply(n, c) {
+ var i = -1;
+ var c2 = c;
+ while (++i < toFixedHelpers.size) {
+ c2 += n * toFixedHelpers.data[i];
+ toFixedHelpers.data[i] = c2 % toFixedHelpers.base;
+ c2 = Math.floor(c2 / toFixedHelpers.base);
+ }
+ },
+ divide: function divide(n) {
+ var i = toFixedHelpers.size, c = 0;
+ while (--i >= 0) {
+ c += toFixedHelpers.data[i];
+ toFixedHelpers.data[i] = Math.floor(c / n);
+ c = (c % n) * toFixedHelpers.base;
+ }
+ },
+ numToString: function numToString() {
+ var i = toFixedHelpers.size;
+ var s = '';
+ while (--i >= 0) {
+ if (s !== '' || i === 0 || toFixedHelpers.data[i] !== 0) {
+ var t = $String(toFixedHelpers.data[i]);
+ if (s === '') {
+ s = t;
+ } else {
+ s += strSlice('0000000', 0, 7 - t.length) + t;
+ }
+ }
+ }
+ return s;
+ },
+ pow: function pow(x, n, acc) {
+ return (n === 0 ? acc : (n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc)));
+ },
+ log: function log(x) {
+ var n = 0;
+ var x2 = x;
+ while (x2 >= 4096) {
+ n += 12;
+ x2 /= 4096;
+ }
+ while (x2 >= 2) {
+ n += 1;
+ x2 /= 2;
+ }
+ return n;
+ }
+};
+
+defineProperties(NumberPrototype, {
+ toFixed: function toFixed(fractionDigits) {
+ var f, x, s, m, e, z, j, k;
+
+ // Test for NaN and round fractionDigits down
+ f = $Number(fractionDigits);
+ f = f !== f ? 0 : Math.floor(f);
+
+ if (f < 0 || f > 20) {
+ throw new RangeError('Number.toFixed called with invalid number of decimals');
+ }
+
+ x = $Number(this);
+
+ // Test for NaN
+ if (x !== x) {
+ return 'NaN';
+ }
+
+ // If it is too big or small, return the string value of the number
+ if (x <= -1e21 || x >= 1e21) {
+ return $String(x);
+ }
+
+ s = '';
+
+ if (x < 0) {
+ s = '-';
+ x = -x;
+ }
+
+ m = '0';
+
+ if (x > 1e-21) {
+ // 1e-21 < x < 1e21
+ // -70 < log2(x) < 70
+ e = toFixedHelpers.log(x * toFixedHelpers.pow(2, 69, 1)) - 69;
+ z = (e < 0 ? x * toFixedHelpers.pow(2, -e, 1) : x / toFixedHelpers.pow(2, e, 1));
+ z *= 0x10000000000000; // Math.pow(2, 52);
+ e = 52 - e;
+
+ // -18 < e < 122
+ // x = z / 2 ^ e
+ if (e > 0) {
+ toFixedHelpers.multiply(0, z);
+ j = f;
+
+ while (j >= 7) {
+ toFixedHelpers.multiply(1e7, 0);
+ j -= 7;
+ }
+
+ toFixedHelpers.multiply(toFixedHelpers.pow(10, j, 1), 0);
+ j = e - 1;
+
+ while (j >= 23) {
+ toFixedHelpers.divide(1 << 23);
+ j -= 23;
+ }
+
+ toFixedHelpers.divide(1 << j);
+ toFixedHelpers.multiply(1, 1);
+ toFixedHelpers.divide(2);
+ m = toFixedHelpers.numToString();
+ } else {
+ toFixedHelpers.multiply(0, z);
+ toFixedHelpers.multiply(1 << (-e), 0);
+ m = toFixedHelpers.numToString() + strSlice('0.00000000000000000000', 2, 2 + f);
+ }
+ }
+
+ if (f > 0) {
+ k = m.length;
+
+ if (k <= f) {
+ m = s + strSlice('0.0000000000000000000', 0, f - k + 2) + m;
+ } else {
+ m = s + strSlice(m, 0, k - f) + '.' + strSlice(m, k - f);
+ }
+ } else {
+ m = s + m;
+ }
+
+ return m;
+ }
+}, hasToFixedBugs);
+
+//
+// String
+// ======
+//
+
+// ES5 15.5.4.14
+// http://es5.github.com/#x15.5.4.14
+
+// [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]
+// Many browsers do not split properly with regular expressions or they
+// do not perform the split correctly under obscure conditions.
+// See http://blog.stevenlevithan.com/archives/cross-browser-split
+// I've tested in many browsers and this seems to cover the deviant ones:
+// 'ab'.split(/(?:ab)*/) should be ["", ""], not [""]
+// '.'.split(/(.?)(.?)/) should be ["", ".", "", ""], not ["", ""]
+// 'tesst'.split(/(s)*/) should be ["t", undefined, "e", "s", "t"], not
+// [undefined, "t", undefined, "e", ...]
+// ''.split(/.?/) should be [], not [""]
+// '.'.split(/()()/) should be ["."], not ["", "", "."]
+
+if (
+ 'ab'.split(/(?:ab)*/).length !== 2 ||
+ '.'.split(/(.?)(.?)/).length !== 4 ||
+ 'tesst'.split(/(s)*/)[1] === 't' ||
+ 'test'.split(/(?:)/, -1).length !== 4 ||
+ ''.split(/.?/).length ||
+ '.'.split(/()()/).length > 1
+) {
+ (function () {
+ var compliantExecNpcg = typeof (/()??/).exec('')[1] === 'undefined'; // NPCG: nonparticipating capturing group
+
+ StringPrototype.split = function (separator, limit) {
+ var string = this;
+ if (typeof separator === 'undefined' && limit === 0) {
+ return [];
+ }
+
+ // If `separator` is not a regex, use native split
+ if (!isRegex(separator)) {
+ return strSplit(this, separator, limit);
+ }
+
+ var output = [];
+ var flags = (separator.ignoreCase ? 'i' : '') +
+ (separator.multiline ? 'm' : '') +
+ (separator.unicode ? 'u' : '') + // in ES6
+ (separator.sticky ? 'y' : ''), // Firefox 3+ and ES6
+ lastLastIndex = 0,
+ // Make `global` and avoid `lastIndex` issues by working with a copy
+ separator2, match, lastIndex, lastLength;
+ var separatorCopy = new RegExp(separator.source, flags + 'g');
+ string += ''; // Type-convert
+ if (!compliantExecNpcg) {
+ // Doesn't need flags gy, but they don't hurt
+ separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\s)', flags);
+ }
+ /* Values for `limit`, per the spec:
+ * If undefined: 4294967295 // Math.pow(2, 32) - 1
+ * If 0, Infinity, or NaN: 0
+ * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;
+ * If negative number: 4294967296 - Math.floor(Math.abs(limit))
+ * If other: Type-convert, then use the above rules
+ */
+ var splitLimit = typeof limit === 'undefined' ?
+ -1 >>> 0 : // Math.pow(2, 32) - 1
+ ES.ToUint32(limit);
+ match = separatorCopy.exec(string);
+ while (match) {
+ // `separatorCopy.lastIndex` is not reliable cross-browser
+ lastIndex = match.index + match[0].length;
+ if (lastIndex > lastLastIndex) {
+ array_push.call(output, strSlice(string, lastLastIndex, match.index));
+ // Fix browsers whose `exec` methods don't consistently return `undefined` for
+ // nonparticipating capturing groups
+ if (!compliantExecNpcg && match.length > 1) {
+ /* eslint-disable no-loop-func */
+ match[0].replace(separator2, function () {
+ for (var i = 1; i < arguments.length - 2; i++) {
+ if (typeof arguments[i] === 'undefined') {
+ match[i] = void 0;
+ }
+ }
+ });
+ /* eslint-enable no-loop-func */
+ }
+ if (match.length > 1 && match.index < string.length) {
+ array_push.apply(output, array_slice.call(match, 1));
+ }
+ lastLength = match[0].length;
+ lastLastIndex = lastIndex;
+ if (output.length >= splitLimit) {
+ break;
+ }
+ }
+ if (separatorCopy.lastIndex === match.index) {
+ separatorCopy.lastIndex++; // Avoid an infinite loop
+ }
+ match = separatorCopy.exec(string);
+ }
+ if (lastLastIndex === string.length) {
+ if (lastLength || !separatorCopy.test('')) {
+ array_push.call(output, '');
+ }
+ } else {
+ array_push.call(output, strSlice(string, lastLastIndex));
+ }
+ return output.length > splitLimit ? strSlice(output, 0, splitLimit) : output;
+ };
+ }());
+
+// [bugfix, chrome]
+// If separator is undefined, then the result array contains just one String,
+// which is the this value (converted to a String). If limit is not undefined,
+// then the output array is truncated so that it contains no more than limit
+// elements.
+// "0".split(undefined, 0) -> []
+} else if ('0'.split(void 0, 0).length) {
+ StringPrototype.split = function split(separator, limit) {
+ if (typeof separator === 'undefined' && limit === 0) { return []; }
+ return strSplit(this, separator, limit);
+ };
+}
+
+var str_replace = StringPrototype.replace;
+var replaceReportsGroupsCorrectly = (function () {
+ var groups = [];
+ 'x'.replace(/x(.)?/g, function (match, group) {
+ array_push.call(groups, group);
+ });
+ return groups.length === 1 && typeof groups[0] === 'undefined';
+}());
+
+if (!replaceReportsGroupsCorrectly) {
+ StringPrototype.replace = function replace(searchValue, replaceValue) {
+ var isFn = isCallable(replaceValue);
+ var hasCapturingGroups = isRegex(searchValue) && (/\)[*?]/).test(searchValue.source);
+ if (!isFn || !hasCapturingGroups) {
+ return str_replace.call(this, searchValue, replaceValue);
+ } else {
+ var wrappedReplaceValue = function (match) {
+ var length = arguments.length;
+ var originalLastIndex = searchValue.lastIndex;
+ searchValue.lastIndex = 0;
+ var args = searchValue.exec(match) || [];
+ searchValue.lastIndex = originalLastIndex;
+ array_push.call(args, arguments[length - 2], arguments[length - 1]);
+ return replaceValue.apply(this, args);
+ };
+ return str_replace.call(this, searchValue, wrappedReplaceValue);
+ }
+ };
+}
+
+// ECMA-262, 3rd B.2.3
+// Not an ECMAScript standard, although ECMAScript 3rd Edition has a
+// non-normative section suggesting uniform semantics and it should be
+// normalized across all browsers
+// [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE
+var string_substr = StringPrototype.substr;
+var hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';
+defineProperties(StringPrototype, {
+ substr: function substr(start, length) {
+ var normalizedStart = start;
+ if (start < 0) {
+ normalizedStart = max(this.length + start, 0);
+ }
+ return string_substr.call(this, normalizedStart, length);
+ }
+}, hasNegativeSubstrBug);
+
+// ES5 15.5.4.20
+// whitespace from: http://es5.github.io/#x15.5.4.20
+var ws = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
+ '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028' +
+ '\u2029\uFEFF';
+var zeroWidth = '\u200b';
+var wsRegexChars = '[' + ws + ']';
+var trimBeginRegexp = new RegExp('^' + wsRegexChars + wsRegexChars + '*');
+var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + '*$');
+var hasTrimWhitespaceBug = StringPrototype.trim && (ws.trim() || !zeroWidth.trim());
+defineProperties(StringPrototype, {
+ // http://blog.stevenlevithan.com/archives/faster-trim-javascript
+ // http://perfectionkills.com/whitespace-deviations/
+ trim: function trim() {
+ if (typeof this === 'undefined' || this === null) {
+ throw new TypeError("can't convert " + this + ' to object');
+ }
+ return $String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, '');
+ }
+}, hasTrimWhitespaceBug);
+
+// ES-5 15.1.2.2
+if (parseInt(ws + '08') !== 8 || parseInt(ws + '0x16') !== 22) {
+ /* global parseInt: true */
+ parseInt = (function (origParseInt) {
+ var hexRegex = /^0[xX]/;
+ return function parseInt(str, radix) {
+ var string = $String(str).trim();
+ var defaultedRadix = $Number(radix) || (hexRegex.test(string) ? 16 : 10);
+ return origParseInt(string, defaultedRadix);
+ };
+ }(parseInt));
+}
+
+}));
+
+/*
+ json2.js
+ 2015-05-03
+
+ Public Domain.
+
+ NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
+
+ See http://www.JSON.org/js.html
+
+
+ This code should be minified before deployment.
+ See http://javascript.crockford.com/jsmin.html
+
+ USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
+ NOT CONTROL.
+
+
+ This file creates a global JSON object containing two methods: stringify
+ and parse. This file is provides the ES5 JSON capability to ES3 systems.
+ If a project might run on IE8 or earlier, then this file should be included.
+ This file does nothing on ES5 systems.
+
+ JSON.stringify(value, replacer, space)
+ value any JavaScript value, usually an object or array.
+
+ replacer an optional parameter that determines how object
+ values are stringified for objects. It can be a
+ function or an array of strings.
+
+ space an optional parameter that specifies the indentation
+ of nested structures. If it is omitted, the text will
+ be packed without extra whitespace. If it is a number,
+ it will specify the number of spaces to indent at each
+ level. If it is a string (such as '\t' or ' '),
+ it contains the characters used to indent at each level.
+
+ This method produces a JSON text from a JavaScript value.
+
+ When an object value is found, if the object contains a toJSON
+ method, its toJSON method will be called and the result will be
+ stringified. A toJSON method does not serialize: it returns the
+ value represented by the name/value pair that should be serialized,
+ or undefined if nothing should be serialized. The toJSON method
+ will be passed the key associated with the value, and this will be
+ bound to the value
+
+ For example, this would serialize Dates as ISO strings.
+
+ Date.prototype.toJSON = function (key) {
+ function f(n) {
+ // Format integers to have at least two digits.
+ return n < 10
+ ? '0' + n
+ : n;
+ }
+
+ return this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z';
+ };
+
+ You can provide an optional replacer method. It will be passed the
+ key and value of each member, with this bound to the containing
+ object. The value that is returned from your method will be
+ serialized. If your method returns undefined, then the member will
+ be excluded from the serialization.
+
+ If the replacer parameter is an array of strings, then it will be
+ used to select the members to be serialized. It filters the results
+ such that only members with keys listed in the replacer array are
+ stringified.
+
+ Values that do not have JSON representations, such as undefined or
+ functions, will not be serialized. Such values in objects will be
+ dropped; in arrays they will be replaced with null. You can use
+ a replacer function to replace those with JSON values.
+ JSON.stringify(undefined) returns undefined.
+
+ The optional space parameter produces a stringification of the
+ value that is filled with line breaks and indentation to make it
+ easier to read.
+
+ If the space parameter is a non-empty string, then that string will
+ be used for indentation. If the space parameter is a number, then
+ the indentation will be that many spaces.
+
+ Example:
+
+ text = JSON.stringify(['e', {pluribus: 'unum'}]);
+ // text is '["e",{"pluribus":"unum"}]'
+
+
+ text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
+ // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
+
+ text = JSON.stringify([new Date()], function (key, value) {
+ return this[key] instanceof Date
+ ? 'Date(' + this[key] + ')'
+ : value;
+ });
+ // text is '["Date(---current time---)"]'
+
+
+ JSON.parse(text, reviver)
+ This method parses a JSON text to produce an object or array.
+ It can throw a SyntaxError exception.
+
+ The optional reviver parameter is a function that can filter and
+ transform the results. It receives each of the keys and values,
+ and its return value is used instead of the original value.
+ If it returns what it received, then the structure is not modified.
+ If it returns undefined then the member is deleted.
+
+ Example:
+
+ // Parse the text. Values that look like ISO date strings will
+ // be converted to Date objects.
+
+ myData = JSON.parse(text, function (key, value) {
+ var a;
+ if (typeof value === 'string') {
+ a =
+/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
+ if (a) {
+ return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+ +a[5], +a[6]));
+ }
+ }
+ return value;
+ });
+
+ myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
+ var d;
+ if (typeof value === 'string' &&
+ value.slice(0, 5) === 'Date(' &&
+ value.slice(-1) === ')') {
+ d = new Date(value.slice(5, -1));
+ if (d) {
+ return d;
+ }
+ }
+ return value;
+ });
+
+
+ This is a reference implementation. You are free to copy, modify, or
+ redistribute.
+*/
+
+/*jslint
+ eval, for, this
+*/
+
+/*property
+ JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
+ getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
+ lastIndex, length, parse, prototype, push, replace, slice, stringify,
+ test, toJSON, toString, valueOf
+*/
+
+
+// Create a JSON object only if one does not already exist. We create the
+// methods in a closure to avoid creating global variables.
+
+if (typeof JSON !== 'object') {
+ JSON = {};
+}
+
+(function () {
+ 'use strict';
+
+ var rx_one = /^[\],:{}\s]*$/,
+ rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+ rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+ rx_four = /(?:^|:|,)(?:\s*\[)+/g,
+ rx_escapable = /[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
+
+ function f(n) {
+ // Format integers to have at least two digits.
+ return n < 10
+ ? '0' + n
+ : n;
+ }
+
+ function this_value() {
+ return this.valueOf();
+ }
+
+ if (typeof Date.prototype.toJSON !== 'function') {
+
+ Date.prototype.toJSON = function () {
+
+ return isFinite(this.valueOf())
+ ? this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z'
+ : null;
+ };
+
+ Boolean.prototype.toJSON = this_value;
+ Number.prototype.toJSON = this_value;
+ String.prototype.toJSON = this_value;
+ }
+
+ var gap,
+ indent,
+ meta,
+ rep;
+
+
+ function quote(string) {
+
+// If the string contains no control characters, no quote characters, and no
+// backslash characters, then we can safely slap some quotes around it.
+// Otherwise we must also replace the offending characters with safe escape
+// sequences.
+
+ rx_escapable.lastIndex = 0;
+ return rx_escapable.test(string)
+ ? '"' + string.replace(rx_escapable, function (a) {
+ var c = meta[a];
+ return typeof c === 'string'
+ ? c
+ : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ }) + '"'
+ : '"' + string + '"';
+ }
+
+
+ function str(key, holder) {
+
+// Produce a string from holder[key].
+
+ var i, // The loop counter.
+ k, // The member key.
+ v, // The member value.
+ length,
+ mind = gap,
+ partial,
+ value = holder[key];
+
+// If the value has a toJSON method, call it to obtain a replacement value.
+
+ if (value && typeof value === 'object' &&
+ typeof value.toJSON === 'function') {
+ value = value.toJSON(key);
+ }
+
+// If we were called with a replacer function, then call the replacer to
+// obtain a replacement value.
+
+ if (typeof rep === 'function') {
+ value = rep.call(holder, key, value);
+ }
+
+// What happens next depends on the value's type.
+
+ switch (typeof value) {
+ case 'string':
+ return quote(value);
+
+ case 'number':
+
+// JSON numbers must be finite. Encode non-finite numbers as null.
+
+ return isFinite(value)
+ ? String(value)
+ : 'null';
+
+ case 'boolean':
+ case 'null':
+
+// If the value is a boolean or null, convert it to a string. Note:
+// typeof null does not produce 'null'. The case is included here in
+// the remote chance that this gets fixed someday.
+
+ return String(value);
+
+// If the type is 'object', we might be dealing with an object or an array or
+// null.
+
+ case 'object':
+
+// Due to a specification blunder in ECMAScript, typeof null is 'object',
+// so watch out for that case.
+
+ if (!value) {
+ return 'null';
+ }
+
+// Make an array to hold the partial results of stringifying this object value.
+
+ gap += indent;
+ partial = [];
+
+// Is the value an array?
+
+ if (Object.prototype.toString.apply(value) === '[object Array]') {
+
+// The value is an array. Stringify every element. Use null as a placeholder
+// for non-JSON values.
+
+ length = value.length;
+ for (i = 0; i < length; i += 1) {
+ partial[i] = str(i, value) || 'null';
+ }
+
+// Join all of the elements together, separated with commas, and wrap them in
+// brackets.
+
+ v = partial.length === 0
+ ? '[]'
+ : gap
+ ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']'
+ : '[' + partial.join(',') + ']';
+ gap = mind;
+ return v;
+ }
+
+// If the replacer is an array, use it to select the members to be stringified.
+
+ if (rep && typeof rep === 'object') {
+ length = rep.length;
+ for (i = 0; i < length; i += 1) {
+ if (typeof rep[i] === 'string') {
+ k = rep[i];
+ v = str(k, value);
+ if (v) {
+ partial.push(quote(k) + (
+ gap
+ ? ': '
+ : ':'
+ ) + v);
+ }
+ }
+ }
+ } else {
+
+// Otherwise, iterate through all of the keys in the object.
+
+ for (k in value) {
+ if (Object.prototype.hasOwnProperty.call(value, k)) {
+ v = str(k, value);
+ if (v) {
+ partial.push(quote(k) + (
+ gap
+ ? ': '
+ : ':'
+ ) + v);
+ }
+ }
+ }
+ }
+
+// Join all of the member texts together, separated with commas,
+// and wrap them in braces.
+
+ v = partial.length === 0
+ ? '{}'
+ : gap
+ ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}'
+ : '{' + partial.join(',') + '}';
+ gap = mind;
+ return v;
+ }
+ }
+
+// If the JSON object does not yet have a stringify method, give it one.
+
+ if (typeof JSON.stringify !== 'function') {
+ meta = { // table of character substitutions
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '"': '\\"',
+ '\\': '\\\\'
+ };
+ JSON.stringify = function (value, replacer, space) {
+
+// The stringify method takes a value and an optional replacer, and an optional
+// space parameter, and returns a JSON text. The replacer can be a function
+// that can replace values, or an array of strings that will select the keys.
+// A default replacer method can be provided. Use of the space parameter can
+// produce text that is more easily readable.
+
+ var i;
+ gap = '';
+ indent = '';
+
+// If the space parameter is a number, make an indent string containing that
+// many spaces.
+
+ if (typeof space === 'number') {
+ for (i = 0; i < space; i += 1) {
+ indent += ' ';
+ }
+
+// If the space parameter is a string, it will be used as the indent string.
+
+ } else if (typeof space === 'string') {
+ indent = space;
+ }
+
+// If there is a replacer, it must be a function or an array.
+// Otherwise, throw an error.
+
+ rep = replacer;
+ if (replacer && typeof replacer !== 'function' &&
+ (typeof replacer !== 'object' ||
+ typeof replacer.length !== 'number')) {
+ throw new Error('JSON.stringify');
+ }
+
+// Make a fake root object containing our value under the key of ''.
+// Return the result of stringifying the value.
+
+ return str('', {'': value});
+ };
+ }
+
+
+// If the JSON object does not yet have a parse method, give it one.
+
+ if (typeof JSON.parse !== 'function') {
+ JSON.parse = function (text, reviver) {
+
+// The parse method takes a text and an optional reviver function, and returns
+// a JavaScript value if the text is a valid JSON text.
+
+ var j;
+
+ function walk(holder, key) {
+
+// The walk method is used to recursively walk the resulting structure so
+// that modifications can be made.
+
+ var k, v, value = holder[key];
+ if (value && typeof value === 'object') {
+ for (k in value) {
+ if (Object.prototype.hasOwnProperty.call(value, k)) {
+ v = walk(value, k);
+ if (v !== undefined) {
+ value[k] = v;
+ } else {
+ delete value[k];
+ }
+ }
+ }
+ }
+ return reviver.call(holder, key, value);
+ }
+
+
+// Parsing happens in four stages. In the first stage, we replace certain
+// Unicode characters with escape sequences. JavaScript handles many characters
+// incorrectly, either silently deleting them, or treating them as line endings.
+
+ text = String(text);
+ rx_dangerous.lastIndex = 0;
+ if (rx_dangerous.test(text)) {
+ text = text.replace(rx_dangerous, function (a) {
+ return '\\u' +
+ ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ });
+ }
+
+// In the second stage, we run the text against regular expressions that look
+// for non-JSON patterns. We are especially concerned with '()' and 'new'
+// because they can cause invocation, and '=' because it can cause mutation.
+// But just to be safe, we want to reject all unexpected forms.
+
+// We split the second stage into 4 regexp operations in order to work around
+// crippling inefficiencies in IE's and Safari's regexp engines. First we
+// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
+// replace all simple value tokens with ']' characters. Third, we delete all
+// open brackets that follow a colon or comma or that begin the text. Finally,
+// we look to see that the remaining characters are only whitespace or ']' or
+// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
+
+ if (
+ rx_one.test(
+ text
+ .replace(rx_two, '@')
+ .replace(rx_three, ']')
+ .replace(rx_four, '')
+ )
+ ) {
+
+// In the third stage we use the eval function to compile the text into a
+// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
+// in JavaScript: it can begin a block or an object literal. We wrap the text
+// in parens to eliminate the ambiguity.
+
+ j = eval('(' + text + ')');
+
+// In the optional fourth stage, we recursively walk the new structure, passing
+// each name/value pair to a reviver function for possible transformation.
+
+ return typeof reviver === 'function'
+ ? walk({'': j}, '')
+ : j;
+ }
+
+// If the text is not JSON parseable, then a SyntaxError is thrown.
+
+ throw new SyntaxError('JSON.parse');
+ };
+ }
+}());
+
+;(function () {
+
+ var object = typeof exports != 'undefined' ? exports : this; // #8: web workers
+ var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+ function InvalidCharacterError(message) {
+ this.message = message;
+ }
+ InvalidCharacterError.prototype = new Error;
+ InvalidCharacterError.prototype.name = 'InvalidCharacterError';
+
+ // encoder
+ // [https://gist.github.com/999166] by [https://github.com/nignag]
+ object.btoa || (
+ object.btoa = function (input) {
+ var str = String(input);
+ for (
+ // initialize result and counter
+ var block, charCode, idx = 0, map = chars, output = '';
+ // if the next str index does not exist:
+ // change the mapping table to "="
+ // check if d has no fractional digits
+ str.charAt(idx | 0) || (map = '=', idx % 1);
+ // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8
+ output += map.charAt(63 & block >> 8 - idx % 1 * 8)
+ ) {
+ charCode = str.charCodeAt(idx += 3/4);
+ if (charCode > 0xFF) {
+ throw new InvalidCharacterError("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");
+ }
+ block = block << 8 | charCode;
+ }
+ return output;
+ });
+
+ // decoder
+ // [https://gist.github.com/1020396] by [https://github.com/atk]
+ object.atob || (
+ object.atob = function (input) {
+ var str = String(input).replace(/=+$/, '');
+ if (str.length % 4 == 1) {
+ throw new InvalidCharacterError("'atob' failed: The string to be decoded is not correctly encoded.");
+ }
+ for (
+ // initialize result and counters
+ var bc = 0, bs, buffer, idx = 0, output = '';
+ // get next character
+ buffer = str.charAt(idx++);
+ // character found in table? initialize bit storage and add its ascii value;
+ ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,
+ // and if not first of each 4 characters,
+ // convert the first 8 bits to one ascii character
+ bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0
+ ) {
+ // try to find character in table (0-63, not found => -1)
+ buffer = chars.indexOf(buffer);
+ }
+ return output;
+ });
+
+}());
+
+/*!
+ * typeahead.js 0.11.1
+ * https://github.com/twitter/typeahead.js
+ * Copyright 2013-2015 Twitter, Inc. and other contributors; Licensed MIT
+ */
+
+(function(root, factory) {
+ if (typeof define === "function" && define.amd) {
+ define("bloodhound", [ "jquery" ], function(a0) {
+ return root["Bloodhound"] = factory(a0);
+ });
+ } else if (typeof exports === "object") {
+ module.exports = factory(require("jquery"));
+ } else {
+ root["Bloodhound"] = factory(jQuery);
+ }
+})(this, function($) {
+ var _ = function() {
+ "use strict";
+ return {
+ isMsie: function() {
+ return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false;
+ },
+ isBlankString: function(str) {
+ return !str || /^\s*$/.test(str);
+ },
+ escapeRegExChars: function(str) {
+ return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
+ },
+ isString: function(obj) {
+ return typeof obj === "string";
+ },
+ isNumber: function(obj) {
+ return typeof obj === "number";
+ },
+ isArray: $.isArray,
+ isFunction: $.isFunction,
+ isObject: $.isPlainObject,
+ isUndefined: function(obj) {
+ return typeof obj === "undefined";
+ },
+ isElement: function(obj) {
+ return !!(obj && obj.nodeType === 1);
+ },
+ isJQuery: function(obj) {
+ return obj instanceof $;
+ },
+ toStr: function toStr(s) {
+ return _.isUndefined(s) || s === null ? "" : s + "";
+ },
+ bind: $.proxy,
+ each: function(collection, cb) {
+ $.each(collection, reverseArgs);
+ function reverseArgs(index, value) {
+ return cb(value, index);
+ }
+ },
+ map: $.map,
+ filter: $.grep,
+ every: function(obj, test) {
+ var result = true;
+ if (!obj) {
+ return result;
+ }
+ $.each(obj, function(key, val) {
+ if (!(result = test.call(null, val, key, obj))) {
+ return false;
+ }
+ });
+ return !!result;
+ },
+ some: function(obj, test) {
+ var result = false;
+ if (!obj) {
+ return result;
+ }
+ $.each(obj, function(key, val) {
+ if (result = test.call(null, val, key, obj)) {
+ return false;
+ }
+ });
+ return !!result;
+ },
+ mixin: $.extend,
+ identity: function(x) {
+ return x;
+ },
+ clone: function(obj) {
+ return $.extend(true, {}, obj);
+ },
+ getIdGenerator: function() {
+ var counter = 0;
+ return function() {
+ return counter++;
+ };
+ },
+ templatify: function templatify(obj) {
+ return $.isFunction(obj) ? obj : template;
+ function template() {
+ return String(obj);
+ }
+ },
+ defer: function(fn) {
+ setTimeout(fn, 0);
+ },
+ debounce: function(func, wait, immediate) {
+ var timeout, result;
+ return function() {
+ var context = this, args = arguments, later, callNow;
+ later = function() {
+ timeout = null;
+ if (!immediate) {
+ result = func.apply(context, args);
+ }
+ };
+ callNow = immediate && !timeout;
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+ if (callNow) {
+ result = func.apply(context, args);
+ }
+ return result;
+ };
+ },
+ throttle: function(func, wait) {
+ var context, args, timeout, result, previous, later;
+ previous = 0;
+ later = function() {
+ previous = new Date();
+ timeout = null;
+ result = func.apply(context, args);
+ };
+ return function() {
+ var now = new Date(), remaining = wait - (now - previous);
+ context = this;
+ args = arguments;
+ if (remaining <= 0) {
+ clearTimeout(timeout);
+ timeout = null;
+ previous = now;
+ result = func.apply(context, args);
+ } else if (!timeout) {
+ timeout = setTimeout(later, remaining);
+ }
+ return result;
+ };
+ },
+ stringify: function(val) {
+ return _.isString(val) ? val : JSON.stringify(val);
+ },
+ noop: function() {}
+ };
+ }();
+ var VERSION = "0.11.1";
+ var tokenizers = function() {
+ "use strict";
+ return {
+ nonword: nonword,
+ whitespace: whitespace,
+ obj: {
+ nonword: getObjTokenizer(nonword),
+ whitespace: getObjTokenizer(whitespace)
+ }
+ };
+ function whitespace(str) {
+ str = _.toStr(str);
+ return str ? str.split(/\s+/) : [];
+ }
+ function nonword(str) {
+ str = _.toStr(str);
+ return str ? str.split(/\W+/) : [];
+ }
+ function getObjTokenizer(tokenizer) {
+ return function setKey(keys) {
+ keys = _.isArray(keys) ? keys : [].slice.call(arguments, 0);
+ return function tokenize(o) {
+ var tokens = [];
+ _.each(keys, function(k) {
+ tokens = tokens.concat(tokenizer(_.toStr(o[k])));
+ });
+ return tokens;
+ };
+ };
+ }
+ }();
+ var LruCache = function() {
+ "use strict";
+ function LruCache(maxSize) {
+ this.maxSize = _.isNumber(maxSize) ? maxSize : 100;
+ this.reset();
+ if (this.maxSize <= 0) {
+ this.set = this.get = $.noop;
+ }
+ }
+ _.mixin(LruCache.prototype, {
+ set: function set(key, val) {
+ var tailItem = this.list.tail, node;
+ if (this.size >= this.maxSize) {
+ this.list.remove(tailItem);
+ delete this.hash[tailItem.key];
+ this.size--;
+ }
+ if (node = this.hash[key]) {
+ node.val = val;
+ this.list.moveToFront(node);
+ } else {
+ node = new Node(key, val);
+ this.list.add(node);
+ this.hash[key] = node;
+ this.size++;
+ }
+ },
+ get: function get(key) {
+ var node = this.hash[key];
+ if (node) {
+ this.list.moveToFront(node);
+ return node.val;
+ }
+ },
+ reset: function reset() {
+ this.size = 0;
+ this.hash = {};
+ this.list = new List();
+ }
+ });
+ function List() {
+ this.head = this.tail = null;
+ }
+ _.mixin(List.prototype, {
+ add: function add(node) {
+ if (this.head) {
+ node.next = this.head;
+ this.head.prev = node;
+ }
+ this.head = node;
+ this.tail = this.tail || node;
+ },
+ remove: function remove(node) {
+ node.prev ? node.prev.next = node.next : this.head = node.next;
+ node.next ? node.next.prev = node.prev : this.tail = node.prev;
+ },
+ moveToFront: function(node) {
+ this.remove(node);
+ this.add(node);
+ }
+ });
+ function Node(key, val) {
+ this.key = key;
+ this.val = val;
+ this.prev = this.next = null;
+ }
+ return LruCache;
+ }();
+ var PersistentStorage = function() {
+ "use strict";
+ var LOCAL_STORAGE;
+ try {
+ LOCAL_STORAGE = window.localStorage;
+ LOCAL_STORAGE.setItem("~~~", "!");
+ LOCAL_STORAGE.removeItem("~~~");
+ } catch (err) {
+ LOCAL_STORAGE = null;
+ }
+ function PersistentStorage(namespace, override) {
+ this.prefix = [ "__", namespace, "__" ].join("");
+ this.ttlKey = "__ttl__";
+ this.keyMatcher = new RegExp("^" + _.escapeRegExChars(this.prefix));
+ this.ls = override || LOCAL_STORAGE;
+ !this.ls && this._noop();
+ }
+ _.mixin(PersistentStorage.prototype, {
+ _prefix: function(key) {
+ return this.prefix + key;
+ },
+ _ttlKey: function(key) {
+ return this._prefix(key) + this.ttlKey;
+ },
+ _noop: function() {
+ this.get = this.set = this.remove = this.clear = this.isExpired = _.noop;
+ },
+ _safeSet: function(key, val) {
+ try {
+ this.ls.setItem(key, val);
+ } catch (err) {
+ if (err.name === "QuotaExceededError") {
+ this.clear();
+ this._noop();
+ }
+ }
+ },
+ get: function(key) {
+ if (this.isExpired(key)) {
+ this.remove(key);
+ }
+ return decode(this.ls.getItem(this._prefix(key)));
+ },
+ set: function(key, val, ttl) {
+ if (_.isNumber(ttl)) {
+ this._safeSet(this._ttlKey(key), encode(now() + ttl));
+ } else {
+ this.ls.removeItem(this._ttlKey(key));
+ }
+ return this._safeSet(this._prefix(key), encode(val));
+ },
+ remove: function(key) {
+ this.ls.removeItem(this._ttlKey(key));
+ this.ls.removeItem(this._prefix(key));
+ return this;
+ },
+ clear: function() {
+ var i, keys = gatherMatchingKeys(this.keyMatcher);
+ for (i = keys.length; i--; ) {
+ this.remove(keys[i]);
+ }
+ return this;
+ },
+ isExpired: function(key) {
+ var ttl = decode(this.ls.getItem(this._ttlKey(key)));
+ return _.isNumber(ttl) && now() > ttl ? true : false;
+ }
+ });
+ return PersistentStorage;
+ function now() {
+ return new Date().getTime();
+ }
+ function encode(val) {
+ return JSON.stringify(_.isUndefined(val) ? null : val);
+ }
+ function decode(val) {
+ return $.parseJSON(val);
+ }
+ function gatherMatchingKeys(keyMatcher) {
+ var i, key, keys = [], len = LOCAL_STORAGE.length;
+ for (i = 0; i < len; i++) {
+ if ((key = LOCAL_STORAGE.key(i)).match(keyMatcher)) {
+ keys.push(key.replace(keyMatcher, ""));
+ }
+ }
+ return keys;
+ }
+ }();
+ var Transport = function() {
+ "use strict";
+ var pendingRequestsCount = 0, pendingRequests = {}, maxPendingRequests = 6, sharedCache = new LruCache(10);
+ function Transport(o) {
+ o = o || {};
+ this.cancelled = false;
+ this.lastReq = null;
+ this._send = o.transport;
+ this._get = o.limiter ? o.limiter(this._get) : this._get;
+ this._cache = o.cache === false ? new LruCache(0) : sharedCache;
+ }
+ Transport.setMaxPendingRequests = function setMaxPendingRequests(num) {
+ maxPendingRequests = num;
+ };
+ Transport.resetCache = function resetCache() {
+ sharedCache.reset();
+ };
+ _.mixin(Transport.prototype, {
+ _fingerprint: function fingerprint(o) {
+ o = o || {};
+ return o.url + o.type + $.param(o.data || {});
+ },
+ _get: function(o, cb) {
+ var that = this, fingerprint, jqXhr;
+ fingerprint = this._fingerprint(o);
+ if (this.cancelled || fingerprint !== this.lastReq) {
+ return;
+ }
+ if (jqXhr = pendingRequests[fingerprint]) {
+ jqXhr.done(done).fail(fail);
+ } else if (pendingRequestsCount < maxPendingRequests) {
+ pendingRequestsCount++;
+ pendingRequests[fingerprint] = this._send(o).done(done).fail(fail).always(always);
+ } else {
+ this.onDeckRequestArgs = [].slice.call(arguments, 0);
+ }
+ function done(resp) {
+ cb(null, resp);
+ that._cache.set(fingerprint, resp);
+ }
+ function fail() {
+ cb(true);
+ }
+ function always() {
+ pendingRequestsCount--;
+ delete pendingRequests[fingerprint];
+ if (that.onDeckRequestArgs) {
+ that._get.apply(that, that.onDeckRequestArgs);
+ that.onDeckRequestArgs = null;
+ }
+ }
+ },
+ get: function(o, cb) {
+ var resp, fingerprint;
+ cb = cb || $.noop;
+ o = _.isString(o) ? {
+ url: o
+ } : o || {};
+ fingerprint = this._fingerprint(o);
+ this.cancelled = false;
+ this.lastReq = fingerprint;
+ if (resp = this._cache.get(fingerprint)) {
+ cb(null, resp);
+ } else {
+ this._get(o, cb);
+ }
+ },
+ cancel: function() {
+ this.cancelled = true;
+ }
+ });
+ return Transport;
+ }();
+ var SearchIndex = window.SearchIndex = function() {
+ "use strict";
+ var CHILDREN = "c", IDS = "i";
+ function SearchIndex(o) {
+ o = o || {};
+ if (!o.datumTokenizer || !o.queryTokenizer) {
+ $.error("datumTokenizer and queryTokenizer are both required");
+ }
+ this.identify = o.identify || _.stringify;
+ this.datumTokenizer = o.datumTokenizer;
+ this.queryTokenizer = o.queryTokenizer;
+ this.reset();
+ }
+ _.mixin(SearchIndex.prototype, {
+ bootstrap: function bootstrap(o) {
+ this.datums = o.datums;
+ this.trie = o.trie;
+ },
+ add: function(data) {
+ var that = this;
+ data = _.isArray(data) ? data : [ data ];
+ _.each(data, function(datum) {
+ var id, tokens;
+ that.datums[id = that.identify(datum)] = datum;
+ tokens = normalizeTokens(that.datumTokenizer(datum));
+ _.each(tokens, function(token) {
+ var node, chars, ch;
+ node = that.trie;
+ chars = token.split("");
+ while (ch = chars.shift()) {
+ node = node[CHILDREN][ch] || (node[CHILDREN][ch] = newNode());
+ node[IDS].push(id);
+ }
+ });
+ });
+ },
+ get: function get(ids) {
+ var that = this;
+ return _.map(ids, function(id) {
+ return that.datums[id];
+ });
+ },
+ search: function search(query) {
+ var that = this, tokens, matches;
+ tokens = normalizeTokens(this.queryTokenizer(query));
+ _.each(tokens, function(token) {
+ var node, chars, ch, ids;
+ if (matches && matches.length === 0) {
+ return false;
+ }
+ node = that.trie;
+ chars = token.split("");
+ while (node && (ch = chars.shift())) {
+ node = node[CHILDREN][ch];
+ }
+ if (node && chars.length === 0) {
+ ids = node[IDS].slice(0);
+ matches = matches ? getIntersection(matches, ids) : ids;
+ } else {
+ matches = [];
+ return false;
+ }
+ });
+ return matches ? _.map(unique(matches), function(id) {
+ return that.datums[id];
+ }) : [];
+ },
+ all: function all() {
+ var values = [];
+ for (var key in this.datums) {
+ values.push(this.datums[key]);
+ }
+ return values;
+ },
+ reset: function reset() {
+ this.datums = {};
+ this.trie = newNode();
+ },
+ serialize: function serialize() {
+ return {
+ datums: this.datums,
+ trie: this.trie
+ };
+ }
+ });
+ return SearchIndex;
+ function normalizeTokens(tokens) {
+ tokens = _.filter(tokens, function(token) {
+ return !!token;
+ });
+ tokens = _.map(tokens, function(token) {
+ return token.toLowerCase();
+ });
+ return tokens;
+ }
+ function newNode() {
+ var node = {};
+ node[IDS] = [];
+ node[CHILDREN] = {};
+ return node;
+ }
+ function unique(array) {
+ var seen = {}, uniques = [];
+ for (var i = 0, len = array.length; i < len; i++) {
+ if (!seen[array[i]]) {
+ seen[array[i]] = true;
+ uniques.push(array[i]);
+ }
+ }
+ return uniques;
+ }
+ function getIntersection(arrayA, arrayB) {
+ var ai = 0, bi = 0, intersection = [];
+ arrayA = arrayA.sort();
+ arrayB = arrayB.sort();
+ var lenArrayA = arrayA.length, lenArrayB = arrayB.length;
+ while (ai < lenArrayA && bi < lenArrayB) {
+ if (arrayA[ai] < arrayB[bi]) {
+ ai++;
+ } else if (arrayA[ai] > arrayB[bi]) {
+ bi++;
+ } else {
+ intersection.push(arrayA[ai]);
+ ai++;
+ bi++;
+ }
+ }
+ return intersection;
+ }
+ }();
+ var Prefetch = function() {
+ "use strict";
+ var keys;
+ keys = {
+ data: "data",
+ protocol: "protocol",
+ thumbprint: "thumbprint"
+ };
+ function Prefetch(o) {
+ this.url = o.url;
+ this.ttl = o.ttl;
+ this.cache = o.cache;
+ this.prepare = o.prepare;
+ this.transform = o.transform;
+ this.transport = o.transport;
+ this.thumbprint = o.thumbprint;
+ this.storage = new PersistentStorage(o.cacheKey);
+ }
+ _.mixin(Prefetch.prototype, {
+ _settings: function settings() {
+ return {
+ url: this.url,
+ type: "GET",
+ dataType: "json"
+ };
+ },
+ store: function store(data) {
+ if (!this.cache) {
+ return;
+ }
+ this.storage.set(keys.data, data, this.ttl);
+ this.storage.set(keys.protocol, location.protocol, this.ttl);
+ this.storage.set(keys.thumbprint, this.thumbprint, this.ttl);
+ },
+ fromCache: function fromCache() {
+ var stored = {}, isExpired;
+ if (!this.cache) {
+ return null;
+ }
+ stored.data = this.storage.get(keys.data);
+ stored.protocol = this.storage.get(keys.protocol);
+ stored.thumbprint = this.storage.get(keys.thumbprint);
+ isExpired = stored.thumbprint !== this.thumbprint || stored.protocol !== location.protocol;
+ return stored.data && !isExpired ? stored.data : null;
+ },
+ fromNetwork: function(cb) {
+ var that = this, settings;
+ if (!cb) {
+ return;
+ }
+ settings = this.prepare(this._settings());
+ this.transport(settings).fail(onError).done(onResponse);
+ function onError() {
+ cb(true);
+ }
+ function onResponse(resp) {
+ cb(null, that.transform(resp));
+ }
+ },
+ clear: function clear() {
+ this.storage.clear();
+ return this;
+ }
+ });
+ return Prefetch;
+ }();
+ var Remote = function() {
+ "use strict";
+ function Remote(o) {
+ this.url = o.url;
+ this.prepare = o.prepare;
+ this.transform = o.transform;
+ this.transport = new Transport({
+ cache: o.cache,
+ limiter: o.limiter,
+ transport: o.transport
+ });
+ }
+ _.mixin(Remote.prototype, {
+ _settings: function settings() {
+ return {
+ url: this.url,
+ type: "GET",
+ dataType: "json"
+ };
+ },
+ get: function get(query, cb) {
+ var that = this, settings;
+ if (!cb) {
+ return;
+ }
+ query = query || "";
+ settings = this.prepare(query, this._settings());
+ return this.transport.get(settings, onResponse);
+ function onResponse(err, resp) {
+ err ? cb([]) : cb(that.transform(resp));
+ }
+ },
+ cancelLastRequest: function cancelLastRequest() {
+ this.transport.cancel();
+ }
+ });
+ return Remote;
+ }();
+ var oParser = function() {
+ "use strict";
+ return function parse(o) {
+ var defaults, sorter;
+ defaults = {
+ initialize: true,
+ identify: _.stringify,
+ datumTokenizer: null,
+ queryTokenizer: null,
+ sufficient: 5,
+ sorter: null,
+ local: [],
+ prefetch: null,
+ remote: null
+ };
+ o = _.mixin(defaults, o || {});
+ !o.datumTokenizer && $.error("datumTokenizer is required");
+ !o.queryTokenizer && $.error("queryTokenizer is required");
+ sorter = o.sorter;
+ o.sorter = sorter ? function(x) {
+ return x.sort(sorter);
+ } : _.identity;
+ o.local = _.isFunction(o.local) ? o.local() : o.local;
+ o.prefetch = parsePrefetch(o.prefetch);
+ o.remote = parseRemote(o.remote);
+ return o;
+ };
+ function parsePrefetch(o) {
+ var defaults;
+ if (!o) {
+ return null;
+ }
+ defaults = {
+ url: null,
+ ttl: 24 * 60 * 60 * 1e3,
+ cache: true,
+ cacheKey: null,
+ thumbprint: "",
+ prepare: _.identity,
+ transform: _.identity,
+ transport: null
+ };
+ o = _.isString(o) ? {
+ url: o
+ } : o;
+ o = _.mixin(defaults, o);
+ !o.url && $.error("prefetch requires url to be set");
+ o.transform = o.filter || o.transform;
+ o.cacheKey = o.cacheKey || o.url;
+ o.thumbprint = VERSION + o.thumbprint;
+ o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax;
+ return o;
+ }
+ function parseRemote(o) {
+ var defaults;
+ if (!o) {
+ return;
+ }
+ defaults = {
+ url: null,
+ cache: true,
+ prepare: null,
+ replace: null,
+ wildcard: null,
+ limiter: null,
+ rateLimitBy: "debounce",
+ rateLimitWait: 300,
+ transform: _.identity,
+ transport: null
+ };
+ o = _.isString(o) ? {
+ url: o
+ } : o;
+ o = _.mixin(defaults, o);
+ !o.url && $.error("remote requires url to be set");
+ o.transform = o.filter || o.transform;
+ o.prepare = toRemotePrepare(o);
+ o.limiter = toLimiter(o);
+ o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax;
+ delete o.replace;
+ delete o.wildcard;
+ delete o.rateLimitBy;
+ delete o.rateLimitWait;
+ return o;
+ }
+ function toRemotePrepare(o) {
+ var prepare, replace, wildcard;
+ prepare = o.prepare;
+ replace = o.replace;
+ wildcard = o.wildcard;
+ if (prepare) {
+ return prepare;
+ }
+ if (replace) {
+ prepare = prepareByReplace;
+ } else if (o.wildcard) {
+ prepare = prepareByWildcard;
+ } else {
+ prepare = idenityPrepare;
+ }
+ return prepare;
+ function prepareByReplace(query, settings) {
+ settings.url = replace(settings.url, query);
+ return settings;
+ }
+ function prepareByWildcard(query, settings) {
+ settings.url = settings.url.replace(wildcard, encodeURIComponent(query));
+ return settings;
+ }
+ function idenityPrepare(query, settings) {
+ return settings;
+ }
+ }
+ function toLimiter(o) {
+ var limiter, method, wait;
+ limiter = o.limiter;
+ method = o.rateLimitBy;
+ wait = o.rateLimitWait;
+ if (!limiter) {
+ limiter = /^throttle$/i.test(method) ? throttle(wait) : debounce(wait);
+ }
+ return limiter;
+ function debounce(wait) {
+ return function debounce(fn) {
+ return _.debounce(fn, wait);
+ };
+ }
+ function throttle(wait) {
+ return function throttle(fn) {
+ return _.throttle(fn, wait);
+ };
+ }
+ }
+ function callbackToDeferred(fn) {
+ return function wrapper(o) {
+ var deferred = $.Deferred();
+ fn(o, onSuccess, onError);
+ return deferred;
+ function onSuccess(resp) {
+ _.defer(function() {
+ deferred.resolve(resp);
+ });
+ }
+ function onError(err) {
+ _.defer(function() {
+ deferred.reject(err);
+ });
+ }
+ };
+ }
+ }();
+ var Bloodhound = function() {
+ "use strict";
+ var old;
+ old = window && window.Bloodhound;
+ function Bloodhound(o) {
+ o = oParser(o);
+ this.sorter = o.sorter;
+ this.identify = o.identify;
+ this.sufficient = o.sufficient;
+ this.local = o.local;
+ this.remote = o.remote ? new Remote(o.remote) : null;
+ this.prefetch = o.prefetch ? new Prefetch(o.prefetch) : null;
+ this.index = new SearchIndex({
+ identify: this.identify,
+ datumTokenizer: o.datumTokenizer,
+ queryTokenizer: o.queryTokenizer
+ });
+ o.initialize !== false && this.initialize();
+ }
+ Bloodhound.noConflict = function noConflict() {
+ window && (window.Bloodhound = old);
+ return Bloodhound;
+ };
+ Bloodhound.tokenizers = tokenizers;
+ _.mixin(Bloodhound.prototype, {
+ __ttAdapter: function ttAdapter() {
+ var that = this;
+ return this.remote ? withAsync : withoutAsync;
+ function withAsync(query, sync, async) {
+ return that.search(query, sync, async);
+ }
+ function withoutAsync(query, sync) {
+ return that.search(query, sync);
+ }
+ },
+ _loadPrefetch: function loadPrefetch() {
+ var that = this, deferred, serialized;
+ deferred = $.Deferred();
+ if (!this.prefetch) {
+ deferred.resolve();
+ } else if (serialized = this.prefetch.fromCache()) {
+ this.index.bootstrap(serialized);
+ deferred.resolve();
+ } else {
+ this.prefetch.fromNetwork(done);
+ }
+ return deferred.promise();
+ function done(err, data) {
+ if (err) {
+ return deferred.reject();
+ }
+ that.add(data);
+ that.prefetch.store(that.index.serialize());
+ deferred.resolve();
+ }
+ },
+ _initialize: function initialize() {
+ var that = this, deferred;
+ this.clear();
+ (this.initPromise = this._loadPrefetch()).done(addLocalToIndex);
+ return this.initPromise;
+ function addLocalToIndex() {
+ that.add(that.local);
+ }
+ },
+ initialize: function initialize(force) {
+ return !this.initPromise || force ? this._initialize() : this.initPromise;
+ },
+ add: function add(data) {
+ this.index.add(data);
+ return this;
+ },
+ get: function get(ids) {
+ ids = _.isArray(ids) ? ids : [].slice.call(arguments);
+ return this.index.get(ids);
+ },
+ search: function search(query, sync, async) {
+ var that = this, local;
+ local = this.sorter(this.index.search(query));
+ sync(this.remote ? local.slice() : local);
+ if (this.remote && local.length < this.sufficient) {
+ this.remote.get(query, processRemote);
+ } else if (this.remote) {
+ this.remote.cancelLastRequest();
+ }
+ return this;
+ function processRemote(remote) {
+ var nonDuplicates = [];
+ _.each(remote, function(r) {
+ !_.some(local, function(l) {
+ return that.identify(r) === that.identify(l);
+ }) && nonDuplicates.push(r);
+ });
+ async && async(nonDuplicates);
+ }
+ },
+ all: function all() {
+ return this.index.all();
+ },
+ clear: function clear() {
+ this.index.reset();
+ return this;
+ },
+ clearPrefetchCache: function clearPrefetchCache() {
+ this.prefetch && this.prefetch.clear();
+ return this;
+ },
+ clearRemoteCache: function clearRemoteCache() {
+ Transport.resetCache();
+ return this;
+ },
+ ttAdapter: function ttAdapter() {
+ return this.__ttAdapter();
+ }
+ });
+ return Bloodhound;
+ }();
+ return Bloodhound;
+});
+
+(function(root, factory) {
+ if (typeof define === "function" && define.amd) {
+ define("typeahead.js", [ "jquery" ], function(a0) {
+ return factory(a0);
+ });
+ } else if (typeof exports === "object") {
+ module.exports = factory(require("jquery"));
+ } else {
+ factory(jQuery);
+ }
+})(this, function($) {
+ var _ = function() {
+ "use strict";
+ return {
+ isMsie: function() {
+ return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false;
+ },
+ isBlankString: function(str) {
+ return !str || /^\s*$/.test(str);
+ },
+ escapeRegExChars: function(str) {
+ return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
+ },
+ isString: function(obj) {
+ return typeof obj === "string";
+ },
+ isNumber: function(obj) {
+ return typeof obj === "number";
+ },
+ isArray: $.isArray,
+ isFunction: $.isFunction,
+ isObject: $.isPlainObject,
+ isUndefined: function(obj) {
+ return typeof obj === "undefined";
+ },
+ isElement: function(obj) {
+ return !!(obj && obj.nodeType === 1);
+ },
+ isJQuery: function(obj) {
+ return obj instanceof $;
+ },
+ toStr: function toStr(s) {
+ return _.isUndefined(s) || s === null ? "" : s + "";
+ },
+ bind: $.proxy,
+ each: function(collection, cb) {
+ $.each(collection, reverseArgs);
+ function reverseArgs(index, value) {
+ return cb(value, index);
+ }
+ },
+ map: $.map,
+ filter: $.grep,
+ every: function(obj, test) {
+ var result = true;
+ if (!obj) {
+ return result;
+ }
+ $.each(obj, function(key, val) {
+ if (!(result = test.call(null, val, key, obj))) {
+ return false;
+ }
+ });
+ return !!result;
+ },
+ some: function(obj, test) {
+ var result = false;
+ if (!obj) {
+ return result;
+ }
+ $.each(obj, function(key, val) {
+ if (result = test.call(null, val, key, obj)) {
+ return false;
+ }
+ });
+ return !!result;
+ },
+ mixin: $.extend,
+ identity: function(x) {
+ return x;
+ },
+ clone: function(obj) {
+ return $.extend(true, {}, obj);
+ },
+ getIdGenerator: function() {
+ var counter = 0;
+ return function() {
+ return counter++;
+ };
+ },
+ templatify: function templatify(obj) {
+ return $.isFunction(obj) ? obj : template;
+ function template() {
+ return String(obj);
+ }
+ },
+ defer: function(fn) {
+ setTimeout(fn, 0);
+ },
+ debounce: function(func, wait, immediate) {
+ var timeout, result;
+ return function() {
+ var context = this, args = arguments, later, callNow;
+ later = function() {
+ timeout = null;
+ if (!immediate) {
+ result = func.apply(context, args);
+ }
+ };
+ callNow = immediate && !timeout;
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+ if (callNow) {
+ result = func.apply(context, args);
+ }
+ return result;
+ };
+ },
+ throttle: function(func, wait) {
+ var context, args, timeout, result, previous, later;
+ previous = 0;
+ later = function() {
+ previous = new Date();
+ timeout = null;
+ result = func.apply(context, args);
+ };
+ return function() {
+ var now = new Date(), remaining = wait - (now - previous);
+ context = this;
+ args = arguments;
+ if (remaining <= 0) {
+ clearTimeout(timeout);
+ timeout = null;
+ previous = now;
+ result = func.apply(context, args);
+ } else if (!timeout) {
+ timeout = setTimeout(later, remaining);
+ }
+ return result;
+ };
+ },
+ stringify: function(val) {
+ return _.isString(val) ? val : JSON.stringify(val);
+ },
+ noop: function() {}
+ };
+ }();
+ var WWW = function() {
+ "use strict";
+ var defaultClassNames = {
+ wrapper: "twitter-typeahead",
+ input: "tt-input",
+ hint: "tt-hint",
+ menu: "tt-menu",
+ dataset: "tt-dataset",
+ suggestion: "tt-suggestion",
+ selectable: "tt-selectable",
+ empty: "tt-empty",
+ open: "tt-open",
+ cursor: "tt-cursor",
+ highlight: "tt-highlight"
+ };
+ return build;
+ function build(o) {
+ var www, classes;
+ classes = _.mixin({}, defaultClassNames, o);
+ www = {
+ css: buildCss(),
+ classes: classes,
+ html: buildHtml(classes),
+ selectors: buildSelectors(classes)
+ };
+ return {
+ css: www.css,
+ html: www.html,
+ classes: www.classes,
+ selectors: www.selectors,
+ mixin: function(o) {
+ _.mixin(o, www);
+ }
+ };
+ }
+ function buildHtml(c) {
+ return {
+ wrapper: '<span class="' + c.wrapper + '"></span>',
+ menu: '<div class="' + c.menu + '"></div>'
+ };
+ }
+ function buildSelectors(classes) {
+ var selectors = {};
+ _.each(classes, function(v, k) {
+ selectors[k] = "." + v;
+ });
+ return selectors;
+ }
+ function buildCss() {
+ var css = {
+ wrapper: {
+ position: "relative",
+ display: "inline-block"
+ },
+ hint: {
+ position: "absolute",
+ top: "0",
+ left: "0",
+ borderColor: "transparent",
+ boxShadow: "none",
+ opacity: "1"
+ },
+ input: {
+ position: "relative",
+ verticalAlign: "top",
+ backgroundColor: "transparent"
+ },
+ inputWithNoHint: {
+ position: "relative",
+ verticalAlign: "top"
+ },
+ menu: {
+ position: "absolute",
+ top: "100%",
+ left: "0",
+ zIndex: "100",
+ display: "none"
+ },
+ ltr: {
+ left: "0",
+ right: "auto"
+ },
+ rtl: {
+ left: "auto",
+ right: " 0"
+ }
+ };
+ if (_.isMsie()) {
+ _.mixin(css.input, {
+ backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"
+ });
+ }
+ return css;
+ }
+ }();
+ var EventBus = function() {
+ "use strict";
+ var namespace, deprecationMap;
+ namespace = "typeahead:";
+ deprecationMap = {
+ render: "rendered",
+ cursorchange: "cursorchanged",
+ select: "selected",
+ autocomplete: "autocompleted"
+ };
+ function EventBus(o) {
+ if (!o || !o.el) {
+ $.error("EventBus initialized without el");
+ }
+ this.$el = $(o.el);
+ }
+ _.mixin(EventBus.prototype, {
+ _trigger: function(type, args) {
+ var $e;
+ $e = $.Event(namespace + type);
+ (args = args || []).unshift($e);
+ this.$el.trigger.apply(this.$el, args);
+ return $e;
+ },
+ before: function(type) {
+ var args, $e;
+ args = [].slice.call(arguments, 1);
+ $e = this._trigger("before" + type, args);
+ return $e.isDefaultPrevented();
+ },
+ trigger: function(type) {
+ var deprecatedType;
+ this._trigger(type, [].slice.call(arguments, 1));
+ if (deprecatedType = deprecationMap[type]) {
+ this._trigger(deprecatedType, [].slice.call(arguments, 1));
+ }
+ }
+ });
+ return EventBus;
+ }();
+ var EventEmitter = function() {
+ "use strict";
+ var splitter = /\s+/, nextTick = getNextTick();
+ return {
+ onSync: onSync,
+ onAsync: onAsync,
+ off: off,
+ trigger: trigger
+ };
+ function on(method, types, cb, context) {
+ var type;
+ if (!cb) {
+ return this;
+ }
+ types = types.split(splitter);
+ cb = context ? bindContext(cb, context) : cb;
+ this._callbacks = this._callbacks || {};
+ while (type = types.shift()) {
+ this._callbacks[type] = this._callbacks[type] || {
+ sync: [],
+ async: []
+ };
+ this._callbacks[type][method].push(cb);
+ }
+ return this;
+ }
+ function onAsync(types, cb, context) {
+ return on.call(this, "async", types, cb, context);
+ }
+ function onSync(types, cb, context) {
+ return on.call(this, "sync", types, cb, context);
+ }
+ function off(types) {
+ var type;
+ if (!this._callbacks) {
+ return this;
+ }
+ types = types.split(splitter);
+ while (type = types.shift()) {
+ delete this._callbacks[type];
+ }
+ return this;
+ }
+ function trigger(types) {
+ var type, callbacks, args, syncFlush, asyncFlush;
+ if (!this._callbacks) {
+ return this;
+ }
+ types = types.split(splitter);
+ args = [].slice.call(arguments, 1);
+ while ((type = types.shift()) && (callbacks = this._callbacks[type])) {
+ syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args));
+ asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args));
+ syncFlush() && nextTick(asyncFlush);
+ }
+ return this;
+ }
+ function getFlush(callbacks, context, args) {
+ return flush;
+ function flush() {
+ var cancelled;
+ for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {
+ cancelled = callbacks[i].apply(context, args) === false;
+ }
+ return !cancelled;
+ }
+ }
+ function getNextTick() {
+ var nextTickFn;
+ if (window.setImmediate) {
+ nextTickFn = function nextTickSetImmediate(fn) {
+ setImmediate(function() {
+ fn();
+ });
+ };
+ } else {
+ nextTickFn = function nextTickSetTimeout(fn) {
+ setTimeout(function() {
+ fn();
+ }, 0);
+ };
+ }
+ return nextTickFn;
+ }
+ function bindContext(fn, context) {
+ return fn.bind ? fn.bind(context) : function() {
+ fn.apply(context, [].slice.call(arguments, 0));
+ };
+ }
+ }();
+ var highlight = function(doc) {
+ "use strict";
+ var defaults = {
+ node: null,
+ pattern: null,
+ tagName: "strong",
+ className: null,
+ wordsOnly: false,
+ caseSensitive: false
+ };
+ return function hightlight(o) {
+ var regex;
+ o = _.mixin({}, defaults, o);
+ if (!o.node || !o.pattern) {
+ return;
+ }
+ o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ];
+ regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly);
+ traverse(o.node, hightlightTextNode);
+ function hightlightTextNode(textNode) {
+ var match, patternNode, wrapperNode;
+ if (match = regex.exec(textNode.data)) {
+ wrapperNode = doc.createElement(o.tagName);
+ o.className && (wrapperNode.className = o.className);
+ patternNode = textNode.splitText(match.index);
+ patternNode.splitText(match[0].length);
+ wrapperNode.appendChild(patternNode.cloneNode(true));
+ textNode.parentNode.replaceChild(wrapperNode, patternNode);
+ }
+ return !!match;
+ }
+ function traverse(el, hightlightTextNode) {
+ var childNode, TEXT_NODE_TYPE = 3;
+ for (var i = 0; i < el.childNodes.length; i++) {
+ childNode = el.childNodes[i];
+ if (childNode.nodeType === TEXT_NODE_TYPE) {
+ i += hightlightTextNode(childNode) ? 1 : 0;
+ } else {
+ traverse(childNode, hightlightTextNode);
+ }
+ }
+ }
+ };
+ function getRegex(patterns, caseSensitive, wordsOnly) {
+ var escapedPatterns = [], regexStr;
+ for (var i = 0, len = patterns.length; i < len; i++) {
+ escapedPatterns.push(_.escapeRegExChars(patterns[i]));
+ }
+ regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")";
+ return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i");
+ }
+ }(window.document);
+ var Input = function() {
+ "use strict";
+ var specialKeyCodeMap;
+ specialKeyCodeMap = {
+ 9: "tab",
+ 27: "esc",
+ 37: "left",
+ 39: "right",
+ 13: "enter",
+ 38: "up",
+ 40: "down"
+ };
+ function Input(o, www) {
+ o = o || {};
+ if (!o.input) {
+ $.error("input is missing");
+ }
+ www.mixin(this);
+ this.$hint = $(o.hint);
+ this.$input = $(o.input);
+ this.query = this.$input.val();
+ this.queryWhenFocused = this.hasFocus() ? this.query : null;
+ this.$overflowHelper = buildOverflowHelper(this.$input);
+ this._checkLanguageDirection();
+ if (this.$hint.length === 0) {
+ this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;
+ }
+ }
+ Input.normalizeQuery = function(str) {
+ return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " ");
+ };
+ _.mixin(Input.prototype, EventEmitter, {
+ _onBlur: function onBlur() {
+ this.resetInputValue();
+ this.trigger("blurred");
+ },
+ _onFocus: function onFocus() {
+ this.queryWhenFocused = this.query;
+ this.trigger("focused");
+ },
+ _onKeydown: function onKeydown($e) {
+ var keyName = specialKeyCodeMap[$e.which || $e.keyCode];
+ this._managePreventDefault(keyName, $e);
+ if (keyName && this._shouldTrigger(keyName, $e)) {
+ this.trigger(keyName + "Keyed", $e);
+ }
+ },
+ _onInput: function onInput() {
+ this._setQuery(this.getInputValue());
+ this.clearHintIfInvalid();
+ this._checkLanguageDirection();
+ },
+ _managePreventDefault: function managePreventDefault(keyName, $e) {
+ var preventDefault;
+ switch (keyName) {
+ case "up":
+ case "down":
+ preventDefault = !withModifier($e);
+ break;
+
+ default:
+ preventDefault = false;
+ }
+ preventDefault && $e.preventDefault();
+ },
+ _shouldTrigger: function shouldTrigger(keyName, $e) {
+ var trigger;
+ switch (keyName) {
+ case "tab":
+ trigger = !withModifier($e);
+ break;
+
+ default:
+ trigger = true;
+ }
+ return trigger;
+ },
+ _checkLanguageDirection: function checkLanguageDirection() {
+ var dir = (this.$input.css("direction") || "ltr").toLowerCase();
+ if (this.dir !== dir) {
+ this.dir = dir;
+ this.$hint.attr("dir", dir);
+ this.trigger("langDirChanged", dir);
+ }
+ },
+ _setQuery: function setQuery(val, silent) {
+ var areEquivalent, hasDifferentWhitespace;
+ areEquivalent = areQueriesEquivalent(val, this.query);
+ hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false;
+ this.query = val;
+ if (!silent && !areEquivalent) {
+ this.trigger("queryChanged", this.query);
+ } else if (!silent && hasDifferentWhitespace) {
+ this.trigger("whitespaceChanged", this.query);
+ }
+ },
+ bind: function() {
+ var that = this, onBlur, onFocus, onKeydown, onInput;
+ onBlur = _.bind(this._onBlur, this);
+ onFocus = _.bind(this._onFocus, this);
+ onKeydown = _.bind(this._onKeydown, this);
+ onInput = _.bind(this._onInput, this);
+ this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown);
+ if (!_.isMsie() || _.isMsie() > 9) {
+ this.$input.on("input.tt", onInput);
+ } else {
+ this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) {
+ if (specialKeyCodeMap[$e.which || $e.keyCode]) {
+ return;
+ }
+ _.defer(_.bind(that._onInput, that, $e));
+ });
+ }
+ return this;
+ },
+ focus: function focus() {
+ this.$input.focus();
+ },
+ blur: function blur() {
+ this.$input.blur();
+ },
+ getLangDir: function getLangDir() {
+ return this.dir;
+ },
+ getQuery: function getQuery() {
+ return this.query || "";
+ },
+ setQuery: function setQuery(val, silent) {
+ this.setInputValue(val);
+ this._setQuery(val, silent);
+ },
+ hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() {
+ return this.query !== this.queryWhenFocused;
+ },
+ getInputValue: function getInputValue() {
+ return this.$input.val();
+ },
+ setInputValue: function setInputValue(value) {
+ this.$input.val(value);
+ this.clearHintIfInvalid();
+ this._checkLanguageDirection();
+ },
+ resetInputValue: function resetInputValue() {
+ this.setInputValue(this.query);
+ },
+ getHint: function getHint() {
+ return this.$hint.val();
+ },
+ setHint: function setHint(value) {
+ this.$hint.val(value);
+ },
+ clearHint: function clearHint() {
+ this.setHint("");
+ },
+ clearHintIfInvalid: function clearHintIfInvalid() {
+ var val, hint, valIsPrefixOfHint, isValid;
+ val = this.getInputValue();
+ hint = this.getHint();
+ valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;
+ isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow();
+ !isValid && this.clearHint();
+ },
+ hasFocus: function hasFocus() {
+ return this.$input.is(":focus");
+ },
+ hasOverflow: function hasOverflow() {
+ var constraint = this.$input.width() - 2;
+ this.$overflowHelper.text(this.getInputValue());
+ return this.$overflowHelper.width() >= constraint;
+ },
+ isCursorAtEnd: function() {
+ var valueLength, selectionStart, range;
+ valueLength = this.$input.val().length;
+ selectionStart = this.$input[0].selectionStart;
+ if (_.isNumber(selectionStart)) {
+ return selectionStart === valueLength;
+ } else if (document.selection) {
+ range = document.selection.createRange();
+ range.moveStart("character", -valueLength);
+ return valueLength === range.text.length;
+ }
+ return true;
+ },
+ destroy: function destroy() {
+ this.$hint.off(".tt");
+ this.$input.off(".tt");
+ this.$overflowHelper.remove();
+ this.$hint = this.$input = this.$overflowHelper = $("<div>");
+ }
+ });
+ return Input;
+ function buildOverflowHelper($input) {
+ return $('<pre aria-hidden="true"></pre>').css({
+ position: "absolute",
+ visibility: "hidden",
+ whiteSpace: "pre",
+ fontFamily: $input.css("font-family"),
+ fontSize: $input.css("font-size"),
+ fontStyle: $input.css("font-style"),
+ fontVariant: $input.css("font-variant"),
+ fontWeight: $input.css("font-weight"),
+ wordSpacing: $input.css("word-spacing"),
+ letterSpacing: $input.css("letter-spacing"),
+ textIndent: $input.css("text-indent"),
+ textRendering: $input.css("text-rendering"),
+ textTransform: $input.css("text-transform")
+ }).insertAfter($input);
+ }
+ function areQueriesEquivalent(a, b) {
+ return Input.normalizeQuery(a) === Input.normalizeQuery(b);
+ }
+ function withModifier($e) {
+ return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;
+ }
+ }();
+ var Dataset = function() {
+ "use strict";
+ var keys, nameGenerator;
+ keys = {
+ val: "tt-selectable-display",
+ obj: "tt-selectable-object"
+ };
+ nameGenerator = _.getIdGenerator();
+ function Dataset(o, www) {
+ o = o || {};
+ o.templates = o.templates || {};
+ o.templates.notFound = o.templates.notFound || o.templates.empty;
+ if (!o.source) {
+ $.error("missing source");
+ }
+ if (!o.node) {
+ $.error("missing node");
+ }
+ if (o.name && !isValidName(o.name)) {
+ $.error("invalid dataset name: " + o.name);
+ }
+ www.mixin(this);
+ this.highlight = !!o.highlight;
+ this.name = o.name || nameGenerator();
+ this.limit = o.limit || 5;
+ this.displayFn = getDisplayFn(o.display || o.displayKey);
+ this.templates = getTemplates(o.templates, this.displayFn);
+ this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source;
+ this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async;
+ this._resetLastSuggestion();
+ this.$el = $(o.node).addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name);
+ }
+ Dataset.extractData = function extractData(el) {
+ var $el = $(el);
+ if ($el.data(keys.obj)) {
+ return {
+ val: $el.data(keys.val) || "",
+ obj: $el.data(keys.obj) || null
+ };
+ }
+ return null;
+ };
+ _.mixin(Dataset.prototype, EventEmitter, {
+ _overwrite: function overwrite(query, suggestions) {
+ suggestions = suggestions || [];
+ if (suggestions.length) {
+ this._renderSuggestions(query, suggestions);
+ } else if (this.async && this.templates.pending) {
+ this._renderPending(query);
+ } else if (!this.async && this.templates.notFound) {
+ this._renderNotFound(query);
+ } else {
+ this._empty();
+ }
+ this.trigger("rendered", this.name, suggestions, false);
+ },
+ _append: function append(query, suggestions) {
+ suggestions = suggestions || [];
+ if (suggestions.length && this.$lastSuggestion.length) {
+ this._appendSuggestions(query, suggestions);
+ } else if (suggestions.length) {
+ this._renderSuggestions(query, suggestions);
+ } else if (!this.$lastSuggestion.length && this.templates.notFound) {
+ this._renderNotFound(query);
+ }
+ this.trigger("rendered", this.name, suggestions, true);
+ },
+ _renderSuggestions: function renderSuggestions(query, suggestions) {
+ var $fragment;
+ $fragment = this._getSuggestionsFragment(query, suggestions);
+ this.$lastSuggestion = $fragment.children().last();
+ this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions));
+ },
+ _appendSuggestions: function appendSuggestions(query, suggestions) {
+ var $fragment, $lastSuggestion;
+ $fragment = this._getSuggestionsFragment(query, suggestions);
+ $lastSuggestion = $fragment.children().last();
+ this.$lastSuggestion.after($fragment);
+ this.$lastSuggestion = $lastSuggestion;
+ },
+ _renderPending: function renderPending(query) {
+ var template = this.templates.pending;
+ this._resetLastSuggestion();
+ template && this.$el.html(template({
+ query: query,
+ dataset: this.name
+ }));
+ },
+ _renderNotFound: function renderNotFound(query) {
+ var template = this.templates.notFound;
+ this._resetLastSuggestion();
+ template && this.$el.html(template({
+ query: query,
+ dataset: this.name
+ }));
+ },
+ _empty: function empty() {
+ this.$el.empty();
+ this._resetLastSuggestion();
+ },
+ _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) {
+ var that = this, fragment;
+ fragment = document.createDocumentFragment();
+ _.each(suggestions, function getSuggestionNode(suggestion) {
+ var $el, context;
+ context = that._injectQuery(query, suggestion);
+ $el = $(that.templates.suggestion(context)).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable);
+ fragment.appendChild($el[0]);
+ });
+ this.highlight && highlight({
+ className: this.classes.highlight,
+ node: fragment,
+ pattern: query
+ });
+ return $(fragment);
+ },
+ _getFooter: function getFooter(query, suggestions) {
+ return this.templates.footer ? this.templates.footer({
+ query: query,
+ suggestions: suggestions,
+ dataset: this.name
+ }) : null;
+ },
+ _getHeader: function getHeader(query, suggestions) {
+ return this.templates.header ? this.templates.header({
+ query: query,
+ suggestions: suggestions,
+ dataset: this.name
+ }) : null;
+ },
+ _resetLastSuggestion: function resetLastSuggestion() {
+ this.$lastSuggestion = $();
+ },
+ _injectQuery: function injectQuery(query, obj) {
+ return _.isObject(obj) ? _.mixin({
+ _query: query
+ }, obj) : obj;
+ },
+ update: function update(query) {
+ var that = this, canceled = false, syncCalled = false, rendered = 0;
+ this.cancel();
+ this.cancel = function cancel() {
+ canceled = true;
+ that.cancel = $.noop;
+ that.async && that.trigger("asyncCanceled", query);
+ };
+ this.source(query, sync, async);
+ !syncCalled && sync([]);
+ function sync(suggestions) {
+ if (syncCalled) {
+ return;
+ }
+ syncCalled = true;
+ suggestions = (suggestions || []).slice(0, that.limit);
+ rendered = suggestions.length;
+ that._overwrite(query, suggestions);
+ if (rendered < that.limit && that.async) {
+ that.trigger("asyncRequested", query);
+ }
+ }
+ function async(suggestions) {
+ suggestions = suggestions || [];
+ if (!canceled && rendered < that.limit) {
+ that.cancel = $.noop;
+ rendered += suggestions.length;
+ that._append(query, suggestions.slice(0, that.limit - rendered));
+ that.async && that.trigger("asyncReceived", query);
+ }
+ }
+ },
+ cancel: $.noop,
+ clear: function clear() {
+ this._empty();
+ this.cancel();
+ this.trigger("cleared");
+ },
+ isEmpty: function isEmpty() {
+ return this.$el.is(":empty");
+ },
+ destroy: function destroy() {
+ this.$el = $("<div>");
+ }
+ });
+ return Dataset;
+ function getDisplayFn(display) {
+ display = display || _.stringify;
+ return _.isFunction(display) ? display : displayFn;
+ function displayFn(obj) {
+ return obj[display];
+ }
+ }
+ function getTemplates(templates, displayFn) {
+ return {
+ notFound: templates.notFound && _.templatify(templates.notFound),
+ pending: templates.pending && _.templatify(templates.pending),
+ header: templates.header && _.templatify(templates.header),
+ footer: templates.footer && _.templatify(templates.footer),
+ suggestion: templates.suggestion || suggestionTemplate
+ };
+ function suggestionTemplate(context) {
+ return $("<div>").text(displayFn(context));
+ }
+ }
+ function isValidName(str) {
+ return /^[_a-zA-Z0-9-]+$/.test(str);
+ }
+ }();
+ var Menu = function() {
+ "use strict";
+ function Menu(o, www) {
+ var that = this;
+ o = o || {};
+ if (!o.node) {
+ $.error("node is required");
+ }
+ www.mixin(this);
+ this.$node = $(o.node);
+ this.query = null;
+ this.datasets = _.map(o.datasets, initializeDataset);
+ function initializeDataset(oDataset) {
+ var node = that.$node.find(oDataset.node).first();
+ oDataset.node = node.length ? node : $("<div>").appendTo(that.$node);
+ return new Dataset(oDataset, www);
+ }
+ }
+ _.mixin(Menu.prototype, EventEmitter, {
+ _onSelectableClick: function onSelectableClick($e) {
+ this.trigger("selectableClicked", $($e.currentTarget));
+ },
+ _onRendered: function onRendered(type, dataset, suggestions, async) {
+ this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());
+ this.trigger("datasetRendered", dataset, suggestions, async);
+ },
+ _onCleared: function onCleared() {
+ this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());
+ this.trigger("datasetCleared");
+ },
+ _propagate: function propagate() {
+ this.trigger.apply(this, arguments);
+ },
+ _allDatasetsEmpty: function allDatasetsEmpty() {
+ return _.every(this.datasets, isDatasetEmpty);
+ function isDatasetEmpty(dataset) {
+ return dataset.isEmpty();
+ }
+ },
+ _getSelectables: function getSelectables() {
+ return this.$node.find(this.selectors.selectable);
+ },
+ _removeCursor: function _removeCursor() {
+ var $selectable = this.getActiveSelectable();
+ $selectable && $selectable.removeClass(this.classes.cursor);
+ },
+ _ensureVisible: function ensureVisible($el) {
+ var elTop, elBottom, nodeScrollTop, nodeHeight;
+ elTop = $el.position().top;
+ elBottom = elTop + $el.outerHeight(true);
+ nodeScrollTop = this.$node.scrollTop();
+ nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10);
+ if (elTop < 0) {
+ this.$node.scrollTop(nodeScrollTop + elTop);
+ } else if (nodeHeight < elBottom) {
+ this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight));
+ }
+ },
+ bind: function() {
+ var that = this, onSelectableClick;
+ onSelectableClick = _.bind(this._onSelectableClick, this);
+ this.$node.on("click.tt", this.selectors.selectable, onSelectableClick);
+ _.each(this.datasets, function(dataset) {
+ dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that);
+ });
+ return this;
+ },
+ isOpen: function isOpen() {
+ return this.$node.hasClass(this.classes.open);
+ },
+ open: function open() {
+ this.$node.addClass(this.classes.open);
+ },
+ close: function close() {
+ this.$node.removeClass(this.classes.open);
+ this._removeCursor();
+ },
+ setLanguageDirection: function setLanguageDirection(dir) {
+ this.$node.attr("dir", dir);
+ },
+ selectableRelativeToCursor: function selectableRelativeToCursor(delta) {
+ var $selectables, $oldCursor, oldIndex, newIndex;
+ $oldCursor = this.getActiveSelectable();
+ $selectables = this._getSelectables();
+ oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1;
+ newIndex = oldIndex + delta;
+ newIndex = (newIndex + 1) % ($selectables.length + 1) - 1;
+ newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex;
+ return newIndex === -1 ? null : $selectables.eq(newIndex);
+ },
+ setCursor: function setCursor($selectable) {
+ this._removeCursor();
+ if ($selectable = $selectable && $selectable.first()) {
+ $selectable.addClass(this.classes.cursor);
+ this._ensureVisible($selectable);
+ }
+ },
+ getSelectableData: function getSelectableData($el) {
+ return $el && $el.length ? Dataset.extractData($el) : null;
+ },
+ getActiveSelectable: function getActiveSelectable() {
+ var $selectable = this._getSelectables().filter(this.selectors.cursor).first();
+ return $selectable.length ? $selectable : null;
+ },
+ getTopSelectable: function getTopSelectable() {
+ var $selectable = this._getSelectables().first();
+ return $selectable.length ? $selectable : null;
+ },
+ update: function update(query) {
+ var isValidUpdate = query !== this.query;
+ if (isValidUpdate) {
+ this.query = query;
+ _.each(this.datasets, updateDataset);
+ }
+ return isValidUpdate;
+ function updateDataset(dataset) {
+ dataset.update(query);
+ }
+ },
+ empty: function empty() {
+ _.each(this.datasets, clearDataset);
+ this.query = null;
+ this.$node.addClass(this.classes.empty);
+ function clearDataset(dataset) {
+ dataset.clear();
+ }
+ },
+ destroy: function destroy() {
+ this.$node.off(".tt");
+ this.$node = $("<div>");
+ _.each(this.datasets, destroyDataset);
+ function destroyDataset(dataset) {
+ dataset.destroy();
+ }
+ }
+ });
+ return Menu;
+ }();
+ var DefaultMenu = function() {
+ "use strict";
+ var s = Menu.prototype;
+ function DefaultMenu() {
+ Menu.apply(this, [].slice.call(arguments, 0));
+ }
+ _.mixin(DefaultMenu.prototype, Menu.prototype, {
+ open: function open() {
+ !this._allDatasetsEmpty() && this._show();
+ return s.open.apply(this, [].slice.call(arguments, 0));
+ },
+ close: function close() {
+ this._hide();
+ return s.close.apply(this, [].slice.call(arguments, 0));
+ },
+ _onRendered: function onRendered() {
+ if (this._allDatasetsEmpty()) {
+ this._hide();
+ } else {
+ this.isOpen() && this._show();
+ }
+ return s._onRendered.apply(this, [].slice.call(arguments, 0));
+ },
+ _onCleared: function onCleared() {
+ if (this._allDatasetsEmpty()) {
+ this._hide();
+ } else {
+ this.isOpen() && this._show();
+ }
+ return s._onCleared.apply(this, [].slice.call(arguments, 0));
+ },
+ setLanguageDirection: function setLanguageDirection(dir) {
+ this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl);
+ return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0));
+ },
+ _hide: function hide() {
+ this.$node.hide();
+ },
+ _show: function show() {
+ this.$node.css("display", "block");
+ }
+ });
+ return DefaultMenu;
+ }();
+ var Typeahead = function() {
+ "use strict";
+ function Typeahead(o, www) {
+ var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged;
+ o = o || {};
+ if (!o.input) {
+ $.error("missing input");
+ }
+ if (!o.menu) {
+ $.error("missing menu");
+ }
+ if (!o.eventBus) {
+ $.error("missing event bus");
+ }
+ www.mixin(this);
+ this.eventBus = o.eventBus;
+ this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;
+ this.input = o.input;
+ this.menu = o.menu;
+ this.enabled = true;
+ this.active = false;
+ this.input.hasFocus() && this.activate();
+ this.dir = this.input.getLangDir();
+ this._hacks();
+ this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this);
+ onFocused = c(this, "activate", "open", "_onFocused");
+ onBlurred = c(this, "deactivate", "_onBlurred");
+ onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed");
+ onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed");
+ onEscKeyed = c(this, "isActive", "_onEscKeyed");
+ onUpKeyed = c(this, "isActive", "open", "_onUpKeyed");
+ onDownKeyed = c(this, "isActive", "open", "_onDownKeyed");
+ onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed");
+ onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed");
+ onQueryChanged = c(this, "_openIfActive", "_onQueryChanged");
+ onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged");
+ this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this);
+ }
+ _.mixin(Typeahead.prototype, {
+ _hacks: function hacks() {
+ var $input, $menu;
+ $input = this.input.$input || $("<div>");
+ $menu = this.menu.$node || $("<div>");
+ $input.on("blur.tt", function($e) {
+ var active, isActive, hasActive;
+ active = document.activeElement;
+ isActive = $menu.is(active);
+ hasActive = $menu.has(active).length > 0;
+ if (_.isMsie() && (isActive || hasActive)) {
+ $e.preventDefault();
+ $e.stopImmediatePropagation();
+ _.defer(function() {
+ $input.focus();
+ });
+ }
+ });
+ $menu.on("mousedown.tt", function($e) {
+ $e.preventDefault();
+ });
+ },
+ _onSelectableClicked: function onSelectableClicked(type, $el) {
+ this.select($el);
+ },
+ _onDatasetCleared: function onDatasetCleared() {
+ this._updateHint();
+ },
+ _onDatasetRendered: function onDatasetRendered(type, dataset, suggestions, async) {
+ this._updateHint();
+ this.eventBus.trigger("render", suggestions, async, dataset);
+ },
+ _onAsyncRequested: function onAsyncRequested(type, dataset, query) {
+ this.eventBus.trigger("asyncrequest", query, dataset);
+ },
+ _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {
+ this.eventBus.trigger("asynccancel", query, dataset);
+ },
+ _onAsyncReceived: function onAsyncReceived(type, dataset, query) {
+ this.eventBus.trigger("asyncreceive", query, dataset);
+ },
+ _onFocused: function onFocused() {
+ this._minLengthMet() && this.menu.update(this.input.getQuery());
+ },
+ _onBlurred: function onBlurred() {
+ if (this.input.hasQueryChangedSinceLastFocus()) {
+ this.eventBus.trigger("change", this.input.getQuery());
+ }
+ },
+ _onEnterKeyed: function onEnterKeyed(type, $e) {
+ var $selectable;
+ if ($selectable = this.menu.getActiveSelectable()) {
+ this.select($selectable) && $e.preventDefault();
+ }
+ },
+ _onTabKeyed: function onTabKeyed(type, $e) {
+ var $selectable;
+ if ($selectable = this.menu.getActiveSelectable()) {
+ this.select($selectable) && $e.preventDefault();
+ } else if ($selectable = this.menu.getTopSelectable()) {
+ this.autocomplete($selectable) && $e.preventDefault();
+ }
+ },
+ _onEscKeyed: function onEscKeyed() {
+ this.close();
+ },
+ _onUpKeyed: function onUpKeyed() {
+ this.moveCursor(-1);
+ },
+ _onDownKeyed: function onDownKeyed() {
+ this.moveCursor(+1);
+ },
+ _onLeftKeyed: function onLeftKeyed() {
+ if (this.dir === "rtl" && this.input.isCursorAtEnd()) {
+ this.autocomplete(this.menu.getTopSelectable());
+ }
+ },
+ _onRightKeyed: function onRightKeyed() {
+ if (this.dir === "ltr" && this.input.isCursorAtEnd()) {
+ this.autocomplete(this.menu.getTopSelectable());
+ }
+ },
+ _onQueryChanged: function onQueryChanged(e, query) {
+ this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();
+ },
+ _onWhitespaceChanged: function onWhitespaceChanged() {
+ this._updateHint();
+ },
+ _onLangDirChanged: function onLangDirChanged(e, dir) {
+ if (this.dir !== dir) {
+ this.dir = dir;
+ this.menu.setLanguageDirection(dir);
+ }
+ },
+ _openIfActive: function openIfActive() {
+ this.isActive() && this.open();
+ },
+ _minLengthMet: function minLengthMet(query) {
+ query = _.isString(query) ? query : this.input.getQuery() || "";
+ return query.length >= this.minLength;
+ },
+ _updateHint: function updateHint() {
+ var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;
+ $selectable = this.menu.getTopSelectable();
+ data = this.menu.getSelectableData($selectable);
+ val = this.input.getInputValue();
+ if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {
+ query = Input.normalizeQuery(val);
+ escapedQuery = _.escapeRegExChars(query);
+ frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i");
+ match = frontMatchRegEx.exec(data.val);
+ match && this.input.setHint(val + match[1]);
+ } else {
+ this.input.clearHint();
+ }
+ },
+ isEnabled: function isEnabled() {
+ return this.enabled;
+ },
+ enable: function enable() {
+ this.enabled = true;
+ },
+ disable: function disable() {
+ this.enabled = false;
+ },
+ isActive: function isActive() {
+ return this.active;
+ },
+ activate: function activate() {
+ if (this.isActive()) {
+ return true;
+ } else if (!this.isEnabled() || this.eventBus.before("active")) {
+ return false;
+ } else {
+ this.active = true;
+ this.eventBus.trigger("active");
+ return true;
+ }
+ },
+ deactivate: function deactivate() {
+ if (!this.isActive()) {
+ return true;
+ } else if (this.eventBus.before("idle")) {
+ return false;
+ } else {
+ this.active = false;
+ this.close();
+ this.eventBus.trigger("idle");
+ return true;
+ }
+ },
+ isOpen: function isOpen() {
+ return this.menu.isOpen();
+ },
+ open: function open() {
+ if (!this.isOpen() && !this.eventBus.before("open")) {
+ this.menu.open();
+ this._updateHint();
+ this.eventBus.trigger("open");
+ }
+ return this.isOpen();
+ },
+ close: function close() {
+ if (this.isOpen() && !this.eventBus.before("close")) {
+ this.menu.close();
+ this.input.clearHint();
+ this.input.resetInputValue();
+ this.eventBus.trigger("close");
+ }
+ return !this.isOpen();
+ },
+ setVal: function setVal(val) {
+ this.input.setQuery(_.toStr(val));
+ },
+ getVal: function getVal() {
+ return this.input.getQuery();
+ },
+ select: function select($selectable) {
+ var data = this.menu.getSelectableData($selectable);
+ if (data && !this.eventBus.before("select", data.obj)) {
+ this.input.setQuery(data.val, true);
+ this.eventBus.trigger("select", data.obj);
+ this.close();
+ return true;
+ }
+ return false;
+ },
+ autocomplete: function autocomplete($selectable) {
+ var query, data, isValid;
+ query = this.input.getQuery();
+ data = this.menu.getSelectableData($selectable);
+ isValid = data && query !== data.val;
+ if (isValid && !this.eventBus.before("autocomplete", data.obj)) {
+ this.input.setQuery(data.val);
+ this.eventBus.trigger("autocomplete", data.obj);
+ return true;
+ }
+ return false;
+ },
+ moveCursor: function moveCursor(delta) {
+ var query, $candidate, data, payload, cancelMove;
+ query = this.input.getQuery();
+ $candidate = this.menu.selectableRelativeToCursor(delta);
+ data = this.menu.getSelectableData($candidate);
+ payload = data ? data.obj : null;
+ cancelMove = this._minLengthMet() && this.menu.update(query);
+ if (!cancelMove && !this.eventBus.before("cursorchange", payload)) {
+ this.menu.setCursor($candidate);
+ if (data) {
+ this.input.setInputValue(data.val);
+ } else {
+ this.input.resetInputValue();
+ this._updateHint();
+ }
+ this.eventBus.trigger("cursorchange", payload);
+ return true;
+ }
+ return false;
+ },
+ destroy: function destroy() {
+ this.input.destroy();
+ this.menu.destroy();
+ }
+ });
+ return Typeahead;
+ function c(ctx) {
+ var methods = [].slice.call(arguments, 1);
+ return function() {
+ var args = [].slice.call(arguments);
+ _.each(methods, function(method) {
+ return ctx[method].apply(ctx, args);
+ });
+ };
+ }
+ }();
+ (function() {
+ "use strict";
+ var old, keys, methods;
+ old = $.fn.typeahead;
+ keys = {
+ www: "tt-www",
+ attrs: "tt-attrs",
+ typeahead: "tt-typeahead"
+ };
+ methods = {
+ initialize: function initialize(o, datasets) {
+ var www;
+ datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);
+ o = o || {};
+ www = WWW(o.classNames);
+ return this.each(attach);
+ function attach() {
+ var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, typeahead, MenuConstructor;
+ _.each(datasets, function(d) {
+ d.highlight = !!o.highlight;
+ });
+ $input = $(this);
+ $wrapper = $(www.html.wrapper);
+ $hint = $elOrNull(o.hint);
+ $menu = $elOrNull(o.menu);
+ defaultHint = o.hint !== false && !$hint;
+ defaultMenu = o.menu !== false && !$menu;
+ defaultHint && ($hint = buildHintFromInput($input, www));
+ defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));
+ $hint && $hint.val("");
+ $input = prepInput($input, www);
+ if (defaultHint || defaultMenu) {
+ $wrapper.css(www.css.wrapper);
+ $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint)
+ $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);
+ }
+ MenuConstructor = defaultMenu ? DefaultMenu : Menu;
+ eventBus = new EventBus({
+ el: $input
+ });
+ input = new Input({
+ hint: $hint,
+ input: $input
+ }, www);
+ menu = new MenuConstructor({
+ node: $menu,
+ datasets: datasets
+ }, www);
+ typeahead = new Typeahead({
+ input: input,
+ menu: menu,
+ eventBus: eventBus,
+ minLength: o.minLength
+ }, www);
+ $input.data(keys.www, www);
+ $input.data(keys.typeahead, typeahead);
+ }
+ },
+ isEnabled: function isEnabled() {
+ var enabled;
+ ttEach(this.first(), function(t) {
+ enabled = t.isEnabled();
+ });
+ return enabled;
+ },
+ enable: function enable() {
+ ttEach(this, function(t) {
+ t.enable();
+ });
+ return this;
+ },
+ disable: function disable() {
+ ttEach(this, function(t) {
+ t.disable();
+ });
+ return this;
+ },
+ isActive: function isActive() {
+ var active;
+ ttEach(this.first(), function(t) {
+ active = t.isActive();
+ });
+ return active;
+ },
+ activate: function activate() {
+ ttEach(this, function(t) {
+ t.activate();
+ });
+ return this;
+ },
+ deactivate: function deactivate() {
+ ttEach(this, function(t) {
+ t.deactivate();
+ });
+ return this;
+ },
+ isOpen: function isOpen() {
+ var open;
+ ttEach(this.first(), function(t) {
+ open = t.isOpen();
+ });
+ return open;
+ },
+ open: function open() {
+ ttEach(this, function(t) {
+ t.open();
+ });
+ return this;
+ },
+ close: function close() {
+ ttEach(this, function(t) {
+ t.close();
+ });
+ return this;
+ },
+ select: function select(el) {
+ var success = false, $el = $(el);
+ ttEach(this.first(), function(t) {
+ success = t.select($el);
+ });
+ return success;
+ },
+ autocomplete: function autocomplete(el) {
+ var success = false, $el = $(el);
+ ttEach(this.first(), function(t) {
+ success = t.autocomplete($el);
+ });
+ return success;
+ },
+ moveCursor: function moveCursoe(delta) {
+ var success = false;
+ ttEach(this.first(), function(t) {
+ success = t.moveCursor(delta);
+ });
+ return success;
+ },
+ val: function val(newVal) {
+ var query;
+ if (!arguments.length) {
+ ttEach(this.first(), function(t) {
+ query = t.getVal();
+ });
+ return query;
+ } else {
+ ttEach(this, function(t) {
+ t.setVal(newVal);
+ });
+ return this;
+ }
+ },
+ destroy: function destroy() {
+ ttEach(this, function(typeahead, $input) {
+ revert($input);
+ typeahead.destroy();
+ });
+ return this;
+ }
+ };
+ $.fn.typeahead = function(method) {
+ if (methods[method]) {
+ return methods[method].apply(this, [].slice.call(arguments, 1));
+ } else {
+ return methods.initialize.apply(this, arguments);
+ }
+ };
+ $.fn.typeahead.noConflict = function noConflict() {
+ $.fn.typeahead = old;
+ return this;
+ };
+ function ttEach($els, fn) {
+ $els.each(function() {
+ var $input = $(this), typeahead;
+ (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);
+ });
+ }
+ function buildHintFromInput($input, www) {
+ return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop("readonly", true).removeAttr("id name placeholder required").attr({
+ autocomplete: "off",
+ spellcheck: "false",
+ tabindex: -1
+ });
+ }
+ function prepInput($input, www) {
+ $input.data(keys.attrs, {
+ dir: $input.attr("dir"),
+ autocomplete: $input.attr("autocomplete"),
+ spellcheck: $input.attr("spellcheck"),
+ style: $input.attr("style")
+ });
+ $input.addClass(www.classes.input).attr({
+ autocomplete: "off",
+ spellcheck: false
+ });
+ try {
+ !$input.attr("dir") && $input.attr("dir", "auto");
+ } catch (e) {}
+ return $input;
+ }
+ function getBackgroundStyles($el) {
+ return {
+ backgroundAttachment: $el.css("background-attachment"),
+ backgroundClip: $el.css("background-clip"),
+ backgroundColor: $el.css("background-color"),
+ backgroundImage: $el.css("background-image"),
+ backgroundOrigin: $el.css("background-origin"),
+ backgroundPosition: $el.css("background-position"),
+ backgroundRepeat: $el.css("background-repeat"),
+ backgroundSize: $el.css("background-size")
+ };
+ }
+ function revert($input) {
+ var www, $wrapper;
+ www = $input.data(keys.www);
+ $wrapper = $input.parent().filter(www.selectors.wrapper);
+ _.each($input.data(keys.attrs), function(val, key) {
+ _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);
+ });
+ $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);
+ if ($wrapper.length) {
+ $input.detach().insertAfter($wrapper);
+ $wrapper.remove();
+ }
+ }
+ function $elOrNull(obj) {
+ var isValid, $el;
+ isValid = _.isJQuery(obj) || _.isElement(obj);
+ $el = isValid ? $(obj).first() : [];
+ return $el.length ? $el : null;
+ }
+ })();
+});
+/*
+ * bag.js - js/css/other loader + kv storage
+ *
+ * Copyright 2013-2014 Vitaly Puzrin
+ * https://github.com/nodeca/bag.js
+ *
+ * License MIT
+ */
+
+/*global define*/
+
+(function (root, factory) {
+ 'use strict';
+
+ if (typeof define === 'function' && define.amd) {
+ define(factory);
+ } else if (typeof module === 'object' && typeof module.exports === 'object') {
+ module.exports = factory();
+ } else {
+ root.Bag = factory();
+ }
+} (this, function () {
+ 'use strict';
+
+ var head = document.head || document.getElementsByTagName('head')[0];
+
+ //////////////////////////////////////////////////////////////////////////////
+ // helpers
+
+ function _nope() { return; }
+
+ function _isString(obj) {
+ return Object.prototype.toString.call(obj) === '[object String]';
+ }
+
+ var _isArray = Array.isArray || function isArray(obj) {
+ return Object.prototype.toString.call(obj) === '[object Array]';
+ };
+
+ function _isFunction(obj) {
+ return Object.prototype.toString.call(obj) === '[object Function]';
+ }
+
+ function _each(obj, iterator) {
+ if (_isArray(obj)) {
+ if (obj.forEach) {
+ return obj.forEach(iterator);
+ }
+ for (var i = 0; i < obj.length; i++) {
+ iterator(obj[i], i, obj);
+ }
+ } else {
+ for (var k in obj) {
+ if (Object.prototype.hasOwnProperty.call(obj, k)) {
+ iterator(obj[k], k);
+ }
+ }
+ }
+ }
+
+ function _default(obj, src) {
+ // extend obj with src properties if not exists;
+ _each(src, function (val, key) {
+ if (!obj[key]) { obj[key] = src[key]; }
+ });
+ }
+
+
+ function _asyncEach(arr, iterator, callback) {
+ callback = callback || _nope;
+ if (!arr.length) { return callback(); }
+
+ var completed = 0;
+ _each(arr, function (x) {
+ iterator(x, function (err) {
+ if (err) {
+ callback(err);
+ callback = _nope;
+ } else {
+ completed += 1;
+ if (completed >= arr.length) {
+ callback();
+ }
+ }
+ });
+ });
+ }
+
+
+ //////////////////////////////////////////////////////////////////////////////
+ // Adapters for Store class
+
+ function DomStorage(namespace) {
+ var self = this;
+ var _ns = namespace + '__';
+ var _storage = localStorage;
+
+
+ this.init = function (callback) {
+ callback();
+ };
+
+
+ this.remove = function (key, callback) {
+ callback = callback || _nope;
+ _storage.removeItem(_ns + key);
+ callback();
+ };
+
+
+ this.set = function (key, value, expire, callback) {
+ var obj = {
+ value: value,
+ expire: expire
+ };
+
+ var err;
+
+ try {
+ _storage.setItem(_ns + key, JSON.stringify(obj));
+ } catch (e) {
+ // On quota error try to reset storage & try again.
+ // Just remove all keys, without conditions, no optimizations needed.
+ if (e.name.toUpperCase().indexOf('QUOTA') >= 0) {
+ try {
+ _each(_storage, function (val, name) {
+ var k = name.split(_ns)[1];
+ if (k) { self.remove(k); }
+ });
+ _storage.setItem(_ns + key, JSON.stringify(obj));
+ } catch (e2) {
+ err = e2;
+ }
+ } else {
+ err = e;
+ }
+ }
+
+ callback(err);
+ };
+
+
+ this.get = function (key, raw, callback) {
+ if (_isFunction(raw)) {
+ callback = raw;
+ raw = false;
+ }
+
+ var err, data;
+
+ try {
+ data = JSON.parse(_storage.getItem(_ns + key));
+ data = raw ? data : data.value;
+ } catch (e) {
+ err = new Error('Can\'t read key: ' + key);
+ }
+
+ callback(err, data);
+ };
+
+
+ this.clear = function (expiredOnly, callback) {
+ var now = +new Date();
+
+ _each(_storage, function (val, name) {
+ var key = name.split(_ns)[1];
+
+ if (!key) { return; }
+
+ if (!expiredOnly) {
+ self.remove(key);
+ return;
+ }
+
+ var raw;
+ self.get(key, true, function (__, data) {
+ raw = data; // can use this hack, because get is sync;
+ });
+ if (raw && (raw.expire > 0) && ((raw.expire - now) < 0)) {
+ self.remove(key);
+ }
+ });
+
+ callback();
+ };
+ }
+
+
+ DomStorage.prototype.exists = function () {
+ try {
+ localStorage.setItem('__ls_test__', '__ls_test__');
+ localStorage.removeItem('__ls_test__');
+ return true;
+ } catch (e) {
+ return false;
+ }
+ };
+
+
+
+ function WebSql(namespace) {
+ var db;
+
+
+ this.init = function (callback) {
+ db = window.openDatabase(namespace, '1.0', 'bag.js db', 2e5);
+
+ if (!db) { return callback('Can\'t open webdql database'); }
+
+ db.transaction(function (tx) {
+ tx.executeSql(
+ 'CREATE TABLE IF NOT EXISTS kv (key TEXT PRIMARY KEY, value TEXT, expire INTEGER KEY)',
+ [],
+ function () { return callback(); },
+ function (tx, err) { return callback(err); }
+ );
+ });
+ };
+
+
+ this.remove = function (key, callback) {
+ callback = callback || _nope;
+ db.transaction(function (tx) {
+ tx.executeSql(
+ 'DELETE FROM kv WHERE key = ?',
+ [ key ],
+ function () { return callback(); },
+ function (tx, err) { return callback(err); }
+ );
+ });
+ };
+
+
+ this.set = function (key, value, expire, callback) {
+ db.transaction(function (tx) {
+ tx.executeSql(
+ 'INSERT OR REPLACE INTO kv (key, value, expire) VALUES (?, ?, ?)',
+ [ key, JSON.stringify(value), expire ],
+ function () { return callback(); },
+ function (tx, err) { return callback(err); }
+ );
+ });
+ };
+
+
+ this.get = function (key, callback) {
+ db.readTransaction(function (tx) {
+ tx.executeSql(
+ 'SELECT value FROM kv WHERE key = ?',
+ [ key ],
+ function (tx, result) {
+ if (result.rows.length === 0) {
+ return callback(new Error('key not found: ' + key));
+ }
+ var value = result.rows.item(0).value;
+ var err, data;
+ try {
+ data = JSON.parse(value);
+ } catch (e) {
+ err = new Error('Can\'t unserialise data: ' + value);
+ }
+ callback(err, data);
+ },
+ function (tx, err) { return callback(err); }
+ );
+ });
+ };
+
+
+ this.clear = function (expiredOnly, callback) {
+
+ db.transaction(function (tx) {
+ if (expiredOnly) {
+ tx.executeSql(
+ 'DELETE FROM kv WHERE expire > 0 AND expire < ?',
+ [ +new Date() ],
+ function () { return callback(); },
+ function (tx, err) { return callback(err); }
+ );
+ } else {
+ db.transaction(function (tx) {
+ tx.executeSql(
+ 'DELETE FROM kv',
+ [],
+ function () { return callback(); },
+ function (tx, err) { return callback(err); }
+ );
+ });
+ }
+ });
+ };
+ }
+
+
+ WebSql.prototype.exists = function () {
+ return (!!window.openDatabase);
+ };
+
+
+
+ function Idb(namespace) {
+ var db;
+
+ this.init = function (callback) {
+ var idb = this.idb = window.indexedDB; /* || window.webkitIndexedDB ||
+ window.mozIndexedDB || window.msIndexedDB;*/
+
+ var req = idb.open(namespace, 2 /*version*/);
+
+ req.onsuccess = function (e) {
+ db = e.target.result;
+ callback();
+ };
+ req.onblocked = function (e) {
+ callback(new Error('IndexedDB blocked. ' + e.target.errorCode));
+ };
+ req.onerror = function (e) {
+ callback(new Error('IndexedDB opening error. ' + e.target.errorCode));
+ };
+ req.onupgradeneeded = function (e) {
+ db = e.target.result;
+ if (db.objectStoreNames.contains('kv')) {
+ db.deleteObjectStore('kv');
+ }
+ var store = db.createObjectStore('kv', { keyPath: 'key' });
+ store.createIndex('expire', 'expire', { unique: false });
+ };
+ };
+
+
+ this.remove = function (key, callback) {
+ var tx = db.transaction('kv', 'readwrite');
+
+ tx.oncomplete = function () { callback(); };
+ tx.onerror = tx.onabort = function (e) { callback(new Error('Key remove error: ', e.target)); };
+
+ // IE 8 not allow to use reserved keywords as functions. More info:
+ // http://tiffanybbrown.com/2013/09/10/expected-identifier-bug-in-internet-exp…
+ tx.objectStore('kv')['delete'](key).onerror = function () { tx.abort(); };
+ };
+
+
+ this.set = function (key, value, expire, callback) {
+ var tx = db.transaction('kv', 'readwrite');
+
+ tx.oncomplete = function () { callback(); };
+ tx.onerror = tx.onabort = function (e) { callback(new Error('Key set error: ', e.target)); };
+
+ tx.objectStore('kv').put({
+ key: key,
+ value: value,
+ expire: expire
+ }).onerror = function () { tx.abort(); };
+ };
+
+
+ this.get = function (key, callback) {
+ var err, result;
+ var tx = db.transaction('kv');
+
+ tx.oncomplete = function () { callback(err, result); };
+ tx.onerror = tx.onabort = function (e) { callback(new Error('Key get error: ', e.target)); };
+
+ tx.objectStore('kv').get(key).onsuccess = function (e) {
+ if (e.target.result) {
+ result = e.target.result.value;
+ } else {
+ err = new Error('key not found: ' + key);
+ }
+ };
+ };
+
+
+ this.clear = function (expiredOnly, callback) {
+ var keyrange = window.IDBKeyRange; /* ||
+ window.webkitIDBKeyRange || window.msIDBKeyRange;*/
+ var tx, store;
+
+ tx = db.transaction('kv', 'readwrite');
+ store = tx.objectStore('kv');
+
+ tx.oncomplete = function () { callback(); };
+ tx.onerror = tx.onabort = function (e) { callback(new Error('Clear error: ', e.target)); };
+
+ if (expiredOnly) {
+
+ var cursor = store.index('expire').openCursor(keyrange.bound(1, +new Date()));
+
+ cursor.onsuccess = function (e) {
+ var _cursor = e.target.result;
+ if (_cursor) {
+ // IE 8 not allow to use reserved keywords as functions (`delete` and `continue`). More info:
+ // http://tiffanybbrown.com/2013/09/10/expected-identifier-bug-in-internet-exp…
+ store['delete'](_cursor.primaryKey).onerror = function () { tx.abort(); };
+ _cursor['continue']();
+ }
+ };
+
+ } else {
+ // Just clear everything
+ tx.objectStore('kv').clear().onerror = function () { tx.abort(); };
+ }
+ };
+ }
+
+
+ Idb.prototype.exists = function () {
+ var db = window.indexedDB /*||
+ window.webkitIndexedDB ||
+ window.mozIndexedDB ||
+ window.msIndexedDB*/;
+
+ if (!db) {
+ return false;
+ }
+
+ // Check outdated idb implementations, where `onupgradeneede` event doesn't work,
+ // see https://github.com/pouchdb/pouchdb/issues/1207 for more details
+ var dbName = '__idb_test__';
+ var result = db.open(dbName, 1).onupgradeneeded === null;
+
+ if (db.deleteDatabase) {
+ db.deleteDatabase(dbName);
+ }
+
+ return result;
+ };
+
+
+
+ /////////////////////////////////////////////////////////////////////////////
+ // key/value storage with expiration
+
+ var storeAdapters = {
+ indexeddb: Idb,
+ websql: WebSql,
+ localstorage: DomStorage
+ };
+
+
+ // namespace - db name or similar
+ // storesList - array of allowed adapter names to use
+ //
+ function Storage(namespace, storesList) {
+ var self = this;
+
+ var db = null;
+
+ // States of db init singletone process
+ // 'done' / 'progress' / 'failed' / undefined
+ var initState;
+ var initStack = [];
+
+ _each(storesList, function (name) {
+ // do storage names case insensitive
+ name = name.toLowerCase();
+
+ if (!storeAdapters[name]) {
+ throw new Error('Wrong storage adapter name: ' + name, storesList);
+ }
+
+ if (storeAdapters[name].prototype.exists() && !db) {
+ db = new storeAdapters[name](namespace);
+ return false; // terminate search on first success
+ }
+ });
+
+ if (!db) {
+ /* eslint-disable no-console */
+ // If no adaprets - don't make error for correct fallback.
+ // Just log that we continue work without storing results.
+ if (typeof console !== 'undefined' && console.log) {
+ console.log('None of requested storages available: ' + storesList);
+ }
+ /* eslint-enable no-console */
+ }
+
+
+ this.init = function (callback) {
+ if (!db) {
+ callback(new Error('No available db'));
+ return;
+ }
+
+ if (initState === 'done') {
+ callback();
+ return;
+ }
+
+ if (initState === 'progress') {
+ initStack.push(callback);
+ return;
+ }
+
+ initStack.push(callback);
+ initState = 'progress';
+
+ db.init(function (err) {
+ initState = !err ? 'done' : 'failed';
+ _each(initStack, function (cb) {
+ cb(err);
+ });
+ initStack = [];
+
+ // Clear expired. A bit dirty without callback,
+ // but we don't care until clear compleete
+ if (!err) { self.clear(true); }
+ });
+ };
+
+
+ this.set = function (key, value, expire, callback) {
+ if (_isFunction(expire)) {
+ callback = expire;
+ expire = null;
+ }
+ callback = callback || _nope;
+ expire = expire ? +(new Date()) + (expire * 1000) : 0;
+
+ this.init(function (err) {
+ if (err) { return callback(err); }
+ db.set(key, value, expire, callback);
+ });
+ };
+
+
+ this.get = function (key, callback) {
+ this.init(function (err) {
+ if (err) { return callback(err); }
+ db.get(key, callback);
+ });
+ };
+
+
+ this.remove = function (key, callback) {
+ callback = callback || _nope;
+ this.init(function (err) {
+ if (err) { return callback(err); }
+ db.remove(key, callback);
+ });
+ };
+
+
+ this.clear = function (expiredOnly, callback) {
+ if (_isFunction(expiredOnly)) {
+ callback = expiredOnly;
+ expiredOnly = false;
+ }
+ callback = callback || _nope;
+
+ this.init(function (err) {
+ if (err) { return callback(err); }
+ db.clear(expiredOnly, callback);
+ });
+ };
+ }
+
+
+ //////////////////////////////////////////////////////////////////////////////
+ // Bag class implementation
+
+ function Bag(options) {
+ if (!(this instanceof Bag)) { return new Bag(options); }
+
+ var self = this;
+
+ options = options || {};
+
+ this.prefix = options.prefix || 'bag';
+ this.timeout = options.timeout || 20; // 20 seconds
+ this.expire = options.expire || 30 * 24; // 30 days
+ this.isValidItem = options.isValidItem || null;
+
+ this.stores = _isArray(options.stores) ? options.stores : [ 'indexeddb', 'websql', 'localstorage' ];
+
+ var storage = null;
+
+ this._queue = [];
+ this._chained = false;
+
+ this._createStorage = function () {
+ if (!storage) { storage = new Storage(self.prefix, self.stores); }
+ };
+
+ function getUrl(url, callback) {
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', url);
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState === 4) {
+ if (xhr.status === 200) {
+ callback(null, {
+ content: xhr.responseText,
+ type: xhr.getResponseHeader('content-type')
+ });
+ callback = _nope;
+ } else {
+ callback(new Error('Can\'t open url ' + url +
+ (xhr.status ? xhr.statusText + ' (' + xhr.status + ')' : '')));
+ callback = _nope;
+ }
+ }
+ };
+
+ setTimeout(function () {
+ if (xhr.readyState < 4) {
+ xhr.abort();
+ callback(new Error('Timeout'));
+ callback = _nope;
+ }
+ }, self.timeout * 1000);
+
+ xhr.send();
+ }
+
+ function createCacheObj(obj, response) {
+ var cacheObj = {};
+
+ _each([ 'url', 'key', 'unique' ], function (key) {
+ if (obj[key]) { cacheObj[key] = obj[key]; }
+ });
+
+ var now = +new Date();
+ cacheObj.data = response.content;
+ cacheObj.originalType = response.type;
+ cacheObj.type = obj.type || response.type;
+ cacheObj.stamp = now;
+
+ return cacheObj;
+ }
+
+ function saveUrl(obj, callback) {
+ getUrl(obj.url_real, function (err, result) {
+ if (err) { return callback(err); }
+
+ var delay = (obj.expire || self.expire) * 60 * 60; // in seconds
+
+ var cached = createCacheObj(obj, result);
+
+ self.set(obj.key, cached, delay, function () {
+ // Don't check error - have to return data anyway
+ _default(obj, cached);
+ callback(null, obj);
+ });
+ });
+ }
+
+
+ function isCacheValid(cached, obj) {
+ return !cached ||
+ cached.expire - +new Date() < 0 ||
+ obj.unique !== cached.unique ||
+ obj.url !== cached.url ||
+ (self.isValidItem && !self.isValidItem(cached, obj));
+ }
+
+
+ function fetch(obj, callback) {
+
+ if (!obj.url) { return callback(); }
+ obj.key = (obj.key || obj.url);
+
+ self.get(obj.key, function (err_cache, cached) {
+
+ // Check error only on forced fetch from cache
+ if (err_cache && obj.cached) {
+ callback(err_cache);
+ return;
+ }
+
+ // if can't get object from store, then just load it from web.
+ obj.execute = (obj.execute !== false);
+ var shouldFetch = !!err_cache || isCacheValid(cached, obj);
+
+ // If don't have to load new date - return one from cache
+ if (!obj.live && !shouldFetch) {
+ obj.type = obj.type || cached.originalType;
+ _default(obj, cached);
+ callback(null, obj);
+ return;
+ }
+
+ // calculate loading url
+ obj.url_real = obj.url;
+ if (obj.unique) {
+ // set parameter to prevent browser cache
+ obj.url_real = obj.url + ((obj.url.indexOf('?') > 0) ? '&' : '?') + 'bag-unique=' + obj.unique;
+ }
+
+ saveUrl(obj, function (err_load) {
+ if (err_cache && err_load) {
+ callback(err_load);
+ return;
+ }
+
+ if (err_load) {
+ obj.type = obj.type || cached.originalType;
+ _default(obj, cached);
+ callback(null, obj);
+ return;
+ }
+
+ callback(null, obj);
+ });
+ });
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ // helpers to set absolute sourcemap url
+
+ /* eslint-disable max-len */
+ var sourceMappingRe = /(?:^([ \t]*\/\/[@|#][ \t]+sourceMappingURL=)(.+?)([ \t]*)$)|(?:^([ \t]*\/\*[@#][ \t]+sourceMappingURL=)(.+?)([ \t]*\*\/[ \t])*$)/mg;
+ /* eslint-enable max-len */
+
+ function parse_url(url) {
+ var pattern = new RegExp('^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?');
+ var matches = url.match(pattern);
+ return {
+ scheme: matches[2],
+ authority: matches[4],
+ path: matches[5],
+ query: matches[7],
+ fragment: matches[9]
+ };
+ }
+
+ function patchMappingUrl(obj) {
+ var refUrl = parse_url(obj.url);
+ var done = false;
+ var res = obj.data.replace(sourceMappingRe, function (match, p1, p2, p3, p4, p5, p6) {
+ if (!match) { return null; }
+ done = true;
+ // select matched group of params
+ if (!p1) { p1 = p4; p2 = p5; p3 = p6; }
+ var mapUrl = parse_url(p2);
+
+ var scheme = (mapUrl.scheme ? mapUrl.scheme : refUrl.scheme) || window.location.protocol.slice(0, -1);
+ var authority = (mapUrl.authority ? mapUrl.authority : refUrl.authority) || window.location.host;
+ /* eslint-disable max-len */
+ var path = mapUrl.path[0] === '/' ? mapUrl.path : refUrl.path.split('/').slice(0, -1).join('/') + '/' + mapUrl.path;
+ /* eslint-enable max-len */
+ return p1 + (scheme + '://' + authority + path) + p3;
+ });
+ return done ? res : '';
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ var handlers = {
+ 'application/javascript': function injectScript(obj) {
+ var script = document.createElement('script'), txt;
+
+ // try to change sourcemap address to absolute
+ txt = patchMappingUrl(obj);
+ if (!txt) {
+ // or add script name for dev tools
+ txt = obj.data + '\n//# sourceURL=' + obj.url;
+ }
+
+ // Have to use .text, since we support IE8,
+ // which won't allow appending to a script
+ script.text = txt;
+ head.appendChild(script);
+ return;
+ },
+
+ 'text/css': function injectStyle(obj) {
+ var style = document.createElement('style'), txt;
+
+ // try to change sourcemap address to absolute
+ txt = patchMappingUrl(obj);
+ if (!txt) {
+ // or add stylesheet script name for dev tools
+ txt = obj.data + '\n/*# sourceURL=' + obj.url + ' */';
+ }
+
+ // Needed to enable `style.styleSheet` in IE
+ style.setAttribute('type', 'text/css');
+
+ if (style.styleSheet) {
+ // We should append style element to DOM before assign css text to
+ // workaround IE bugs with `@import` and `@font-face`.
+ // https://github.com/andrewwakeling/ie-css-bugs
+ head.appendChild(style);
+
+ style.styleSheet.cssText = txt; // IE method
+ } else {
+ style.appendChild(document.createTextNode(txt)); // others
+ head.appendChild(style);
+ }
+
+ return;
+ }
+ };
+
+
+ function execute(obj) {
+ if (!obj.type) { return; }
+
+ // Cut off encoding if exists:
+ // application/javascript; charset=UTF-8
+ var handlerName = obj.type.split(';')[0];
+
+ // Fix outdated mime types if needed, to use single handler
+ if (handlerName === 'application/x-javascript' || handlerName === 'text/javascript') {
+ handlerName = 'application/javascript';
+ }
+
+ if (handlers[handlerName]) {
+ handlers[handlerName](obj);
+ }
+ return;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ //
+ // Public methods
+ //
+
+ this.require = function (resources, callback) {
+ var queue = self._queue;
+
+ if (_isFunction(resources)) {
+ callback = resources;
+ resources = null;
+ }
+
+ if (resources) {
+ var res = _isArray(resources) ? resources : [ resources ];
+
+ // convert string urls to structures
+ // and push to queue
+ _each(res, function (r, i) {
+ if (_isString(r)) { res[i] = { url: r }; }
+ queue.push(res[i]);
+ });
+ }
+
+ self._createStorage();
+
+ if (!callback) {
+ self._chained = true;
+ return self;
+ }
+
+ _asyncEach(queue, fetch, function (err) {
+ if (err) {
+ // cleanup
+ self._chained = false;
+ self._queue = [];
+
+ callback(err);
+ return;
+ }
+
+ _each(queue, function (obj) {
+ if (obj.execute) {
+ execute(obj);
+ }
+ });
+
+ // return content only, if one need fuul info -
+ // check input object, that will be extended.
+ var replies = [];
+ _each(queue, function (r) { replies.push(r.data); });
+
+ var result = (_isArray(resources) || self._chained) ? replies : replies[0];
+
+ // cleanup
+ self._chained = false;
+ self._queue = [];
+
+ callback(null, result);
+ });
+ };
+
+
+ // Create proxy methods (init store then subcall)
+ _each([ 'remove', 'get', 'set', 'clear' ], function (method) {
+ self[method] = function () {
+ self._createStorage();
+ storage[method].apply(storage, arguments);
+ };
+ });
+
+
+ this.addHandler = function (types, handler) {
+ types = _isArray(types) ? types : [ types ];
+ _each(types, function (type) { handlers[type] = handler; });
+ };
+
+
+ this.removeHandler = function (types) {
+ self.addHandler(types/*, undefined*/);
+ };
+ }
+
+ return Bag;
+
+}));
diff --git a/ui/new-ui-samples/js/vendor/bootstrap.js b/ui/new-ui-samples/js/vendor/bootstrap.js
new file mode 100644
index 0000000..c99fc77
--- /dev/null
+++ b/ui/new-ui-samples/js/vendor/bootstrap.js
@@ -0,0 +1,2345 @@
+/* ========================================================================
+ * Bootstrap: affix.js v3.3.5
+ * http://getbootstrap.com/javascript/#affix
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // AFFIX CLASS DEFINITION
+ // ======================
+
+ var Affix = function (element, options) {
+ this.options = $.extend({}, Affix.DEFAULTS, options)
+
+ this.$target = $(this.options.target)
+ .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
+ .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
+
+ this.$element = $(element)
+ this.affixed = null
+ this.unpin = null
+ this.pinnedOffset = null
+
+ this.checkPosition()
+ }
+
+ Affix.VERSION = '3.3.5'
+
+ Affix.RESET = 'affix affix-top affix-bottom'
+
+ Affix.DEFAULTS = {
+ offset: 0,
+ target: window
+ }
+
+ Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ var targetHeight = this.$target.height()
+
+ if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
+
+ if (this.affixed == 'bottom') {
+ if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
+ return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
+ }
+
+ var initializing = this.affixed == null
+ var colliderTop = initializing ? scrollTop : position.top
+ var colliderHeight = initializing ? targetHeight : height
+
+ if (offsetTop != null && scrollTop <= offsetTop) return 'top'
+ if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
+
+ return false
+ }
+
+ Affix.prototype.getPinnedOffset = function () {
+ if (this.pinnedOffset) return this.pinnedOffset
+ this.$element.removeClass(Affix.RESET).addClass('affix')
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ return (this.pinnedOffset = position.top - scrollTop)
+ }
+
+ Affix.prototype.checkPositionWithEventLoop = function () {
+ setTimeout($.proxy(this.checkPosition, this), 1)
+ }
+
+ Affix.prototype.checkPosition = function () {
+ if (!this.$element.is(':visible')) return
+
+ var height = this.$element.height()
+ var offset = this.options.offset
+ var offsetTop = offset.top
+ var offsetBottom = offset.bottom
+ var scrollHeight = Math.max($(document).height(), $(document.body).height())
+
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
+ if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
+
+ var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
+
+ if (this.affixed != affix) {
+ if (this.unpin != null) this.$element.css('top', '')
+
+ var affixType = 'affix' + (affix ? '-' + affix : '')
+ var e = $.Event(affixType + '.bs.affix')
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ this.affixed = affix
+ this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
+
+ this.$element
+ .removeClass(Affix.RESET)
+ .addClass(affixType)
+ .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
+ }
+
+ if (affix == 'bottom') {
+ this.$element.offset({
+ top: scrollHeight - height - offsetBottom
+ })
+ }
+ }
+
+
+ // AFFIX PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.affix')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.affix
+
+ $.fn.affix = Plugin
+ $.fn.affix.Constructor = Affix
+
+
+ // AFFIX NO CONFLICT
+ // =================
+
+ $.fn.affix.noConflict = function () {
+ $.fn.affix = old
+ return this
+ }
+
+
+ // AFFIX DATA-API
+ // ==============
+
+ $(window).on('load', function () {
+ $('[data-spy="affix"]').each(function () {
+ var $spy = $(this)
+ var data = $spy.data()
+
+ data.offset = data.offset || {}
+
+ if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
+ if (data.offsetTop != null) data.offset.top = data.offsetTop
+
+ Plugin.call($spy, data)
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: alert.js v3.3.5
+ * http://getbootstrap.com/javascript/#alerts
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // ALERT CLASS DEFINITION
+ // ======================
+
+ var dismiss = '[data-dismiss="alert"]'
+ var Alert = function (el) {
+ $(el).on('click', dismiss, this.close)
+ }
+
+ Alert.VERSION = '3.3.5'
+
+ Alert.TRANSITION_DURATION = 150
+
+ Alert.prototype.close = function (e) {
+ var $this = $(this)
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = $(selector)
+
+ if (e) e.preventDefault()
+
+ if (!$parent.length) {
+ $parent = $this.closest('.alert')
+ }
+
+ $parent.trigger(e = $.Event('close.bs.alert'))
+
+ if (e.isDefaultPrevented()) return
+
+ $parent.removeClass('in')
+
+ function removeElement() {
+ // detach from parent, fire event then clean up data
+ $parent.detach().trigger('closed.bs.alert').remove()
+ }
+
+ $.support.transition && $parent.hasClass('fade') ?
+ $parent
+ .one('bsTransitionEnd', removeElement)
+ .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
+ removeElement()
+ }
+
+
+ // ALERT PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.alert')
+
+ if (!data) $this.data('bs.alert', (data = new Alert(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ var old = $.fn.alert
+
+ $.fn.alert = Plugin
+ $.fn.alert.Constructor = Alert
+
+
+ // ALERT NO CONFLICT
+ // =================
+
+ $.fn.alert.noConflict = function () {
+ $.fn.alert = old
+ return this
+ }
+
+
+ // ALERT DATA-API
+ // ==============
+
+ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: dropdown.js v3.3.5
+ * http://getbootstrap.com/javascript/#dropdowns
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // DROPDOWN CLASS DEFINITION
+ // =========================
+
+ var backdrop = '.dropdown-backdrop'
+ var toggle = '[data-toggle="dropdown"]'
+ var Dropdown = function (element) {
+ $(element).on('click.bs.dropdown', this.toggle)
+ }
+
+ Dropdown.VERSION = '3.3.5'
+
+ function getParent($this) {
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = selector && $(selector)
+
+ return $parent && $parent.length ? $parent : $this.parent()
+ }
+
+ function clearMenus(e) {
+ if (e && e.which === 3) return
+ $(backdrop).remove()
+ $(toggle).each(function () {
+ var $this = $(this)
+ var $parent = getParent($this)
+ var relatedTarget = { relatedTarget: this }
+
+ if (!$parent.hasClass('open')) return
+
+ if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
+
+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $this.attr('aria-expanded', 'false')
+ $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
+ })
+ }
+
+ Dropdown.prototype.toggle = function (e) {
+ var $this = $(this)
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ clearMenus()
+
+ if (!isActive) {
+ if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
+ // if mobile we use a backdrop because click events don't delegate
+ $(document.createElement('div'))
+ .addClass('dropdown-backdrop')
+ .insertAfter($(this))
+ .on('click', clearMenus)
+ }
+
+ var relatedTarget = { relatedTarget: this }
+ $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $this
+ .trigger('focus')
+ .attr('aria-expanded', 'true')
+
+ $parent
+ .toggleClass('open')
+ .trigger('shown.bs.dropdown', relatedTarget)
+ }
+
+ return false
+ }
+
+ Dropdown.prototype.keydown = function (e) {
+ if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
+
+ var $this = $(this)
+
+ e.preventDefault()
+ e.stopPropagation()
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ if (!isActive && e.which != 27 || isActive && e.which == 27) {
+ if (e.which == 27) $parent.find(toggle).trigger('focus')
+ return $this.trigger('click')
+ }
+
+ var desc = ' li:not(.disabled):visible a'
+ var $items = $parent.find('.dropdown-menu' + desc)
+
+ if (!$items.length) return
+
+ var index = $items.index(e.target)
+
+ if (e.which == 38 && index > 0) index-- // up
+ if (e.which == 40 && index < $items.length - 1) index++ // down
+ if (!~index) index = 0
+
+ $items.eq(index).trigger('focus')
+ }
+
+
+ // DROPDOWN PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.dropdown')
+
+ if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ var old = $.fn.dropdown
+
+ $.fn.dropdown = Plugin
+ $.fn.dropdown.Constructor = Dropdown
+
+
+ // DROPDOWN NO CONFLICT
+ // ====================
+
+ $.fn.dropdown.noConflict = function () {
+ $.fn.dropdown = old
+ return this
+ }
+
+
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
+ // ===================================
+
+ $(document)
+ .on('click.bs.dropdown.data-api', clearMenus)
+ .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
+ .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+ .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
+ .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tooltip.js v3.3.5
+ * http://getbootstrap.com/javascript/#tooltip
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TOOLTIP PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Tooltip = function (element, options) {
+ this.type = null
+ this.options = null
+ this.enabled = null
+ this.timeout = null
+ this.hoverState = null
+ this.$element = null
+ this.inState = null
+
+ this.init('tooltip', element, options)
+ }
+
+ Tooltip.VERSION = '3.3.5'
+
+ Tooltip.TRANSITION_DURATION = 150
+
+ Tooltip.DEFAULTS = {
+ animation: true,
+ placement: 'top',
+ selector: false,
+ template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
+ trigger: 'hover focus',
+ title: '',
+ delay: 0,
+ html: false,
+ container: false,
+ viewport: {
+ selector: 'body',
+ padding: 0
+ }
+ }
+
+ Tooltip.prototype.init = function (type, element, options) {
+ this.enabled = true
+ this.type = type
+ this.$element = $(element)
+ this.options = this.getOptions(options)
+ this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
+ this.inState = { click: false, hover: false, focus: false }
+
+ if (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!')
+ }
+
+ var triggers = this.options.trigger.split(' ')
+
+ for (var i = triggers.length; i--;) {
+ var trigger = triggers[i]
+
+ if (trigger == 'click') {
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
+ } else if (trigger != 'manual') {
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
+
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
+ }
+ }
+
+ this.options.selector ?
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
+ this.fixTitle()
+ }
+
+ Tooltip.prototype.getDefaults = function () {
+ return Tooltip.DEFAULTS
+ }
+
+ Tooltip.prototype.getOptions = function (options) {
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
+
+ if (options.delay && typeof options.delay == 'number') {
+ options.delay = {
+ show: options.delay,
+ hide: options.delay
+ }
+ }
+
+ return options
+ }
+
+ Tooltip.prototype.getDelegateOptions = function () {
+ var options = {}
+ var defaults = this.getDefaults()
+
+ this._options && $.each(this._options, function (key, value) {
+ if (defaults[key] != value) options[key] = value
+ })
+
+ return options
+ }
+
+ Tooltip.prototype.enter = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
+
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
+ }
+
+ if (self.tip().hasClass('in') || self.hoverState == 'in') {
+ self.hoverState = 'in'
+ return
+ }
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'in'
+
+ if (!self.options.delay || !self.options.delay.show) return self.show()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'in') self.show()
+ }, self.options.delay.show)
+ }
+
+ Tooltip.prototype.isInStateTrue = function () {
+ for (var key in this.inState) {
+ if (this.inState[key]) return true
+ }
+
+ return false
+ }
+
+ Tooltip.prototype.leave = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
+
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
+ }
+
+ if (self.isInStateTrue()) return
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'out'
+
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'out') self.hide()
+ }, self.options.delay.hide)
+ }
+
+ Tooltip.prototype.show = function () {
+ var e = $.Event('show.bs.' + this.type)
+
+ if (this.hasContent() && this.enabled) {
+ this.$element.trigger(e)
+
+ var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
+ if (e.isDefaultPrevented() || !inDom) return
+ var that = this
+
+ var $tip = this.tip()
+
+ var tipId = this.getUID(this.type)
+
+ this.setContent()
+ $tip.attr('id', tipId)
+ this.$element.attr('aria-describedby', tipId)
+
+ if (this.options.animation) $tip.addClass('fade')
+
+ var placement = typeof this.options.placement == 'function' ?
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
+ this.options.placement
+
+ var autoToken = /\s?auto?\s?/i
+ var autoPlace = autoToken.test(placement)
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
+
+ $tip
+ .detach()
+ .css({ top: 0, left: 0, display: 'block' })
+ .addClass(placement)
+ .data('bs.' + this.type, this)
+
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
+ this.$element.trigger('inserted.bs.' + this.type)
+
+ var pos = this.getPosition()
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (autoPlace) {
+ var orgPlacement = placement
+ var viewportDim = this.getPosition(this.$viewport)
+
+ placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
+ placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
+ placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
+ placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
+ placement
+
+ $tip
+ .removeClass(orgPlacement)
+ .addClass(placement)
+ }
+
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
+
+ this.applyPlacement(calculatedOffset, placement)
+
+ var complete = function () {
+ var prevHoverState = that.hoverState
+ that.$element.trigger('shown.bs.' + that.type)
+ that.hoverState = null
+
+ if (prevHoverState == 'out') that.leave(that)
+ }
+
+ $.support.transition && this.$tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
+ }
+ }
+
+ Tooltip.prototype.applyPlacement = function (offset, placement) {
+ var $tip = this.tip()
+ var width = $tip[0].offsetWidth
+ var height = $tip[0].offsetHeight
+
+ // manually read margins because getBoundingClientRect includes difference
+ var marginTop = parseInt($tip.css('margin-top'), 10)
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
+
+ // we must check for NaN for ie 8/9
+ if (isNaN(marginTop)) marginTop = 0
+ if (isNaN(marginLeft)) marginLeft = 0
+
+ offset.top += marginTop
+ offset.left += marginLeft
+
+ // $.fn.offset doesn't round pixel values
+ // so we use setOffset directly with our own function B-0
+ $.offset.setOffset($tip[0], $.extend({
+ using: function (props) {
+ $tip.css({
+ top: Math.round(props.top),
+ left: Math.round(props.left)
+ })
+ }
+ }, offset), 0)
+
+ $tip.addClass('in')
+
+ // check to see if placing tip in new offset caused the tip to resize itself
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (placement == 'top' && actualHeight != height) {
+ offset.top = offset.top + height - actualHeight
+ }
+
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
+
+ if (delta.left) offset.left += delta.left
+ else offset.top += delta.top
+
+ var isVertical = /top|bottom/.test(placement)
+ var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
+ var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
+
+ $tip.offset(offset)
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
+ }
+
+ Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
+ this.arrow()
+ .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
+ .css(isVertical ? 'top' : 'left', '')
+ }
+
+ Tooltip.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
+ $tip.removeClass('fade in top bottom left right')
+ }
+
+ Tooltip.prototype.hide = function (callback) {
+ var that = this
+ var $tip = $(this.$tip)
+ var e = $.Event('hide.bs.' + this.type)
+
+ function complete() {
+ if (that.hoverState != 'in') $tip.detach()
+ that.$element
+ .removeAttr('aria-describedby')
+ .trigger('hidden.bs.' + that.type)
+ callback && callback()
+ }
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ $tip.removeClass('in')
+
+ $.support.transition && $tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
+
+ this.hoverState = null
+
+ return this
+ }
+
+ Tooltip.prototype.fixTitle = function () {
+ var $e = this.$element
+ if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
+ }
+ }
+
+ Tooltip.prototype.hasContent = function () {
+ return this.getTitle()
+ }
+
+ Tooltip.prototype.getPosition = function ($element) {
+ $element = $element || this.$element
+
+ var el = $element[0]
+ var isBody = el.tagName == 'BODY'
+
+ var elRect = el.getBoundingClientRect()
+ if (elRect.width == null) {
+ // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
+ elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
+ }
+ var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
+ var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
+ var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
+
+ return $.extend({}, elRect, scroll, outerDims, elOffset)
+ }
+
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
+
+ }
+
+ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
+ var delta = { top: 0, left: 0 }
+ if (!this.$viewport) return delta
+
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
+ var viewportDimensions = this.getPosition(this.$viewport)
+
+ if (/right|left/.test(placement)) {
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
+ delta.top = viewportDimensions.top - topEdgeOffset
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
+ }
+ } else {
+ var leftEdgeOffset = pos.left - viewportPadding
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
+ delta.left = viewportDimensions.left - leftEdgeOffset
+ } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
+ }
+ }
+
+ return delta
+ }
+
+ Tooltip.prototype.getTitle = function () {
+ var title
+ var $e = this.$element
+ var o = this.options
+
+ title = $e.attr('data-original-title')
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
+
+ return title
+ }
+
+ Tooltip.prototype.getUID = function (prefix) {
+ do prefix += ~~(Math.random() * 1000000)
+ while (document.getElementById(prefix))
+ return prefix
+ }
+
+ Tooltip.prototype.tip = function () {
+ if (!this.$tip) {
+ this.$tip = $(this.options.template)
+ if (this.$tip.length != 1) {
+ throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
+ }
+ }
+ return this.$tip
+ }
+
+ Tooltip.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
+ }
+
+ Tooltip.prototype.enable = function () {
+ this.enabled = true
+ }
+
+ Tooltip.prototype.disable = function () {
+ this.enabled = false
+ }
+
+ Tooltip.prototype.toggleEnabled = function () {
+ this.enabled = !this.enabled
+ }
+
+ Tooltip.prototype.toggle = function (e) {
+ var self = this
+ if (e) {
+ self = $(e.currentTarget).data('bs.' + this.type)
+ if (!self) {
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
+ $(e.currentTarget).data('bs.' + this.type, self)
+ }
+ }
+
+ if (e) {
+ self.inState.click = !self.inState.click
+ if (self.isInStateTrue()) self.enter(self)
+ else self.leave(self)
+ } else {
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
+ }
+ }
+
+ Tooltip.prototype.destroy = function () {
+ var that = this
+ clearTimeout(this.timeout)
+ this.hide(function () {
+ that.$element.off('.' + that.type).removeData('bs.' + that.type)
+ if (that.$tip) {
+ that.$tip.detach()
+ }
+ that.$tip = null
+ that.$arrow = null
+ that.$viewport = null
+ })
+ }
+
+
+ // TOOLTIP PLUGIN DEFINITION
+ // =========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tooltip')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.tooltip
+
+ $.fn.tooltip = Plugin
+ $.fn.tooltip.Constructor = Tooltip
+
+
+ // TOOLTIP NO CONFLICT
+ // ===================
+
+ $.fn.tooltip.noConflict = function () {
+ $.fn.tooltip = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: modal.js v3.3.5
+ * http://getbootstrap.com/javascript/#modals
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // MODAL CLASS DEFINITION
+ // ======================
+
+ var Modal = function (element, options) {
+ this.options = options
+ this.$body = $(document.body)
+ this.$element = $(element)
+ this.$dialog = this.$element.find('.modal-dialog')
+ this.$backdrop = null
+ this.isShown = null
+ this.originalBodyPad = null
+ this.scrollbarWidth = 0
+ this.ignoreBackdropClick = false
+
+ if (this.options.remote) {
+ this.$element
+ .find('.modal-content')
+ .load(this.options.remote, $.proxy(function () {
+ this.$element.trigger('loaded.bs.modal')
+ }, this))
+ }
+ }
+
+ Modal.VERSION = '3.3.5'
+
+ Modal.TRANSITION_DURATION = 300
+ Modal.BACKDROP_TRANSITION_DURATION = 150
+
+ Modal.DEFAULTS = {
+ backdrop: true,
+ keyboard: true,
+ show: true
+ }
+
+ Modal.prototype.toggle = function (_relatedTarget) {
+ return this.isShown ? this.hide() : this.show(_relatedTarget)
+ }
+
+ Modal.prototype.show = function (_relatedTarget) {
+ var that = this
+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
+
+ this.$element.trigger(e)
+
+ if (this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = true
+
+ this.checkScrollbar()
+ this.setScrollbar()
+ this.$body.addClass('modal-open')
+
+ this.escape()
+ this.resize()
+
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
+
+ this.$dialog.on('mousedown.dismiss.bs.modal', function () {
+ that.$element.one('mouseup.dismiss.bs.modal', function (e) {
+ if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
+ })
+ })
+
+ this.backdrop(function () {
+ var transition = $.support.transition && that.$element.hasClass('fade')
+
+ if (!that.$element.parent().length) {
+ that.$element.appendTo(that.$body) // don't move modals dom position
+ }
+
+ that.$element
+ .show()
+ .scrollTop(0)
+
+ that.adjustDialog()
+
+ if (transition) {
+ that.$element[0].offsetWidth // force reflow
+ }
+
+ that.$element.addClass('in')
+
+ that.enforceFocus()
+
+ var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
+
+ transition ?
+ that.$dialog // wait for modal to slide in
+ .one('bsTransitionEnd', function () {
+ that.$element.trigger('focus').trigger(e)
+ })
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ that.$element.trigger('focus').trigger(e)
+ })
+ }
+
+ Modal.prototype.hide = function (e) {
+ if (e) e.preventDefault()
+
+ e = $.Event('hide.bs.modal')
+
+ this.$element.trigger(e)
+
+ if (!this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = false
+
+ this.escape()
+ this.resize()
+
+ $(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')
+
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$element
+ .one('bsTransitionEnd', $.proxy(this.hideModal, this))
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ this.hideModal()
+ }
+
+ Modal.prototype.enforceFocus = function () {
+ $(document)
+ .off('focusin.bs.modal') // guard against infinite focus loop
+ .on('focusin.bs.modal', $.proxy(function (e) {
+ if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
+ this.$element.trigger('focus')
+ }
+ }, this))
+ }
+
+ Modal.prototype.escape = function () {
+ if (this.isShown && this.options.keyboard) {
+ this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
+ e.which == 27 && this.hide()
+ }, this))
+ } else if (!this.isShown) {
+ this.$element.off('keydown.dismiss.bs.modal')
+ }
+ }
+
+ Modal.prototype.resize = function () {
+ if (this.isShown) {
+ $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
+ } else {
+ $(window).off('resize.bs.modal')
+ }
+ }
+
+ Modal.prototype.hideModal = function () {
+ var that = this
+ this.$element.hide()
+ this.backdrop(function () {
+ that.$body.removeClass('modal-open')
+ that.resetAdjustments()
+ that.resetScrollbar()
+ that.$element.trigger('hidden.bs.modal')
+ })
+ }
+
+ Modal.prototype.removeBackdrop = function () {
+ this.$backdrop && this.$backdrop.remove()
+ this.$backdrop = null
+ }
+
+ Modal.prototype.backdrop = function (callback) {
+ var that = this
+ var animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+ if (this.isShown && this.options.backdrop) {
+ var doAnimate = $.support.transition && animate
+
+ this.$backdrop = $(document.createElement('div'))
+ .addClass('modal-backdrop ' + animate)
+ .appendTo(this.$body)
+
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
+ if (this.ignoreBackdropClick) {
+ this.ignoreBackdropClick = false
+ return
+ }
+ if (e.target !== e.currentTarget) return
+ this.options.backdrop == 'static'
+ ? this.$element[0].focus()
+ : this.hide()
+ }, this))
+
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+ this.$backdrop.addClass('in')
+
+ if (!callback) return
+
+ doAnimate ?
+ this.$backdrop
+ .one('bsTransitionEnd', callback)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callback()
+
+ } else if (!this.isShown && this.$backdrop) {
+ this.$backdrop.removeClass('in')
+
+ var callbackRemove = function () {
+ that.removeBackdrop()
+ callback && callback()
+ }
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$backdrop
+ .one('bsTransitionEnd', callbackRemove)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callbackRemove()
+
+ } else if (callback) {
+ callback()
+ }
+ }
+
+ // these following methods are used to handle overflowing modals
+
+ Modal.prototype.handleUpdate = function () {
+ this.adjustDialog()
+ }
+
+ Modal.prototype.adjustDialog = function () {
+ var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
+
+ this.$element.css({
+ paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
+ paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
+ })
+ }
+
+ Modal.prototype.resetAdjustments = function () {
+ this.$element.css({
+ paddingLeft: '',
+ paddingRight: ''
+ })
+ }
+
+ Modal.prototype.checkScrollbar = function () {
+ var fullWindowWidth = window.innerWidth
+ if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
+ var documentElementRect = document.documentElement.getBoundingClientRect()
+ fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
+ }
+ this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
+ this.scrollbarWidth = this.measureScrollbar()
+ }
+
+ Modal.prototype.setScrollbar = function () {
+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
+ this.originalBodyPad = document.body.style.paddingRight || ''
+ if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
+ }
+
+ Modal.prototype.resetScrollbar = function () {
+ this.$body.css('padding-right', this.originalBodyPad)
+ }
+
+ Modal.prototype.measureScrollbar = function () { // thx walsh
+ var scrollDiv = document.createElement('div')
+ scrollDiv.className = 'modal-scrollbar-measure'
+ this.$body.append(scrollDiv)
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
+ this.$body[0].removeChild(scrollDiv)
+ return scrollbarWidth
+ }
+
+
+ // MODAL PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option, _relatedTarget) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.modal')
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
+ if (typeof option == 'string') data[option](_relatedTarget)
+ else if (options.show) data.show(_relatedTarget)
+ })
+ }
+
+ var old = $.fn.modal
+
+ $.fn.modal = Plugin
+ $.fn.modal.Constructor = Modal
+
+
+ // MODAL NO CONFLICT
+ // =================
+
+ $.fn.modal.noConflict = function () {
+ $.fn.modal = old
+ return this
+ }
+
+
+ // MODAL DATA-API
+ // ==============
+
+ $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
+ var $this = $(this)
+ var href = $this.attr('href')
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
+
+ if ($this.is('a')) e.preventDefault()
+
+ $target.one('show.bs.modal', function (showEvent) {
+ if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
+ $target.one('hidden.bs.modal', function () {
+ $this.is(':visible') && $this.trigger('focus')
+ })
+ })
+ Plugin.call($target, option, this)
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: transition.js v3.3.5
+ * http://getbootstrap.com/javascript/#transitions
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+ // ============================================================
+
+ function transitionEnd() {
+ var el = document.createElement('bootstrap')
+
+ var transEndEventNames = {
+ WebkitTransition : 'webkitTransitionEnd',
+ MozTransition : 'transitionend',
+ OTransition : 'oTransitionEnd otransitionend',
+ transition : 'transitionend'
+ }
+
+ for (var name in transEndEventNames) {
+ if (el.style[name] !== undefined) {
+ return { end: transEndEventNames[name] }
+ }
+ }
+
+ return false // explicit for ie8 ( ._.)
+ }
+
+ // http://blog.alexmaccaw.com/css-transitions
+ $.fn.emulateTransitionEnd = function (duration) {
+ var called = false
+ var $el = this
+ $(this).one('bsTransitionEnd', function () { called = true })
+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
+ setTimeout(callback, duration)
+ return this
+ }
+
+ $(function () {
+ $.support.transition = transitionEnd()
+
+ if (!$.support.transition) return
+
+ $.event.special.bsTransitionEnd = {
+ bindType: $.support.transition.end,
+ delegateType: $.support.transition.end,
+ handle: function (e) {
+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
+ }
+ }
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: button.js v3.3.5
+ * http://getbootstrap.com/javascript/#buttons
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // BUTTON PUBLIC CLASS DEFINITION
+ // ==============================
+
+ var Button = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Button.DEFAULTS, options)
+ this.isLoading = false
+ }
+
+ Button.VERSION = '3.3.5'
+
+ Button.DEFAULTS = {
+ loadingText: 'loading...'
+ }
+
+ Button.prototype.setState = function (state) {
+ var d = 'disabled'
+ var $el = this.$element
+ var val = $el.is('input') ? 'val' : 'html'
+ var data = $el.data()
+
+ state += 'Text'
+
+ if (data.resetText == null) $el.data('resetText', $el[val]())
+
+ // push to event loop to allow forms to submit
+ setTimeout($.proxy(function () {
+ $el[val](data[state] == null ? this.options[state] : data[state])
+
+ if (state == 'loadingText') {
+ this.isLoading = true
+ $el.addClass(d).attr(d, d)
+ } else if (this.isLoading) {
+ this.isLoading = false
+ $el.removeClass(d).removeAttr(d)
+ }
+ }, this), 0)
+ }
+
+ Button.prototype.toggle = function () {
+ var changed = true
+ var $parent = this.$element.closest('[data-toggle="buttons"]')
+
+ if ($parent.length) {
+ var $input = this.$element.find('input')
+ if ($input.prop('type') == 'radio') {
+ if ($input.prop('checked')) changed = false
+ $parent.find('.active').removeClass('active')
+ this.$element.addClass('active')
+ } else if ($input.prop('type') == 'checkbox') {
+ if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
+ this.$element.toggleClass('active')
+ }
+ $input.prop('checked', this.$element.hasClass('active'))
+ if (changed) $input.trigger('change')
+ } else {
+ this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
+ this.$element.toggleClass('active')
+ }
+ }
+
+
+ // BUTTON PLUGIN DEFINITION
+ // ========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.button')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.button', (data = new Button(this, options)))
+
+ if (option == 'toggle') data.toggle()
+ else if (option) data.setState(option)
+ })
+ }
+
+ var old = $.fn.button
+
+ $.fn.button = Plugin
+ $.fn.button.Constructor = Button
+
+
+ // BUTTON NO CONFLICT
+ // ==================
+
+ $.fn.button.noConflict = function () {
+ $.fn.button = old
+ return this
+ }
+
+
+ // BUTTON DATA-API
+ // ===============
+
+ $(document)
+ .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ var $btn = $(e.target)
+ if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
+ Plugin.call($btn, 'toggle')
+ if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault()
+ })
+ .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: popover.js v3.3.5
+ * http://getbootstrap.com/javascript/#popovers
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // POPOVER PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Popover = function (element, options) {
+ this.init('popover', element, options)
+ }
+
+ if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
+
+ Popover.VERSION = '3.3.5'
+
+ Popover.DEFAULTS = $.extend({}, $.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>'
+ })
+
+
+ // NOTE: POPOVER EXTENDS tooltip.js
+ // ================================
+
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
+
+ Popover.prototype.constructor = Popover
+
+ Popover.prototype.getDefaults = function () {
+ return Popover.DEFAULTS
+ }
+
+ Popover.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+ var content = this.getContent()
+
+ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
+ $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
+ this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
+ ](content)
+
+ $tip.removeClass('fade top bottom left right in')
+
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
+ // this manually by checking the contents.
+ if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
+ }
+
+ Popover.prototype.hasContent = function () {
+ return this.getTitle() || this.getContent()
+ }
+
+ Popover.prototype.getContent = function () {
+ var $e = this.$element
+ var o = this.options
+
+ return $e.attr('data-content')
+ || (typeof o.content == 'function' ?
+ o.content.call($e[0]) :
+ o.content)
+ }
+
+ Popover.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
+ }
+
+
+ // POPOVER PLUGIN DEFINITION
+ // =========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.popover')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.popover
+
+ $.fn.popover = Plugin
+ $.fn.popover.Constructor = Popover
+
+
+ // POPOVER NO CONFLICT
+ // ===================
+
+ $.fn.popover.noConflict = function () {
+ $.fn.popover = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: carousel.js v3.3.5
+ * http://getbootstrap.com/javascript/#carousel
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CAROUSEL CLASS DEFINITION
+ // =========================
+
+ var Carousel = function (element, options) {
+ this.$element = $(element)
+ this.$indicators = this.$element.find('.carousel-indicators')
+ this.options = options
+ this.paused = null
+ this.sliding = null
+ this.interval = null
+ this.$active = null
+ this.$items = null
+
+ this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
+
+ this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
+ }
+
+ Carousel.VERSION = '3.3.5'
+
+ Carousel.TRANSITION_DURATION = 600
+
+ Carousel.DEFAULTS = {
+ interval: 5000,
+ pause: 'hover',
+ wrap: true,
+ keyboard: true
+ }
+
+ Carousel.prototype.keydown = function (e) {
+ if (/input|textarea/i.test(e.target.tagName)) return
+ switch (e.which) {
+ case 37: this.prev(); break
+ case 39: this.next(); break
+ default: return
+ }
+
+ e.preventDefault()
+ }
+
+ Carousel.prototype.cycle = function (e) {
+ e || (this.paused = false)
+
+ this.interval && clearInterval(this.interval)
+
+ this.options.interval
+ && !this.paused
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
+
+ return this
+ }
+
+ Carousel.prototype.getItemIndex = function (item) {
+ this.$items = item.parent().children('.item')
+ return this.$items.index(item || this.$active)
+ }
+
+ Carousel.prototype.getItemForDirection = function (direction, active) {
+ var activeIndex = this.getItemIndex(active)
+ var willWrap = (direction == 'prev' && activeIndex === 0)
+ || (direction == 'next' && activeIndex == (this.$items.length - 1))
+ if (willWrap && !this.options.wrap) return active
+ var delta = direction == 'prev' ? -1 : 1
+ var itemIndex = (activeIndex + delta) % this.$items.length
+ return this.$items.eq(itemIndex)
+ }
+
+ Carousel.prototype.to = function (pos) {
+ var that = this
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
+
+ if (pos > (this.$items.length - 1) || pos < 0) return
+
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
+ if (activeIndex == pos) return this.pause().cycle()
+
+ return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
+ }
+
+ Carousel.prototype.pause = function (e) {
+ e || (this.paused = true)
+
+ if (this.$element.find('.next, .prev').length && $.support.transition) {
+ this.$element.trigger($.support.transition.end)
+ this.cycle(true)
+ }
+
+ this.interval = clearInterval(this.interval)
+
+ return this
+ }
+
+ Carousel.prototype.next = function () {
+ if (this.sliding) return
+ return this.slide('next')
+ }
+
+ Carousel.prototype.prev = function () {
+ if (this.sliding) return
+ return this.slide('prev')
+ }
+
+ Carousel.prototype.slide = function (type, next) {
+ var $active = this.$element.find('.item.active')
+ var $next = next || this.getItemForDirection(type, $active)
+ var isCycling = this.interval
+ var direction = type == 'next' ? 'left' : 'right'
+ var that = this
+
+ if ($next.hasClass('active')) return (this.sliding = false)
+
+ var relatedTarget = $next[0]
+ var slideEvent = $.Event('slide.bs.carousel', {
+ relatedTarget: relatedTarget,
+ direction: direction
+ })
+ this.$element.trigger(slideEvent)
+ if (slideEvent.isDefaultPrevented()) return
+
+ this.sliding = true
+
+ isCycling && this.pause()
+
+ if (this.$indicators.length) {
+ this.$indicators.find('.active').removeClass('active')
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
+ $nextIndicator && $nextIndicator.addClass('active')
+ }
+
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
+ if ($.support.transition && this.$element.hasClass('slide')) {
+ $next.addClass(type)
+ $next[0].offsetWidth // force reflow
+ $active.addClass(direction)
+ $next.addClass(direction)
+ $active
+ .one('bsTransitionEnd', function () {
+ $next.removeClass([type, direction].join(' ')).addClass('active')
+ $active.removeClass(['active', direction].join(' '))
+ that.sliding = false
+ setTimeout(function () {
+ that.$element.trigger(slidEvent)
+ }, 0)
+ })
+ .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
+ } else {
+ $active.removeClass('active')
+ $next.addClass('active')
+ this.sliding = false
+ this.$element.trigger(slidEvent)
+ }
+
+ isCycling && this.cycle()
+
+ return this
+ }
+
+
+ // CAROUSEL PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.carousel')
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
+ var action = typeof option == 'string' ? option : options.slide
+
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
+ if (typeof option == 'number') data.to(option)
+ else if (action) data[action]()
+ else if (options.interval) data.pause().cycle()
+ })
+ }
+
+ var old = $.fn.carousel
+
+ $.fn.carousel = Plugin
+ $.fn.carousel.Constructor = Carousel
+
+
+ // CAROUSEL NO CONFLICT
+ // ====================
+
+ $.fn.carousel.noConflict = function () {
+ $.fn.carousel = old
+ return this
+ }
+
+
+ // CAROUSEL DATA-API
+ // =================
+
+ var clickHandler = function (e) {
+ var href
+ var $this = $(this)
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
+ if (!$target.hasClass('carousel')) return
+ var options = $.extend({}, $target.data(), $this.data())
+ var slideIndex = $this.attr('data-slide-to')
+ if (slideIndex) options.interval = false
+
+ Plugin.call($target, options)
+
+ if (slideIndex) {
+ $target.data('bs.carousel').to(slideIndex)
+ }
+
+ e.preventDefault()
+ }
+
+ $(document)
+ .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
+ .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
+
+ $(window).on('load', function () {
+ $('[data-ride="carousel"]').each(function () {
+ var $carousel = $(this)
+ Plugin.call($carousel, $carousel.data())
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: scrollspy.js v3.3.5
+ * http://getbootstrap.com/javascript/#scrollspy
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // SCROLLSPY CLASS DEFINITION
+ // ==========================
+
+ function ScrollSpy(element, options) {
+ this.$body = $(document.body)
+ this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
+ this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
+ this.selector = (this.options.target || '') + ' .nav li > a'
+ this.offsets = []
+ this.targets = []
+ this.activeTarget = null
+ this.scrollHeight = 0
+
+ this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
+ this.refresh()
+ this.process()
+ }
+
+ ScrollSpy.VERSION = '3.3.5'
+
+ ScrollSpy.DEFAULTS = {
+ offset: 10
+ }
+
+ ScrollSpy.prototype.getScrollHeight = function () {
+ return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
+ }
+
+ ScrollSpy.prototype.refresh = function () {
+ var that = this
+ var offsetMethod = 'offset'
+ var offsetBase = 0
+
+ this.offsets = []
+ this.targets = []
+ this.scrollHeight = this.getScrollHeight()
+
+ if (!$.isWindow(this.$scrollElement[0])) {
+ offsetMethod = 'position'
+ offsetBase = this.$scrollElement.scrollTop()
+ }
+
+ this.$body
+ .find(this.selector)
+ .map(function () {
+ var $el = $(this)
+ var href = $el.data('target') || $el.attr('href')
+ var $href = /^#./.test(href) && $(href)
+
+ return ($href
+ && $href.length
+ && $href.is(':visible')
+ && [[$href[offsetMethod]().top + offsetBase, href]]) || null
+ })
+ .sort(function (a, b) { return a[0] - b[0] })
+ .each(function () {
+ that.offsets.push(this[0])
+ that.targets.push(this[1])
+ })
+ }
+
+ ScrollSpy.prototype.process = function () {
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
+ var scrollHeight = this.getScrollHeight()
+ var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
+ var offsets = this.offsets
+ var targets = this.targets
+ var activeTarget = this.activeTarget
+ var i
+
+ if (this.scrollHeight != scrollHeight) {
+ this.refresh()
+ }
+
+ if (scrollTop >= maxScroll) {
+ return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
+ }
+
+ if (activeTarget && scrollTop < offsets[0]) {
+ this.activeTarget = null
+ return this.clear()
+ }
+
+ for (i = offsets.length; i--;) {
+ activeTarget != targets[i]
+ && scrollTop >= offsets[i]
+ && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
+ && this.activate(targets[i])
+ }
+ }
+
+ ScrollSpy.prototype.activate = function (target) {
+ this.activeTarget = target
+
+ this.clear()
+
+ var selector = this.selector +
+ '[data-target="' + target + '"],' +
+ this.selector + '[href="' + target + '"]'
+
+ var active = $(selector)
+ .parents('li')
+ .addClass('active')
+
+ if (active.parent('.dropdown-menu').length) {
+ active = active
+ .closest('li.dropdown')
+ .addClass('active')
+ }
+
+ active.trigger('activate.bs.scrollspy')
+ }
+
+ ScrollSpy.prototype.clear = function () {
+ $(this.selector)
+ .parentsUntil(this.options.target, '.active')
+ .removeClass('active')
+ }
+
+
+ // SCROLLSPY PLUGIN DEFINITION
+ // ===========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.scrollspy')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.scrollspy
+
+ $.fn.scrollspy = Plugin
+ $.fn.scrollspy.Constructor = ScrollSpy
+
+
+ // SCROLLSPY NO CONFLICT
+ // =====================
+
+ $.fn.scrollspy.noConflict = function () {
+ $.fn.scrollspy = old
+ return this
+ }
+
+
+ // SCROLLSPY DATA-API
+ // ==================
+
+ $(window).on('load.bs.scrollspy.data-api', function () {
+ $('[data-spy="scroll"]').each(function () {
+ var $spy = $(this)
+ Plugin.call($spy, $spy.data())
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: collapse.js v3.3.5
+ * http://getbootstrap.com/javascript/#collapse
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // COLLAPSE PUBLIC CLASS DEFINITION
+ // ================================
+
+ var Collapse = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Collapse.DEFAULTS, options)
+ this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
+ '[data-toggle="collapse"][data-target="#' + element.id + '"]')
+ this.transitioning = null
+
+ if (this.options.parent) {
+ this.$parent = this.getParent()
+ } else {
+ this.addAriaAndCollapsedClass(this.$element, this.$trigger)
+ }
+
+ if (this.options.toggle) this.toggle()
+ }
+
+ Collapse.VERSION = '3.3.5'
+
+ Collapse.TRANSITION_DURATION = 350
+
+ Collapse.DEFAULTS = {
+ toggle: true
+ }
+
+ Collapse.prototype.dimension = function () {
+ var hasWidth = this.$element.hasClass('width')
+ return hasWidth ? 'width' : 'height'
+ }
+
+ Collapse.prototype.show = function () {
+ if (this.transitioning || this.$element.hasClass('in')) return
+
+ var activesData
+ var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
+
+ if (actives && actives.length) {
+ activesData = actives.data('bs.collapse')
+ if (activesData && activesData.transitioning) return
+ }
+
+ var startEvent = $.Event('show.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ if (actives && actives.length) {
+ Plugin.call(actives, 'hide')
+ activesData || actives.data('bs.collapse', null)
+ }
+
+ var dimension = this.dimension()
+
+ this.$element
+ .removeClass('collapse')
+ .addClass('collapsing')[dimension](0)
+ .attr('aria-expanded', true)
+
+ this.$trigger
+ .removeClass('collapsed')
+ .attr('aria-expanded', true)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse in')[dimension]('')
+ this.transitioning = 0
+ this.$element
+ .trigger('shown.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ var scrollSize = $.camelCase(['scroll', dimension].join('-'))
+
+ this.$element
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
+ }
+
+ Collapse.prototype.hide = function () {
+ if (this.transitioning || !this.$element.hasClass('in')) return
+
+ var startEvent = $.Event('hide.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ var dimension = this.dimension()
+
+ this.$element[dimension](this.$element[dimension]())[0].offsetHeight
+
+ this.$element
+ .addClass('collapsing')
+ .removeClass('collapse in')
+ .attr('aria-expanded', false)
+
+ this.$trigger
+ .addClass('collapsed')
+ .attr('aria-expanded', false)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.transitioning = 0
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse')
+ .trigger('hidden.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ this.$element
+ [dimension](0)
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
+ }
+
+ Collapse.prototype.toggle = function () {
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
+ }
+
+ Collapse.prototype.getParent = function () {
+ return $(this.options.parent)
+ .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
+ .each($.proxy(function (i, element) {
+ var $element = $(element)
+ this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
+ }, this))
+ .end()
+ }
+
+ Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
+ var isOpen = $element.hasClass('in')
+
+ $element.attr('aria-expanded', isOpen)
+ $trigger
+ .toggleClass('collapsed', !isOpen)
+ .attr('aria-expanded', isOpen)
+ }
+
+ function getTargetFromTrigger($trigger) {
+ var href
+ var target = $trigger.attr('data-target')
+ || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
+
+ return $(target)
+ }
+
+
+ // COLLAPSE PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.collapse')
+ var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
+ if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.collapse
+
+ $.fn.collapse = Plugin
+ $.fn.collapse.Constructor = Collapse
+
+
+ // COLLAPSE NO CONFLICT
+ // ====================
+
+ $.fn.collapse.noConflict = function () {
+ $.fn.collapse = old
+ return this
+ }
+
+
+ // COLLAPSE DATA-API
+ // =================
+
+ $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
+ var $this = $(this)
+
+ if (!$this.attr('data-target')) e.preventDefault()
+
+ var $target = getTargetFromTrigger($this)
+ var data = $target.data('bs.collapse')
+ var option = data ? 'toggle' : $this.data()
+
+ Plugin.call($target, option)
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tab.js v3.3.5
+ * http://getbootstrap.com/javascript/#tabs
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TAB CLASS DEFINITION
+ // ====================
+
+ var Tab = function (element) {
+ // jscs:disable requireDollarBeforejQueryAssignment
+ this.element = $(element)
+ // jscs:enable requireDollarBeforejQueryAssignment
+ }
+
+ Tab.VERSION = '3.3.5'
+
+ Tab.TRANSITION_DURATION = 150
+
+ Tab.prototype.show = function () {
+ var $this = this.element
+ var $ul = $this.closest('ul:not(.dropdown-menu)')
+ var selector = $this.data('target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ if ($this.parent('li').hasClass('active')) return
+
+ var $previous = $ul.find('.active:last a')
+ var hideEvent = $.Event('hide.bs.tab', {
+ relatedTarget: $this[0]
+ })
+ var showEvent = $.Event('show.bs.tab', {
+ relatedTarget: $previous[0]
+ })
+
+ $previous.trigger(hideEvent)
+ $this.trigger(showEvent)
+
+ if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
+
+ var $target = $(selector)
+
+ this.activate($this.closest('li'), $ul)
+ this.activate($target, $target.parent(), function () {
+ $previous.trigger({
+ type: 'hidden.bs.tab',
+ relatedTarget: $this[0]
+ })
+ $this.trigger({
+ type: 'shown.bs.tab',
+ relatedTarget: $previous[0]
+ })
+ })
+ }
+
+ Tab.prototype.activate = function (element, container, callback) {
+ var $active = container.find('> .active')
+ var transition = callback
+ && $.support.transition
+ && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
+
+ function next() {
+ $active
+ .removeClass('active')
+ .find('> .dropdown-menu > .active')
+ .removeClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', false)
+
+ element
+ .addClass('active')
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+
+ if (transition) {
+ element[0].offsetWidth // reflow for transition
+ element.addClass('in')
+ } else {
+ element.removeClass('fade')
+ }
+
+ if (element.parent('.dropdown-menu').length) {
+ element
+ .closest('li.dropdown')
+ .addClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+ }
+
+ callback && callback()
+ }
+
+ $active.length && transition ?
+ $active
+ .one('bsTransitionEnd', next)
+ .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
+ next()
+
+ $active.removeClass('in')
+ }
+
+
+ // TAB PLUGIN DEFINITION
+ // =====================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tab')
+
+ if (!data) $this.data('bs.tab', (data = new Tab(this)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.tab
+
+ $.fn.tab = Plugin
+ $.fn.tab.Constructor = Tab
+
+
+ // TAB NO CONFLICT
+ // ===============
+
+ $.fn.tab.noConflict = function () {
+ $.fn.tab = old
+ return this
+ }
+
+
+ // TAB DATA-API
+ // ============
+
+ var clickHandler = function (e) {
+ e.preventDefault()
+ Plugin.call($(this), 'show')
+ }
+
+ $(document)
+ .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
+ .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
+
+}(jQuery);
diff --git a/ui/new-ui-samples/js/vendor/jquery-ui.js b/ui/new-ui-samples/js/vendor/jquery-ui.js
new file mode 100644
index 0000000..31ee9cd
--- /dev/null
+++ b/ui/new-ui-samples/js/vendor/jquery-ui.js
@@ -0,0 +1,16617 @@
+/*! jQuery UI - v1.11.4 - 2015-03-11
+* http://jqueryui.com
+* Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+(function( factory ) {
+ if ( typeof define === "function" && define.amd ) {
+
+ // AMD. Register as an anonymous module.
+ define([ "jquery" ], factory );
+ } else {
+
+ // Browser globals
+ factory( jQuery );
+ }
+}(function( $ ) {
+/*!
+ * jQuery UI Core 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/ui-core/
+ */
+
+
+// $.ui might exist from components with no dependencies, e.g., $.ui.position
+$.ui = $.ui || {};
+
+$.extend( $.ui, {
+ version: "1.11.4",
+
+ keyCode: {
+ BACKSPACE: 8,
+ COMMA: 188,
+ DELETE: 46,
+ DOWN: 40,
+ END: 35,
+ ENTER: 13,
+ ESCAPE: 27,
+ HOME: 36,
+ LEFT: 37,
+ PAGE_DOWN: 34,
+ PAGE_UP: 33,
+ PERIOD: 190,
+ RIGHT: 39,
+ SPACE: 32,
+ TAB: 9,
+ UP: 38
+ }
+});
+
+// plugins
+$.fn.extend({
+ scrollParent: function( includeHidden ) {
+ var position = this.css( "position" ),
+ excludeStaticParent = position === "absolute",
+ overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
+ scrollParent = this.parents().filter( function() {
+ var parent = $( this );
+ if ( excludeStaticParent && parent.css( "position" ) === "static" ) {
+ return false;
+ }
+ return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + parent.css( "overflow-x" ) );
+ }).eq( 0 );
+
+ return position === "fixed" || !scrollParent.length ? $( this[ 0 ].ownerDocument || document ) : scrollParent;
+ },
+
+ uniqueId: (function() {
+ var uuid = 0;
+
+ return function() {
+ return this.each(function() {
+ if ( !this.id ) {
+ this.id = "ui-id-" + ( ++uuid );
+ }
+ });
+ };
+ })(),
+
+ removeUniqueId: function() {
+ return this.each(function() {
+ if ( /^ui-id-\d+$/.test( this.id ) ) {
+ $( this ).removeAttr( "id" );
+ }
+ });
+ }
+});
+
+// selectors
+function focusable( element, isTabIndexNotNaN ) {
+ var map, mapName, img,
+ nodeName = element.nodeName.toLowerCase();
+ if ( "area" === nodeName ) {
+ map = element.parentNode;
+ mapName = map.name;
+ if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+ return false;
+ }
+ img = $( "img[usemap='#" + mapName + "']" )[ 0 ];
+ return !!img && visible( img );
+ }
+ return ( /^(input|select|textarea|button|object)$/.test( nodeName ) ?
+ !element.disabled :
+ "a" === nodeName ?
+ element.href || isTabIndexNotNaN :
+ isTabIndexNotNaN) &&
+ // the element and all of its ancestors must be visible
+ visible( element );
+}
+
+function visible( element ) {
+ return $.expr.filters.visible( element ) &&
+ !$( element ).parents().addBack().filter(function() {
+ return $.css( this, "visibility" ) === "hidden";
+ }).length;
+}
+
+$.extend( $.expr[ ":" ], {
+ data: $.expr.createPseudo ?
+ $.expr.createPseudo(function( dataName ) {
+ return function( elem ) {
+ return !!$.data( elem, dataName );
+ };
+ }) :
+ // support: jQuery <1.8
+ function( elem, i, match ) {
+ return !!$.data( elem, match[ 3 ] );
+ },
+
+ focusable: function( element ) {
+ return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+ },
+
+ tabbable: function( element ) {
+ var tabIndex = $.attr( element, "tabindex" ),
+ isTabIndexNaN = isNaN( tabIndex );
+ return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+ }
+});
+
+// support: jQuery <1.8
+if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
+ $.each( [ "Width", "Height" ], function( i, name ) {
+ var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+ type = name.toLowerCase(),
+ orig = {
+ innerWidth: $.fn.innerWidth,
+ innerHeight: $.fn.innerHeight,
+ outerWidth: $.fn.outerWidth,
+ outerHeight: $.fn.outerHeight
+ };
+
+ function reduce( elem, size, border, margin ) {
+ $.each( side, function() {
+ size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
+ if ( border ) {
+ size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
+ }
+ if ( margin ) {
+ size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
+ }
+ });
+ return size;
+ }
+
+ $.fn[ "inner" + name ] = function( size ) {
+ if ( size === undefined ) {
+ return orig[ "inner" + name ].call( this );
+ }
+
+ return this.each(function() {
+ $( this ).css( type, reduce( this, size ) + "px" );
+ });
+ };
+
+ $.fn[ "outer" + name] = function( size, margin ) {
+ if ( typeof size !== "number" ) {
+ return orig[ "outer" + name ].call( this, size );
+ }
+
+ return this.each(function() {
+ $( this).css( type, reduce( this, size, true, margin ) + "px" );
+ });
+ };
+ });
+}
+
+// support: jQuery <1.8
+if ( !$.fn.addBack ) {
+ $.fn.addBack = function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter( selector )
+ );
+ };
+}
+
+// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
+if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
+ $.fn.removeData = (function( removeData ) {
+ return function( key ) {
+ if ( arguments.length ) {
+ return removeData.call( this, $.camelCase( key ) );
+ } else {
+ return removeData.call( this );
+ }
+ };
+ })( $.fn.removeData );
+}
+
+// deprecated
+$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
+
+$.fn.extend({
+ focus: (function( orig ) {
+ return function( delay, fn ) {
+ return typeof delay === "number" ?
+ this.each(function() {
+ var elem = this;
+ setTimeout(function() {
+ $( elem ).focus();
+ if ( fn ) {
+ fn.call( elem );
+ }
+ }, delay );
+ }) :
+ orig.apply( this, arguments );
+ };
+ })( $.fn.focus ),
+
+ disableSelection: (function() {
+ var eventType = "onselectstart" in document.createElement( "div" ) ?
+ "selectstart" :
+ "mousedown";
+
+ return function() {
+ return this.bind( eventType + ".ui-disableSelection", function( event ) {
+ event.preventDefault();
+ });
+ };
+ })(),
+
+ enableSelection: function() {
+ return this.unbind( ".ui-disableSelection" );
+ },
+
+ zIndex: function( zIndex ) {
+ if ( zIndex !== undefined ) {
+ return this.css( "zIndex", zIndex );
+ }
+
+ if ( this.length ) {
+ var elem = $( this[ 0 ] ), position, value;
+ while ( elem.length && elem[ 0 ] !== document ) {
+ // Ignore z-index if position is set to a value where z-index is ignored by the browser
+ // This makes behavior of this function consistent across browsers
+ // WebKit always returns auto if the element is positioned
+ position = elem.css( "position" );
+ if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+ // IE returns 0 when zIndex is not specified
+ // other browsers return a string
+ // we ignore the case of nested elements with an explicit value of 0
+ // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+ value = parseInt( elem.css( "zIndex" ), 10 );
+ if ( !isNaN( value ) && value !== 0 ) {
+ return value;
+ }
+ }
+ elem = elem.parent();
+ }
+ }
+
+ return 0;
+ }
+});
+
+// $.ui.plugin is deprecated. Use $.widget() extensions instead.
+$.ui.plugin = {
+ add: function( module, option, set ) {
+ var i,
+ proto = $.ui[ module ].prototype;
+ for ( i in set ) {
+ proto.plugins[ i ] = proto.plugins[ i ] || [];
+ proto.plugins[ i ].push( [ option, set[ i ] ] );
+ }
+ },
+ call: function( instance, name, args, allowDisconnected ) {
+ var i,
+ set = instance.plugins[ name ];
+
+ if ( !set ) {
+ return;
+ }
+
+ if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) ) {
+ return;
+ }
+
+ for ( i = 0; i < set.length; i++ ) {
+ if ( instance.options[ set[ i ][ 0 ] ] ) {
+ set[ i ][ 1 ].apply( instance.element, args );
+ }
+ }
+ }
+};
+
+
+/*!
+ * jQuery UI Widget 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/jQuery.widget/
+ */
+
+
+var widget_uuid = 0,
+ widget_slice = Array.prototype.slice;
+
+$.cleanData = (function( orig ) {
+ return function( elems ) {
+ var events, elem, i;
+ for ( i = 0; (elem = elems[i]) != null; i++ ) {
+ try {
+
+ // Only trigger remove when necessary to save time
+ events = $._data( elem, "events" );
+ if ( events && events.remove ) {
+ $( elem ).triggerHandler( "remove" );
+ }
+
+ // http://bugs.jquery.com/ticket/8235
+ } catch ( e ) {}
+ }
+ orig( elems );
+ };
+})( $.cleanData );
+
+$.widget = function( name, base, prototype ) {
+ var fullName, existingConstructor, constructor, basePrototype,
+ // proxiedPrototype allows the provided prototype to remain unmodified
+ // so that it can be used as a mixin for multiple widgets (#8876)
+ proxiedPrototype = {},
+ namespace = name.split( "." )[ 0 ];
+
+ name = name.split( "." )[ 1 ];
+ fullName = namespace + "-" + name;
+
+ if ( !prototype ) {
+ prototype = base;
+ base = $.Widget;
+ }
+
+ // create selector for plugin
+ $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+ return !!$.data( elem, fullName );
+ };
+
+ $[ namespace ] = $[ namespace ] || {};
+ existingConstructor = $[ namespace ][ name ];
+ constructor = $[ namespace ][ name ] = function( options, element ) {
+ // allow instantiation without "new" keyword
+ if ( !this._createWidget ) {
+ return new constructor( options, element );
+ }
+
+ // allow instantiation without initializing for simple inheritance
+ // must use "new" keyword (the code above always passes args)
+ if ( arguments.length ) {
+ this._createWidget( options, element );
+ }
+ };
+ // extend with the existing constructor to carry over any static properties
+ $.extend( constructor, existingConstructor, {
+ version: prototype.version,
+ // copy the object used to create the prototype in case we need to
+ // redefine the widget later
+ _proto: $.extend( {}, prototype ),
+ // track widgets that inherit from this widget in case this widget is
+ // redefined after a widget inherits from it
+ _childConstructors: []
+ });
+
+ basePrototype = new base();
+ // we need to make the options hash a property directly on the new instance
+ // otherwise we'll modify the options hash on the prototype that we're
+ // inheriting from
+ basePrototype.options = $.widget.extend( {}, basePrototype.options );
+ $.each( prototype, function( prop, value ) {
+ if ( !$.isFunction( value ) ) {
+ proxiedPrototype[ prop ] = value;
+ return;
+ }
+ proxiedPrototype[ prop ] = (function() {
+ var _super = function() {
+ return base.prototype[ prop ].apply( this, arguments );
+ },
+ _superApply = function( args ) {
+ return base.prototype[ prop ].apply( this, args );
+ };
+ return function() {
+ var __super = this._super,
+ __superApply = this._superApply,
+ returnValue;
+
+ this._super = _super;
+ this._superApply = _superApply;
+
+ returnValue = value.apply( this, arguments );
+
+ this._super = __super;
+ this._superApply = __superApply;
+
+ return returnValue;
+ };
+ })();
+ });
+ constructor.prototype = $.widget.extend( basePrototype, {
+ // TODO: remove support for widgetEventPrefix
+ // always use the name + a colon as the prefix, e.g., draggable:start
+ // don't prefix for widgets that aren't DOM-based
+ widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
+ }, proxiedPrototype, {
+ constructor: constructor,
+ namespace: namespace,
+ widgetName: name,
+ widgetFullName: fullName
+ });
+
+ // If this widget is being redefined then we need to find all widgets that
+ // are inheriting from it and redefine all of them so that they inherit from
+ // the new version of this widget. We're essentially trying to replace one
+ // level in the prototype chain.
+ if ( existingConstructor ) {
+ $.each( existingConstructor._childConstructors, function( i, child ) {
+ var childPrototype = child.prototype;
+
+ // redefine the child widget using the same prototype that was
+ // originally used, but inherit from the new version of the base
+ $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
+ });
+ // remove the list of existing child constructors from the old constructor
+ // so the old child constructors can be garbage collected
+ delete existingConstructor._childConstructors;
+ } else {
+ base._childConstructors.push( constructor );
+ }
+
+ $.widget.bridge( name, constructor );
+
+ return constructor;
+};
+
+$.widget.extend = function( target ) {
+ var input = widget_slice.call( arguments, 1 ),
+ inputIndex = 0,
+ inputLength = input.length,
+ key,
+ value;
+ for ( ; inputIndex < inputLength; inputIndex++ ) {
+ for ( key in input[ inputIndex ] ) {
+ value = input[ inputIndex ][ key ];
+ if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+ // Clone objects
+ if ( $.isPlainObject( value ) ) {
+ target[ key ] = $.isPlainObject( target[ key ] ) ?
+ $.widget.extend( {}, target[ key ], value ) :
+ // Don't extend strings, arrays, etc. with objects
+ $.widget.extend( {}, value );
+ // Copy everything else by reference
+ } else {
+ target[ key ] = value;
+ }
+ }
+ }
+ }
+ return target;
+};
+
+$.widget.bridge = function( name, object ) {
+ var fullName = object.prototype.widgetFullName || name;
+ $.fn[ name ] = function( options ) {
+ var isMethodCall = typeof options === "string",
+ args = widget_slice.call( arguments, 1 ),
+ returnValue = this;
+
+ if ( isMethodCall ) {
+ this.each(function() {
+ var methodValue,
+ instance = $.data( this, fullName );
+ if ( options === "instance" ) {
+ returnValue = instance;
+ return false;
+ }
+ if ( !instance ) {
+ return $.error( "cannot call methods on " + name + " prior to initialization; " +
+ "attempted to call method '" + options + "'" );
+ }
+ if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
+ return $.error( "no such method '" + options + "' for " + name + " widget instance" );
+ }
+ methodValue = instance[ options ].apply( instance, args );
+ if ( methodValue !== instance && methodValue !== undefined ) {
+ returnValue = methodValue && methodValue.jquery ?
+ returnValue.pushStack( methodValue.get() ) :
+ methodValue;
+ return false;
+ }
+ });
+ } else {
+
+ // Allow multiple hashes to be passed on init
+ if ( args.length ) {
+ options = $.widget.extend.apply( null, [ options ].concat(args) );
+ }
+
+ this.each(function() {
+ var instance = $.data( this, fullName );
+ if ( instance ) {
+ instance.option( options || {} );
+ if ( instance._init ) {
+ instance._init();
+ }
+ } else {
+ $.data( this, fullName, new object( options, this ) );
+ }
+ });
+ }
+
+ return returnValue;
+ };
+};
+
+$.Widget = function( /* options, element */ ) {};
+$.Widget._childConstructors = [];
+
+$.Widget.prototype = {
+ widgetName: "widget",
+ widgetEventPrefix: "",
+ defaultElement: "<div>",
+ options: {
+ disabled: false,
+
+ // callbacks
+ create: null
+ },
+ _createWidget: function( options, element ) {
+ element = $( element || this.defaultElement || this )[ 0 ];
+ this.element = $( element );
+ this.uuid = widget_uuid++;
+ this.eventNamespace = "." + this.widgetName + this.uuid;
+
+ this.bindings = $();
+ this.hoverable = $();
+ this.focusable = $();
+
+ if ( element !== this ) {
+ $.data( element, this.widgetFullName, this );
+ this._on( true, this.element, {
+ remove: function( event ) {
+ if ( event.target === element ) {
+ this.destroy();
+ }
+ }
+ });
+ this.document = $( element.style ?
+ // element within the document
+ element.ownerDocument :
+ // element is window or document
+ element.document || element );
+ this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+ }
+
+ this.options = $.widget.extend( {},
+ this.options,
+ this._getCreateOptions(),
+ options );
+
+ this._create();
+ this._trigger( "create", null, this._getCreateEventData() );
+ this._init();
+ },
+ _getCreateOptions: $.noop,
+ _getCreateEventData: $.noop,
+ _create: $.noop,
+ _init: $.noop,
+
+ destroy: function() {
+ this._destroy();
+ // we can probably remove the unbind calls in 2.0
+ // all event bindings should go through this._on()
+ this.element
+ .unbind( this.eventNamespace )
+ .removeData( this.widgetFullName )
+ // support: jquery <1.6.3
+ // http://bugs.jquery.com/ticket/9413
+ .removeData( $.camelCase( this.widgetFullName ) );
+ this.widget()
+ .unbind( this.eventNamespace )
+ .removeAttr( "aria-disabled" )
+ .removeClass(
+ this.widgetFullName + "-disabled " +
+ "ui-state-disabled" );
+
+ // clean up events and states
+ this.bindings.unbind( this.eventNamespace );
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
+ },
+ _destroy: $.noop,
+
+ widget: function() {
+ return this.element;
+ },
+
+ option: function( key, value ) {
+ var options = key,
+ parts,
+ curOption,
+ i;
+
+ if ( arguments.length === 0 ) {
+ // don't return a reference to the internal hash
+ return $.widget.extend( {}, this.options );
+ }
+
+ if ( typeof key === "string" ) {
+ // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+ options = {};
+ parts = key.split( "." );
+ key = parts.shift();
+ if ( parts.length ) {
+ curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+ for ( i = 0; i < parts.length - 1; i++ ) {
+ curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+ curOption = curOption[ parts[ i ] ];
+ }
+ key = parts.pop();
+ if ( arguments.length === 1 ) {
+ return curOption[ key ] === undefined ? null : curOption[ key ];
+ }
+ curOption[ key ] = value;
+ } else {
+ if ( arguments.length === 1 ) {
+ return this.options[ key ] === undefined ? null : this.options[ key ];
+ }
+ options[ key ] = value;
+ }
+ }
+
+ this._setOptions( options );
+
+ return this;
+ },
+ _setOptions: function( options ) {
+ var key;
+
+ for ( key in options ) {
+ this._setOption( key, options[ key ] );
+ }
+
+ return this;
+ },
+ _setOption: function( key, value ) {
+ this.options[ key ] = value;
+
+ if ( key === "disabled" ) {
+ this.widget()
+ .toggleClass( this.widgetFullName + "-disabled", !!value );
+
+ // If the widget is becoming disabled, then nothing is interactive
+ if ( value ) {
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
+ }
+ }
+
+ return this;
+ },
+
+ enable: function() {
+ return this._setOptions({ disabled: false });
+ },
+ disable: function() {
+ return this._setOptions({ disabled: true });
+ },
+
+ _on: function( suppressDisabledCheck, element, handlers ) {
+ var delegateElement,
+ instance = this;
+
+ // no suppressDisabledCheck flag, shuffle arguments
+ if ( typeof suppressDisabledCheck !== "boolean" ) {
+ handlers = element;
+ element = suppressDisabledCheck;
+ suppressDisabledCheck = false;
+ }
+
+ // no element argument, shuffle and use this.element
+ if ( !handlers ) {
+ handlers = element;
+ element = this.element;
+ delegateElement = this.widget();
+ } else {
+ element = delegateElement = $( element );
+ this.bindings = this.bindings.add( element );
+ }
+
+ $.each( handlers, function( event, handler ) {
+ function handlerProxy() {
+ // allow widgets to customize the disabled handling
+ // - disabled as an array instead of boolean
+ // - disabled class as method for disabling individual parts
+ if ( !suppressDisabledCheck &&
+ ( instance.options.disabled === true ||
+ $( this ).hasClass( "ui-state-disabled" ) ) ) {
+ return;
+ }
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+
+ // copy the guid so direct unbinding works
+ if ( typeof handler !== "string" ) {
+ handlerProxy.guid = handler.guid =
+ handler.guid || handlerProxy.guid || $.guid++;
+ }
+
+ var match = event.match( /^([\w:-]*)\s*(.*)$/ ),
+ eventName = match[1] + instance.eventNamespace,
+ selector = match[2];
+ if ( selector ) {
+ delegateElement.delegate( selector, eventName, handlerProxy );
+ } else {
+ element.bind( eventName, handlerProxy );
+ }
+ });
+ },
+
+ _off: function( element, eventName ) {
+ eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) +
+ this.eventNamespace;
+ element.unbind( eventName ).undelegate( eventName );
+
+ // Clear the stack to avoid memory leaks (#10056)
+ this.bindings = $( this.bindings.not( element ).get() );
+ this.focusable = $( this.focusable.not( element ).get() );
+ this.hoverable = $( this.hoverable.not( element ).get() );
+ },
+
+ _delay: function( handler, delay ) {
+ function handlerProxy() {
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+ var instance = this;
+ return setTimeout( handlerProxy, delay || 0 );
+ },
+
+ _hoverable: function( element ) {
+ this.hoverable = this.hoverable.add( element );
+ this._on( element, {
+ mouseenter: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-hover" );
+ },
+ mouseleave: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-hover" );
+ }
+ });
+ },
+
+ _focusable: function( element ) {
+ this.focusable = this.focusable.add( element );
+ this._on( element, {
+ focusin: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-focus" );
+ },
+ focusout: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-focus" );
+ }
+ });
+ },
+
+ _trigger: function( type, event, data ) {
+ var prop, orig,
+ callback = this.options[ type ];
+
+ data = data || {};
+ event = $.Event( event );
+ event.type = ( type === this.widgetEventPrefix ?
+ type :
+ this.widgetEventPrefix + type ).toLowerCase();
+ // the original event may come from any element
+ // so we need to reset the target on the new event
+ event.target = this.element[ 0 ];
+
+ // copy original event properties over to the new event
+ orig = event.originalEvent;
+ if ( orig ) {
+ for ( prop in orig ) {
+ if ( !( prop in event ) ) {
+ event[ prop ] = orig[ prop ];
+ }
+ }
+ }
+
+ this.element.trigger( event, data );
+ return !( $.isFunction( callback ) &&
+ callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
+ event.isDefaultPrevented() );
+ }
+};
+
+$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+ $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+ if ( typeof options === "string" ) {
+ options = { effect: options };
+ }
+ var hasOptions,
+ effectName = !options ?
+ method :
+ options === true || typeof options === "number" ?
+ defaultEffect :
+ options.effect || defaultEffect;
+ options = options || {};
+ if ( typeof options === "number" ) {
+ options = { duration: options };
+ }
+ hasOptions = !$.isEmptyObject( options );
+ options.complete = callback;
+ if ( options.delay ) {
+ element.delay( options.delay );
+ }
+ if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+ element[ method ]( options );
+ } else if ( effectName !== method && element[ effectName ] ) {
+ element[ effectName ]( options.duration, options.easing, callback );
+ } else {
+ element.queue(function( next ) {
+ $( this )[ method ]();
+ if ( callback ) {
+ callback.call( element[ 0 ] );
+ }
+ next();
+ });
+ }
+ };
+});
+
+var widget = $.widget;
+
+
+/*!
+ * jQuery UI Mouse 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/mouse/
+ */
+
+
+var mouseHandled = false;
+$( document ).mouseup( function() {
+ mouseHandled = false;
+});
+
+var mouse = $.widget("ui.mouse", {
+ version: "1.11.4",
+ options: {
+ cancel: "input,textarea,button,select,option",
+ distance: 1,
+ delay: 0
+ },
+ _mouseInit: function() {
+ var that = this;
+
+ this.element
+ .bind("mousedown." + this.widgetName, function(event) {
+ return that._mouseDown(event);
+ })
+ .bind("click." + this.widgetName, function(event) {
+ if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
+ $.removeData(event.target, that.widgetName + ".preventClickEvent");
+ event.stopImmediatePropagation();
+ return false;
+ }
+ });
+
+ this.started = false;
+ },
+
+ // TODO: make sure destroying one instance of mouse doesn't mess with
+ // other instances of mouse
+ _mouseDestroy: function() {
+ this.element.unbind("." + this.widgetName);
+ if ( this._mouseMoveDelegate ) {
+ this.document
+ .unbind("mousemove." + this.widgetName, this._mouseMoveDelegate)
+ .unbind("mouseup." + this.widgetName, this._mouseUpDelegate);
+ }
+ },
+
+ _mouseDown: function(event) {
+ // don't let more than one widget handle mouseStart
+ if ( mouseHandled ) {
+ return;
+ }
+
+ this._mouseMoved = false;
+
+ // we may have missed mouseup (out of window)
+ (this._mouseStarted && this._mouseUp(event));
+
+ this._mouseDownEvent = event;
+
+ var that = this,
+ btnIsLeft = (event.which === 1),
+ // event.target.nodeName works around a bug in IE 8 with
+ // disabled inputs (#7620)
+ elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+ if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+ return true;
+ }
+
+ this.mouseDelayMet = !this.options.delay;
+ if (!this.mouseDelayMet) {
+ this._mouseDelayTimer = setTimeout(function() {
+ that.mouseDelayMet = true;
+ }, this.options.delay);
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted = (this._mouseStart(event) !== false);
+ if (!this._mouseStarted) {
+ event.preventDefault();
+ return true;
+ }
+ }
+
+ // Click event may never have fired (Gecko & Opera)
+ if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
+ $.removeData(event.target, this.widgetName + ".preventClickEvent");
+ }
+
+ // these delegates are required to keep context
+ this._mouseMoveDelegate = function(event) {
+ return that._mouseMove(event);
+ };
+ this._mouseUpDelegate = function(event) {
+ return that._mouseUp(event);
+ };
+
+ this.document
+ .bind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+ .bind( "mouseup." + this.widgetName, this._mouseUpDelegate );
+
+ event.preventDefault();
+
+ mouseHandled = true;
+ return true;
+ },
+
+ _mouseMove: function(event) {
+ // Only check for mouseups outside the document if you've moved inside the document
+ // at least once. This prevents the firing of mouseup in the case of IE<9, which will
+ // fire a mousemove event if content is placed under the cursor. See #7778
+ // Support: IE <9
+ if ( this._mouseMoved ) {
+ // IE mouseup check - mouseup happened when mouse was out of window
+ if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
+ return this._mouseUp(event);
+
+ // Iframe mouseup check - mouseup occurred in another document
+ } else if ( !event.which ) {
+ return this._mouseUp( event );
+ }
+ }
+
+ if ( event.which || event.button ) {
+ this._mouseMoved = true;
+ }
+
+ if (this._mouseStarted) {
+ this._mouseDrag(event);
+ return event.preventDefault();
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted =
+ (this._mouseStart(this._mouseDownEvent, event) !== false);
+ (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+ }
+
+ return !this._mouseStarted;
+ },
+
+ _mouseUp: function(event) {
+ this.document
+ .unbind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+ .unbind( "mouseup." + this.widgetName, this._mouseUpDelegate );
+
+ if (this._mouseStarted) {
+ this._mouseStarted = false;
+
+ if (event.target === this._mouseDownEvent.target) {
+ $.data(event.target, this.widgetName + ".preventClickEvent", true);
+ }
+
+ this._mouseStop(event);
+ }
+
+ mouseHandled = false;
+ return false;
+ },
+
+ _mouseDistanceMet: function(event) {
+ return (Math.max(
+ Math.abs(this._mouseDownEvent.pageX - event.pageX),
+ Math.abs(this._mouseDownEvent.pageY - event.pageY)
+ ) >= this.options.distance
+ );
+ },
+
+ _mouseDelayMet: function(/* event */) {
+ return this.mouseDelayMet;
+ },
+
+ // These are placeholder methods, to be overriden by extending plugin
+ _mouseStart: function(/* event */) {},
+ _mouseDrag: function(/* event */) {},
+ _mouseStop: function(/* event */) {},
+ _mouseCapture: function(/* event */) { return true; }
+});
+
+
+/*!
+ * jQuery UI Position 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/position/
+ */
+
+(function() {
+
+$.ui = $.ui || {};
+
+var cachedScrollbarWidth, supportsOffsetFractions,
+ max = Math.max,
+ abs = Math.abs,
+ round = Math.round,
+ rhorizontal = /left|center|right/,
+ rvertical = /top|center|bottom/,
+ roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+ rposition = /^\w+/,
+ rpercent = /%$/,
+ _position = $.fn.position;
+
+function getOffsets( offsets, width, height ) {
+ return [
+ parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+ parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+ ];
+}
+
+function parseCss( element, property ) {
+ return parseInt( $.css( element, property ), 10 ) || 0;
+}
+
+function getDimensions( elem ) {
+ var raw = elem[0];
+ if ( raw.nodeType === 9 ) {
+ return {
+ width: elem.width(),
+ height: elem.height(),
+ offset: { top: 0, left: 0 }
+ };
+ }
+ if ( $.isWindow( raw ) ) {
+ return {
+ width: elem.width(),
+ height: elem.height(),
+ offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
+ };
+ }
+ if ( raw.preventDefault ) {
+ return {
+ width: 0,
+ height: 0,
+ offset: { top: raw.pageY, left: raw.pageX }
+ };
+ }
+ return {
+ width: elem.outerWidth(),
+ height: elem.outerHeight(),
+ offset: elem.offset()
+ };
+}
+
+$.position = {
+ scrollbarWidth: function() {
+ if ( cachedScrollbarWidth !== undefined ) {
+ return cachedScrollbarWidth;
+ }
+ var w1, w2,
+ div = $( "<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
+ innerDiv = div.children()[0];
+
+ $( "body" ).append( div );
+ w1 = innerDiv.offsetWidth;
+ div.css( "overflow", "scroll" );
+
+ w2 = innerDiv.offsetWidth;
+
+ if ( w1 === w2 ) {
+ w2 = div[0].clientWidth;
+ }
+
+ div.remove();
+
+ return (cachedScrollbarWidth = w1 - w2);
+ },
+ getScrollInfo: function( within ) {
+ var overflowX = within.isWindow || within.isDocument ? "" :
+ within.element.css( "overflow-x" ),
+ overflowY = within.isWindow || within.isDocument ? "" :
+ within.element.css( "overflow-y" ),
+ hasOverflowX = overflowX === "scroll" ||
+ ( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
+ hasOverflowY = overflowY === "scroll" ||
+ ( overflowY === "auto" && within.height < within.element[0].scrollHeight );
+ return {
+ width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+ height: hasOverflowX ? $.position.scrollbarWidth() : 0
+ };
+ },
+ getWithinInfo: function( element ) {
+ var withinElement = $( element || window ),
+ isWindow = $.isWindow( withinElement[0] ),
+ isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;
+ return {
+ element: withinElement,
+ isWindow: isWindow,
+ isDocument: isDocument,
+ offset: withinElement.offset() || { left: 0, top: 0 },
+ scrollLeft: withinElement.scrollLeft(),
+ scrollTop: withinElement.scrollTop(),
+
+ // support: jQuery 1.6.x
+ // jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows
+ width: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(),
+ height: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight()
+ };
+ }
+};
+
+$.fn.position = function( options ) {
+ if ( !options || !options.of ) {
+ return _position.apply( this, arguments );
+ }
+
+ // make a copy, we don't want to modify arguments
+ options = $.extend( {}, options );
+
+ var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+ target = $( options.of ),
+ within = $.position.getWithinInfo( options.within ),
+ scrollInfo = $.position.getScrollInfo( within ),
+ collision = ( options.collision || "flip" ).split( " " ),
+ offsets = {};
+
+ dimensions = getDimensions( target );
+ if ( target[0].preventDefault ) {
+ // force left top to allow flipping
+ options.at = "left top";
+ }
+ targetWidth = dimensions.width;
+ targetHeight = dimensions.height;
+ targetOffset = dimensions.offset;
+ // clone to reuse original targetOffset later
+ basePosition = $.extend( {}, targetOffset );
+
+ // force my and at to have valid horizontal and vertical positions
+ // if a value is missing or invalid, it will be converted to center
+ $.each( [ "my", "at" ], function() {
+ var pos = ( options[ this ] || "" ).split( " " ),
+ horizontalOffset,
+ verticalOffset;
+
+ if ( pos.length === 1) {
+ pos = rhorizontal.test( pos[ 0 ] ) ?
+ pos.concat( [ "center" ] ) :
+ rvertical.test( pos[ 0 ] ) ?
+ [ "center" ].concat( pos ) :
+ [ "center", "center" ];
+ }
+ pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+ pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+
+ // calculate offsets
+ horizontalOffset = roffset.exec( pos[ 0 ] );
+ verticalOffset = roffset.exec( pos[ 1 ] );
+ offsets[ this ] = [
+ horizontalOffset ? horizontalOffset[ 0 ] : 0,
+ verticalOffset ? verticalOffset[ 0 ] : 0
+ ];
+
+ // reduce to just the positions without the offsets
+ options[ this ] = [
+ rposition.exec( pos[ 0 ] )[ 0 ],
+ rposition.exec( pos[ 1 ] )[ 0 ]
+ ];
+ });
+
+ // normalize collision option
+ if ( collision.length === 1 ) {
+ collision[ 1 ] = collision[ 0 ];
+ }
+
+ if ( options.at[ 0 ] === "right" ) {
+ basePosition.left += targetWidth;
+ } else if ( options.at[ 0 ] === "center" ) {
+ basePosition.left += targetWidth / 2;
+ }
+
+ if ( options.at[ 1 ] === "bottom" ) {
+ basePosition.top += targetHeight;
+ } else if ( options.at[ 1 ] === "center" ) {
+ basePosition.top += targetHeight / 2;
+ }
+
+ atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+ basePosition.left += atOffset[ 0 ];
+ basePosition.top += atOffset[ 1 ];
+
+ return this.each(function() {
+ var collisionPosition, using,
+ elem = $( this ),
+ elemWidth = elem.outerWidth(),
+ elemHeight = elem.outerHeight(),
+ marginLeft = parseCss( this, "marginLeft" ),
+ marginTop = parseCss( this, "marginTop" ),
+ collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
+ collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
+ position = $.extend( {}, basePosition ),
+ myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
+
+ if ( options.my[ 0 ] === "right" ) {
+ position.left -= elemWidth;
+ } else if ( options.my[ 0 ] === "center" ) {
+ position.left -= elemWidth / 2;
+ }
+
+ if ( options.my[ 1 ] === "bottom" ) {
+ position.top -= elemHeight;
+ } else if ( options.my[ 1 ] === "center" ) {
+ position.top -= elemHeight / 2;
+ }
+
+ position.left += myOffset[ 0 ];
+ position.top += myOffset[ 1 ];
+
+ // if the browser doesn't support fractions, then round for consistent results
+ if ( !supportsOffsetFractions ) {
+ position.left = round( position.left );
+ position.top = round( position.top );
+ }
+
+ collisionPosition = {
+ marginLeft: marginLeft,
+ marginTop: marginTop
+ };
+
+ $.each( [ "left", "top" ], function( i, dir ) {
+ if ( $.ui.position[ collision[ i ] ] ) {
+ $.ui.position[ collision[ i ] ][ dir ]( position, {
+ targetWidth: targetWidth,
+ targetHeight: targetHeight,
+ elemWidth: elemWidth,
+ elemHeight: elemHeight,
+ collisionPosition: collisionPosition,
+ collisionWidth: collisionWidth,
+ collisionHeight: collisionHeight,
+ offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
+ my: options.my,
+ at: options.at,
+ within: within,
+ elem: elem
+ });
+ }
+ });
+
+ if ( options.using ) {
+ // adds feedback as second argument to using callback, if present
+ using = function( props ) {
+ var left = targetOffset.left - position.left,
+ right = left + targetWidth - elemWidth,
+ top = targetOffset.top - position.top,
+ bottom = top + targetHeight - elemHeight,
+ feedback = {
+ target: {
+ element: target,
+ left: targetOffset.left,
+ top: targetOffset.top,
+ width: targetWidth,
+ height: targetHeight
+ },
+ element: {
+ element: elem,
+ left: position.left,
+ top: position.top,
+ width: elemWidth,
+ height: elemHeight
+ },
+ horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+ vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+ };
+ if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+ feedback.horizontal = "center";
+ }
+ if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+ feedback.vertical = "middle";
+ }
+ if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+ feedback.important = "horizontal";
+ } else {
+ feedback.important = "vertical";
+ }
+ options.using.call( this, props, feedback );
+ };
+ }
+
+ elem.offset( $.extend( position, { using: using } ) );
+ });
+};
+
+$.ui.position = {
+ fit: {
+ left: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+ outerWidth = within.width,
+ collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+ overLeft = withinOffset - collisionPosLeft,
+ overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+ newOverRight;
+
+ // element is wider than within
+ if ( data.collisionWidth > outerWidth ) {
+ // element is initially over the left side of within
+ if ( overLeft > 0 && overRight <= 0 ) {
+ newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
+ position.left += overLeft - newOverRight;
+ // element is initially over right side of within
+ } else if ( overRight > 0 && overLeft <= 0 ) {
+ position.left = withinOffset;
+ // element is initially over both left and right sides of within
+ } else {
+ if ( overLeft > overRight ) {
+ position.left = withinOffset + outerWidth - data.collisionWidth;
+ } else {
+ position.left = withinOffset;
+ }
+ }
+ // too far left -> align with left edge
+ } else if ( overLeft > 0 ) {
+ position.left += overLeft;
+ // too far right -> align with right edge
+ } else if ( overRight > 0 ) {
+ position.left -= overRight;
+ // adjust based on position and margin
+ } else {
+ position.left = max( position.left - collisionPosLeft, position.left );
+ }
+ },
+ top: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+ outerHeight = data.within.height,
+ collisionPosTop = position.top - data.collisionPosition.marginTop,
+ overTop = withinOffset - collisionPosTop,
+ overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+ newOverBottom;
+
+ // element is taller than within
+ if ( data.collisionHeight > outerHeight ) {
+ // element is initially over the top of within
+ if ( overTop > 0 && overBottom <= 0 ) {
+ newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
+ position.top += overTop - newOverBottom;
+ // element is initially over bottom of within
+ } else if ( overBottom > 0 && overTop <= 0 ) {
+ position.top = withinOffset;
+ // element is initially over both top and bottom of within
+ } else {
+ if ( overTop > overBottom ) {
+ position.top = withinOffset + outerHeight - data.collisionHeight;
+ } else {
+ position.top = withinOffset;
+ }
+ }
+ // too far up -> align with top
+ } else if ( overTop > 0 ) {
+ position.top += overTop;
+ // too far down -> align with bottom edge
+ } else if ( overBottom > 0 ) {
+ position.top -= overBottom;
+ // adjust based on position and margin
+ } else {
+ position.top = max( position.top - collisionPosTop, position.top );
+ }
+ }
+ },
+ flip: {
+ left: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.offset.left + within.scrollLeft,
+ outerWidth = within.width,
+ offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+ collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+ overLeft = collisionPosLeft - offsetLeft,
+ overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+ myOffset = data.my[ 0 ] === "left" ?
+ -data.elemWidth :
+ data.my[ 0 ] === "right" ?
+ data.elemWidth :
+ 0,
+ atOffset = data.at[ 0 ] === "left" ?
+ data.targetWidth :
+ data.at[ 0 ] === "right" ?
+ -data.targetWidth :
+ 0,
+ offset = -2 * data.offset[ 0 ],
+ newOverRight,
+ newOverLeft;
+
+ if ( overLeft < 0 ) {
+ newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
+ if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+ position.left += myOffset + atOffset + offset;
+ }
+ } else if ( overRight > 0 ) {
+ newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
+ if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+ position.left += myOffset + atOffset + offset;
+ }
+ }
+ },
+ top: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.offset.top + within.scrollTop,
+ outerHeight = within.height,
+ offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+ collisionPosTop = position.top - data.collisionPosition.marginTop,
+ overTop = collisionPosTop - offsetTop,
+ overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+ top = data.my[ 1 ] === "top",
+ myOffset = top ?
+ -data.elemHeight :
+ data.my[ 1 ] === "bottom" ?
+ data.elemHeight :
+ 0,
+ atOffset = data.at[ 1 ] === "top" ?
+ data.targetHeight :
+ data.at[ 1 ] === "bottom" ?
+ -data.targetHeight :
+ 0,
+ offset = -2 * data.offset[ 1 ],
+ newOverTop,
+ newOverBottom;
+ if ( overTop < 0 ) {
+ newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
+ if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {
+ position.top += myOffset + atOffset + offset;
+ }
+ } else if ( overBottom > 0 ) {
+ newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
+ if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {
+ position.top += myOffset + atOffset + offset;
+ }
+ }
+ }
+ },
+ flipfit: {
+ left: function() {
+ $.ui.position.flip.left.apply( this, arguments );
+ $.ui.position.fit.left.apply( this, arguments );
+ },
+ top: function() {
+ $.ui.position.flip.top.apply( this, arguments );
+ $.ui.position.fit.top.apply( this, arguments );
+ }
+ }
+};
+
+// fraction support test
+(function() {
+ var testElement, testElementParent, testElementStyle, offsetLeft, i,
+ body = document.getElementsByTagName( "body" )[ 0 ],
+ div = document.createElement( "div" );
+
+ //Create a "fake body" for testing based on method used in jQuery.support
+ testElement = document.createElement( body ? "div" : "body" );
+ testElementStyle = {
+ visibility: "hidden",
+ width: 0,
+ height: 0,
+ border: 0,
+ margin: 0,
+ background: "none"
+ };
+ if ( body ) {
+ $.extend( testElementStyle, {
+ position: "absolute",
+ left: "-1000px",
+ top: "-1000px"
+ });
+ }
+ for ( i in testElementStyle ) {
+ testElement.style[ i ] = testElementStyle[ i ];
+ }
+ testElement.appendChild( div );
+ testElementParent = body || document.documentElement;
+ testElementParent.insertBefore( testElement, testElementParent.firstChild );
+
+ div.style.cssText = "position: absolute; left: 10.7432222px;";
+
+ offsetLeft = $( div ).offset().left;
+ supportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11;
+
+ testElement.innerHTML = "";
+ testElementParent.removeChild( testElement );
+})();
+
+})();
+
+var position = $.ui.position;
+
+
+/*!
+ * jQuery UI Accordion 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/accordion/
+ */
+
+
+var accordion = $.widget( "ui.accordion", {
+ version: "1.11.4",
+ options: {
+ active: 0,
+ animate: {},
+ collapsible: false,
+ event: "click",
+ header: "> li > :first-child,> :not(li):even",
+ heightStyle: "auto",
+ icons: {
+ activeHeader: "ui-icon-triangle-1-s",
+ header: "ui-icon-triangle-1-e"
+ },
+
+ // callbacks
+ activate: null,
+ beforeActivate: null
+ },
+
+ hideProps: {
+ borderTopWidth: "hide",
+ borderBottomWidth: "hide",
+ paddingTop: "hide",
+ paddingBottom: "hide",
+ height: "hide"
+ },
+
+ showProps: {
+ borderTopWidth: "show",
+ borderBottomWidth: "show",
+ paddingTop: "show",
+ paddingBottom: "show",
+ height: "show"
+ },
+
+ _create: function() {
+ var options = this.options;
+ this.prevShow = this.prevHide = $();
+ this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
+ // ARIA
+ .attr( "role", "tablist" );
+
+ // don't allow collapsible: false and active: false / null
+ if ( !options.collapsible && (options.active === false || options.active == null) ) {
+ options.active = 0;
+ }
+
+ this._processPanels();
+ // handle negative values
+ if ( options.active < 0 ) {
+ options.active += this.headers.length;
+ }
+ this._refresh();
+ },
+
+ _getCreateEventData: function() {
+ return {
+ header: this.active,
+ panel: !this.active.length ? $() : this.active.next()
+ };
+ },
+
+ _createIcons: function() {
+ var icons = this.options.icons;
+ if ( icons ) {
+ $( "<span>" )
+ .addClass( "ui-accordion-header-icon ui-icon " + icons.header )
+ .prependTo( this.headers );
+ this.active.children( ".ui-accordion-header-icon" )
+ .removeClass( icons.header )
+ .addClass( icons.activeHeader );
+ this.headers.addClass( "ui-accordion-icons" );
+ }
+ },
+
+ _destroyIcons: function() {
+ this.headers
+ .removeClass( "ui-accordion-icons" )
+ .children( ".ui-accordion-header-icon" )
+ .remove();
+ },
+
+ _destroy: function() {
+ var contents;
+
+ // clean up main element
+ this.element
+ .removeClass( "ui-accordion ui-widget ui-helper-reset" )
+ .removeAttr( "role" );
+
+ // clean up headers
+ this.headers
+ .removeClass( "ui-accordion-header ui-accordion-header-active ui-state-default " +
+ "ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-expanded" )
+ .removeAttr( "aria-selected" )
+ .removeAttr( "aria-controls" )
+ .removeAttr( "tabIndex" )
+ .removeUniqueId();
+
+ this._destroyIcons();
+
+ // clean up content panels
+ contents = this.headers.next()
+ .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom " +
+ "ui-accordion-content ui-accordion-content-active ui-state-disabled" )
+ .css( "display", "" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-hidden" )
+ .removeAttr( "aria-labelledby" )
+ .removeUniqueId();
+
+ if ( this.options.heightStyle !== "content" ) {
+ contents.css( "height", "" );
+ }
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "active" ) {
+ // _activate() will handle invalid values and update this.options
+ this._activate( value );
+ return;
+ }
+
+ if ( key === "event" ) {
+ if ( this.options.event ) {
+ this._off( this.headers, this.options.event );
+ }
+ this._setupEvents( value );
+ }
+
+ this._super( key, value );
+
+ // setting collapsible: false while collapsed; open first panel
+ if ( key === "collapsible" && !value && this.options.active === false ) {
+ this._activate( 0 );
+ }
+
+ if ( key === "icons" ) {
+ this._destroyIcons();
+ if ( value ) {
+ this._createIcons();
+ }
+ }
+
+ // #5332 - opacity doesn't cascade to positioned elements in IE
+ // so we need to add the disabled class to the headers and panels
+ if ( key === "disabled" ) {
+ this.element
+ .toggleClass( "ui-state-disabled", !!value )
+ .attr( "aria-disabled", value );
+ this.headers.add( this.headers.next() )
+ .toggleClass( "ui-state-disabled", !!value );
+ }
+ },
+
+ _keydown: function( event ) {
+ if ( event.altKey || event.ctrlKey ) {
+ return;
+ }
+
+ var keyCode = $.ui.keyCode,
+ length = this.headers.length,
+ currentIndex = this.headers.index( event.target ),
+ toFocus = false;
+
+ switch ( event.keyCode ) {
+ case keyCode.RIGHT:
+ case keyCode.DOWN:
+ toFocus = this.headers[ ( currentIndex + 1 ) % length ];
+ break;
+ case keyCode.LEFT:
+ case keyCode.UP:
+ toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
+ break;
+ case keyCode.SPACE:
+ case keyCode.ENTER:
+ this._eventHandler( event );
+ break;
+ case keyCode.HOME:
+ toFocus = this.headers[ 0 ];
+ break;
+ case keyCode.END:
+ toFocus = this.headers[ length - 1 ];
+ break;
+ }
+
+ if ( toFocus ) {
+ $( event.target ).attr( "tabIndex", -1 );
+ $( toFocus ).attr( "tabIndex", 0 );
+ toFocus.focus();
+ event.preventDefault();
+ }
+ },
+
+ _panelKeyDown: function( event ) {
+ if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
+ $( event.currentTarget ).prev().focus();
+ }
+ },
+
+ refresh: function() {
+ var options = this.options;
+ this._processPanels();
+
+ // was collapsed or no panel
+ if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
+ options.active = false;
+ this.active = $();
+ // active false only when collapsible is true
+ } else if ( options.active === false ) {
+ this._activate( 0 );
+ // was active, but active panel is gone
+ } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+ // all remaining panel are disabled
+ if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
+ options.active = false;
+ this.active = $();
+ // activate previous panel
+ } else {
+ this._activate( Math.max( 0, options.active - 1 ) );
+ }
+ // was active, active panel still exists
+ } else {
+ // make sure active index is correct
+ options.active = this.headers.index( this.active );
+ }
+
+ this._destroyIcons();
+
+ this._refresh();
+ },
+
+ _processPanels: function() {
+ var prevHeaders = this.headers,
+ prevPanels = this.panels;
+
+ this.headers = this.element.find( this.options.header )
+ .addClass( "ui-accordion-header ui-state-default ui-corner-all" );
+
+ this.panels = this.headers.next()
+ .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
+ .filter( ":not(.ui-accordion-content-active)" )
+ .hide();
+
+ // Avoid memory leaks (#10056)
+ if ( prevPanels ) {
+ this._off( prevHeaders.not( this.headers ) );
+ this._off( prevPanels.not( this.panels ) );
+ }
+ },
+
+ _refresh: function() {
+ var maxHeight,
+ options = this.options,
+ heightStyle = options.heightStyle,
+ parent = this.element.parent();
+
+ this.active = this._findActive( options.active )
+ .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
+ .removeClass( "ui-corner-all" );
+ this.active.next()
+ .addClass( "ui-accordion-content-active" )
+ .show();
+
+ this.headers
+ .attr( "role", "tab" )
+ .each(function() {
+ var header = $( this ),
+ headerId = header.uniqueId().attr( "id" ),
+ panel = header.next(),
+ panelId = panel.uniqueId().attr( "id" );
+ header.attr( "aria-controls", panelId );
+ panel.attr( "aria-labelledby", headerId );
+ })
+ .next()
+ .attr( "role", "tabpanel" );
+
+ this.headers
+ .not( this.active )
+ .attr({
+ "aria-selected": "false",
+ "aria-expanded": "false",
+ tabIndex: -1
+ })
+ .next()
+ .attr({
+ "aria-hidden": "true"
+ })
+ .hide();
+
+ // make sure at least one header is in the tab order
+ if ( !this.active.length ) {
+ this.headers.eq( 0 ).attr( "tabIndex", 0 );
+ } else {
+ this.active.attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ })
+ .next()
+ .attr({
+ "aria-hidden": "false"
+ });
+ }
+
+ this._createIcons();
+
+ this._setupEvents( options.event );
+
+ if ( heightStyle === "fill" ) {
+ maxHeight = parent.height();
+ this.element.siblings( ":visible" ).each(function() {
+ var elem = $( this ),
+ position = elem.css( "position" );
+
+ if ( position === "absolute" || position === "fixed" ) {
+ return;
+ }
+ maxHeight -= elem.outerHeight( true );
+ });
+
+ this.headers.each(function() {
+ maxHeight -= $( this ).outerHeight( true );
+ });
+
+ this.headers.next()
+ .each(function() {
+ $( this ).height( Math.max( 0, maxHeight -
+ $( this ).innerHeight() + $( this ).height() ) );
+ })
+ .css( "overflow", "auto" );
+ } else if ( heightStyle === "auto" ) {
+ maxHeight = 0;
+ this.headers.next()
+ .each(function() {
+ maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
+ })
+ .height( maxHeight );
+ }
+ },
+
+ _activate: function( index ) {
+ var active = this._findActive( index )[ 0 ];
+
+ // trying to activate the already active panel
+ if ( active === this.active[ 0 ] ) {
+ return;
+ }
+
+ // trying to collapse, simulate a click on the currently active header
+ active = active || this.active[ 0 ];
+
+ this._eventHandler({
+ target: active,
+ currentTarget: active,
+ preventDefault: $.noop
+ });
+ },
+
+ _findActive: function( selector ) {
+ return typeof selector === "number" ? this.headers.eq( selector ) : $();
+ },
+
+ _setupEvents: function( event ) {
+ var events = {
+ keydown: "_keydown"
+ };
+ if ( event ) {
+ $.each( event.split( " " ), function( index, eventName ) {
+ events[ eventName ] = "_eventHandler";
+ });
+ }
+
+ this._off( this.headers.add( this.headers.next() ) );
+ this._on( this.headers, events );
+ this._on( this.headers.next(), { keydown: "_panelKeyDown" });
+ this._hoverable( this.headers );
+ this._focusable( this.headers );
+ },
+
+ _eventHandler: function( event ) {
+ var options = this.options,
+ active = this.active,
+ clicked = $( event.currentTarget ),
+ clickedIsActive = clicked[ 0 ] === active[ 0 ],
+ collapsing = clickedIsActive && options.collapsible,
+ toShow = collapsing ? $() : clicked.next(),
+ toHide = active.next(),
+ eventData = {
+ oldHeader: active,
+ oldPanel: toHide,
+ newHeader: collapsing ? $() : clicked,
+ newPanel: toShow
+ };
+
+ event.preventDefault();
+
+ if (
+ // click on active header, but not collapsible
+ ( clickedIsActive && !options.collapsible ) ||
+ // allow canceling activation
+ ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+ return;
+ }
+
+ options.active = collapsing ? false : this.headers.index( clicked );
+
+ // when the call to ._toggle() comes after the class changes
+ // it causes a very odd bug in IE 8 (see #6720)
+ this.active = clickedIsActive ? $() : clicked;
+ this._toggle( eventData );
+
+ // switch classes
+ // corner classes on the previously active header stay after the animation
+ active.removeClass( "ui-accordion-header-active ui-state-active" );
+ if ( options.icons ) {
+ active.children( ".ui-accordion-header-icon" )
+ .removeClass( options.icons.activeHeader )
+ .addClass( options.icons.header );
+ }
+
+ if ( !clickedIsActive ) {
+ clicked
+ .removeClass( "ui-corner-all" )
+ .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
+ if ( options.icons ) {
+ clicked.children( ".ui-accordion-header-icon" )
+ .removeClass( options.icons.header )
+ .addClass( options.icons.activeHeader );
+ }
+
+ clicked
+ .next()
+ .addClass( "ui-accordion-content-active" );
+ }
+ },
+
+ _toggle: function( data ) {
+ var toShow = data.newPanel,
+ toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
+
+ // handle activating a panel during the animation for another activation
+ this.prevShow.add( this.prevHide ).stop( true, true );
+ this.prevShow = toShow;
+ this.prevHide = toHide;
+
+ if ( this.options.animate ) {
+ this._animate( toShow, toHide, data );
+ } else {
+ toHide.hide();
+ toShow.show();
+ this._toggleComplete( data );
+ }
+
+ toHide.attr({
+ "aria-hidden": "true"
+ });
+ toHide.prev().attr({
+ "aria-selected": "false",
+ "aria-expanded": "false"
+ });
+ // if we're switching panels, remove the old header from the tab order
+ // if we're opening from collapsed state, remove the previous header from the tab order
+ // if we're collapsing, then keep the collapsing header in the tab order
+ if ( toShow.length && toHide.length ) {
+ toHide.prev().attr({
+ "tabIndex": -1,
+ "aria-expanded": "false"
+ });
+ } else if ( toShow.length ) {
+ this.headers.filter(function() {
+ return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0;
+ })
+ .attr( "tabIndex", -1 );
+ }
+
+ toShow
+ .attr( "aria-hidden", "false" )
+ .prev()
+ .attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ });
+ },
+
+ _animate: function( toShow, toHide, data ) {
+ var total, easing, duration,
+ that = this,
+ adjust = 0,
+ boxSizing = toShow.css( "box-sizing" ),
+ down = toShow.length &&
+ ( !toHide.length || ( toShow.index() < toHide.index() ) ),
+ animate = this.options.animate || {},
+ options = down && animate.down || animate,
+ complete = function() {
+ that._toggleComplete( data );
+ };
+
+ if ( typeof options === "number" ) {
+ duration = options;
+ }
+ if ( typeof options === "string" ) {
+ easing = options;
+ }
+ // fall back from options to animation in case of partial down settings
+ easing = easing || options.easing || animate.easing;
+ duration = duration || options.duration || animate.duration;
+
+ if ( !toHide.length ) {
+ return toShow.animate( this.showProps, duration, easing, complete );
+ }
+ if ( !toShow.length ) {
+ return toHide.animate( this.hideProps, duration, easing, complete );
+ }
+
+ total = toShow.show().outerHeight();
+ toHide.animate( this.hideProps, {
+ duration: duration,
+ easing: easing,
+ step: function( now, fx ) {
+ fx.now = Math.round( now );
+ }
+ });
+ toShow
+ .hide()
+ .animate( this.showProps, {
+ duration: duration,
+ easing: easing,
+ complete: complete,
+ step: function( now, fx ) {
+ fx.now = Math.round( now );
+ if ( fx.prop !== "height" ) {
+ if ( boxSizing === "content-box" ) {
+ adjust += fx.now;
+ }
+ } else if ( that.options.heightStyle !== "content" ) {
+ fx.now = Math.round( total - toHide.outerHeight() - adjust );
+ adjust = 0;
+ }
+ }
+ });
+ },
+
+ _toggleComplete: function( data ) {
+ var toHide = data.oldPanel;
+
+ toHide
+ .removeClass( "ui-accordion-content-active" )
+ .prev()
+ .removeClass( "ui-corner-top" )
+ .addClass( "ui-corner-all" );
+
+ // Work around for rendering bug in IE (#5421)
+ if ( toHide.length ) {
+ toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;
+ }
+ this._trigger( "activate", null, data );
+ }
+});
+
+
+/*!
+ * jQuery UI Menu 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/menu/
+ */
+
+
+var menu = $.widget( "ui.menu", {
+ version: "1.11.4",
+ defaultElement: "<ul>",
+ delay: 300,
+ options: {
+ icons: {
+ submenu: "ui-icon-carat-1-e"
+ },
+ items: "> *",
+ menus: "ul",
+ position: {
+ my: "left-1 top",
+ at: "right top"
+ },
+ role: "menu",
+
+ // callbacks
+ blur: null,
+ focus: null,
+ select: null
+ },
+
+ _create: function() {
+ this.activeMenu = this.element;
+
+ // Flag used to prevent firing of the click handler
+ // as the event bubbles up through nested menus
+ this.mouseHandled = false;
+ this.element
+ .uniqueId()
+ .addClass( "ui-menu ui-widget ui-widget-content" )
+ .toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
+ .attr({
+ role: this.options.role,
+ tabIndex: 0
+ });
+
+ if ( this.options.disabled ) {
+ this.element
+ .addClass( "ui-state-disabled" )
+ .attr( "aria-disabled", "true" );
+ }
+
+ this._on({
+ // Prevent focus from sticking to links inside menu after clicking
+ // them (focus should always stay on UL during navigation).
+ "mousedown .ui-menu-item": function( event ) {
+ event.preventDefault();
+ },
+ "click .ui-menu-item": function( event ) {
+ var target = $( event.target );
+ if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
+ this.select( event );
+
+ // Only set the mouseHandled flag if the event will bubble, see #9469.
+ if ( !event.isPropagationStopped() ) {
+ this.mouseHandled = true;
+ }
+
+ // Open submenu on click
+ if ( target.has( ".ui-menu" ).length ) {
+ this.expand( event );
+ } else if ( !this.element.is( ":focus" ) && $( this.document[ 0 ].activeElement ).closest( ".ui-menu" ).length ) {
+
+ // Redirect focus to the menu
+ this.element.trigger( "focus", [ true ] );
+
+ // If the active item is on the top level, let it stay active.
+ // Otherwise, blur the active item since it is no longer visible.
+ if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
+ clearTimeout( this.timer );
+ }
+ }
+ }
+ },
+ "mouseenter .ui-menu-item": function( event ) {
+ // Ignore mouse events while typeahead is active, see #10458.
+ // Prevents focusing the wrong item when typeahead causes a scroll while the mouse
+ // is over an item in the menu
+ if ( this.previousFilter ) {
+ return;
+ }
+ var target = $( event.currentTarget );
+ // Remove ui-state-active class from siblings of the newly focused menu item
+ // to avoid a jump caused by adjacent elements both having a class with a border
+ target.siblings( ".ui-state-active" ).removeClass( "ui-state-active" );
+ this.focus( event, target );
+ },
+ mouseleave: "collapseAll",
+ "mouseleave .ui-menu": "collapseAll",
+ focus: function( event, keepActiveItem ) {
+ // If there's already an active item, keep it active
+ // If not, activate the first item
+ var item = this.active || this.element.find( this.options.items ).eq( 0 );
+
+ if ( !keepActiveItem ) {
+ this.focus( event, item );
+ }
+ },
+ blur: function( event ) {
+ this._delay(function() {
+ if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
+ this.collapseAll( event );
+ }
+ });
+ },
+ keydown: "_keydown"
+ });
+
+ this.refresh();
+
+ // Clicks outside of a menu collapse any open menus
+ this._on( this.document, {
+ click: function( event ) {
+ if ( this._closeOnDocumentClick( event ) ) {
+ this.collapseAll( event );
+ }
+
+ // Reset the mouseHandled flag
+ this.mouseHandled = false;
+ }
+ });
+ },
+
+ _destroy: function() {
+ // Destroy (sub)menus
+ this.element
+ .removeAttr( "aria-activedescendant" )
+ .find( ".ui-menu" ).addBack()
+ .removeClass( "ui-menu ui-widget ui-widget-content ui-menu-icons ui-front" )
+ .removeAttr( "role" )
+ .removeAttr( "tabIndex" )
+ .removeAttr( "aria-labelledby" )
+ .removeAttr( "aria-expanded" )
+ .removeAttr( "aria-hidden" )
+ .removeAttr( "aria-disabled" )
+ .removeUniqueId()
+ .show();
+
+ // Destroy menu items
+ this.element.find( ".ui-menu-item" )
+ .removeClass( "ui-menu-item" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-disabled" )
+ .removeUniqueId()
+ .removeClass( "ui-state-hover" )
+ .removeAttr( "tabIndex" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-haspopup" )
+ .children().each( function() {
+ var elem = $( this );
+ if ( elem.data( "ui-menu-submenu-carat" ) ) {
+ elem.remove();
+ }
+ });
+
+ // Destroy menu dividers
+ this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
+ },
+
+ _keydown: function( event ) {
+ var match, prev, character, skip,
+ preventDefault = true;
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.PAGE_UP:
+ this.previousPage( event );
+ break;
+ case $.ui.keyCode.PAGE_DOWN:
+ this.nextPage( event );
+ break;
+ case $.ui.keyCode.HOME:
+ this._move( "first", "first", event );
+ break;
+ case $.ui.keyCode.END:
+ this._move( "last", "last", event );
+ break;
+ case $.ui.keyCode.UP:
+ this.previous( event );
+ break;
+ case $.ui.keyCode.DOWN:
+ this.next( event );
+ break;
+ case $.ui.keyCode.LEFT:
+ this.collapse( event );
+ break;
+ case $.ui.keyCode.RIGHT:
+ if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+ this.expand( event );
+ }
+ break;
+ case $.ui.keyCode.ENTER:
+ case $.ui.keyCode.SPACE:
+ this._activate( event );
+ break;
+ case $.ui.keyCode.ESCAPE:
+ this.collapse( event );
+ break;
+ default:
+ preventDefault = false;
+ prev = this.previousFilter || "";
+ character = String.fromCharCode( event.keyCode );
+ skip = false;
+
+ clearTimeout( this.filterTimer );
+
+ if ( character === prev ) {
+ skip = true;
+ } else {
+ character = prev + character;
+ }
+
+ match = this._filterMenuItems( character );
+ match = skip && match.index( this.active.next() ) !== -1 ?
+ this.active.nextAll( ".ui-menu-item" ) :
+ match;
+
+ // If no matches on the current filter, reset to the last character pressed
+ // to move down the menu to the first item that starts with that character
+ if ( !match.length ) {
+ character = String.fromCharCode( event.keyCode );
+ match = this._filterMenuItems( character );
+ }
+
+ if ( match.length ) {
+ this.focus( event, match );
+ this.previousFilter = character;
+ this.filterTimer = this._delay(function() {
+ delete this.previousFilter;
+ }, 1000 );
+ } else {
+ delete this.previousFilter;
+ }
+ }
+
+ if ( preventDefault ) {
+ event.preventDefault();
+ }
+ },
+
+ _activate: function( event ) {
+ if ( !this.active.is( ".ui-state-disabled" ) ) {
+ if ( this.active.is( "[aria-haspopup='true']" ) ) {
+ this.expand( event );
+ } else {
+ this.select( event );
+ }
+ }
+ },
+
+ refresh: function() {
+ var menus, items,
+ that = this,
+ icon = this.options.icons.submenu,
+ submenus = this.element.find( this.options.menus );
+
+ this.element.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length );
+
+ // Initialize nested menus
+ submenus.filter( ":not(.ui-menu)" )
+ .addClass( "ui-menu ui-widget ui-widget-content ui-front" )
+ .hide()
+ .attr({
+ role: this.options.role,
+ "aria-hidden": "true",
+ "aria-expanded": "false"
+ })
+ .each(function() {
+ var menu = $( this ),
+ item = menu.parent(),
+ submenuCarat = $( "<span>" )
+ .addClass( "ui-menu-icon ui-icon " + icon )
+ .data( "ui-menu-submenu-carat", true );
+
+ item
+ .attr( "aria-haspopup", "true" )
+ .prepend( submenuCarat );
+ menu.attr( "aria-labelledby", item.attr( "id" ) );
+ });
+
+ menus = submenus.add( this.element );
+ items = menus.find( this.options.items );
+
+ // Initialize menu-items containing spaces and/or dashes only as dividers
+ items.not( ".ui-menu-item" ).each(function() {
+ var item = $( this );
+ if ( that._isDivider( item ) ) {
+ item.addClass( "ui-widget-content ui-menu-divider" );
+ }
+ });
+
+ // Don't refresh list items that are already adapted
+ items.not( ".ui-menu-item, .ui-menu-divider" )
+ .addClass( "ui-menu-item" )
+ .uniqueId()
+ .attr({
+ tabIndex: -1,
+ role: this._itemRole()
+ });
+
+ // Add aria-disabled attribute to any disabled menu item
+ items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+
+ // If the active item has been removed, blur the menu
+ if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+ this.blur();
+ }
+ },
+
+ _itemRole: function() {
+ return {
+ menu: "menuitem",
+ listbox: "option"
+ }[ this.options.role ];
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "icons" ) {
+ this.element.find( ".ui-menu-icon" )
+ .removeClass( this.options.icons.submenu )
+ .addClass( value.submenu );
+ }
+ if ( key === "disabled" ) {
+ this.element
+ .toggleClass( "ui-state-disabled", !!value )
+ .attr( "aria-disabled", value );
+ }
+ this._super( key, value );
+ },
+
+ focus: function( event, item ) {
+ var nested, focused;
+ this.blur( event, event && event.type === "focus" );
+
+ this._scrollIntoView( item );
+
+ this.active = item.first();
+ focused = this.active.addClass( "ui-state-focus" ).removeClass( "ui-state-active" );
+ // Only update aria-activedescendant if there's a role
+ // otherwise we assume focus is managed elsewhere
+ if ( this.options.role ) {
+ this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
+ }
+
+ // Highlight active parent menu item, if any
+ this.active
+ .parent()
+ .closest( ".ui-menu-item" )
+ .addClass( "ui-state-active" );
+
+ if ( event && event.type === "keydown" ) {
+ this._close();
+ } else {
+ this.timer = this._delay(function() {
+ this._close();
+ }, this.delay );
+ }
+
+ nested = item.children( ".ui-menu" );
+ if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {
+ this._startOpening(nested);
+ }
+ this.activeMenu = item.parent();
+
+ this._trigger( "focus", event, { item: item } );
+ },
+
+ _scrollIntoView: function( item ) {
+ var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+ if ( this._hasScroll() ) {
+ borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
+ paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
+ offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+ scroll = this.activeMenu.scrollTop();
+ elementHeight = this.activeMenu.height();
+ itemHeight = item.outerHeight();
+
+ if ( offset < 0 ) {
+ this.activeMenu.scrollTop( scroll + offset );
+ } else if ( offset + itemHeight > elementHeight ) {
+ this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+ }
+ }
+ },
+
+ blur: function( event, fromFocus ) {
+ if ( !fromFocus ) {
+ clearTimeout( this.timer );
+ }
+
+ if ( !this.active ) {
+ return;
+ }
+
+ this.active.removeClass( "ui-state-focus" );
+ this.active = null;
+
+ this._trigger( "blur", event, { item: this.active } );
+ },
+
+ _startOpening: function( submenu ) {
+ clearTimeout( this.timer );
+
+ // Don't open if already open fixes a Firefox bug that caused a .5 pixel
+ // shift in the submenu position when mousing over the carat icon
+ if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+ return;
+ }
+
+ this.timer = this._delay(function() {
+ this._close();
+ this._open( submenu );
+ }, this.delay );
+ },
+
+ _open: function( submenu ) {
+ var position = $.extend({
+ of: this.active
+ }, this.options.position );
+
+ clearTimeout( this.timer );
+ this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
+ .hide()
+ .attr( "aria-hidden", "true" );
+
+ submenu
+ .show()
+ .removeAttr( "aria-hidden" )
+ .attr( "aria-expanded", "true" )
+ .position( position );
+ },
+
+ collapseAll: function( event, all ) {
+ clearTimeout( this.timer );
+ this.timer = this._delay(function() {
+ // If we were passed an event, look for the submenu that contains the event
+ var currentMenu = all ? this.element :
+ $( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+
+ // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
+ if ( !currentMenu.length ) {
+ currentMenu = this.element;
+ }
+
+ this._close( currentMenu );
+
+ this.blur( event );
+ this.activeMenu = currentMenu;
+ }, this.delay );
+ },
+
+ // With no arguments, closes the currently active menu - if nothing is active
+ // it closes all menus. If passed an argument, it will search for menus BELOW
+ _close: function( startMenu ) {
+ if ( !startMenu ) {
+ startMenu = this.active ? this.active.parent() : this.element;
+ }
+
+ startMenu
+ .find( ".ui-menu" )
+ .hide()
+ .attr( "aria-hidden", "true" )
+ .attr( "aria-expanded", "false" )
+ .end()
+ .find( ".ui-state-active" ).not( ".ui-state-focus" )
+ .removeClass( "ui-state-active" );
+ },
+
+ _closeOnDocumentClick: function( event ) {
+ return !$( event.target ).closest( ".ui-menu" ).length;
+ },
+
+ _isDivider: function( item ) {
+
+ // Match hyphen, em dash, en dash
+ return !/[^\-\u2014\u2013\s]/.test( item.text() );
+ },
+
+ collapse: function( event ) {
+ var newItem = this.active &&
+ this.active.parent().closest( ".ui-menu-item", this.element );
+ if ( newItem && newItem.length ) {
+ this._close();
+ this.focus( event, newItem );
+ }
+ },
+
+ expand: function( event ) {
+ var newItem = this.active &&
+ this.active
+ .children( ".ui-menu " )
+ .find( this.options.items )
+ .first();
+
+ if ( newItem && newItem.length ) {
+ this._open( newItem.parent() );
+
+ // Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+ this._delay(function() {
+ this.focus( event, newItem );
+ });
+ }
+ },
+
+ next: function( event ) {
+ this._move( "next", "first", event );
+ },
+
+ previous: function( event ) {
+ this._move( "prev", "last", event );
+ },
+
+ isFirstItem: function() {
+ return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+ },
+
+ isLastItem: function() {
+ return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+ },
+
+ _move: function( direction, filter, event ) {
+ var next;
+ if ( this.active ) {
+ if ( direction === "first" || direction === "last" ) {
+ next = this.active
+ [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
+ .eq( -1 );
+ } else {
+ next = this.active
+ [ direction + "All" ]( ".ui-menu-item" )
+ .eq( 0 );
+ }
+ }
+ if ( !next || !next.length || !this.active ) {
+ next = this.activeMenu.find( this.options.items )[ filter ]();
+ }
+
+ this.focus( event, next );
+ },
+
+ nextPage: function( event ) {
+ var item, base, height;
+
+ if ( !this.active ) {
+ this.next( event );
+ return;
+ }
+ if ( this.isLastItem() ) {
+ return;
+ }
+ if ( this._hasScroll() ) {
+ base = this.active.offset().top;
+ height = this.element.height();
+ this.active.nextAll( ".ui-menu-item" ).each(function() {
+ item = $( this );
+ return item.offset().top - base - height < 0;
+ });
+
+ this.focus( event, item );
+ } else {
+ this.focus( event, this.activeMenu.find( this.options.items )
+ [ !this.active ? "first" : "last" ]() );
+ }
+ },
+
+ previousPage: function( event ) {
+ var item, base, height;
+ if ( !this.active ) {
+ this.next( event );
+ return;
+ }
+ if ( this.isFirstItem() ) {
+ return;
+ }
+ if ( this._hasScroll() ) {
+ base = this.active.offset().top;
+ height = this.element.height();
+ this.active.prevAll( ".ui-menu-item" ).each(function() {
+ item = $( this );
+ return item.offset().top - base + height > 0;
+ });
+
+ this.focus( event, item );
+ } else {
+ this.focus( event, this.activeMenu.find( this.options.items ).first() );
+ }
+ },
+
+ _hasScroll: function() {
+ return this.element.outerHeight() < this.element.prop( "scrollHeight" );
+ },
+
+ select: function( event ) {
+ // TODO: It should never be possible to not have an active item at this
+ // point, but the tests don't trigger mouseenter before click.
+ this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
+ var ui = { item: this.active };
+ if ( !this.active.has( ".ui-menu" ).length ) {
+ this.collapseAll( event, true );
+ }
+ this._trigger( "select", event, ui );
+ },
+
+ _filterMenuItems: function(character) {
+ var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ),
+ regex = new RegExp( "^" + escapedCharacter, "i" );
+
+ return this.activeMenu
+ .find( this.options.items )
+
+ // Only match on items, not dividers or other content (#10571)
+ .filter( ".ui-menu-item" )
+ .filter(function() {
+ return regex.test( $.trim( $( this ).text() ) );
+ });
+ }
+});
+
+
+/*!
+ * jQuery UI Autocomplete 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/autocomplete/
+ */
+
+
+$.widget( "ui.autocomplete", {
+ version: "1.11.4",
+ defaultElement: "<input>",
+ options: {
+ appendTo: null,
+ autoFocus: false,
+ delay: 300,
+ minLength: 1,
+ position: {
+ my: "left top",
+ at: "left bottom",
+ collision: "none"
+ },
+ source: null,
+
+ // callbacks
+ change: null,
+ close: null,
+ focus: null,
+ open: null,
+ response: null,
+ search: null,
+ select: null
+ },
+
+ requestIndex: 0,
+ pending: 0,
+
+ _create: function() {
+ // Some browsers only repeat keydown events, not keypress events,
+ // so we use the suppressKeyPress flag to determine if we've already
+ // handled the keydown event. #7269
+ // Unfortunately the code for & in keypress is the same as the up arrow,
+ // so we use the suppressKeyPressRepeat flag to avoid handling keypress
+ // events when we know the keydown event was used to modify the
+ // search term. #7799
+ var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
+ nodeName = this.element[ 0 ].nodeName.toLowerCase(),
+ isTextarea = nodeName === "textarea",
+ isInput = nodeName === "input";
+
+ this.isMultiLine =
+ // Textareas are always multi-line
+ isTextarea ? true :
+ // Inputs are always single-line, even if inside a contentEditable element
+ // IE also treats inputs as contentEditable
+ isInput ? false :
+ // All other element types are determined by whether or not they're contentEditable
+ this.element.prop( "isContentEditable" );
+
+ this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
+ this.isNewMenu = true;
+
+ this.element
+ .addClass( "ui-autocomplete-input" )
+ .attr( "autocomplete", "off" );
+
+ this._on( this.element, {
+ keydown: function( event ) {
+ if ( this.element.prop( "readOnly" ) ) {
+ suppressKeyPress = true;
+ suppressInput = true;
+ suppressKeyPressRepeat = true;
+ return;
+ }
+
+ suppressKeyPress = false;
+ suppressInput = false;
+ suppressKeyPressRepeat = false;
+ var keyCode = $.ui.keyCode;
+ switch ( event.keyCode ) {
+ case keyCode.PAGE_UP:
+ suppressKeyPress = true;
+ this._move( "previousPage", event );
+ break;
+ case keyCode.PAGE_DOWN:
+ suppressKeyPress = true;
+ this._move( "nextPage", event );
+ break;
+ case keyCode.UP:
+ suppressKeyPress = true;
+ this._keyEvent( "previous", event );
+ break;
+ case keyCode.DOWN:
+ suppressKeyPress = true;
+ this._keyEvent( "next", event );
+ break;
+ case keyCode.ENTER:
+ // when menu is open and has focus
+ if ( this.menu.active ) {
+ // #6055 - Opera still allows the keypress to occur
+ // which causes forms to submit
+ suppressKeyPress = true;
+ event.preventDefault();
+ this.menu.select( event );
+ }
+ break;
+ case keyCode.TAB:
+ if ( this.menu.active ) {
+ this.menu.select( event );
+ }
+ break;
+ case keyCode.ESCAPE:
+ if ( this.menu.element.is( ":visible" ) ) {
+ if ( !this.isMultiLine ) {
+ this._value( this.term );
+ }
+ this.close( event );
+ // Different browsers have different default behavior for escape
+ // Single press can mean undo or clear
+ // Double press in IE means clear the whole form
+ event.preventDefault();
+ }
+ break;
+ default:
+ suppressKeyPressRepeat = true;
+ // search timeout should be triggered before the input value is changed
+ this._searchTimeout( event );
+ break;
+ }
+ },
+ keypress: function( event ) {
+ if ( suppressKeyPress ) {
+ suppressKeyPress = false;
+ if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+ event.preventDefault();
+ }
+ return;
+ }
+ if ( suppressKeyPressRepeat ) {
+ return;
+ }
+
+ // replicate some key handlers to allow them to repeat in Firefox and Opera
+ var keyCode = $.ui.keyCode;
+ switch ( event.keyCode ) {
+ case keyCode.PAGE_UP:
+ this._move( "previousPage", event );
+ break;
+ case keyCode.PAGE_DOWN:
+ this._move( "nextPage", event );
+ break;
+ case keyCode.UP:
+ this._keyEvent( "previous", event );
+ break;
+ case keyCode.DOWN:
+ this._keyEvent( "next", event );
+ break;
+ }
+ },
+ input: function( event ) {
+ if ( suppressInput ) {
+ suppressInput = false;
+ event.preventDefault();
+ return;
+ }
+ this._searchTimeout( event );
+ },
+ focus: function() {
+ this.selectedItem = null;
+ this.previous = this._value();
+ },
+ blur: function( event ) {
+ if ( this.cancelBlur ) {
+ delete this.cancelBlur;
+ return;
+ }
+
+ clearTimeout( this.searching );
+ this.close( event );
+ this._change( event );
+ }
+ });
+
+ this._initSource();
+ this.menu = $( "<ul>" )
+ .addClass( "ui-autocomplete ui-front" )
+ .appendTo( this._appendTo() )
+ .menu({
+ // disable ARIA support, the live region takes care of that
+ role: null
+ })
+ .hide()
+ .menu( "instance" );
+
+ this._on( this.menu.element, {
+ mousedown: function( event ) {
+ // prevent moving focus out of the text field
+ event.preventDefault();
+
+ // IE doesn't prevent moving focus even with event.preventDefault()
+ // so we set a flag to know when we should ignore the blur event
+ this.cancelBlur = true;
+ this._delay(function() {
+ delete this.cancelBlur;
+ });
+
+ // clicking on the scrollbar causes focus to shift to the body
+ // but we can't detect a mouseup or a click immediately afterward
+ // so we have to track the next mousedown and close the menu if
+ // the user clicks somewhere outside of the autocomplete
+ var menuElement = this.menu.element[ 0 ];
+ if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
+ this._delay(function() {
+ var that = this;
+ this.document.one( "mousedown", function( event ) {
+ if ( event.target !== that.element[ 0 ] &&
+ event.target !== menuElement &&
+ !$.contains( menuElement, event.target ) ) {
+ that.close();
+ }
+ });
+ });
+ }
+ },
+ menufocus: function( event, ui ) {
+ var label, item;
+ // support: Firefox
+ // Prevent accidental activation of menu items in Firefox (#7024 #9118)
+ if ( this.isNewMenu ) {
+ this.isNewMenu = false;
+ if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
+ this.menu.blur();
+
+ this.document.one( "mousemove", function() {
+ $( event.target ).trigger( event.originalEvent );
+ });
+
+ return;
+ }
+ }
+
+ item = ui.item.data( "ui-autocomplete-item" );
+ if ( false !== this._trigger( "focus", event, { item: item } ) ) {
+ // use value to match what will end up in the input, if it was a key event
+ if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
+ this._value( item.value );
+ }
+ }
+
+ // Announce the value in the liveRegion
+ label = ui.item.attr( "aria-label" ) || item.value;
+ if ( label && $.trim( label ).length ) {
+ this.liveRegion.children().hide();
+ $( "<div>" ).text( label ).appendTo( this.liveRegion );
+ }
+ },
+ menuselect: function( event, ui ) {
+ var item = ui.item.data( "ui-autocomplete-item" ),
+ previous = this.previous;
+
+ // only trigger when focus was lost (click on menu)
+ if ( this.element[ 0 ] !== this.document[ 0 ].activeElement ) {
+ this.element.focus();
+ this.previous = previous;
+ // #6109 - IE triggers two focus events and the second
+ // is asynchronous, so we need to reset the previous
+ // term synchronously and asynchronously :-(
+ this._delay(function() {
+ this.previous = previous;
+ this.selectedItem = item;
+ });
+ }
+
+ if ( false !== this._trigger( "select", event, { item: item } ) ) {
+ this._value( item.value );
+ }
+ // reset the term after the select event
+ // this allows custom select handling to work properly
+ this.term = this._value();
+
+ this.close( event );
+ this.selectedItem = item;
+ }
+ });
+
+ this.liveRegion = $( "<span>", {
+ role: "status",
+ "aria-live": "assertive",
+ "aria-relevant": "additions"
+ })
+ .addClass( "ui-helper-hidden-accessible" )
+ .appendTo( this.document[ 0 ].body );
+
+ // turning off autocomplete prevents the browser from remembering the
+ // value when navigating through history, so we re-enable autocomplete
+ // if the page is unloaded before the widget is destroyed. #7790
+ this._on( this.window, {
+ beforeunload: function() {
+ this.element.removeAttr( "autocomplete" );
+ }
+ });
+ },
+
+ _destroy: function() {
+ clearTimeout( this.searching );
+ this.element
+ .removeClass( "ui-autocomplete-input" )
+ .removeAttr( "autocomplete" );
+ this.menu.element.remove();
+ this.liveRegion.remove();
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+ if ( key === "source" ) {
+ this._initSource();
+ }
+ if ( key === "appendTo" ) {
+ this.menu.element.appendTo( this._appendTo() );
+ }
+ if ( key === "disabled" && value && this.xhr ) {
+ this.xhr.abort();
+ }
+ },
+
+ _appendTo: function() {
+ var element = this.options.appendTo;
+
+ if ( element ) {
+ element = element.jquery || element.nodeType ?
+ $( element ) :
+ this.document.find( element ).eq( 0 );
+ }
+
+ if ( !element || !element[ 0 ] ) {
+ element = this.element.closest( ".ui-front" );
+ }
+
+ if ( !element.length ) {
+ element = this.document[ 0 ].body;
+ }
+
+ return element;
+ },
+
+ _initSource: function() {
+ var array, url,
+ that = this;
+ if ( $.isArray( this.options.source ) ) {
+ array = this.options.source;
+ this.source = function( request, response ) {
+ response( $.ui.autocomplete.filter( array, request.term ) );
+ };
+ } else if ( typeof this.options.source === "string" ) {
+ url = this.options.source;
+ this.source = function( request, response ) {
+ if ( that.xhr ) {
+ that.xhr.abort();
+ }
+ that.xhr = $.ajax({
+ url: url,
+ data: request,
+ dataType: "json",
+ success: function( data ) {
+ response( data );
+ },
+ error: function() {
+ response([]);
+ }
+ });
+ };
+ } else {
+ this.source = this.options.source;
+ }
+ },
+
+ _searchTimeout: function( event ) {
+ clearTimeout( this.searching );
+ this.searching = this._delay(function() {
+
+ // Search if the value has changed, or if the user retypes the same value (see #7434)
+ var equalValues = this.term === this._value(),
+ menuVisible = this.menu.element.is( ":visible" ),
+ modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;
+
+ if ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {
+ this.selectedItem = null;
+ this.search( null, event );
+ }
+ }, this.options.delay );
+ },
+
+ search: function( value, event ) {
+ value = value != null ? value : this._value();
+
+ // always save the actual value, not the one passed as an argument
+ this.term = this._value();
+
+ if ( value.length < this.options.minLength ) {
+ return this.close( event );
+ }
+
+ if ( this._trigger( "search", event ) === false ) {
+ return;
+ }
+
+ return this._search( value );
+ },
+
+ _search: function( value ) {
+ this.pending++;
+ this.element.addClass( "ui-autocomplete-loading" );
+ this.cancelSearch = false;
+
+ this.source( { term: value }, this._response() );
+ },
+
+ _response: function() {
+ var index = ++this.requestIndex;
+
+ return $.proxy(function( content ) {
+ if ( index === this.requestIndex ) {
+ this.__response( content );
+ }
+
+ this.pending--;
+ if ( !this.pending ) {
+ this.element.removeClass( "ui-autocomplete-loading" );
+ }
+ }, this );
+ },
+
+ __response: function( content ) {
+ if ( content ) {
+ content = this._normalize( content );
+ }
+ this._trigger( "response", null, { content: content } );
+ if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
+ this._suggest( content );
+ this._trigger( "open" );
+ } else {
+ // use ._close() instead of .close() so we don't cancel future searches
+ this._close();
+ }
+ },
+
+ close: function( event ) {
+ this.cancelSearch = true;
+ this._close( event );
+ },
+
+ _close: function( event ) {
+ if ( this.menu.element.is( ":visible" ) ) {
+ this.menu.element.hide();
+ this.menu.blur();
+ this.isNewMenu = true;
+ this._trigger( "close", event );
+ }
+ },
+
+ _change: function( event ) {
+ if ( this.previous !== this._value() ) {
+ this._trigger( "change", event, { item: this.selectedItem } );
+ }
+ },
+
+ _normalize: function( items ) {
+ // assume all items have the right format when the first item is complete
+ if ( items.length && items[ 0 ].label && items[ 0 ].value ) {
+ return items;
+ }
+ return $.map( items, function( item ) {
+ if ( typeof item === "string" ) {
+ return {
+ label: item,
+ value: item
+ };
+ }
+ return $.extend( {}, item, {
+ label: item.label || item.value,
+ value: item.value || item.label
+ });
+ });
+ },
+
+ _suggest: function( items ) {
+ var ul = this.menu.element.empty();
+ this._renderMenu( ul, items );
+ this.isNewMenu = true;
+ this.menu.refresh();
+
+ // size and position menu
+ ul.show();
+ this._resizeMenu();
+ ul.position( $.extend({
+ of: this.element
+ }, this.options.position ) );
+
+ if ( this.options.autoFocus ) {
+ this.menu.next();
+ }
+ },
+
+ _resizeMenu: function() {
+ var ul = this.menu.element;
+ ul.outerWidth( Math.max(
+ // Firefox wraps long text (possibly a rounding bug)
+ // so we add 1px to avoid the wrapping (#7513)
+ ul.width( "" ).outerWidth() + 1,
+ this.element.outerWidth()
+ ) );
+ },
+
+ _renderMenu: function( ul, items ) {
+ var that = this;
+ $.each( items, function( index, item ) {
+ that._renderItemData( ul, item );
+ });
+ },
+
+ _renderItemData: function( ul, item ) {
+ return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
+ },
+
+ _renderItem: function( ul, item ) {
+ return $( "<li>" ).text( item.label ).appendTo( ul );
+ },
+
+ _move: function( direction, event ) {
+ if ( !this.menu.element.is( ":visible" ) ) {
+ this.search( null, event );
+ return;
+ }
+ if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
+ this.menu.isLastItem() && /^next/.test( direction ) ) {
+
+ if ( !this.isMultiLine ) {
+ this._value( this.term );
+ }
+
+ this.menu.blur();
+ return;
+ }
+ this.menu[ direction ]( event );
+ },
+
+ widget: function() {
+ return this.menu.element;
+ },
+
+ _value: function() {
+ return this.valueMethod.apply( this.element, arguments );
+ },
+
+ _keyEvent: function( keyEvent, event ) {
+ if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+ this._move( keyEvent, event );
+
+ // prevents moving cursor to beginning/end of the text field in some browsers
+ event.preventDefault();
+ }
+ }
+});
+
+$.extend( $.ui.autocomplete, {
+ escapeRegex: function( value ) {
+ return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
+ },
+ filter: function( array, term ) {
+ var matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), "i" );
+ return $.grep( array, function( value ) {
+ return matcher.test( value.label || value.value || value );
+ });
+ }
+});
+
+// live region extension, adding a `messages` option
+// NOTE: This is an experimental API. We are still investigating
+// a full solution for string manipulation and internationalization.
+$.widget( "ui.autocomplete", $.ui.autocomplete, {
+ options: {
+ messages: {
+ noResults: "No search results.",
+ results: function( amount ) {
+ return amount + ( amount > 1 ? " results are" : " result is" ) +
+ " available, use up and down arrow keys to navigate.";
+ }
+ }
+ },
+
+ __response: function( content ) {
+ var message;
+ this._superApply( arguments );
+ if ( this.options.disabled || this.cancelSearch ) {
+ return;
+ }
+ if ( content && content.length ) {
+ message = this.options.messages.results( content.length );
+ } else {
+ message = this.options.messages.noResults;
+ }
+ this.liveRegion.children().hide();
+ $( "<div>" ).text( message ).appendTo( this.liveRegion );
+ }
+});
+
+var autocomplete = $.ui.autocomplete;
+
+
+/*!
+ * jQuery UI Button 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/button/
+ */
+
+
+var lastActive,
+ baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
+ typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+ formResetHandler = function() {
+ var form = $( this );
+ setTimeout(function() {
+ form.find( ":ui-button" ).button( "refresh" );
+ }, 1 );
+ },
+ radioGroup = function( radio ) {
+ var name = radio.name,
+ form = radio.form,
+ radios = $( [] );
+ if ( name ) {
+ name = name.replace( /'/g, "\\'" );
+ if ( form ) {
+ radios = $( form ).find( "[name='" + name + "'][type=radio]" );
+ } else {
+ radios = $( "[name='" + name + "'][type=radio]", radio.ownerDocument )
+ .filter(function() {
+ return !this.form;
+ });
+ }
+ }
+ return radios;
+ };
+
+$.widget( "ui.button", {
+ version: "1.11.4",
+ defaultElement: "<button>",
+ options: {
+ disabled: null,
+ text: true,
+ label: null,
+ icons: {
+ primary: null,
+ secondary: null
+ }
+ },
+ _create: function() {
+ this.element.closest( "form" )
+ .unbind( "reset" + this.eventNamespace )
+ .bind( "reset" + this.eventNamespace, formResetHandler );
+
+ if ( typeof this.options.disabled !== "boolean" ) {
+ this.options.disabled = !!this.element.prop( "disabled" );
+ } else {
+ this.element.prop( "disabled", this.options.disabled );
+ }
+
+ this._determineButtonType();
+ this.hasTitle = !!this.buttonElement.attr( "title" );
+
+ var that = this,
+ options = this.options,
+ toggleButton = this.type === "checkbox" || this.type === "radio",
+ activeClass = !toggleButton ? "ui-state-active" : "";
+
+ if ( options.label === null ) {
+ options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
+ }
+
+ this._hoverable( this.buttonElement );
+
+ this.buttonElement
+ .addClass( baseClasses )
+ .attr( "role", "button" )
+ .bind( "mouseenter" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return;
+ }
+ if ( this === lastActive ) {
+ $( this ).addClass( "ui-state-active" );
+ }
+ })
+ .bind( "mouseleave" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return;
+ }
+ $( this ).removeClass( activeClass );
+ })
+ .bind( "click" + this.eventNamespace, function( event ) {
+ if ( options.disabled ) {
+ event.preventDefault();
+ event.stopImmediatePropagation();
+ }
+ });
+
+ // Can't use _focusable() because the element that receives focus
+ // and the element that gets the ui-state-focus class are different
+ this._on({
+ focus: function() {
+ this.buttonElement.addClass( "ui-state-focus" );
+ },
+ blur: function() {
+ this.buttonElement.removeClass( "ui-state-focus" );
+ }
+ });
+
+ if ( toggleButton ) {
+ this.element.bind( "change" + this.eventNamespace, function() {
+ that.refresh();
+ });
+ }
+
+ if ( this.type === "checkbox" ) {
+ this.buttonElement.bind( "click" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ });
+ } else if ( this.type === "radio" ) {
+ this.buttonElement.bind( "click" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).addClass( "ui-state-active" );
+ that.buttonElement.attr( "aria-pressed", "true" );
+
+ var radio = that.element[ 0 ];
+ radioGroup( radio )
+ .not( radio )
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ });
+ } else {
+ this.buttonElement
+ .bind( "mousedown" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).addClass( "ui-state-active" );
+ lastActive = this;
+ that.document.one( "mouseup", function() {
+ lastActive = null;
+ });
+ })
+ .bind( "mouseup" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).removeClass( "ui-state-active" );
+ })
+ .bind( "keydown" + this.eventNamespace, function(event) {
+ if ( options.disabled ) {
+ return false;
+ }
+ if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
+ $( this ).addClass( "ui-state-active" );
+ }
+ })
+ // see #8559, we bind to blur here in case the button element loses
+ // focus between keydown and keyup, it would be left in an "active" state
+ .bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
+ $( this ).removeClass( "ui-state-active" );
+ });
+
+ if ( this.buttonElement.is("a") ) {
+ this.buttonElement.keyup(function(event) {
+ if ( event.keyCode === $.ui.keyCode.SPACE ) {
+ // TODO pass through original event correctly (just as 2nd argument doesn't work)
+ $( this ).click();
+ }
+ });
+ }
+ }
+
+ this._setOption( "disabled", options.disabled );
+ this._resetButton();
+ },
+
+ _determineButtonType: function() {
+ var ancestor, labelSelector, checked;
+
+ if ( this.element.is("[type=checkbox]") ) {
+ this.type = "checkbox";
+ } else if ( this.element.is("[type=radio]") ) {
+ this.type = "radio";
+ } else if ( this.element.is("input") ) {
+ this.type = "input";
+ } else {
+ this.type = "button";
+ }
+
+ if ( this.type === "checkbox" || this.type === "radio" ) {
+ // we don't search against the document in case the element
+ // is disconnected from the DOM
+ ancestor = this.element.parents().last();
+ labelSelector = "label[for='" + this.element.attr("id") + "']";
+ this.buttonElement = ancestor.find( labelSelector );
+ if ( !this.buttonElement.length ) {
+ ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+ this.buttonElement = ancestor.filter( labelSelector );
+ if ( !this.buttonElement.length ) {
+ this.buttonElement = ancestor.find( labelSelector );
+ }
+ }
+ this.element.addClass( "ui-helper-hidden-accessible" );
+
+ checked = this.element.is( ":checked" );
+ if ( checked ) {
+ this.buttonElement.addClass( "ui-state-active" );
+ }
+ this.buttonElement.prop( "aria-pressed", checked );
+ } else {
+ this.buttonElement = this.element;
+ }
+ },
+
+ widget: function() {
+ return this.buttonElement;
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-helper-hidden-accessible" );
+ this.buttonElement
+ .removeClass( baseClasses + " ui-state-active " + typeClasses )
+ .removeAttr( "role" )
+ .removeAttr( "aria-pressed" )
+ .html( this.buttonElement.find(".ui-button-text").html() );
+
+ if ( !this.hasTitle ) {
+ this.buttonElement.removeAttr( "title" );
+ }
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+ if ( key === "disabled" ) {
+ this.widget().toggleClass( "ui-state-disabled", !!value );
+ this.element.prop( "disabled", !!value );
+ if ( value ) {
+ if ( this.type === "checkbox" || this.type === "radio" ) {
+ this.buttonElement.removeClass( "ui-state-focus" );
+ } else {
+ this.buttonElement.removeClass( "ui-state-focus ui-state-active" );
+ }
+ }
+ return;
+ }
+ this._resetButton();
+ },
+
+ refresh: function() {
+ //See #8237 & #8828
+ var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
+
+ if ( isDisabled !== this.options.disabled ) {
+ this._setOption( "disabled", isDisabled );
+ }
+ if ( this.type === "radio" ) {
+ radioGroup( this.element[0] ).each(function() {
+ if ( $( this ).is( ":checked" ) ) {
+ $( this ).button( "widget" )
+ .addClass( "ui-state-active" )
+ .attr( "aria-pressed", "true" );
+ } else {
+ $( this ).button( "widget" )
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ }
+ });
+ } else if ( this.type === "checkbox" ) {
+ if ( this.element.is( ":checked" ) ) {
+ this.buttonElement
+ .addClass( "ui-state-active" )
+ .attr( "aria-pressed", "true" );
+ } else {
+ this.buttonElement
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ }
+ }
+ },
+
+ _resetButton: function() {
+ if ( this.type === "input" ) {
+ if ( this.options.label ) {
+ this.element.val( this.options.label );
+ }
+ return;
+ }
+ var buttonElement = this.buttonElement.removeClass( typeClasses ),
+ buttonText = $( "<span></span>", this.document[0] )
+ .addClass( "ui-button-text" )
+ .html( this.options.label )
+ .appendTo( buttonElement.empty() )
+ .text(),
+ icons = this.options.icons,
+ multipleIcons = icons.primary && icons.secondary,
+ buttonClasses = [];
+
+ if ( icons.primary || icons.secondary ) {
+ if ( this.options.text ) {
+ buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
+ }
+
+ if ( icons.primary ) {
+ buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
+ }
+
+ if ( icons.secondary ) {
+ buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
+ }
+
+ if ( !this.options.text ) {
+ buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
+
+ if ( !this.hasTitle ) {
+ buttonElement.attr( "title", $.trim( buttonText ) );
+ }
+ }
+ } else {
+ buttonClasses.push( "ui-button-text-only" );
+ }
+ buttonElement.addClass( buttonClasses.join( " " ) );
+ }
+});
+
+$.widget( "ui.buttonset", {
+ version: "1.11.4",
+ options: {
+ items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
+ },
+
+ _create: function() {
+ this.element.addClass( "ui-buttonset" );
+ },
+
+ _init: function() {
+ this.refresh();
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "disabled" ) {
+ this.buttons.button( "option", key, value );
+ }
+
+ this._super( key, value );
+ },
+
+ refresh: function() {
+ var rtl = this.element.css( "direction" ) === "rtl",
+ allButtons = this.element.find( this.options.items ),
+ existingButtons = allButtons.filter( ":ui-button" );
+
+ // Initialize new buttons
+ allButtons.not( ":ui-button" ).button();
+
+ // Refresh existing buttons
+ existingButtons.button( "refresh" );
+
+ this.buttons = allButtons
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
+ .filter( ":first" )
+ .addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
+ .end()
+ .filter( ":last" )
+ .addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
+ .end()
+ .end();
+ },
+
+ _destroy: function() {
+ this.element.removeClass( "ui-buttonset" );
+ this.buttons
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-corner-left ui-corner-right" )
+ .end()
+ .button( "destroy" );
+ }
+});
+
+var button = $.ui.button;
+
+
+/*!
+ * jQuery UI Datepicker 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/datepicker/
+ */
+
+
+$.extend($.ui, { datepicker: { version: "1.11.4" } });
+
+var datepicker_instActive;
+
+function datepicker_getZindex( elem ) {
+ var position, value;
+ while ( elem.length && elem[ 0 ] !== document ) {
+ // Ignore z-index if position is set to a value where z-index is ignored by the browser
+ // This makes behavior of this function consistent across browsers
+ // WebKit always returns auto if the element is positioned
+ position = elem.css( "position" );
+ if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+ // IE returns 0 when zIndex is not specified
+ // other browsers return a string
+ // we ignore the case of nested elements with an explicit value of 0
+ // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+ value = parseInt( elem.css( "zIndex" ), 10 );
+ if ( !isNaN( value ) && value !== 0 ) {
+ return value;
+ }
+ }
+ elem = elem.parent();
+ }
+
+ return 0;
+}
+/* Date picker manager.
+ Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+ Settings for (groups of) date pickers are maintained in an instance object,
+ allowing multiple different settings on the same page. */
+
+function Datepicker() {
+ this._curInst = null; // The current instance in use
+ this._keyEvent = false; // If the last event was a key event
+ this._disabledInputs = []; // List of date picker inputs that have been disabled
+ this._datepickerShowing = false; // True if the popup picker is showing , false if not
+ this._inDialog = false; // True if showing within a "dialog", false if not
+ this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
+ this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
+ this._appendClass = "ui-datepicker-append"; // The name of the append marker class
+ this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
+ this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
+ this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
+ this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
+ this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
+ this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
+ this.regional = []; // Available regional settings, indexed by language code
+ this.regional[""] = { // Default regional settings
+ closeText: "Done", // Display text for close link
+ prevText: "Prev", // Display text for previous month link
+ nextText: "Next", // Display text for next month link
+ currentText: "Today", // Display text for current month link
+ monthNames: ["January","February","March","April","May","June",
+ "July","August","September","October","November","December"], // Names of months for drop-down and formatting
+ monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
+ dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
+ dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
+ dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
+ weekHeader: "Wk", // Column header for week of the year
+ dateFormat: "mm/dd/yy", // See format options on parseDate
+ firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+ isRTL: false, // True if right-to-left language, false if left-to-right
+ showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+ yearSuffix: "" // Additional text to append to the year in the month headers
+ };
+ this._defaults = { // Global defaults for all the date picker instances
+ showOn: "focus", // "focus" for popup on focus,
+ // "button" for trigger button, or "both" for either
+ showAnim: "fadeIn", // Name of jQuery animation for popup
+ showOptions: {}, // Options for enhanced animations
+ defaultDate: null, // Used when field is blank: actual date,
+ // +/-number for offset from today, null for today
+ appendText: "", // Display text following the input box, e.g. showing the format
+ buttonText: "...", // Text for trigger button
+ buttonImage: "", // URL for trigger button image
+ buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+ hideIfNoPrevNext: false, // True to hide next/previous month links
+ // if not applicable, false to just disable them
+ navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+ gotoCurrent: false, // True if today link goes back to current selection instead
+ changeMonth: false, // True if month can be selected directly, false if only prev/next
+ changeYear: false, // True if year can be selected directly, false if only prev/next
+ yearRange: "c-10:c+10", // Range of years to display in drop-down,
+ // either relative to today's year (-nn:+nn), relative to currently displayed year
+ // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+ showOtherMonths: false, // True to show dates in other months, false to leave blank
+ selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+ showWeek: false, // True to show week of the year, false to not show it
+ calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+ // takes a Date and returns the number of the week for it
+ shortYearCutoff: "+10", // Short year values < this are in the current century,
+ // > this are in the previous century,
+ // string value starting with "+" for current year + value
+ minDate: null, // The earliest selectable date, or null for no limit
+ maxDate: null, // The latest selectable date, or null for no limit
+ duration: "fast", // Duration of display/closure
+ beforeShowDay: null, // Function that takes a date and returns an array with
+ // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
+ // [2] = cell title (optional), e.g. $.datepicker.noWeekends
+ beforeShow: null, // Function that takes an input field and
+ // returns a set of custom settings for the date picker
+ onSelect: null, // Define a callback function when a date is selected
+ onChangeMonthYear: null, // Define a callback function when the month or year is changed
+ onClose: null, // Define a callback function when the datepicker is closed
+ numberOfMonths: 1, // Number of months to show at a time
+ showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+ stepMonths: 1, // Number of months to step back/forward
+ stepBigMonths: 12, // Number of months to step back/forward for the big links
+ altField: "", // Selector for an alternate field to store selected dates into
+ altFormat: "", // The date format to use for the alternate field
+ constrainInput: true, // The input is constrained by the current date format
+ showButtonPanel: false, // True to show button panel, false to not show it
+ autoSize: false, // True to size the input for the date format, false to leave as is
+ disabled: false // The initial disabled state
+ };
+ $.extend(this._defaults, this.regional[""]);
+ this.regional.en = $.extend( true, {}, this.regional[ "" ]);
+ this.regional[ "en-US" ] = $.extend( true, {}, this.regional.en );
+ this.dpDiv = datepicker_bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
+}
+
+$.extend(Datepicker.prototype, {
+ /* Class name added to elements to indicate already configured with a date picker. */
+ markerClassName: "hasDatepicker",
+
+ //Keep track of the maximum number of rows displayed (see #7043)
+ maxRows: 4,
+
+ // TODO rename to "widget" when switching to widget factory
+ _widgetDatepicker: function() {
+ return this.dpDiv;
+ },
+
+ /* Override the default settings for all instances of the date picker.
+ * @param settings object - the new settings to use as defaults (anonymous object)
+ * @return the manager object
+ */
+ setDefaults: function(settings) {
+ datepicker_extendRemove(this._defaults, settings || {});
+ return this;
+ },
+
+ /* Attach the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param settings object - the new settings to use for this date picker instance (anonymous)
+ */
+ _attachDatepicker: function(target, settings) {
+ var nodeName, inline, inst;
+ nodeName = target.nodeName.toLowerCase();
+ inline = (nodeName === "div" || nodeName === "span");
+ if (!target.id) {
+ this.uuid += 1;
+ target.id = "dp" + this.uuid;
+ }
+ inst = this._newInst($(target), inline);
+ inst.settings = $.extend({}, settings || {});
+ if (nodeName === "input") {
+ this._connectDatepicker(target, inst);
+ } else if (inline) {
+ this._inlineDatepicker(target, inst);
+ }
+ },
+
+ /* Create a new instance object. */
+ _newInst: function(target, inline) {
+ var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
+ return {id: id, input: target, // associated target
+ selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+ drawMonth: 0, drawYear: 0, // month being drawn
+ inline: inline, // is datepicker inline or not
+ dpDiv: (!inline ? this.dpDiv : // presentation div
+ datepicker_bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
+ },
+
+ /* Attach the date picker to an input field. */
+ _connectDatepicker: function(target, inst) {
+ var input = $(target);
+ inst.append = $([]);
+ inst.trigger = $([]);
+ if (input.hasClass(this.markerClassName)) {
+ return;
+ }
+ this._attachments(input, inst);
+ input.addClass(this.markerClassName).keydown(this._doKeyDown).
+ keypress(this._doKeyPress).keyup(this._doKeyUp);
+ this._autoSize(inst);
+ $.data(target, "datepicker", inst);
+ //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+ if( inst.settings.disabled ) {
+ this._disableDatepicker( target );
+ }
+ },
+
+ /* Make attachments based on settings. */
+ _attachments: function(input, inst) {
+ var showOn, buttonText, buttonImage,
+ appendText = this._get(inst, "appendText"),
+ isRTL = this._get(inst, "isRTL");
+
+ if (inst.append) {
+ inst.append.remove();
+ }
+ if (appendText) {
+ inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
+ input[isRTL ? "before" : "after"](inst.append);
+ }
+
+ input.unbind("focus", this._showDatepicker);
+
+ if (inst.trigger) {
+ inst.trigger.remove();
+ }
+
+ showOn = this._get(inst, "showOn");
+ if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
+ input.focus(this._showDatepicker);
+ }
+ if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
+ buttonText = this._get(inst, "buttonText");
+ buttonImage = this._get(inst, "buttonImage");
+ inst.trigger = $(this._get(inst, "buttonImageOnly") ?
+ $("<img/>").addClass(this._triggerClass).
+ attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
+ $("<button type='button'></button>").addClass(this._triggerClass).
+ html(!buttonImage ? buttonText : $("<img/>").attr(
+ { src:buttonImage, alt:buttonText, title:buttonText })));
+ input[isRTL ? "before" : "after"](inst.trigger);
+ inst.trigger.click(function() {
+ if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
+ $.datepicker._hideDatepicker();
+ } else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
+ $.datepicker._hideDatepicker();
+ $.datepicker._showDatepicker(input[0]);
+ } else {
+ $.datepicker._showDatepicker(input[0]);
+ }
+ return false;
+ });
+ }
+ },
+
+ /* Apply the maximum length for the date format. */
+ _autoSize: function(inst) {
+ if (this._get(inst, "autoSize") && !inst.inline) {
+ var findMax, max, maxI, i,
+ date = new Date(2009, 12 - 1, 20), // Ensure double digits
+ dateFormat = this._get(inst, "dateFormat");
+
+ if (dateFormat.match(/[DM]/)) {
+ findMax = function(names) {
+ max = 0;
+ maxI = 0;
+ for (i = 0; i < names.length; i++) {
+ if (names[i].length > max) {
+ max = names[i].length;
+ maxI = i;
+ }
+ }
+ return maxI;
+ };
+ date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
+ "monthNames" : "monthNamesShort"))));
+ date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
+ "dayNames" : "dayNamesShort"))) + 20 - date.getDay());
+ }
+ inst.input.attr("size", this._formatDate(inst, date).length);
+ }
+ },
+
+ /* Attach an inline date picker to a div. */
+ _inlineDatepicker: function(target, inst) {
+ var divSpan = $(target);
+ if (divSpan.hasClass(this.markerClassName)) {
+ return;
+ }
+ divSpan.addClass(this.markerClassName).append(inst.dpDiv);
+ $.data(target, "datepicker", inst);
+ this._setDate(inst, this._getDefaultDate(inst), true);
+ this._updateDatepicker(inst);
+ this._updateAlternate(inst);
+ //If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+ if( inst.settings.disabled ) {
+ this._disableDatepicker( target );
+ }
+ // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+ // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+ inst.dpDiv.css( "display", "block" );
+ },
+
+ /* Pop-up the date picker in a "dialog" box.
+ * @param input element - ignored
+ * @param date string or Date - the initial date to display
+ * @param onSelect function - the function to call when a date is selected
+ * @param settings object - update the dialog date picker instance's settings (anonymous object)
+ * @param pos int[2] - coordinates for the dialog's position within the screen or
+ * event - with x/y coordinates or
+ * leave empty for default (screen centre)
+ * @return the manager object
+ */
+ _dialogDatepicker: function(input, date, onSelect, settings, pos) {
+ var id, browserWidth, browserHeight, scrollX, scrollY,
+ inst = this._dialogInst; // internal instance
+
+ if (!inst) {
+ this.uuid += 1;
+ id = "dp" + this.uuid;
+ this._dialogInput = $("<input type='text' id='" + id +
+ "' style='position: absolute; top: -100px; width: 0px;'/>");
+ this._dialogInput.keydown(this._doKeyDown);
+ $("body").append(this._dialogInput);
+ inst = this._dialogInst = this._newInst(this._dialogInput, false);
+ inst.settings = {};
+ $.data(this._dialogInput[0], "datepicker", inst);
+ }
+ datepicker_extendRemove(inst.settings, settings || {});
+ date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
+ this._dialogInput.val(date);
+
+ this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+ if (!this._pos) {
+ browserWidth = document.documentElement.clientWidth;
+ browserHeight = document.documentElement.clientHeight;
+ scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+ scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+ this._pos = // should use actual width/height below
+ [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+ }
+
+ // move input on screen for focus, but hidden behind dialog
+ this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
+ inst.settings.onSelect = onSelect;
+ this._inDialog = true;
+ this.dpDiv.addClass(this._dialogClass);
+ this._showDatepicker(this._dialogInput[0]);
+ if ($.blockUI) {
+ $.blockUI(this.dpDiv);
+ }
+ $.data(this._dialogInput[0], "datepicker", inst);
+ return this;
+ },
+
+ /* Detach a datepicker from its control.
+ * @param target element - the target input field or division or span
+ */
+ _destroyDatepicker: function(target) {
+ var nodeName,
+ $target = $(target),
+ inst = $.data(target, "datepicker");
+
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ $.removeData(target, "datepicker");
+ if (nodeName === "input") {
+ inst.append.remove();
+ inst.trigger.remove();
+ $target.removeClass(this.markerClassName).
+ unbind("focus", this._showDatepicker).
+ unbind("keydown", this._doKeyDown).
+ unbind("keypress", this._doKeyPress).
+ unbind("keyup", this._doKeyUp);
+ } else if (nodeName === "div" || nodeName === "span") {
+ $target.removeClass(this.markerClassName).empty();
+ }
+
+ if ( datepicker_instActive === inst ) {
+ datepicker_instActive = null;
+ }
+ },
+
+ /* Enable the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ */
+ _enableDatepicker: function(target) {
+ var nodeName, inline,
+ $target = $(target),
+ inst = $.data(target, "datepicker");
+
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ if (nodeName === "input") {
+ target.disabled = false;
+ inst.trigger.filter("button").
+ each(function() { this.disabled = false; }).end().
+ filter("img").css({opacity: "1.0", cursor: ""});
+ } else if (nodeName === "div" || nodeName === "span") {
+ inline = $target.children("." + this._inlineClass);
+ inline.children().removeClass("ui-state-disabled");
+ inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+ prop("disabled", false);
+ }
+ this._disabledInputs = $.map(this._disabledInputs,
+ function(value) { return (value === target ? null : value); }); // delete entry
+ },
+
+ /* Disable the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ */
+ _disableDatepicker: function(target) {
+ var nodeName, inline,
+ $target = $(target),
+ inst = $.data(target, "datepicker");
+
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ if (nodeName === "input") {
+ target.disabled = true;
+ inst.trigger.filter("button").
+ each(function() { this.disabled = true; }).end().
+ filter("img").css({opacity: "0.5", cursor: "default"});
+ } else if (nodeName === "div" || nodeName === "span") {
+ inline = $target.children("." + this._inlineClass);
+ inline.children().addClass("ui-state-disabled");
+ inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+ prop("disabled", true);
+ }
+ this._disabledInputs = $.map(this._disabledInputs,
+ function(value) { return (value === target ? null : value); }); // delete entry
+ this._disabledInputs[this._disabledInputs.length] = target;
+ },
+
+ /* Is the first field in a jQuery collection disabled as a datepicker?
+ * @param target element - the target input field or division or span
+ * @return boolean - true if disabled, false if enabled
+ */
+ _isDisabledDatepicker: function(target) {
+ if (!target) {
+ return false;
+ }
+ for (var i = 0; i < this._disabledInputs.length; i++) {
+ if (this._disabledInputs[i] === target) {
+ return true;
+ }
+ }
+ return false;
+ },
+
+ /* Retrieve the instance data for the target control.
+ * @param target element - the target input field or division or span
+ * @return object - the associated instance data
+ * @throws error if a jQuery problem getting data
+ */
+ _getInst: function(target) {
+ try {
+ return $.data(target, "datepicker");
+ }
+ catch (err) {
+ throw "Missing instance data for this datepicker";
+ }
+ },
+
+ /* Update or retrieve the settings for a date picker attached to an input field or division.
+ * @param target element - the target input field or division or span
+ * @param name object - the new settings to update or
+ * string - the name of the setting to change or retrieve,
+ * when retrieving also "all" for all instance settings or
+ * "defaults" for all global defaults
+ * @param value any - the new value for the setting
+ * (omit if above is an object or to retrieve a value)
+ */
+ _optionDatepicker: function(target, name, value) {
+ var settings, date, minDate, maxDate,
+ inst = this._getInst(target);
+
+ if (arguments.length === 2 && typeof name === "string") {
+ return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
+ (inst ? (name === "all" ? $.extend({}, inst.settings) :
+ this._get(inst, name)) : null));
+ }
+
+ settings = name || {};
+ if (typeof name === "string") {
+ settings = {};
+ settings[name] = value;
+ }
+
+ if (inst) {
+ if (this._curInst === inst) {
+ this._hideDatepicker();
+ }
+
+ date = this._getDateDatepicker(target, true);
+ minDate = this._getMinMaxDate(inst, "min");
+ maxDate = this._getMinMaxDate(inst, "max");
+ datepicker_extendRemove(inst.settings, settings);
+ // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+ if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
+ inst.settings.minDate = this._formatDate(inst, minDate);
+ }
+ if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
+ inst.settings.maxDate = this._formatDate(inst, maxDate);
+ }
+ if ( "disabled" in settings ) {
+ if ( settings.disabled ) {
+ this._disableDatepicker(target);
+ } else {
+ this._enableDatepicker(target);
+ }
+ }
+ this._attachments($(target), inst);
+ this._autoSize(inst);
+ this._setDate(inst, date);
+ this._updateAlternate(inst);
+ this._updateDatepicker(inst);
+ }
+ },
+
+ // change method deprecated
+ _changeDatepicker: function(target, name, value) {
+ this._optionDatepicker(target, name, value);
+ },
+
+ /* Redraw the date picker attached to an input field or division.
+ * @param target element - the target input field or division or span
+ */
+ _refreshDatepicker: function(target) {
+ var inst = this._getInst(target);
+ if (inst) {
+ this._updateDatepicker(inst);
+ }
+ },
+
+ /* Set the dates for a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param date Date - the new date
+ */
+ _setDateDatepicker: function(target, date) {
+ var inst = this._getInst(target);
+ if (inst) {
+ this._setDate(inst, date);
+ this._updateDatepicker(inst);
+ this._updateAlternate(inst);
+ }
+ },
+
+ /* Get the date(s) for the first entry in a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param noDefault boolean - true if no default date is to be used
+ * @return Date - the current date
+ */
+ _getDateDatepicker: function(target, noDefault) {
+ var inst = this._getInst(target);
+ if (inst && !inst.inline) {
+ this._setDateFromField(inst, noDefault);
+ }
+ return (inst ? this._getDate(inst) : null);
+ },
+
+ /* Handle keystrokes. */
+ _doKeyDown: function(event) {
+ var onSelect, dateStr, sel,
+ inst = $.datepicker._getInst(event.target),
+ handled = true,
+ isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
+
+ inst._keyEvent = true;
+ if ($.datepicker._datepickerShowing) {
+ switch (event.keyCode) {
+ case 9: $.datepicker._hideDatepicker();
+ handled = false;
+ break; // hide on tab out
+ case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
+ $.datepicker._currentClass + ")", inst.dpDiv);
+ if (sel[0]) {
+ $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+ }
+
+ onSelect = $.datepicker._get(inst, "onSelect");
+ if (onSelect) {
+ dateStr = $.datepicker._formatDate(inst);
+
+ // trigger custom callback
+ onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+ } else {
+ $.datepicker._hideDatepicker();
+ }
+
+ return false; // don't submit the form
+ case 27: $.datepicker._hideDatepicker();
+ break; // hide on escape
+ case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ -$.datepicker._get(inst, "stepBigMonths") :
+ -$.datepicker._get(inst, "stepMonths")), "M");
+ break; // previous month/year on page up/+ ctrl
+ case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ +$.datepicker._get(inst, "stepBigMonths") :
+ +$.datepicker._get(inst, "stepMonths")), "M");
+ break; // next month/year on page down/+ ctrl
+ case 35: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._clearDate(event.target);
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // clear on ctrl or command +end
+ case 36: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._gotoToday(event.target);
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // current on ctrl or command +home
+ case 37: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ // -1 day on ctrl or command +left
+ if (event.originalEvent.altKey) {
+ $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ -$.datepicker._get(inst, "stepBigMonths") :
+ -$.datepicker._get(inst, "stepMonths")), "M");
+ }
+ // next month/year on alt +left on Mac
+ break;
+ case 38: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, -7, "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // -1 week on ctrl or command +up
+ case 39: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ // +1 day on ctrl or command +right
+ if (event.originalEvent.altKey) {
+ $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ +$.datepicker._get(inst, "stepBigMonths") :
+ +$.datepicker._get(inst, "stepMonths")), "M");
+ }
+ // next month/year on alt +right
+ break;
+ case 40: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, +7, "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // +1 week on ctrl or command +down
+ default: handled = false;
+ }
+ } else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
+ $.datepicker._showDatepicker(this);
+ } else {
+ handled = false;
+ }
+
+ if (handled) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ },
+
+ /* Filter entered characters - based on date format. */
+ _doKeyPress: function(event) {
+ var chars, chr,
+ inst = $.datepicker._getInst(event.target);
+
+ if ($.datepicker._get(inst, "constrainInput")) {
+ chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
+ chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
+ return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
+ }
+ },
+
+ /* Synchronise manual entry and field/alternate field. */
+ _doKeyUp: function(event) {
+ var date,
+ inst = $.datepicker._getInst(event.target);
+
+ if (inst.input.val() !== inst.lastVal) {
+ try {
+ date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+ (inst.input ? inst.input.val() : null),
+ $.datepicker._getFormatConfig(inst));
+
+ if (date) { // only if valid
+ $.datepicker._setDateFromField(inst);
+ $.datepicker._updateAlternate(inst);
+ $.datepicker._updateDatepicker(inst);
+ }
+ }
+ catch (err) {
+ }
+ }
+ return true;
+ },
+
+ /* Pop-up the date picker for a given input field.
+ * If false returned from beforeShow event handler do not show.
+ * @param input element - the input field attached to the date picker or
+ * event - if triggered by focus
+ */
+ _showDatepicker: function(input) {
+ input = input.target || input;
+ if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
+ input = $("input", input.parentNode)[0];
+ }
+
+ if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
+ return;
+ }
+
+ var inst, beforeShow, beforeShowSettings, isFixed,
+ offset, showAnim, duration;
+
+ inst = $.datepicker._getInst(input);
+ if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
+ $.datepicker._curInst.dpDiv.stop(true, true);
+ if ( inst && $.datepicker._datepickerShowing ) {
+ $.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
+ }
+ }
+
+ beforeShow = $.datepicker._get(inst, "beforeShow");
+ beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
+ if(beforeShowSettings === false){
+ return;
+ }
+ datepicker_extendRemove(inst.settings, beforeShowSettings);
+
+ inst.lastVal = null;
+ $.datepicker._lastInput = input;
+ $.datepicker._setDateFromField(inst);
+
+ if ($.datepicker._inDialog) { // hide cursor
+ input.value = "";
+ }
+ if (!$.datepicker._pos) { // position below input
+ $.datepicker._pos = $.datepicker._findPos(input);
+ $.datepicker._pos[1] += input.offsetHeight; // add the height
+ }
+
+ isFixed = false;
+ $(input).parents().each(function() {
+ isFixed |= $(this).css("position") === "fixed";
+ return !isFixed;
+ });
+
+ offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+ $.datepicker._pos = null;
+ //to avoid flashes on Firefox
+ inst.dpDiv.empty();
+ // determine sizing offscreen
+ inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
+ $.datepicker._updateDatepicker(inst);
+ // fix width for dynamic number of date pickers
+ // and adjust position before showing
+ offset = $.datepicker._checkOffset(inst, offset, isFixed);
+ inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
+ "static" : (isFixed ? "fixed" : "absolute")), display: "none",
+ left: offset.left + "px", top: offset.top + "px"});
+
+ if (!inst.inline) {
+ showAnim = $.datepicker._get(inst, "showAnim");
+ duration = $.datepicker._get(inst, "duration");
+ inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 );
+ $.datepicker._datepickerShowing = true;
+
+ if ( $.effects && $.effects.effect[ showAnim ] ) {
+ inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
+ } else {
+ inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
+ }
+
+ if ( $.datepicker._shouldFocusInput( inst ) ) {
+ inst.input.focus();
+ }
+
+ $.datepicker._curInst = inst;
+ }
+ },
+
+ /* Generate the date picker content. */
+ _updateDatepicker: function(inst) {
+ this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+ datepicker_instActive = inst; // for delegate hover events
+ inst.dpDiv.empty().append(this._generateHTML(inst));
+ this._attachHandlers(inst);
+
+ var origyearshtml,
+ numMonths = this._getNumberOfMonths(inst),
+ cols = numMonths[1],
+ width = 17,
+ activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" );
+
+ if ( activeCell.length > 0 ) {
+ datepicker_handleMouseover.apply( activeCell.get( 0 ) );
+ }
+
+ inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
+ if (cols > 1) {
+ inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
+ }
+ inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
+ "Class"]("ui-datepicker-multi");
+ inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
+ "Class"]("ui-datepicker-rtl");
+
+ if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
+ inst.input.focus();
+ }
+
+ // deffered render of the years select (to avoid flashes on Firefox)
+ if( inst.yearshtml ){
+ origyearshtml = inst.yearshtml;
+ setTimeout(function(){
+ //assure that inst.yearshtml didn't change.
+ if( origyearshtml === inst.yearshtml && inst.yearshtml ){
+ inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
+ }
+ origyearshtml = inst.yearshtml = null;
+ }, 0);
+ }
+ },
+
+ // #6694 - don't focus the input if it's already focused
+ // this breaks the change event in IE
+ // Support: IE and jQuery <1.9
+ _shouldFocusInput: function( inst ) {
+ return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
+ },
+
+ /* Check positioning to remain on screen. */
+ _checkOffset: function(inst, offset, isFixed) {
+ var dpWidth = inst.dpDiv.outerWidth(),
+ dpHeight = inst.dpDiv.outerHeight(),
+ inputWidth = inst.input ? inst.input.outerWidth() : 0,
+ inputHeight = inst.input ? inst.input.outerHeight() : 0,
+ viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
+ viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
+
+ offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
+ offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
+ offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+
+ // now check if datepicker is showing outside window viewport - move to a better place if so.
+ offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
+ Math.abs(offset.left + dpWidth - viewWidth) : 0);
+ offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
+ Math.abs(dpHeight + inputHeight) : 0);
+
+ return offset;
+ },
+
+ /* Find an object's position on the screen. */
+ _findPos: function(obj) {
+ var position,
+ inst = this._getInst(obj),
+ isRTL = this._get(inst, "isRTL");
+
+ while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
+ obj = obj[isRTL ? "previousSibling" : "nextSibling"];
+ }
+
+ position = $(obj).offset();
+ return [position.left, position.top];
+ },
+
+ /* Hide the date picker from view.
+ * @param input element - the input field attached to the date picker
+ */
+ _hideDatepicker: function(input) {
+ var showAnim, duration, postProcess, onClose,
+ inst = this._curInst;
+
+ if (!inst || (input && inst !== $.data(input, "datepicker"))) {
+ return;
+ }
+
+ if (this._datepickerShowing) {
+ showAnim = this._get(inst, "showAnim");
+ duration = this._get(inst, "duration");
+ postProcess = function() {
+ $.datepicker._tidyDialog(inst);
+ };
+
+ // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
+ if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
+ inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
+ } else {
+ inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
+ (showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
+ }
+
+ if (!showAnim) {
+ postProcess();
+ }
+ this._datepickerShowing = false;
+
+ onClose = this._get(inst, "onClose");
+ if (onClose) {
+ onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
+ }
+
+ this._lastInput = null;
+ if (this._inDialog) {
+ this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
+ if ($.blockUI) {
+ $.unblockUI();
+ $("body").append(this.dpDiv);
+ }
+ }
+ this._inDialog = false;
+ }
+ },
+
+ /* Tidy up after a dialog display. */
+ _tidyDialog: function(inst) {
+ inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
+ },
+
+ /* Close date picker if clicked elsewhere. */
+ _checkExternalClick: function(event) {
+ if (!$.datepicker._curInst) {
+ return;
+ }
+
+ var $target = $(event.target),
+ inst = $.datepicker._getInst($target[0]);
+
+ if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
+ $target.parents("#" + $.datepicker._mainDivId).length === 0 &&
+ !$target.hasClass($.datepicker.markerClassName) &&
+ !$target.closest("." + $.datepicker._triggerClass).length &&
+ $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
+ ( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
+ $.datepicker._hideDatepicker();
+ }
+ },
+
+ /* Adjust one of the date sub-fields. */
+ _adjustDate: function(id, offset, period) {
+ var target = $(id),
+ inst = this._getInst(target[0]);
+
+ if (this._isDisabledDatepicker(target[0])) {
+ return;
+ }
+ this._adjustInstDate(inst, offset +
+ (period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
+ period);
+ this._updateDatepicker(inst);
+ },
+
+ /* Action for current link. */
+ _gotoToday: function(id) {
+ var date,
+ target = $(id),
+ inst = this._getInst(target[0]);
+
+ if (this._get(inst, "gotoCurrent") && inst.currentDay) {
+ inst.selectedDay = inst.currentDay;
+ inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+ inst.drawYear = inst.selectedYear = inst.currentYear;
+ } else {
+ date = new Date();
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ }
+ this._notifyChange(inst);
+ this._adjustDate(target);
+ },
+
+ /* Action for selecting a new month/year. */
+ _selectMonthYear: function(id, select, period) {
+ var target = $(id),
+ inst = this._getInst(target[0]);
+
+ inst["selected" + (period === "M" ? "Month" : "Year")] =
+ inst["draw" + (period === "M" ? "Month" : "Year")] =
+ parseInt(select.options[select.selectedIndex].value,10);
+
+ this._notifyChange(inst);
+ this._adjustDate(target);
+ },
+
+ /* Action for selecting a day. */
+ _selectDay: function(id, month, year, td) {
+ var inst,
+ target = $(id);
+
+ if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+ return;
+ }
+
+ inst = this._getInst(target[0]);
+ inst.selectedDay = inst.currentDay = $("a", td).html();
+ inst.selectedMonth = inst.currentMonth = month;
+ inst.selectedYear = inst.currentYear = year;
+ this._selectDate(id, this._formatDate(inst,
+ inst.currentDay, inst.currentMonth, inst.currentYear));
+ },
+
+ /* Erase the input field and hide the date picker. */
+ _clearDate: function(id) {
+ var target = $(id);
+ this._selectDate(target, "");
+ },
+
+ /* Update the input field with the selected date. */
+ _selectDate: function(id, dateStr) {
+ var onSelect,
+ target = $(id),
+ inst = this._getInst(target[0]);
+
+ dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+ if (inst.input) {
+ inst.input.val(dateStr);
+ }
+ this._updateAlternate(inst);
+
+ onSelect = this._get(inst, "onSelect");
+ if (onSelect) {
+ onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback
+ } else if (inst.input) {
+ inst.input.trigger("change"); // fire the change event
+ }
+
+ if (inst.inline){
+ this._updateDatepicker(inst);
+ } else {
+ this._hideDatepicker();
+ this._lastInput = inst.input[0];
+ if (typeof(inst.input[0]) !== "object") {
+ inst.input.focus(); // restore focus
+ }
+ this._lastInput = null;
+ }
+ },
+
+ /* Update any alternate field to synchronise with the main field. */
+ _updateAlternate: function(inst) {
+ var altFormat, date, dateStr,
+ altField = this._get(inst, "altField");
+
+ if (altField) { // update alternate field too
+ altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
+ date = this._getDate(inst);
+ dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+ $(altField).each(function() { $(this).val(dateStr); });
+ }
+ },
+
+ /* Set as beforeShowDay function to prevent selection of weekends.
+ * @param date Date - the date to customise
+ * @return [boolean, string] - is this date selectable?, what is its CSS class?
+ */
+ noWeekends: function(date) {
+ var day = date.getDay();
+ return [(day > 0 && day < 6), ""];
+ },
+
+ /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+ * @param date Date - the date to get the week for
+ * @return number - the number of the week within the year that contains this date
+ */
+ iso8601Week: function(date) {
+ var time,
+ checkDate = new Date(date.getTime());
+
+ // Find Thursday of this week starting on Monday
+ checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
+
+ time = checkDate.getTime();
+ checkDate.setMonth(0); // Compare with Jan 1
+ checkDate.setDate(1);
+ return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+ },
+
+ /* Parse a string value into a date object.
+ * See formatDate below for the possible formats.
+ *
+ * @param format string - the expected format of the date
+ * @param value string - the date in the above format
+ * @param settings Object - attributes include:
+ * shortYearCutoff number - the cutoff year for determining the century (optional)
+ * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
+ * dayNames string[7] - names of the days from Sunday (optional)
+ * monthNamesShort string[12] - abbreviated names of the months (optional)
+ * monthNames string[12] - names of the months (optional)
+ * @return Date - the extracted date value or null if value is blank
+ */
+ parseDate: function (format, value, settings) {
+ if (format == null || value == null) {
+ throw "Invalid arguments";
+ }
+
+ value = (typeof value === "object" ? value.toString() : value + "");
+ if (value === "") {
+ return null;
+ }
+
+ var iFormat, dim, extra,
+ iValue = 0,
+ shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
+ shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
+ new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
+ dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+ dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+ monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+ monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+ year = -1,
+ month = -1,
+ day = -1,
+ doy = -1,
+ literal = false,
+ date,
+ // Check whether a format character is doubled
+ lookAhead = function(match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+ if (matches) {
+ iFormat++;
+ }
+ return matches;
+ },
+ // Extract a number from the string value
+ getNumber = function(match) {
+ var isDoubled = lookAhead(match),
+ size = (match === "@" ? 14 : (match === "!" ? 20 :
+ (match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
+ minSize = (match === "y" ? size : 1),
+ digits = new RegExp("^\\d{" + minSize + "," + size + "}"),
+ num = value.substring(iValue).match(digits);
+ if (!num) {
+ throw "Missing number at position " + iValue;
+ }
+ iValue += num[0].length;
+ return parseInt(num[0], 10);
+ },
+ // Extract a name from the string value and convert to an index
+ getName = function(match, shortNames, longNames) {
+ var index = -1,
+ names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
+ return [ [k, v] ];
+ }).sort(function (a, b) {
+ return -(a[1].length - b[1].length);
+ });
+
+ $.each(names, function (i, pair) {
+ var name = pair[1];
+ if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
+ index = pair[0];
+ iValue += name.length;
+ return false;
+ }
+ });
+ if (index !== -1) {
+ return index + 1;
+ } else {
+ throw "Unknown name at position " + iValue;
+ }
+ },
+ // Confirm that a literal character matches the string value
+ checkLiteral = function() {
+ if (value.charAt(iValue) !== format.charAt(iFormat)) {
+ throw "Unexpected literal at position " + iValue;
+ }
+ iValue++;
+ };
+
+ for (iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+ literal = false;
+ } else {
+ checkLiteral();
+ }
+ } else {
+ switch (format.charAt(iFormat)) {
+ case "d":
+ day = getNumber("d");
+ break;
+ case "D":
+ getName("D", dayNamesShort, dayNames);
+ break;
+ case "o":
+ doy = getNumber("o");
+ break;
+ case "m":
+ month = getNumber("m");
+ break;
+ case "M":
+ month = getName("M", monthNamesShort, monthNames);
+ break;
+ case "y":
+ year = getNumber("y");
+ break;
+ case "@":
+ date = new Date(getNumber("@"));
+ year = date.getFullYear();
+ month = date.getMonth() + 1;
+ day = date.getDate();
+ break;
+ case "!":
+ date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
+ year = date.getFullYear();
+ month = date.getMonth() + 1;
+ day = date.getDate();
+ break;
+ case "'":
+ if (lookAhead("'")){
+ checkLiteral();
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ checkLiteral();
+ }
+ }
+ }
+
+ if (iValue < value.length){
+ extra = value.substr(iValue);
+ if (!/^\s+/.test(extra)) {
+ throw "Extra/unparsed characters found in date: " + extra;
+ }
+ }
+
+ if (year === -1) {
+ year = new Date().getFullYear();
+ } else if (year < 100) {
+ year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+ (year <= shortYearCutoff ? 0 : -100);
+ }
+
+ if (doy > -1) {
+ month = 1;
+ day = doy;
+ do {
+ dim = this._getDaysInMonth(year, month - 1);
+ if (day <= dim) {
+ break;
+ }
+ month++;
+ day -= dim;
+ } while (true);
+ }
+
+ date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+ if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
+ throw "Invalid date"; // E.g. 31/02/00
+ }
+ return date;
+ },
+
+ /* Standard date formats. */
+ ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
+ COOKIE: "D, dd M yy",
+ ISO_8601: "yy-mm-dd",
+ RFC_822: "D, d M y",
+ RFC_850: "DD, dd-M-y",
+ RFC_1036: "D, d M y",
+ RFC_1123: "D, d M yy",
+ RFC_2822: "D, d M yy",
+ RSS: "D, d M y", // RFC 822
+ TICKS: "!",
+ TIMESTAMP: "@",
+ W3C: "yy-mm-dd", // ISO 8601
+
+ _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
+ Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
+
+ /* Format a date object into a string value.
+ * The format can be combinations of the following:
+ * d - day of month (no leading zero)
+ * dd - day of month (two digit)
+ * o - day of year (no leading zeros)
+ * oo - day of year (three digit)
+ * D - day name short
+ * DD - day name long
+ * m - month of year (no leading zero)
+ * mm - month of year (two digit)
+ * M - month name short
+ * MM - month name long
+ * y - year (two digit)
+ * yy - year (four digit)
+ * @ - Unix timestamp (ms since 01/01/1970)
+ * ! - Windows ticks (100ns since 01/01/0001)
+ * "..." - literal text
+ * '' - single quote
+ *
+ * @param format string - the desired format of the date
+ * @param date Date - the date value to format
+ * @param settings Object - attributes include:
+ * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
+ * dayNames string[7] - names of the days from Sunday (optional)
+ * monthNamesShort string[12] - abbreviated names of the months (optional)
+ * monthNames string[12] - names of the months (optional)
+ * @return string - the date in the above format
+ */
+ formatDate: function (format, date, settings) {
+ if (!date) {
+ return "";
+ }
+
+ var iFormat,
+ dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+ dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+ monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+ monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+ // Check whether a format character is doubled
+ lookAhead = function(match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+ if (matches) {
+ iFormat++;
+ }
+ return matches;
+ },
+ // Format a number, with leading zero if necessary
+ formatNumber = function(match, value, len) {
+ var num = "" + value;
+ if (lookAhead(match)) {
+ while (num.length < len) {
+ num = "0" + num;
+ }
+ }
+ return num;
+ },
+ // Format a name, short or long as requested
+ formatName = function(match, value, shortNames, longNames) {
+ return (lookAhead(match) ? longNames[value] : shortNames[value]);
+ },
+ output = "",
+ literal = false;
+
+ if (date) {
+ for (iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+ literal = false;
+ } else {
+ output += format.charAt(iFormat);
+ }
+ } else {
+ switch (format.charAt(iFormat)) {
+ case "d":
+ output += formatNumber("d", date.getDate(), 2);
+ break;
+ case "D":
+ output += formatName("D", date.getDay(), dayNamesShort, dayNames);
+ break;
+ case "o":
+ output += formatNumber("o",
+ Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
+ break;
+ case "m":
+ output += formatNumber("m", date.getMonth() + 1, 2);
+ break;
+ case "M":
+ output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
+ break;
+ case "y":
+ output += (lookAhead("y") ? date.getFullYear() :
+ (date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
+ break;
+ case "@":
+ output += date.getTime();
+ break;
+ case "!":
+ output += date.getTime() * 10000 + this._ticksTo1970;
+ break;
+ case "'":
+ if (lookAhead("'")) {
+ output += "'";
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ output += format.charAt(iFormat);
+ }
+ }
+ }
+ }
+ return output;
+ },
+
+ /* Extract all possible characters from the date format. */
+ _possibleChars: function (format) {
+ var iFormat,
+ chars = "",
+ literal = false,
+ // Check whether a format character is doubled
+ lookAhead = function(match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+ if (matches) {
+ iFormat++;
+ }
+ return matches;
+ };
+
+ for (iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+ literal = false;
+ } else {
+ chars += format.charAt(iFormat);
+ }
+ } else {
+ switch (format.charAt(iFormat)) {
+ case "d": case "m": case "y": case "@":
+ chars += "0123456789";
+ break;
+ case "D": case "M":
+ return null; // Accept anything
+ case "'":
+ if (lookAhead("'")) {
+ chars += "'";
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ chars += format.charAt(iFormat);
+ }
+ }
+ }
+ return chars;
+ },
+
+ /* Get a setting value, defaulting if necessary. */
+ _get: function(inst, name) {
+ return inst.settings[name] !== undefined ?
+ inst.settings[name] : this._defaults[name];
+ },
+
+ /* Parse existing date and initialise date picker. */
+ _setDateFromField: function(inst, noDefault) {
+ if (inst.input.val() === inst.lastVal) {
+ return;
+ }
+
+ var dateFormat = this._get(inst, "dateFormat"),
+ dates = inst.lastVal = inst.input ? inst.input.val() : null,
+ defaultDate = this._getDefaultDate(inst),
+ date = defaultDate,
+ settings = this._getFormatConfig(inst);
+
+ try {
+ date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+ } catch (event) {
+ dates = (noDefault ? "" : dates);
+ }
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ inst.currentDay = (dates ? date.getDate() : 0);
+ inst.currentMonth = (dates ? date.getMonth() : 0);
+ inst.currentYear = (dates ? date.getFullYear() : 0);
+ this._adjustInstDate(inst);
+ },
+
+ /* Retrieve the default date shown on opening. */
+ _getDefaultDate: function(inst) {
+ return this._restrictMinMax(inst,
+ this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
+ },
+
+ /* A date may be specified as an exact value or a relative one. */
+ _determineDate: function(inst, date, defaultDate) {
+ var offsetNumeric = function(offset) {
+ var date = new Date();
+ date.setDate(date.getDate() + offset);
+ return date;
+ },
+ offsetString = function(offset) {
+ try {
+ return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+ offset, $.datepicker._getFormatConfig(inst));
+ }
+ catch (e) {
+ // Ignore
+ }
+
+ var date = (offset.toLowerCase().match(/^c/) ?
+ $.datepicker._getDate(inst) : null) || new Date(),
+ year = date.getFullYear(),
+ month = date.getMonth(),
+ day = date.getDate(),
+ pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
+ matches = pattern.exec(offset);
+
+ while (matches) {
+ switch (matches[2] || "d") {
+ case "d" : case "D" :
+ day += parseInt(matches[1],10); break;
+ case "w" : case "W" :
+ day += parseInt(matches[1],10) * 7; break;
+ case "m" : case "M" :
+ month += parseInt(matches[1],10);
+ day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+ break;
+ case "y": case "Y" :
+ year += parseInt(matches[1],10);
+ day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+ break;
+ }
+ matches = pattern.exec(offset);
+ }
+ return new Date(year, month, day);
+ },
+ newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
+ (typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
+
+ newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
+ if (newDate) {
+ newDate.setHours(0);
+ newDate.setMinutes(0);
+ newDate.setSeconds(0);
+ newDate.setMilliseconds(0);
+ }
+ return this._daylightSavingAdjust(newDate);
+ },
+
+ /* Handle switch to/from daylight saving.
+ * Hours may be non-zero on daylight saving cut-over:
+ * > 12 when midnight changeover, but then cannot generate
+ * midnight datetime, so jump to 1AM, otherwise reset.
+ * @param date (Date) the date to check
+ * @return (Date) the corrected date
+ */
+ _daylightSavingAdjust: function(date) {
+ if (!date) {
+ return null;
+ }
+ date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+ return date;
+ },
+
+ /* Set the date(s) directly. */
+ _setDate: function(inst, date, noChange) {
+ var clear = !date,
+ origMonth = inst.selectedMonth,
+ origYear = inst.selectedYear,
+ newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
+
+ inst.selectedDay = inst.currentDay = newDate.getDate();
+ inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+ inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+ if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
+ this._notifyChange(inst);
+ }
+ this._adjustInstDate(inst);
+ if (inst.input) {
+ inst.input.val(clear ? "" : this._formatDate(inst));
+ }
+ },
+
+ /* Retrieve the date(s) directly. */
+ _getDate: function(inst) {
+ var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
+ this._daylightSavingAdjust(new Date(
+ inst.currentYear, inst.currentMonth, inst.currentDay)));
+ return startDate;
+ },
+
+ /* Attach the onxxx handlers. These are declared statically so
+ * they work with static code transformers like Caja.
+ */
+ _attachHandlers: function(inst) {
+ var stepMonths = this._get(inst, "stepMonths"),
+ id = "#" + inst.id.replace( /\\\\/g, "\\" );
+ inst.dpDiv.find("[data-handler]").map(function () {
+ var handler = {
+ prev: function () {
+ $.datepicker._adjustDate(id, -stepMonths, "M");
+ },
+ next: function () {
+ $.datepicker._adjustDate(id, +stepMonths, "M");
+ },
+ hide: function () {
+ $.datepicker._hideDatepicker();
+ },
+ today: function () {
+ $.datepicker._gotoToday(id);
+ },
+ selectDay: function () {
+ $.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
+ return false;
+ },
+ selectMonth: function () {
+ $.datepicker._selectMonthYear(id, this, "M");
+ return false;
+ },
+ selectYear: function () {
+ $.datepicker._selectMonthYear(id, this, "Y");
+ return false;
+ }
+ };
+ $(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
+ });
+ },
+
+ /* Generate the HTML for the current state of the date picker. */
+ _generateHTML: function(inst) {
+ var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
+ controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
+ monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
+ selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
+ cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
+ printDate, dRow, tbody, daySettings, otherMonth, unselectable,
+ tempDate = new Date(),
+ today = this._daylightSavingAdjust(
+ new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
+ isRTL = this._get(inst, "isRTL"),
+ showButtonPanel = this._get(inst, "showButtonPanel"),
+ hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
+ navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
+ numMonths = this._getNumberOfMonths(inst),
+ showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
+ stepMonths = this._get(inst, "stepMonths"),
+ isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
+ currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+ new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
+ minDate = this._getMinMaxDate(inst, "min"),
+ maxDate = this._getMinMaxDate(inst, "max"),
+ drawMonth = inst.drawMonth - showCurrentAtPos,
+ drawYear = inst.drawYear;
+
+ if (drawMonth < 0) {
+ drawMonth += 12;
+ drawYear--;
+ }
+ if (maxDate) {
+ maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+ maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
+ maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+ while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+ drawMonth--;
+ if (drawMonth < 0) {
+ drawMonth = 11;
+ drawYear--;
+ }
+ }
+ }
+ inst.drawMonth = drawMonth;
+ inst.drawYear = drawYear;
+
+ prevText = this._get(inst, "prevText");
+ prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+ this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+ this._getFormatConfig(inst)));
+
+ prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+ "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
+ " title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
+ (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
+
+ nextText = this._get(inst, "nextText");
+ nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+ this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+ this._getFormatConfig(inst)));
+
+ next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+ "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
+ " title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
+ (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
+
+ currentText = this._get(inst, "currentText");
+ gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
+ currentText = (!navigationAsDateFormat ? currentText :
+ this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+
+ controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
+ this._get(inst, "closeText") + "</button>" : "");
+
+ buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
+ (this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
+ ">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
+
+ firstDay = parseInt(this._get(inst, "firstDay"),10);
+ firstDay = (isNaN(firstDay) ? 0 : firstDay);
+
+ showWeek = this._get(inst, "showWeek");
+ dayNames = this._get(inst, "dayNames");
+ dayNamesMin = this._get(inst, "dayNamesMin");
+ monthNames = this._get(inst, "monthNames");
+ monthNamesShort = this._get(inst, "monthNamesShort");
+ beforeShowDay = this._get(inst, "beforeShowDay");
+ showOtherMonths = this._get(inst, "showOtherMonths");
+ selectOtherMonths = this._get(inst, "selectOtherMonths");
+ defaultDate = this._getDefaultDate(inst);
+ html = "";
+ dow;
+ for (row = 0; row < numMonths[0]; row++) {
+ group = "";
+ this.maxRows = 4;
+ for (col = 0; col < numMonths[1]; col++) {
+ selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+ cornerClass = " ui-corner-all";
+ calender = "";
+ if (isMultiMonth) {
+ calender += "<div class='ui-datepicker-group";
+ if (numMonths[1] > 1) {
+ switch (col) {
+ case 0: calender += " ui-datepicker-group-first";
+ cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
+ case numMonths[1]-1: calender += " ui-datepicker-group-last";
+ cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
+ default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
+ }
+ }
+ calender += "'>";
+ }
+ calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
+ (/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
+ (/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
+ this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+ row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+ "</div><table class='ui-datepicker-calendar'><thead>" +
+ "<tr>";
+ thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
+ for (dow = 0; dow < 7; dow++) { // days of the week
+ day = (dow + firstDay) % 7;
+ thead += "<th scope='col'" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
+ "<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
+ }
+ calender += thead + "</tr></thead><tbody>";
+ daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+ if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
+ inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+ }
+ leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+ curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
+ numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
+ this.maxRows = numRows;
+ printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+ for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+ calender += "<tr>";
+ tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
+ this._get(inst, "calculateWeek")(printDate) + "</td>");
+ for (dow = 0; dow < 7; dow++) { // create date picker days
+ daySettings = (beforeShowDay ?
+ beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
+ otherMonth = (printDate.getMonth() !== drawMonth);
+ unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
+ (minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+ tbody += "<td class='" +
+ ((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
+ (otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
+ ((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
+ (defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
+ // or defaultDate is current printedDate and defaultDate is selectedDate
+ " " + this._dayOverClass : "") + // highlight selected day
+ (unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") + // highlight unselectable days
+ (otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
+ (printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
+ (printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
+ ((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "'") + "'" : "") + // cell title
+ (unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
+ (otherMonth && !showOtherMonths ? " " : // display for other months
+ (unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
+ (printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
+ (printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
+ (otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
+ "' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
+ printDate.setDate(printDate.getDate() + 1);
+ printDate = this._daylightSavingAdjust(printDate);
+ }
+ calender += tbody + "</tr>";
+ }
+ drawMonth++;
+ if (drawMonth > 11) {
+ drawMonth = 0;
+ drawYear++;
+ }
+ calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
+ ((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
+ group += calender;
+ }
+ html += group;
+ }
+ html += buttonPanel;
+ inst._keyEvent = false;
+ return html;
+ },
+
+ /* Generate the month and year header. */
+ _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
+ secondary, monthNames, monthNamesShort) {
+
+ var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
+ changeMonth = this._get(inst, "changeMonth"),
+ changeYear = this._get(inst, "changeYear"),
+ showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
+ html = "<div class='ui-datepicker-title'>",
+ monthHtml = "";
+
+ // month selection
+ if (secondary || !changeMonth) {
+ monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
+ } else {
+ inMinYear = (minDate && minDate.getFullYear() === drawYear);
+ inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
+ monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
+ for ( month = 0; month < 12; month++) {
+ if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
+ monthHtml += "<option value='" + month + "'" +
+ (month === drawMonth ? " selected='selected'" : "") +
+ ">" + monthNamesShort[month] + "</option>";
+ }
+ }
+ monthHtml += "</select>";
+ }
+
+ if (!showMonthAfterYear) {
+ html += monthHtml + (secondary || !(changeMonth && changeYear) ? " " : "");
+ }
+
+ // year selection
+ if ( !inst.yearshtml ) {
+ inst.yearshtml = "";
+ if (secondary || !changeYear) {
+ html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
+ } else {
+ // determine range of years to display
+ years = this._get(inst, "yearRange").split(":");
+ thisYear = new Date().getFullYear();
+ determineYear = function(value) {
+ var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
+ (value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
+ parseInt(value, 10)));
+ return (isNaN(year) ? thisYear : year);
+ };
+ year = determineYear(years[0]);
+ endYear = Math.max(year, determineYear(years[1] || ""));
+ year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+ endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+ inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
+ for (; year <= endYear; year++) {
+ inst.yearshtml += "<option value='" + year + "'" +
+ (year === drawYear ? " selected='selected'" : "") +
+ ">" + year + "</option>";
+ }
+ inst.yearshtml += "</select>";
+
+ html += inst.yearshtml;
+ inst.yearshtml = null;
+ }
+ }
+
+ html += this._get(inst, "yearSuffix");
+ if (showMonthAfterYear) {
+ html += (secondary || !(changeMonth && changeYear) ? " " : "") + monthHtml;
+ }
+ html += "</div>"; // Close datepicker_header
+ return html;
+ },
+
+ /* Adjust one of the date sub-fields. */
+ _adjustInstDate: function(inst, offset, period) {
+ var year = inst.drawYear + (period === "Y" ? offset : 0),
+ month = inst.drawMonth + (period === "M" ? offset : 0),
+ day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
+ date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
+
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ if (period === "M" || period === "Y") {
+ this._notifyChange(inst);
+ }
+ },
+
+ /* Ensure a date is within any min/max bounds. */
+ _restrictMinMax: function(inst, date) {
+ var minDate = this._getMinMaxDate(inst, "min"),
+ maxDate = this._getMinMaxDate(inst, "max"),
+ newDate = (minDate && date < minDate ? minDate : date);
+ return (maxDate && newDate > maxDate ? maxDate : newDate);
+ },
+
+ /* Notify change of month/year. */
+ _notifyChange: function(inst) {
+ var onChange = this._get(inst, "onChangeMonthYear");
+ if (onChange) {
+ onChange.apply((inst.input ? inst.input[0] : null),
+ [inst.selectedYear, inst.selectedMonth + 1, inst]);
+ }
+ },
+
+ /* Determine the number of months to show. */
+ _getNumberOfMonths: function(inst) {
+ var numMonths = this._get(inst, "numberOfMonths");
+ return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
+ },
+
+ /* Determine the current maximum date - ensure no time components are set. */
+ _getMinMaxDate: function(inst, minMax) {
+ return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
+ },
+
+ /* Find the number of days in a given month. */
+ _getDaysInMonth: function(year, month) {
+ return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
+ },
+
+ /* Find the day of the week of the first of a month. */
+ _getFirstDayOfMonth: function(year, month) {
+ return new Date(year, month, 1).getDay();
+ },
+
+ /* Determines if we should allow a "next/prev" month display change. */
+ _canAdjustMonth: function(inst, offset, curYear, curMonth) {
+ var numMonths = this._getNumberOfMonths(inst),
+ date = this._daylightSavingAdjust(new Date(curYear,
+ curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
+
+ if (offset < 0) {
+ date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+ }
+ return this._isInRange(inst, date);
+ },
+
+ /* Is the given date in the accepted range? */
+ _isInRange: function(inst, date) {
+ var yearSplit, currentYear,
+ minDate = this._getMinMaxDate(inst, "min"),
+ maxDate = this._getMinMaxDate(inst, "max"),
+ minYear = null,
+ maxYear = null,
+ years = this._get(inst, "yearRange");
+ if (years){
+ yearSplit = years.split(":");
+ currentYear = new Date().getFullYear();
+ minYear = parseInt(yearSplit[0], 10);
+ maxYear = parseInt(yearSplit[1], 10);
+ if ( yearSplit[0].match(/[+\-].*/) ) {
+ minYear += currentYear;
+ }
+ if ( yearSplit[1].match(/[+\-].*/) ) {
+ maxYear += currentYear;
+ }
+ }
+
+ return ((!minDate || date.getTime() >= minDate.getTime()) &&
+ (!maxDate || date.getTime() <= maxDate.getTime()) &&
+ (!minYear || date.getFullYear() >= minYear) &&
+ (!maxYear || date.getFullYear() <= maxYear));
+ },
+
+ /* Provide the configuration settings for formatting/parsing. */
+ _getFormatConfig: function(inst) {
+ var shortYearCutoff = this._get(inst, "shortYearCutoff");
+ shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
+ new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+ return {shortYearCutoff: shortYearCutoff,
+ dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
+ monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
+ },
+
+ /* Format the given date for display. */
+ _formatDate: function(inst, day, month, year) {
+ if (!day) {
+ inst.currentDay = inst.selectedDay;
+ inst.currentMonth = inst.selectedMonth;
+ inst.currentYear = inst.selectedYear;
+ }
+ var date = (day ? (typeof day === "object" ? day :
+ this._daylightSavingAdjust(new Date(year, month, day))) :
+ this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+ return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
+ }
+});
+
+/*
+ * Bind hover events for datepicker elements.
+ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+ * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+ */
+function datepicker_bindHover(dpDiv) {
+ var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
+ return dpDiv.delegate(selector, "mouseout", function() {
+ $(this).removeClass("ui-state-hover");
+ if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+ $(this).removeClass("ui-datepicker-prev-hover");
+ }
+ if (this.className.indexOf("ui-datepicker-next") !== -1) {
+ $(this).removeClass("ui-datepicker-next-hover");
+ }
+ })
+ .delegate( selector, "mouseover", datepicker_handleMouseover );
+}
+
+function datepicker_handleMouseover() {
+ if (!$.datepicker._isDisabledDatepicker( datepicker_instActive.inline? datepicker_instActive.dpDiv.parent()[0] : datepicker_instActive.input[0])) {
+ $(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+ $(this).addClass("ui-state-hover");
+ if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+ $(this).addClass("ui-datepicker-prev-hover");
+ }
+ if (this.className.indexOf("ui-datepicker-next") !== -1) {
+ $(this).addClass("ui-datepicker-next-hover");
+ }
+ }
+}
+
+/* jQuery extend now ignores nulls! */
+function datepicker_extendRemove(target, props) {
+ $.extend(target, props);
+ for (var name in props) {
+ if (props[name] == null) {
+ target[name] = props[name];
+ }
+ }
+ return target;
+}
+
+/* Invoke the datepicker functionality.
+ @param options string - a command, optionally followed by additional parameters or
+ Object - settings for attaching new datepicker functionality
+ @return jQuery object */
+$.fn.datepicker = function(options){
+
+ /* Verify an empty collection wasn't passed - Fixes #6976 */
+ if ( !this.length ) {
+ return this;
+ }
+
+ /* Initialise the date picker. */
+ if (!$.datepicker.initialized) {
+ $(document).mousedown($.datepicker._checkExternalClick);
+ $.datepicker.initialized = true;
+ }
+
+ /* Append datepicker main container to body if not exist. */
+ if ($("#"+$.datepicker._mainDivId).length === 0) {
+ $("body").append($.datepicker.dpDiv);
+ }
+
+ var otherArgs = Array.prototype.slice.call(arguments, 1);
+ if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
+ return $.datepicker["_" + options + "Datepicker"].
+ apply($.datepicker, [this[0]].concat(otherArgs));
+ }
+ if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
+ return $.datepicker["_" + options + "Datepicker"].
+ apply($.datepicker, [this[0]].concat(otherArgs));
+ }
+ return this.each(function() {
+ typeof options === "string" ?
+ $.datepicker["_" + options + "Datepicker"].
+ apply($.datepicker, [this].concat(otherArgs)) :
+ $.datepicker._attachDatepicker(this, options);
+ });
+};
+
+$.datepicker = new Datepicker(); // singleton instance
+$.datepicker.initialized = false;
+$.datepicker.uuid = new Date().getTime();
+$.datepicker.version = "1.11.4";
+
+var datepicker = $.datepicker;
+
+
+/*!
+ * jQuery UI Draggable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/draggable/
+ */
+
+
+$.widget("ui.draggable", $.ui.mouse, {
+ version: "1.11.4",
+ widgetEventPrefix: "drag",
+ options: {
+ addClasses: true,
+ appendTo: "parent",
+ axis: false,
+ connectToSortable: false,
+ containment: false,
+ cursor: "auto",
+ cursorAt: false,
+ grid: false,
+ handle: false,
+ helper: "original",
+ iframeFix: false,
+ opacity: false,
+ refreshPositions: false,
+ revert: false,
+ revertDuration: 500,
+ scope: "default",
+ scroll: true,
+ scrollSensitivity: 20,
+ scrollSpeed: 20,
+ snap: false,
+ snapMode: "both",
+ snapTolerance: 20,
+ stack: false,
+ zIndex: false,
+
+ // callbacks
+ drag: null,
+ start: null,
+ stop: null
+ },
+ _create: function() {
+
+ if ( this.options.helper === "original" ) {
+ this._setPositionRelative();
+ }
+ if (this.options.addClasses){
+ this.element.addClass("ui-draggable");
+ }
+ if (this.options.disabled){
+ this.element.addClass("ui-draggable-disabled");
+ }
+ this._setHandleClassName();
+
+ this._mouseInit();
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+ if ( key === "handle" ) {
+ this._removeHandleClassName();
+ this._setHandleClassName();
+ }
+ },
+
+ _destroy: function() {
+ if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) {
+ this.destroyOnClear = true;
+ return;
+ }
+ this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
+ this._removeHandleClassName();
+ this._mouseDestroy();
+ },
+
+ _mouseCapture: function(event) {
+ var o = this.options;
+
+ this._blurActiveElement( event );
+
+ // among others, prevent a drag on a resizable-handle
+ if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
+ return false;
+ }
+
+ //Quit if we're not on a valid handle
+ this.handle = this._getHandle(event);
+ if (!this.handle) {
+ return false;
+ }
+
+ this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix );
+
+ return true;
+
+ },
+
+ _blockFrames: function( selector ) {
+ this.iframeBlocks = this.document.find( selector ).map(function() {
+ var iframe = $( this );
+
+ return $( "<div>" )
+ .css( "position", "absolute" )
+ .appendTo( iframe.parent() )
+ .outerWidth( iframe.outerWidth() )
+ .outerHeight( iframe.outerHeight() )
+ .offset( iframe.offset() )[ 0 ];
+ });
+ },
+
+ _unblockFrames: function() {
+ if ( this.iframeBlocks ) {
+ this.iframeBlocks.remove();
+ delete this.iframeBlocks;
+ }
+ },
+
+ _blurActiveElement: function( event ) {
+ var document = this.document[ 0 ];
+
+ // Only need to blur if the event occurred on the draggable itself, see #10527
+ if ( !this.handleElement.is( event.target ) ) {
+ return;
+ }
+
+ // support: IE9
+ // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+ try {
+
+ // Support: IE9, IE10
+ // If the <body> is blurred, IE will switch windows, see #9520
+ if ( document.activeElement && document.activeElement.nodeName.toLowerCase() !== "body" ) {
+
+ // Blur any element that currently has focus, see #4261
+ $( document.activeElement ).blur();
+ }
+ } catch ( error ) {}
+ },
+
+ _mouseStart: function(event) {
+
+ var o = this.options;
+
+ //Create and append the visible helper
+ this.helper = this._createHelper(event);
+
+ this.helper.addClass("ui-draggable-dragging");
+
+ //Cache the helper size
+ this._cacheHelperProportions();
+
+ //If ddmanager is used for droppables, set the global draggable
+ if ($.ui.ddmanager) {
+ $.ui.ddmanager.current = this;
+ }
+
+ /*
+ * - Position generation -
+ * This block generates everything position related - it's the core of draggables.
+ */
+
+ //Cache the margins of the original element
+ this._cacheMargins();
+
+ //Store the helper's css position
+ this.cssPosition = this.helper.css( "position" );
+ this.scrollParent = this.helper.scrollParent( true );
+ this.offsetParent = this.helper.offsetParent();
+ this.hasFixedAncestor = this.helper.parents().filter(function() {
+ return $( this ).css( "position" ) === "fixed";
+ }).length > 0;
+
+ //The element's absolute position on the page minus margins
+ this.positionAbs = this.element.offset();
+ this._refreshOffsets( event );
+
+ //Generate the original position
+ this.originalPosition = this.position = this._generatePosition( event, false );
+ this.originalPageX = event.pageX;
+ this.originalPageY = event.pageY;
+
+ //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+ (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+ //Set a containment if given in the options
+ this._setContainment();
+
+ //Trigger event + callbacks
+ if (this._trigger("start", event) === false) {
+ this._clear();
+ return false;
+ }
+
+ //Recache the helper size
+ this._cacheHelperProportions();
+
+ //Prepare the droppable offsets
+ if ($.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+
+ // Reset helper's right/bottom css if they're set and set explicit width/height instead
+ // as this prevents resizing of elements with right/bottom set (see #7772)
+ this._normalizeRightBottom();
+
+ this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+
+ //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
+ if ( $.ui.ddmanager ) {
+ $.ui.ddmanager.dragStart(this, event);
+ }
+
+ return true;
+ },
+
+ _refreshOffsets: function( event ) {
+ this.offset = {
+ top: this.positionAbs.top - this.margins.top,
+ left: this.positionAbs.left - this.margins.left,
+ scroll: false,
+ parent: this._getParentOffset(),
+ relative: this._getRelativeOffset()
+ };
+
+ this.offset.click = {
+ left: event.pageX - this.offset.left,
+ top: event.pageY - this.offset.top
+ };
+ },
+
+ _mouseDrag: function(event, noPropagation) {
+ // reset any necessary cached properties (see #5009)
+ if ( this.hasFixedAncestor ) {
+ this.offset.parent = this._getParentOffset();
+ }
+
+ //Compute the helpers position
+ this.position = this._generatePosition( event, true );
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ //Call plugins and callbacks and use the resulting position if something is returned
+ if (!noPropagation) {
+ var ui = this._uiHash();
+ if (this._trigger("drag", event, ui) === false) {
+ this._mouseUp({});
+ return false;
+ }
+ this.position = ui.position;
+ }
+
+ this.helper[ 0 ].style.left = this.position.left + "px";
+ this.helper[ 0 ].style.top = this.position.top + "px";
+
+ if ($.ui.ddmanager) {
+ $.ui.ddmanager.drag(this, event);
+ }
+
+ return false;
+ },
+
+ _mouseStop: function(event) {
+
+ //If we are using droppables, inform the manager about the drop
+ var that = this,
+ dropped = false;
+ if ($.ui.ddmanager && !this.options.dropBehaviour) {
+ dropped = $.ui.ddmanager.drop(this, event);
+ }
+
+ //if a drop comes from outside (a sortable)
+ if (this.dropped) {
+ dropped = this.dropped;
+ this.dropped = false;
+ }
+
+ if ((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+ $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
+ if (that._trigger("stop", event) !== false) {
+ that._clear();
+ }
+ });
+ } else {
+ if (this._trigger("stop", event) !== false) {
+ this._clear();
+ }
+ }
+
+ return false;
+ },
+
+ _mouseUp: function( event ) {
+ this._unblockFrames();
+
+ //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
+ if ( $.ui.ddmanager ) {
+ $.ui.ddmanager.dragStop(this, event);
+ }
+
+ // Only need to focus if the event occurred on the draggable itself, see #10527
+ if ( this.handleElement.is( event.target ) ) {
+ // The interaction is over; whether or not the click resulted in a drag, focus the element
+ this.element.focus();
+ }
+
+ return $.ui.mouse.prototype._mouseUp.call(this, event);
+ },
+
+ cancel: function() {
+
+ if (this.helper.is(".ui-draggable-dragging")) {
+ this._mouseUp({});
+ } else {
+ this._clear();
+ }
+
+ return this;
+
+ },
+
+ _getHandle: function(event) {
+ return this.options.handle ?
+ !!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
+ true;
+ },
+
+ _setHandleClassName: function() {
+ this.handleElement = this.options.handle ?
+ this.element.find( this.options.handle ) : this.element;
+ this.handleElement.addClass( "ui-draggable-handle" );
+ },
+
+ _removeHandleClassName: function() {
+ this.handleElement.removeClass( "ui-draggable-handle" );
+ },
+
+ _createHelper: function(event) {
+
+ var o = this.options,
+ helperIsFunction = $.isFunction( o.helper ),
+ helper = helperIsFunction ?
+ $( o.helper.apply( this.element[ 0 ], [ event ] ) ) :
+ ( o.helper === "clone" ?
+ this.element.clone().removeAttr( "id" ) :
+ this.element );
+
+ if (!helper.parents("body").length) {
+ helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
+ }
+
+ // http://bugs.jqueryui.com/ticket/9446
+ // a helper function can return the original element
+ // which wouldn't have been set to relative in _create
+ if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {
+ this._setPositionRelative();
+ }
+
+ if (helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
+ helper.css("position", "absolute");
+ }
+
+ return helper;
+
+ },
+
+ _setPositionRelative: function() {
+ if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) {
+ this.element[ 0 ].style.position = "relative";
+ }
+ },
+
+ _adjustOffsetFromHelper: function(obj) {
+ if (typeof obj === "string") {
+ obj = obj.split(" ");
+ }
+ if ($.isArray(obj)) {
+ obj = { left: +obj[0], top: +obj[1] || 0 };
+ }
+ if ("left" in obj) {
+ this.offset.click.left = obj.left + this.margins.left;
+ }
+ if ("right" in obj) {
+ this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+ }
+ if ("top" in obj) {
+ this.offset.click.top = obj.top + this.margins.top;
+ }
+ if ("bottom" in obj) {
+ this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+ }
+ },
+
+ _isRootNode: function( element ) {
+ return ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];
+ },
+
+ _getParentOffset: function() {
+
+ //Get the offsetParent and cache its position
+ var po = this.offsetParent.offset(),
+ document = this.document[ 0 ];
+
+ // This is a special case where we need to modify a offset calculated on start, since the following happened:
+ // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+ // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+ // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+ if (this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+ po.left += this.scrollParent.scrollLeft();
+ po.top += this.scrollParent.scrollTop();
+ }
+
+ if ( this._isRootNode( this.offsetParent[ 0 ] ) ) {
+ po = { top: 0, left: 0 };
+ }
+
+ return {
+ top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
+ left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
+ };
+
+ },
+
+ _getRelativeOffset: function() {
+ if ( this.cssPosition !== "relative" ) {
+ return { top: 0, left: 0 };
+ }
+
+ var p = this.element.position(),
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
+
+ return {
+ top: p.top - ( parseInt(this.helper.css( "top" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),
+ left: p.left - ( parseInt(this.helper.css( "left" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )
+ };
+
+ },
+
+ _cacheMargins: function() {
+ this.margins = {
+ left: (parseInt(this.element.css("marginLeft"), 10) || 0),
+ top: (parseInt(this.element.css("marginTop"), 10) || 0),
+ right: (parseInt(this.element.css("marginRight"), 10) || 0),
+ bottom: (parseInt(this.element.css("marginBottom"), 10) || 0)
+ };
+ },
+
+ _cacheHelperProportions: function() {
+ this.helperProportions = {
+ width: this.helper.outerWidth(),
+ height: this.helper.outerHeight()
+ };
+ },
+
+ _setContainment: function() {
+
+ var isUserScrollable, c, ce,
+ o = this.options,
+ document = this.document[ 0 ];
+
+ this.relativeContainer = null;
+
+ if ( !o.containment ) {
+ this.containment = null;
+ return;
+ }
+
+ if ( o.containment === "window" ) {
+ this.containment = [
+ $( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+ $( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+ $( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
+ $( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+ ];
+ return;
+ }
+
+ if ( o.containment === "document") {
+ this.containment = [
+ 0,
+ 0,
+ $( document ).width() - this.helperProportions.width - this.margins.left,
+ ( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+ ];
+ return;
+ }
+
+ if ( o.containment.constructor === Array ) {
+ this.containment = o.containment;
+ return;
+ }
+
+ if ( o.containment === "parent" ) {
+ o.containment = this.helper[ 0 ].parentNode;
+ }
+
+ c = $( o.containment );
+ ce = c[ 0 ];
+
+ if ( !ce ) {
+ return;
+ }
+
+ isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) );
+
+ this.containment = [
+ ( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
+ ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ),
+ ( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
+ ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) -
+ ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) -
+ this.helperProportions.width -
+ this.margins.left -
+ this.margins.right,
+ ( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
+ ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) -
+ ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) -
+ this.helperProportions.height -
+ this.margins.top -
+ this.margins.bottom
+ ];
+ this.relativeContainer = c;
+ },
+
+ _convertPositionTo: function(d, pos) {
+
+ if (!pos) {
+ pos = this.position;
+ }
+
+ var mod = d === "absolute" ? 1 : -1,
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
+
+ return {
+ top: (
+ pos.top + // The absolute mouse position
+ this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod)
+ ),
+ left: (
+ pos.left + // The absolute mouse position
+ this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod)
+ )
+ };
+
+ },
+
+ _generatePosition: function( event, constrainPosition ) {
+
+ var containment, co, top, left,
+ o = this.options,
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),
+ pageX = event.pageX,
+ pageY = event.pageY;
+
+ // Cache the scroll
+ if ( !scrollIsRootNode || !this.offset.scroll ) {
+ this.offset.scroll = {
+ top: this.scrollParent.scrollTop(),
+ left: this.scrollParent.scrollLeft()
+ };
+ }
+
+ /*
+ * - Position constraining -
+ * Constrain the position to a mix of grid, containment.
+ */
+
+ // If we are not dragging yet, we won't check for options
+ if ( constrainPosition ) {
+ if ( this.containment ) {
+ if ( this.relativeContainer ){
+ co = this.relativeContainer.offset();
+ containment = [
+ this.containment[ 0 ] + co.left,
+ this.containment[ 1 ] + co.top,
+ this.containment[ 2 ] + co.left,
+ this.containment[ 3 ] + co.top
+ ];
+ } else {
+ containment = this.containment;
+ }
+
+ if (event.pageX - this.offset.click.left < containment[0]) {
+ pageX = containment[0] + this.offset.click.left;
+ }
+ if (event.pageY - this.offset.click.top < containment[1]) {
+ pageY = containment[1] + this.offset.click.top;
+ }
+ if (event.pageX - this.offset.click.left > containment[2]) {
+ pageX = containment[2] + this.offset.click.left;
+ }
+ if (event.pageY - this.offset.click.top > containment[3]) {
+ pageY = containment[3] + this.offset.click.top;
+ }
+ }
+
+ if (o.grid) {
+ //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+ top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
+ pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+ left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
+ pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+ }
+
+ if ( o.axis === "y" ) {
+ pageX = this.originalPageX;
+ }
+
+ if ( o.axis === "x" ) {
+ pageY = this.originalPageY;
+ }
+ }
+
+ return {
+ top: (
+ pageY - // The absolute mouse position
+ this.offset.click.top - // Click offset (relative to the element)
+ this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top + // The offsetParent's offset without borders (offset + border)
+ ( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) )
+ ),
+ left: (
+ pageX - // The absolute mouse position
+ this.offset.click.left - // Click offset (relative to the element)
+ this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left + // The offsetParent's offset without borders (offset + border)
+ ( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) )
+ )
+ };
+
+ },
+
+ _clear: function() {
+ this.helper.removeClass("ui-draggable-dragging");
+ if (this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
+ this.helper.remove();
+ }
+ this.helper = null;
+ this.cancelHelperRemoval = false;
+ if ( this.destroyOnClear ) {
+ this.destroy();
+ }
+ },
+
+ _normalizeRightBottom: function() {
+ if ( this.options.axis !== "y" && this.helper.css( "right" ) !== "auto" ) {
+ this.helper.width( this.helper.width() );
+ this.helper.css( "right", "auto" );
+ }
+ if ( this.options.axis !== "x" && this.helper.css( "bottom" ) !== "auto" ) {
+ this.helper.height( this.helper.height() );
+ this.helper.css( "bottom", "auto" );
+ }
+ },
+
+ // From now on bulk stuff - mainly helpers
+
+ _trigger: function( type, event, ui ) {
+ ui = ui || this._uiHash();
+ $.ui.plugin.call( this, type, [ event, ui, this ], true );
+
+ // Absolute position and offset (see #6884 ) have to be recalculated after plugins
+ if ( /^(drag|start|stop)/.test( type ) ) {
+ this.positionAbs = this._convertPositionTo( "absolute" );
+ ui.offset = this.positionAbs;
+ }
+ return $.Widget.prototype._trigger.call( this, type, event, ui );
+ },
+
+ plugins: {},
+
+ _uiHash: function() {
+ return {
+ helper: this.helper,
+ position: this.position,
+ originalPosition: this.originalPosition,
+ offset: this.positionAbs
+ };
+ }
+
+});
+
+$.ui.plugin.add( "draggable", "connectToSortable", {
+ start: function( event, ui, draggable ) {
+ var uiSortable = $.extend( {}, ui, {
+ item: draggable.element
+ });
+
+ draggable.sortables = [];
+ $( draggable.options.connectToSortable ).each(function() {
+ var sortable = $( this ).sortable( "instance" );
+
+ if ( sortable && !sortable.options.disabled ) {
+ draggable.sortables.push( sortable );
+
+ // refreshPositions is called at drag start to refresh the containerCache
+ // which is used in drag. This ensures it's initialized and synchronized
+ // with any changes that might have happened on the page since initialization.
+ sortable.refreshPositions();
+ sortable._trigger("activate", event, uiSortable);
+ }
+ });
+ },
+ stop: function( event, ui, draggable ) {
+ var uiSortable = $.extend( {}, ui, {
+ item: draggable.element
+ });
+
+ draggable.cancelHelperRemoval = false;
+
+ $.each( draggable.sortables, function() {
+ var sortable = this;
+
+ if ( sortable.isOver ) {
+ sortable.isOver = 0;
+
+ // Allow this sortable to handle removing the helper
+ draggable.cancelHelperRemoval = true;
+ sortable.cancelHelperRemoval = false;
+
+ // Use _storedCSS To restore properties in the sortable,
+ // as this also handles revert (#9675) since the draggable
+ // may have modified them in unexpected ways (#8809)
+ sortable._storedCSS = {
+ position: sortable.placeholder.css( "position" ),
+ top: sortable.placeholder.css( "top" ),
+ left: sortable.placeholder.css( "left" )
+ };
+
+ sortable._mouseStop(event);
+
+ // Once drag has ended, the sortable should return to using
+ // its original helper, not the shared helper from draggable
+ sortable.options.helper = sortable.options._helper;
+ } else {
+ // Prevent this Sortable from removing the helper.
+ // However, don't set the draggable to remove the helper
+ // either as another connected Sortable may yet handle the removal.
+ sortable.cancelHelperRemoval = true;
+
+ sortable._trigger( "deactivate", event, uiSortable );
+ }
+ });
+ },
+ drag: function( event, ui, draggable ) {
+ $.each( draggable.sortables, function() {
+ var innermostIntersecting = false,
+ sortable = this;
+
+ // Copy over variables that sortable's _intersectsWith uses
+ sortable.positionAbs = draggable.positionAbs;
+ sortable.helperProportions = draggable.helperProportions;
+ sortable.offset.click = draggable.offset.click;
+
+ if ( sortable._intersectsWith( sortable.containerCache ) ) {
+ innermostIntersecting = true;
+
+ $.each( draggable.sortables, function() {
+ // Copy over variables that sortable's _intersectsWith uses
+ this.positionAbs = draggable.positionAbs;
+ this.helperProportions = draggable.helperProportions;
+ this.offset.click = draggable.offset.click;
+
+ if ( this !== sortable &&
+ this._intersectsWith( this.containerCache ) &&
+ $.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {
+ innermostIntersecting = false;
+ }
+
+ return innermostIntersecting;
+ });
+ }
+
+ if ( innermostIntersecting ) {
+ // If it intersects, we use a little isOver variable and set it once,
+ // so that the move-in stuff gets fired only once.
+ if ( !sortable.isOver ) {
+ sortable.isOver = 1;
+
+ // Store draggable's parent in case we need to reappend to it later.
+ draggable._parent = ui.helper.parent();
+
+ sortable.currentItem = ui.helper
+ .appendTo( sortable.element )
+ .data( "ui-sortable-item", true );
+
+ // Store helper option to later restore it
+ sortable.options._helper = sortable.options.helper;
+
+ sortable.options.helper = function() {
+ return ui.helper[ 0 ];
+ };
+
+ // Fire the start events of the sortable with our passed browser event,
+ // and our own helper (so it doesn't create a new one)
+ event.target = sortable.currentItem[ 0 ];
+ sortable._mouseCapture( event, true );
+ sortable._mouseStart( event, true, true );
+
+ // Because the browser event is way off the new appended portlet,
+ // modify necessary variables to reflect the changes
+ sortable.offset.click.top = draggable.offset.click.top;
+ sortable.offset.click.left = draggable.offset.click.left;
+ sortable.offset.parent.left -= draggable.offset.parent.left -
+ sortable.offset.parent.left;
+ sortable.offset.parent.top -= draggable.offset.parent.top -
+ sortable.offset.parent.top;
+
+ draggable._trigger( "toSortable", event );
+
+ // Inform draggable that the helper is in a valid drop zone,
+ // used solely in the revert option to handle "valid/invalid".
+ draggable.dropped = sortable.element;
+
+ // Need to refreshPositions of all sortables in the case that
+ // adding to one sortable changes the location of the other sortables (#9675)
+ $.each( draggable.sortables, function() {
+ this.refreshPositions();
+ });
+
+ // hack so receive/update callbacks work (mostly)
+ draggable.currentItem = draggable.element;
+ sortable.fromOutside = draggable;
+ }
+
+ if ( sortable.currentItem ) {
+ sortable._mouseDrag( event );
+ // Copy the sortable's position because the draggable's can potentially reflect
+ // a relative position, while sortable is always absolute, which the dragged
+ // element has now become. (#8809)
+ ui.position = sortable.position;
+ }
+ } else {
+ // If it doesn't intersect with the sortable, and it intersected before,
+ // we fake the drag stop of the sortable, but make sure it doesn't remove
+ // the helper by using cancelHelperRemoval.
+ if ( sortable.isOver ) {
+
+ sortable.isOver = 0;
+ sortable.cancelHelperRemoval = true;
+
+ // Calling sortable's mouseStop would trigger a revert,
+ // so revert must be temporarily false until after mouseStop is called.
+ sortable.options._revert = sortable.options.revert;
+ sortable.options.revert = false;
+
+ sortable._trigger( "out", event, sortable._uiHash( sortable ) );
+ sortable._mouseStop( event, true );
+
+ // restore sortable behaviors that were modfied
+ // when the draggable entered the sortable area (#9481)
+ sortable.options.revert = sortable.options._revert;
+ sortable.options.helper = sortable.options._helper;
+
+ if ( sortable.placeholder ) {
+ sortable.placeholder.remove();
+ }
+
+ // Restore and recalculate the draggable's offset considering the sortable
+ // may have modified them in unexpected ways. (#8809, #10669)
+ ui.helper.appendTo( draggable._parent );
+ draggable._refreshOffsets( event );
+ ui.position = draggable._generatePosition( event, true );
+
+ draggable._trigger( "fromSortable", event );
+
+ // Inform draggable that the helper is no longer in a valid drop zone
+ draggable.dropped = false;
+
+ // Need to refreshPositions of all sortables just in case removing
+ // from one sortable changes the location of other sortables (#9675)
+ $.each( draggable.sortables, function() {
+ this.refreshPositions();
+ });
+ }
+ }
+ });
+ }
+});
+
+$.ui.plugin.add("draggable", "cursor", {
+ start: function( event, ui, instance ) {
+ var t = $( "body" ),
+ o = instance.options;
+
+ if (t.css("cursor")) {
+ o._cursor = t.css("cursor");
+ }
+ t.css("cursor", o.cursor);
+ },
+ stop: function( event, ui, instance ) {
+ var o = instance.options;
+ if (o._cursor) {
+ $("body").css("cursor", o._cursor);
+ }
+ }
+});
+
+$.ui.plugin.add("draggable", "opacity", {
+ start: function( event, ui, instance ) {
+ var t = $( ui.helper ),
+ o = instance.options;
+ if (t.css("opacity")) {
+ o._opacity = t.css("opacity");
+ }
+ t.css("opacity", o.opacity);
+ },
+ stop: function( event, ui, instance ) {
+ var o = instance.options;
+ if (o._opacity) {
+ $(ui.helper).css("opacity", o._opacity);
+ }
+ }
+});
+
+$.ui.plugin.add("draggable", "scroll", {
+ start: function( event, ui, i ) {
+ if ( !i.scrollParentNotHidden ) {
+ i.scrollParentNotHidden = i.helper.scrollParent( false );
+ }
+
+ if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] && i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) {
+ i.overflowOffset = i.scrollParentNotHidden.offset();
+ }
+ },
+ drag: function( event, ui, i ) {
+
+ var o = i.options,
+ scrolled = false,
+ scrollParent = i.scrollParentNotHidden[ 0 ],
+ document = i.document[ 0 ];
+
+ if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) {
+ if ( !o.axis || o.axis !== "x" ) {
+ if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY < o.scrollSensitivity ) {
+ scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;
+ } else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {
+ scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;
+ }
+ }
+
+ if ( !o.axis || o.axis !== "y" ) {
+ if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX < o.scrollSensitivity ) {
+ scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;
+ } else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {
+ scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;
+ }
+ }
+
+ } else {
+
+ if (!o.axis || o.axis !== "x") {
+ if (event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+ scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+ } else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+ scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+ }
+ }
+
+ if (!o.axis || o.axis !== "y") {
+ if (event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+ scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+ } else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+ scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+ }
+ }
+
+ }
+
+ if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(i, event);
+ }
+
+ }
+});
+
+$.ui.plugin.add("draggable", "snap", {
+ start: function( event, ui, i ) {
+
+ var o = i.options;
+
+ i.snapElements = [];
+
+ $(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
+ var $t = $(this),
+ $o = $t.offset();
+ if (this !== i.element[0]) {
+ i.snapElements.push({
+ item: this,
+ width: $t.outerWidth(), height: $t.outerHeight(),
+ top: $o.top, left: $o.left
+ });
+ }
+ });
+
+ },
+ drag: function( event, ui, inst ) {
+
+ var ts, bs, ls, rs, l, r, t, b, i, first,
+ o = inst.options,
+ d = o.snapTolerance,
+ x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+ y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+
+ for (i = inst.snapElements.length - 1; i >= 0; i--){
+
+ l = inst.snapElements[i].left - inst.margins.left;
+ r = l + inst.snapElements[i].width;
+ t = inst.snapElements[i].top - inst.margins.top;
+ b = t + inst.snapElements[i].height;
+
+ if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
+ if (inst.snapElements[i].snapping) {
+ (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+ }
+ inst.snapElements[i].snapping = false;
+ continue;
+ }
+
+ if (o.snapMode !== "inner") {
+ ts = Math.abs(t - y2) <= d;
+ bs = Math.abs(b - y1) <= d;
+ ls = Math.abs(l - x2) <= d;
+ rs = Math.abs(r - x1) <= d;
+ if (ts) {
+ ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top;
+ }
+ if (bs) {
+ ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top;
+ }
+ if (ls) {
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left;
+ }
+ if (rs) {
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left;
+ }
+ }
+
+ first = (ts || bs || ls || rs);
+
+ if (o.snapMode !== "outer") {
+ ts = Math.abs(t - y1) <= d;
+ bs = Math.abs(b - y2) <= d;
+ ls = Math.abs(l - x1) <= d;
+ rs = Math.abs(r - x2) <= d;
+ if (ts) {
+ ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top;
+ }
+ if (bs) {
+ ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top;
+ }
+ if (ls) {
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left;
+ }
+ if (rs) {
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left;
+ }
+ }
+
+ if (!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
+ (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+ }
+ inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+
+ }
+
+ }
+});
+
+$.ui.plugin.add("draggable", "stack", {
+ start: function( event, ui, instance ) {
+ var min,
+ o = instance.options,
+ group = $.makeArray($(o.stack)).sort(function(a, b) {
+ return (parseInt($(a).css("zIndex"), 10) || 0) - (parseInt($(b).css("zIndex"), 10) || 0);
+ });
+
+ if (!group.length) { return; }
+
+ min = parseInt($(group[0]).css("zIndex"), 10) || 0;
+ $(group).each(function(i) {
+ $(this).css("zIndex", min + i);
+ });
+ this.css("zIndex", (min + group.length));
+ }
+});
+
+$.ui.plugin.add("draggable", "zIndex", {
+ start: function( event, ui, instance ) {
+ var t = $( ui.helper ),
+ o = instance.options;
+
+ if (t.css("zIndex")) {
+ o._zIndex = t.css("zIndex");
+ }
+ t.css("zIndex", o.zIndex);
+ },
+ stop: function( event, ui, instance ) {
+ var o = instance.options;
+
+ if (o._zIndex) {
+ $(ui.helper).css("zIndex", o._zIndex);
+ }
+ }
+});
+
+var draggable = $.ui.draggable;
+
+
+/*!
+ * jQuery UI Resizable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/resizable/
+ */
+
+
+$.widget("ui.resizable", $.ui.mouse, {
+ version: "1.11.4",
+ widgetEventPrefix: "resize",
+ options: {
+ alsoResize: false,
+ animate: false,
+ animateDuration: "slow",
+ animateEasing: "swing",
+ aspectRatio: false,
+ autoHide: false,
+ containment: false,
+ ghost: false,
+ grid: false,
+ handles: "e,s,se",
+ helper: false,
+ maxHeight: null,
+ maxWidth: null,
+ minHeight: 10,
+ minWidth: 10,
+ // See #7960
+ zIndex: 90,
+
+ // callbacks
+ resize: null,
+ start: null,
+ stop: null
+ },
+
+ _num: function( value ) {
+ return parseInt( value, 10 ) || 0;
+ },
+
+ _isNumber: function( value ) {
+ return !isNaN( parseInt( value, 10 ) );
+ },
+
+ _hasScroll: function( el, a ) {
+
+ if ( $( el ).css( "overflow" ) === "hidden") {
+ return false;
+ }
+
+ var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+ has = false;
+
+ if ( el[ scroll ] > 0 ) {
+ return true;
+ }
+
+ // TODO: determine which cases actually cause this to happen
+ // if the element doesn't have the scroll set, see if it's possible to
+ // set the scroll
+ el[ scroll ] = 1;
+ has = ( el[ scroll ] > 0 );
+ el[ scroll ] = 0;
+ return has;
+ },
+
+ _create: function() {
+
+ var n, i, handle, axis, hname,
+ that = this,
+ o = this.options;
+ this.element.addClass("ui-resizable");
+
+ $.extend(this, {
+ _aspectRatio: !!(o.aspectRatio),
+ aspectRatio: o.aspectRatio,
+ originalElement: this.element,
+ _proportionallyResizeElements: [],
+ _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
+ });
+
+ // Wrap the element if it cannot hold child nodes
+ if (this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)) {
+
+ this.element.wrap(
+ $("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
+ position: this.element.css("position"),
+ width: this.element.outerWidth(),
+ height: this.element.outerHeight(),
+ top: this.element.css("top"),
+ left: this.element.css("left")
+ })
+ );
+
+ this.element = this.element.parent().data(
+ "ui-resizable", this.element.resizable( "instance" )
+ );
+
+ this.elementIsWrapper = true;
+
+ this.element.css({
+ marginLeft: this.originalElement.css("marginLeft"),
+ marginTop: this.originalElement.css("marginTop"),
+ marginRight: this.originalElement.css("marginRight"),
+ marginBottom: this.originalElement.css("marginBottom")
+ });
+ this.originalElement.css({
+ marginLeft: 0,
+ marginTop: 0,
+ marginRight: 0,
+ marginBottom: 0
+ });
+ // support: Safari
+ // Prevent Safari textarea resize
+ this.originalResizeStyle = this.originalElement.css("resize");
+ this.originalElement.css("resize", "none");
+
+ this._proportionallyResizeElements.push( this.originalElement.css({
+ position: "static",
+ zoom: 1,
+ display: "block"
+ }) );
+
+ // support: IE9
+ // avoid IE jump (hard set the margin)
+ this.originalElement.css({ margin: this.originalElement.css("margin") });
+
+ this._proportionallyResize();
+ }
+
+ this.handles = o.handles ||
+ ( !$(".ui-resizable-handle", this.element).length ?
+ "e,s,se" : {
+ n: ".ui-resizable-n",
+ e: ".ui-resizable-e",
+ s: ".ui-resizable-s",
+ w: ".ui-resizable-w",
+ se: ".ui-resizable-se",
+ sw: ".ui-resizable-sw",
+ ne: ".ui-resizable-ne",
+ nw: ".ui-resizable-nw"
+ } );
+
+ this._handles = $();
+ if ( this.handles.constructor === String ) {
+
+ if ( this.handles === "all") {
+ this.handles = "n,e,s,w,se,sw,ne,nw";
+ }
+
+ n = this.handles.split(",");
+ this.handles = {};
+
+ for (i = 0; i < n.length; i++) {
+
+ handle = $.trim(n[i]);
+ hname = "ui-resizable-" + handle;
+ axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
+
+ axis.css({ zIndex: o.zIndex });
+
+ // TODO : What's going on here?
+ if ("se" === handle) {
+ axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
+ }
+
+ this.handles[handle] = ".ui-resizable-" + handle;
+ this.element.append(axis);
+ }
+
+ }
+
+ this._renderAxis = function(target) {
+
+ var i, axis, padPos, padWrapper;
+
+ target = target || this.element;
+
+ for (i in this.handles) {
+
+ if (this.handles[i].constructor === String) {
+ this.handles[i] = this.element.children( this.handles[ i ] ).first().show();
+ } else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {
+ this.handles[ i ] = $( this.handles[ i ] );
+ this._on( this.handles[ i ], { "mousedown": that._mouseDown });
+ }
+
+ if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)) {
+
+ axis = $(this.handles[i], this.element);
+
+ padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+
+ padPos = [ "padding",
+ /ne|nw|n/.test(i) ? "Top" :
+ /se|sw|s/.test(i) ? "Bottom" :
+ /^e$/.test(i) ? "Right" : "Left" ].join("");
+
+ target.css(padPos, padWrapper);
+
+ this._proportionallyResize();
+ }
+
+ this._handles = this._handles.add( this.handles[ i ] );
+ }
+ };
+
+ // TODO: make renderAxis a prototype function
+ this._renderAxis(this.element);
+
+ this._handles = this._handles.add( this.element.find( ".ui-resizable-handle" ) );
+ this._handles.disableSelection();
+
+ this._handles.mouseover(function() {
+ if (!that.resizing) {
+ if (this.className) {
+ axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+ }
+ that.axis = axis && axis[1] ? axis[1] : "se";
+ }
+ });
+
+ if (o.autoHide) {
+ this._handles.hide();
+ $(this.element)
+ .addClass("ui-resizable-autohide")
+ .mouseenter(function() {
+ if (o.disabled) {
+ return;
+ }
+ $(this).removeClass("ui-resizable-autohide");
+ that._handles.show();
+ })
+ .mouseleave(function() {
+ if (o.disabled) {
+ return;
+ }
+ if (!that.resizing) {
+ $(this).addClass("ui-resizable-autohide");
+ that._handles.hide();
+ }
+ });
+ }
+
+ this._mouseInit();
+ },
+
+ _destroy: function() {
+
+ this._mouseDestroy();
+
+ var wrapper,
+ _destroy = function(exp) {
+ $(exp)
+ .removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+ .removeData("resizable")
+ .removeData("ui-resizable")
+ .unbind(".resizable")
+ .find(".ui-resizable-handle")
+ .remove();
+ };
+
+ // TODO: Unwrap at same DOM position
+ if (this.elementIsWrapper) {
+ _destroy(this.element);
+ wrapper = this.element;
+ this.originalElement.css({
+ position: wrapper.css("position"),
+ width: wrapper.outerWidth(),
+ height: wrapper.outerHeight(),
+ top: wrapper.css("top"),
+ left: wrapper.css("left")
+ }).insertAfter( wrapper );
+ wrapper.remove();
+ }
+
+ this.originalElement.css("resize", this.originalResizeStyle);
+ _destroy(this.originalElement);
+
+ return this;
+ },
+
+ _mouseCapture: function(event) {
+ var i, handle,
+ capture = false;
+
+ for (i in this.handles) {
+ handle = $(this.handles[i])[0];
+ if (handle === event.target || $.contains(handle, event.target)) {
+ capture = true;
+ }
+ }
+
+ return !this.options.disabled && capture;
+ },
+
+ _mouseStart: function(event) {
+
+ var curleft, curtop, cursor,
+ o = this.options,
+ el = this.element;
+
+ this.resizing = true;
+
+ this._renderProxy();
+
+ curleft = this._num(this.helper.css("left"));
+ curtop = this._num(this.helper.css("top"));
+
+ if (o.containment) {
+ curleft += $(o.containment).scrollLeft() || 0;
+ curtop += $(o.containment).scrollTop() || 0;
+ }
+
+ this.offset = this.helper.offset();
+ this.position = { left: curleft, top: curtop };
+
+ this.size = this._helper ? {
+ width: this.helper.width(),
+ height: this.helper.height()
+ } : {
+ width: el.width(),
+ height: el.height()
+ };
+
+ this.originalSize = this._helper ? {
+ width: el.outerWidth(),
+ height: el.outerHeight()
+ } : {
+ width: el.width(),
+ height: el.height()
+ };
+
+ this.sizeDiff = {
+ width: el.outerWidth() - el.width(),
+ height: el.outerHeight() - el.height()
+ };
+
+ this.originalPosition = { left: curleft, top: curtop };
+ this.originalMousePosition = { left: event.pageX, top: event.pageY };
+
+ this.aspectRatio = (typeof o.aspectRatio === "number") ?
+ o.aspectRatio :
+ ((this.originalSize.width / this.originalSize.height) || 1);
+
+ cursor = $(".ui-resizable-" + this.axis).css("cursor");
+ $("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
+
+ el.addClass("ui-resizable-resizing");
+ this._propagate("start", event);
+ return true;
+ },
+
+ _mouseDrag: function(event) {
+
+ var data, props,
+ smp = this.originalMousePosition,
+ a = this.axis,
+ dx = (event.pageX - smp.left) || 0,
+ dy = (event.pageY - smp.top) || 0,
+ trigger = this._change[a];
+
+ this._updatePrevProperties();
+
+ if (!trigger) {
+ return false;
+ }
+
+ data = trigger.apply(this, [ event, dx, dy ]);
+
+ this._updateVirtualBoundaries(event.shiftKey);
+ if (this._aspectRatio || event.shiftKey) {
+ data = this._updateRatio(data, event);
+ }
+
+ data = this._respectSize(data, event);
+
+ this._updateCache(data);
+
+ this._propagate("resize", event);
+
+ props = this._applyChanges();
+
+ if ( !this._helper && this._proportionallyResizeElements.length ) {
+ this._proportionallyResize();
+ }
+
+ if ( !$.isEmptyObject( props ) ) {
+ this._updatePrevProperties();
+ this._trigger( "resize", event, this.ui() );
+ this._applyChanges();
+ }
+
+ return false;
+ },
+
+ _mouseStop: function(event) {
+
+ this.resizing = false;
+ var pr, ista, soffseth, soffsetw, s, left, top,
+ o = this.options, that = this;
+
+ if (this._helper) {
+
+ pr = this._proportionallyResizeElements;
+ ista = pr.length && (/textarea/i).test(pr[0].nodeName);
+ soffseth = ista && this._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height;
+ soffsetw = ista ? 0 : that.sizeDiff.width;
+
+ s = {
+ width: (that.helper.width() - soffsetw),
+ height: (that.helper.height() - soffseth)
+ };
+ left = (parseInt(that.element.css("left"), 10) +
+ (that.position.left - that.originalPosition.left)) || null;
+ top = (parseInt(that.element.css("top"), 10) +
+ (that.position.top - that.originalPosition.top)) || null;
+
+ if (!o.animate) {
+ this.element.css($.extend(s, { top: top, left: left }));
+ }
+
+ that.helper.height(that.size.height);
+ that.helper.width(that.size.width);
+
+ if (this._helper && !o.animate) {
+ this._proportionallyResize();
+ }
+ }
+
+ $("body").css("cursor", "auto");
+
+ this.element.removeClass("ui-resizable-resizing");
+
+ this._propagate("stop", event);
+
+ if (this._helper) {
+ this.helper.remove();
+ }
+
+ return false;
+
+ },
+
+ _updatePrevProperties: function() {
+ this.prevPosition = {
+ top: this.position.top,
+ left: this.position.left
+ };
+ this.prevSize = {
+ width: this.size.width,
+ height: this.size.height
+ };
+ },
+
+ _applyChanges: function() {
+ var props = {};
+
+ if ( this.position.top !== this.prevPosition.top ) {
+ props.top = this.position.top + "px";
+ }
+ if ( this.position.left !== this.prevPosition.left ) {
+ props.left = this.position.left + "px";
+ }
+ if ( this.size.width !== this.prevSize.width ) {
+ props.width = this.size.width + "px";
+ }
+ if ( this.size.height !== this.prevSize.height ) {
+ props.height = this.size.height + "px";
+ }
+
+ this.helper.css( props );
+
+ return props;
+ },
+
+ _updateVirtualBoundaries: function(forceAspectRatio) {
+ var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
+ o = this.options;
+
+ b = {
+ minWidth: this._isNumber(o.minWidth) ? o.minWidth : 0,
+ maxWidth: this._isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+ minHeight: this._isNumber(o.minHeight) ? o.minHeight : 0,
+ maxHeight: this._isNumber(o.maxHeight) ? o.maxHeight : Infinity
+ };
+
+ if (this._aspectRatio || forceAspectRatio) {
+ pMinWidth = b.minHeight * this.aspectRatio;
+ pMinHeight = b.minWidth / this.aspectRatio;
+ pMaxWidth = b.maxHeight * this.aspectRatio;
+ pMaxHeight = b.maxWidth / this.aspectRatio;
+
+ if (pMinWidth > b.minWidth) {
+ b.minWidth = pMinWidth;
+ }
+ if (pMinHeight > b.minHeight) {
+ b.minHeight = pMinHeight;
+ }
+ if (pMaxWidth < b.maxWidth) {
+ b.maxWidth = pMaxWidth;
+ }
+ if (pMaxHeight < b.maxHeight) {
+ b.maxHeight = pMaxHeight;
+ }
+ }
+ this._vBoundaries = b;
+ },
+
+ _updateCache: function(data) {
+ this.offset = this.helper.offset();
+ if (this._isNumber(data.left)) {
+ this.position.left = data.left;
+ }
+ if (this._isNumber(data.top)) {
+ this.position.top = data.top;
+ }
+ if (this._isNumber(data.height)) {
+ this.size.height = data.height;
+ }
+ if (this._isNumber(data.width)) {
+ this.size.width = data.width;
+ }
+ },
+
+ _updateRatio: function( data ) {
+
+ var cpos = this.position,
+ csize = this.size,
+ a = this.axis;
+
+ if (this._isNumber(data.height)) {
+ data.width = (data.height * this.aspectRatio);
+ } else if (this._isNumber(data.width)) {
+ data.height = (data.width / this.aspectRatio);
+ }
+
+ if (a === "sw") {
+ data.left = cpos.left + (csize.width - data.width);
+ data.top = null;
+ }
+ if (a === "nw") {
+ data.top = cpos.top + (csize.height - data.height);
+ data.left = cpos.left + (csize.width - data.width);
+ }
+
+ return data;
+ },
+
+ _respectSize: function( data ) {
+
+ var o = this._vBoundaries,
+ a = this.axis,
+ ismaxw = this._isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width),
+ ismaxh = this._isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+ isminw = this._isNumber(data.width) && o.minWidth && (o.minWidth > data.width),
+ isminh = this._isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
+ dw = this.originalPosition.left + this.originalSize.width,
+ dh = this.position.top + this.size.height,
+ cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+ if (isminw) {
+ data.width = o.minWidth;
+ }
+ if (isminh) {
+ data.height = o.minHeight;
+ }
+ if (ismaxw) {
+ data.width = o.maxWidth;
+ }
+ if (ismaxh) {
+ data.height = o.maxHeight;
+ }
+
+ if (isminw && cw) {
+ data.left = dw - o.minWidth;
+ }
+ if (ismaxw && cw) {
+ data.left = dw - o.maxWidth;
+ }
+ if (isminh && ch) {
+ data.top = dh - o.minHeight;
+ }
+ if (ismaxh && ch) {
+ data.top = dh - o.maxHeight;
+ }
+
+ // Fixing jump error on top/left - bug #2330
+ if (!data.width && !data.height && !data.left && data.top) {
+ data.top = null;
+ } else if (!data.width && !data.height && !data.top && data.left) {
+ data.left = null;
+ }
+
+ return data;
+ },
+
+ _getPaddingPlusBorderDimensions: function( element ) {
+ var i = 0,
+ widths = [],
+ borders = [
+ element.css( "borderTopWidth" ),
+ element.css( "borderRightWidth" ),
+ element.css( "borderBottomWidth" ),
+ element.css( "borderLeftWidth" )
+ ],
+ paddings = [
+ element.css( "paddingTop" ),
+ element.css( "paddingRight" ),
+ element.css( "paddingBottom" ),
+ element.css( "paddingLeft" )
+ ];
+
+ for ( ; i < 4; i++ ) {
+ widths[ i ] = ( parseInt( borders[ i ], 10 ) || 0 );
+ widths[ i ] += ( parseInt( paddings[ i ], 10 ) || 0 );
+ }
+
+ return {
+ height: widths[ 0 ] + widths[ 2 ],
+ width: widths[ 1 ] + widths[ 3 ]
+ };
+ },
+
+ _proportionallyResize: function() {
+
+ if (!this._proportionallyResizeElements.length) {
+ return;
+ }
+
+ var prel,
+ i = 0,
+ element = this.helper || this.element;
+
+ for ( ; i < this._proportionallyResizeElements.length; i++) {
+
+ prel = this._proportionallyResizeElements[i];
+
+ // TODO: Seems like a bug to cache this.outerDimensions
+ // considering that we are in a loop.
+ if (!this.outerDimensions) {
+ this.outerDimensions = this._getPaddingPlusBorderDimensions( prel );
+ }
+
+ prel.css({
+ height: (element.height() - this.outerDimensions.height) || 0,
+ width: (element.width() - this.outerDimensions.width) || 0
+ });
+
+ }
+
+ },
+
+ _renderProxy: function() {
+
+ var el = this.element, o = this.options;
+ this.elementOffset = el.offset();
+
+ if (this._helper) {
+
+ this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
+
+ this.helper.addClass(this._helper).css({
+ width: this.element.outerWidth() - 1,
+ height: this.element.outerHeight() - 1,
+ position: "absolute",
+ left: this.elementOffset.left + "px",
+ top: this.elementOffset.top + "px",
+ zIndex: ++o.zIndex //TODO: Don't modify option
+ });
+
+ this.helper
+ .appendTo("body")
+ .disableSelection();
+
+ } else {
+ this.helper = this.element;
+ }
+
+ },
+
+ _change: {
+ e: function(event, dx) {
+ return { width: this.originalSize.width + dx };
+ },
+ w: function(event, dx) {
+ var cs = this.originalSize, sp = this.originalPosition;
+ return { left: sp.left + dx, width: cs.width - dx };
+ },
+ n: function(event, dx, dy) {
+ var cs = this.originalSize, sp = this.originalPosition;
+ return { top: sp.top + dy, height: cs.height - dy };
+ },
+ s: function(event, dx, dy) {
+ return { height: this.originalSize.height + dy };
+ },
+ se: function(event, dx, dy) {
+ return $.extend(this._change.s.apply(this, arguments),
+ this._change.e.apply(this, [ event, dx, dy ]));
+ },
+ sw: function(event, dx, dy) {
+ return $.extend(this._change.s.apply(this, arguments),
+ this._change.w.apply(this, [ event, dx, dy ]));
+ },
+ ne: function(event, dx, dy) {
+ return $.extend(this._change.n.apply(this, arguments),
+ this._change.e.apply(this, [ event, dx, dy ]));
+ },
+ nw: function(event, dx, dy) {
+ return $.extend(this._change.n.apply(this, arguments),
+ this._change.w.apply(this, [ event, dx, dy ]));
+ }
+ },
+
+ _propagate: function(n, event) {
+ $.ui.plugin.call(this, n, [ event, this.ui() ]);
+ (n !== "resize" && this._trigger(n, event, this.ui()));
+ },
+
+ plugins: {},
+
+ ui: function() {
+ return {
+ originalElement: this.originalElement,
+ element: this.element,
+ helper: this.helper,
+ position: this.position,
+ size: this.size,
+ originalSize: this.originalSize,
+ originalPosition: this.originalPosition
+ };
+ }
+
+});
+
+/*
+ * Resizable Extensions
+ */
+
+$.ui.plugin.add("resizable", "animate", {
+
+ stop: function( event ) {
+ var that = $(this).resizable( "instance" ),
+ o = that.options,
+ pr = that._proportionallyResizeElements,
+ ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+ soffseth = ista && that._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height,
+ soffsetw = ista ? 0 : that.sizeDiff.width,
+ style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
+ left = (parseInt(that.element.css("left"), 10) +
+ (that.position.left - that.originalPosition.left)) || null,
+ top = (parseInt(that.element.css("top"), 10) +
+ (that.position.top - that.originalPosition.top)) || null;
+
+ that.element.animate(
+ $.extend(style, top && left ? { top: top, left: left } : {}), {
+ duration: o.animateDuration,
+ easing: o.animateEasing,
+ step: function() {
+
+ var data = {
+ width: parseInt(that.element.css("width"), 10),
+ height: parseInt(that.element.css("height"), 10),
+ top: parseInt(that.element.css("top"), 10),
+ left: parseInt(that.element.css("left"), 10)
+ };
+
+ if (pr && pr.length) {
+ $(pr[0]).css({ width: data.width, height: data.height });
+ }
+
+ // propagating resize, and updating values for each animation step
+ that._updateCache(data);
+ that._propagate("resize", event);
+
+ }
+ }
+ );
+ }
+
+});
+
+$.ui.plugin.add( "resizable", "containment", {
+
+ start: function() {
+ var element, p, co, ch, cw, width, height,
+ that = $( this ).resizable( "instance" ),
+ o = that.options,
+ el = that.element,
+ oc = o.containment,
+ ce = ( oc instanceof $ ) ? oc.get( 0 ) : ( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;
+
+ if ( !ce ) {
+ return;
+ }
+
+ that.containerElement = $( ce );
+
+ if ( /document/.test( oc ) || oc === document ) {
+ that.containerOffset = {
+ left: 0,
+ top: 0
+ };
+ that.containerPosition = {
+ left: 0,
+ top: 0
+ };
+
+ that.parentData = {
+ element: $( document ),
+ left: 0,
+ top: 0,
+ width: $( document ).width(),
+ height: $( document ).height() || document.body.parentNode.scrollHeight
+ };
+ } else {
+ element = $( ce );
+ p = [];
+ $([ "Top", "Right", "Left", "Bottom" ]).each(function( i, name ) {
+ p[ i ] = that._num( element.css( "padding" + name ) );
+ });
+
+ that.containerOffset = element.offset();
+ that.containerPosition = element.position();
+ that.containerSize = {
+ height: ( element.innerHeight() - p[ 3 ] ),
+ width: ( element.innerWidth() - p[ 1 ] )
+ };
+
+ co = that.containerOffset;
+ ch = that.containerSize.height;
+ cw = that.containerSize.width;
+ width = ( that._hasScroll ( ce, "left" ) ? ce.scrollWidth : cw );
+ height = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;
+
+ that.parentData = {
+ element: ce,
+ left: co.left,
+ top: co.top,
+ width: width,
+ height: height
+ };
+ }
+ },
+
+ resize: function( event ) {
+ var woset, hoset, isParent, isOffsetRelative,
+ that = $( this ).resizable( "instance" ),
+ o = that.options,
+ co = that.containerOffset,
+ cp = that.position,
+ pRatio = that._aspectRatio || event.shiftKey,
+ cop = {
+ top: 0,
+ left: 0
+ },
+ ce = that.containerElement,
+ continueResize = true;
+
+ if ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( "position" ) ) ) {
+ cop = co;
+ }
+
+ if ( cp.left < ( that._helper ? co.left : 0 ) ) {
+ that.size.width = that.size.width +
+ ( that._helper ?
+ ( that.position.left - co.left ) :
+ ( that.position.left - cop.left ) );
+
+ if ( pRatio ) {
+ that.size.height = that.size.width / that.aspectRatio;
+ continueResize = false;
+ }
+ that.position.left = o.helper ? co.left : 0;
+ }
+
+ if ( cp.top < ( that._helper ? co.top : 0 ) ) {
+ that.size.height = that.size.height +
+ ( that._helper ?
+ ( that.position.top - co.top ) :
+ that.position.top );
+
+ if ( pRatio ) {
+ that.size.width = that.size.height * that.aspectRatio;
+ continueResize = false;
+ }
+ that.position.top = that._helper ? co.top : 0;
+ }
+
+ isParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );
+ isOffsetRelative = /relative|absolute/.test( that.containerElement.css( "position" ) );
+
+ if ( isParent && isOffsetRelative ) {
+ that.offset.left = that.parentData.left + that.position.left;
+ that.offset.top = that.parentData.top + that.position.top;
+ } else {
+ that.offset.left = that.element.offset().left;
+ that.offset.top = that.element.offset().top;
+ }
+
+ woset = Math.abs( that.sizeDiff.width +
+ (that._helper ?
+ that.offset.left - cop.left :
+ (that.offset.left - co.left)) );
+
+ hoset = Math.abs( that.sizeDiff.height +
+ (that._helper ?
+ that.offset.top - cop.top :
+ (that.offset.top - co.top)) );
+
+ if ( woset + that.size.width >= that.parentData.width ) {
+ that.size.width = that.parentData.width - woset;
+ if ( pRatio ) {
+ that.size.height = that.size.width / that.aspectRatio;
+ continueResize = false;
+ }
+ }
+
+ if ( hoset + that.size.height >= that.parentData.height ) {
+ that.size.height = that.parentData.height - hoset;
+ if ( pRatio ) {
+ that.size.width = that.size.height * that.aspectRatio;
+ continueResize = false;
+ }
+ }
+
+ if ( !continueResize ) {
+ that.position.left = that.prevPosition.left;
+ that.position.top = that.prevPosition.top;
+ that.size.width = that.prevSize.width;
+ that.size.height = that.prevSize.height;
+ }
+ },
+
+ stop: function() {
+ var that = $( this ).resizable( "instance" ),
+ o = that.options,
+ co = that.containerOffset,
+ cop = that.containerPosition,
+ ce = that.containerElement,
+ helper = $( that.helper ),
+ ho = helper.offset(),
+ w = helper.outerWidth() - that.sizeDiff.width,
+ h = helper.outerHeight() - that.sizeDiff.height;
+
+ if ( that._helper && !o.animate && ( /relative/ ).test( ce.css( "position" ) ) ) {
+ $( this ).css({
+ left: ho.left - cop.left - co.left,
+ width: w,
+ height: h
+ });
+ }
+
+ if ( that._helper && !o.animate && ( /static/ ).test( ce.css( "position" ) ) ) {
+ $( this ).css({
+ left: ho.left - cop.left - co.left,
+ width: w,
+ height: h
+ });
+ }
+ }
+});
+
+$.ui.plugin.add("resizable", "alsoResize", {
+
+ start: function() {
+ var that = $(this).resizable( "instance" ),
+ o = that.options;
+
+ $(o.alsoResize).each(function() {
+ var el = $(this);
+ el.data("ui-resizable-alsoresize", {
+ width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+ left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
+ });
+ });
+ },
+
+ resize: function(event, ui) {
+ var that = $(this).resizable( "instance" ),
+ o = that.options,
+ os = that.originalSize,
+ op = that.originalPosition,
+ delta = {
+ height: (that.size.height - os.height) || 0,
+ width: (that.size.width - os.width) || 0,
+ top: (that.position.top - op.top) || 0,
+ left: (that.position.left - op.left) || 0
+ };
+
+ $(o.alsoResize).each(function() {
+ var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
+ css = el.parents(ui.originalElement[0]).length ?
+ [ "width", "height" ] :
+ [ "width", "height", "top", "left" ];
+
+ $.each(css, function(i, prop) {
+ var sum = (start[prop] || 0) + (delta[prop] || 0);
+ if (sum && sum >= 0) {
+ style[prop] = sum || null;
+ }
+ });
+
+ el.css(style);
+ });
+ },
+
+ stop: function() {
+ $(this).removeData("resizable-alsoresize");
+ }
+});
+
+$.ui.plugin.add("resizable", "ghost", {
+
+ start: function() {
+
+ var that = $(this).resizable( "instance" ), o = that.options, cs = that.size;
+
+ that.ghost = that.originalElement.clone();
+ that.ghost
+ .css({
+ opacity: 0.25,
+ display: "block",
+ position: "relative",
+ height: cs.height,
+ width: cs.width,
+ margin: 0,
+ left: 0,
+ top: 0
+ })
+ .addClass("ui-resizable-ghost")
+ .addClass(typeof o.ghost === "string" ? o.ghost : "");
+
+ that.ghost.appendTo(that.helper);
+
+ },
+
+ resize: function() {
+ var that = $(this).resizable( "instance" );
+ if (that.ghost) {
+ that.ghost.css({
+ position: "relative",
+ height: that.size.height,
+ width: that.size.width
+ });
+ }
+ },
+
+ stop: function() {
+ var that = $(this).resizable( "instance" );
+ if (that.ghost && that.helper) {
+ that.helper.get(0).removeChild(that.ghost.get(0));
+ }
+ }
+
+});
+
+$.ui.plugin.add("resizable", "grid", {
+
+ resize: function() {
+ var outerDimensions,
+ that = $(this).resizable( "instance" ),
+ o = that.options,
+ cs = that.size,
+ os = that.originalSize,
+ op = that.originalPosition,
+ a = that.axis,
+ grid = typeof o.grid === "number" ? [ o.grid, o.grid ] : o.grid,
+ gridX = (grid[0] || 1),
+ gridY = (grid[1] || 1),
+ ox = Math.round((cs.width - os.width) / gridX) * gridX,
+ oy = Math.round((cs.height - os.height) / gridY) * gridY,
+ newWidth = os.width + ox,
+ newHeight = os.height + oy,
+ isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
+ isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
+ isMinWidth = o.minWidth && (o.minWidth > newWidth),
+ isMinHeight = o.minHeight && (o.minHeight > newHeight);
+
+ o.grid = grid;
+
+ if (isMinWidth) {
+ newWidth += gridX;
+ }
+ if (isMinHeight) {
+ newHeight += gridY;
+ }
+ if (isMaxWidth) {
+ newWidth -= gridX;
+ }
+ if (isMaxHeight) {
+ newHeight -= gridY;
+ }
+
+ if (/^(se|s|e)$/.test(a)) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ } else if (/^(ne)$/.test(a)) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ that.position.top = op.top - oy;
+ } else if (/^(sw)$/.test(a)) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ that.position.left = op.left - ox;
+ } else {
+ if ( newHeight - gridY <= 0 || newWidth - gridX <= 0) {
+ outerDimensions = that._getPaddingPlusBorderDimensions( this );
+ }
+
+ if ( newHeight - gridY > 0 ) {
+ that.size.height = newHeight;
+ that.position.top = op.top - oy;
+ } else {
+ newHeight = gridY - outerDimensions.height;
+ that.size.height = newHeight;
+ that.position.top = op.top + os.height - newHeight;
+ }
+ if ( newWidth - gridX > 0 ) {
+ that.size.width = newWidth;
+ that.position.left = op.left - ox;
+ } else {
+ newWidth = gridX - outerDimensions.width;
+ that.size.width = newWidth;
+ that.position.left = op.left + os.width - newWidth;
+ }
+ }
+ }
+
+});
+
+var resizable = $.ui.resizable;
+
+
+/*!
+ * jQuery UI Dialog 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/dialog/
+ */
+
+
+var dialog = $.widget( "ui.dialog", {
+ version: "1.11.4",
+ options: {
+ appendTo: "body",
+ autoOpen: true,
+ buttons: [],
+ closeOnEscape: true,
+ closeText: "Close",
+ dialogClass: "",
+ draggable: true,
+ hide: null,
+ height: "auto",
+ maxHeight: null,
+ maxWidth: null,
+ minHeight: 150,
+ minWidth: 150,
+ modal: false,
+ position: {
+ my: "center",
+ at: "center",
+ of: window,
+ collision: "fit",
+ // Ensure the titlebar is always visible
+ using: function( pos ) {
+ var topOffset = $( this ).css( pos ).offset().top;
+ if ( topOffset < 0 ) {
+ $( this ).css( "top", pos.top - topOffset );
+ }
+ }
+ },
+ resizable: true,
+ show: null,
+ title: null,
+ width: 300,
+
+ // callbacks
+ beforeClose: null,
+ close: null,
+ drag: null,
+ dragStart: null,
+ dragStop: null,
+ focus: null,
+ open: null,
+ resize: null,
+ resizeStart: null,
+ resizeStop: null
+ },
+
+ sizeRelatedOptions: {
+ buttons: true,
+ height: true,
+ maxHeight: true,
+ maxWidth: true,
+ minHeight: true,
+ minWidth: true,
+ width: true
+ },
+
+ resizableRelatedOptions: {
+ maxHeight: true,
+ maxWidth: true,
+ minHeight: true,
+ minWidth: true
+ },
+
+ _create: function() {
+ this.originalCss = {
+ display: this.element[ 0 ].style.display,
+ width: this.element[ 0 ].style.width,
+ minHeight: this.element[ 0 ].style.minHeight,
+ maxHeight: this.element[ 0 ].style.maxHeight,
+ height: this.element[ 0 ].style.height
+ };
+ this.originalPosition = {
+ parent: this.element.parent(),
+ index: this.element.parent().children().index( this.element )
+ };
+ this.originalTitle = this.element.attr( "title" );
+ this.options.title = this.options.title || this.originalTitle;
+
+ this._createWrapper();
+
+ this.element
+ .show()
+ .removeAttr( "title" )
+ .addClass( "ui-dialog-content ui-widget-content" )
+ .appendTo( this.uiDialog );
+
+ this._createTitlebar();
+ this._createButtonPane();
+
+ if ( this.options.draggable && $.fn.draggable ) {
+ this._makeDraggable();
+ }
+ if ( this.options.resizable && $.fn.resizable ) {
+ this._makeResizable();
+ }
+
+ this._isOpen = false;
+
+ this._trackFocus();
+ },
+
+ _init: function() {
+ if ( this.options.autoOpen ) {
+ this.open();
+ }
+ },
+
+ _appendTo: function() {
+ var element = this.options.appendTo;
+ if ( element && (element.jquery || element.nodeType) ) {
+ return $( element );
+ }
+ return this.document.find( element || "body" ).eq( 0 );
+ },
+
+ _destroy: function() {
+ var next,
+ originalPosition = this.originalPosition;
+
+ this._untrackInstance();
+ this._destroyOverlay();
+
+ this.element
+ .removeUniqueId()
+ .removeClass( "ui-dialog-content ui-widget-content" )
+ .css( this.originalCss )
+ // Without detaching first, the following becomes really slow
+ .detach();
+
+ this.uiDialog.stop( true, true ).remove();
+
+ if ( this.originalTitle ) {
+ this.element.attr( "title", this.originalTitle );
+ }
+
+ next = originalPosition.parent.children().eq( originalPosition.index );
+ // Don't try to place the dialog next to itself (#8613)
+ if ( next.length && next[ 0 ] !== this.element[ 0 ] ) {
+ next.before( this.element );
+ } else {
+ originalPosition.parent.append( this.element );
+ }
+ },
+
+ widget: function() {
+ return this.uiDialog;
+ },
+
+ disable: $.noop,
+ enable: $.noop,
+
+ close: function( event ) {
+ var activeElement,
+ that = this;
+
+ if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
+ return;
+ }
+
+ this._isOpen = false;
+ this._focusedElement = null;
+ this._destroyOverlay();
+ this._untrackInstance();
+
+ if ( !this.opener.filter( ":focusable" ).focus().length ) {
+
+ // support: IE9
+ // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+ try {
+ activeElement = this.document[ 0 ].activeElement;
+
+ // Support: IE9, IE10
+ // If the <body> is blurred, IE will switch windows, see #4520
+ if ( activeElement && activeElement.nodeName.toLowerCase() !== "body" ) {
+
+ // Hiding a focused element doesn't trigger blur in WebKit
+ // so in case we have nothing to focus on, explicitly blur the active element
+ // https://bugs.webkit.org/show_bug.cgi?id=47182
+ $( activeElement ).blur();
+ }
+ } catch ( error ) {}
+ }
+
+ this._hide( this.uiDialog, this.options.hide, function() {
+ that._trigger( "close", event );
+ });
+ },
+
+ isOpen: function() {
+ return this._isOpen;
+ },
+
+ moveToTop: function() {
+ this._moveToTop();
+ },
+
+ _moveToTop: function( event, silent ) {
+ var moved = false,
+ zIndices = this.uiDialog.siblings( ".ui-front:visible" ).map(function() {
+ return +$( this ).css( "z-index" );
+ }).get(),
+ zIndexMax = Math.max.apply( null, zIndices );
+
+ if ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) {
+ this.uiDialog.css( "z-index", zIndexMax + 1 );
+ moved = true;
+ }
+
+ if ( moved && !silent ) {
+ this._trigger( "focus", event );
+ }
+ return moved;
+ },
+
+ open: function() {
+ var that = this;
+ if ( this._isOpen ) {
+ if ( this._moveToTop() ) {
+ this._focusTabbable();
+ }
+ return;
+ }
+
+ this._isOpen = true;
+ this.opener = $( this.document[ 0 ].activeElement );
+
+ this._size();
+ this._position();
+ this._createOverlay();
+ this._moveToTop( null, true );
+
+ // Ensure the overlay is moved to the top with the dialog, but only when
+ // opening. The overlay shouldn't move after the dialog is open so that
+ // modeless dialogs opened after the modal dialog stack properly.
+ if ( this.overlay ) {
+ this.overlay.css( "z-index", this.uiDialog.css( "z-index" ) - 1 );
+ }
+
+ this._show( this.uiDialog, this.options.show, function() {
+ that._focusTabbable();
+ that._trigger( "focus" );
+ });
+
+ // Track the dialog immediately upon openening in case a focus event
+ // somehow occurs outside of the dialog before an element inside the
+ // dialog is focused (#10152)
+ this._makeFocusTarget();
+
+ this._trigger( "open" );
+ },
+
+ _focusTabbable: function() {
+ // Set focus to the first match:
+ // 1. An element that was focused previously
+ // 2. First element inside the dialog matching [autofocus]
+ // 3. Tabbable element inside the content element
+ // 4. Tabbable element inside the buttonpane
+ // 5. The close button
+ // 6. The dialog itself
+ var hasFocus = this._focusedElement;
+ if ( !hasFocus ) {
+ hasFocus = this.element.find( "[autofocus]" );
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.element.find( ":tabbable" );
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.uiDialogButtonPane.find( ":tabbable" );
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.uiDialogTitlebarClose.filter( ":tabbable" );
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.uiDialog;
+ }
+ hasFocus.eq( 0 ).focus();
+ },
+
+ _keepFocus: function( event ) {
+ function checkFocus() {
+ var activeElement = this.document[0].activeElement,
+ isActive = this.uiDialog[0] === activeElement ||
+ $.contains( this.uiDialog[0], activeElement );
+ if ( !isActive ) {
+ this._focusTabbable();
+ }
+ }
+ event.preventDefault();
+ checkFocus.call( this );
+ // support: IE
+ // IE <= 8 doesn't prevent moving focus even with event.preventDefault()
+ // so we check again later
+ this._delay( checkFocus );
+ },
+
+ _createWrapper: function() {
+ this.uiDialog = $("<div>")
+ .addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
+ this.options.dialogClass )
+ .hide()
+ .attr({
+ // Setting tabIndex makes the div focusable
+ tabIndex: -1,
+ role: "dialog"
+ })
+ .appendTo( this._appendTo() );
+
+ this._on( this.uiDialog, {
+ keydown: function( event ) {
+ if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+ event.keyCode === $.ui.keyCode.ESCAPE ) {
+ event.preventDefault();
+ this.close( event );
+ return;
+ }
+
+ // prevent tabbing out of dialogs
+ if ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {
+ return;
+ }
+ var tabbables = this.uiDialog.find( ":tabbable" ),
+ first = tabbables.filter( ":first" ),
+ last = tabbables.filter( ":last" );
+
+ if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
+ this._delay(function() {
+ first.focus();
+ });
+ event.preventDefault();
+ } else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
+ this._delay(function() {
+ last.focus();
+ });
+ event.preventDefault();
+ }
+ },
+ mousedown: function( event ) {
+ if ( this._moveToTop( event ) ) {
+ this._focusTabbable();
+ }
+ }
+ });
+
+ // We assume that any existing aria-describedby attribute means
+ // that the dialog content is marked up properly
+ // otherwise we brute force the content as the description
+ if ( !this.element.find( "[aria-describedby]" ).length ) {
+ this.uiDialog.attr({
+ "aria-describedby": this.element.uniqueId().attr( "id" )
+ });
+ }
+ },
+
+ _createTitlebar: function() {
+ var uiDialogTitle;
+
+ this.uiDialogTitlebar = $( "<div>" )
+ .addClass( "ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix" )
+ .prependTo( this.uiDialog );
+ this._on( this.uiDialogTitlebar, {
+ mousedown: function( event ) {
+ // Don't prevent click on close button (#8838)
+ // Focusing a dialog that is partially scrolled out of view
+ // causes the browser to scroll it into view, preventing the click event
+ if ( !$( event.target ).closest( ".ui-dialog-titlebar-close" ) ) {
+ // Dialog isn't getting focus when dragging (#8063)
+ this.uiDialog.focus();
+ }
+ }
+ });
+
+ // support: IE
+ // Use type="button" to prevent enter keypresses in textboxes from closing the
+ // dialog in IE (#9312)
+ this.uiDialogTitlebarClose = $( "<button type='button'></button>" )
+ .button({
+ label: this.options.closeText,
+ icons: {
+ primary: "ui-icon-closethick"
+ },
+ text: false
+ })
+ .addClass( "ui-dialog-titlebar-close" )
+ .appendTo( this.uiDialogTitlebar );
+ this._on( this.uiDialogTitlebarClose, {
+ click: function( event ) {
+ event.preventDefault();
+ this.close( event );
+ }
+ });
+
+ uiDialogTitle = $( "<span>" )
+ .uniqueId()
+ .addClass( "ui-dialog-title" )
+ .prependTo( this.uiDialogTitlebar );
+ this._title( uiDialogTitle );
+
+ this.uiDialog.attr({
+ "aria-labelledby": uiDialogTitle.attr( "id" )
+ });
+ },
+
+ _title: function( title ) {
+ if ( !this.options.title ) {
+ title.html( " " );
+ }
+ title.text( this.options.title );
+ },
+
+ _createButtonPane: function() {
+ this.uiDialogButtonPane = $( "<div>" )
+ .addClass( "ui-dialog-buttonpane ui-widget-content ui-helper-clearfix" );
+
+ this.uiButtonSet = $( "<div>" )
+ .addClass( "ui-dialog-buttonset" )
+ .appendTo( this.uiDialogButtonPane );
+
+ this._createButtons();
+ },
+
+ _createButtons: function() {
+ var that = this,
+ buttons = this.options.buttons;
+
+ // if we already have a button pane, remove it
+ this.uiDialogButtonPane.remove();
+ this.uiButtonSet.empty();
+
+ if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
+ this.uiDialog.removeClass( "ui-dialog-buttons" );
+ return;
+ }
+
+ $.each( buttons, function( name, props ) {
+ var click, buttonOptions;
+ props = $.isFunction( props ) ?
+ { click: props, text: name } :
+ props;
+ // Default to a non-submitting button
+ props = $.extend( { type: "button" }, props );
+ // Change the context for the click callback to be the main element
+ click = props.click;
+ props.click = function() {
+ click.apply( that.element[ 0 ], arguments );
+ };
+ buttonOptions = {
+ icons: props.icons,
+ text: props.showText
+ };
+ delete props.icons;
+ delete props.showText;
+ $( "<button></button>", props )
+ .button( buttonOptions )
+ .appendTo( that.uiButtonSet );
+ });
+ this.uiDialog.addClass( "ui-dialog-buttons" );
+ this.uiDialogButtonPane.appendTo( this.uiDialog );
+ },
+
+ _makeDraggable: function() {
+ var that = this,
+ options = this.options;
+
+ function filteredUi( ui ) {
+ return {
+ position: ui.position,
+ offset: ui.offset
+ };
+ }
+
+ this.uiDialog.draggable({
+ cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
+ handle: ".ui-dialog-titlebar",
+ containment: "document",
+ start: function( event, ui ) {
+ $( this ).addClass( "ui-dialog-dragging" );
+ that._blockFrames();
+ that._trigger( "dragStart", event, filteredUi( ui ) );
+ },
+ drag: function( event, ui ) {
+ that._trigger( "drag", event, filteredUi( ui ) );
+ },
+ stop: function( event, ui ) {
+ var left = ui.offset.left - that.document.scrollLeft(),
+ top = ui.offset.top - that.document.scrollTop();
+
+ options.position = {
+ my: "left top",
+ at: "left" + (left >= 0 ? "+" : "") + left + " " +
+ "top" + (top >= 0 ? "+" : "") + top,
+ of: that.window
+ };
+ $( this ).removeClass( "ui-dialog-dragging" );
+ that._unblockFrames();
+ that._trigger( "dragStop", event, filteredUi( ui ) );
+ }
+ });
+ },
+
+ _makeResizable: function() {
+ var that = this,
+ options = this.options,
+ handles = options.resizable,
+ // .ui-resizable has position: relative defined in the stylesheet
+ // but dialogs have to use absolute or fixed positioning
+ position = this.uiDialog.css("position"),
+ resizeHandles = typeof handles === "string" ?
+ handles :
+ "n,e,s,w,se,sw,ne,nw";
+
+ function filteredUi( ui ) {
+ return {
+ originalPosition: ui.originalPosition,
+ originalSize: ui.originalSize,
+ position: ui.position,
+ size: ui.size
+ };
+ }
+
+ this.uiDialog.resizable({
+ cancel: ".ui-dialog-content",
+ containment: "document",
+ alsoResize: this.element,
+ maxWidth: options.maxWidth,
+ maxHeight: options.maxHeight,
+ minWidth: options.minWidth,
+ minHeight: this._minHeight(),
+ handles: resizeHandles,
+ start: function( event, ui ) {
+ $( this ).addClass( "ui-dialog-resizing" );
+ that._blockFrames();
+ that._trigger( "resizeStart", event, filteredUi( ui ) );
+ },
+ resize: function( event, ui ) {
+ that._trigger( "resize", event, filteredUi( ui ) );
+ },
+ stop: function( event, ui ) {
+ var offset = that.uiDialog.offset(),
+ left = offset.left - that.document.scrollLeft(),
+ top = offset.top - that.document.scrollTop();
+
+ options.height = that.uiDialog.height();
+ options.width = that.uiDialog.width();
+ options.position = {
+ my: "left top",
+ at: "left" + (left >= 0 ? "+" : "") + left + " " +
+ "top" + (top >= 0 ? "+" : "") + top,
+ of: that.window
+ };
+ $( this ).removeClass( "ui-dialog-resizing" );
+ that._unblockFrames();
+ that._trigger( "resizeStop", event, filteredUi( ui ) );
+ }
+ })
+ .css( "position", position );
+ },
+
+ _trackFocus: function() {
+ this._on( this.widget(), {
+ focusin: function( event ) {
+ this._makeFocusTarget();
+ this._focusedElement = $( event.target );
+ }
+ });
+ },
+
+ _makeFocusTarget: function() {
+ this._untrackInstance();
+ this._trackingInstances().unshift( this );
+ },
+
+ _untrackInstance: function() {
+ var instances = this._trackingInstances(),
+ exists = $.inArray( this, instances );
+ if ( exists !== -1 ) {
+ instances.splice( exists, 1 );
+ }
+ },
+
+ _trackingInstances: function() {
+ var instances = this.document.data( "ui-dialog-instances" );
+ if ( !instances ) {
+ instances = [];
+ this.document.data( "ui-dialog-instances", instances );
+ }
+ return instances;
+ },
+
+ _minHeight: function() {
+ var options = this.options;
+
+ return options.height === "auto" ?
+ options.minHeight :
+ Math.min( options.minHeight, options.height );
+ },
+
+ _position: function() {
+ // Need to show the dialog to get the actual offset in the position plugin
+ var isVisible = this.uiDialog.is( ":visible" );
+ if ( !isVisible ) {
+ this.uiDialog.show();
+ }
+ this.uiDialog.position( this.options.position );
+ if ( !isVisible ) {
+ this.uiDialog.hide();
+ }
+ },
+
+ _setOptions: function( options ) {
+ var that = this,
+ resize = false,
+ resizableOptions = {};
+
+ $.each( options, function( key, value ) {
+ that._setOption( key, value );
+
+ if ( key in that.sizeRelatedOptions ) {
+ resize = true;
+ }
+ if ( key in that.resizableRelatedOptions ) {
+ resizableOptions[ key ] = value;
+ }
+ });
+
+ if ( resize ) {
+ this._size();
+ this._position();
+ }
+ if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
+ this.uiDialog.resizable( "option", resizableOptions );
+ }
+ },
+
+ _setOption: function( key, value ) {
+ var isDraggable, isResizable,
+ uiDialog = this.uiDialog;
+
+ if ( key === "dialogClass" ) {
+ uiDialog
+ .removeClass( this.options.dialogClass )
+ .addClass( value );
+ }
+
+ if ( key === "disabled" ) {
+ return;
+ }
+
+ this._super( key, value );
+
+ if ( key === "appendTo" ) {
+ this.uiDialog.appendTo( this._appendTo() );
+ }
+
+ if ( key === "buttons" ) {
+ this._createButtons();
+ }
+
+ if ( key === "closeText" ) {
+ this.uiDialogTitlebarClose.button({
+ // Ensure that we always pass a string
+ label: "" + value
+ });
+ }
+
+ if ( key === "draggable" ) {
+ isDraggable = uiDialog.is( ":data(ui-draggable)" );
+ if ( isDraggable && !value ) {
+ uiDialog.draggable( "destroy" );
+ }
+
+ if ( !isDraggable && value ) {
+ this._makeDraggable();
+ }
+ }
+
+ if ( key === "position" ) {
+ this._position();
+ }
+
+ if ( key === "resizable" ) {
+ // currently resizable, becoming non-resizable
+ isResizable = uiDialog.is( ":data(ui-resizable)" );
+ if ( isResizable && !value ) {
+ uiDialog.resizable( "destroy" );
+ }
+
+ // currently resizable, changing handles
+ if ( isResizable && typeof value === "string" ) {
+ uiDialog.resizable( "option", "handles", value );
+ }
+
+ // currently non-resizable, becoming resizable
+ if ( !isResizable && value !== false ) {
+ this._makeResizable();
+ }
+ }
+
+ if ( key === "title" ) {
+ this._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) );
+ }
+ },
+
+ _size: function() {
+ // If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+ // divs will both have width and height set, so we need to reset them
+ var nonContentHeight, minContentHeight, maxContentHeight,
+ options = this.options;
+
+ // Reset content sizing
+ this.element.show().css({
+ width: "auto",
+ minHeight: 0,
+ maxHeight: "none",
+ height: 0
+ });
+
+ if ( options.minWidth > options.width ) {
+ options.width = options.minWidth;
+ }
+
+ // reset wrapper sizing
+ // determine the height of all the non-content elements
+ nonContentHeight = this.uiDialog.css({
+ height: "auto",
+ width: options.width
+ })
+ .outerHeight();
+ minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+ maxContentHeight = typeof options.maxHeight === "number" ?
+ Math.max( 0, options.maxHeight - nonContentHeight ) :
+ "none";
+
+ if ( options.height === "auto" ) {
+ this.element.css({
+ minHeight: minContentHeight,
+ maxHeight: maxContentHeight,
+ height: "auto"
+ });
+ } else {
+ this.element.height( Math.max( 0, options.height - nonContentHeight ) );
+ }
+
+ if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
+ this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
+ }
+ },
+
+ _blockFrames: function() {
+ this.iframeBlocks = this.document.find( "iframe" ).map(function() {
+ var iframe = $( this );
+
+ return $( "<div>" )
+ .css({
+ position: "absolute",
+ width: iframe.outerWidth(),
+ height: iframe.outerHeight()
+ })
+ .appendTo( iframe.parent() )
+ .offset( iframe.offset() )[0];
+ });
+ },
+
+ _unblockFrames: function() {
+ if ( this.iframeBlocks ) {
+ this.iframeBlocks.remove();
+ delete this.iframeBlocks;
+ }
+ },
+
+ _allowInteraction: function( event ) {
+ if ( $( event.target ).closest( ".ui-dialog" ).length ) {
+ return true;
+ }
+
+ // TODO: Remove hack when datepicker implements
+ // the .ui-front logic (#8989)
+ return !!$( event.target ).closest( ".ui-datepicker" ).length;
+ },
+
+ _createOverlay: function() {
+ if ( !this.options.modal ) {
+ return;
+ }
+
+ // We use a delay in case the overlay is created from an
+ // event that we're going to be cancelling (#2804)
+ var isOpening = true;
+ this._delay(function() {
+ isOpening = false;
+ });
+
+ if ( !this.document.data( "ui-dialog-overlays" ) ) {
+
+ // Prevent use of anchors and inputs
+ // Using _on() for an event handler shared across many instances is
+ // safe because the dialogs stack and must be closed in reverse order
+ this._on( this.document, {
+ focusin: function( event ) {
+ if ( isOpening ) {
+ return;
+ }
+
+ if ( !this._allowInteraction( event ) ) {
+ event.preventDefault();
+ this._trackingInstances()[ 0 ]._focusTabbable();
+ }
+ }
+ });
+ }
+
+ this.overlay = $( "<div>" )
+ .addClass( "ui-widget-overlay ui-front" )
+ .appendTo( this._appendTo() );
+ this._on( this.overlay, {
+ mousedown: "_keepFocus"
+ });
+ this.document.data( "ui-dialog-overlays",
+ (this.document.data( "ui-dialog-overlays" ) || 0) + 1 );
+ },
+
+ _destroyOverlay: function() {
+ if ( !this.options.modal ) {
+ return;
+ }
+
+ if ( this.overlay ) {
+ var overlays = this.document.data( "ui-dialog-overlays" ) - 1;
+
+ if ( !overlays ) {
+ this.document
+ .unbind( "focusin" )
+ .removeData( "ui-dialog-overlays" );
+ } else {
+ this.document.data( "ui-dialog-overlays", overlays );
+ }
+
+ this.overlay.remove();
+ this.overlay = null;
+ }
+ }
+});
+
+
+/*!
+ * jQuery UI Droppable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/droppable/
+ */
+
+
+$.widget( "ui.droppable", {
+ version: "1.11.4",
+ widgetEventPrefix: "drop",
+ options: {
+ accept: "*",
+ activeClass: false,
+ addClasses: true,
+ greedy: false,
+ hoverClass: false,
+ scope: "default",
+ tolerance: "intersect",
+
+ // callbacks
+ activate: null,
+ deactivate: null,
+ drop: null,
+ out: null,
+ over: null
+ },
+ _create: function() {
+
+ var proportions,
+ o = this.options,
+ accept = o.accept;
+
+ this.isover = false;
+ this.isout = true;
+
+ this.accept = $.isFunction( accept ) ? accept : function( d ) {
+ return d.is( accept );
+ };
+
+ this.proportions = function( /* valueToWrite */ ) {
+ if ( arguments.length ) {
+ // Store the droppable's proportions
+ proportions = arguments[ 0 ];
+ } else {
+ // Retrieve or derive the droppable's proportions
+ return proportions ?
+ proportions :
+ proportions = {
+ width: this.element[ 0 ].offsetWidth,
+ height: this.element[ 0 ].offsetHeight
+ };
+ }
+ };
+
+ this._addToManager( o.scope );
+
+ o.addClasses && this.element.addClass( "ui-droppable" );
+
+ },
+
+ _addToManager: function( scope ) {
+ // Add the reference and positions to the manager
+ $.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];
+ $.ui.ddmanager.droppables[ scope ].push( this );
+ },
+
+ _splice: function( drop ) {
+ var i = 0;
+ for ( ; i < drop.length; i++ ) {
+ if ( drop[ i ] === this ) {
+ drop.splice( i, 1 );
+ }
+ }
+ },
+
+ _destroy: function() {
+ var drop = $.ui.ddmanager.droppables[ this.options.scope ];
+
+ this._splice( drop );
+
+ this.element.removeClass( "ui-droppable ui-droppable-disabled" );
+ },
+
+ _setOption: function( key, value ) {
+
+ if ( key === "accept" ) {
+ this.accept = $.isFunction( value ) ? value : function( d ) {
+ return d.is( value );
+ };
+ } else if ( key === "scope" ) {
+ var drop = $.ui.ddmanager.droppables[ this.options.scope ];
+
+ this._splice( drop );
+ this._addToManager( value );
+ }
+
+ this._super( key, value );
+ },
+
+ _activate: function( event ) {
+ var draggable = $.ui.ddmanager.current;
+ if ( this.options.activeClass ) {
+ this.element.addClass( this.options.activeClass );
+ }
+ if ( draggable ){
+ this._trigger( "activate", event, this.ui( draggable ) );
+ }
+ },
+
+ _deactivate: function( event ) {
+ var draggable = $.ui.ddmanager.current;
+ if ( this.options.activeClass ) {
+ this.element.removeClass( this.options.activeClass );
+ }
+ if ( draggable ){
+ this._trigger( "deactivate", event, this.ui( draggable ) );
+ }
+ },
+
+ _over: function( event ) {
+
+ var draggable = $.ui.ddmanager.current;
+
+ // Bail if draggable and droppable are same element
+ if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
+ return;
+ }
+
+ if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+ if ( this.options.hoverClass ) {
+ this.element.addClass( this.options.hoverClass );
+ }
+ this._trigger( "over", event, this.ui( draggable ) );
+ }
+
+ },
+
+ _out: function( event ) {
+
+ var draggable = $.ui.ddmanager.current;
+
+ // Bail if draggable and droppable are same element
+ if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
+ return;
+ }
+
+ if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+ if ( this.options.hoverClass ) {
+ this.element.removeClass( this.options.hoverClass );
+ }
+ this._trigger( "out", event, this.ui( draggable ) );
+ }
+
+ },
+
+ _drop: function( event, custom ) {
+
+ var draggable = custom || $.ui.ddmanager.current,
+ childrenIntersection = false;
+
+ // Bail if draggable and droppable are same element
+ if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
+ return false;
+ }
+
+ this.element.find( ":data(ui-droppable)" ).not( ".ui-draggable-dragging" ).each(function() {
+ var inst = $( this ).droppable( "instance" );
+ if (
+ inst.options.greedy &&
+ !inst.options.disabled &&
+ inst.options.scope === draggable.options.scope &&
+ inst.accept.call( inst.element[ 0 ], ( draggable.currentItem || draggable.element ) ) &&
+ $.ui.intersect( draggable, $.extend( inst, { offset: inst.element.offset() } ), inst.options.tolerance, event )
+ ) { childrenIntersection = true; return false; }
+ });
+ if ( childrenIntersection ) {
+ return false;
+ }
+
+ if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+ if ( this.options.activeClass ) {
+ this.element.removeClass( this.options.activeClass );
+ }
+ if ( this.options.hoverClass ) {
+ this.element.removeClass( this.options.hoverClass );
+ }
+ this._trigger( "drop", event, this.ui( draggable ) );
+ return this.element;
+ }
+
+ return false;
+
+ },
+
+ ui: function( c ) {
+ return {
+ draggable: ( c.currentItem || c.element ),
+ helper: c.helper,
+ position: c.position,
+ offset: c.positionAbs
+ };
+ }
+
+});
+
+$.ui.intersect = (function() {
+ function isOverAxis( x, reference, size ) {
+ return ( x >= reference ) && ( x < ( reference + size ) );
+ }
+
+ return function( draggable, droppable, toleranceMode, event ) {
+
+ if ( !droppable.offset ) {
+ return false;
+ }
+
+ var x1 = ( draggable.positionAbs || draggable.position.absolute ).left + draggable.margins.left,
+ y1 = ( draggable.positionAbs || draggable.position.absolute ).top + draggable.margins.top,
+ x2 = x1 + draggable.helperProportions.width,
+ y2 = y1 + draggable.helperProportions.height,
+ l = droppable.offset.left,
+ t = droppable.offset.top,
+ r = l + droppable.proportions().width,
+ b = t + droppable.proportions().height;
+
+ switch ( toleranceMode ) {
+ case "fit":
+ return ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );
+ case "intersect":
+ return ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half
+ x2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half
+ t < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half
+ y2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half
+ case "pointer":
+ return isOverAxis( event.pageY, t, droppable.proportions().height ) && isOverAxis( event.pageX, l, droppable.proportions().width );
+ case "touch":
+ return (
+ ( y1 >= t && y1 <= b ) || // Top edge touching
+ ( y2 >= t && y2 <= b ) || // Bottom edge touching
+ ( y1 < t && y2 > b ) // Surrounded vertically
+ ) && (
+ ( x1 >= l && x1 <= r ) || // Left edge touching
+ ( x2 >= l && x2 <= r ) || // Right edge touching
+ ( x1 < l && x2 > r ) // Surrounded horizontally
+ );
+ default:
+ return false;
+ }
+ };
+})();
+
+/*
+ This manager tracks offsets of draggables and droppables
+*/
+$.ui.ddmanager = {
+ current: null,
+ droppables: { "default": [] },
+ prepareOffsets: function( t, event ) {
+
+ var i, j,
+ m = $.ui.ddmanager.droppables[ t.options.scope ] || [],
+ type = event ? event.type : null, // workaround for #2317
+ list = ( t.currentItem || t.element ).find( ":data(ui-droppable)" ).addBack();
+
+ droppablesLoop: for ( i = 0; i < m.length; i++ ) {
+
+ // No disabled and non-accepted
+ if ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ], ( t.currentItem || t.element ) ) ) ) {
+ continue;
+ }
+
+ // Filter out elements in the current dragged item
+ for ( j = 0; j < list.length; j++ ) {
+ if ( list[ j ] === m[ i ].element[ 0 ] ) {
+ m[ i ].proportions().height = 0;
+ continue droppablesLoop;
+ }
+ }
+
+ m[ i ].visible = m[ i ].element.css( "display" ) !== "none";
+ if ( !m[ i ].visible ) {
+ continue;
+ }
+
+ // Activate the droppable if used directly from draggables
+ if ( type === "mousedown" ) {
+ m[ i ]._activate.call( m[ i ], event );
+ }
+
+ m[ i ].offset = m[ i ].element.offset();
+ m[ i ].proportions({ width: m[ i ].element[ 0 ].offsetWidth, height: m[ i ].element[ 0 ].offsetHeight });
+
+ }
+
+ },
+ drop: function( draggable, event ) {
+
+ var dropped = false;
+ // Create a copy of the droppables in case the list changes during the drop (#9116)
+ $.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {
+
+ if ( !this.options ) {
+ return;
+ }
+ if ( !this.options.disabled && this.visible && $.ui.intersect( draggable, this, this.options.tolerance, event ) ) {
+ dropped = this._drop.call( this, event ) || dropped;
+ }
+
+ if ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+ this.isout = true;
+ this.isover = false;
+ this._deactivate.call( this, event );
+ }
+
+ });
+ return dropped;
+
+ },
+ dragStart: function( draggable, event ) {
+ // Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+ draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
+ if ( !draggable.options.refreshPositions ) {
+ $.ui.ddmanager.prepareOffsets( draggable, event );
+ }
+ });
+ },
+ drag: function( draggable, event ) {
+
+ // If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+ if ( draggable.options.refreshPositions ) {
+ $.ui.ddmanager.prepareOffsets( draggable, event );
+ }
+
+ // Run through all droppables and check their positions based on specific tolerance options
+ $.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {
+
+ if ( this.options.disabled || this.greedyChild || !this.visible ) {
+ return;
+ }
+
+ var parentInstance, scope, parent,
+ intersects = $.ui.intersect( draggable, this, this.options.tolerance, event ),
+ c = !intersects && this.isover ? "isout" : ( intersects && !this.isover ? "isover" : null );
+ if ( !c ) {
+ return;
+ }
+
+ if ( this.options.greedy ) {
+ // find droppable parents with same scope
+ scope = this.options.scope;
+ parent = this.element.parents( ":data(ui-droppable)" ).filter(function() {
+ return $( this ).droppable( "instance" ).options.scope === scope;
+ });
+
+ if ( parent.length ) {
+ parentInstance = $( parent[ 0 ] ).droppable( "instance" );
+ parentInstance.greedyChild = ( c === "isover" );
+ }
+ }
+
+ // we just moved into a greedy child
+ if ( parentInstance && c === "isover" ) {
+ parentInstance.isover = false;
+ parentInstance.isout = true;
+ parentInstance._out.call( parentInstance, event );
+ }
+
+ this[ c ] = true;
+ this[c === "isout" ? "isover" : "isout"] = false;
+ this[c === "isover" ? "_over" : "_out"].call( this, event );
+
+ // we just moved out of a greedy child
+ if ( parentInstance && c === "isout" ) {
+ parentInstance.isout = false;
+ parentInstance.isover = true;
+ parentInstance._over.call( parentInstance, event );
+ }
+ });
+
+ },
+ dragStop: function( draggable, event ) {
+ draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
+ // Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+ if ( !draggable.options.refreshPositions ) {
+ $.ui.ddmanager.prepareOffsets( draggable, event );
+ }
+ }
+};
+
+var droppable = $.ui.droppable;
+
+
+/*!
+ * jQuery UI Effects 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/effects-core/
+ */
+
+
+var dataSpace = "ui-effects-",
+
+ // Create a local jQuery because jQuery Color relies on it and the
+ // global may not exist with AMD and a custom build (#10199)
+ jQuery = $;
+
+$.effects = {
+ effect: {}
+};
+
+/*!
+ * jQuery Color Animations v2.1.2
+ * https://github.com/jquery/jquery-color
+ *
+ * Copyright 2014 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * Date: Wed Jan 16 08:47:09 2013 -0600
+ */
+(function( jQuery, undefined ) {
+
+ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
+
+ // plusequals test for += 100 -= 100
+ rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
+ // a set of RE's that can match strings and generate color tuples.
+ stringParsers = [ {
+ re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ parse: function( execResult ) {
+ return [
+ execResult[ 1 ],
+ execResult[ 2 ],
+ execResult[ 3 ],
+ execResult[ 4 ]
+ ];
+ }
+ }, {
+ re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ parse: function( execResult ) {
+ return [
+ execResult[ 1 ] * 2.55,
+ execResult[ 2 ] * 2.55,
+ execResult[ 3 ] * 2.55,
+ execResult[ 4 ]
+ ];
+ }
+ }, {
+ // this regex ignores A-F because it's compared against an already lowercased string
+ re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
+ parse: function( execResult ) {
+ return [
+ parseInt( execResult[ 1 ], 16 ),
+ parseInt( execResult[ 2 ], 16 ),
+ parseInt( execResult[ 3 ], 16 )
+ ];
+ }
+ }, {
+ // this regex ignores A-F because it's compared against an already lowercased string
+ re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
+ parse: function( execResult ) {
+ return [
+ parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
+ parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
+ parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
+ ];
+ }
+ }, {
+ re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ space: "hsla",
+ parse: function( execResult ) {
+ return [
+ execResult[ 1 ],
+ execResult[ 2 ] / 100,
+ execResult[ 3 ] / 100,
+ execResult[ 4 ]
+ ];
+ }
+ } ],
+
+ // jQuery.Color( )
+ color = jQuery.Color = function( color, green, blue, alpha ) {
+ return new jQuery.Color.fn.parse( color, green, blue, alpha );
+ },
+ spaces = {
+ rgba: {
+ props: {
+ red: {
+ idx: 0,
+ type: "byte"
+ },
+ green: {
+ idx: 1,
+ type: "byte"
+ },
+ blue: {
+ idx: 2,
+ type: "byte"
+ }
+ }
+ },
+
+ hsla: {
+ props: {
+ hue: {
+ idx: 0,
+ type: "degrees"
+ },
+ saturation: {
+ idx: 1,
+ type: "percent"
+ },
+ lightness: {
+ idx: 2,
+ type: "percent"
+ }
+ }
+ }
+ },
+ propTypes = {
+ "byte": {
+ floor: true,
+ max: 255
+ },
+ "percent": {
+ max: 1
+ },
+ "degrees": {
+ mod: 360,
+ floor: true
+ }
+ },
+ support = color.support = {},
+
+ // element for support tests
+ supportElem = jQuery( "<p>" )[ 0 ],
+
+ // colors = jQuery.Color.names
+ colors,
+
+ // local aliases of functions called often
+ each = jQuery.each;
+
+// determine rgba support immediately
+supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
+support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
+
+// define cache name and alpha properties
+// for rgba and hsla spaces
+each( spaces, function( spaceName, space ) {
+ space.cache = "_" + spaceName;
+ space.props.alpha = {
+ idx: 3,
+ type: "percent",
+ def: 1
+ };
+});
+
+function clamp( value, prop, allowEmpty ) {
+ var type = propTypes[ prop.type ] || {};
+
+ if ( value == null ) {
+ return (allowEmpty || !prop.def) ? null : prop.def;
+ }
+
+ // ~~ is an short way of doing floor for positive numbers
+ value = type.floor ? ~~value : parseFloat( value );
+
+ // IE will pass in empty strings as value for alpha,
+ // which will hit this case
+ if ( isNaN( value ) ) {
+ return prop.def;
+ }
+
+ if ( type.mod ) {
+ // we add mod before modding to make sure that negatives values
+ // get converted properly: -10 -> 350
+ return (value + type.mod) % type.mod;
+ }
+
+ // for now all property types without mod have min and max
+ return 0 > value ? 0 : type.max < value ? type.max : value;
+}
+
+function stringParse( string ) {
+ var inst = color(),
+ rgba = inst._rgba = [];
+
+ string = string.toLowerCase();
+
+ each( stringParsers, function( i, parser ) {
+ var parsed,
+ match = parser.re.exec( string ),
+ values = match && parser.parse( match ),
+ spaceName = parser.space || "rgba";
+
+ if ( values ) {
+ parsed = inst[ spaceName ]( values );
+
+ // if this was an rgba parse the assignment might happen twice
+ // oh well....
+ inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
+ rgba = inst._rgba = parsed._rgba;
+
+ // exit each( stringParsers ) here because we matched
+ return false;
+ }
+ });
+
+ // Found a stringParser that handled it
+ if ( rgba.length ) {
+
+ // if this came from a parsed string, force "transparent" when alpha is 0
+ // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
+ if ( rgba.join() === "0,0,0,0" ) {
+ jQuery.extend( rgba, colors.transparent );
+ }
+ return inst;
+ }
+
+ // named colors
+ return colors[ string ];
+}
+
+color.fn = jQuery.extend( color.prototype, {
+ parse: function( red, green, blue, alpha ) {
+ if ( red === undefined ) {
+ this._rgba = [ null, null, null, null ];
+ return this;
+ }
+ if ( red.jquery || red.nodeType ) {
+ red = jQuery( red ).css( green );
+ green = undefined;
+ }
+
+ var inst = this,
+ type = jQuery.type( red ),
+ rgba = this._rgba = [];
+
+ // more than 1 argument specified - assume ( red, green, blue, alpha )
+ if ( green !== undefined ) {
+ red = [ red, green, blue, alpha ];
+ type = "array";
+ }
+
+ if ( type === "string" ) {
+ return this.parse( stringParse( red ) || colors._default );
+ }
+
+ if ( type === "array" ) {
+ each( spaces.rgba.props, function( key, prop ) {
+ rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
+ });
+ return this;
+ }
+
+ if ( type === "object" ) {
+ if ( red instanceof color ) {
+ each( spaces, function( spaceName, space ) {
+ if ( red[ space.cache ] ) {
+ inst[ space.cache ] = red[ space.cache ].slice();
+ }
+ });
+ } else {
+ each( spaces, function( spaceName, space ) {
+ var cache = space.cache;
+ each( space.props, function( key, prop ) {
+
+ // if the cache doesn't exist, and we know how to convert
+ if ( !inst[ cache ] && space.to ) {
+
+ // if the value was null, we don't need to copy it
+ // if the key was alpha, we don't need to copy it either
+ if ( key === "alpha" || red[ key ] == null ) {
+ return;
+ }
+ inst[ cache ] = space.to( inst._rgba );
+ }
+
+ // this is the only case where we allow nulls for ALL properties.
+ // call clamp with alwaysAllowEmpty
+ inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
+ });
+
+ // everything defined but alpha?
+ if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
+ // use the default of 1
+ inst[ cache ][ 3 ] = 1;
+ if ( space.from ) {
+ inst._rgba = space.from( inst[ cache ] );
+ }
+ }
+ });
+ }
+ return this;
+ }
+ },
+ is: function( compare ) {
+ var is = color( compare ),
+ same = true,
+ inst = this;
+
+ each( spaces, function( _, space ) {
+ var localCache,
+ isCache = is[ space.cache ];
+ if (isCache) {
+ localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
+ each( space.props, function( _, prop ) {
+ if ( isCache[ prop.idx ] != null ) {
+ same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
+ return same;
+ }
+ });
+ }
+ return same;
+ });
+ return same;
+ },
+ _space: function() {
+ var used = [],
+ inst = this;
+ each( spaces, function( spaceName, space ) {
+ if ( inst[ space.cache ] ) {
+ used.push( spaceName );
+ }
+ });
+ return used.pop();
+ },
+ transition: function( other, distance ) {
+ var end = color( other ),
+ spaceName = end._space(),
+ space = spaces[ spaceName ],
+ startColor = this.alpha() === 0 ? color( "transparent" ) : this,
+ start = startColor[ space.cache ] || space.to( startColor._rgba ),
+ result = start.slice();
+
+ end = end[ space.cache ];
+ each( space.props, function( key, prop ) {
+ var index = prop.idx,
+ startValue = start[ index ],
+ endValue = end[ index ],
+ type = propTypes[ prop.type ] || {};
+
+ // if null, don't override start value
+ if ( endValue === null ) {
+ return;
+ }
+ // if null - use end
+ if ( startValue === null ) {
+ result[ index ] = endValue;
+ } else {
+ if ( type.mod ) {
+ if ( endValue - startValue > type.mod / 2 ) {
+ startValue += type.mod;
+ } else if ( startValue - endValue > type.mod / 2 ) {
+ startValue -= type.mod;
+ }
+ }
+ result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
+ }
+ });
+ return this[ spaceName ]( result );
+ },
+ blend: function( opaque ) {
+ // if we are already opaque - return ourself
+ if ( this._rgba[ 3 ] === 1 ) {
+ return this;
+ }
+
+ var rgb = this._rgba.slice(),
+ a = rgb.pop(),
+ blend = color( opaque )._rgba;
+
+ return color( jQuery.map( rgb, function( v, i ) {
+ return ( 1 - a ) * blend[ i ] + a * v;
+ }));
+ },
+ toRgbaString: function() {
+ var prefix = "rgba(",
+ rgba = jQuery.map( this._rgba, function( v, i ) {
+ return v == null ? ( i > 2 ? 1 : 0 ) : v;
+ });
+
+ if ( rgba[ 3 ] === 1 ) {
+ rgba.pop();
+ prefix = "rgb(";
+ }
+
+ return prefix + rgba.join() + ")";
+ },
+ toHslaString: function() {
+ var prefix = "hsla(",
+ hsla = jQuery.map( this.hsla(), function( v, i ) {
+ if ( v == null ) {
+ v = i > 2 ? 1 : 0;
+ }
+
+ // catch 1 and 2
+ if ( i && i < 3 ) {
+ v = Math.round( v * 100 ) + "%";
+ }
+ return v;
+ });
+
+ if ( hsla[ 3 ] === 1 ) {
+ hsla.pop();
+ prefix = "hsl(";
+ }
+ return prefix + hsla.join() + ")";
+ },
+ toHexString: function( includeAlpha ) {
+ var rgba = this._rgba.slice(),
+ alpha = rgba.pop();
+
+ if ( includeAlpha ) {
+ rgba.push( ~~( alpha * 255 ) );
+ }
+
+ return "#" + jQuery.map( rgba, function( v ) {
+
+ // default to 0 when nulls exist
+ v = ( v || 0 ).toString( 16 );
+ return v.length === 1 ? "0" + v : v;
+ }).join("");
+ },
+ toString: function() {
+ return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
+ }
+});
+color.fn.parse.prototype = color.fn;
+
+// hsla conversions adapted from:
+// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/s…
+
+function hue2rgb( p, q, h ) {
+ h = ( h + 1 ) % 1;
+ if ( h * 6 < 1 ) {
+ return p + ( q - p ) * h * 6;
+ }
+ if ( h * 2 < 1) {
+ return q;
+ }
+ if ( h * 3 < 2 ) {
+ return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;
+ }
+ return p;
+}
+
+spaces.hsla.to = function( rgba ) {
+ if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
+ return [ null, null, null, rgba[ 3 ] ];
+ }
+ var r = rgba[ 0 ] / 255,
+ g = rgba[ 1 ] / 255,
+ b = rgba[ 2 ] / 255,
+ a = rgba[ 3 ],
+ max = Math.max( r, g, b ),
+ min = Math.min( r, g, b ),
+ diff = max - min,
+ add = max + min,
+ l = add * 0.5,
+ h, s;
+
+ if ( min === max ) {
+ h = 0;
+ } else if ( r === max ) {
+ h = ( 60 * ( g - b ) / diff ) + 360;
+ } else if ( g === max ) {
+ h = ( 60 * ( b - r ) / diff ) + 120;
+ } else {
+ h = ( 60 * ( r - g ) / diff ) + 240;
+ }
+
+ // chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
+ // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
+ if ( diff === 0 ) {
+ s = 0;
+ } else if ( l <= 0.5 ) {
+ s = diff / add;
+ } else {
+ s = diff / ( 2 - add );
+ }
+ return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
+};
+
+spaces.hsla.from = function( hsla ) {
+ if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
+ return [ null, null, null, hsla[ 3 ] ];
+ }
+ var h = hsla[ 0 ] / 360,
+ s = hsla[ 1 ],
+ l = hsla[ 2 ],
+ a = hsla[ 3 ],
+ q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
+ p = 2 * l - q;
+
+ return [
+ Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
+ Math.round( hue2rgb( p, q, h ) * 255 ),
+ Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
+ a
+ ];
+};
+
+each( spaces, function( spaceName, space ) {
+ var props = space.props,
+ cache = space.cache,
+ to = space.to,
+ from = space.from;
+
+ // makes rgba() and hsla()
+ color.fn[ spaceName ] = function( value ) {
+
+ // generate a cache for this space if it doesn't exist
+ if ( to && !this[ cache ] ) {
+ this[ cache ] = to( this._rgba );
+ }
+ if ( value === undefined ) {
+ return this[ cache ].slice();
+ }
+
+ var ret,
+ type = jQuery.type( value ),
+ arr = ( type === "array" || type === "object" ) ? value : arguments,
+ local = this[ cache ].slice();
+
+ each( props, function( key, prop ) {
+ var val = arr[ type === "object" ? key : prop.idx ];
+ if ( val == null ) {
+ val = local[ prop.idx ];
+ }
+ local[ prop.idx ] = clamp( val, prop );
+ });
+
+ if ( from ) {
+ ret = color( from( local ) );
+ ret[ cache ] = local;
+ return ret;
+ } else {
+ return color( local );
+ }
+ };
+
+ // makes red() green() blue() alpha() hue() saturation() lightness()
+ each( props, function( key, prop ) {
+ // alpha is included in more than one space
+ if ( color.fn[ key ] ) {
+ return;
+ }
+ color.fn[ key ] = function( value ) {
+ var vtype = jQuery.type( value ),
+ fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
+ local = this[ fn ](),
+ cur = local[ prop.idx ],
+ match;
+
+ if ( vtype === "undefined" ) {
+ return cur;
+ }
+
+ if ( vtype === "function" ) {
+ value = value.call( this, cur );
+ vtype = jQuery.type( value );
+ }
+ if ( value == null && prop.empty ) {
+ return this;
+ }
+ if ( vtype === "string" ) {
+ match = rplusequals.exec( value );
+ if ( match ) {
+ value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
+ }
+ }
+ local[ prop.idx ] = value;
+ return this[ fn ]( local );
+ };
+ });
+});
+
+// add cssHook and .fx.step function for each named hook.
+// accept a space separated string of properties
+color.hook = function( hook ) {
+ var hooks = hook.split( " " );
+ each( hooks, function( i, hook ) {
+ jQuery.cssHooks[ hook ] = {
+ set: function( elem, value ) {
+ var parsed, curElem,
+ backgroundColor = "";
+
+ if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
+ value = color( parsed || value );
+ if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
+ curElem = hook === "backgroundColor" ? elem.parentNode : elem;
+ while (
+ (backgroundColor === "" || backgroundColor === "transparent") &&
+ curElem && curElem.style
+ ) {
+ try {
+ backgroundColor = jQuery.css( curElem, "backgroundColor" );
+ curElem = curElem.parentNode;
+ } catch ( e ) {
+ }
+ }
+
+ value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
+ backgroundColor :
+ "_default" );
+ }
+
+ value = value.toRgbaString();
+ }
+ try {
+ elem.style[ hook ] = value;
+ } catch ( e ) {
+ // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
+ }
+ }
+ };
+ jQuery.fx.step[ hook ] = function( fx ) {
+ if ( !fx.colorInit ) {
+ fx.start = color( fx.elem, hook );
+ fx.end = color( fx.end );
+ fx.colorInit = true;
+ }
+ jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
+ };
+ });
+
+};
+
+color.hook( stepHooks );
+
+jQuery.cssHooks.borderColor = {
+ expand: function( value ) {
+ var expanded = {};
+
+ each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
+ expanded[ "border" + part + "Color" ] = value;
+ });
+ return expanded;
+ }
+};
+
+// Basic color names only.
+// Usage of any of the other color names requires adding yourself or including
+// jquery.color.svg-names.js.
+colors = jQuery.Color.names = {
+ // 4.1. Basic color keywords
+ aqua: "#00ffff",
+ black: "#000000",
+ blue: "#0000ff",
+ fuchsia: "#ff00ff",
+ gray: "#808080",
+ green: "#008000",
+ lime: "#00ff00",
+ maroon: "#800000",
+ navy: "#000080",
+ olive: "#808000",
+ purple: "#800080",
+ red: "#ff0000",
+ silver: "#c0c0c0",
+ teal: "#008080",
+ white: "#ffffff",
+ yellow: "#ffff00",
+
+ // 4.2.3. "transparent" color keyword
+ transparent: [ null, null, null, 0 ],
+
+ _default: "#ffffff"
+};
+
+})( jQuery );
+
+/******************************************************************************/
+/****************************** CLASS ANIMATIONS ******************************/
+/******************************************************************************/
+(function() {
+
+var classAnimationActions = [ "add", "remove", "toggle" ],
+ shorthandStyles = {
+ border: 1,
+ borderBottom: 1,
+ borderColor: 1,
+ borderLeft: 1,
+ borderRight: 1,
+ borderTop: 1,
+ borderWidth: 1,
+ margin: 1,
+ padding: 1
+ };
+
+$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
+ $.fx.step[ prop ] = function( fx ) {
+ if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
+ jQuery.style( fx.elem, prop, fx.end );
+ fx.setAttr = true;
+ }
+ };
+});
+
+function getElementStyles( elem ) {
+ var key, len,
+ style = elem.ownerDocument.defaultView ?
+ elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
+ elem.currentStyle,
+ styles = {};
+
+ if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
+ len = style.length;
+ while ( len-- ) {
+ key = style[ len ];
+ if ( typeof style[ key ] === "string" ) {
+ styles[ $.camelCase( key ) ] = style[ key ];
+ }
+ }
+ // support: Opera, IE <9
+ } else {
+ for ( key in style ) {
+ if ( typeof style[ key ] === "string" ) {
+ styles[ key ] = style[ key ];
+ }
+ }
+ }
+
+ return styles;
+}
+
+function styleDifference( oldStyle, newStyle ) {
+ var diff = {},
+ name, value;
+
+ for ( name in newStyle ) {
+ value = newStyle[ name ];
+ if ( oldStyle[ name ] !== value ) {
+ if ( !shorthandStyles[ name ] ) {
+ if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
+ diff[ name ] = value;
+ }
+ }
+ }
+ }
+
+ return diff;
+}
+
+// support: jQuery <1.8
+if ( !$.fn.addBack ) {
+ $.fn.addBack = function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter( selector )
+ );
+ };
+}
+
+$.effects.animateClass = function( value, duration, easing, callback ) {
+ var o = $.speed( duration, easing, callback );
+
+ return this.queue( function() {
+ var animated = $( this ),
+ baseClass = animated.attr( "class" ) || "",
+ applyClassChange,
+ allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
+
+ // map the animated objects to store the original styles.
+ allAnimations = allAnimations.map(function() {
+ var el = $( this );
+ return {
+ el: el,
+ start: getElementStyles( this )
+ };
+ });
+
+ // apply class change
+ applyClassChange = function() {
+ $.each( classAnimationActions, function(i, action) {
+ if ( value[ action ] ) {
+ animated[ action + "Class" ]( value[ action ] );
+ }
+ });
+ };
+ applyClassChange();
+
+ // map all animated objects again - calculate new styles and diff
+ allAnimations = allAnimations.map(function() {
+ this.end = getElementStyles( this.el[ 0 ] );
+ this.diff = styleDifference( this.start, this.end );
+ return this;
+ });
+
+ // apply original class
+ animated.attr( "class", baseClass );
+
+ // map all animated objects again - this time collecting a promise
+ allAnimations = allAnimations.map(function() {
+ var styleInfo = this,
+ dfd = $.Deferred(),
+ opts = $.extend({}, o, {
+ queue: false,
+ complete: function() {
+ dfd.resolve( styleInfo );
+ }
+ });
+
+ this.el.animate( this.diff, opts );
+ return dfd.promise();
+ });
+
+ // once all animations have completed:
+ $.when.apply( $, allAnimations.get() ).done(function() {
+
+ // set the final class
+ applyClassChange();
+
+ // for each animated element,
+ // clear all css properties that were animated
+ $.each( arguments, function() {
+ var el = this.el;
+ $.each( this.diff, function(key) {
+ el.css( key, "" );
+ });
+ });
+
+ // this is guarnteed to be there if you use jQuery.speed()
+ // it also handles dequeuing the next anim...
+ o.complete.call( animated[ 0 ] );
+ });
+ });
+};
+
+$.fn.extend({
+ addClass: (function( orig ) {
+ return function( classNames, speed, easing, callback ) {
+ return speed ?
+ $.effects.animateClass.call( this,
+ { add: classNames }, speed, easing, callback ) :
+ orig.apply( this, arguments );
+ };
+ })( $.fn.addClass ),
+
+ removeClass: (function( orig ) {
+ return function( classNames, speed, easing, callback ) {
+ return arguments.length > 1 ?
+ $.effects.animateClass.call( this,
+ { remove: classNames }, speed, easing, callback ) :
+ orig.apply( this, arguments );
+ };
+ })( $.fn.removeClass ),
+
+ toggleClass: (function( orig ) {
+ return function( classNames, force, speed, easing, callback ) {
+ if ( typeof force === "boolean" || force === undefined ) {
+ if ( !speed ) {
+ // without speed parameter
+ return orig.apply( this, arguments );
+ } else {
+ return $.effects.animateClass.call( this,
+ (force ? { add: classNames } : { remove: classNames }),
+ speed, easing, callback );
+ }
+ } else {
+ // without force parameter
+ return $.effects.animateClass.call( this,
+ { toggle: classNames }, force, speed, easing );
+ }
+ };
+ })( $.fn.toggleClass ),
+
+ switchClass: function( remove, add, speed, easing, callback) {
+ return $.effects.animateClass.call( this, {
+ add: add,
+ remove: remove
+ }, speed, easing, callback );
+ }
+});
+
+})();
+
+/******************************************************************************/
+/*********************************** EFFECTS **********************************/
+/******************************************************************************/
+
+(function() {
+
+$.extend( $.effects, {
+ version: "1.11.4",
+
+ // Saves a set of properties in a data storage
+ save: function( element, set ) {
+ for ( var i = 0; i < set.length; i++ ) {
+ if ( set[ i ] !== null ) {
+ element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
+ }
+ }
+ },
+
+ // Restores a set of previously saved properties from a data storage
+ restore: function( element, set ) {
+ var val, i;
+ for ( i = 0; i < set.length; i++ ) {
+ if ( set[ i ] !== null ) {
+ val = element.data( dataSpace + set[ i ] );
+ // support: jQuery 1.6.2
+ // http://bugs.jquery.com/ticket/9917
+ // jQuery 1.6.2 incorrectly returns undefined for any falsy value.
+ // We can't differentiate between "" and 0 here, so we just assume
+ // empty string since it's likely to be a more common value...
+ if ( val === undefined ) {
+ val = "";
+ }
+ element.css( set[ i ], val );
+ }
+ }
+ },
+
+ setMode: function( el, mode ) {
+ if (mode === "toggle") {
+ mode = el.is( ":hidden" ) ? "show" : "hide";
+ }
+ return mode;
+ },
+
+ // Translates a [top,left] array into a baseline value
+ // this should be a little more flexible in the future to handle a string & hash
+ getBaseline: function( origin, original ) {
+ var y, x;
+ switch ( origin[ 0 ] ) {
+ case "top": y = 0; break;
+ case "middle": y = 0.5; break;
+ case "bottom": y = 1; break;
+ default: y = origin[ 0 ] / original.height;
+ }
+ switch ( origin[ 1 ] ) {
+ case "left": x = 0; break;
+ case "center": x = 0.5; break;
+ case "right": x = 1; break;
+ default: x = origin[ 1 ] / original.width;
+ }
+ return {
+ x: x,
+ y: y
+ };
+ },
+
+ // Wraps the element around a wrapper that copies position properties
+ createWrapper: function( element ) {
+
+ // if the element is already wrapped, return it
+ if ( element.parent().is( ".ui-effects-wrapper" )) {
+ return element.parent();
+ }
+
+ // wrap the element
+ var props = {
+ width: element.outerWidth(true),
+ height: element.outerHeight(true),
+ "float": element.css( "float" )
+ },
+ wrapper = $( "<div></div>" )
+ .addClass( "ui-effects-wrapper" )
+ .css({
+ fontSize: "100%",
+ background: "transparent",
+ border: "none",
+ margin: 0,
+ padding: 0
+ }),
+ // Store the size in case width/height are defined in % - Fixes #5245
+ size = {
+ width: element.width(),
+ height: element.height()
+ },
+ active = document.activeElement;
+
+ // support: Firefox
+ // Firefox incorrectly exposes anonymous content
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=561664
+ try {
+ active.id;
+ } catch ( e ) {
+ active = document.body;
+ }
+
+ element.wrap( wrapper );
+
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+ $( active ).focus();
+ }
+
+ wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
+
+ // transfer positioning properties to the wrapper
+ if ( element.css( "position" ) === "static" ) {
+ wrapper.css({ position: "relative" });
+ element.css({ position: "relative" });
+ } else {
+ $.extend( props, {
+ position: element.css( "position" ),
+ zIndex: element.css( "z-index" )
+ });
+ $.each([ "top", "left", "bottom", "right" ], function(i, pos) {
+ props[ pos ] = element.css( pos );
+ if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
+ props[ pos ] = "auto";
+ }
+ });
+ element.css({
+ position: "relative",
+ top: 0,
+ left: 0,
+ right: "auto",
+ bottom: "auto"
+ });
+ }
+ element.css(size);
+
+ return wrapper.css( props ).show();
+ },
+
+ removeWrapper: function( element ) {
+ var active = document.activeElement;
+
+ if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+ element.parent().replaceWith( element );
+
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+ $( active ).focus();
+ }
+ }
+
+ return element;
+ },
+
+ setTransition: function( element, list, factor, value ) {
+ value = value || {};
+ $.each( list, function( i, x ) {
+ var unit = element.cssUnit( x );
+ if ( unit[ 0 ] > 0 ) {
+ value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
+ }
+ });
+ return value;
+ }
+});
+
+// return an effect options object for the given parameters:
+function _normalizeArguments( effect, options, speed, callback ) {
+
+ // allow passing all options as the first parameter
+ if ( $.isPlainObject( effect ) ) {
+ options = effect;
+ effect = effect.effect;
+ }
+
+ // convert to an object
+ effect = { effect: effect };
+
+ // catch (effect, null, ...)
+ if ( options == null ) {
+ options = {};
+ }
+
+ // catch (effect, callback)
+ if ( $.isFunction( options ) ) {
+ callback = options;
+ speed = null;
+ options = {};
+ }
+
+ // catch (effect, speed, ?)
+ if ( typeof options === "number" || $.fx.speeds[ options ] ) {
+ callback = speed;
+ speed = options;
+ options = {};
+ }
+
+ // catch (effect, options, callback)
+ if ( $.isFunction( speed ) ) {
+ callback = speed;
+ speed = null;
+ }
+
+ // add options to effect
+ if ( options ) {
+ $.extend( effect, options );
+ }
+
+ speed = speed || options.duration;
+ effect.duration = $.fx.off ? 0 :
+ typeof speed === "number" ? speed :
+ speed in $.fx.speeds ? $.fx.speeds[ speed ] :
+ $.fx.speeds._default;
+
+ effect.complete = callback || options.complete;
+
+ return effect;
+}
+
+function standardAnimationOption( option ) {
+ // Valid standard speeds (nothing, number, named speed)
+ if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
+ return true;
+ }
+
+ // Invalid strings - treat as "normal" speed
+ if ( typeof option === "string" && !$.effects.effect[ option ] ) {
+ return true;
+ }
+
+ // Complete callback
+ if ( $.isFunction( option ) ) {
+ return true;
+ }
+
+ // Options hash (but not naming an effect)
+ if ( typeof option === "object" && !option.effect ) {
+ return true;
+ }
+
+ // Didn't match any standard API
+ return false;
+}
+
+$.fn.extend({
+ effect: function( /* effect, options, speed, callback */ ) {
+ var args = _normalizeArguments.apply( this, arguments ),
+ mode = args.mode,
+ queue = args.queue,
+ effectMethod = $.effects.effect[ args.effect ];
+
+ if ( $.fx.off || !effectMethod ) {
+ // delegate to the original method (e.g., .show()) if possible
+ if ( mode ) {
+ return this[ mode ]( args.duration, args.complete );
+ } else {
+ return this.each( function() {
+ if ( args.complete ) {
+ args.complete.call( this );
+ }
+ });
+ }
+ }
+
+ function run( next ) {
+ var elem = $( this ),
+ complete = args.complete,
+ mode = args.mode;
+
+ function done() {
+ if ( $.isFunction( complete ) ) {
+ complete.call( elem[0] );
+ }
+ if ( $.isFunction( next ) ) {
+ next();
+ }
+ }
+
+ // If the element already has the correct final state, delegate to
+ // the core methods so the internal tracking of "olddisplay" works.
+ if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+ elem[ mode ]();
+ done();
+ } else {
+ effectMethod.call( elem[0], args, done );
+ }
+ }
+
+ return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
+ },
+
+ show: (function( orig ) {
+ return function( option ) {
+ if ( standardAnimationOption( option ) ) {
+ return orig.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "show";
+ return this.effect.call( this, args );
+ }
+ };
+ })( $.fn.show ),
+
+ hide: (function( orig ) {
+ return function( option ) {
+ if ( standardAnimationOption( option ) ) {
+ return orig.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "hide";
+ return this.effect.call( this, args );
+ }
+ };
+ })( $.fn.hide ),
+
+ toggle: (function( orig ) {
+ return function( option ) {
+ if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
+ return orig.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "toggle";
+ return this.effect.call( this, args );
+ }
+ };
+ })( $.fn.toggle ),
+
+ // helper functions
+ cssUnit: function(key) {
+ var style = this.css( key ),
+ val = [];
+
+ $.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
+ if ( style.indexOf( unit ) > 0 ) {
+ val = [ parseFloat( style ), unit ];
+ }
+ });
+ return val;
+ }
+});
+
+})();
+
+/******************************************************************************/
+/*********************************** EASING ***********************************/
+/******************************************************************************/
+
+(function() {
+
+// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
+
+var baseEasings = {};
+
+$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
+ baseEasings[ name ] = function( p ) {
+ return Math.pow( p, i + 2 );
+ };
+});
+
+$.extend( baseEasings, {
+ Sine: function( p ) {
+ return 1 - Math.cos( p * Math.PI / 2 );
+ },
+ Circ: function( p ) {
+ return 1 - Math.sqrt( 1 - p * p );
+ },
+ Elastic: function( p ) {
+ return p === 0 || p === 1 ? p :
+ -Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
+ },
+ Back: function( p ) {
+ return p * p * ( 3 * p - 2 );
+ },
+ Bounce: function( p ) {
+ var pow2,
+ bounce = 4;
+
+ while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
+ return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
+ }
+});
+
+$.each( baseEasings, function( name, easeIn ) {
+ $.easing[ "easeIn" + name ] = easeIn;
+ $.easing[ "easeOut" + name ] = function( p ) {
+ return 1 - easeIn( 1 - p );
+ };
+ $.easing[ "easeInOut" + name ] = function( p ) {
+ return p < 0.5 ?
+ easeIn( p * 2 ) / 2 :
+ 1 - easeIn( p * -2 + 2 ) / 2;
+ };
+});
+
+})();
+
+var effect = $.effects;
+
+
+/*!
+ * jQuery UI Effects Blind 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/blind-effect/
+ */
+
+
+var effectBlind = $.effects.effect.blind = function( o, done ) {
+ // Create element
+ var el = $( this ),
+ rvertical = /up|down|vertical/,
+ rpositivemotion = /up|left|vertical|horizontal/,
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ direction = o.direction || "up",
+ vertical = rvertical.test( direction ),
+ ref = vertical ? "height" : "width",
+ ref2 = vertical ? "top" : "left",
+ motion = rpositivemotion.test( direction ),
+ animation = {},
+ show = mode === "show",
+ wrapper, distance, margin;
+
+ // if already wrapped, the wrapper's properties are my property. #6245
+ if ( el.parent().is( ".ui-effects-wrapper" ) ) {
+ $.effects.save( el.parent(), props );
+ } else {
+ $.effects.save( el, props );
+ }
+ el.show();
+ wrapper = $.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+
+ distance = wrapper[ ref ]();
+ margin = parseFloat( wrapper.css( ref2 ) ) || 0;
+
+ animation[ ref ] = show ? distance : 0;
+ if ( !motion ) {
+ el
+ .css( vertical ? "bottom" : "right", 0 )
+ .css( vertical ? "top" : "left", "auto" )
+ .css({ position: "absolute" });
+
+ animation[ ref2 ] = show ? margin : distance + margin;
+ }
+
+ // start at 0 if we are showing
+ if ( show ) {
+ wrapper.css( ref, 0 );
+ if ( !motion ) {
+ wrapper.css( ref2, margin + distance );
+ }
+ }
+
+ // Animate
+ wrapper.animate( animation, {
+ duration: o.duration,
+ easing: o.easing,
+ queue: false,
+ complete: function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+};
+
+
+/*!
+ * jQuery UI Effects Bounce 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/bounce-effect/
+ */
+
+
+var effectBounce = $.effects.effect.bounce = function( o, done ) {
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+
+ // defaults:
+ mode = $.effects.setMode( el, o.mode || "effect" ),
+ hide = mode === "hide",
+ show = mode === "show",
+ direction = o.direction || "up",
+ distance = o.distance,
+ times = o.times || 5,
+
+ // number of internal animations
+ anims = times * 2 + ( show || hide ? 1 : 0 ),
+ speed = o.duration / anims,
+ easing = o.easing,
+
+ // utility:
+ ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+ motion = ( direction === "up" || direction === "left" ),
+ i,
+ upAnim,
+ downAnim,
+
+ // we will need to re-assemble the queue to stack our animations in place
+ queue = el.queue(),
+ queuelen = queue.length;
+
+ // Avoid touching opacity to prevent clearType and PNG issues in IE
+ if ( show || hide ) {
+ props.push( "opacity" );
+ }
+
+ $.effects.save( el, props );
+ el.show();
+ $.effects.createWrapper( el ); // Create Wrapper
+
+ // default distance for the BIGGEST bounce is the outer Distance / 3
+ if ( !distance ) {
+ distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
+ }
+
+ if ( show ) {
+ downAnim = { opacity: 1 };
+ downAnim[ ref ] = 0;
+
+ // if we are showing, force opacity 0 and set the initial position
+ // then do the "first" animation
+ el.css( "opacity", 0 )
+ .css( ref, motion ? -distance * 2 : distance * 2 )
+ .animate( downAnim, speed, easing );
+ }
+
+ // start at the smallest distance if we are hiding
+ if ( hide ) {
+ distance = distance / Math.pow( 2, times - 1 );
+ }
+
+ downAnim = {};
+ downAnim[ ref ] = 0;
+ // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
+ for ( i = 0; i < times; i++ ) {
+ upAnim = {};
+ upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+ el.animate( upAnim, speed, easing )
+ .animate( downAnim, speed, easing );
+
+ distance = hide ? distance * 2 : distance / 2;
+ }
+
+ // Last Bounce when Hiding
+ if ( hide ) {
+ upAnim = { opacity: 0 };
+ upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+ el.animate( upAnim, speed, easing );
+ }
+
+ el.queue(function() {
+ if ( hide ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ });
+
+ // inject all the animations we just queued to be first in line (after "inprogress")
+ if ( queuelen > 1) {
+ queue.splice.apply( queue,
+ [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+ }
+ el.dequeue();
+
+};
+
+
+/*!
+ * jQuery UI Effects Clip 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/clip-effect/
+ */
+
+
+var effectClip = $.effects.effect.clip = function( o, done ) {
+ // Create element
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ show = mode === "show",
+ direction = o.direction || "vertical",
+ vert = direction === "vertical",
+ size = vert ? "height" : "width",
+ position = vert ? "top" : "left",
+ animation = {},
+ wrapper, animate, distance;
+
+ // Save & Show
+ $.effects.save( el, props );
+ el.show();
+
+ // Create Wrapper
+ wrapper = $.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+ animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
+ distance = animate[ size ]();
+
+ // Shift
+ if ( show ) {
+ animate.css( size, 0 );
+ animate.css( position, distance / 2 );
+ }
+
+ // Create Animation Object:
+ animation[ size ] = show ? distance : 0;
+ animation[ position ] = show ? 0 : distance / 2;
+
+ // Animate
+ animate.animate( animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( !show ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+
+};
+
+
+/*!
+ * jQuery UI Effects Drop 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/drop-effect/
+ */
+
+
+var effectDrop = $.effects.effect.drop = function( o, done ) {
+
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ show = mode === "show",
+ direction = o.direction || "left",
+ ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+ motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
+ animation = {
+ opacity: show ? 1 : 0
+ },
+ distance;
+
+ // Adjust
+ $.effects.save( el, props );
+ el.show();
+ $.effects.createWrapper( el );
+
+ distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2;
+
+ if ( show ) {
+ el
+ .css( "opacity", 0 )
+ .css( ref, motion === "pos" ? -distance : distance );
+ }
+
+ // Animation
+ animation[ ref ] = ( show ?
+ ( motion === "pos" ? "+=" : "-=" ) :
+ ( motion === "pos" ? "-=" : "+=" ) ) +
+ distance;
+
+ // Animate
+ el.animate( animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+};
+
+
+/*!
+ * jQuery UI Effects Explode 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/explode-effect/
+ */
+
+
+var effectExplode = $.effects.effect.explode = function( o, done ) {
+
+ var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
+ cells = rows,
+ el = $( this ),
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ show = mode === "show",
+
+ // show and then visibility:hidden the element before calculating offset
+ offset = el.show().css( "visibility", "hidden" ).offset(),
+
+ // width and height of a piece
+ width = Math.ceil( el.outerWidth() / cells ),
+ height = Math.ceil( el.outerHeight() / rows ),
+ pieces = [],
+
+ // loop
+ i, j, left, top, mx, my;
+
+ // children animate complete:
+ function childComplete() {
+ pieces.push( this );
+ if ( pieces.length === rows * cells ) {
+ animComplete();
+ }
+ }
+
+ // clone the element for each row and cell.
+ for ( i = 0; i < rows ; i++ ) { // ===>
+ top = offset.top + i * height;
+ my = i - ( rows - 1 ) / 2 ;
+
+ for ( j = 0; j < cells ; j++ ) { // |||
+ left = offset.left + j * width;
+ mx = j - ( cells - 1 ) / 2 ;
+
+ // Create a clone of the now hidden main element that will be absolute positioned
+ // within a wrapper div off the -left and -top equal to size of our pieces
+ el
+ .clone()
+ .appendTo( "body" )
+ .wrap( "<div></div>" )
+ .css({
+ position: "absolute",
+ visibility: "visible",
+ left: -j * width,
+ top: -i * height
+ })
+
+ // select the wrapper - make it overflow: hidden and absolute positioned based on
+ // where the original was located +left and +top equal to the size of pieces
+ .parent()
+ .addClass( "ui-effects-explode" )
+ .css({
+ position: "absolute",
+ overflow: "hidden",
+ width: width,
+ height: height,
+ left: left + ( show ? mx * width : 0 ),
+ top: top + ( show ? my * height : 0 ),
+ opacity: show ? 0 : 1
+ }).animate({
+ left: left + ( show ? 0 : mx * width ),
+ top: top + ( show ? 0 : my * height ),
+ opacity: show ? 1 : 0
+ }, o.duration || 500, o.easing, childComplete );
+ }
+ }
+
+ function animComplete() {
+ el.css({
+ visibility: "visible"
+ });
+ $( pieces ).remove();
+ if ( !show ) {
+ el.hide();
+ }
+ done();
+ }
+};
+
+
+/*!
+ * jQuery UI Effects Fade 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/fade-effect/
+ */
+
+
+var effectFade = $.effects.effect.fade = function( o, done ) {
+ var el = $( this ),
+ mode = $.effects.setMode( el, o.mode || "toggle" );
+
+ el.animate({
+ opacity: mode
+ }, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: done
+ });
+};
+
+
+/*!
+ * jQuery UI Effects Fold 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/fold-effect/
+ */
+
+
+var effectFold = $.effects.effect.fold = function( o, done ) {
+
+ // Create element
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ show = mode === "show",
+ hide = mode === "hide",
+ size = o.size || 15,
+ percent = /([0-9]+)%/.exec( size ),
+ horizFirst = !!o.horizFirst,
+ widthFirst = show !== horizFirst,
+ ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
+ duration = o.duration / 2,
+ wrapper, distance,
+ animation1 = {},
+ animation2 = {};
+
+ $.effects.save( el, props );
+ el.show();
+
+ // Create Wrapper
+ wrapper = $.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+ distance = widthFirst ?
+ [ wrapper.width(), wrapper.height() ] :
+ [ wrapper.height(), wrapper.width() ];
+
+ if ( percent ) {
+ size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
+ }
+ if ( show ) {
+ wrapper.css( horizFirst ? {
+ height: 0,
+ width: size
+ } : {
+ height: size,
+ width: 0
+ });
+ }
+
+ // Animation
+ animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
+ animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
+
+ // Animate
+ wrapper
+ .animate( animation1, duration, o.easing )
+ .animate( animation2, duration, o.easing, function() {
+ if ( hide ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ });
+
+};
+
+
+/*!
+ * jQuery UI Effects Highlight 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/highlight-effect/
+ */
+
+
+var effectHighlight = $.effects.effect.highlight = function( o, done ) {
+ var elem = $( this ),
+ props = [ "backgroundImage", "backgroundColor", "opacity" ],
+ mode = $.effects.setMode( elem, o.mode || "show" ),
+ animation = {
+ backgroundColor: elem.css( "backgroundColor" )
+ };
+
+ if (mode === "hide") {
+ animation.opacity = 0;
+ }
+
+ $.effects.save( elem, props );
+
+ elem
+ .show()
+ .css({
+ backgroundImage: "none",
+ backgroundColor: o.color || "#ffff99"
+ })
+ .animate( animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( mode === "hide" ) {
+ elem.hide();
+ }
+ $.effects.restore( elem, props );
+ done();
+ }
+ });
+};
+
+
+/*!
+ * jQuery UI Effects Size 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/size-effect/
+ */
+
+
+var effectSize = $.effects.effect.size = function( o, done ) {
+
+ // Create element
+ var original, baseline, factor,
+ el = $( this ),
+ props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
+
+ // Always restore
+ props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
+
+ // Copy for children
+ props2 = [ "width", "height", "overflow" ],
+ cProps = [ "fontSize" ],
+ vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
+ hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
+
+ // Set options
+ mode = $.effects.setMode( el, o.mode || "effect" ),
+ restore = o.restore || mode !== "effect",
+ scale = o.scale || "both",
+ origin = o.origin || [ "middle", "center" ],
+ position = el.css( "position" ),
+ props = restore ? props0 : props1,
+ zero = {
+ height: 0,
+ width: 0,
+ outerHeight: 0,
+ outerWidth: 0
+ };
+
+ if ( mode === "show" ) {
+ el.show();
+ }
+ original = {
+ height: el.height(),
+ width: el.width(),
+ outerHeight: el.outerHeight(),
+ outerWidth: el.outerWidth()
+ };
+
+ if ( o.mode === "toggle" && mode === "show" ) {
+ el.from = o.to || zero;
+ el.to = o.from || original;
+ } else {
+ el.from = o.from || ( mode === "show" ? zero : original );
+ el.to = o.to || ( mode === "hide" ? zero : original );
+ }
+
+ // Set scaling factor
+ factor = {
+ from: {
+ y: el.from.height / original.height,
+ x: el.from.width / original.width
+ },
+ to: {
+ y: el.to.height / original.height,
+ x: el.to.width / original.width
+ }
+ };
+
+ // Scale the css box
+ if ( scale === "box" || scale === "both" ) {
+
+ // Vertical props scaling
+ if ( factor.from.y !== factor.to.y ) {
+ props = props.concat( vProps );
+ el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
+ el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
+ }
+
+ // Horizontal props scaling
+ if ( factor.from.x !== factor.to.x ) {
+ props = props.concat( hProps );
+ el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
+ el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
+ }
+ }
+
+ // Scale the content
+ if ( scale === "content" || scale === "both" ) {
+
+ // Vertical props scaling
+ if ( factor.from.y !== factor.to.y ) {
+ props = props.concat( cProps ).concat( props2 );
+ el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
+ el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
+ }
+ }
+
+ $.effects.save( el, props );
+ el.show();
+ $.effects.createWrapper( el );
+ el.css( "overflow", "hidden" ).css( el.from );
+
+ // Adjust
+ if (origin) { // Calculate baseline shifts
+ baseline = $.effects.getBaseline( origin, original );
+ el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
+ el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
+ el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
+ el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
+ }
+ el.css( el.from ); // set top & left
+
+ // Animate
+ if ( scale === "content" || scale === "both" ) { // Scale the children
+
+ // Add margins/font-size
+ vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
+ hProps = hProps.concat([ "marginLeft", "marginRight" ]);
+ props2 = props0.concat(vProps).concat(hProps);
+
+ el.find( "*[width]" ).each( function() {
+ var child = $( this ),
+ c_original = {
+ height: child.height(),
+ width: child.width(),
+ outerHeight: child.outerHeight(),
+ outerWidth: child.outerWidth()
+ };
+ if (restore) {
+ $.effects.save(child, props2);
+ }
+
+ child.from = {
+ height: c_original.height * factor.from.y,
+ width: c_original.width * factor.from.x,
+ outerHeight: c_original.outerHeight * factor.from.y,
+ outerWidth: c_original.outerWidth * factor.from.x
+ };
+ child.to = {
+ height: c_original.height * factor.to.y,
+ width: c_original.width * factor.to.x,
+ outerHeight: c_original.height * factor.to.y,
+ outerWidth: c_original.width * factor.to.x
+ };
+
+ // Vertical props scaling
+ if ( factor.from.y !== factor.to.y ) {
+ child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
+ child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
+ }
+
+ // Horizontal props scaling
+ if ( factor.from.x !== factor.to.x ) {
+ child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
+ child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
+ }
+
+ // Animate children
+ child.css( child.from );
+ child.animate( child.to, o.duration, o.easing, function() {
+
+ // Restore children
+ if ( restore ) {
+ $.effects.restore( child, props2 );
+ }
+ });
+ });
+ }
+
+ // Animate
+ el.animate( el.to, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( el.to.opacity === 0 ) {
+ el.css( "opacity", el.from.opacity );
+ }
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ if ( !restore ) {
+
+ // we need to calculate our new positioning based on the scaling
+ if ( position === "static" ) {
+ el.css({
+ position: "relative",
+ top: el.to.top,
+ left: el.to.left
+ });
+ } else {
+ $.each([ "top", "left" ], function( idx, pos ) {
+ el.css( pos, function( _, str ) {
+ var val = parseInt( str, 10 ),
+ toRef = idx ? el.to.left : el.to.top;
+
+ // if original was "auto", recalculate the new value from wrapper
+ if ( str === "auto" ) {
+ return toRef + "px";
+ }
+
+ return val + toRef + "px";
+ });
+ });
+ }
+ }
+
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+
+};
+
+
+/*!
+ * jQuery UI Effects Scale 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/scale-effect/
+ */
+
+
+var effectScale = $.effects.effect.scale = function( o, done ) {
+
+ // Create element
+ var el = $( this ),
+ options = $.extend( true, {}, o ),
+ mode = $.effects.setMode( el, o.mode || "effect" ),
+ percent = parseInt( o.percent, 10 ) ||
+ ( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
+ direction = o.direction || "both",
+ origin = o.origin,
+ original = {
+ height: el.height(),
+ width: el.width(),
+ outerHeight: el.outerHeight(),
+ outerWidth: el.outerWidth()
+ },
+ factor = {
+ y: direction !== "horizontal" ? (percent / 100) : 1,
+ x: direction !== "vertical" ? (percent / 100) : 1
+ };
+
+ // We are going to pass this effect to the size effect:
+ options.effect = "size";
+ options.queue = false;
+ options.complete = done;
+
+ // Set default origin and restore for show/hide
+ if ( mode !== "effect" ) {
+ options.origin = origin || [ "middle", "center" ];
+ options.restore = true;
+ }
+
+ options.from = o.from || ( mode === "show" ? {
+ height: 0,
+ width: 0,
+ outerHeight: 0,
+ outerWidth: 0
+ } : original );
+ options.to = {
+ height: original.height * factor.y,
+ width: original.width * factor.x,
+ outerHeight: original.outerHeight * factor.y,
+ outerWidth: original.outerWidth * factor.x
+ };
+
+ // Fade option to support puff
+ if ( options.fade ) {
+ if ( mode === "show" ) {
+ options.from.opacity = 0;
+ options.to.opacity = 1;
+ }
+ if ( mode === "hide" ) {
+ options.from.opacity = 1;
+ options.to.opacity = 0;
+ }
+ }
+
+ // Animate
+ el.effect( options );
+
+};
+
+
+/*!
+ * jQuery UI Effects Puff 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/puff-effect/
+ */
+
+
+var effectPuff = $.effects.effect.puff = function( o, done ) {
+ var elem = $( this ),
+ mode = $.effects.setMode( elem, o.mode || "hide" ),
+ hide = mode === "hide",
+ percent = parseInt( o.percent, 10 ) || 150,
+ factor = percent / 100,
+ original = {
+ height: elem.height(),
+ width: elem.width(),
+ outerHeight: elem.outerHeight(),
+ outerWidth: elem.outerWidth()
+ };
+
+ $.extend( o, {
+ effect: "scale",
+ queue: false,
+ fade: true,
+ mode: mode,
+ complete: done,
+ percent: hide ? percent : 100,
+ from: hide ?
+ original :
+ {
+ height: original.height * factor,
+ width: original.width * factor,
+ outerHeight: original.outerHeight * factor,
+ outerWidth: original.outerWidth * factor
+ }
+ });
+
+ elem.effect( o );
+};
+
+
+/*!
+ * jQuery UI Effects Pulsate 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/pulsate-effect/
+ */
+
+
+var effectPulsate = $.effects.effect.pulsate = function( o, done ) {
+ var elem = $( this ),
+ mode = $.effects.setMode( elem, o.mode || "show" ),
+ show = mode === "show",
+ hide = mode === "hide",
+ showhide = ( show || mode === "hide" ),
+
+ // showing or hiding leaves of the "last" animation
+ anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+ duration = o.duration / anims,
+ animateTo = 0,
+ queue = elem.queue(),
+ queuelen = queue.length,
+ i;
+
+ if ( show || !elem.is(":visible")) {
+ elem.css( "opacity", 0 ).show();
+ animateTo = 1;
+ }
+
+ // anims - 1 opacity "toggles"
+ for ( i = 1; i < anims; i++ ) {
+ elem.animate({
+ opacity: animateTo
+ }, duration, o.easing );
+ animateTo = 1 - animateTo;
+ }
+
+ elem.animate({
+ opacity: animateTo
+ }, duration, o.easing);
+
+ elem.queue(function() {
+ if ( hide ) {
+ elem.hide();
+ }
+ done();
+ });
+
+ // We just queued up "anims" animations, we need to put them next in the queue
+ if ( queuelen > 1 ) {
+ queue.splice.apply( queue,
+ [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+ }
+ elem.dequeue();
+};
+
+
+/*!
+ * jQuery UI Effects Shake 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/shake-effect/
+ */
+
+
+var effectShake = $.effects.effect.shake = function( o, done ) {
+
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "effect" ),
+ direction = o.direction || "left",
+ distance = o.distance || 20,
+ times = o.times || 3,
+ anims = times * 2 + 1,
+ speed = Math.round( o.duration / anims ),
+ ref = (direction === "up" || direction === "down") ? "top" : "left",
+ positiveMotion = (direction === "up" || direction === "left"),
+ animation = {},
+ animation1 = {},
+ animation2 = {},
+ i,
+
+ // we will need to re-assemble the queue to stack our animations in place
+ queue = el.queue(),
+ queuelen = queue.length;
+
+ $.effects.save( el, props );
+ el.show();
+ $.effects.createWrapper( el );
+
+ // Animation
+ animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
+ animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
+ animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
+
+ // Animate
+ el.animate( animation, speed, o.easing );
+
+ // Shakes
+ for ( i = 1; i < times; i++ ) {
+ el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
+ }
+ el
+ .animate( animation1, speed, o.easing )
+ .animate( animation, speed / 2, o.easing )
+ .queue(function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ });
+
+ // inject all the animations we just queued to be first in line (after "inprogress")
+ if ( queuelen > 1) {
+ queue.splice.apply( queue,
+ [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+ }
+ el.dequeue();
+
+};
+
+
+/*!
+ * jQuery UI Effects Slide 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/slide-effect/
+ */
+
+
+var effectSlide = $.effects.effect.slide = function( o, done ) {
+
+ // Create element
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
+ mode = $.effects.setMode( el, o.mode || "show" ),
+ show = mode === "show",
+ direction = o.direction || "left",
+ ref = (direction === "up" || direction === "down") ? "top" : "left",
+ positiveMotion = (direction === "up" || direction === "left"),
+ distance,
+ animation = {};
+
+ // Adjust
+ $.effects.save( el, props );
+ el.show();
+ distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
+
+ $.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+
+ if ( show ) {
+ el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
+ }
+
+ // Animation
+ animation[ ref ] = ( show ?
+ ( positiveMotion ? "+=" : "-=") :
+ ( positiveMotion ? "-=" : "+=")) +
+ distance;
+
+ // Animate
+ el.animate( animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+};
+
+
+/*!
+ * jQuery UI Effects Transfer 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/transfer-effect/
+ */
+
+
+var effectTransfer = $.effects.effect.transfer = function( o, done ) {
+ var elem = $( this ),
+ target = $( o.to ),
+ targetFixed = target.css( "position" ) === "fixed",
+ body = $("body"),
+ fixTop = targetFixed ? body.scrollTop() : 0,
+ fixLeft = targetFixed ? body.scrollLeft() : 0,
+ endPosition = target.offset(),
+ animation = {
+ top: endPosition.top - fixTop,
+ left: endPosition.left - fixLeft,
+ height: target.innerHeight(),
+ width: target.innerWidth()
+ },
+ startPosition = elem.offset(),
+ transfer = $( "<div class='ui-effects-transfer'></div>" )
+ .appendTo( document.body )
+ .addClass( o.className )
+ .css({
+ top: startPosition.top - fixTop,
+ left: startPosition.left - fixLeft,
+ height: elem.innerHeight(),
+ width: elem.innerWidth(),
+ position: targetFixed ? "fixed" : "absolute"
+ })
+ .animate( animation, o.duration, o.easing, function() {
+ transfer.remove();
+ done();
+ });
+};
+
+
+/*!
+ * jQuery UI Progressbar 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/progressbar/
+ */
+
+
+var progressbar = $.widget( "ui.progressbar", {
+ version: "1.11.4",
+ options: {
+ max: 100,
+ value: 0,
+
+ change: null,
+ complete: null
+ },
+
+ min: 0,
+
+ _create: function() {
+ // Constrain initial value
+ this.oldValue = this.options.value = this._constrainedValue();
+
+ this.element
+ .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+ .attr({
+ // Only set static values, aria-valuenow and aria-valuemax are
+ // set inside _refreshValue()
+ role: "progressbar",
+ "aria-valuemin": this.min
+ });
+
+ this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
+ .appendTo( this.element );
+
+ this._refreshValue();
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-valuemin" )
+ .removeAttr( "aria-valuemax" )
+ .removeAttr( "aria-valuenow" );
+
+ this.valueDiv.remove();
+ },
+
+ value: function( newValue ) {
+ if ( newValue === undefined ) {
+ return this.options.value;
+ }
+
+ this.options.value = this._constrainedValue( newValue );
+ this._refreshValue();
+ },
+
+ _constrainedValue: function( newValue ) {
+ if ( newValue === undefined ) {
+ newValue = this.options.value;
+ }
+
+ this.indeterminate = newValue === false;
+
+ // sanitize value
+ if ( typeof newValue !== "number" ) {
+ newValue = 0;
+ }
+
+ return this.indeterminate ? false :
+ Math.min( this.options.max, Math.max( this.min, newValue ) );
+ },
+
+ _setOptions: function( options ) {
+ // Ensure "value" option is set after other values (like max)
+ var value = options.value;
+ delete options.value;
+
+ this._super( options );
+
+ this.options.value = this._constrainedValue( value );
+ this._refreshValue();
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "max" ) {
+ // Don't allow a max less than min
+ value = Math.max( this.min, value );
+ }
+ if ( key === "disabled" ) {
+ this.element
+ .toggleClass( "ui-state-disabled", !!value )
+ .attr( "aria-disabled", value );
+ }
+ this._super( key, value );
+ },
+
+ _percentage: function() {
+ return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
+ },
+
+ _refreshValue: function() {
+ var value = this.options.value,
+ percentage = this._percentage();
+
+ this.valueDiv
+ .toggle( this.indeterminate || value > this.min )
+ .toggleClass( "ui-corner-right", value === this.options.max )
+ .width( percentage.toFixed(0) + "%" );
+
+ this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
+
+ if ( this.indeterminate ) {
+ this.element.removeAttr( "aria-valuenow" );
+ if ( !this.overlayDiv ) {
+ this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
+ }
+ } else {
+ this.element.attr({
+ "aria-valuemax": this.options.max,
+ "aria-valuenow": value
+ });
+ if ( this.overlayDiv ) {
+ this.overlayDiv.remove();
+ this.overlayDiv = null;
+ }
+ }
+
+ if ( this.oldValue !== value ) {
+ this.oldValue = value;
+ this._trigger( "change" );
+ }
+ if ( value === this.options.max ) {
+ this._trigger( "complete" );
+ }
+ }
+});
+
+
+/*!
+ * jQuery UI Selectable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/selectable/
+ */
+
+
+var selectable = $.widget("ui.selectable", $.ui.mouse, {
+ version: "1.11.4",
+ options: {
+ appendTo: "body",
+ autoRefresh: true,
+ distance: 0,
+ filter: "*",
+ tolerance: "touch",
+
+ // callbacks
+ selected: null,
+ selecting: null,
+ start: null,
+ stop: null,
+ unselected: null,
+ unselecting: null
+ },
+ _create: function() {
+ var selectees,
+ that = this;
+
+ this.element.addClass("ui-selectable");
+
+ this.dragged = false;
+
+ // cache selectee children based on filter
+ this.refresh = function() {
+ selectees = $(that.options.filter, that.element[0]);
+ selectees.addClass("ui-selectee");
+ selectees.each(function() {
+ var $this = $(this),
+ pos = $this.offset();
+ $.data(this, "selectable-item", {
+ element: this,
+ $element: $this,
+ left: pos.left,
+ top: pos.top,
+ right: pos.left + $this.outerWidth(),
+ bottom: pos.top + $this.outerHeight(),
+ startselected: false,
+ selected: $this.hasClass("ui-selected"),
+ selecting: $this.hasClass("ui-selecting"),
+ unselecting: $this.hasClass("ui-unselecting")
+ });
+ });
+ };
+ this.refresh();
+
+ this.selectees = selectees.addClass("ui-selectee");
+
+ this._mouseInit();
+
+ this.helper = $("<div class='ui-selectable-helper'></div>");
+ },
+
+ _destroy: function() {
+ this.selectees
+ .removeClass("ui-selectee")
+ .removeData("selectable-item");
+ this.element
+ .removeClass("ui-selectable ui-selectable-disabled");
+ this._mouseDestroy();
+ },
+
+ _mouseStart: function(event) {
+ var that = this,
+ options = this.options;
+
+ this.opos = [ event.pageX, event.pageY ];
+
+ if (this.options.disabled) {
+ return;
+ }
+
+ this.selectees = $(options.filter, this.element[0]);
+
+ this._trigger("start", event);
+
+ $(options.appendTo).append(this.helper);
+ // position helper (lasso)
+ this.helper.css({
+ "left": event.pageX,
+ "top": event.pageY,
+ "width": 0,
+ "height": 0
+ });
+
+ if (options.autoRefresh) {
+ this.refresh();
+ }
+
+ this.selectees.filter(".ui-selected").each(function() {
+ var selectee = $.data(this, "selectable-item");
+ selectee.startselected = true;
+ if (!event.metaKey && !event.ctrlKey) {
+ selectee.$element.removeClass("ui-selected");
+ selectee.selected = false;
+ selectee.$element.addClass("ui-unselecting");
+ selectee.unselecting = true;
+ // selectable UNSELECTING callback
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ });
+
+ $(event.target).parents().addBack().each(function() {
+ var doSelect,
+ selectee = $.data(this, "selectable-item");
+ if (selectee) {
+ doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
+ selectee.$element
+ .removeClass(doSelect ? "ui-unselecting" : "ui-selected")
+ .addClass(doSelect ? "ui-selecting" : "ui-unselecting");
+ selectee.unselecting = !doSelect;
+ selectee.selecting = doSelect;
+ selectee.selected = doSelect;
+ // selectable (UN)SELECTING callback
+ if (doSelect) {
+ that._trigger("selecting", event, {
+ selecting: selectee.element
+ });
+ } else {
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ return false;
+ }
+ });
+
+ },
+
+ _mouseDrag: function(event) {
+
+ this.dragged = true;
+
+ if (this.options.disabled) {
+ return;
+ }
+
+ var tmp,
+ that = this,
+ options = this.options,
+ x1 = this.opos[0],
+ y1 = this.opos[1],
+ x2 = event.pageX,
+ y2 = event.pageY;
+
+ if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
+ if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
+ this.helper.css({ left: x1, top: y1, width: x2 - x1, height: y2 - y1 });
+
+ this.selectees.each(function() {
+ var selectee = $.data(this, "selectable-item"),
+ hit = false;
+
+ //prevent helper from being selected if appendTo: selectable
+ if (!selectee || selectee.element === that.element[0]) {
+ return;
+ }
+
+ if (options.tolerance === "touch") {
+ hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
+ } else if (options.tolerance === "fit") {
+ hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
+ }
+
+ if (hit) {
+ // SELECT
+ if (selectee.selected) {
+ selectee.$element.removeClass("ui-selected");
+ selectee.selected = false;
+ }
+ if (selectee.unselecting) {
+ selectee.$element.removeClass("ui-unselecting");
+ selectee.unselecting = false;
+ }
+ if (!selectee.selecting) {
+ selectee.$element.addClass("ui-selecting");
+ selectee.selecting = true;
+ // selectable SELECTING callback
+ that._trigger("selecting", event, {
+ selecting: selectee.element
+ });
+ }
+ } else {
+ // UNSELECT
+ if (selectee.selecting) {
+ if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
+ selectee.$element.removeClass("ui-selecting");
+ selectee.selecting = false;
+ selectee.$element.addClass("ui-selected");
+ selectee.selected = true;
+ } else {
+ selectee.$element.removeClass("ui-selecting");
+ selectee.selecting = false;
+ if (selectee.startselected) {
+ selectee.$element.addClass("ui-unselecting");
+ selectee.unselecting = true;
+ }
+ // selectable UNSELECTING callback
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ }
+ if (selectee.selected) {
+ if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
+ selectee.$element.removeClass("ui-selected");
+ selectee.selected = false;
+
+ selectee.$element.addClass("ui-unselecting");
+ selectee.unselecting = true;
+ // selectable UNSELECTING callback
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ }
+ }
+ });
+
+ return false;
+ },
+
+ _mouseStop: function(event) {
+ var that = this;
+
+ this.dragged = false;
+
+ $(".ui-unselecting", this.element[0]).each(function() {
+ var selectee = $.data(this, "selectable-item");
+ selectee.$element.removeClass("ui-unselecting");
+ selectee.unselecting = false;
+ selectee.startselected = false;
+ that._trigger("unselected", event, {
+ unselected: selectee.element
+ });
+ });
+ $(".ui-selecting", this.element[0]).each(function() {
+ var selectee = $.data(this, "selectable-item");
+ selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
+ selectee.selecting = false;
+ selectee.selected = true;
+ selectee.startselected = true;
+ that._trigger("selected", event, {
+ selected: selectee.element
+ });
+ });
+ this._trigger("stop", event);
+
+ this.helper.remove();
+
+ return false;
+ }
+
+});
+
+
+/*!
+ * jQuery UI Selectmenu 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/selectmenu
+ */
+
+
+var selectmenu = $.widget( "ui.selectmenu", {
+ version: "1.11.4",
+ defaultElement: "<select>",
+ options: {
+ appendTo: null,
+ disabled: null,
+ icons: {
+ button: "ui-icon-triangle-1-s"
+ },
+ position: {
+ my: "left top",
+ at: "left bottom",
+ collision: "none"
+ },
+ width: null,
+
+ // callbacks
+ change: null,
+ close: null,
+ focus: null,
+ open: null,
+ select: null
+ },
+
+ _create: function() {
+ var selectmenuId = this.element.uniqueId().attr( "id" );
+ this.ids = {
+ element: selectmenuId,
+ button: selectmenuId + "-button",
+ menu: selectmenuId + "-menu"
+ };
+
+ this._drawButton();
+ this._drawMenu();
+
+ if ( this.options.disabled ) {
+ this.disable();
+ }
+ },
+
+ _drawButton: function() {
+ var that = this;
+
+ // Associate existing label with the new button
+ this.label = $( "label[for='" + this.ids.element + "']" ).attr( "for", this.ids.button );
+ this._on( this.label, {
+ click: function( event ) {
+ this.button.focus();
+ event.preventDefault();
+ }
+ });
+
+ // Hide original select element
+ this.element.hide();
+
+ // Create button
+ this.button = $( "<span>", {
+ "class": "ui-selectmenu-button ui-widget ui-state-default ui-corner-all",
+ tabindex: this.options.disabled ? -1 : 0,
+ id: this.ids.button,
+ role: "combobox",
+ "aria-expanded": "false",
+ "aria-autocomplete": "list",
+ "aria-owns": this.ids.menu,
+ "aria-haspopup": "true"
+ })
+ .insertAfter( this.element );
+
+ $( "<span>", {
+ "class": "ui-icon " + this.options.icons.button
+ })
+ .prependTo( this.button );
+
+ this.buttonText = $( "<span>", {
+ "class": "ui-selectmenu-text"
+ })
+ .appendTo( this.button );
+
+ this._setText( this.buttonText, this.element.find( "option:selected" ).text() );
+ this._resizeButton();
+
+ this._on( this.button, this._buttonEvents );
+ this.button.one( "focusin", function() {
+
+ // Delay rendering the menu items until the button receives focus.
+ // The menu may have already been rendered via a programmatic open.
+ if ( !that.menuItems ) {
+ that._refreshMenu();
+ }
+ });
+ this._hoverable( this.button );
+ this._focusable( this.button );
+ },
+
+ _drawMenu: function() {
+ var that = this;
+
+ // Create menu
+ this.menu = $( "<ul>", {
+ "aria-hidden": "true",
+ "aria-labelledby": this.ids.button,
+ id: this.ids.menu
+ });
+
+ // Wrap menu
+ this.menuWrap = $( "<div>", {
+ "class": "ui-selectmenu-menu ui-front"
+ })
+ .append( this.menu )
+ .appendTo( this._appendTo() );
+
+ // Initialize menu widget
+ this.menuInstance = this.menu
+ .menu({
+ role: "listbox",
+ select: function( event, ui ) {
+ event.preventDefault();
+
+ // support: IE8
+ // If the item was selected via a click, the text selection
+ // will be destroyed in IE
+ that._setSelection();
+
+ that._select( ui.item.data( "ui-selectmenu-item" ), event );
+ },
+ focus: function( event, ui ) {
+ var item = ui.item.data( "ui-selectmenu-item" );
+
+ // Prevent inital focus from firing and check if its a newly focused item
+ if ( that.focusIndex != null && item.index !== that.focusIndex ) {
+ that._trigger( "focus", event, { item: item } );
+ if ( !that.isOpen ) {
+ that._select( item, event );
+ }
+ }
+ that.focusIndex = item.index;
+
+ that.button.attr( "aria-activedescendant",
+ that.menuItems.eq( item.index ).attr( "id" ) );
+ }
+ })
+ .menu( "instance" );
+
+ // Adjust menu styles to dropdown
+ this.menu
+ .addClass( "ui-corner-bottom" )
+ .removeClass( "ui-corner-all" );
+
+ // Don't close the menu on mouseleave
+ this.menuInstance._off( this.menu, "mouseleave" );
+
+ // Cancel the menu's collapseAll on document click
+ this.menuInstance._closeOnDocumentClick = function() {
+ return false;
+ };
+
+ // Selects often contain empty items, but never contain dividers
+ this.menuInstance._isDivider = function() {
+ return false;
+ };
+ },
+
+ refresh: function() {
+ this._refreshMenu();
+ this._setText( this.buttonText, this._getSelectedItem().text() );
+ if ( !this.options.width ) {
+ this._resizeButton();
+ }
+ },
+
+ _refreshMenu: function() {
+ this.menu.empty();
+
+ var item,
+ options = this.element.find( "option" );
+
+ if ( !options.length ) {
+ return;
+ }
+
+ this._parseOptions( options );
+ this._renderMenu( this.menu, this.items );
+
+ this.menuInstance.refresh();
+ this.menuItems = this.menu.find( "li" ).not( ".ui-selectmenu-optgroup" );
+
+ item = this._getSelectedItem();
+
+ // Update the menu to have the correct item focused
+ this.menuInstance.focus( null, item );
+ this._setAria( item.data( "ui-selectmenu-item" ) );
+
+ // Set disabled state
+ this._setOption( "disabled", this.element.prop( "disabled" ) );
+ },
+
+ open: function( event ) {
+ if ( this.options.disabled ) {
+ return;
+ }
+
+ // If this is the first time the menu is being opened, render the items
+ if ( !this.menuItems ) {
+ this._refreshMenu();
+ } else {
+
+ // Menu clears focus on close, reset focus to selected item
+ this.menu.find( ".ui-state-focus" ).removeClass( "ui-state-focus" );
+ this.menuInstance.focus( null, this._getSelectedItem() );
+ }
+
+ this.isOpen = true;
+ this._toggleAttr();
+ this._resizeMenu();
+ this._position();
+
+ this._on( this.document, this._documentClick );
+
+ this._trigger( "open", event );
+ },
+
+ _position: function() {
+ this.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );
+ },
+
+ close: function( event ) {
+ if ( !this.isOpen ) {
+ return;
+ }
+
+ this.isOpen = false;
+ this._toggleAttr();
+
+ this.range = null;
+ this._off( this.document );
+
+ this._trigger( "close", event );
+ },
+
+ widget: function() {
+ return this.button;
+ },
+
+ menuWidget: function() {
+ return this.menu;
+ },
+
+ _renderMenu: function( ul, items ) {
+ var that = this,
+ currentOptgroup = "";
+
+ $.each( items, function( index, item ) {
+ if ( item.optgroup !== currentOptgroup ) {
+ $( "<li>", {
+ "class": "ui-selectmenu-optgroup ui-menu-divider" +
+ ( item.element.parent( "optgroup" ).prop( "disabled" ) ?
+ " ui-state-disabled" :
+ "" ),
+ text: item.optgroup
+ })
+ .appendTo( ul );
+
+ currentOptgroup = item.optgroup;
+ }
+
+ that._renderItemData( ul, item );
+ });
+ },
+
+ _renderItemData: function( ul, item ) {
+ return this._renderItem( ul, item ).data( "ui-selectmenu-item", item );
+ },
+
+ _renderItem: function( ul, item ) {
+ var li = $( "<li>" );
+
+ if ( item.disabled ) {
+ li.addClass( "ui-state-disabled" );
+ }
+ this._setText( li, item.label );
+
+ return li.appendTo( ul );
+ },
+
+ _setText: function( element, value ) {
+ if ( value ) {
+ element.text( value );
+ } else {
+ element.html( " " );
+ }
+ },
+
+ _move: function( direction, event ) {
+ var item, next,
+ filter = ".ui-menu-item";
+
+ if ( this.isOpen ) {
+ item = this.menuItems.eq( this.focusIndex );
+ } else {
+ item = this.menuItems.eq( this.element[ 0 ].selectedIndex );
+ filter += ":not(.ui-state-disabled)";
+ }
+
+ if ( direction === "first" || direction === "last" ) {
+ next = item[ direction === "first" ? "prevAll" : "nextAll" ]( filter ).eq( -1 );
+ } else {
+ next = item[ direction + "All" ]( filter ).eq( 0 );
+ }
+
+ if ( next.length ) {
+ this.menuInstance.focus( event, next );
+ }
+ },
+
+ _getSelectedItem: function() {
+ return this.menuItems.eq( this.element[ 0 ].selectedIndex );
+ },
+
+ _toggle: function( event ) {
+ this[ this.isOpen ? "close" : "open" ]( event );
+ },
+
+ _setSelection: function() {
+ var selection;
+
+ if ( !this.range ) {
+ return;
+ }
+
+ if ( window.getSelection ) {
+ selection = window.getSelection();
+ selection.removeAllRanges();
+ selection.addRange( this.range );
+
+ // support: IE8
+ } else {
+ this.range.select();
+ }
+
+ // support: IE
+ // Setting the text selection kills the button focus in IE, but
+ // restoring the focus doesn't kill the selection.
+ this.button.focus();
+ },
+
+ _documentClick: {
+ mousedown: function( event ) {
+ if ( !this.isOpen ) {
+ return;
+ }
+
+ if ( !$( event.target ).closest( ".ui-selectmenu-menu, #" + this.ids.button ).length ) {
+ this.close( event );
+ }
+ }
+ },
+
+ _buttonEvents: {
+
+ // Prevent text selection from being reset when interacting with the selectmenu (#10144)
+ mousedown: function() {
+ var selection;
+
+ if ( window.getSelection ) {
+ selection = window.getSelection();
+ if ( selection.rangeCount ) {
+ this.range = selection.getRangeAt( 0 );
+ }
+
+ // support: IE8
+ } else {
+ this.range = document.selection.createRange();
+ }
+ },
+
+ click: function( event ) {
+ this._setSelection();
+ this._toggle( event );
+ },
+
+ keydown: function( event ) {
+ var preventDefault = true;
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.TAB:
+ case $.ui.keyCode.ESCAPE:
+ this.close( event );
+ preventDefault = false;
+ break;
+ case $.ui.keyCode.ENTER:
+ if ( this.isOpen ) {
+ this._selectFocusedItem( event );
+ }
+ break;
+ case $.ui.keyCode.UP:
+ if ( event.altKey ) {
+ this._toggle( event );
+ } else {
+ this._move( "prev", event );
+ }
+ break;
+ case $.ui.keyCode.DOWN:
+ if ( event.altKey ) {
+ this._toggle( event );
+ } else {
+ this._move( "next", event );
+ }
+ break;
+ case $.ui.keyCode.SPACE:
+ if ( this.isOpen ) {
+ this._selectFocusedItem( event );
+ } else {
+ this._toggle( event );
+ }
+ break;
+ case $.ui.keyCode.LEFT:
+ this._move( "prev", event );
+ break;
+ case $.ui.keyCode.RIGHT:
+ this._move( "next", event );
+ break;
+ case $.ui.keyCode.HOME:
+ case $.ui.keyCode.PAGE_UP:
+ this._move( "first", event );
+ break;
+ case $.ui.keyCode.END:
+ case $.ui.keyCode.PAGE_DOWN:
+ this._move( "last", event );
+ break;
+ default:
+ this.menu.trigger( event );
+ preventDefault = false;
+ }
+
+ if ( preventDefault ) {
+ event.preventDefault();
+ }
+ }
+ },
+
+ _selectFocusedItem: function( event ) {
+ var item = this.menuItems.eq( this.focusIndex );
+ if ( !item.hasClass( "ui-state-disabled" ) ) {
+ this._select( item.data( "ui-selectmenu-item" ), event );
+ }
+ },
+
+ _select: function( item, event ) {
+ var oldIndex = this.element[ 0 ].selectedIndex;
+
+ // Change native select element
+ this.element[ 0 ].selectedIndex = item.index;
+ this._setText( this.buttonText, item.label );
+ this._setAria( item );
+ this._trigger( "select", event, { item: item } );
+
+ if ( item.index !== oldIndex ) {
+ this._trigger( "change", event, { item: item } );
+ }
+
+ this.close( event );
+ },
+
+ _setAria: function( item ) {
+ var id = this.menuItems.eq( item.index ).attr( "id" );
+
+ this.button.attr({
+ "aria-labelledby": id,
+ "aria-activedescendant": id
+ });
+ this.menu.attr( "aria-activedescendant", id );
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "icons" ) {
+ this.button.find( "span.ui-icon" )
+ .removeClass( this.options.icons.button )
+ .addClass( value.button );
+ }
+
+ this._super( key, value );
+
+ if ( key === "appendTo" ) {
+ this.menuWrap.appendTo( this._appendTo() );
+ }
+
+ if ( key === "disabled" ) {
+ this.menuInstance.option( "disabled", value );
+ this.button
+ .toggleClass( "ui-state-disabled", value )
+ .attr( "aria-disabled", value );
+
+ this.element.prop( "disabled", value );
+ if ( value ) {
+ this.button.attr( "tabindex", -1 );
+ this.close();
+ } else {
+ this.button.attr( "tabindex", 0 );
+ }
+ }
+
+ if ( key === "width" ) {
+ this._resizeButton();
+ }
+ },
+
+ _appendTo: function() {
+ var element = this.options.appendTo;
+
+ if ( element ) {
+ element = element.jquery || element.nodeType ?
+ $( element ) :
+ this.document.find( element ).eq( 0 );
+ }
+
+ if ( !element || !element[ 0 ] ) {
+ element = this.element.closest( ".ui-front" );
+ }
+
+ if ( !element.length ) {
+ element = this.document[ 0 ].body;
+ }
+
+ return element;
+ },
+
+ _toggleAttr: function() {
+ this.button
+ .toggleClass( "ui-corner-top", this.isOpen )
+ .toggleClass( "ui-corner-all", !this.isOpen )
+ .attr( "aria-expanded", this.isOpen );
+ this.menuWrap.toggleClass( "ui-selectmenu-open", this.isOpen );
+ this.menu.attr( "aria-hidden", !this.isOpen );
+ },
+
+ _resizeButton: function() {
+ var width = this.options.width;
+
+ if ( !width ) {
+ width = this.element.show().outerWidth();
+ this.element.hide();
+ }
+
+ this.button.outerWidth( width );
+ },
+
+ _resizeMenu: function() {
+ this.menu.outerWidth( Math.max(
+ this.button.outerWidth(),
+
+ // support: IE10
+ // IE10 wraps long text (possibly a rounding bug)
+ // so we add 1px to avoid the wrapping
+ this.menu.width( "" ).outerWidth() + 1
+ ) );
+ },
+
+ _getCreateOptions: function() {
+ return { disabled: this.element.prop( "disabled" ) };
+ },
+
+ _parseOptions: function( options ) {
+ var data = [];
+ options.each(function( index, item ) {
+ var option = $( item ),
+ optgroup = option.parent( "optgroup" );
+ data.push({
+ element: option,
+ index: index,
+ value: option.val(),
+ label: option.text(),
+ optgroup: optgroup.attr( "label" ) || "",
+ disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )
+ });
+ });
+ this.items = data;
+ },
+
+ _destroy: function() {
+ this.menuWrap.remove();
+ this.button.remove();
+ this.element.show();
+ this.element.removeUniqueId();
+ this.label.attr( "for", this.ids.element );
+ }
+});
+
+
+/*!
+ * jQuery UI Slider 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/slider/
+ */
+
+
+var slider = $.widget( "ui.slider", $.ui.mouse, {
+ version: "1.11.4",
+ widgetEventPrefix: "slide",
+
+ options: {
+ animate: false,
+ distance: 0,
+ max: 100,
+ min: 0,
+ orientation: "horizontal",
+ range: false,
+ step: 1,
+ value: 0,
+ values: null,
+
+ // callbacks
+ change: null,
+ slide: null,
+ start: null,
+ stop: null
+ },
+
+ // number of pages in a slider
+ // (how many times can you page up/down to go through the whole range)
+ numPages: 5,
+
+ _create: function() {
+ this._keySliding = false;
+ this._mouseSliding = false;
+ this._animateOff = true;
+ this._handleIndex = null;
+ this._detectOrientation();
+ this._mouseInit();
+ this._calculateNewMax();
+
+ this.element
+ .addClass( "ui-slider" +
+ " ui-slider-" + this.orientation +
+ " ui-widget" +
+ " ui-widget-content" +
+ " ui-corner-all");
+
+ this._refresh();
+ this._setOption( "disabled", this.options.disabled );
+
+ this._animateOff = false;
+ },
+
+ _refresh: function() {
+ this._createRange();
+ this._createHandles();
+ this._setupEvents();
+ this._refreshValue();
+ },
+
+ _createHandles: function() {
+ var i, handleCount,
+ options = this.options,
+ existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
+ handle = "<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",
+ handles = [];
+
+ handleCount = ( options.values && options.values.length ) || 1;
+
+ if ( existingHandles.length > handleCount ) {
+ existingHandles.slice( handleCount ).remove();
+ existingHandles = existingHandles.slice( 0, handleCount );
+ }
+
+ for ( i = existingHandles.length; i < handleCount; i++ ) {
+ handles.push( handle );
+ }
+
+ this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
+
+ this.handle = this.handles.eq( 0 );
+
+ this.handles.each(function( i ) {
+ $( this ).data( "ui-slider-handle-index", i );
+ });
+ },
+
+ _createRange: function() {
+ var options = this.options,
+ classes = "";
+
+ if ( options.range ) {
+ if ( options.range === true ) {
+ if ( !options.values ) {
+ options.values = [ this._valueMin(), this._valueMin() ];
+ } else if ( options.values.length && options.values.length !== 2 ) {
+ options.values = [ options.values[0], options.values[0] ];
+ } else if ( $.isArray( options.values ) ) {
+ options.values = options.values.slice(0);
+ }
+ }
+
+ if ( !this.range || !this.range.length ) {
+ this.range = $( "<div></div>" )
+ .appendTo( this.element );
+
+ classes = "ui-slider-range" +
+ // note: this isn't the most fittingly semantic framework class for this element,
+ // but worked best visually with a variety of themes
+ " ui-widget-header ui-corner-all";
+ } else {
+ this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
+ // Handle range switching from true to min/max
+ .css({
+ "left": "",
+ "bottom": ""
+ });
+ }
+
+ this.range.addClass( classes +
+ ( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
+ } else {
+ if ( this.range ) {
+ this.range.remove();
+ }
+ this.range = null;
+ }
+ },
+
+ _setupEvents: function() {
+ this._off( this.handles );
+ this._on( this.handles, this._handleEvents );
+ this._hoverable( this.handles );
+ this._focusable( this.handles );
+ },
+
+ _destroy: function() {
+ this.handles.remove();
+ if ( this.range ) {
+ this.range.remove();
+ }
+
+ this.element
+ .removeClass( "ui-slider" +
+ " ui-slider-horizontal" +
+ " ui-slider-vertical" +
+ " ui-widget" +
+ " ui-widget-content" +
+ " ui-corner-all" );
+
+ this._mouseDestroy();
+ },
+
+ _mouseCapture: function( event ) {
+ var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
+ that = this,
+ o = this.options;
+
+ if ( o.disabled ) {
+ return false;
+ }
+
+ this.elementSize = {
+ width: this.element.outerWidth(),
+ height: this.element.outerHeight()
+ };
+ this.elementOffset = this.element.offset();
+
+ position = { x: event.pageX, y: event.pageY };
+ normValue = this._normValueFromMouse( position );
+ distance = this._valueMax() - this._valueMin() + 1;
+ this.handles.each(function( i ) {
+ var thisDistance = Math.abs( normValue - that.values(i) );
+ if (( distance > thisDistance ) ||
+ ( distance === thisDistance &&
+ (i === that._lastChangedValue || that.values(i) === o.min ))) {
+ distance = thisDistance;
+ closestHandle = $( this );
+ index = i;
+ }
+ });
+
+ allowed = this._start( event, index );
+ if ( allowed === false ) {
+ return false;
+ }
+ this._mouseSliding = true;
+
+ this._handleIndex = index;
+
+ closestHandle
+ .addClass( "ui-state-active" )
+ .focus();
+
+ offset = closestHandle.offset();
+ mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
+ this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+ left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+ top: event.pageY - offset.top -
+ ( closestHandle.height() / 2 ) -
+ ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
+ ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
+ ( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
+ };
+
+ if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+ this._slide( event, index, normValue );
+ }
+ this._animateOff = true;
+ return true;
+ },
+
+ _mouseStart: function() {
+ return true;
+ },
+
+ _mouseDrag: function( event ) {
+ var position = { x: event.pageX, y: event.pageY },
+ normValue = this._normValueFromMouse( position );
+
+ this._slide( event, this._handleIndex, normValue );
+
+ return false;
+ },
+
+ _mouseStop: function( event ) {
+ this.handles.removeClass( "ui-state-active" );
+ this._mouseSliding = false;
+
+ this._stop( event, this._handleIndex );
+ this._change( event, this._handleIndex );
+
+ this._handleIndex = null;
+ this._clickOffset = null;
+ this._animateOff = false;
+
+ return false;
+ },
+
+ _detectOrientation: function() {
+ this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+ },
+
+ _normValueFromMouse: function( position ) {
+ var pixelTotal,
+ pixelMouse,
+ percentMouse,
+ valueTotal,
+ valueMouse;
+
+ if ( this.orientation === "horizontal" ) {
+ pixelTotal = this.elementSize.width;
+ pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
+ } else {
+ pixelTotal = this.elementSize.height;
+ pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
+ }
+
+ percentMouse = ( pixelMouse / pixelTotal );
+ if ( percentMouse > 1 ) {
+ percentMouse = 1;
+ }
+ if ( percentMouse < 0 ) {
+ percentMouse = 0;
+ }
+ if ( this.orientation === "vertical" ) {
+ percentMouse = 1 - percentMouse;
+ }
+
+ valueTotal = this._valueMax() - this._valueMin();
+ valueMouse = this._valueMin() + percentMouse * valueTotal;
+
+ return this._trimAlignValue( valueMouse );
+ },
+
+ _start: function( event, index ) {
+ var uiHash = {
+ handle: this.handles[ index ],
+ value: this.value()
+ };
+ if ( this.options.values && this.options.values.length ) {
+ uiHash.value = this.values( index );
+ uiHash.values = this.values();
+ }
+ return this._trigger( "start", event, uiHash );
+ },
+
+ _slide: function( event, index, newVal ) {
+ var otherVal,
+ newValues,
+ allowed;
+
+ if ( this.options.values && this.options.values.length ) {
+ otherVal = this.values( index ? 0 : 1 );
+
+ if ( ( this.options.values.length === 2 && this.options.range === true ) &&
+ ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
+ ) {
+ newVal = otherVal;
+ }
+
+ if ( newVal !== this.values( index ) ) {
+ newValues = this.values();
+ newValues[ index ] = newVal;
+ // A slide can be canceled by returning false from the slide callback
+ allowed = this._trigger( "slide", event, {
+ handle: this.handles[ index ],
+ value: newVal,
+ values: newValues
+ } );
+ otherVal = this.values( index ? 0 : 1 );
+ if ( allowed !== false ) {
+ this.values( index, newVal );
+ }
+ }
+ } else {
+ if ( newVal !== this.value() ) {
+ // A slide can be canceled by returning false from the slide callback
+ allowed = this._trigger( "slide", event, {
+ handle: this.handles[ index ],
+ value: newVal
+ } );
+ if ( allowed !== false ) {
+ this.value( newVal );
+ }
+ }
+ }
+ },
+
+ _stop: function( event, index ) {
+ var uiHash = {
+ handle: this.handles[ index ],
+ value: this.value()
+ };
+ if ( this.options.values && this.options.values.length ) {
+ uiHash.value = this.values( index );
+ uiHash.values = this.values();
+ }
+
+ this._trigger( "stop", event, uiHash );
+ },
+
+ _change: function( event, index ) {
+ if ( !this._keySliding && !this._mouseSliding ) {
+ var uiHash = {
+ handle: this.handles[ index ],
+ value: this.value()
+ };
+ if ( this.options.values && this.options.values.length ) {
+ uiHash.value = this.values( index );
+ uiHash.values = this.values();
+ }
+
+ //store the last changed value index for reference when handles overlap
+ this._lastChangedValue = index;
+
+ this._trigger( "change", event, uiHash );
+ }
+ },
+
+ value: function( newValue ) {
+ if ( arguments.length ) {
+ this.options.value = this._trimAlignValue( newValue );
+ this._refreshValue();
+ this._change( null, 0 );
+ return;
+ }
+
+ return this._value();
+ },
+
+ values: function( index, newValue ) {
+ var vals,
+ newValues,
+ i;
+
+ if ( arguments.length > 1 ) {
+ this.options.values[ index ] = this._trimAlignValue( newValue );
+ this._refreshValue();
+ this._change( null, index );
+ return;
+ }
+
+ if ( arguments.length ) {
+ if ( $.isArray( arguments[ 0 ] ) ) {
+ vals = this.options.values;
+ newValues = arguments[ 0 ];
+ for ( i = 0; i < vals.length; i += 1 ) {
+ vals[ i ] = this._trimAlignValue( newValues[ i ] );
+ this._change( null, i );
+ }
+ this._refreshValue();
+ } else {
+ if ( this.options.values && this.options.values.length ) {
+ return this._values( index );
+ } else {
+ return this.value();
+ }
+ }
+ } else {
+ return this._values();
+ }
+ },
+
+ _setOption: function( key, value ) {
+ var i,
+ valsLength = 0;
+
+ if ( key === "range" && this.options.range === true ) {
+ if ( value === "min" ) {
+ this.options.value = this._values( 0 );
+ this.options.values = null;
+ } else if ( value === "max" ) {
+ this.options.value = this._values( this.options.values.length - 1 );
+ this.options.values = null;
+ }
+ }
+
+ if ( $.isArray( this.options.values ) ) {
+ valsLength = this.options.values.length;
+ }
+
+ if ( key === "disabled" ) {
+ this.element.toggleClass( "ui-state-disabled", !!value );
+ }
+
+ this._super( key, value );
+
+ switch ( key ) {
+ case "orientation":
+ this._detectOrientation();
+ this.element
+ .removeClass( "ui-slider-horizontal ui-slider-vertical" )
+ .addClass( "ui-slider-" + this.orientation );
+ this._refreshValue();
+
+ // Reset positioning from previous orientation
+ this.handles.css( value === "horizontal" ? "bottom" : "left", "" );
+ break;
+ case "value":
+ this._animateOff = true;
+ this._refreshValue();
+ this._change( null, 0 );
+ this._animateOff = false;
+ break;
+ case "values":
+ this._animateOff = true;
+ this._refreshValue();
+ for ( i = 0; i < valsLength; i += 1 ) {
+ this._change( null, i );
+ }
+ this._animateOff = false;
+ break;
+ case "step":
+ case "min":
+ case "max":
+ this._animateOff = true;
+ this._calculateNewMax();
+ this._refreshValue();
+ this._animateOff = false;
+ break;
+ case "range":
+ this._animateOff = true;
+ this._refresh();
+ this._animateOff = false;
+ break;
+ }
+ },
+
+ //internal value getter
+ // _value() returns value trimmed by min and max, aligned by step
+ _value: function() {
+ var val = this.options.value;
+ val = this._trimAlignValue( val );
+
+ return val;
+ },
+
+ //internal values getter
+ // _values() returns array of values trimmed by min and max, aligned by step
+ // _values( index ) returns single value trimmed by min and max, aligned by step
+ _values: function( index ) {
+ var val,
+ vals,
+ i;
+
+ if ( arguments.length ) {
+ val = this.options.values[ index ];
+ val = this._trimAlignValue( val );
+
+ return val;
+ } else if ( this.options.values && this.options.values.length ) {
+ // .slice() creates a copy of the array
+ // this copy gets trimmed by min and max and then returned
+ vals = this.options.values.slice();
+ for ( i = 0; i < vals.length; i += 1) {
+ vals[ i ] = this._trimAlignValue( vals[ i ] );
+ }
+
+ return vals;
+ } else {
+ return [];
+ }
+ },
+
+ // returns the step-aligned value that val is closest to, between (inclusive) min and max
+ _trimAlignValue: function( val ) {
+ if ( val <= this._valueMin() ) {
+ return this._valueMin();
+ }
+ if ( val >= this._valueMax() ) {
+ return this._valueMax();
+ }
+ var step = ( this.options.step > 0 ) ? this.options.step : 1,
+ valModStep = (val - this._valueMin()) % step,
+ alignValue = val - valModStep;
+
+ if ( Math.abs(valModStep) * 2 >= step ) {
+ alignValue += ( valModStep > 0 ) ? step : ( -step );
+ }
+
+ // Since JavaScript has problems with large floats, round
+ // the final value to 5 digits after the decimal point (see #4124)
+ return parseFloat( alignValue.toFixed(5) );
+ },
+
+ _calculateNewMax: function() {
+ var max = this.options.max,
+ min = this._valueMin(),
+ step = this.options.step,
+ aboveMin = Math.floor( ( +( max - min ).toFixed( this._precision() ) ) / step ) * step;
+ max = aboveMin + min;
+ this.max = parseFloat( max.toFixed( this._precision() ) );
+ },
+
+ _precision: function() {
+ var precision = this._precisionOf( this.options.step );
+ if ( this.options.min !== null ) {
+ precision = Math.max( precision, this._precisionOf( this.options.min ) );
+ }
+ return precision;
+ },
+
+ _precisionOf: function( num ) {
+ var str = num.toString(),
+ decimal = str.indexOf( "." );
+ return decimal === -1 ? 0 : str.length - decimal - 1;
+ },
+
+ _valueMin: function() {
+ return this.options.min;
+ },
+
+ _valueMax: function() {
+ return this.max;
+ },
+
+ _refreshValue: function() {
+ var lastValPercent, valPercent, value, valueMin, valueMax,
+ oRange = this.options.range,
+ o = this.options,
+ that = this,
+ animate = ( !this._animateOff ) ? o.animate : false,
+ _set = {};
+
+ if ( this.options.values && this.options.values.length ) {
+ this.handles.each(function( i ) {
+ valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
+ _set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+ $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+ if ( that.options.range === true ) {
+ if ( that.orientation === "horizontal" ) {
+ if ( i === 0 ) {
+ that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
+ }
+ if ( i === 1 ) {
+ that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ } else {
+ if ( i === 0 ) {
+ that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
+ }
+ if ( i === 1 ) {
+ that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ }
+ }
+ lastValPercent = valPercent;
+ });
+ } else {
+ value = this.value();
+ valueMin = this._valueMin();
+ valueMax = this._valueMax();
+ valPercent = ( valueMax !== valueMin ) ?
+ ( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+ 0;
+ _set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+ this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+
+ if ( oRange === "min" && this.orientation === "horizontal" ) {
+ this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
+ }
+ if ( oRange === "max" && this.orientation === "horizontal" ) {
+ this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ if ( oRange === "min" && this.orientation === "vertical" ) {
+ this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
+ }
+ if ( oRange === "max" && this.orientation === "vertical" ) {
+ this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ }
+ },
+
+ _handleEvents: {
+ keydown: function( event ) {
+ var allowed, curVal, newVal, step,
+ index = $( event.target ).data( "ui-slider-handle-index" );
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.HOME:
+ case $.ui.keyCode.END:
+ case $.ui.keyCode.PAGE_UP:
+ case $.ui.keyCode.PAGE_DOWN:
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.RIGHT:
+ case $.ui.keyCode.DOWN:
+ case $.ui.keyCode.LEFT:
+ event.preventDefault();
+ if ( !this._keySliding ) {
+ this._keySliding = true;
+ $( event.target ).addClass( "ui-state-active" );
+ allowed = this._start( event, index );
+ if ( allowed === false ) {
+ return;
+ }
+ }
+ break;
+ }
+
+ step = this.options.step;
+ if ( this.options.values && this.options.values.length ) {
+ curVal = newVal = this.values( index );
+ } else {
+ curVal = newVal = this.value();
+ }
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.HOME:
+ newVal = this._valueMin();
+ break;
+ case $.ui.keyCode.END:
+ newVal = this._valueMax();
+ break;
+ case $.ui.keyCode.PAGE_UP:
+ newVal = this._trimAlignValue(
+ curVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )
+ );
+ break;
+ case $.ui.keyCode.PAGE_DOWN:
+ newVal = this._trimAlignValue(
+ curVal - ( (this._valueMax() - this._valueMin()) / this.numPages ) );
+ break;
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.RIGHT:
+ if ( curVal === this._valueMax() ) {
+ return;
+ }
+ newVal = this._trimAlignValue( curVal + step );
+ break;
+ case $.ui.keyCode.DOWN:
+ case $.ui.keyCode.LEFT:
+ if ( curVal === this._valueMin() ) {
+ return;
+ }
+ newVal = this._trimAlignValue( curVal - step );
+ break;
+ }
+
+ this._slide( event, index, newVal );
+ },
+ keyup: function( event ) {
+ var index = $( event.target ).data( "ui-slider-handle-index" );
+
+ if ( this._keySliding ) {
+ this._keySliding = false;
+ this._stop( event, index );
+ this._change( event, index );
+ $( event.target ).removeClass( "ui-state-active" );
+ }
+ }
+ }
+});
+
+
+/*!
+ * jQuery UI Sortable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/sortable/
+ */
+
+
+var sortable = $.widget("ui.sortable", $.ui.mouse, {
+ version: "1.11.4",
+ widgetEventPrefix: "sort",
+ ready: false,
+ options: {
+ appendTo: "parent",
+ axis: false,
+ connectWith: false,
+ containment: false,
+ cursor: "auto",
+ cursorAt: false,
+ dropOnEmpty: true,
+ forcePlaceholderSize: false,
+ forceHelperSize: false,
+ grid: false,
+ handle: false,
+ helper: "original",
+ items: "> *",
+ opacity: false,
+ placeholder: false,
+ revert: false,
+ scroll: true,
+ scrollSensitivity: 20,
+ scrollSpeed: 20,
+ scope: "default",
+ tolerance: "intersect",
+ zIndex: 1000,
+
+ // callbacks
+ activate: null,
+ beforeStop: null,
+ change: null,
+ deactivate: null,
+ out: null,
+ over: null,
+ receive: null,
+ remove: null,
+ sort: null,
+ start: null,
+ stop: null,
+ update: null
+ },
+
+ _isOverAxis: function( x, reference, size ) {
+ return ( x >= reference ) && ( x < ( reference + size ) );
+ },
+
+ _isFloating: function( item ) {
+ return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
+ },
+
+ _create: function() {
+ this.containerCache = {};
+ this.element.addClass("ui-sortable");
+
+ //Get the items
+ this.refresh();
+
+ //Let's determine the parent's offset
+ this.offset = this.element.offset();
+
+ //Initialize mouse events for interaction
+ this._mouseInit();
+
+ this._setHandleClassName();
+
+ //We're ready to go
+ this.ready = true;
+
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+
+ if ( key === "handle" ) {
+ this._setHandleClassName();
+ }
+ },
+
+ _setHandleClassName: function() {
+ this.element.find( ".ui-sortable-handle" ).removeClass( "ui-sortable-handle" );
+ $.each( this.items, function() {
+ ( this.instance.options.handle ?
+ this.item.find( this.instance.options.handle ) : this.item )
+ .addClass( "ui-sortable-handle" );
+ });
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-sortable ui-sortable-disabled" )
+ .find( ".ui-sortable-handle" )
+ .removeClass( "ui-sortable-handle" );
+ this._mouseDestroy();
+
+ for ( var i = this.items.length - 1; i >= 0; i-- ) {
+ this.items[i].item.removeData(this.widgetName + "-item");
+ }
+
+ return this;
+ },
+
+ _mouseCapture: function(event, overrideHandle) {
+ var currentItem = null,
+ validHandle = false,
+ that = this;
+
+ if (this.reverting) {
+ return false;
+ }
+
+ if(this.options.disabled || this.options.type === "static") {
+ return false;
+ }
+
+ //We have to refresh the items data once first
+ this._refreshItems(event);
+
+ //Find out if the clicked node (or one of its parents) is a actual item in this.items
+ $(event.target).parents().each(function() {
+ if($.data(this, that.widgetName + "-item") === that) {
+ currentItem = $(this);
+ return false;
+ }
+ });
+ if($.data(event.target, that.widgetName + "-item") === that) {
+ currentItem = $(event.target);
+ }
+
+ if(!currentItem) {
+ return false;
+ }
+ if(this.options.handle && !overrideHandle) {
+ $(this.options.handle, currentItem).find("*").addBack().each(function() {
+ if(this === event.target) {
+ validHandle = true;
+ }
+ });
+ if(!validHandle) {
+ return false;
+ }
+ }
+
+ this.currentItem = currentItem;
+ this._removeCurrentsFromItems();
+ return true;
+
+ },
+
+ _mouseStart: function(event, overrideHandle, noActivation) {
+
+ var i, body,
+ o = this.options;
+
+ this.currentContainer = this;
+
+ //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
+ this.refreshPositions();
+
+ //Create and append the visible helper
+ this.helper = this._createHelper(event);
+
+ //Cache the helper size
+ this._cacheHelperProportions();
+
+ /*
+ * - Position generation -
+ * This block generates everything position related - it's the core of draggables.
+ */
+
+ //Cache the margins of the original element
+ this._cacheMargins();
+
+ //Get the next scrolling parent
+ this.scrollParent = this.helper.scrollParent();
+
+ //The element's absolute position on the page minus margins
+ this.offset = this.currentItem.offset();
+ this.offset = {
+ top: this.offset.top - this.margins.top,
+ left: this.offset.left - this.margins.left
+ };
+
+ $.extend(this.offset, {
+ click: { //Where the click happened, relative to the element
+ left: event.pageX - this.offset.left,
+ top: event.pageY - this.offset.top
+ },
+ parent: this._getParentOffset(),
+ relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+ });
+
+ // Only after we got the offset, we can change the helper's position to absolute
+ // TODO: Still need to figure out a way to make relative sorting possible
+ this.helper.css("position", "absolute");
+ this.cssPosition = this.helper.css("position");
+
+ //Generate the original position
+ this.originalPosition = this._generatePosition(event);
+ this.originalPageX = event.pageX;
+ this.originalPageY = event.pageY;
+
+ //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+ (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+ //Cache the former DOM position
+ this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
+
+ //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
+ if(this.helper[0] !== this.currentItem[0]) {
+ this.currentItem.hide();
+ }
+
+ //Create the placeholder
+ this._createPlaceholder();
+
+ //Set a containment if given in the options
+ if(o.containment) {
+ this._setContainment();
+ }
+
+ if( o.cursor && o.cursor !== "auto" ) { // cursor option
+ body = this.document.find( "body" );
+
+ // support: IE
+ this.storedCursor = body.css( "cursor" );
+ body.css( "cursor", o.cursor );
+
+ this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
+ }
+
+ if(o.opacity) { // opacity option
+ if (this.helper.css("opacity")) {
+ this._storedOpacity = this.helper.css("opacity");
+ }
+ this.helper.css("opacity", o.opacity);
+ }
+
+ if(o.zIndex) { // zIndex option
+ if (this.helper.css("zIndex")) {
+ this._storedZIndex = this.helper.css("zIndex");
+ }
+ this.helper.css("zIndex", o.zIndex);
+ }
+
+ //Prepare scrolling
+ if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
+ this.overflowOffset = this.scrollParent.offset();
+ }
+
+ //Call callbacks
+ this._trigger("start", event, this._uiHash());
+
+ //Recache the helper size
+ if(!this._preserveHelperProportions) {
+ this._cacheHelperProportions();
+ }
+
+
+ //Post "activate" events to possible containers
+ if( !noActivation ) {
+ for ( i = this.containers.length - 1; i >= 0; i-- ) {
+ this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
+ }
+ }
+
+ //Prepare possible droppables
+ if($.ui.ddmanager) {
+ $.ui.ddmanager.current = this;
+ }
+
+ if ($.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+
+ this.dragging = true;
+
+ this.helper.addClass("ui-sortable-helper");
+ this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+ return true;
+
+ },
+
+ _mouseDrag: function(event) {
+ var i, item, itemElement, intersection,
+ o = this.options,
+ scrolled = false;
+
+ //Compute the helpers position
+ this.position = this._generatePosition(event);
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ if (!this.lastPositionAbs) {
+ this.lastPositionAbs = this.positionAbs;
+ }
+
+ //Do scrolling
+ if(this.options.scroll) {
+ if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
+
+ if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+ } else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+ }
+
+ if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+ } else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+ }
+
+ } else {
+
+ if(event.pageY - this.document.scrollTop() < o.scrollSensitivity) {
+ scrolled = this.document.scrollTop(this.document.scrollTop() - o.scrollSpeed);
+ } else if(this.window.height() - (event.pageY - this.document.scrollTop()) < o.scrollSensitivity) {
+ scrolled = this.document.scrollTop(this.document.scrollTop() + o.scrollSpeed);
+ }
+
+ if(event.pageX - this.document.scrollLeft() < o.scrollSensitivity) {
+ scrolled = this.document.scrollLeft(this.document.scrollLeft() - o.scrollSpeed);
+ } else if(this.window.width() - (event.pageX - this.document.scrollLeft()) < o.scrollSensitivity) {
+ scrolled = this.document.scrollLeft(this.document.scrollLeft() + o.scrollSpeed);
+ }
+
+ }
+
+ if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+ }
+
+ //Regenerate the absolute position used for position checks
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ //Set the helper position
+ if(!this.options.axis || this.options.axis !== "y") {
+ this.helper[0].style.left = this.position.left+"px";
+ }
+ if(!this.options.axis || this.options.axis !== "x") {
+ this.helper[0].style.top = this.position.top+"px";
+ }
+
+ //Rearrange
+ for (i = this.items.length - 1; i >= 0; i--) {
+
+ //Cache variables and intersection, continue if no intersection
+ item = this.items[i];
+ itemElement = item.item[0];
+ intersection = this._intersectsWithPointer(item);
+ if (!intersection) {
+ continue;
+ }
+
+ // Only put the placeholder inside the current Container, skip all
+ // items from other containers. This works because when moving
+ // an item from one container to another the
+ // currentContainer is switched before the placeholder is moved.
+ //
+ // Without this, moving items in "sub-sortables" can cause
+ // the placeholder to jitter between the outer and inner container.
+ if (item.instance !== this.currentContainer) {
+ continue;
+ }
+
+ // cannot intersect with itself
+ // no useless actions that have been done before
+ // no action if the item moved is the parent of the item checked
+ if (itemElement !== this.currentItem[0] &&
+ this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
+ !$.contains(this.placeholder[0], itemElement) &&
+ (this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
+ ) {
+
+ this.direction = intersection === 1 ? "down" : "up";
+
+ if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
+ this._rearrange(event, item);
+ } else {
+ break;
+ }
+
+ this._trigger("change", event, this._uiHash());
+ break;
+ }
+ }
+
+ //Post events to containers
+ this._contactContainers(event);
+
+ //Interconnect with droppables
+ if($.ui.ddmanager) {
+ $.ui.ddmanager.drag(this, event);
+ }
+
+ //Call callbacks
+ this._trigger("sort", event, this._uiHash());
+
+ this.lastPositionAbs = this.positionAbs;
+ return false;
+
+ },
+
+ _mouseStop: function(event, noPropagation) {
+
+ if(!event) {
+ return;
+ }
+
+ //If we are using droppables, inform the manager about the drop
+ if ($.ui.ddmanager && !this.options.dropBehaviour) {
+ $.ui.ddmanager.drop(this, event);
+ }
+
+ if(this.options.revert) {
+ var that = this,
+ cur = this.placeholder.offset(),
+ axis = this.options.axis,
+ animation = {};
+
+ if ( !axis || axis === "x" ) {
+ animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollLeft);
+ }
+ if ( !axis || axis === "y" ) {
+ animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop);
+ }
+ this.reverting = true;
+ $(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
+ that._clear(event);
+ });
+ } else {
+ this._clear(event, noPropagation);
+ }
+
+ return false;
+
+ },
+
+ cancel: function() {
+
+ if(this.dragging) {
+
+ this._mouseUp({ target: null });
+
+ if(this.options.helper === "original") {
+ this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+ } else {
+ this.currentItem.show();
+ }
+
+ //Post deactivating events to containers
+ for (var i = this.containers.length - 1; i >= 0; i--){
+ this.containers[i]._trigger("deactivate", null, this._uiHash(this));
+ if(this.containers[i].containerCache.over) {
+ this.containers[i]._trigger("out", null, this._uiHash(this));
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ }
+
+ if (this.placeholder) {
+ //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+ if(this.placeholder[0].parentNode) {
+ this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+ }
+ if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
+ this.helper.remove();
+ }
+
+ $.extend(this, {
+ helper: null,
+ dragging: false,
+ reverting: false,
+ _noFinalSort: null
+ });
+
+ if(this.domPosition.prev) {
+ $(this.domPosition.prev).after(this.currentItem);
+ } else {
+ $(this.domPosition.parent).prepend(this.currentItem);
+ }
+ }
+
+ return this;
+
+ },
+
+ serialize: function(o) {
+
+ var items = this._getItemsAsjQuery(o && o.connected),
+ str = [];
+ o = o || {};
+
+ $(items).each(function() {
+ var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
+ if (res) {
+ str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
+ }
+ });
+
+ if(!str.length && o.key) {
+ str.push(o.key + "=");
+ }
+
+ return str.join("&");
+
+ },
+
+ toArray: function(o) {
+
+ var items = this._getItemsAsjQuery(o && o.connected),
+ ret = [];
+
+ o = o || {};
+
+ items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
+ return ret;
+
+ },
+
+ /* Be careful with the following core functions */
+ _intersectsWith: function(item) {
+
+ var x1 = this.positionAbs.left,
+ x2 = x1 + this.helperProportions.width,
+ y1 = this.positionAbs.top,
+ y2 = y1 + this.helperProportions.height,
+ l = item.left,
+ r = l + item.width,
+ t = item.top,
+ b = t + item.height,
+ dyClick = this.offset.click.top,
+ dxClick = this.offset.click.left,
+ isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
+ isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
+ isOverElement = isOverElementHeight && isOverElementWidth;
+
+ if ( this.options.tolerance === "pointer" ||
+ this.options.forcePointerForContainers ||
+ (this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
+ ) {
+ return isOverElement;
+ } else {
+
+ return (l < x1 + (this.helperProportions.width / 2) && // Right Half
+ x2 - (this.helperProportions.width / 2) < r && // Left Half
+ t < y1 + (this.helperProportions.height / 2) && // Bottom Half
+ y2 - (this.helperProportions.height / 2) < b ); // Top Half
+
+ }
+ },
+
+ _intersectsWithPointer: function(item) {
+
+ var isOverElementHeight = (this.options.axis === "x") || this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+ isOverElementWidth = (this.options.axis === "y") || this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+ isOverElement = isOverElementHeight && isOverElementWidth,
+ verticalDirection = this._getDragVerticalDirection(),
+ horizontalDirection = this._getDragHorizontalDirection();
+
+ if (!isOverElement) {
+ return false;
+ }
+
+ return this.floating ?
+ ( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
+ : ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
+
+ },
+
+ _intersectsWithSides: function(item) {
+
+ var isOverBottomHalf = this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
+ isOverRightHalf = this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
+ verticalDirection = this._getDragVerticalDirection(),
+ horizontalDirection = this._getDragHorizontalDirection();
+
+ if (this.floating && horizontalDirection) {
+ return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
+ } else {
+ return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
+ }
+
+ },
+
+ _getDragVerticalDirection: function() {
+ var delta = this.positionAbs.top - this.lastPositionAbs.top;
+ return delta !== 0 && (delta > 0 ? "down" : "up");
+ },
+
+ _getDragHorizontalDirection: function() {
+ var delta = this.positionAbs.left - this.lastPositionAbs.left;
+ return delta !== 0 && (delta > 0 ? "right" : "left");
+ },
+
+ refresh: function(event) {
+ this._refreshItems(event);
+ this._setHandleClassName();
+ this.refreshPositions();
+ return this;
+ },
+
+ _connectWith: function() {
+ var options = this.options;
+ return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
+ },
+
+ _getItemsAsjQuery: function(connected) {
+
+ var i, j, cur, inst,
+ items = [],
+ queries = [],
+ connectWith = this._connectWith();
+
+ if(connectWith && connected) {
+ for (i = connectWith.length - 1; i >= 0; i--){
+ cur = $(connectWith[i], this.document[0]);
+ for ( j = cur.length - 1; j >= 0; j--){
+ inst = $.data(cur[j], this.widgetFullName);
+ if(inst && inst !== this && !inst.options.disabled) {
+ queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
+ }
+ }
+ }
+ }
+
+ queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
+
+ function addItems() {
+ items.push( this );
+ }
+ for (i = queries.length - 1; i >= 0; i--){
+ queries[i][0].each( addItems );
+ }
+
+ return $(items);
+
+ },
+
+ _removeCurrentsFromItems: function() {
+
+ var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
+
+ this.items = $.grep(this.items, function (item) {
+ for (var j=0; j < list.length; j++) {
+ if(list[j] === item.item[0]) {
+ return false;
+ }
+ }
+ return true;
+ });
+
+ },
+
+ _refreshItems: function(event) {
+
+ this.items = [];
+ this.containers = [this];
+
+ var i, j, cur, inst, targetData, _queries, item, queriesLength,
+ items = this.items,
+ queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
+ connectWith = this._connectWith();
+
+ if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
+ for (i = connectWith.length - 1; i >= 0; i--){
+ cur = $(connectWith[i], this.document[0]);
+ for (j = cur.length - 1; j >= 0; j--){
+ inst = $.data(cur[j], this.widgetFullName);
+ if(inst && inst !== this && !inst.options.disabled) {
+ queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
+ this.containers.push(inst);
+ }
+ }
+ }
+ }
+
+ for (i = queries.length - 1; i >= 0; i--) {
+ targetData = queries[i][1];
+ _queries = queries[i][0];
+
+ for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
+ item = $(_queries[j]);
+
+ item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
+
+ items.push({
+ item: item,
+ instance: targetData,
+ width: 0, height: 0,
+ left: 0, top: 0
+ });
+ }
+ }
+
+ },
+
+ refreshPositions: function(fast) {
+
+ // Determine whether items are being displayed horizontally
+ this.floating = this.items.length ?
+ this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) :
+ false;
+
+ //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
+ if(this.offsetParent && this.helper) {
+ this.offset.parent = this._getParentOffset();
+ }
+
+ var i, item, t, p;
+
+ for (i = this.items.length - 1; i >= 0; i--){
+ item = this.items[i];
+
+ //We ignore calculating positions of all connected containers when we're not over them
+ if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
+ continue;
+ }
+
+ t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
+
+ if (!fast) {
+ item.width = t.outerWidth();
+ item.height = t.outerHeight();
+ }
+
+ p = t.offset();
+ item.left = p.left;
+ item.top = p.top;
+ }
+
+ if(this.options.custom && this.options.custom.refreshContainers) {
+ this.options.custom.refreshContainers.call(this);
+ } else {
+ for (i = this.containers.length - 1; i >= 0; i--){
+ p = this.containers[i].element.offset();
+ this.containers[i].containerCache.left = p.left;
+ this.containers[i].containerCache.top = p.top;
+ this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
+ this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+ }
+ }
+
+ return this;
+ },
+
+ _createPlaceholder: function(that) {
+ that = that || this;
+ var className,
+ o = that.options;
+
+ if(!o.placeholder || o.placeholder.constructor === String) {
+ className = o.placeholder;
+ o.placeholder = {
+ element: function() {
+
+ var nodeName = that.currentItem[0].nodeName.toLowerCase(),
+ element = $( "<" + nodeName + ">", that.document[0] )
+ .addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
+ .removeClass("ui-sortable-helper");
+
+ if ( nodeName === "tbody" ) {
+ that._createTrPlaceholder(
+ that.currentItem.find( "tr" ).eq( 0 ),
+ $( "<tr>", that.document[ 0 ] ).appendTo( element )
+ );
+ } else if ( nodeName === "tr" ) {
+ that._createTrPlaceholder( that.currentItem, element );
+ } else if ( nodeName === "img" ) {
+ element.attr( "src", that.currentItem.attr( "src" ) );
+ }
+
+ if ( !className ) {
+ element.css( "visibility", "hidden" );
+ }
+
+ return element;
+ },
+ update: function(container, p) {
+
+ // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
+ // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
+ if(className && !o.forcePlaceholderSize) {
+ return;
+ }
+
+ //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
+ if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
+ if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
+ }
+ };
+ }
+
+ //Create the placeholder
+ that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
+
+ //Append it after the actual current item
+ that.currentItem.after(that.placeholder);
+
+ //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+ o.placeholder.update(that, that.placeholder);
+
+ },
+
+ _createTrPlaceholder: function( sourceTr, targetTr ) {
+ var that = this;
+
+ sourceTr.children().each(function() {
+ $( "<td> </td>", that.document[ 0 ] )
+ .attr( "colspan", $( this ).attr( "colspan" ) || 1 )
+ .appendTo( targetTr );
+ });
+ },
+
+ _contactContainers: function(event) {
+ var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, floating, axis,
+ innermostContainer = null,
+ innermostIndex = null;
+
+ // get innermost container that intersects with item
+ for (i = this.containers.length - 1; i >= 0; i--) {
+
+ // never consider a container that's located within the item itself
+ if($.contains(this.currentItem[0], this.containers[i].element[0])) {
+ continue;
+ }
+
+ if(this._intersectsWith(this.containers[i].containerCache)) {
+
+ // if we've already found a container and it's more "inner" than this, then continue
+ if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
+ continue;
+ }
+
+ innermostContainer = this.containers[i];
+ innermostIndex = i;
+
+ } else {
+ // container doesn't intersect. trigger "out" event if necessary
+ if(this.containers[i].containerCache.over) {
+ this.containers[i]._trigger("out", event, this._uiHash(this));
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ }
+
+ // if no intersecting containers found, return
+ if(!innermostContainer) {
+ return;
+ }
+
+ // move the item into the container if it's not there already
+ if(this.containers.length === 1) {
+ if (!this.containers[innermostIndex].containerCache.over) {
+ this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+ this.containers[innermostIndex].containerCache.over = 1;
+ }
+ } else {
+
+ //When entering a new container, we will find the item with the least distance and append our item near it
+ dist = 10000;
+ itemWithLeastDistance = null;
+ floating = innermostContainer.floating || this._isFloating(this.currentItem);
+ posProperty = floating ? "left" : "top";
+ sizeProperty = floating ? "width" : "height";
+ axis = floating ? "clientX" : "clientY";
+
+ for (j = this.items.length - 1; j >= 0; j--) {
+ if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
+ continue;
+ }
+ if(this.items[j].item[0] === this.currentItem[0]) {
+ continue;
+ }
+
+ cur = this.items[j].item.offset()[posProperty];
+ nearBottom = false;
+ if ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {
+ nearBottom = true;
+ }
+
+ if ( Math.abs( event[ axis ] - cur ) < dist ) {
+ dist = Math.abs( event[ axis ] - cur );
+ itemWithLeastDistance = this.items[ j ];
+ this.direction = nearBottom ? "up": "down";
+ }
+ }
+
+ //Check if dropOnEmpty is enabled
+ if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
+ return;
+ }
+
+ if(this.currentContainer === this.containers[innermostIndex]) {
+ if ( !this.currentContainer.containerCache.over ) {
+ this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() );
+ this.currentContainer.containerCache.over = 1;
+ }
+ return;
+ }
+
+ itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
+ this._trigger("change", event, this._uiHash());
+ this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
+ this.currentContainer = this.containers[innermostIndex];
+
+ //Update the placeholder
+ this.options.placeholder.update(this.currentContainer, this.placeholder);
+
+ this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+ this.containers[innermostIndex].containerCache.over = 1;
+ }
+
+
+ },
+
+ _createHelper: function(event) {
+
+ var o = this.options,
+ helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
+
+ //Add the helper to the DOM if that didn't happen already
+ if(!helper.parents("body").length) {
+ $(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
+ }
+
+ if(helper[0] === this.currentItem[0]) {
+ this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
+ }
+
+ if(!helper[0].style.width || o.forceHelperSize) {
+ helper.width(this.currentItem.width());
+ }
+ if(!helper[0].style.height || o.forceHelperSize) {
+ helper.height(this.currentItem.height());
+ }
+
+ return helper;
+
+ },
+
+ _adjustOffsetFromHelper: function(obj) {
+ if (typeof obj === "string") {
+ obj = obj.split(" ");
+ }
+ if ($.isArray(obj)) {
+ obj = {left: +obj[0], top: +obj[1] || 0};
+ }
+ if ("left" in obj) {
+ this.offset.click.left = obj.left + this.margins.left;
+ }
+ if ("right" in obj) {
+ this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+ }
+ if ("top" in obj) {
+ this.offset.click.top = obj.top + this.margins.top;
+ }
+ if ("bottom" in obj) {
+ this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+ }
+ },
+
+ _getParentOffset: function() {
+
+
+ //Get the offsetParent and cache its position
+ this.offsetParent = this.helper.offsetParent();
+ var po = this.offsetParent.offset();
+
+ // This is a special case where we need to modify a offset calculated on start, since the following happened:
+ // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+ // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+ // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+ if(this.cssPosition === "absolute" && this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+ po.left += this.scrollParent.scrollLeft();
+ po.top += this.scrollParent.scrollTop();
+ }
+
+ // This needs to be actually done for all browsers, since pageX/pageY includes this information
+ // with an ugly IE fix
+ if( this.offsetParent[0] === this.document[0].body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+ po = { top: 0, left: 0 };
+ }
+
+ return {
+ top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+ left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+ };
+
+ },
+
+ _getRelativeOffset: function() {
+
+ if(this.cssPosition === "relative") {
+ var p = this.currentItem.position();
+ return {
+ top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+ left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+ };
+ } else {
+ return { top: 0, left: 0 };
+ }
+
+ },
+
+ _cacheMargins: function() {
+ this.margins = {
+ left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
+ top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
+ };
+ },
+
+ _cacheHelperProportions: function() {
+ this.helperProportions = {
+ width: this.helper.outerWidth(),
+ height: this.helper.outerHeight()
+ };
+ },
+
+ _setContainment: function() {
+
+ var ce, co, over,
+ o = this.options;
+ if(o.containment === "parent") {
+ o.containment = this.helper[0].parentNode;
+ }
+ if(o.containment === "document" || o.containment === "window") {
+ this.containment = [
+ 0 - this.offset.relative.left - this.offset.parent.left,
+ 0 - this.offset.relative.top - this.offset.parent.top,
+ o.containment === "document" ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left,
+ (o.containment === "document" ? this.document.width() : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+ ];
+ }
+
+ if(!(/^(document|window|parent)$/).test(o.containment)) {
+ ce = $(o.containment)[0];
+ co = $(o.containment).offset();
+ over = ($(ce).css("overflow") !== "hidden");
+
+ this.containment = [
+ co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
+ co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
+ co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
+ co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
+ ];
+ }
+
+ },
+
+ _convertPositionTo: function(d, pos) {
+
+ if(!pos) {
+ pos = this.position;
+ }
+ var mod = d === "absolute" ? 1 : -1,
+ scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
+ scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+ return {
+ top: (
+ pos.top + // The absolute mouse position
+ this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+ ),
+ left: (
+ pos.left + // The absolute mouse position
+ this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+ )
+ };
+
+ },
+
+ _generatePosition: function(event) {
+
+ var top, left,
+ o = this.options,
+ pageX = event.pageX,
+ pageY = event.pageY,
+ scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+ // This is another very weird special case that only happens for relative elements:
+ // 1. If the css position is relative
+ // 2. and the scroll parent is the document or similar to the offset parent
+ // we have to refresh the relative offset during the scroll so there are no jumps
+ if(this.cssPosition === "relative" && !(this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[0])) {
+ this.offset.relative = this._getRelativeOffset();
+ }
+
+ /*
+ * - Position constraining -
+ * Constrain the position to a mix of grid, containment.
+ */
+
+ if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+
+ if(this.containment) {
+ if(event.pageX - this.offset.click.left < this.containment[0]) {
+ pageX = this.containment[0] + this.offset.click.left;
+ }
+ if(event.pageY - this.offset.click.top < this.containment[1]) {
+ pageY = this.containment[1] + this.offset.click.top;
+ }
+ if(event.pageX - this.offset.click.left > this.containment[2]) {
+ pageX = this.containment[2] + this.offset.click.left;
+ }
+ if(event.pageY - this.offset.click.top > this.containment[3]) {
+ pageY = this.containment[3] + this.offset.click.top;
+ }
+ }
+
+ if(o.grid) {
+ top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+ pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+ left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+ pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+ }
+
+ }
+
+ return {
+ top: (
+ pageY - // The absolute mouse position
+ this.offset.click.top - // Click offset (relative to the element)
+ this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top + // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+ ),
+ left: (
+ pageX - // The absolute mouse position
+ this.offset.click.left - // Click offset (relative to the element)
+ this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left + // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+ )
+ };
+
+ },
+
+ _rearrange: function(event, i, a, hardRefresh) {
+
+ a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
+
+ //Various things done here to improve the performance:
+ // 1. we create a setTimeout, that calls refreshPositions
+ // 2. on the instance, we have a counter variable, that get's higher after every append
+ // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
+ // 4. this lets only the last addition to the timeout stack through
+ this.counter = this.counter ? ++this.counter : 1;
+ var counter = this.counter;
+
+ this._delay(function() {
+ if(counter === this.counter) {
+ this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+ }
+ });
+
+ },
+
+ _clear: function(event, noPropagation) {
+
+ this.reverting = false;
+ // We delay all events that have to be triggered to after the point where the placeholder has been removed and
+ // everything else normalized again
+ var i,
+ delayedTriggers = [];
+
+ // We first have to update the dom position of the actual currentItem
+ // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
+ if(!this._noFinalSort && this.currentItem.parent().length) {
+ this.placeholder.before(this.currentItem);
+ }
+ this._noFinalSort = null;
+
+ if(this.helper[0] === this.currentItem[0]) {
+ for(i in this._storedCSS) {
+ if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
+ this._storedCSS[i] = "";
+ }
+ }
+ this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+ } else {
+ this.currentItem.show();
+ }
+
+ if(this.fromOutside && !noPropagation) {
+ delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
+ }
+ if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
+ delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
+ }
+
+ // Check if the items Container has Changed and trigger appropriate
+ // events.
+ if (this !== this.currentContainer) {
+ if(!noPropagation) {
+ delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
+ delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.currentContainer));
+ delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.currentContainer));
+ }
+ }
+
+
+ //Post events to containers
+ function delayEvent( type, instance, container ) {
+ return function( event ) {
+ container._trigger( type, event, instance._uiHash( instance ) );
+ };
+ }
+ for (i = this.containers.length - 1; i >= 0; i--){
+ if (!noPropagation) {
+ delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) );
+ }
+ if(this.containers[i].containerCache.over) {
+ delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) );
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ //Do what was originally in plugins
+ if ( this.storedCursor ) {
+ this.document.find( "body" ).css( "cursor", this.storedCursor );
+ this.storedStylesheet.remove();
+ }
+ if(this._storedOpacity) {
+ this.helper.css("opacity", this._storedOpacity);
+ }
+ if(this._storedZIndex) {
+ this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
+ }
+
+ this.dragging = false;
+
+ if(!noPropagation) {
+ this._trigger("beforeStop", event, this._uiHash());
+ }
+
+ //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+ this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+
+ if ( !this.cancelHelperRemoval ) {
+ if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
+ this.helper.remove();
+ }
+ this.helper = null;
+ }
+
+ if(!noPropagation) {
+ for (i=0; i < delayedTriggers.length; i++) {
+ delayedTriggers[i].call(this, event);
+ } //Trigger all delayed events
+ this._trigger("stop", event, this._uiHash());
+ }
+
+ this.fromOutside = false;
+ return !this.cancelHelperRemoval;
+
+ },
+
+ _trigger: function() {
+ if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
+ this.cancel();
+ }
+ },
+
+ _uiHash: function(_inst) {
+ var inst = _inst || this;
+ return {
+ helper: inst.helper,
+ placeholder: inst.placeholder || $([]),
+ position: inst.position,
+ originalPosition: inst.originalPosition,
+ offset: inst.positionAbs,
+ item: inst.currentItem,
+ sender: _inst ? _inst.element : null
+ };
+ }
+
+});
+
+
+/*!
+ * jQuery UI Spinner 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/spinner/
+ */
+
+
+function spinner_modifier( fn ) {
+ return function() {
+ var previous = this.element.val();
+ fn.apply( this, arguments );
+ this._refresh();
+ if ( previous !== this.element.val() ) {
+ this._trigger( "change" );
+ }
+ };
+}
+
+var spinner = $.widget( "ui.spinner", {
+ version: "1.11.4",
+ defaultElement: "<input>",
+ widgetEventPrefix: "spin",
+ options: {
+ culture: null,
+ icons: {
+ down: "ui-icon-triangle-1-s",
+ up: "ui-icon-triangle-1-n"
+ },
+ incremental: true,
+ max: null,
+ min: null,
+ numberFormat: null,
+ page: 10,
+ step: 1,
+
+ change: null,
+ spin: null,
+ start: null,
+ stop: null
+ },
+
+ _create: function() {
+ // handle string values that need to be parsed
+ this._setOption( "max", this.options.max );
+ this._setOption( "min", this.options.min );
+ this._setOption( "step", this.options.step );
+
+ // Only format if there is a value, prevents the field from being marked
+ // as invalid in Firefox, see #9573.
+ if ( this.value() !== "" ) {
+ // Format the value, but don't constrain.
+ this._value( this.element.val(), true );
+ }
+
+ this._draw();
+ this._on( this._events );
+ this._refresh();
+
+ // turning off autocomplete prevents the browser from remembering the
+ // value when navigating through history, so we re-enable autocomplete
+ // if the page is unloaded before the widget is destroyed. #7790
+ this._on( this.window, {
+ beforeunload: function() {
+ this.element.removeAttr( "autocomplete" );
+ }
+ });
+ },
+
+ _getCreateOptions: function() {
+ var options = {},
+ element = this.element;
+
+ $.each( [ "min", "max", "step" ], function( i, option ) {
+ var value = element.attr( option );
+ if ( value !== undefined && value.length ) {
+ options[ option ] = value;
+ }
+ });
+
+ return options;
+ },
+
+ _events: {
+ keydown: function( event ) {
+ if ( this._start( event ) && this._keydown( event ) ) {
+ event.preventDefault();
+ }
+ },
+ keyup: "_stop",
+ focus: function() {
+ this.previous = this.element.val();
+ },
+ blur: function( event ) {
+ if ( this.cancelBlur ) {
+ delete this.cancelBlur;
+ return;
+ }
+
+ this._stop();
+ this._refresh();
+ if ( this.previous !== this.element.val() ) {
+ this._trigger( "change", event );
+ }
+ },
+ mousewheel: function( event, delta ) {
+ if ( !delta ) {
+ return;
+ }
+ if ( !this.spinning && !this._start( event ) ) {
+ return false;
+ }
+
+ this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
+ clearTimeout( this.mousewheelTimer );
+ this.mousewheelTimer = this._delay(function() {
+ if ( this.spinning ) {
+ this._stop( event );
+ }
+ }, 100 );
+ event.preventDefault();
+ },
+ "mousedown .ui-spinner-button": function( event ) {
+ var previous;
+
+ // We never want the buttons to have focus; whenever the user is
+ // interacting with the spinner, the focus should be on the input.
+ // If the input is focused then this.previous is properly set from
+ // when the input first received focus. If the input is not focused
+ // then we need to set this.previous based on the value before spinning.
+ previous = this.element[0] === this.document[0].activeElement ?
+ this.previous : this.element.val();
+ function checkFocus() {
+ var isActive = this.element[0] === this.document[0].activeElement;
+ if ( !isActive ) {
+ this.element.focus();
+ this.previous = previous;
+ // support: IE
+ // IE sets focus asynchronously, so we need to check if focus
+ // moved off of the input because the user clicked on the button.
+ this._delay(function() {
+ this.previous = previous;
+ });
+ }
+ }
+
+ // ensure focus is on (or stays on) the text field
+ event.preventDefault();
+ checkFocus.call( this );
+
+ // support: IE
+ // IE doesn't prevent moving focus even with event.preventDefault()
+ // so we set a flag to know when we should ignore the blur event
+ // and check (again) if focus moved off of the input.
+ this.cancelBlur = true;
+ this._delay(function() {
+ delete this.cancelBlur;
+ checkFocus.call( this );
+ });
+
+ if ( this._start( event ) === false ) {
+ return;
+ }
+
+ this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+ },
+ "mouseup .ui-spinner-button": "_stop",
+ "mouseenter .ui-spinner-button": function( event ) {
+ // button will add ui-state-active if mouse was down while mouseleave and kept down
+ if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
+ return;
+ }
+
+ if ( this._start( event ) === false ) {
+ return false;
+ }
+ this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+ },
+ // TODO: do we really want to consider this a stop?
+ // shouldn't we just stop the repeater and wait until mouseup before
+ // we trigger the stop event?
+ "mouseleave .ui-spinner-button": "_stop"
+ },
+
+ _draw: function() {
+ var uiSpinner = this.uiSpinner = this.element
+ .addClass( "ui-spinner-input" )
+ .attr( "autocomplete", "off" )
+ .wrap( this._uiSpinnerHtml() )
+ .parent()
+ // add buttons
+ .append( this._buttonHtml() );
+
+ this.element.attr( "role", "spinbutton" );
+
+ // button bindings
+ this.buttons = uiSpinner.find( ".ui-spinner-button" )
+ .attr( "tabIndex", -1 )
+ .button()
+ .removeClass( "ui-corner-all" );
+
+ // IE 6 doesn't understand height: 50% for the buttons
+ // unless the wrapper has an explicit height
+ if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
+ uiSpinner.height() > 0 ) {
+ uiSpinner.height( uiSpinner.height() );
+ }
+
+ // disable spinner if element was already disabled
+ if ( this.options.disabled ) {
+ this.disable();
+ }
+ },
+
+ _keydown: function( event ) {
+ var options = this.options,
+ keyCode = $.ui.keyCode;
+
+ switch ( event.keyCode ) {
+ case keyCode.UP:
+ this._repeat( null, 1, event );
+ return true;
+ case keyCode.DOWN:
+ this._repeat( null, -1, event );
+ return true;
+ case keyCode.PAGE_UP:
+ this._repeat( null, options.page, event );
+ return true;
+ case keyCode.PAGE_DOWN:
+ this._repeat( null, -options.page, event );
+ return true;
+ }
+
+ return false;
+ },
+
+ _uiSpinnerHtml: function() {
+ return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
+ },
+
+ _buttonHtml: function() {
+ return "" +
+ "<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
+ "<span class='ui-icon " + this.options.icons.up + "'>▲</span>" +
+ "</a>" +
+ "<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
+ "<span class='ui-icon " + this.options.icons.down + "'>▼</span>" +
+ "</a>";
+ },
+
+ _start: function( event ) {
+ if ( !this.spinning && this._trigger( "start", event ) === false ) {
+ return false;
+ }
+
+ if ( !this.counter ) {
+ this.counter = 1;
+ }
+ this.spinning = true;
+ return true;
+ },
+
+ _repeat: function( i, steps, event ) {
+ i = i || 500;
+
+ clearTimeout( this.timer );
+ this.timer = this._delay(function() {
+ this._repeat( 40, steps, event );
+ }, i );
+
+ this._spin( steps * this.options.step, event );
+ },
+
+ _spin: function( step, event ) {
+ var value = this.value() || 0;
+
+ if ( !this.counter ) {
+ this.counter = 1;
+ }
+
+ value = this._adjustValue( value + step * this._increment( this.counter ) );
+
+ if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
+ this._value( value );
+ this.counter++;
+ }
+ },
+
+ _increment: function( i ) {
+ var incremental = this.options.incremental;
+
+ if ( incremental ) {
+ return $.isFunction( incremental ) ?
+ incremental( i ) :
+ Math.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );
+ }
+
+ return 1;
+ },
+
+ _precision: function() {
+ var precision = this._precisionOf( this.options.step );
+ if ( this.options.min !== null ) {
+ precision = Math.max( precision, this._precisionOf( this.options.min ) );
+ }
+ return precision;
+ },
+
+ _precisionOf: function( num ) {
+ var str = num.toString(),
+ decimal = str.indexOf( "." );
+ return decimal === -1 ? 0 : str.length - decimal - 1;
+ },
+
+ _adjustValue: function( value ) {
+ var base, aboveMin,
+ options = this.options;
+
+ // make sure we're at a valid step
+ // - find out where we are relative to the base (min or 0)
+ base = options.min !== null ? options.min : 0;
+ aboveMin = value - base;
+ // - round to the nearest step
+ aboveMin = Math.round(aboveMin / options.step) * options.step;
+ // - rounding is based on 0, so adjust back to our base
+ value = base + aboveMin;
+
+ // fix precision from bad JS floating point math
+ value = parseFloat( value.toFixed( this._precision() ) );
+
+ // clamp the value
+ if ( options.max !== null && value > options.max) {
+ return options.max;
+ }
+ if ( options.min !== null && value < options.min ) {
+ return options.min;
+ }
+
+ return value;
+ },
+
+ _stop: function( event ) {
+ if ( !this.spinning ) {
+ return;
+ }
+
+ clearTimeout( this.timer );
+ clearTimeout( this.mousewheelTimer );
+ this.counter = 0;
+ this.spinning = false;
+ this._trigger( "stop", event );
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "culture" || key === "numberFormat" ) {
+ var prevValue = this._parse( this.element.val() );
+ this.options[ key ] = value;
+ this.element.val( this._format( prevValue ) );
+ return;
+ }
+
+ if ( key === "max" || key === "min" || key === "step" ) {
+ if ( typeof value === "string" ) {
+ value = this._parse( value );
+ }
+ }
+ if ( key === "icons" ) {
+ this.buttons.first().find( ".ui-icon" )
+ .removeClass( this.options.icons.up )
+ .addClass( value.up );
+ this.buttons.last().find( ".ui-icon" )
+ .removeClass( this.options.icons.down )
+ .addClass( value.down );
+ }
+
+ this._super( key, value );
+
+ if ( key === "disabled" ) {
+ this.widget().toggleClass( "ui-state-disabled", !!value );
+ this.element.prop( "disabled", !!value );
+ this.buttons.button( value ? "disable" : "enable" );
+ }
+ },
+
+ _setOptions: spinner_modifier(function( options ) {
+ this._super( options );
+ }),
+
+ _parse: function( val ) {
+ if ( typeof val === "string" && val !== "" ) {
+ val = window.Globalize && this.options.numberFormat ?
+ Globalize.parseFloat( val, 10, this.options.culture ) : +val;
+ }
+ return val === "" || isNaN( val ) ? null : val;
+ },
+
+ _format: function( value ) {
+ if ( value === "" ) {
+ return "";
+ }
+ return window.Globalize && this.options.numberFormat ?
+ Globalize.format( value, this.options.numberFormat, this.options.culture ) :
+ value;
+ },
+
+ _refresh: function() {
+ this.element.attr({
+ "aria-valuemin": this.options.min,
+ "aria-valuemax": this.options.max,
+ // TODO: what should we do with values that can't be parsed?
+ "aria-valuenow": this._parse( this.element.val() )
+ });
+ },
+
+ isValid: function() {
+ var value = this.value();
+
+ // null is invalid
+ if ( value === null ) {
+ return false;
+ }
+
+ // if value gets adjusted, it's invalid
+ return value === this._adjustValue( value );
+ },
+
+ // update the value without triggering change
+ _value: function( value, allowAny ) {
+ var parsed;
+ if ( value !== "" ) {
+ parsed = this._parse( value );
+ if ( parsed !== null ) {
+ if ( !allowAny ) {
+ parsed = this._adjustValue( parsed );
+ }
+ value = this._format( parsed );
+ }
+ }
+ this.element.val( value );
+ this._refresh();
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-spinner-input" )
+ .prop( "disabled", false )
+ .removeAttr( "autocomplete" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-valuemin" )
+ .removeAttr( "aria-valuemax" )
+ .removeAttr( "aria-valuenow" );
+ this.uiSpinner.replaceWith( this.element );
+ },
+
+ stepUp: spinner_modifier(function( steps ) {
+ this._stepUp( steps );
+ }),
+ _stepUp: function( steps ) {
+ if ( this._start() ) {
+ this._spin( (steps || 1) * this.options.step );
+ this._stop();
+ }
+ },
+
+ stepDown: spinner_modifier(function( steps ) {
+ this._stepDown( steps );
+ }),
+ _stepDown: function( steps ) {
+ if ( this._start() ) {
+ this._spin( (steps || 1) * -this.options.step );
+ this._stop();
+ }
+ },
+
+ pageUp: spinner_modifier(function( pages ) {
+ this._stepUp( (pages || 1) * this.options.page );
+ }),
+
+ pageDown: spinner_modifier(function( pages ) {
+ this._stepDown( (pages || 1) * this.options.page );
+ }),
+
+ value: function( newVal ) {
+ if ( !arguments.length ) {
+ return this._parse( this.element.val() );
+ }
+ spinner_modifier( this._value ).call( this, newVal );
+ },
+
+ widget: function() {
+ return this.uiSpinner;
+ }
+});
+
+
+/*!
+ * jQuery UI Tabs 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/tabs/
+ */
+
+
+var tabs = $.widget( "ui.tabs", {
+ version: "1.11.4",
+ delay: 300,
+ options: {
+ active: null,
+ collapsible: false,
+ event: "click",
+ heightStyle: "content",
+ hide: null,
+ show: null,
+
+ // callbacks
+ activate: null,
+ beforeActivate: null,
+ beforeLoad: null,
+ load: null
+ },
+
+ _isLocal: (function() {
+ var rhash = /#.*$/;
+
+ return function( anchor ) {
+ var anchorUrl, locationUrl;
+
+ // support: IE7
+ // IE7 doesn't normalize the href property when set via script (#9317)
+ anchor = anchor.cloneNode( false );
+
+ anchorUrl = anchor.href.replace( rhash, "" );
+ locationUrl = location.href.replace( rhash, "" );
+
+ // decoding may throw an error if the URL isn't UTF-8 (#9518)
+ try {
+ anchorUrl = decodeURIComponent( anchorUrl );
+ } catch ( error ) {}
+ try {
+ locationUrl = decodeURIComponent( locationUrl );
+ } catch ( error ) {}
+
+ return anchor.hash.length > 1 && anchorUrl === locationUrl;
+ };
+ })(),
+
+ _create: function() {
+ var that = this,
+ options = this.options;
+
+ this.running = false;
+
+ this.element
+ .addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
+ .toggleClass( "ui-tabs-collapsible", options.collapsible );
+
+ this._processTabs();
+ options.active = this._initialActive();
+
+ // Take disabling tabs via class attribute from HTML
+ // into account and update option properly.
+ if ( $.isArray( options.disabled ) ) {
+ options.disabled = $.unique( options.disabled.concat(
+ $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
+ return that.tabs.index( li );
+ })
+ ) ).sort();
+ }
+
+ // check for length avoids error when initializing empty list
+ if ( this.options.active !== false && this.anchors.length ) {
+ this.active = this._findActive( options.active );
+ } else {
+ this.active = $();
+ }
+
+ this._refresh();
+
+ if ( this.active.length ) {
+ this.load( options.active );
+ }
+ },
+
+ _initialActive: function() {
+ var active = this.options.active,
+ collapsible = this.options.collapsible,
+ locationHash = location.hash.substring( 1 );
+
+ if ( active === null ) {
+ // check the fragment identifier in the URL
+ if ( locationHash ) {
+ this.tabs.each(function( i, tab ) {
+ if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
+ active = i;
+ return false;
+ }
+ });
+ }
+
+ // check for a tab marked active via a class
+ if ( active === null ) {
+ active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
+ }
+
+ // no active tab, set to false
+ if ( active === null || active === -1 ) {
+ active = this.tabs.length ? 0 : false;
+ }
+ }
+
+ // handle numbers: negative, out of range
+ if ( active !== false ) {
+ active = this.tabs.index( this.tabs.eq( active ) );
+ if ( active === -1 ) {
+ active = collapsible ? false : 0;
+ }
+ }
+
+ // don't allow collapsible: false and active: false
+ if ( !collapsible && active === false && this.anchors.length ) {
+ active = 0;
+ }
+
+ return active;
+ },
+
+ _getCreateEventData: function() {
+ return {
+ tab: this.active,
+ panel: !this.active.length ? $() : this._getPanelForTab( this.active )
+ };
+ },
+
+ _tabKeydown: function( event ) {
+ var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
+ selectedIndex = this.tabs.index( focusedTab ),
+ goingForward = true;
+
+ if ( this._handlePageNav( event ) ) {
+ return;
+ }
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.RIGHT:
+ case $.ui.keyCode.DOWN:
+ selectedIndex++;
+ break;
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.LEFT:
+ goingForward = false;
+ selectedIndex--;
+ break;
+ case $.ui.keyCode.END:
+ selectedIndex = this.anchors.length - 1;
+ break;
+ case $.ui.keyCode.HOME:
+ selectedIndex = 0;
+ break;
+ case $.ui.keyCode.SPACE:
+ // Activate only, no collapsing
+ event.preventDefault();
+ clearTimeout( this.activating );
+ this._activate( selectedIndex );
+ return;
+ case $.ui.keyCode.ENTER:
+ // Toggle (cancel delayed activation, allow collapsing)
+ event.preventDefault();
+ clearTimeout( this.activating );
+ // Determine if we should collapse or activate
+ this._activate( selectedIndex === this.options.active ? false : selectedIndex );
+ return;
+ default:
+ return;
+ }
+
+ // Focus the appropriate tab, based on which key was pressed
+ event.preventDefault();
+ clearTimeout( this.activating );
+ selectedIndex = this._focusNextTab( selectedIndex, goingForward );
+
+ // Navigating with control/command key will prevent automatic activation
+ if ( !event.ctrlKey && !event.metaKey ) {
+
+ // Update aria-selected immediately so that AT think the tab is already selected.
+ // Otherwise AT may confuse the user by stating that they need to activate the tab,
+ // but the tab will already be activated by the time the announcement finishes.
+ focusedTab.attr( "aria-selected", "false" );
+ this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
+
+ this.activating = this._delay(function() {
+ this.option( "active", selectedIndex );
+ }, this.delay );
+ }
+ },
+
+ _panelKeydown: function( event ) {
+ if ( this._handlePageNav( event ) ) {
+ return;
+ }
+
+ // Ctrl+up moves focus to the current tab
+ if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
+ event.preventDefault();
+ this.active.focus();
+ }
+ },
+
+ // Alt+page up/down moves focus to the previous/next tab (and activates)
+ _handlePageNav: function( event ) {
+ if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
+ this._activate( this._focusNextTab( this.options.active - 1, false ) );
+ return true;
+ }
+ if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
+ this._activate( this._focusNextTab( this.options.active + 1, true ) );
+ return true;
+ }
+ },
+
+ _findNextTab: function( index, goingForward ) {
+ var lastTabIndex = this.tabs.length - 1;
+
+ function constrain() {
+ if ( index > lastTabIndex ) {
+ index = 0;
+ }
+ if ( index < 0 ) {
+ index = lastTabIndex;
+ }
+ return index;
+ }
+
+ while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
+ index = goingForward ? index + 1 : index - 1;
+ }
+
+ return index;
+ },
+
+ _focusNextTab: function( index, goingForward ) {
+ index = this._findNextTab( index, goingForward );
+ this.tabs.eq( index ).focus();
+ return index;
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "active" ) {
+ // _activate() will handle invalid values and update this.options
+ this._activate( value );
+ return;
+ }
+
+ if ( key === "disabled" ) {
+ // don't use the widget factory's disabled handling
+ this._setupDisabled( value );
+ return;
+ }
+
+ this._super( key, value);
+
+ if ( key === "collapsible" ) {
+ this.element.toggleClass( "ui-tabs-collapsible", value );
+ // Setting collapsible: false while collapsed; open first panel
+ if ( !value && this.options.active === false ) {
+ this._activate( 0 );
+ }
+ }
+
+ if ( key === "event" ) {
+ this._setupEvents( value );
+ }
+
+ if ( key === "heightStyle" ) {
+ this._setupHeightStyle( value );
+ }
+ },
+
+ _sanitizeSelector: function( hash ) {
+ return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
+ },
+
+ refresh: function() {
+ var options = this.options,
+ lis = this.tablist.children( ":has(a[href])" );
+
+ // get disabled tabs from class attribute from HTML
+ // this will get converted to a boolean if needed in _refresh()
+ options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
+ return lis.index( tab );
+ });
+
+ this._processTabs();
+
+ // was collapsed or no tabs
+ if ( options.active === false || !this.anchors.length ) {
+ options.active = false;
+ this.active = $();
+ // was active, but active tab is gone
+ } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
+ // all remaining tabs are disabled
+ if ( this.tabs.length === options.disabled.length ) {
+ options.active = false;
+ this.active = $();
+ // activate previous tab
+ } else {
+ this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
+ }
+ // was active, active tab still exists
+ } else {
+ // make sure active index is correct
+ options.active = this.tabs.index( this.active );
+ }
+
+ this._refresh();
+ },
+
+ _refresh: function() {
+ this._setupDisabled( this.options.disabled );
+ this._setupEvents( this.options.event );
+ this._setupHeightStyle( this.options.heightStyle );
+
+ this.tabs.not( this.active ).attr({
+ "aria-selected": "false",
+ "aria-expanded": "false",
+ tabIndex: -1
+ });
+ this.panels.not( this._getPanelForTab( this.active ) )
+ .hide()
+ .attr({
+ "aria-hidden": "true"
+ });
+
+ // Make sure one tab is in the tab order
+ if ( !this.active.length ) {
+ this.tabs.eq( 0 ).attr( "tabIndex", 0 );
+ } else {
+ this.active
+ .addClass( "ui-tabs-active ui-state-active" )
+ .attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ });
+ this._getPanelForTab( this.active )
+ .show()
+ .attr({
+ "aria-hidden": "false"
+ });
+ }
+ },
+
+ _processTabs: function() {
+ var that = this,
+ prevTabs = this.tabs,
+ prevAnchors = this.anchors,
+ prevPanels = this.panels;
+
+ this.tablist = this._getList()
+ .addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+ .attr( "role", "tablist" )
+
+ // Prevent users from focusing disabled tabs via click
+ .delegate( "> li", "mousedown" + this.eventNamespace, function( event ) {
+ if ( $( this ).is( ".ui-state-disabled" ) ) {
+ event.preventDefault();
+ }
+ })
+
+ // support: IE <9
+ // Preventing the default action in mousedown doesn't prevent IE
+ // from focusing the element, so if the anchor gets focused, blur.
+ // We don't have to worry about focusing the previously focused
+ // element since clicking on a non-focusable element should focus
+ // the body anyway.
+ .delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
+ if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
+ this.blur();
+ }
+ });
+
+ this.tabs = this.tablist.find( "> li:has(a[href])" )
+ .addClass( "ui-state-default ui-corner-top" )
+ .attr({
+ role: "tab",
+ tabIndex: -1
+ });
+
+ this.anchors = this.tabs.map(function() {
+ return $( "a", this )[ 0 ];
+ })
+ .addClass( "ui-tabs-anchor" )
+ .attr({
+ role: "presentation",
+ tabIndex: -1
+ });
+
+ this.panels = $();
+
+ this.anchors.each(function( i, anchor ) {
+ var selector, panel, panelId,
+ anchorId = $( anchor ).uniqueId().attr( "id" ),
+ tab = $( anchor ).closest( "li" ),
+ originalAriaControls = tab.attr( "aria-controls" );
+
+ // inline tab
+ if ( that._isLocal( anchor ) ) {
+ selector = anchor.hash;
+ panelId = selector.substring( 1 );
+ panel = that.element.find( that._sanitizeSelector( selector ) );
+ // remote tab
+ } else {
+ // If the tab doesn't already have aria-controls,
+ // generate an id by using a throw-away element
+ panelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id;
+ selector = "#" + panelId;
+ panel = that.element.find( selector );
+ if ( !panel.length ) {
+ panel = that._createPanel( panelId );
+ panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
+ }
+ panel.attr( "aria-live", "polite" );
+ }
+
+ if ( panel.length) {
+ that.panels = that.panels.add( panel );
+ }
+ if ( originalAriaControls ) {
+ tab.data( "ui-tabs-aria-controls", originalAriaControls );
+ }
+ tab.attr({
+ "aria-controls": panelId,
+ "aria-labelledby": anchorId
+ });
+ panel.attr( "aria-labelledby", anchorId );
+ });
+
+ this.panels
+ .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+ .attr( "role", "tabpanel" );
+
+ // Avoid memory leaks (#10056)
+ if ( prevTabs ) {
+ this._off( prevTabs.not( this.tabs ) );
+ this._off( prevAnchors.not( this.anchors ) );
+ this._off( prevPanels.not( this.panels ) );
+ }
+ },
+
+ // allow overriding how to find the list for rare usage scenarios (#7715)
+ _getList: function() {
+ return this.tablist || this.element.find( "ol,ul" ).eq( 0 );
+ },
+
+ _createPanel: function( id ) {
+ return $( "<div>" )
+ .attr( "id", id )
+ .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+ .data( "ui-tabs-destroy", true );
+ },
+
+ _setupDisabled: function( disabled ) {
+ if ( $.isArray( disabled ) ) {
+ if ( !disabled.length ) {
+ disabled = false;
+ } else if ( disabled.length === this.anchors.length ) {
+ disabled = true;
+ }
+ }
+
+ // disable tabs
+ for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
+ if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
+ $( li )
+ .addClass( "ui-state-disabled" )
+ .attr( "aria-disabled", "true" );
+ } else {
+ $( li )
+ .removeClass( "ui-state-disabled" )
+ .removeAttr( "aria-disabled" );
+ }
+ }
+
+ this.options.disabled = disabled;
+ },
+
+ _setupEvents: function( event ) {
+ var events = {};
+ if ( event ) {
+ $.each( event.split(" "), function( index, eventName ) {
+ events[ eventName ] = "_eventHandler";
+ });
+ }
+
+ this._off( this.anchors.add( this.tabs ).add( this.panels ) );
+ // Always prevent the default action, even when disabled
+ this._on( true, this.anchors, {
+ click: function( event ) {
+ event.preventDefault();
+ }
+ });
+ this._on( this.anchors, events );
+ this._on( this.tabs, { keydown: "_tabKeydown" } );
+ this._on( this.panels, { keydown: "_panelKeydown" } );
+
+ this._focusable( this.tabs );
+ this._hoverable( this.tabs );
+ },
+
+ _setupHeightStyle: function( heightStyle ) {
+ var maxHeight,
+ parent = this.element.parent();
+
+ if ( heightStyle === "fill" ) {
+ maxHeight = parent.height();
+ maxHeight -= this.element.outerHeight() - this.element.height();
+
+ this.element.siblings( ":visible" ).each(function() {
+ var elem = $( this ),
+ position = elem.css( "position" );
+
+ if ( position === "absolute" || position === "fixed" ) {
+ return;
+ }
+ maxHeight -= elem.outerHeight( true );
+ });
+
+ this.element.children().not( this.panels ).each(function() {
+ maxHeight -= $( this ).outerHeight( true );
+ });
+
+ this.panels.each(function() {
+ $( this ).height( Math.max( 0, maxHeight -
+ $( this ).innerHeight() + $( this ).height() ) );
+ })
+ .css( "overflow", "auto" );
+ } else if ( heightStyle === "auto" ) {
+ maxHeight = 0;
+ this.panels.each(function() {
+ maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+ }).height( maxHeight );
+ }
+ },
+
+ _eventHandler: function( event ) {
+ var options = this.options,
+ active = this.active,
+ anchor = $( event.currentTarget ),
+ tab = anchor.closest( "li" ),
+ clickedIsActive = tab[ 0 ] === active[ 0 ],
+ collapsing = clickedIsActive && options.collapsible,
+ toShow = collapsing ? $() : this._getPanelForTab( tab ),
+ toHide = !active.length ? $() : this._getPanelForTab( active ),
+ eventData = {
+ oldTab: active,
+ oldPanel: toHide,
+ newTab: collapsing ? $() : tab,
+ newPanel: toShow
+ };
+
+ event.preventDefault();
+
+ if ( tab.hasClass( "ui-state-disabled" ) ||
+ // tab is already loading
+ tab.hasClass( "ui-tabs-loading" ) ||
+ // can't switch durning an animation
+ this.running ||
+ // click on active header, but not collapsible
+ ( clickedIsActive && !options.collapsible ) ||
+ // allow canceling activation
+ ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+ return;
+ }
+
+ options.active = collapsing ? false : this.tabs.index( tab );
+
+ this.active = clickedIsActive ? $() : tab;
+ if ( this.xhr ) {
+ this.xhr.abort();
+ }
+
+ if ( !toHide.length && !toShow.length ) {
+ $.error( "jQuery UI Tabs: Mismatching fragment identifier." );
+ }
+
+ if ( toShow.length ) {
+ this.load( this.tabs.index( tab ), event );
+ }
+ this._toggle( event, eventData );
+ },
+
+ // handles show/hide for selecting tabs
+ _toggle: function( event, eventData ) {
+ var that = this,
+ toShow = eventData.newPanel,
+ toHide = eventData.oldPanel;
+
+ this.running = true;
+
+ function complete() {
+ that.running = false;
+ that._trigger( "activate", event, eventData );
+ }
+
+ function show() {
+ eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
+
+ if ( toShow.length && that.options.show ) {
+ that._show( toShow, that.options.show, complete );
+ } else {
+ toShow.show();
+ complete();
+ }
+ }
+
+ // start out by hiding, then showing, then completing
+ if ( toHide.length && this.options.hide ) {
+ this._hide( toHide, this.options.hide, function() {
+ eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+ show();
+ });
+ } else {
+ eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+ toHide.hide();
+ show();
+ }
+
+ toHide.attr( "aria-hidden", "true" );
+ eventData.oldTab.attr({
+ "aria-selected": "false",
+ "aria-expanded": "false"
+ });
+ // If we're switching tabs, remove the old tab from the tab order.
+ // If we're opening from collapsed state, remove the previous tab from the tab order.
+ // If we're collapsing, then keep the collapsing tab in the tab order.
+ if ( toShow.length && toHide.length ) {
+ eventData.oldTab.attr( "tabIndex", -1 );
+ } else if ( toShow.length ) {
+ this.tabs.filter(function() {
+ return $( this ).attr( "tabIndex" ) === 0;
+ })
+ .attr( "tabIndex", -1 );
+ }
+
+ toShow.attr( "aria-hidden", "false" );
+ eventData.newTab.attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ });
+ },
+
+ _activate: function( index ) {
+ var anchor,
+ active = this._findActive( index );
+
+ // trying to activate the already active panel
+ if ( active[ 0 ] === this.active[ 0 ] ) {
+ return;
+ }
+
+ // trying to collapse, simulate a click on the current active header
+ if ( !active.length ) {
+ active = this.active;
+ }
+
+ anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
+ this._eventHandler({
+ target: anchor,
+ currentTarget: anchor,
+ preventDefault: $.noop
+ });
+ },
+
+ _findActive: function( index ) {
+ return index === false ? $() : this.tabs.eq( index );
+ },
+
+ _getIndex: function( index ) {
+ // meta-function to give users option to provide a href string instead of a numerical index.
+ if ( typeof index === "string" ) {
+ index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
+ }
+
+ return index;
+ },
+
+ _destroy: function() {
+ if ( this.xhr ) {
+ this.xhr.abort();
+ }
+
+ this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
+
+ this.tablist
+ .removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+ .removeAttr( "role" );
+
+ this.anchors
+ .removeClass( "ui-tabs-anchor" )
+ .removeAttr( "role" )
+ .removeAttr( "tabIndex" )
+ .removeUniqueId();
+
+ this.tablist.unbind( this.eventNamespace );
+
+ this.tabs.add( this.panels ).each(function() {
+ if ( $.data( this, "ui-tabs-destroy" ) ) {
+ $( this ).remove();
+ } else {
+ $( this )
+ .removeClass( "ui-state-default ui-state-active ui-state-disabled " +
+ "ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
+ .removeAttr( "tabIndex" )
+ .removeAttr( "aria-live" )
+ .removeAttr( "aria-busy" )
+ .removeAttr( "aria-selected" )
+ .removeAttr( "aria-labelledby" )
+ .removeAttr( "aria-hidden" )
+ .removeAttr( "aria-expanded" )
+ .removeAttr( "role" );
+ }
+ });
+
+ this.tabs.each(function() {
+ var li = $( this ),
+ prev = li.data( "ui-tabs-aria-controls" );
+ if ( prev ) {
+ li
+ .attr( "aria-controls", prev )
+ .removeData( "ui-tabs-aria-controls" );
+ } else {
+ li.removeAttr( "aria-controls" );
+ }
+ });
+
+ this.panels.show();
+
+ if ( this.options.heightStyle !== "content" ) {
+ this.panels.css( "height", "" );
+ }
+ },
+
+ enable: function( index ) {
+ var disabled = this.options.disabled;
+ if ( disabled === false ) {
+ return;
+ }
+
+ if ( index === undefined ) {
+ disabled = false;
+ } else {
+ index = this._getIndex( index );
+ if ( $.isArray( disabled ) ) {
+ disabled = $.map( disabled, function( num ) {
+ return num !== index ? num : null;
+ });
+ } else {
+ disabled = $.map( this.tabs, function( li, num ) {
+ return num !== index ? num : null;
+ });
+ }
+ }
+ this._setupDisabled( disabled );
+ },
+
+ disable: function( index ) {
+ var disabled = this.options.disabled;
+ if ( disabled === true ) {
+ return;
+ }
+
+ if ( index === undefined ) {
+ disabled = true;
+ } else {
+ index = this._getIndex( index );
+ if ( $.inArray( index, disabled ) !== -1 ) {
+ return;
+ }
+ if ( $.isArray( disabled ) ) {
+ disabled = $.merge( [ index ], disabled ).sort();
+ } else {
+ disabled = [ index ];
+ }
+ }
+ this._setupDisabled( disabled );
+ },
+
+ load: function( index, event ) {
+ index = this._getIndex( index );
+ var that = this,
+ tab = this.tabs.eq( index ),
+ anchor = tab.find( ".ui-tabs-anchor" ),
+ panel = this._getPanelForTab( tab ),
+ eventData = {
+ tab: tab,
+ panel: panel
+ },
+ complete = function( jqXHR, status ) {
+ if ( status === "abort" ) {
+ that.panels.stop( false, true );
+ }
+
+ tab.removeClass( "ui-tabs-loading" );
+ panel.removeAttr( "aria-busy" );
+
+ if ( jqXHR === that.xhr ) {
+ delete that.xhr;
+ }
+ };
+
+ // not remote
+ if ( this._isLocal( anchor[ 0 ] ) ) {
+ return;
+ }
+
+ this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
+
+ // support: jQuery <1.8
+ // jQuery <1.8 returns false if the request is canceled in beforeSend,
+ // but as of 1.8, $.ajax() always returns a jqXHR object.
+ if ( this.xhr && this.xhr.statusText !== "canceled" ) {
+ tab.addClass( "ui-tabs-loading" );
+ panel.attr( "aria-busy", "true" );
+
+ this.xhr
+ .done(function( response, status, jqXHR ) {
+ // support: jQuery <1.8
+ // http://bugs.jquery.com/ticket/11778
+ setTimeout(function() {
+ panel.html( response );
+ that._trigger( "load", event, eventData );
+
+ complete( jqXHR, status );
+ }, 1 );
+ })
+ .fail(function( jqXHR, status ) {
+ // support: jQuery <1.8
+ // http://bugs.jquery.com/ticket/11778
+ setTimeout(function() {
+ complete( jqXHR, status );
+ }, 1 );
+ });
+ }
+ },
+
+ _ajaxSettings: function( anchor, event, eventData ) {
+ var that = this;
+ return {
+ url: anchor.attr( "href" ),
+ beforeSend: function( jqXHR, settings ) {
+ return that._trigger( "beforeLoad", event,
+ $.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );
+ }
+ };
+ },
+
+ _getPanelForTab: function( tab ) {
+ var id = $( tab ).attr( "aria-controls" );
+ return this.element.find( this._sanitizeSelector( "#" + id ) );
+ }
+});
+
+
+/*!
+ * jQuery UI Tooltip 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/tooltip/
+ */
+
+
+var tooltip = $.widget( "ui.tooltip", {
+ version: "1.11.4",
+ options: {
+ content: function() {
+ // support: IE<9, Opera in jQuery <1.7
+ // .text() can't accept undefined, so coerce to a string
+ var title = $( this ).attr( "title" ) || "";
+ // Escape title, since we're going from an attribute to raw HTML
+ return $( "<a>" ).text( title ).html();
+ },
+ hide: true,
+ // Disabled elements have inconsistent behavior across browsers (#8661)
+ items: "[title]:not([disabled])",
+ position: {
+ my: "left top+15",
+ at: "left bottom",
+ collision: "flipfit flip"
+ },
+ show: true,
+ tooltipClass: null,
+ track: false,
+
+ // callbacks
+ close: null,
+ open: null
+ },
+
+ _addDescribedBy: function( elem, id ) {
+ var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
+ describedby.push( id );
+ elem
+ .data( "ui-tooltip-id", id )
+ .attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
+ },
+
+ _removeDescribedBy: function( elem ) {
+ var id = elem.data( "ui-tooltip-id" ),
+ describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
+ index = $.inArray( id, describedby );
+
+ if ( index !== -1 ) {
+ describedby.splice( index, 1 );
+ }
+
+ elem.removeData( "ui-tooltip-id" );
+ describedby = $.trim( describedby.join( " " ) );
+ if ( describedby ) {
+ elem.attr( "aria-describedby", describedby );
+ } else {
+ elem.removeAttr( "aria-describedby" );
+ }
+ },
+
+ _create: function() {
+ this._on({
+ mouseover: "open",
+ focusin: "open"
+ });
+
+ // IDs of generated tooltips, needed for destroy
+ this.tooltips = {};
+
+ // IDs of parent tooltips where we removed the title attribute
+ this.parents = {};
+
+ if ( this.options.disabled ) {
+ this._disable();
+ }
+
+ // Append the aria-live region so tooltips announce correctly
+ this.liveRegion = $( "<div>" )
+ .attr({
+ role: "log",
+ "aria-live": "assertive",
+ "aria-relevant": "additions"
+ })
+ .addClass( "ui-helper-hidden-accessible" )
+ .appendTo( this.document[ 0 ].body );
+ },
+
+ _setOption: function( key, value ) {
+ var that = this;
+
+ if ( key === "disabled" ) {
+ this[ value ? "_disable" : "_enable" ]();
+ this.options[ key ] = value;
+ // disable element style changes
+ return;
+ }
+
+ this._super( key, value );
+
+ if ( key === "content" ) {
+ $.each( this.tooltips, function( id, tooltipData ) {
+ that._updateContent( tooltipData.element );
+ });
+ }
+ },
+
+ _disable: function() {
+ var that = this;
+
+ // close open tooltips
+ $.each( this.tooltips, function( id, tooltipData ) {
+ var event = $.Event( "blur" );
+ event.target = event.currentTarget = tooltipData.element[ 0 ];
+ that.close( event, true );
+ });
+
+ // remove title attributes to prevent native tooltips
+ this.element.find( this.options.items ).addBack().each(function() {
+ var element = $( this );
+ if ( element.is( "[title]" ) ) {
+ element
+ .data( "ui-tooltip-title", element.attr( "title" ) )
+ .removeAttr( "title" );
+ }
+ });
+ },
+
+ _enable: function() {
+ // restore title attributes
+ this.element.find( this.options.items ).addBack().each(function() {
+ var element = $( this );
+ if ( element.data( "ui-tooltip-title" ) ) {
+ element.attr( "title", element.data( "ui-tooltip-title" ) );
+ }
+ });
+ },
+
+ open: function( event ) {
+ var that = this,
+ target = $( event ? event.target : this.element )
+ // we need closest here due to mouseover bubbling,
+ // but always pointing at the same event target
+ .closest( this.options.items );
+
+ // No element to show a tooltip for or the tooltip is already open
+ if ( !target.length || target.data( "ui-tooltip-id" ) ) {
+ return;
+ }
+
+ if ( target.attr( "title" ) ) {
+ target.data( "ui-tooltip-title", target.attr( "title" ) );
+ }
+
+ target.data( "ui-tooltip-open", true );
+
+ // kill parent tooltips, custom or native, for hover
+ if ( event && event.type === "mouseover" ) {
+ target.parents().each(function() {
+ var parent = $( this ),
+ blurEvent;
+ if ( parent.data( "ui-tooltip-open" ) ) {
+ blurEvent = $.Event( "blur" );
+ blurEvent.target = blurEvent.currentTarget = this;
+ that.close( blurEvent, true );
+ }
+ if ( parent.attr( "title" ) ) {
+ parent.uniqueId();
+ that.parents[ this.id ] = {
+ element: this,
+ title: parent.attr( "title" )
+ };
+ parent.attr( "title", "" );
+ }
+ });
+ }
+
+ this._registerCloseHandlers( event, target );
+ this._updateContent( target, event );
+ },
+
+ _updateContent: function( target, event ) {
+ var content,
+ contentOption = this.options.content,
+ that = this,
+ eventType = event ? event.type : null;
+
+ if ( typeof contentOption === "string" ) {
+ return this._open( event, target, contentOption );
+ }
+
+ content = contentOption.call( target[0], function( response ) {
+
+ // IE may instantly serve a cached response for ajax requests
+ // delay this call to _open so the other call to _open runs first
+ that._delay(function() {
+
+ // Ignore async response if tooltip was closed already
+ if ( !target.data( "ui-tooltip-open" ) ) {
+ return;
+ }
+
+ // jQuery creates a special event for focusin when it doesn't
+ // exist natively. To improve performance, the native event
+ // object is reused and the type is changed. Therefore, we can't
+ // rely on the type being correct after the event finished
+ // bubbling, so we set it back to the previous value. (#8740)
+ if ( event ) {
+ event.type = eventType;
+ }
+ this._open( event, target, response );
+ });
+ });
+ if ( content ) {
+ this._open( event, target, content );
+ }
+ },
+
+ _open: function( event, target, content ) {
+ var tooltipData, tooltip, delayedShow, a11yContent,
+ positionOption = $.extend( {}, this.options.position );
+
+ if ( !content ) {
+ return;
+ }
+
+ // Content can be updated multiple times. If the tooltip already
+ // exists, then just update the content and bail.
+ tooltipData = this._find( target );
+ if ( tooltipData ) {
+ tooltipData.tooltip.find( ".ui-tooltip-content" ).html( content );
+ return;
+ }
+
+ // if we have a title, clear it to prevent the native tooltip
+ // we have to check first to avoid defining a title if none exists
+ // (we don't want to cause an element to start matching [title])
+ //
+ // We use removeAttr only for key events, to allow IE to export the correct
+ // accessible attributes. For mouse events, set to empty string to avoid
+ // native tooltip showing up (happens only when removing inside mouseover).
+ if ( target.is( "[title]" ) ) {
+ if ( event && event.type === "mouseover" ) {
+ target.attr( "title", "" );
+ } else {
+ target.removeAttr( "title" );
+ }
+ }
+
+ tooltipData = this._tooltip( target );
+ tooltip = tooltipData.tooltip;
+ this._addDescribedBy( target, tooltip.attr( "id" ) );
+ tooltip.find( ".ui-tooltip-content" ).html( content );
+
+ // Support: Voiceover on OS X, JAWS on IE <= 9
+ // JAWS announces deletions even when aria-relevant="additions"
+ // Voiceover will sometimes re-read the entire log region's contents from the beginning
+ this.liveRegion.children().hide();
+ if ( content.clone ) {
+ a11yContent = content.clone();
+ a11yContent.removeAttr( "id" ).find( "[id]" ).removeAttr( "id" );
+ } else {
+ a11yContent = content;
+ }
+ $( "<div>" ).html( a11yContent ).appendTo( this.liveRegion );
+
+ function position( event ) {
+ positionOption.of = event;
+ if ( tooltip.is( ":hidden" ) ) {
+ return;
+ }
+ tooltip.position( positionOption );
+ }
+ if ( this.options.track && event && /^mouse/.test( event.type ) ) {
+ this._on( this.document, {
+ mousemove: position
+ });
+ // trigger once to override element-relative positioning
+ position( event );
+ } else {
+ tooltip.position( $.extend({
+ of: target
+ }, this.options.position ) );
+ }
+
+ tooltip.hide();
+
+ this._show( tooltip, this.options.show );
+ // Handle tracking tooltips that are shown with a delay (#8644). As soon
+ // as the tooltip is visible, position the tooltip using the most recent
+ // event.
+ if ( this.options.show && this.options.show.delay ) {
+ delayedShow = this.delayedShow = setInterval(function() {
+ if ( tooltip.is( ":visible" ) ) {
+ position( positionOption.of );
+ clearInterval( delayedShow );
+ }
+ }, $.fx.interval );
+ }
+
+ this._trigger( "open", event, { tooltip: tooltip } );
+ },
+
+ _registerCloseHandlers: function( event, target ) {
+ var events = {
+ keyup: function( event ) {
+ if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
+ var fakeEvent = $.Event(event);
+ fakeEvent.currentTarget = target[0];
+ this.close( fakeEvent, true );
+ }
+ }
+ };
+
+ // Only bind remove handler for delegated targets. Non-delegated
+ // tooltips will handle this in destroy.
+ if ( target[ 0 ] !== this.element[ 0 ] ) {
+ events.remove = function() {
+ this._removeTooltip( this._find( target ).tooltip );
+ };
+ }
+
+ if ( !event || event.type === "mouseover" ) {
+ events.mouseleave = "close";
+ }
+ if ( !event || event.type === "focusin" ) {
+ events.focusout = "close";
+ }
+ this._on( true, target, events );
+ },
+
+ close: function( event ) {
+ var tooltip,
+ that = this,
+ target = $( event ? event.currentTarget : this.element ),
+ tooltipData = this._find( target );
+
+ // The tooltip may already be closed
+ if ( !tooltipData ) {
+
+ // We set ui-tooltip-open immediately upon open (in open()), but only set the
+ // additional data once there's actually content to show (in _open()). So even if the
+ // tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in
+ // the period between open() and _open().
+ target.removeData( "ui-tooltip-open" );
+ return;
+ }
+
+ tooltip = tooltipData.tooltip;
+
+ // disabling closes the tooltip, so we need to track when we're closing
+ // to avoid an infinite loop in case the tooltip becomes disabled on close
+ if ( tooltipData.closing ) {
+ return;
+ }
+
+ // Clear the interval for delayed tracking tooltips
+ clearInterval( this.delayedShow );
+
+ // only set title if we had one before (see comment in _open())
+ // If the title attribute has changed since open(), don't restore
+ if ( target.data( "ui-tooltip-title" ) && !target.attr( "title" ) ) {
+ target.attr( "title", target.data( "ui-tooltip-title" ) );
+ }
+
+ this._removeDescribedBy( target );
+
+ tooltipData.hiding = true;
+ tooltip.stop( true );
+ this._hide( tooltip, this.options.hide, function() {
+ that._removeTooltip( $( this ) );
+ });
+
+ target.removeData( "ui-tooltip-open" );
+ this._off( target, "mouseleave focusout keyup" );
+
+ // Remove 'remove' binding only on delegated targets
+ if ( target[ 0 ] !== this.element[ 0 ] ) {
+ this._off( target, "remove" );
+ }
+ this._off( this.document, "mousemove" );
+
+ if ( event && event.type === "mouseleave" ) {
+ $.each( this.parents, function( id, parent ) {
+ $( parent.element ).attr( "title", parent.title );
+ delete that.parents[ id ];
+ });
+ }
+
+ tooltipData.closing = true;
+ this._trigger( "close", event, { tooltip: tooltip } );
+ if ( !tooltipData.hiding ) {
+ tooltipData.closing = false;
+ }
+ },
+
+ _tooltip: function( element ) {
+ var tooltip = $( "<div>" )
+ .attr( "role", "tooltip" )
+ .addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
+ ( this.options.tooltipClass || "" ) ),
+ id = tooltip.uniqueId().attr( "id" );
+
+ $( "<div>" )
+ .addClass( "ui-tooltip-content" )
+ .appendTo( tooltip );
+
+ tooltip.appendTo( this.document[0].body );
+
+ return this.tooltips[ id ] = {
+ element: element,
+ tooltip: tooltip
+ };
+ },
+
+ _find: function( target ) {
+ var id = target.data( "ui-tooltip-id" );
+ return id ? this.tooltips[ id ] : null;
+ },
+
+ _removeTooltip: function( tooltip ) {
+ tooltip.remove();
+ delete this.tooltips[ tooltip.attr( "id" ) ];
+ },
+
+ _destroy: function() {
+ var that = this;
+
+ // close open tooltips
+ $.each( this.tooltips, function( id, tooltipData ) {
+ // Delegate to close method to handle common cleanup
+ var event = $.Event( "blur" ),
+ element = tooltipData.element;
+ event.target = event.currentTarget = element[ 0 ];
+ that.close( event, true );
+
+ // Remove immediately; destroying an open tooltip doesn't use the
+ // hide animation
+ $( "#" + id ).remove();
+
+ // Restore the title
+ if ( element.data( "ui-tooltip-title" ) ) {
+ // If the title attribute has changed since open(), don't restore
+ if ( !element.attr( "title" ) ) {
+ element.attr( "title", element.data( "ui-tooltip-title" ) );
+ }
+ element.removeData( "ui-tooltip-title" );
+ }
+ });
+ this.liveRegion.remove();
+ }
+});
+
+
+
+}));
\ No newline at end of file
diff --git a/ui/new-ui-samples/js/vendor/jquery.js b/ui/new-ui-samples/js/vendor/jquery.js
new file mode 100644
index 0000000..eed1777
--- /dev/null
+++ b/ui/new-ui-samples/js/vendor/jquery.js
@@ -0,0 +1,9210 @@
+/*!
+ * jQuery JavaScript Library v2.1.4
+ * 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:01Z
+ */
+
+(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 have a `window` with a `document`
+ // (such as Node.js), expose a 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 ) {
+
+// Support: Firefox 18+
+// Can't be in strict mode, several libs including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+//
+
+var arr = [];
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var support = {};
+
+
+
+var
+ // Use the correct document accordingly with window argument (sandbox)
+ document = window.document,
+
+ version = "2.1.4",
+
+ // 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
+ // 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: arr.sort,
+ splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[0] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+
+ // 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() {},
+
+ isFunction: function( obj ) {
+ return jQuery.type(obj) === "function";
+ },
+
+ isArray: Array.isArray,
+
+ isWindow: function( obj ) {
+ 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;
+ },
+
+ isPlainObject: function( obj ) {
+ // Not plain objects:
+ // - Any object or value whose internal [[Class]] property is not "[object Object]"
+ // - DOM nodes
+ // - window
+ if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ if ( obj.constructor &&
+ !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
+ return false;
+ }
+
+ // If the function hasn't returned already, we're confident that
+ // |obj| is a plain object, created by {} or constructed with new Object
+ return true;
+ },
+
+ isEmptyObject: function( obj ) {
+ var name;
+ for ( name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ type: function( obj ) {
+ if ( obj == null ) {
+ return obj + "";
+ }
+ // Support: Android<4.0, iOS<6 (functionish RegExp)
+ return typeof obj === "object" || typeof obj === "function" ?
+ class2type[ toString.call(obj) ] || "object" :
+ typeof obj;
+ },
+
+ // Evaluates a script in a global context
+ globalEval: function( code ) {
+ var script,
+ indirect = eval;
+
+ code = jQuery.trim( code );
+
+ if ( code ) {
+ // If the code includes a valid, prologue position
+ // strict mode pragma, execute code by injecting a
+ // script tag into the document.
+ if ( code.indexOf("use strict") === 1 ) {
+ script = document.createElement("script");
+ script.text = code;
+ document.head.appendChild( script ).parentNode.removeChild( script );
+ } else {
+ // Otherwise, avoid the DOM node creation, insertion
+ // and removal by using an indirect global eval
+ indirect( code );
+ }
+ }
+ },
+
+ // Convert dashed to camelCase; used by the css and data modules
+ // Support: IE9-11+
+ // 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
+ 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 ) {
+ return arr == null ? -1 : indexOf.call( arr, elem, i );
+ },
+
+ merge: function( first, second ) {
+ var len = +second.length,
+ j = 0,
+ i = first.length;
+
+ for ( ; j < len; j++ ) {
+ 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 tmp, args, proxy;
+
+ if ( typeof context === "string" ) {
+ tmp = fn[ context ];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if ( !jQuery.isFunction( fn ) ) {
+ return undefined;
+ }
+
+ // Simulated bind
+ args = 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: Date.now,
+
+ // 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 ( indexOf.call( qualifier, elem ) >= 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,
+ len = this.length,
+ ret = [],
+ self = this;
+
+ 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,
+
+ // 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[0] === "<" && selector[ 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;
+
+ // Option to run 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] );
+
+ // Support: Blackberry 4.6
+ // gEBID returns nodes no longer in the document (#6963)
+ if ( elem && elem.parentNode ) {
+ // Inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return ( context || rootjQuery ).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor( context ).find( selector );
+ }
+
+ // HANDLE: $(DOMElement)
+ } else if ( selector.nodeType ) {
+ this.context = this[0] = selector;
+ this.length = 1;
+ return this;
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) ) {
+ return 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 = [],
+ truncate = until !== undefined;
+
+ while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {
+ if ( elem.nodeType === 1 ) {
+ if ( truncate && jQuery( elem ).is( until ) ) {
+ break;
+ }
+ matched.push( elem );
+ }
+ }
+ return matched;
+ },
+
+ sibling: function( n, elem ) {
+ var matched = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ matched.push( n );
+ }
+ }
+
+ return matched;
+ }
+});
+
+jQuery.fn.extend({
+ has: function( target ) {
+ var targets = jQuery( target, this ),
+ l = targets.length;
+
+ return this.filter(function() {
+ var i = 0;
+ for ( ; i < l; 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 set
+ 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 indexOf.call( jQuery( elem ), this[ 0 ] );
+ }
+
+ // Locate the position of the desired element
+ return indexOf.call( this,
+
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[ 0 ] : elem
+ );
+ },
+
+ 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 ) {
+ while ( (cur = cur[dir]) && 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 elem.contentDocument || jQuery.merge( [], elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var matched = jQuery.map( this, fn, until );
+
+ if ( name.slice( -5 ) !== "Until" ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ matched = jQuery.filter( selector, matched );
+ }
+
+ if ( this.length > 1 ) {
+ // Remove duplicates
+ if ( !guaranteedUnique[ name ] ) {
+ jQuery.unique( matched );
+ }
+
+ // Reverse order for parents* and prev-derivatives
+ if ( rparentsprev.test( name ) ) {
+ matched.reverse();
+ }
+ }
+
+ return this.pushStack( matched );
+ };
+});
+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 // Last fire value (for non-forgettable lists)
+ memory,
+ // Flag to know if list was already fired
+ fired,
+ // Flag to know if list is currently firing
+ firing,
+ // First callback to fire (used internally by add and fireWith)
+ firingStart,
+ // End of the loop when firing
+ firingLength,
+ // Index of currently firing callback (modified by remove if needed)
+ firingIndex,
+ // Actual callback list
+ list = [],
+ // Stack of fire calls for repeatable lists
+ stack = !options.once && [],
+ // Fire callbacks
+ fire = function( data ) {
+ memory = options.memory && data;
+ fired = true;
+ firingIndex = firingStart || 0;
+ firingStart = 0;
+ firingLength = list.length;
+ firing = true;
+ for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+ if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+ memory = false; // To prevent further calls using add
+ break;
+ }
+ }
+ firing = false;
+ if ( list ) {
+ if ( stack ) {
+ if ( stack.length ) {
+ fire( stack.shift() );
+ }
+ } else if ( memory ) {
+ list = [];
+ } else {
+ self.disable();
+ }
+ }
+ },
+ // Actual Callbacks object
+ self = {
+ // Add a callback or a collection of callbacks to the list
+ add: function() {
+ if ( list ) {
+ // First, we save the current length
+ var start = list.length;
+ (function add( args ) {
+ jQuery.each( args, function( _, arg ) {
+ var type = jQuery.type( arg );
+ if ( type === "function" ) {
+ if ( !options.unique || !self.has( arg ) ) {
+ list.push( arg );
+ }
+ } else if ( arg && arg.length && type !== "string" ) {
+ // Inspect recursively
+ add( arg );
+ }
+ });
+ })( arguments );
+ // Do we need to add the callbacks to the
+ // current firing batch?
+ if ( firing ) {
+ firingLength = list.length;
+ // With memory, if we're not firing then
+ // we should call right away
+ } else if ( memory ) {
+ firingStart = start;
+ fire( memory );
+ }
+ }
+ return this;
+ },
+ // Remove a callback from the list
+ remove: function() {
+ if ( list ) {
+ jQuery.each( arguments, function( _, arg ) {
+ var index;
+ while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+ list.splice( index, 1 );
+ // Handle firing indexes
+ if ( firing ) {
+ if ( index <= firingLength ) {
+ firingLength--;
+ }
+ if ( index <= firingIndex ) {
+ firingIndex--;
+ }
+ }
+ }
+ });
+ }
+ return this;
+ },
+ // Check if a given callback is in the list.
+ // If no argument is given, return whether or not list has callbacks attached.
+ has: function( fn ) {
+ return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
+ },
+ // Remove all callbacks from the list
+ empty: function() {
+ list = [];
+ firingLength = 0;
+ return this;
+ },
+ // Have the list do nothing anymore
+ disable: function() {
+ list = stack = memory = undefined;
+ return this;
+ },
+ // Is it disabled?
+ disabled: function() {
+ return !list;
+ },
+ // Lock the list in its current state
+ lock: function() {
+ stack = undefined;
+ if ( !memory ) {
+ self.disable();
+ }
+ return this;
+ },
+ // Is it locked?
+ locked: function() {
+ return !stack;
+ },
+ // Call all callbacks with the given context and arguments
+ fireWith: function( context, args ) {
+ if ( list && ( !fired || stack ) ) {
+ args = args || [];
+ args = [ context, args.slice ? args.slice() : args ];
+ if ( firing ) {
+ stack.push( args );
+ } else {
+ fire( args );
+ }
+ }
+ return this;
+ },
+ // Call all the callbacks with the given arguments
+ fire: function() {
+ self.fireWith( this, arguments );
+ return this;
+ },
+ // To know if the callbacks have already been called at least once
+ fired: function() {
+ return !!fired;
+ }
+ };
+
+ return self;
+};
+
+
+jQuery.extend({
+
+ Deferred: function( func ) {
+ var tuples = [
+ // action, add listener, listener list, final state
+ [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+ [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+ [ "notify", "progress", jQuery.Callbacks("memory") ]
+ ],
+ state = "pending",
+ promise = {
+ state: function() {
+ return state;
+ },
+ always: function() {
+ deferred.done( arguments ).fail( arguments );
+ return this;
+ },
+ then: function( /* fnDone, fnFail, fnProgress */ ) {
+ var fns = arguments;
+ return jQuery.Deferred(function( newDefer ) {
+ jQuery.each( tuples, function( i, tuple ) {
+ var 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;
+ }
+
+ // 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" );
+ }
+ }
+});
+
+/**
+ * The ready event handler and self cleanup method
+ */
+function completed() {
+ document.removeEventListener( "DOMContentLoaded", completed, false );
+ window.removeEventListener( "load", completed, false );
+ 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 );
+
+ } else {
+
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", completed, false );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", completed, false );
+ }
+ }
+ return readyList.promise( obj );
+};
+
+// Kick off the DOM ready check even if the user does not
+jQuery.ready.promise();
+
+
+
+
+// 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,
+ len = 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 < len; i++ ) {
+ fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+ }
+ }
+ }
+
+ return chainable ?
+ elems :
+
+ // Gets
+ bulk ?
+ fn.call( elems ) :
+ len ? fn( elems[0], key ) : emptyGet;
+};
+
+
+/**
+ * Determines whether an object can have data
+ */
+jQuery.acceptData = function( owner ) {
+ // Accepts only:
+ // - Node
+ // - Node.ELEMENT_NODE
+ // - Node.DOCUMENT_NODE
+ // - Object
+ // - Any
+ /* jshint -W018 */
+ return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+function Data() {
+ // Support: Android<4,
+ // Old WebKit does not have Object.preventExtensions/freeze method,
+ // return new empty object instead with no [[set]] accessor
+ Object.defineProperty( this.cache = {}, 0, {
+ get: function() {
+ return {};
+ }
+ });
+
+ this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+Data.accepts = jQuery.acceptData;
+
+Data.prototype = {
+ key: function( owner ) {
+ // We can accept data for non-element nodes in modern browsers,
+ // but we should not, see #8335.
+ // Always return the key for a frozen object.
+ if ( !Data.accepts( owner ) ) {
+ return 0;
+ }
+
+ var descriptor = {},
+ // Check if the owner object already has a cache key
+ unlock = owner[ this.expando ];
+
+ // If not, create one
+ if ( !unlock ) {
+ unlock = Data.uid++;
+
+ // Secure it in a non-enumerable, non-writable property
+ try {
+ descriptor[ this.expando ] = { value: unlock };
+ Object.defineProperties( owner, descriptor );
+
+ // Support: Android<4
+ // Fallback to a less secure definition
+ } catch ( e ) {
+ descriptor[ this.expando ] = unlock;
+ jQuery.extend( owner, descriptor );
+ }
+ }
+
+ // Ensure the cache object
+ if ( !this.cache[ unlock ] ) {
+ this.cache[ unlock ] = {};
+ }
+
+ return unlock;
+ },
+ set: function( owner, data, value ) {
+ var prop,
+ // There may be an unlock assigned to this node,
+ // if there is no entry for this "owner", create one inline
+ // and set the unlock as though an owner entry had always existed
+ unlock = this.key( owner ),
+ cache = this.cache[ unlock ];
+
+ // Handle: [ owner, key, value ] args
+ if ( typeof data === "string" ) {
+ cache[ data ] = value;
+
+ // Handle: [ owner, { properties } ] args
+ } else {
+ // Fresh assignments by object are shallow copied
+ if ( jQuery.isEmptyObject( cache ) ) {
+ jQuery.extend( this.cache[ unlock ], data );
+ // Otherwise, copy the properties one-by-one to the cache object
+ } else {
+ for ( prop in data ) {
+ cache[ prop ] = data[ prop ];
+ }
+ }
+ }
+ return cache;
+ },
+ get: function( owner, key ) {
+ // Either a valid cache is found, or will be created.
+ // New caches will be created and the unlock returned,
+ // allowing direct access to the newly created
+ // empty data object. A valid owner object must be provided.
+ var cache = this.cache[ this.key( owner ) ];
+
+ return key === undefined ?
+ cache : cache[ key ];
+ },
+ access: function( owner, key, value ) {
+ var stored;
+ // In cases where either:
+ //
+ // 1. No key was specified
+ // 2. A string key was specified, but no value provided
+ //
+ // Take the "read" path and allow the get method to determine
+ // which value to return, respectively either:
+ //
+ // 1. The entire cache object
+ // 2. The data stored at the key
+ //
+ if ( key === undefined ||
+ ((key && typeof key === "string") && value === undefined) ) {
+
+ stored = this.get( owner, key );
+
+ return stored !== undefined ?
+ stored : this.get( owner, jQuery.camelCase(key) );
+ }
+
+ // [*]When the key is not a string, or both a key and value
+ // are specified, set or extend (existing objects) with either:
+ //
+ // 1. An object of properties
+ // 2. A key and value
+ //
+ this.set( owner, key, value );
+
+ // Since the "set" path can have two possible entry points
+ // return the expected data based on which path was taken[*]
+ return value !== undefined ? value : key;
+ },
+ remove: function( owner, key ) {
+ var i, name, camel,
+ unlock = this.key( owner ),
+ cache = this.cache[ unlock ];
+
+ if ( key === undefined ) {
+ this.cache[ unlock ] = {};
+
+ } else {
+ // Support array or space separated string of keys
+ if ( jQuery.isArray( key ) ) {
+ // 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 = key.concat( key.map( jQuery.camelCase ) );
+ } else {
+ camel = jQuery.camelCase( key );
+ // Try the string as a key before any manipulation
+ if ( key in cache ) {
+ name = [ key, camel ];
+ } else {
+ // If a key with the spaces exists, use it.
+ // Otherwise, create an array by matching non-whitespace
+ name = camel;
+ name = name in cache ?
+ [ name ] : ( name.match( rnotwhite ) || [] );
+ }
+ }
+
+ i = name.length;
+ while ( i-- ) {
+ delete cache[ name[ i ] ];
+ }
+ }
+ },
+ hasData: function( owner ) {
+ return !jQuery.isEmptyObject(
+ this.cache[ owner[ this.expando ] ] || {}
+ );
+ },
+ discard: function( owner ) {
+ if ( owner[ this.expando ] ) {
+ delete this.cache[ owner[ this.expando ] ];
+ }
+ }
+};
+var data_priv = new Data();
+
+var data_user = new Data();
+
+
+
+// Implementation Summary
+//
+// 1. Enforce API surface and semantic compatibility with 1.9.x branch
+// 2. Improve the module's maintainability by reducing the storage
+// paths to a single mechanism.
+// 3. Use the same single mechanism to support "private" and "user" data.
+// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+// 5. Avoid exposing implementation details on user objects (eg. expando properties)
+// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+ rmultiDash = /([A-Z])/g;
+
+function dataAttr( elem, key, data ) {
+ var name;
+
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && elem.nodeType === 1 ) {
+ 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
+ data_user.set( elem, key, data );
+ } else {
+ data = undefined;
+ }
+ }
+ return data;
+}
+
+jQuery.extend({
+ hasData: function( elem ) {
+ return data_user.hasData( elem ) || data_priv.hasData( elem );
+ },
+
+ data: function( elem, name, data ) {
+ return data_user.access( elem, name, data );
+ },
+
+ removeData: function( elem, name ) {
+ data_user.remove( elem, name );
+ },
+
+ // TODO: Now that all calls to _data and _removeData have been replaced
+ // with direct calls to data_priv methods, these can be deprecated.
+ _data: function( elem, name, data ) {
+ return data_priv.access( elem, name, data );
+ },
+
+ _removeData: function( elem, name ) {
+ data_priv.remove( elem, name );
+ }
+});
+
+jQuery.fn.extend({
+ data: function( key, value ) {
+ var i, name, data,
+ elem = this[ 0 ],
+ attrs = elem && elem.attributes;
+
+ // Gets all values
+ if ( key === undefined ) {
+ if ( this.length ) {
+ data = data_user.get( elem );
+
+ if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) {
+ 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 ] );
+ }
+ }
+ }
+ data_priv.set( elem, "hasDataAttrs", true );
+ }
+ }
+
+ return data;
+ }
+
+ // Sets multiple values
+ if ( typeof key === "object" ) {
+ return this.each(function() {
+ data_user.set( this, key );
+ });
+ }
+
+ return access( this, function( value ) {
+ var data,
+ camelKey = jQuery.camelCase( key );
+
+ // The calling jQuery object (element matches) is not empty
+ // (and therefore has an element appears at this[ 0 ]) and the
+ // `value` parameter was not undefined. An empty jQuery object
+ // will result in `undefined` for elem = this[ 0 ] which will
+ // throw an exception if an attempt to read a data cache is made.
+ if ( elem && value === undefined ) {
+ // Attempt to get data from the cache
+ // with the key as-is
+ data = data_user.get( elem, key );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // Attempt to get data from the cache
+ // with the key camelized
+ data = data_user.get( elem, camelKey );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // Attempt to "discover" the data in
+ // HTML5 custom data-* attrs
+ data = dataAttr( elem, camelKey, undefined );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // We tried really hard, but the data doesn't exist.
+ return;
+ }
+
+ // Set the data...
+ this.each(function() {
+ // First, attempt to store a copy or reference of any
+ // data that might've been store with a camelCased key.
+ var data = data_user.get( this, camelKey );
+
+ // For HTML5 data-* attribute interop, we have to
+ // store property names with dashes in a camelCase form.
+ // This might not apply to all properties...*
+ data_user.set( this, camelKey, value );
+
+ // *... In the case of properties that might _actually_
+ // have dashes, we need to also store a copy of that
+ // unchanged property.
+ if ( key.indexOf("-") !== -1 && data !== undefined ) {
+ data_user.set( this, key, value );
+ }
+ });
+ }, null, value, arguments.length > 1, null, true );
+ },
+
+ removeData: function( key ) {
+ return this.each(function() {
+ data_user.remove( this, key );
+ });
+ }
+});
+
+
+jQuery.extend({
+ queue: function( elem, type, data ) {
+ var queue;
+
+ if ( elem ) {
+ type = ( type || "fx" ) + "queue";
+ queue = data_priv.get( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !queue || jQuery.isArray( data ) ) {
+ queue = data_priv.access( 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 public - generate a queueHooks object, or return the current one
+ _queueHooks: function( elem, type ) {
+ var key = type + "queueHooks";
+ return data_priv.get( elem, key ) || data_priv.access( elem, key, {
+ empty: jQuery.Callbacks("once memory").add(function() {
+ data_priv.remove( elem, [ type + "queue", 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 = data_priv.get( 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 );
+ };
+
+var rcheckableType = (/^(?:checkbox|radio)$/i);
+
+
+
+(function() {
+ var fragment = document.createDocumentFragment(),
+ div = fragment.appendChild( document.createElement( "div" ) ),
+ input = document.createElement( "input" );
+
+ // Support: Safari<=5.1
+ // Check state lost if the name is set (#11217)
+ // Support: Windows Web Apps (WWA)
+ // `name` and `type` must use .setAttribute for WWA (#14901)
+ input.setAttribute( "type", "radio" );
+ input.setAttribute( "checked", "checked" );
+ input.setAttribute( "name", "t" );
+
+ div.appendChild( input );
+
+ // Support: Safari<=5.1, Android<4.2
+ // Older WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ // Support: IE<=11+
+ // Make sure textarea (and checkbox) defaultValue is properly cloned
+ div.innerHTML = "<textarea>x</textarea>";
+ support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+})();
+var strundefined = typeof undefined;
+
+
+
+support.focusinBubbles = "onfocusin" in window;
+
+
+var
+ 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 handleObjIn, eventHandle, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = data_priv.get( 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 && jQuery.event.triggered !== e.type ?
+ jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+ };
+ }
+
+ // 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 if the special events handler returns false
+ if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle, false );
+ }
+ }
+ }
+
+ 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;
+ }
+
+ },
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, selector, mappedTypes ) {
+
+ var j, origCount, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = data_priv.hasData( elem ) && data_priv.get( 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;
+ data_priv.remove( elem, "events" );
+ }
+ },
+
+ trigger: function( event, data, elem, onlyHandlers ) {
+
+ var i, cur, tmp, bubbleType, ontype, handle, special,
+ 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 = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( 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.
+ // Don't do default actions on window, that's where global variables be (#6170)
+ if ( ontype && jQuery.isFunction( 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;
+ elem[ type ]();
+ 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, j, ret, matched, handleObj,
+ handlerQueue = [],
+ args = slice.call( arguments ),
+ handlers = ( data_priv.get( 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 i, matches, sel, handleObj,
+ 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") ) {
+
+ for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+ // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+ if ( 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;
+ },
+
+ // 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 offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+ filter: function( event, original ) {
+ var eventDoc, doc, body,
+ button = original.button;
+
+ // 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 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;
+ }
+ },
+
+ 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: Cordova 2.5 (WebKit) (#13255)
+ // All events should have a target; Cordova deviceready doesn't
+ if ( !event.target ) {
+ event.target = document;
+ }
+
+ // Support: Safari 6.0+, Chrome<28
+ // Target should not be a text node (#504, #13143)
+ if ( event.target.nodeType === 3 ) {
+ event.target = event.target.parentNode;
+ }
+
+ return fixHook.filter ? fixHook.filter( event, originalEvent ) : 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 ) {
+ this.focus();
+ return false;
+ }
+ },
+ 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 ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
+ 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 = function( elem, type, handle ) {
+ if ( elem.removeEventListener ) {
+ elem.removeEventListener( type, handle, false );
+ }
+};
+
+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: 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-bindin…
+jQuery.Event.prototype = {
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse,
+
+ preventDefault: function() {
+ var e = this.originalEvent;
+
+ this.isDefaultPrevented = returnTrue;
+
+ if ( e && e.preventDefault ) {
+ e.preventDefault();
+ }
+ },
+ stopPropagation: function() {
+ var e = this.originalEvent;
+
+ this.isPropagationStopped = returnTrue;
+
+ if ( e && e.stopPropagation ) {
+ e.stopPropagation();
+ }
+ },
+ 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
+// Support: Chrome 15+
+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;
+ }
+ };
+});
+
+// Support: Firefox, Chrome, Safari
+// 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 = data_priv.access( doc, fix );
+
+ if ( !attaches ) {
+ doc.addEventListener( orig, handler, true );
+ }
+ data_priv.access( doc, fix, ( attaches || 0 ) + 1 );
+ },
+ teardown: function() {
+ var doc = this.ownerDocument || this,
+ attaches = data_priv.access( doc, fix ) - 1;
+
+ if ( !attaches ) {
+ doc.removeEventListener( orig, handler, true );
+ data_priv.remove( doc, fix );
+
+ } else {
+ data_priv.access( doc, fix, attaches );
+ }
+ }
+ };
+ });
+}
+
+jQuery.fn.extend({
+
+ on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+ var origFn, type;
+
+ // 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 );
+ }
+ }
+});
+
+
+var
+ rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+ rtagName = /<([\w:]+)/,
+ 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 = {
+
+ // Support: IE9
+ 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, "", "" ]
+ };
+
+// Support: IE9
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// Support: 1.x compatibility
+// 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 = (elem.getAttribute("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 i = 0,
+ l = elems.length;
+
+ for ( ; i < l; i++ ) {
+ data_priv.set(
+ elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" )
+ );
+ }
+}
+
+function cloneCopyEvent( src, dest ) {
+ var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+ if ( dest.nodeType !== 1 ) {
+ return;
+ }
+
+ // 1. Copy private data: events, handlers, etc.
+ if ( data_priv.hasData( src ) ) {
+ pdataOld = data_priv.access( src );
+ pdataCur = data_priv.set( dest, pdataOld );
+ events = pdataOld.events;
+
+ if ( events ) {
+ delete pdataCur.handle;
+ pdataCur.events = {};
+
+ for ( type in events ) {
+ for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+ jQuery.event.add( dest, type, events[ type ][ i ] );
+ }
+ }
+ }
+ }
+
+ // 2. Copy user data
+ if ( data_user.hasData( src ) ) {
+ udataOld = data_user.access( src );
+ udataCur = jQuery.extend( {}, udataOld );
+
+ data_user.set( dest, udataCur );
+ }
+}
+
+function getAll( context, tag ) {
+ var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) :
+ context.querySelectorAll ? context.querySelectorAll( tag || "*" ) :
+ [];
+
+ return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+ jQuery.merge( [ context ], ret ) :
+ ret;
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+ var nodeName = dest.nodeName.toLowerCase();
+
+ // Fails to persist the checked state of a cloned checkbox or radio button.
+ if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+ dest.checked = src.checked;
+
+ // Fails to return the selected option to the default selected state when cloning options
+ } else if ( nodeName === "input" || nodeName === "textarea" ) {
+ dest.defaultValue = src.defaultValue;
+ }
+}
+
+jQuery.extend({
+ clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+ var i, l, srcElements, destElements,
+ clone = elem.cloneNode( true ),
+ inPage = jQuery.contains( elem.ownerDocument, elem );
+
+ // Fix IE cloning issues
+ if ( !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 );
+
+ for ( i = 0, l = srcElements.length; i < l; i++ ) {
+ fixInput( srcElements[ i ], 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, l = srcElements.length; i < l; i++ ) {
+ cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+ }
+ } else {
+ cloneCopyEvent( elem, clone );
+ }
+ }
+
+ // Preserve script evaluation history
+ destElements = getAll( clone, "script" );
+ if ( destElements.length > 0 ) {
+ setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+ }
+
+ // Return the cloned set
+ return clone;
+ },
+
+ buildFragment: function( elems, context, scripts, selection ) {
+ var elem, tmp, tag, wrap, contains, j,
+ fragment = context.createDocumentFragment(),
+ nodes = [],
+ i = 0,
+ l = elems.length;
+
+ for ( ; i < l; i++ ) {
+ elem = elems[ i ];
+
+ if ( elem || elem === 0 ) {
+
+ // Add nodes directly
+ if ( jQuery.type( elem ) === "object" ) {
+ // Support: QtWebKit, PhantomJS
+ // push.apply(_, arraylike) throws on ancient WebKit
+ 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 || fragment.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;
+ }
+
+ // Support: QtWebKit, PhantomJS
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge( nodes, tmp.childNodes );
+
+ // Remember the top-level container
+ tmp = fragment.firstChild;
+
+ // Ensure the created nodes are orphaned (#12392)
+ tmp.textContent = "";
+ }
+ }
+ }
+
+ // Remove wrapper from fragment
+ fragment.textContent = "";
+
+ 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( fragment.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 );
+ }
+ }
+ }
+ }
+
+ return fragment;
+ },
+
+ cleanData: function( elems ) {
+ var data, elem, type, key,
+ special = jQuery.event.special,
+ i = 0;
+
+ for ( ; (elem = elems[ i ]) !== undefined; i++ ) {
+ if ( jQuery.acceptData( elem ) ) {
+ key = elem[ data_priv.expando ];
+
+ if ( key && (data = data_priv.cache[ key ]) ) {
+ 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 );
+ }
+ }
+ }
+ if ( data_priv.cache[ key ] ) {
+ // Discard any remaining `private` data
+ delete data_priv.cache[ key ];
+ }
+ }
+ }
+ // Discard any remaining `user` data
+ delete data_user.cache[ elem[ data_user.expando ] ];
+ }
+ }
+});
+
+jQuery.fn.extend({
+ text: function( value ) {
+ return access( this, function( value ) {
+ return value === undefined ?
+ jQuery.text( this ) :
+ this.empty().each(function() {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ this.textContent = 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++ ) {
+ if ( elem.nodeType === 1 ) {
+
+ // Prevent memory leaks
+ jQuery.cleanData( getAll( elem, false ) );
+
+ // Remove any remaining nodes
+ elem.textContent = "";
+ }
+ }
+
+ 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 && elem.nodeType === 1 ) {
+ return elem.innerHTML;
+ }
+
+ // See if we can take a shortcut and just use innerHTML
+ if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+ !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+ value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+ try {
+ for ( ; i < l; i++ ) {
+ elem = this[ i ] || {};
+
+ // Remove element nodes and prevent memory leaks
+ 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 fragment, first, scripts, hasScripts, node, doc,
+ 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 ) {
+ // Support: QtWebKit
+ // jQuery.merge because push.apply(_, arraylike) throws
+ 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 || "" ) &&
+ !data_priv.access( 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.textContent.replace( rcleanScript, "" ) );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return this;
+ }
+});
+
+jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+}, function( name, original ) {
+ jQuery.fn[ name ] = function( selector ) {
+ var elems,
+ ret = [],
+ insert = jQuery( selector ),
+ last = insert.length - 1,
+ i = 0;
+
+ for ( ; i <= last; i++ ) {
+ elems = i === last ? this : this.clone( true );
+ jQuery( insert[ i ] )[ original ]( elems );
+
+ // Support: QtWebKit
+ // .get() because push.apply(_, arraylike) throws
+ 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 optimization) 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 ].contentDocument;
+
+ // Support: IE
+ doc.write();
+ doc.close();
+
+ display = actualDisplay( nodeName, doc );
+ iframe.detach();
+ }
+
+ // Store the correct default display
+ elemdisplay[ nodeName ] = display;
+ }
+
+ return display;
+}
+var rmargin = (/^margin/);
+
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var 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 );
+ };
+
+
+
+function curCSS( elem, name, computed ) {
+ var width, minWidth, maxWidth, ret,
+ style = elem.style;
+
+ computed = computed || getStyles( elem );
+
+ // Support: IE9
+ // getPropertyValue is only needed for .css('filter') (#12537)
+ if ( computed ) {
+ ret = computed.getPropertyValue( name ) || computed[ name ];
+ }
+
+ if ( computed ) {
+
+ if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+ ret = jQuery.style( elem, name );
+ }
+
+ // Support: iOS < 6
+ // A tribute to the "awesome hack by Dean Edwards"
+ // iOS < 6 (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;
+ }
+ }
+
+ return ret !== undefined ?
+ // Support: IE
+ // IE returns zIndex value as an integer.
+ ret + "" :
+ ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+ // Define the hook, we'll check on the first run if it's really needed.
+ return {
+ get: function() {
+ if ( conditionFn() ) {
+ // Hook not needed (or it's not possible to use it due
+ // to missing dependency), remove it.
+ 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() {
+ var pixelPositionVal, boxSizingReliableVal,
+ docElem = document.documentElement,
+ container = document.createElement( "div" ),
+ div = document.createElement( "div" );
+
+ if ( !div.style ) {
+ return;
+ }
+
+ // Support: IE9-11+
+ // Style of cloned element affects source element cloned (#8908)
+ div.style.backgroundClip = "content-box";
+ div.cloneNode( true ).style.backgroundClip = "";
+ support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+ container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" +
+ "position:absolute";
+ container.appendChild( div );
+
+ // Executing both pixelPosition & boxSizingReliable tests require only one layout
+ // so they're executed at the same time to save the second computation.
+ function computePixelPositionAndBoxSizingReliable() {
+ 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";
+ div.innerHTML = "";
+ docElem.appendChild( container );
+
+ var divStyle = window.getComputedStyle( div, null );
+ pixelPositionVal = divStyle.top !== "1%";
+ boxSizingReliableVal = divStyle.width === "4px";
+
+ docElem.removeChild( container );
+ }
+
+ // Support: node.js jsdom
+ // Don't assume that getComputedStyle is a property of the global object
+ if ( window.getComputedStyle ) {
+ jQuery.extend( support, {
+ pixelPosition: function() {
+
+ // This test is executed only once but we still do memoizing
+ // since we can use the boxSizingReliable pre-computing.
+ // No need to check if the test was already performed, though.
+ computePixelPositionAndBoxSizingReliable();
+ return pixelPositionVal;
+ },
+ boxSizingReliable: function() {
+ if ( boxSizingReliableVal == null ) {
+ computePixelPositionAndBoxSizingReliable();
+ }
+ return boxSizingReliableVal;
+ },
+ reliableMarginRight: function() {
+
+ // Support: Android 2.3
+ // Check if 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
+ // This support function is only executed once so no memoizing is needed.
+ var ret,
+ marginDiv = div.appendChild( document.createElement( "div" ) );
+
+ // Reset CSS: box-sizing; display; margin; border; padding
+ marginDiv.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";
+ marginDiv.style.marginRight = marginDiv.style.width = "0";
+ div.style.width = "1px";
+ docElem.appendChild( container );
+
+ ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );
+
+ docElem.removeChild( container );
+ div.removeChild( marginDiv );
+
+ return ret;
+ }
+ });
+ }
+})();
+
+
+// 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
+ // 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[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 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 = 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;
+ }
+
+ // 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";
+}
+
+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 ] = data_priv.get( 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 ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) );
+ }
+ } else {
+ hidden = isHidden( elem );
+
+ if ( display !== "none" || !hidden ) {
+ data_priv.set( 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;
+}
+
+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: {
+ "float": "cssFloat"
+ },
+
+ // 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, then unprefixed version
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+ // Check if we're setting a value
+ if ( value !== undefined ) {
+ type = typeof value;
+
+ // Convert "+=" 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 (#7116)
+ if ( value == null || value !== value ) {
+ return;
+ }
+
+ // If a number, add 'px' to the (except for certain CSS properties)
+ if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+ value += "px";
+ }
+
+ // Support: IE9-11+
+ // background-* props affect original clone's values
+ 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 ) {
+ style[ name ] = value;
+ }
+
+ } 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 val, num, 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 ) );
+
+ // Try prefixed name followed by the unprefixed name
+ 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 ];
+ }
+
+ // Make numeric 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
+ // but it must have a current display style that would benefit
+ 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,
+ jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+ styles
+ ) : 0
+ );
+ }
+ };
+});
+
+// Support: Android 2.3
+jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
+ function( elem, computed ) {
+ if ( computed ) {
+ 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.
+ // 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 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: IE9
+// 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 string for doubling 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(),
+ // break 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,
+ i = 0,
+ attrs = { height: type };
+
+ // If we include width, step value is 1 to do all cssExpand values,
+ // otherwise 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 = data_priv.get( 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() {
+ // Ensure the complete handler is 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 IE9-10 do 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" ?
+ data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
+
+ if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
+ style.display = "inline-block";
+ }
+ }
+
+ if ( opts.overflow ) {
+ style.overflow = "hidden";
+ 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 = data_priv.access( 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;
+
+ data_priv.remove( 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 won't overwrite existing keys.
+ // Reusing 'index' 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 ),
+ // Support: Android 2.3
+ // 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 || data_priv.get( 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 = data_priv.get( 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 = data_priv.get( 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,
+ i = 0,
+ timers = jQuery.timers;
+
+ 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() {
+ var input = document.createElement( "input" ),
+ select = document.createElement( "select" ),
+ opt = select.appendChild( document.createElement( "option" ) );
+
+ input.type = "checkbox";
+
+ // Support: iOS<=5.1, Android<=4.2+
+ // Default value for a checkbox should be "on"
+ support.checkOn = input.value !== "";
+
+ // Support: IE<=11+
+ // Must access selectedIndex to make default options select
+ support.optSelected = opt.selected;
+
+ // Support: Android<=2.3
+ // Options inside disabled selects are incorrectly marked as disabled
+ select.disabled = true;
+ support.optDisabled = !opt.disabled;
+
+ // Support: IE<=11+
+ // An input loses its value after becoming a radio
+ input = document.createElement( "input" );
+ input.value = "t";
+ input.type = "radio";
+ support.radioValue = input.value === "t";
+})();
+
+
+var nodeHook, boolHook,
+ attrHandle = jQuery.expr.attrHandle;
+
+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
+ elem[ propName ] = false;
+ }
+
+ elem.removeAttribute( name );
+ }
+ }
+ },
+
+ attrHooks: {
+ type: {
+ set: function( elem, value ) {
+ if ( !support.radioValue && value === "radio" &&
+ jQuery.nodeName( elem, "input" ) ) {
+ var val = elem.value;
+ elem.setAttribute( "type", value );
+ if ( val ) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ }
+ }
+});
+
+// Hooks for boolean attributes
+boolHook = {
+ set: function( elem, value, name ) {
+ if ( value === false ) {
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr( elem, name );
+ } else {
+ elem.setAttribute( name, name );
+ }
+ return name;
+ }
+};
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+ var getter = attrHandle[ name ] || jQuery.find.attr;
+
+ attrHandle[ 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;
+ };
+});
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i;
+
+jQuery.fn.extend({
+ prop: function( name, value ) {
+ return access( this, jQuery.prop, name, value, arguments.length > 1 );
+ },
+
+ removeProp: function( name ) {
+ return this.each(function() {
+ delete this[ jQuery.propFix[ name ] || name ];
+ });
+ }
+});
+
+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 ) {
+ return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ?
+ elem.tabIndex :
+ -1;
+ }
+ }
+ }
+});
+
+if ( !support.optSelected ) {
+ jQuery.propHooks.selected = {
+ get: function( elem ) {
+ var parent = elem.parentNode;
+ if ( parent && 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;
+});
+
+
+
+
+var rclass = /[\t\r\n\f]/g;
+
+jQuery.fn.extend({
+ addClass: function( value ) {
+ var classes, elem, cur, clazz, j, finalValue,
+ proceed = typeof value === "string" && value,
+ i = 0,
+ len = this.length;
+
+ 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,
+ proceed = arguments.length === 0 || typeof value === "string" && value,
+ i = 0,
+ len = this.length;
+
+ 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
+ data_priv.set( 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 ? "" : data_priv.get( 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;
+ }
+});
+
+
+
+
+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 ];
+
+ // IE6-9 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 ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {
+ optionSet = true;
+ }
+ }
+
+ // Force browsers to behave consistently when non-matching value is set
+ if ( !optionSet ) {
+ elem.selectedIndex = -1;
+ }
+ return values;
+ }
+ }
+ }
+});
+
+// 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 ) {
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ };
+ }
+});
+
+
+
+
+// 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 = (/\?/);
+
+
+
+// Support: Android 2.3
+// Workaround failure to string-cast null input
+jQuery.parseJSON = function( data ) {
+ return JSON.parse( data + "" );
+};
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+ var xml, tmp;
+ if ( !data || typeof data !== "string" ) {
+ return null;
+ }
+
+ // Support: IE9
+ try {
+ tmp = new DOMParser();
+ xml = tmp.parseFromString( data, "text/xml" );
+ } catch ( e ) {
+ xml = undefined;
+ }
+
+ if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+ jQuery.error( "Invalid XML: " + data );
+ }
+ return xml;
+};
+
+
+var
+ rhash = /#.*$/,
+ rts = /([?&])_=[^&]*/,
+ rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+ // #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( "*" ),
+
+ // Document location
+ ajaxLocation = window.location.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[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 key, deep,
+ 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 ct, type, finalDataType, firstDataType,
+ 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 transport,
+ // URL without anti-cache param
+ cacheURL,
+ // Response headers
+ responseHeadersString,
+ responseHeaders,
+ // timeout handle
+ timeoutTimer,
+ // Cross-domain detection vars
+ parts,
+ // To know if global events are to be dispatched
+ fireGlobals,
+ // Loop variable
+ i,
+ // 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 (prefilters might expect it)
+ // 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 {
+ // Extract error from statusText and normalize 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 ) {
+ var wrap;
+
+ 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
+ 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.firstElementChild ) {
+ elem = elem.firstElementChild;
+ }
+
+ 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;
+};
+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();
+ }
+});
+
+
+jQuery.ajaxSettings.xhr = function() {
+ try {
+ return new XMLHttpRequest();
+ } catch( e ) {}
+};
+
+var xhrId = 0,
+ xhrCallbacks = {},
+ xhrSuccessStatus = {
+ // file protocol always yields status code 0, assume 200
+ 0: 200,
+ // Support: IE9
+ // #1450: sometimes IE returns 1223 when it should be 204
+ 1223: 204
+ },
+ xhrSupported = jQuery.ajaxSettings.xhr();
+
+// Support: IE9
+// 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 ]();
+ }
+ });
+}
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport(function( options ) {
+ var callback;
+
+ // Cross domain only allowed if supported through XMLHttpRequest
+ if ( support.cors || xhrSupported && !options.crossDomain ) {
+ return {
+ send: function( headers, complete ) {
+ var i,
+ xhr = options.xhr(),
+ id = ++xhrId;
+
+ 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 ) {
+ xhr.setRequestHeader( i, headers[ i ] );
+ }
+
+ // Callback
+ callback = function( type ) {
+ return function() {
+ if ( callback ) {
+ delete xhrCallbacks[ id ];
+ callback = xhr.onload = xhr.onerror = null;
+
+ if ( type === "abort" ) {
+ xhr.abort();
+ } else if ( type === "error" ) {
+ complete(
+ // file: protocol always yields status 0; see #8605, #14207
+ xhr.status,
+ xhr.statusText
+ );
+ } else {
+ complete(
+ xhrSuccessStatus[ xhr.status ] || xhr.status,
+ xhr.statusText,
+ // Support: IE9
+ // Accessing binary-data responseText throws an exception
+ // (#11426)
+ typeof xhr.responseText === "string" ? {
+ text: xhr.responseText
+ } : undefined,
+ xhr.getAllResponseHeaders()
+ );
+ }
+ }
+ };
+ };
+
+ // Listen to events
+ xhr.onload = callback();
+ xhr.onerror = callback("error");
+
+ // Create the abort callback
+ callback = xhrCallbacks[ id ] = callback("abort");
+
+ try {
+ // Do send the request (this may raise an exception)
+ xhr.send( options.hasContent && options.data || null );
+ } catch ( e ) {
+ // #14683: Only rethrow if this hasn't been notified as an error yet
+ if ( callback ) {
+ throw e;
+ }
+ }
+ },
+
+ abort: function() {
+ if ( callback ) {
+ callback();
+ }
+ }
+ };
+ }
+});
+
+
+
+
+// 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 crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+ if ( s.cache === undefined ) {
+ s.cache = false;
+ }
+ if ( s.crossDomain ) {
+ s.type = "GET";
+ }
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+ // This transport only deals with cross domain requests
+ if ( s.crossDomain ) {
+ var script, callback;
+ return {
+ send: function( _, complete ) {
+ script = jQuery("<script>").prop({
+ async: true,
+ charset: s.scriptCharset,
+ src: s.url
+ }).on(
+ "load error",
+ callback = function( evt ) {
+ script.remove();
+ callback = null;
+ if ( evt ) {
+ complete( evt.type === "error" ? 404 : 200, evt.type );
+ }
+ }
+ );
+ document.head.appendChild( script[ 0 ] );
+ },
+ abort: function() {
+ if ( callback ) {
+ callback();
+ }
+ }
+ };
+ }
+});
+
+
+
+
+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, type, response,
+ self = this,
+ off = url.indexOf(" ");
+
+ if ( off >= 0 ) {
+ selector = jQuery.trim( url.slice( off ) );
+ 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;
+}
+
+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" ) &&
+ ( curCSSTop + curCSSLeft ).indexOf("auto") > -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,
+ elem = this[ 0 ],
+ box = { top: 0, left: 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;
+ }
+
+ // Support: BlackBerry 5, iOS 3 (original iPhone)
+ // If we don't have gBCR, just use 0,0 rather than error
+ if ( typeof elem.getBoundingClientRect !== strundefined ) {
+ box = elem.getBoundingClientRect();
+ }
+ win = getWindow( doc );
+ return {
+ top: box.top + win.pageYOffset - docElem.clientTop,
+ left: box.left + win.pageXOffset - docElem.clientLeft
+ };
+ },
+
+ position: function() {
+ if ( !this[ 0 ] ) {
+ return;
+ }
+
+ var offsetParent, offset,
+ elem = this[ 0 ],
+ parentOffset = { top: 0, left: 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" ) {
+ // Assume getBoundingClientRect is there 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
+ 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 = "pageYOffset" === prop;
+
+ jQuery.fn[ method ] = function( val ) {
+ return access( this, function( elem, method, val ) {
+ var win = getWindow( elem );
+
+ if ( val === undefined ) {
+ return win ? win[ prop ] : elem[ method ];
+ }
+
+ if ( win ) {
+ win.scrollTo(
+ !top ? val : window.pageXOffset,
+ top ? val : window.pageYOffset
+ );
+
+ } else {
+ elem[ method ] = val;
+ }
+ }, method, val, arguments.length, null );
+ };
+});
+
+// Support: Safari<7+, Chrome<37+
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, 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
+ 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-…
+
+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/ui/new-ui-samples/js/vendor/modernizr.js b/ui/new-ui-samples/js/vendor/modernizr.js
new file mode 100644
index 0000000..3365339
--- /dev/null
+++ b/ui/new-ui-samples/js/vendor/modernizr.js
@@ -0,0 +1,1406 @@
+/*!
+ * Modernizr v2.8.3
+ * www.modernizr.com
+ *
+ * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton
+ * Available under the BSD and MIT licenses: www.modernizr.com/license/
+ */
+
+/*
+ * Modernizr tests which native CSS3 and HTML5 features are available in
+ * the current UA and makes the results available to you in two ways:
+ * as properties on a global Modernizr object, and as classes on the
+ * <html> element. This information allows you to progressively enhance
+ * your pages with a granular level of control over the experience.
+ *
+ * Modernizr has an optional (not included) conditional resource loader
+ * called Modernizr.load(), based on Yepnope.js (yepnopejs.com)
+ * To get a build that includes Modernizr.load(), as well as choosing
+ * which tests to include, go to www.modernizr.com/download/
+ *
+ * Authors Faruk Ates, Paul Irish, Alex Sexton
+ * Contributors Ryan Seddon, Ben Alman
+ */
+
+window.Modernizr = (function( window, document, undefined ) {
+
+ var version = '2.8.3',
+
+ Modernizr = {},
+
+ /*>>cssclasses*/
+ // option for enabling the HTML classes to be added
+ enableClasses = true,
+ /*>>cssclasses*/
+
+ docElement = document.documentElement,
+
+ /**
+ * Create our "modernizr" element that we do most feature tests on.
+ */
+ mod = 'modernizr',
+ modElem = document.createElement(mod),
+ mStyle = modElem.style,
+
+ /**
+ * Create the input element for various Web Forms feature tests.
+ */
+ inputElem /*>>inputelem*/ = document.createElement('input') /*>>inputelem*/ ,
+
+ /*>>smile*/
+ smile = ':)',
+ /*>>smile*/
+
+ toString = {}.toString,
+
+ // TODO :: make the prefixes more granular
+ /*>>prefixes*/
+ // List of property values to set for css tests. See ticket #21
+ prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),
+ /*>>prefixes*/
+
+ /*>>domprefixes*/
+ // Following spec is to expose vendor-specific style properties as:
+ // elem.style.WebkitBorderRadius
+ // and the following would be incorrect:
+ // elem.style.webkitBorderRadius
+
+ // Webkit ghosts their properties in lowercase but Opera & Moz do not.
+ // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+
+ // erik.eae.net/archives/2008/03/10/21.48.10/
+
+ // More here: github.com/Modernizr/Modernizr/issues/issue/21
+ omPrefixes = 'Webkit Moz O ms',
+
+ cssomPrefixes = omPrefixes.split(' '),
+
+ domPrefixes = omPrefixes.toLowerCase().split(' '),
+ /*>>domprefixes*/
+
+ /*>>ns*/
+ ns = {'svg': 'http://www.w3.org/2000/svg'},
+ /*>>ns*/
+
+ tests = {},
+ inputs = {},
+ attrs = {},
+
+ classes = [],
+
+ slice = classes.slice,
+
+ featureName, // used in testing loop
+
+
+ /*>>teststyles*/
+ // Inject element with style element and some CSS rules
+ injectElementWithStyles = function( rule, callback, nodes, testnames ) {
+
+ var style, ret, node, docOverflow,
+ div = document.createElement('div'),
+ // After page load injecting a fake body doesn't work so check if body exists
+ body = document.body,
+ // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it.
+ fakeBody = body || document.createElement('body');
+
+ if ( parseInt(nodes, 10) ) {
+ // In order not to give false positives we create a node for each test
+ // This also allows the method to scale for unspecified uses
+ while ( nodes-- ) {
+ node = document.createElement('div');
+ node.id = testnames ? testnames[nodes] : mod + (nodes + 1);
+ div.appendChild(node);
+ }
+ }
+
+ // <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed
+ // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element
+ // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements.
+ // msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx
+ // Documents served as xml will throw if using ­ so use xml friendly encoded version. See issue #277
+ style = ['­','<style id="s', mod, '">', rule, '</style>'].join('');
+ div.id = mod;
+ // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.
+ // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270
+ (body ? div : fakeBody).innerHTML += style;
+ fakeBody.appendChild(div);
+ if ( !body ) {
+ //avoid crashing IE8, if background image is used
+ fakeBody.style.background = '';
+ //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible
+ fakeBody.style.overflow = 'hidden';
+ docOverflow = docElement.style.overflow;
+ docElement.style.overflow = 'hidden';
+ docElement.appendChild(fakeBody);
+ }
+
+ ret = callback(div, rule);
+ // If this is done after page load we don't want to remove the body so check if body exists
+ if ( !body ) {
+ fakeBody.parentNode.removeChild(fakeBody);
+ docElement.style.overflow = docOverflow;
+ } else {
+ div.parentNode.removeChild(div);
+ }
+
+ return !!ret;
+
+ },
+ /*>>teststyles*/
+
+ /*>>mq*/
+ // adapted from matchMedia polyfill
+ // by Scott Jehl and Paul Irish
+ // gist.github.com/786768
+ testMediaQuery = function( mq ) {
+
+ var matchMedia = window.matchMedia || window.msMatchMedia;
+ if ( matchMedia ) {
+ return matchMedia(mq) && matchMedia(mq).matches || false;
+ }
+
+ var bool;
+
+ injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) {
+ bool = (window.getComputedStyle ?
+ getComputedStyle(node, null) :
+ node.currentStyle)['position'] == 'absolute';
+ });
+
+ return bool;
+
+ },
+ /*>>mq*/
+
+
+ /*>>hasevent*/
+ //
+ // isEventSupported determines if a given element supports the given event
+ // kangax.github.com/iseventsupported/
+ //
+ // The following results are known incorrects:
+ // Modernizr.hasEvent("webkitTransitionEnd", elem) // false negative
+ // Modernizr.hasEvent("textInput") // in Webkit. github.com/Modernizr/Modernizr/issues/333
+ // ...
+ isEventSupported = (function() {
+
+ var TAGNAMES = {
+ 'select': 'input', 'change': 'input',
+ 'submit': 'form', 'reset': 'form',
+ 'error': 'img', 'load': 'img', 'abort': 'img'
+ };
+
+ function isEventSupported( eventName, element ) {
+
+ element = element || document.createElement(TAGNAMES[eventName] || 'div');
+ eventName = 'on' + eventName;
+
+ // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize", whereas `in` "catches" those
+ var isSupported = eventName in element;
+
+ if ( !isSupported ) {
+ // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element
+ if ( !element.setAttribute ) {
+ element = document.createElement('div');
+ }
+ if ( element.setAttribute && element.removeAttribute ) {
+ element.setAttribute(eventName, '');
+ isSupported = is(element[eventName], 'function');
+
+ // If property was created, "remove it" (by setting value to `undefined`)
+ if ( !is(element[eventName], 'undefined') ) {
+ element[eventName] = undefined;
+ }
+ element.removeAttribute(eventName);
+ }
+ }
+
+ element = null;
+ return isSupported;
+ }
+ return isEventSupported;
+ })(),
+ /*>>hasevent*/
+
+ // TODO :: Add flag for hasownprop ? didn't last time
+
+ // hasOwnProperty shim by kangax needed for Safari 2.0 support
+ _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;
+
+ if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {
+ hasOwnProp = function (object, property) {
+ return _hasOwnProperty.call(object, property);
+ };
+ }
+ else {
+ hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */
+ return ((property in object) && is(object.constructor.prototype[property], 'undefined'));
+ };
+ }
+
+ // Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js
+ // es5.github.com/#x15.3.4.5
+
+ if (!Function.prototype.bind) {
+ Function.prototype.bind = function bind(that) {
+
+ var target = this;
+
+ if (typeof target != "function") {
+ throw new TypeError();
+ }
+
+ var args = slice.call(arguments, 1),
+ bound = function () {
+
+ if (this instanceof bound) {
+
+ var F = function(){};
+ F.prototype = target.prototype;
+ var self = new F();
+
+ var result = target.apply(
+ self,
+ args.concat(slice.call(arguments))
+ );
+ if (Object(result) === result) {
+ return result;
+ }
+ return self;
+
+ } else {
+
+ return target.apply(
+ that,
+ args.concat(slice.call(arguments))
+ );
+
+ }
+
+ };
+
+ return bound;
+ };
+ }
+
+ /**
+ * setCss applies given styles to the Modernizr DOM node.
+ */
+ function setCss( str ) {
+ mStyle.cssText = str;
+ }
+
+ /**
+ * setCssAll extrapolates all vendor-specific css strings.
+ */
+ function setCssAll( str1, str2 ) {
+ return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));
+ }
+
+ /**
+ * is returns a boolean for if typeof obj is exactly type.
+ */
+ function is( obj, type ) {
+ return typeof obj === type;
+ }
+
+ /**
+ * contains returns a boolean for if substr is found within str.
+ */
+ function contains( str, substr ) {
+ return !!~('' + str).indexOf(substr);
+ }
+
+ /*>>testprop*/
+
+ // testProps is a generic CSS / DOM property test.
+
+ // In testing support for a given CSS property, it's legit to test:
+ // `elem.style[styleName] !== undefined`
+ // If the property is supported it will return an empty string,
+ // if unsupported it will return undefined.
+
+ // We'll take advantage of this quick test and skip setting a style
+ // on our modernizr element, but instead just testing undefined vs
+ // empty string.
+
+ // Because the testing of the CSS property names (with "-", as
+ // opposed to the camelCase DOM properties) is non-portable and
+ // non-standard but works in WebKit and IE (but not Gecko or Opera),
+ // we explicitly reject properties with dashes so that authors
+ // developing in WebKit or IE first don't end up with
+ // browser-specific content by accident.
+
+ function testProps( props, prefixed ) {
+ for ( var i in props ) {
+ var prop = props[i];
+ if ( !contains(prop, "-") && mStyle[prop] !== undefined ) {
+ return prefixed == 'pfx' ? prop : true;
+ }
+ }
+ return false;
+ }
+ /*>>testprop*/
+
+ // TODO :: add testDOMProps
+ /**
+ * testDOMProps is a generic DOM property test; if a browser supports
+ * a certain property, it won't return undefined for it.
+ */
+ function testDOMProps( props, obj, elem ) {
+ for ( var i in props ) {
+ var item = obj[props[i]];
+ if ( item !== undefined) {
+
+ // return the property name as a string
+ if (elem === false) return props[i];
+
+ // let's bind a function
+ if (is(item, 'function')){
+ // default to autobind unless override
+ return item.bind(elem || obj);
+ }
+
+ // return the unbound function or obj or value
+ return item;
+ }
+ }
+ return false;
+ }
+
+ /*>>testallprops*/
+ /**
+ * testPropsAll tests a list of DOM properties we want to check against.
+ * We specify literally ALL possible (known and/or likely) properties on
+ * the element including the non-vendor prefixed one, for forward-
+ * compatibility.
+ */
+ function testPropsAll( prop, prefixed, elem ) {
+
+ var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),
+ props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');
+
+ // did they call .prefixed('boxSizing') or are we just testing a prop?
+ if(is(prefixed, "string") || is(prefixed, "undefined")) {
+ return testProps(props, prefixed);
+
+ // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])
+ } else {
+ props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');
+ return testDOMProps(props, prefixed, elem);
+ }
+ }
+ /*>>testallprops*/
+
+
+ /**
+ * Tests
+ * -----
+ */
+
+ // The *new* flexbox
+ // dev.w3.org/csswg/css3-flexbox
+
+ tests['flexbox'] = function() {
+ return testPropsAll('flexWrap');
+ };
+
+ // The *old* flexbox
+ // www.w3.org/TR/2009/WD-css3-flexbox-20090723/
+
+ tests['flexboxlegacy'] = function() {
+ return testPropsAll('boxDirection');
+ };
+
+ // On the S60 and BB Storm, getContext exists, but always returns undefined
+ // so we actually have to call getContext() to verify
+ // github.com/Modernizr/Modernizr/issues/issue/97/
+
+ tests['canvas'] = function() {
+ var elem = document.createElement('canvas');
+ return !!(elem.getContext && elem.getContext('2d'));
+ };
+
+ tests['canvastext'] = function() {
+ return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));
+ };
+
+ // webk.it/70117 is tracking a legit WebGL feature detect proposal
+
+ // We do a soft detect which may false positive in order to avoid
+ // an expensive context creation: bugzil.la/732441
+
+ tests['webgl'] = function() {
+ return !!window.WebGLRenderingContext;
+ };
+
+ /*
+ * The Modernizr.touch test only indicates if the browser supports
+ * touch events, which does not necessarily reflect a touchscreen
+ * device, as evidenced by tablets running Windows 7 or, alas,
+ * the Palm Pre / WebOS (touch) phones.
+ *
+ * Additionally, Chrome (desktop) used to lie about its support on this,
+ * but that has since been rectified: crbug.com/36415
+ *
+ * We also test for Firefox 4 Multitouch Support.
+ *
+ * For more info, see: modernizr.github.com/Modernizr/touch.html
+ */
+
+ tests['touch'] = function() {
+ var bool;
+
+ if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
+ bool = true;
+ } else {
+ injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {
+ bool = node.offsetTop === 9;
+ });
+ }
+
+ return bool;
+ };
+
+
+ // geolocation is often considered a trivial feature detect...
+ // Turns out, it's quite tricky to get right:
+ //
+ // Using !!navigator.geolocation does two things we don't want. It:
+ // 1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513
+ // 2. Disables page caching in WebKit: webk.it/43956
+ //
+ // Meanwhile, in Firefox < 8, an about:config setting could expose
+ // a false positive that would throw an exception: bugzil.la/688158
+
+ tests['geolocation'] = function() {
+ return 'geolocation' in navigator;
+ };
+
+
+ tests['postmessage'] = function() {
+ return !!window.postMessage;
+ };
+
+
+ // Chrome incognito mode used to throw an exception when using openDatabase
+ // It doesn't anymore.
+ tests['websqldatabase'] = function() {
+ return !!window.openDatabase;
+ };
+
+ // Vendors had inconsistent prefixing with the experimental Indexed DB:
+ // - Webkit's implementation is accessible through webkitIndexedDB
+ // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB
+ // For speed, we don't test the legacy (and beta-only) indexedDB
+ tests['indexedDB'] = function() {
+ return !!testPropsAll("indexedDB", window);
+ };
+
+ // documentMode logic from YUI to filter out IE8 Compat Mode
+ // which false positives.
+ tests['hashchange'] = function() {
+ return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);
+ };
+
+ // Per 1.6:
+ // This used to be Modernizr.historymanagement but the longer
+ // name has been deprecated in favor of a shorter and property-matching one.
+ // The old API is still available in 1.6, but as of 2.0 will throw a warning,
+ // and in the first release thereafter disappear entirely.
+ tests['history'] = function() {
+ return !!(window.history && history.pushState);
+ };
+
+ tests['draganddrop'] = function() {
+ var div = document.createElement('div');
+ return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);
+ };
+
+ // FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10
+ // will be supported until FF19 (2/12/13), at which time, ESR becomes FF17.
+ // FF10 still uses prefixes, so check for it until then.
+ // for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/
+ tests['websockets'] = function() {
+ return 'WebSocket' in window || 'MozWebSocket' in window;
+ };
+
+
+ // css-tricks.com/rgba-browser-support/
+ tests['rgba'] = function() {
+ // Set an rgba() color and check the returned value
+
+ setCss('background-color:rgba(150,255,150,.5)');
+
+ return contains(mStyle.backgroundColor, 'rgba');
+ };
+
+ tests['hsla'] = function() {
+ // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,
+ // except IE9 who retains it as hsla
+
+ setCss('background-color:hsla(120,40%,100%,.5)');
+
+ return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');
+ };
+
+ tests['multiplebgs'] = function() {
+ // Setting multiple images AND a color on the background shorthand property
+ // and then querying the style.background property value for the number of
+ // occurrences of "url(" is a reliable method for detecting ACTUAL support for this!
+
+ setCss('background:url(https://),url(https://),red url(https://)');
+
+ // If the UA supports multiple backgrounds, there should be three occurrences
+ // of the string "url(" in the return value for elemStyle.background
+
+ return (/(url\s*\(.*?){3}/).test(mStyle.background);
+ };
+
+
+
+ // this will false positive in Opera Mini
+ // github.com/Modernizr/Modernizr/issues/396
+
+ tests['backgroundsize'] = function() {
+ return testPropsAll('backgroundSize');
+ };
+
+ tests['borderimage'] = function() {
+ return testPropsAll('borderImage');
+ };
+
+
+ // Super comprehensive table about all the unique implementations of
+ // border-radius: muddledramblings.com/table-of-css3-border-radius-compliance
+
+ tests['borderradius'] = function() {
+ return testPropsAll('borderRadius');
+ };
+
+ // WebOS unfortunately false positives on this test.
+ tests['boxshadow'] = function() {
+ return testPropsAll('boxShadow');
+ };
+
+ // FF3.0 will false positive on this test
+ tests['textshadow'] = function() {
+ return document.createElement('div').style.textShadow === '';
+ };
+
+
+ tests['opacity'] = function() {
+ // Browsers that actually have CSS Opacity implemented have done so
+ // according to spec, which means their return values are within the
+ // range of [0.0,1.0] - including the leading zero.
+
+ setCssAll('opacity:.55');
+
+ // The non-literal . in this regex is intentional:
+ // German Chrome returns this value as 0,55
+ // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632
+ return (/^0.55$/).test(mStyle.opacity);
+ };
+
+
+ // Note, Android < 4 will pass this test, but can only animate
+ // a single property at a time
+ // goo.gl/v3V4Gp
+ tests['cssanimations'] = function() {
+ return testPropsAll('animationName');
+ };
+
+
+ tests['csscolumns'] = function() {
+ return testPropsAll('columnCount');
+ };
+
+
+ tests['cssgradients'] = function() {
+ /**
+ * For CSS Gradients syntax, please see:
+ * webkit.org/blog/175/introducing-css-gradients/
+ * developer.mozilla.org/en/CSS/-moz-linear-gradient
+ * developer.mozilla.org/en/CSS/-moz-radial-gradient
+ * dev.w3.org/csswg/css3-images/#gradients-
+ */
+
+ var str1 = 'background-image:',
+ str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',
+ str3 = 'linear-gradient(left top,#9f9, white);';
+
+ setCss(
+ // legacy webkit syntax (FIXME: remove when syntax not in use anymore)
+ (str1 + '-webkit- '.split(' ').join(str2 + str1) +
+ // standard syntax // trailing 'background-image:'
+ prefixes.join(str3 + str1)).slice(0, -str1.length)
+ );
+
+ return contains(mStyle.backgroundImage, 'gradient');
+ };
+
+
+ tests['cssreflections'] = function() {
+ return testPropsAll('boxReflect');
+ };
+
+
+ tests['csstransforms'] = function() {
+ return !!testPropsAll('transform');
+ };
+
+
+ tests['csstransforms3d'] = function() {
+
+ var ret = !!testPropsAll('perspective');
+
+ // Webkit's 3D transforms are passed off to the browser's own graphics renderer.
+ // It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in
+ // some conditions. As a result, Webkit typically recognizes the syntax but
+ // will sometimes throw a false positive, thus we must do a more thorough check:
+ if ( ret && 'webkitPerspective' in docElement.style ) {
+
+ // Webkit allows this media query to succeed only if the feature is enabled.
+ // `@media (transform-3d),(-webkit-transform-3d){ ... }`
+ injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {
+ ret = node.offsetLeft === 9 && node.offsetHeight === 3;
+ });
+ }
+ return ret;
+ };
+
+
+ tests['csstransitions'] = function() {
+ return testPropsAll('transition');
+ };
+
+
+ /*>>fontface*/
+ // @font-face detection routine by Diego Perini
+ // javascript.nwbox.com/CSSSupport/
+
+ // false positives:
+ // WebOS github.com/Modernizr/Modernizr/issues/342
+ // WP7 github.com/Modernizr/Modernizr/issues/538
+ tests['fontface'] = function() {
+ var bool;
+
+ injectElementWithStyles('@font-face {font-family:"font";src:url("https://")}', function( node, rule ) {
+ var style = document.getElementById('smodernizr'),
+ sheet = style.sheet || style.styleSheet,
+ cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';
+
+ bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;
+ });
+
+ return bool;
+ };
+ /*>>fontface*/
+
+ // CSS generated content detection
+ tests['generatedcontent'] = function() {
+ var bool;
+
+ injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:"',smile,'";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {
+ bool = node.offsetHeight >= 3;
+ });
+
+ return bool;
+ };
+
+
+
+ // These tests evaluate support of the video/audio elements, as well as
+ // testing what types of content they support.
+ //
+ // We're using the Boolean constructor here, so that we can extend the value
+ // e.g. Modernizr.video // true
+ // Modernizr.video.ogg // 'probably'
+ //
+ // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845
+ // thx to NielsLeenheer and zcorpan
+
+ // Note: in some older browsers, "no" was a return value instead of empty string.
+ // It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2
+ // It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5
+
+ tests['video'] = function() {
+ var elem = document.createElement('video'),
+ bool = false;
+
+ // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224
+ try {
+ if ( bool = !!elem.canPlayType ) {
+ bool = new Boolean(bool);
+ bool.ogg = elem.canPlayType('video/ogg; codecs="theora"') .replace(/^no$/,'');
+
+ // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546
+ bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"') .replace(/^no$/,'');
+
+ bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,'');
+ }
+
+ } catch(e) { }
+
+ return bool;
+ };
+
+ tests['audio'] = function() {
+ var elem = document.createElement('audio'),
+ bool = false;
+
+ try {
+ if ( bool = !!elem.canPlayType ) {
+ bool = new Boolean(bool);
+ bool.ogg = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,'');
+ bool.mp3 = elem.canPlayType('audio/mpeg;') .replace(/^no$/,'');
+
+ // Mimetypes accepted:
+ // developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_ele…
+ // bit.ly/iphoneoscodecs
+ bool.wav = elem.canPlayType('audio/wav; codecs="1"') .replace(/^no$/,'');
+ bool.m4a = ( elem.canPlayType('audio/x-m4a;') ||
+ elem.canPlayType('audio/aac;')) .replace(/^no$/,'');
+ }
+ } catch(e) { }
+
+ return bool;
+ };
+
+
+ // In FF4, if disabled, window.localStorage should === null.
+
+ // Normally, we could not test that directly and need to do a
+ // `('localStorage' in window) && ` test first because otherwise Firefox will
+ // throw bugzil.la/365772 if cookies are disabled
+
+ // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem
+ // will throw the exception:
+ // QUOTA_EXCEEDED_ERRROR DOM Exception 22.
+ // Peculiarly, getItem and removeItem calls do not throw.
+
+ // Because we are forced to try/catch this, we'll go aggressive.
+
+ // Just FWIW: IE8 Compat mode supports these features completely:
+ // www.quirksmode.org/dom/html5.html
+ // But IE8 doesn't support either with local files
+
+ tests['localstorage'] = function() {
+ try {
+ localStorage.setItem(mod, mod);
+ localStorage.removeItem(mod);
+ return true;
+ } catch(e) {
+ return false;
+ }
+ };
+
+ tests['sessionstorage'] = function() {
+ try {
+ sessionStorage.setItem(mod, mod);
+ sessionStorage.removeItem(mod);
+ return true;
+ } catch(e) {
+ return false;
+ }
+ };
+
+
+ tests['webworkers'] = function() {
+ return !!window.Worker;
+ };
+
+
+ tests['applicationcache'] = function() {
+ return !!window.applicationCache;
+ };
+
+
+ // Thanks to Erik Dahlstrom
+ tests['svg'] = function() {
+ return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;
+ };
+
+ // specifically for SVG inline in HTML, not within XHTML
+ // test page: paulirish.com/demo/inline-svg
+ tests['inlinesvg'] = function() {
+ var div = document.createElement('div');
+ div.innerHTML = '<svg/>';
+ return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;
+ };
+
+ // SVG SMIL animation
+ tests['smil'] = function() {
+ return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));
+ };
+
+ // This test is only for clip paths in SVG proper, not clip paths on HTML content
+ // demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg
+
+ // However read the comments to dig into applying SVG clippaths to HTML content here:
+ // github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491
+ tests['svgclippaths'] = function() {
+ return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));
+ };
+
+ /*>>webforms*/
+ // input features and input types go directly onto the ret object, bypassing the tests loop.
+ // Hold this guy to execute in a moment.
+ function webforms() {
+ /*>>input*/
+ // Run through HTML5's new input attributes to see if the UA understands any.
+ // We're using f which is the <input> element created early on
+ // Mike Taylr has created a comprehensive resource for testing these attributes
+ // when applied to all input types:
+ // miketaylr.com/code/input-type-attr.html
+ // spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html…
+
+ // Only input placeholder is tested while textarea's placeholder is not.
+ // Currently Safari 4 and Opera 11 have support only for the input placeholder
+ // Both tests are available in feature-detects/forms-placeholder.js
+ Modernizr['input'] = (function( props ) {
+ for ( var i = 0, len = props.length; i < len; i++ ) {
+ attrs[ props[i] ] = !!(props[i] in inputElem);
+ }
+ if (attrs.list){
+ // safari false positive's on datalist: webk.it/74252
+ // see also github.com/Modernizr/Modernizr/issues/146
+ attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);
+ }
+ return attrs;
+ })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));
+ /*>>input*/
+
+ /*>>inputtypes*/
+ // Run through HTML5's new input types to see if the UA understands any.
+ // This is put behind the tests runloop because it doesn't return a
+ // true/false like all the other tests; instead, it returns an object
+ // containing each input type with its corresponding true/false value
+
+ // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/
+ Modernizr['inputtypes'] = (function(props) {
+
+ for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {
+
+ inputElem.setAttribute('type', inputElemType = props[i]);
+ bool = inputElem.type !== 'text';
+
+ // We first check to see if the type we give it sticks..
+ // If the type does, we feed it a textual value, which shouldn't be valid.
+ // If the value doesn't stick, we know there's input sanitization which infers a custom UI
+ if ( bool ) {
+
+ inputElem.value = smile;
+ inputElem.style.cssText = 'position:absolute;visibility:hidden;';
+
+ if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {
+
+ docElement.appendChild(inputElem);
+ defaultView = document.defaultView;
+
+ // Safari 2-4 allows the smiley as a value, despite making a slider
+ bool = defaultView.getComputedStyle &&
+ defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&
+ // Mobile android web browser has false positive, so must
+ // check the height to see if the widget is actually there.
+ (inputElem.offsetHeight !== 0);
+
+ docElement.removeChild(inputElem);
+
+ } else if ( /^(search|tel)$/.test(inputElemType) ){
+ // Spec doesn't define any special parsing or detectable UI
+ // behaviors so we pass these through as true
+
+ // Interestingly, opera fails the earlier test, so it doesn't
+ // even make it here.
+
+ } else if ( /^(url|email)$/.test(inputElemType) ) {
+ // Real url and email support comes with prebaked validation.
+ bool = inputElem.checkValidity && inputElem.checkValidity() === false;
+
+ } else {
+ // If the upgraded input compontent rejects the :) text, we got a winner
+ bool = inputElem.value != smile;
+ }
+ }
+
+ inputs[ props[i] ] = !!bool;
+ }
+ return inputs;
+ })('search tel url email datetime date month week time datetime-local number range color'.split(' '));
+ /*>>inputtypes*/
+ }
+ /*>>webforms*/
+
+
+ // End of test definitions
+ // -----------------------
+
+
+
+ // Run through all tests and detect their support in the current UA.
+ // todo: hypothetically we could be doing an array of tests and use a basic loop here.
+ for ( var feature in tests ) {
+ if ( hasOwnProp(tests, feature) ) {
+ // run the test, throw the return value into the Modernizr,
+ // then based on that boolean, define an appropriate className
+ // and push it into an array of classes we'll join later.
+ featureName = feature.toLowerCase();
+ Modernizr[featureName] = tests[feature]();
+
+ classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);
+ }
+ }
+
+ /*>>webforms*/
+ // input tests need to run.
+ Modernizr.input || webforms();
+ /*>>webforms*/
+
+
+ /**
+ * addTest allows the user to define their own feature tests
+ * the result will be added onto the Modernizr object,
+ * as well as an appropriate className set on the html element
+ *
+ * @param feature - String naming the feature
+ * @param test - Function returning true if feature is supported, false if not
+ */
+ Modernizr.addTest = function ( feature, test ) {
+ if ( typeof feature == 'object' ) {
+ for ( var key in feature ) {
+ if ( hasOwnProp( feature, key ) ) {
+ Modernizr.addTest( key, feature[ key ] );
+ }
+ }
+ } else {
+
+ feature = feature.toLowerCase();
+
+ if ( Modernizr[feature] !== undefined ) {
+ // we're going to quit if you're trying to overwrite an existing test
+ // if we were to allow it, we'd do this:
+ // var re = new RegExp("\\b(no-)?" + feature + "\\b");
+ // docElement.className = docElement.className.replace( re, '' );
+ // but, no rly, stuff 'em.
+ return Modernizr;
+ }
+
+ test = typeof test == 'function' ? test() : test;
+
+ if (typeof enableClasses !== "undefined" && enableClasses) {
+ docElement.className += ' ' + (test ? '' : 'no-') + feature;
+ }
+ Modernizr[feature] = test;
+
+ }
+
+ return Modernizr; // allow chaining.
+ };
+
+
+ // Reset modElem.cssText to nothing to reduce memory footprint.
+ setCss('');
+ modElem = inputElem = null;
+
+ /*>>shiv*/
+ /**
+ * @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+ */
+ ;(function(window, document) {
+ /*jshint evil:true */
+ /** version */
+ var version = '3.7.0';
+
+ /** Preset options */
+ var options = window.html5 || {};
+
+ /** Used to skip problem elements */
+ var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
+
+ /** Not all elements can be cloned in IE **/
+ var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
+
+ /** Detect whether the browser supports default html5 styles */
+ var supportsHtml5Styles;
+
+ /** Name of the expando, to work with multiple documents or to re-shiv one document */
+ var expando = '_html5shiv';
+
+ /** The id for the the documents expando */
+ var expanID = 0;
+
+ /** Cached data for each document */
+ var expandoData = {};
+
+ /** Detect whether the browser supports unknown elements */
+ var supportsUnknownElements;
+
+ (function() {
+ try {
+ var a = document.createElement('a');
+ a.innerHTML = '<xyz></xyz>';
+ //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
+ supportsHtml5Styles = ('hidden' in a);
+
+ supportsUnknownElements = a.childNodes.length == 1 || (function() {
+ // assign a false positive if unable to shiv
+ (document.createElement)('a');
+ var frag = document.createDocumentFragment();
+ return (
+ typeof frag.cloneNode == 'undefined' ||
+ typeof frag.createDocumentFragment == 'undefined' ||
+ typeof frag.createElement == 'undefined'
+ );
+ }());
+ } catch(e) {
+ // assign a false positive if detection fails => unable to shiv
+ supportsHtml5Styles = true;
+ supportsUnknownElements = true;
+ }
+
+ }());
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Creates a style sheet with the given CSS text and adds it to the document.
+ * @private
+ * @param {Document} ownerDocument The document.
+ * @param {String} cssText The CSS text.
+ * @returns {StyleSheet} The style element.
+ */
+ function addStyleSheet(ownerDocument, cssText) {
+ var p = ownerDocument.createElement('p'),
+ parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
+
+ p.innerHTML = 'x<style>' + cssText + '</style>';
+ return parent.insertBefore(p.lastChild, parent.firstChild);
+ }
+
+ /**
+ * Returns the value of `html5.elements` as an array.
+ * @private
+ * @returns {Array} An array of shived element node names.
+ */
+ function getElements() {
+ var elements = html5.elements;
+ return typeof elements == 'string' ? elements.split(' ') : elements;
+ }
+
+ /**
+ * Returns the data associated to the given document
+ * @private
+ * @param {Document} ownerDocument The document.
+ * @returns {Object} An object of data.
+ */
+ function getExpandoData(ownerDocument) {
+ var data = expandoData[ownerDocument[expando]];
+ if (!data) {
+ data = {};
+ expanID++;
+ ownerDocument[expando] = expanID;
+ expandoData[expanID] = data;
+ }
+ return data;
+ }
+
+ /**
+ * returns a shived element for the given nodeName and document
+ * @memberOf html5
+ * @param {String} nodeName name of the element
+ * @param {Document} ownerDocument The context document.
+ * @returns {Object} The shived element.
+ */
+ function createElement(nodeName, ownerDocument, data){
+ if (!ownerDocument) {
+ ownerDocument = document;
+ }
+ if(supportsUnknownElements){
+ return ownerDocument.createElement(nodeName);
+ }
+ if (!data) {
+ data = getExpandoData(ownerDocument);
+ }
+ var node;
+
+ if (data.cache[nodeName]) {
+ node = data.cache[nodeName].cloneNode();
+ } else if (saveClones.test(nodeName)) {
+ node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
+ } else {
+ node = data.createElem(nodeName);
+ }
+
+ // Avoid adding some elements to fragments in IE < 9 because
+ // * Attributes like `name` or `type` cannot be set/changed once an element
+ // is inserted into a document/fragment
+ // * Link elements with `src` attributes that are inaccessible, as with
+ // a 403 response, will cause the tab/window to crash
+ // * Script elements appended to fragments will execute when their `src`
+ // or `text` property is set
+ return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
+ }
+
+ /**
+ * returns a shived DocumentFragment for the given document
+ * @memberOf html5
+ * @param {Document} ownerDocument The context document.
+ * @returns {Object} The shived DocumentFragment.
+ */
+ function createDocumentFragment(ownerDocument, data){
+ if (!ownerDocument) {
+ ownerDocument = document;
+ }
+ if(supportsUnknownElements){
+ return ownerDocument.createDocumentFragment();
+ }
+ data = data || getExpandoData(ownerDocument);
+ var clone = data.frag.cloneNode(),
+ i = 0,
+ elems = getElements(),
+ l = elems.length;
+ for(;i<l;i++){
+ clone.createElement(elems[i]);
+ }
+ return clone;
+ }
+
+ /**
+ * Shivs the `createElement` and `createDocumentFragment` methods of the document.
+ * @private
+ * @param {Document|DocumentFragment} ownerDocument The document.
+ * @param {Object} data of the document.
+ */
+ function shivMethods(ownerDocument, data) {
+ if (!data.cache) {
+ data.cache = {};
+ data.createElem = ownerDocument.createElement;
+ data.createFrag = ownerDocument.createDocumentFragment;
+ data.frag = data.createFrag();
+ }
+
+
+ ownerDocument.createElement = function(nodeName) {
+ //abort shiv
+ if (!html5.shivMethods) {
+ return data.createElem(nodeName);
+ }
+ return createElement(nodeName, ownerDocument, data);
+ };
+
+ ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
+ 'var n=f.cloneNode(),c=n.createElement;' +
+ 'h.shivMethods&&(' +
+ // unroll the `createElement` calls
+ getElements().join().replace(/[\w\-]+/g, function(nodeName) {
+ data.createElem(nodeName);
+ data.frag.createElement(nodeName);
+ return 'c("' + nodeName + '")';
+ }) +
+ ');return n}'
+ )(html5, data.frag);
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Shivs the given document.
+ * @memberOf html5
+ * @param {Document} ownerDocument The document to shiv.
+ * @returns {Document} The shived document.
+ */
+ function shivDocument(ownerDocument) {
+ if (!ownerDocument) {
+ ownerDocument = document;
+ }
+ var data = getExpandoData(ownerDocument);
+
+ if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
+ data.hasCSS = !!addStyleSheet(ownerDocument,
+ // corrects block display not defined in IE6/7/8/9
+ 'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
+ // adds styling not present in IE6/7/8/9
+ 'mark{background:#FF0;color:#000}' +
+ // hides non-rendered elements
+ 'template{display:none}'
+ );
+ }
+ if (!supportsUnknownElements) {
+ shivMethods(ownerDocument, data);
+ }
+ return ownerDocument;
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * The `html5` object is exposed so that more elements can be shived and
+ * existing shiving can be detected on iframes.
+ * @type Object
+ * @example
+ *
+ * // options can be changed before the script is included
+ * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
+ */
+ var html5 = {
+
+ /**
+ * An array or space separated string of node names of the elements to shiv.
+ * @memberOf html5
+ * @type Array|String
+ */
+ 'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',
+
+ /**
+ * current version of html5shiv
+ */
+ 'version': version,
+
+ /**
+ * A flag to indicate that the HTML5 style sheet should be inserted.
+ * @memberOf html5
+ * @type Boolean
+ */
+ 'shivCSS': (options.shivCSS !== false),
+
+ /**
+ * Is equal to true if a browser supports creating unknown/HTML5 elements
+ * @memberOf html5
+ * @type boolean
+ */
+ 'supportsUnknownElements': supportsUnknownElements,
+
+ /**
+ * A flag to indicate that the document's `createElement` and `createDocumentFragment`
+ * methods should be overwritten.
+ * @memberOf html5
+ * @type Boolean
+ */
+ 'shivMethods': (options.shivMethods !== false),
+
+ /**
+ * A string to describe the type of `html5` object ("default" or "default print").
+ * @memberOf html5
+ * @type String
+ */
+ 'type': 'default',
+
+ // shivs the document according to the specified `html5` object options
+ 'shivDocument': shivDocument,
+
+ //creates a shived element
+ createElement: createElement,
+
+ //creates a shived documentFragment
+ createDocumentFragment: createDocumentFragment
+ };
+
+ /*--------------------------------------------------------------------------*/
+
+ // expose html5
+ window.html5 = html5;
+
+ // shiv the document
+ shivDocument(document);
+
+ }(this, document));
+ /*>>shiv*/
+
+ // Assign private properties to the return object with prefix
+ Modernizr._version = version;
+
+ // expose these for the plugin API. Look in the source for how to join() them against your input
+ /*>>prefixes*/
+ Modernizr._prefixes = prefixes;
+ /*>>prefixes*/
+ /*>>domprefixes*/
+ Modernizr._domPrefixes = domPrefixes;
+ Modernizr._cssomPrefixes = cssomPrefixes;
+ /*>>domprefixes*/
+
+ /*>>mq*/
+ // Modernizr.mq tests a given media query, live against the current state of the window
+ // A few important notes:
+ // * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false
+ // * A max-width or orientation query will be evaluated against the current state, which may change later.
+ // * You must specify values. Eg. If you are testing support for the min-width media query use:
+ // Modernizr.mq('(min-width:0)')
+ // usage:
+ // Modernizr.mq('only screen and (max-width:768)')
+ Modernizr.mq = testMediaQuery;
+ /*>>mq*/
+
+ /*>>hasevent*/
+ // Modernizr.hasEvent() detects support for a given event, with an optional element to test on
+ // Modernizr.hasEvent('gesturestart', elem)
+ Modernizr.hasEvent = isEventSupported;
+ /*>>hasevent*/
+
+ /*>>testprop*/
+ // Modernizr.testProp() investigates whether a given style property is recognized
+ // Note that the property names must be provided in the camelCase variant.
+ // Modernizr.testProp('pointerEvents')
+ Modernizr.testProp = function(prop){
+ return testProps([prop]);
+ };
+ /*>>testprop*/
+
+ /*>>testallprops*/
+ // Modernizr.testAllProps() investigates whether a given style property,
+ // or any of its vendor-prefixed variants, is recognized
+ // Note that the property names must be provided in the camelCase variant.
+ // Modernizr.testAllProps('boxSizing')
+ Modernizr.testAllProps = testPropsAll;
+ /*>>testallprops*/
+
+
+ /*>>teststyles*/
+ // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards
+ // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... })
+ Modernizr.testStyles = injectElementWithStyles;
+ /*>>teststyles*/
+
+
+ /*>>prefixed*/
+ // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input
+ // Modernizr.prefixed('boxSizing') // 'MozBoxSizing'
+
+ // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style.
+ // Return values will also be the camelCase variant, if you need to translate that to hypenated style use:
+ //
+ // str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');
+
+ // If you're trying to ascertain which transition end event to bind to, you might do something like...
+ //
+ // var transEndEventNames = {
+ // 'WebkitTransition' : 'webkitTransitionEnd',
+ // 'MozTransition' : 'transitionend',
+ // 'OTransition' : 'oTransitionEnd',
+ // 'msTransition' : 'MSTransitionEnd',
+ // 'transition' : 'transitionend'
+ // },
+ // transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];
+
+ Modernizr.prefixed = function(prop, obj, elem){
+ if(!obj) {
+ return testPropsAll(prop, 'pfx');
+ } else {
+ // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'
+ return testPropsAll(prop, obj, elem);
+ }
+ };
+ /*>>prefixed*/
+
+
+ /*>>cssclasses*/
+ // Remove "no-js" class from <html> element, if it exists:
+ docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') +
+
+ // Add the new classes to the <html> element.
+ (enableClasses ? ' js ' + classes.join(' ') : '');
+ /*>>cssclasses*/
+
+ return Modernizr;
+
+})(this, this.document);
diff --git a/ui/new-ui-samples/manifest.json b/ui/new-ui-samples/manifest.json
new file mode 100644
index 0000000..bbcc45e
--- /dev/null
+++ b/ui/new-ui-samples/manifest.json
@@ -0,0 +1,41 @@
+{
+ "name": "Kimchi",
+ "icons": [
+ {
+ "src": "\/android-chrome-36x36.png",
+ "sizes": "36x36",
+ "type": "image\/png",
+ "density": "0.75"
+ },
+ {
+ "src": "\/android-chrome-48x48.png",
+ "sizes": "48x48",
+ "type": "image\/png",
+ "density": "1.0"
+ },
+ {
+ "src": "\/android-chrome-72x72.png",
+ "sizes": "72x72",
+ "type": "image\/png",
+ "density": "1.5"
+ },
+ {
+ "src": "\/android-chrome-96x96.png",
+ "sizes": "96x96",
+ "type": "image\/png",
+ "density": "2.0"
+ },
+ {
+ "src": "\/android-chrome-144x144.png",
+ "sizes": "144x144",
+ "type": "image\/png",
+ "density": "3.0"
+ },
+ {
+ "src": "\/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image\/png",
+ "density": "4.0"
+ }
+ ]
+}
diff --git a/ui/new-ui-samples/mstile-144x144.png b/ui/new-ui-samples/mstile-144x144.png
new file mode 100644
index 0000000000000000000000000000000000000000..8a8f5ee642cae8225316dfd52f44b3743b6e76ed
GIT binary patch
literal 4103
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
FV1lW#!Yu#*
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/mstile-150x150.png b/ui/new-ui-samples/mstile-150x150.png
new file mode 100644
index 0000000000000000000000000000000000000000..22867370353f63645f87dc45304aeb8f0f66dfd3
GIT binary patch
literal 3891
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
BpiBS&
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/mstile-310x150.png b/ui/new-ui-samples/mstile-310x150.png
new file mode 100644
index 0000000000000000000000000000000000000000..414ca16c30286ff16abffe1ef629199eaae9253f
GIT binary patch
literal 4172
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/mstile-310x310.png b/ui/new-ui-samples/mstile-310x310.png
new file mode 100644
index 0000000000000000000000000000000000000000..94e1537cf844a19328b7e251818b1cf373e3dbc6
GIT binary patch
literal 5531
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/mstile-70x70.png b/ui/new-ui-samples/mstile-70x70.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc6016d0ca97ff28431e94e8b95960cb5cc9ea3f
GIT binary patch
literal 2602
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/robots.txt b/ui/new-ui-samples/robots.txt
new file mode 100755
index 0000000..3969cb1
--- /dev/null
+++ b/ui/new-ui-samples/robots.txt
@@ -0,0 +1,4 @@
+# robotstxt.org/
+
+User-agent: *
+Disallow:
diff --git a/ui/new-ui-samples/widgets/action_button.html b/ui/new-ui-samples/widgets/action_button.html
new file mode 100644
index 0000000..d0a6d9f
--- /dev/null
+++ b/ui/new-ui-samples/widgets/action_button.html
@@ -0,0 +1,186 @@
+<!--
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<!DOCTYPE html>
+<html class="no-js" lang="">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="description" content="">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Kimchi - Action Button Demo</title>
+ <link rel="apple-touch-icon" sizes="57x57" href="../apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="../apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="../apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="../apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="../apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="../apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="../apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="../apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="../favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="../favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="../favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="../android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="../favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="../manifest.json">
+ <meta name="apple-mobile-web-app-title" content="Kimchi">
+ <meta name="application-name" content="Kimchi">
+ <meta name="msapplication-TileColor" content="#4d4d4d">
+ <meta name="msapplication-TileImage" content="../mstile-144x144.png">
+ <meta name="theme-color" content="#ffffff">
+ <!-- Place favicon.ico in the root directory -->
+ <link rel="stylesheet" href="../css/vendor.css">
+ <link rel="stylesheet" href="../css/fontello.css">
+ <link rel="stylesheet" href="../css/main.css">
+ <script src="../js/vendor/modernizr.js"></script>
+</head>
+
+<body>
+ <nav class="navbar navbar-inverse navbar-static-top">
+ <div class="container">
+ <div class="navbar-header">
+ <a class="navbar-brand" href="#">Action Button (menu-flat.js)</a>
+ </div>
+ </div>
+ </nav>
+ <div class="container">
+ <h2>Bootstrap (static)</h2>
+ <div class="dropdown menu-flat" id="wok-dropdown-menu-x">
+ <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown"><i class="icon-edit-alt"></i>Actions<span class="caret"></span></button>
+ <ul class="dropdown-menu">
+ <li><a id="wok-dropdown-menu-x_0" class="add" href="#add"><i class="icon-plus-circled-1"></i>Add</a></li>
+ <li><a id="wok-dropdown-menu-x_1" class="enable" href="#enable_"><i class="icon-play-circled2"></i>Enable</a></li>
+ <li><a id="wok-dropdown-menu-x_2" class="edit" href="#edit_"><i class="icon-pencil-2"></i>Edit</a></li>
+ <li class="critical"><a id="wok-dropdown-menu-x_0" class="delete" href="#delete_"><i class="icon-minus-circled-1"></i>Delete</a></li>
+ </ul>
+ </div>
+ <h2>jQuery UI Widget (using Bootstrap classes)</h2>
+ <div class="btn-wrapper"></div>
+ <h2>How to use</h2>
+ <pre>
+ <code>
+ $(".btn-wrapper").menuFlat({
+ name: "wok-dropdown-menu-0", // not required
+ icon: "icon-edit-alt", //Set icon of the menu button.
+ label: 'Actions', //Set button text
+ content: [
+ { name: 'Add',
+ action: 'add',
+ icon: 'icon-plus-circled-1',
+ critical: false
+ },
+ { name: 'Enable',
+ action: 'enable',
+ icon: 'icon-play-circled2',
+ critical: false
+ },
+ { name: 'Edit',
+ action: 'edit',
+ icon: 'icon-pencil-2',
+ critical: false
+ },
+ { name: 'Delete',
+ action: 'delete',
+ icon: 'icon-minus-circled-1',
+ critical: true // set this to true if this action should be highlighted
+ }
+ ]
+ });
+
+ // List actions
+
+ // You can set an event to a link based on its ID, css class or href attribute
+
+ $("#wok-dropdown-menu-0_0").on("click", function(event) {
+ event.preventDefault();
+ alert("Add");
+ });
+
+ $("#wok-dropdown-menu-0 a[href='#enable']").on("click", function(event) {
+ event.preventDefault();
+ alert("Enable");
+ });
+
+ $("#wok-dropdown-menu-0 .edit").on("click", function(event) {
+ event.preventDefault();
+ alert("Edit");
+ });
+
+ </code>
+ </pre>
+ </div>
+ <script src="../js/vendor/jquery.js"></script>
+ <script src="../js/vendor/jquery-ui.js"></script>
+ <script src="../js/vendor.js"></script>
+ <script src="../js/vendor/bootstrap.js"></script>
+ <script src="../js/vendor/bootstrap-select.min.js"></script>
+ <script src="../js/main.js"></script>
+ <script>
+ $(document).ready(function() {
+ $(".btn-wrapper").menuFlat({
+ name: "wok-dropdown-menu-0",
+ icon: "icon-edit-alt", //Set icon of the menu button.
+ label: 'Actions', //Set button text
+ content: [{
+ name: 'Add',
+ action: 'add',
+ icon: 'icon-plus-circled-1',
+ critical: false
+ }, {
+ name: 'Enable',
+ action: 'enable',
+ icon: 'icon-play-circled2',
+ critical: false
+ }, {
+ name: 'Edit',
+ action: 'edit',
+ icon: 'icon-pencil-2',
+ critical: false
+ }, {
+ name: 'Delete',
+ action: 'delete',
+ icon: 'icon-minus-circled-1',
+ critical: true
+ }]
+ });
+
+
+ $("#wok-dropdown-menu-0_0").on("click", function(event) {
+ event.preventDefault();
+ alert("Add");
+ });
+
+ $("#wok-dropdown-menu-0 a[href='#enable']").on("click", function(event) {
+ event.preventDefault();
+ alert("Enable");
+ });
+
+ $("#wok-dropdown-menu-0 .edit").on("click", function(event) {
+ event.preventDefault();
+ alert("Edit");
+ });
+
+
+ });
+ </script>
+ <script src="../js/menu-flat.js"></script>
+</body>
+
+</html>
diff --git a/ui/new-ui-samples/widgets/dialog.html b/ui/new-ui-samples/widgets/dialog.html
new file mode 100644
index 0000000..809d70a
--- /dev/null
+++ b/ui/new-ui-samples/widgets/dialog.html
@@ -0,0 +1,78 @@
+<!--
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<!DOCTYPE html>
+<html class="no-js" lang="">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="description" content="">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Kimchi - Action Button Demo</title>
+ <link rel="apple-touch-icon" sizes="57x57" href="../apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="../apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="../apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="../apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="../apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="../apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="../apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="../apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="../favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="../favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="../favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="../android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="../favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="../manifest.json">
+ <meta name="apple-mobile-web-app-title" content="Kimchi">
+ <meta name="application-name" content="Kimchi">
+ <meta name="msapplication-TileColor" content="#4d4d4d">
+ <meta name="msapplication-TileImage" content="../mstile-144x144.png">
+ <meta name="theme-color" content="#ffffff">
+ <!-- Place favicon.ico in the root directory -->
+ <link rel="stylesheet" href="../css/vendor.css">
+ <link rel="stylesheet" href="../css/fontello.css">
+ <link rel="stylesheet" href="../css/main.css">
+ <script src="../js/vendor/modernizr.js"></script>
+ <body>
+ <div class="dialog-demo">Teste</div>
+
+
+
+ <script src="../js/vendor.js"></script>
+
+ <script src="../js/plugins.js"></script>
+
+ <script src="../js/dialog-flat.js"></script>
+ <script>
+ $(document).ready(function() {
+ $(".dialog-demo").dialogFlat({
+ title: "Demo", //Title of the dialog.
+ confirmText: "Ok", //Text of the confirm button, "Ok" is the default value.
+ cancelText: "Cancel", //Text of the cancel button.
+ width: "600", //Width of the dialog, "px" is the default unit.
+ height: "500", //Height of the dialog, "px" is the default unit.
+ confirmFunc: function() {
+ alert("success");//Function after confirm
+ }
+ });
+ });
+ </script>
+ </body>
+</html>
diff --git a/ui/new-ui-samples/widgets/dialog_bootstrap.html b/ui/new-ui-samples/widgets/dialog_bootstrap.html
new file mode 100644
index 0000000..fc857e5
--- /dev/null
+++ b/ui/new-ui-samples/widgets/dialog_bootstrap.html
@@ -0,0 +1,102 @@
+<!--
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<!DOCTYPE html>
+<html class="no-js" lang="">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="description" content="">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Kimchi - Action Button Demo</title>
+ <link rel="apple-touch-icon" sizes="57x57" href="../apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="../apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="../apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="../apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="../apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="../apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="../apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="../apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="../favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="../favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="../favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="../android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="../favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="../manifest.json">
+ <meta name="apple-mobile-web-app-title" content="Kimchi">
+ <meta name="application-name" content="Kimchi">
+ <meta name="msapplication-TileColor" content="#4d4d4d">
+ <meta name="msapplication-TileImage" content="../mstile-144x144.png">
+ <meta name="theme-color" content="#ffffff">
+ <!-- Place favicon.ico in the root directory -->
+ <link rel="stylesheet" href="../css/vendor.css">
+
+ <link rel="stylesheet" href="../css/main.css">
+ <script src="../js/vendor/modernizr.js"></script>
+</head>
+
+<body>
+ <nav class="navbar navbar-inverse navbar-static-top">
+ <div class="container">
+ <div class="navbar-header">
+ <a class="navbar-brand" href="#">Dialog (Bootstrap Modal)</a>
+ </div>
+ </div>
+ </nav>
+ <div class="container hosts">
+ <h2>Bootstrap (static)</h2>
+ <!-- Button trigger modal -->
+ <button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
+ Launch demo modal
+ </button>
+ <!-- Modal -->
+ <div class="modal fade in" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+ <div class="modal-dialog" role="document">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
+ <h4 class="modal-title" id="myModalLabel">Modal title</h4>
+ </div>
+ <div class="modal-body">
+ <select id="userLang" class="col-md-12 col-lg-12 ">
+ <option data-icon="icon-list-add" value="en_US">Add</option>
+ <option data-icon="icon-play-circled" value="zh_CN">Enable</option>
+ <option data-icon="icon-pencil-1" value="pt_BR">Edit</option>
+ <option data-icon="icon-minus-circled-1" value="de_DE">Remove</option>
+ </select>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default">Ok</button>
+ <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <script src="../js/vendor/jquery.js"></script>
+ <script src="../js/vendor/jquery-ui.js"></script>
+ <script src="../js/vendor.js"></script>
+ <script src="../js/vendor/bootstrap.js"></script>
+ <script src="../js/vendor/bootstrap-select.min.js"></script>
+ <script src="../js/main.js"></script>
+ <script src="../js/dialog-flat.js"></script>
+</body>
+
+</html>
diff --git a/ui/new-ui-samples/widgets/gauge-flat.html b/ui/new-ui-samples/widgets/gauge-flat.html
new file mode 100644
index 0000000..92ce07a
--- /dev/null
+++ b/ui/new-ui-samples/widgets/gauge-flat.html
@@ -0,0 +1,53 @@
+<!--Sample code of gauge-->
+<!--
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="UTF-8">
+ <title>Gauge Demo</title>
+ <script src="../../../libs/jquery-1.10.0.min.js"></script>
+ <script src="../../../libs/jquery-ui.min.js"></script>
+ <script src="../gauge-flat.js"></script>
+ <link rel="stylesheet" href="../../../libs/themes/base/jquery-ui.min.css">
+ <link rel="stylesheet" href="../../../css/theme-default/gauge-flat.css">
+ </head>
+ <body>
+ <div class="gauge-demo"></div>
+ <script>
+ $(document).ready(function() {
+ console.log("test started1");
+ var gauged = $(".gauge-demo");
+ gauged.gaugeFlat({
+ value: 25,
+ color: "red"
+ });
+ var gaugeAdd = function() {
+ var gaugeValue = gauged.gaugeFlat("value");
+ gauged.gaugeFlat("value", gaugeValue + 1);
+ if (gaugeValue < 99) {
+ setTimeout(gaugeAdd, 300);
+ }
+ }
+ gaugeAdd();
+ });
+ </script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/ui/new-ui-samples/widgets/grid.html b/ui/new-ui-samples/widgets/grid.html
new file mode 100644
index 0000000..9b92d62
--- /dev/null
+++ b/ui/new-ui-samples/widgets/grid.html
@@ -0,0 +1,80 @@
+<!--
+ *
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+-->
+
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Wok</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+
+<link rel="stylesheet" href="../../../libs/themes/base/jquery-ui.min.css">
+<link rel="stylesheet" href="../../../fontello/css/fontello.css">
+<link rel="stylesheet" href="../../../fontello/css/animation.css">
+<link rel="stylesheet" href="../../../css/theme-default.min.css">
+
+<script src="../../../libs/jquery-1.10.0.min.js"></script>
+<script src="../../../libs/jquery-ui.min.js"></script>
+<script src="../../../libs/jquery-ui-i18n.min.js"></script>
+<script src="../../../js/wok.min.js"></script>
+
+<style type="text/css">
+body {
+ background: none;
+}
+input {
+ float: right;
+}
+.name {
+ width: 30%;
+}
+.project {
+ width: 30%;
+}
+.role {
+ width: 39%;
+}
+</style>
+<script>
+function init(){
+ $('#ibmers').grid({enableSorting: true});
+ $('input').on('keyup', function(){
+ $('#ibmers').grid('filter', ($(this).val()));
+ });
+}
+</script>
+</head>
+<body onload="init()">
+<div style="height: 50px; padding-top: 10px; padding-right: 50px;"><input type='text' placeholder='Filter' style='padding-left: 5px; height: 20px;'></div>
+<div id="ibmers">
+<div><span class="name">Name</span><span class="project">Project</span><span class="role">Role</span></div>
+<div>
+<div><span class="name" val="tify">tify</span><span class="project" val="kimchi">kimchi</span><span class="role" val="designer">designer</span></div>
+<div><span class="name" val="rick">rick</span><span class="project" val="finance">finance</span><span class="role" val="sponsor">sponsor</span></div>
+<div><span class="name" val="icy">icy</span><span class="project" val="human resource">human resource</span><span class="role" val="administrator*">administrator</span></div>
+<div><span class="name" val="paul">paul</span><span class="project" val="tomcat">tomcat</span><span class="role" val="dev lead">dev lead</span></div>
+<div><span class="name" val="kapil">kapil</span><span class="project" val="apache">apache</span><span class="role" val="developer">developer</span></div>
+<div><span class="name" val="adam">adam</span><span class="name" val="mongodb">mongodb</span><span class="role" val="dev lead">dev lead</span></div>
+<div><span class="name" val="shikha">shikha</span><span class="project" val="mysql">mysql</span><span class="role" val="dev lead">dev lead</span></div>
+</div>
+</div>
+</body>
+</html>
diff --git a/ui/new-ui-samples/widgets/line.html b/ui/new-ui-samples/widgets/line.html
new file mode 100644
index 0000000..cc0b738
--- /dev/null
+++ b/ui/new-ui-samples/widgets/line.html
@@ -0,0 +1,168 @@
+<!--
+ *
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+-->
+
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Wok</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+
+<link rel="stylesheet" href="../../../libs/themes/base/jquery-ui.min.css">
+<link rel="stylesheet" href="../../../fontello/css/fontello.css">
+<link rel="stylesheet" href="../../../fontello/css/animation.css">
+<link rel="stylesheet" href="../../../css/theme-default.min.css">
+
+<script src="../../../libs/jquery-1.10.0.min.js"></script>
+<script src="../../../libs/jquery-ui.min.js"></script>
+<script src="../../../libs/jquery-ui-i18n.min.js"></script>
+<script src="../../../js/wok.min.js"></script>
+
+<style type="text/css">
+body {
+ background: none;
+}
+.cell {
+ display: inline-block;
+ width: 49%;
+}
+.monitor {
+ width: 391px;
+ margin: 15px auto;
+}
+.chart {
+ width: 390px;
+ height: 200px;
+ margin-top: 20px;
+}
+.legend {
+ height: 25px;
+ line-height: 25px;
+ padding-left: 8px;
+ margin: 5px 30px 5px 0;
+ border-left: 3px solid;
+ display: inline-block;
+}
+</style>
+<script>
+function init(){
+$('#chart1').line({
+ minVal: 0,
+ maxVal: 500,
+ datasets: [{
+ data: new Array(50),
+ color: "#d9182d"
+ }]
+});
+$('#chart2').line({
+ minVal: 0,
+ maxVal: 500,
+ datasets: [{
+ data: new Array(50),
+ color: "#008abf"
+ }]
+});
+$('#chart3').line({
+ minVal: 0,
+ maxVal: 500,
+ datasets: [{
+ data: new Array(50),
+ color: "#fdb813"
+ }, {
+ data: new Array(50),
+ color: "#00a6a0"
+ }]
+});
+$('#chart4').line({
+ minVal: 0,
+ maxVal: 500,
+ datasets: [{
+ data: new Array(50),
+ color: "#561289"
+ }, {
+ data: new Array(50),
+ color: "#238901"
+ }]
+});
+setInterval(function(){
+ $('#chart1').line('addData', [Math.round(Math.random()*500)]);
+}, 1000);
+setInterval(function(){
+ $('#chart2').line('addData', [Math.round(Math.random()*500)]);
+}, 1000);
+setInterval(function(){
+ $('#chart3').line('addData', [Math.round(Math.random()*500),Math.round(Math.random()*500)]);
+}, 1000);
+setInterval(function(){
+ $('#chart4').line('addData', [Math.round(Math.random()*500),Math.round(Math.random()*500)]);
+}, 1000);
+}
+</script>
+</head>
+<body onload="init()">
+<div>
+<span class='cell'>
+ <div class="monitor">
+ <div class="h1 grey">Processor</div>
+ <div class="c1 dark-grey bold">
+ <span class="legend" style="border-color: #d9182d;">Used: 41%</span>
+ </div>
+ <div class="c1 light-grey">Maximum: 100%</div>
+ <div id="chart1" class='chart'></div>
+ </div>
+</span>
+<span class='cell'>
+ <div class="monitor">
+ <div class="h1 grey">Memory</div>
+ <div class="c1 dark-grey bold">
+ <span class="legend" style="border-color: #008abf;">Available: 49%</span>
+ </div>
+ <div class="c1 light-grey">Maximum: 280GB</div>
+ <div id="chart2" class='chart'></div>
+ </div>
+</span>
+</div>
+<div>
+<span class='cell'>
+ <div class="monitor">
+ <div class="h1 grey">Storage IO</div>
+ <div class="c1 dark-grey bold">
+ <span class="legend" style="border-color: #fdb813">Write: 6KB/S</span>
+ <span class="legend" style="border-color: #00a6a0">Read: 123KB/S</span>
+ </div>
+ <div class="c1 light-grey">Maximum: 79.04KB/S</div>
+ <div id="chart3" class='chart'></div>
+ </div>
+</span>
+<span class='cell'>
+ <div class="monitor">
+ <div class="h1 grey">Network IO</div>
+ <div class="c1 dark-grey bold">
+ <span class="legend" style="border-color: #561289">Received: 2KB/S</span>
+ <span class="legend" style="border-color: #238901">Sent: 1KB/S</span>
+ </div>
+ <div class="c1 light-grey">Maximum: 33.35KB/S</div>
+ <div id="chart4" class='chart'></div>
+ </div>
+</span>
+</div>
+</body>
+</html>
diff --git a/ui/new-ui-samples/widgets/list.html b/ui/new-ui-samples/widgets/list.html
new file mode 100644
index 0000000..850550c
--- /dev/null
+++ b/ui/new-ui-samples/widgets/list.html
@@ -0,0 +1,46 @@
+<!--
+ *
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+-->
+
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="UTF-8">
+ <title>List Demo</title>
+ <script src="../../../libs/jquery-1.10.0.min.js"></script>
+ <script src="../../../libs/jquery-ui.min.js"></script>
+ <script src="../list-flat.js"></script>
+ <link rel="stylesheet" href="../../../libs/themes/base/jquery-ui.min.css">
+ <link rel="stylesheet" href="../../../css/theme-default/list-flat.css">
+ <link rel="stylesheet" href="../../../fontello/css/animation.css">
+ <link rel="stylesheet" href="../../../fontello/css/fontello.css">
+ </head>
+ <body>
+ <div class="list-demo"></div>
+ <script>
+ $(document).ready(function() {
+ $(".list-demo").listFlat({
+ title: "Hello World" //Set title.
+ });
+ $(".list-demo").listFlat("addItem", "Hello", "2015", "icon-user", "button1");
+ //Add one item of the list, parameters are: name, info, icon and button-id
+ });
+ </script>
+ </body>
+</html>
diff --git a/ui/new-ui-samples/widgets/menu-button-radio-checkbox-text-select.html b/ui/new-ui-samples/widgets/menu-button-radio-checkbox-text-select.html
new file mode 100644
index 0000000..242eaf5
--- /dev/null
+++ b/ui/new-ui-samples/widgets/menu-button-radio-checkbox-text-select.html
@@ -0,0 +1,166 @@
+<!--
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<!DOCTYPE html>
+<html class="no-js" lang="">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="description" content="">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Kimchi - Action Button Demo</title>
+ <link rel="apple-touch-icon" sizes="57x57" href="../apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="../apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="../apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="../apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="../apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="../apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="../apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="../apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="../favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="../favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="../favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="../android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="../favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="../manifest.json">
+ <meta name="apple-mobile-web-app-title" content="Kimchi">
+ <meta name="application-name" content="Kimchi">
+ <meta name="msapplication-TileColor" content="#4d4d4d">
+ <meta name="msapplication-TileImage" content="../mstile-144x144.png">
+ <meta name="theme-color" content="#ffffff">
+ <link rel="stylesheet" href="../css/font-awesome.css">
+ <link rel="stylesheet" href="../css/jquery-ui.css">
+
+ <link rel="stylesheet" href="../css/menu-flat.css">
+ <link rel="stylesheet" href="../css/button-flat.css">
+ <link rel="stylesheet" href="../css/radio-flat.css">
+ <link rel="stylesheet" href="../css/checkbox-flat.css">
+ <link rel="stylesheet" href="../css/textbox-flat.css">
+ <link rel="stylesheet" href="../css/selectmenu-flat.css">
+ <script src="../js/vendor/modernizr.js"></script>
+
+ <link rel="stylesheet" href="../css/fontello.css">
+ <link rel="stylesheet" href="../css/main.css">
+</head>
+
+<body>
+ <nav class="navbar navbar-inverse navbar-static-top">
+ <div class="container">
+ <div class="navbar-header">
+ <a class="navbar-brand" href="#">Action Button (menu-flat.js)</a>
+ </div>
+ </div>
+ </nav>
+ <div class="container">
+ <div id="menu"></div>
+ <div style="height:50px">
+ <div id="select"></div>
+ </div>
+ <div class="radio-demo"></div>
+ <div class="checkbox-demo"></div>
+ <input class="text-demo">
+ <button class="button-demo">submit</button>
+ </div>
+ <script src="../js/vendor/jquery.js"></script>
+ <script src="../js/vendor/jquery-ui.js"></script>
+ <script src="../js/vendor.js"></script>
+ <script src="../js/vendor/bootstrap.js"></script>
+ <script src="../js/vendor/bootstrap-select.min.js"></script>
+
+ <script src="js/menu-flat.js"></script>
+ <script src="js/button-flat.js"></script>
+ <script src="js/radio-flat.js"></script>
+ <script src="js/checkbox-flat.js"></script>
+ <script src="js/textbox-flat.js"></script>
+ <script src="js/selectmenu-flat.js"></script>
+ <script src="js/main.js"></script>
+
+ <script>
+ $(document).ready(function() {
+ $("#menu").menuFlat({
+ name: "wok-dropdown-menu-0",
+ icon: "icon-edit-alt", //Set icon of the menu button.
+ label: 'Actions', //Set button text
+ content: [{
+ name: 'Add',
+ action: 'add',
+ icon: 'icon-plus-circled-1',
+ critical: false
+ }, {
+ name: 'Enable',
+ action: 'enable',
+ icon: 'icon-play-circled2',
+ critical: false
+ }, {
+ name: 'Edit',
+ action: 'edit',
+ icon: 'icon-pencil-2',
+ critical: false
+ }, {
+ name: 'Delete',
+ action: 'delete',
+ icon: 'icon-minus-circled-1',
+ critical: true
+ }]
+ });
+ $("wok-dropdown-menu-0-0").on("click", function() {
+ alert("First option selected");
+ });
+ $("wok-dropdown-menu-0-1").on("click", function() {
+ console.log("Second option selected");
+ });
+ $("#select").selectmenuFlat({
+ content: [1, 2, 3, 4, 5, 6], //Set content of the select menu
+ selected: 2 // set the selected option, starts from "1"
+ });
+ $("#select").selectmenuFlat("value", "4"); //Set value.
+ var t = $("#select").selectmenuFlat("value"); //Get value
+ console.log(t);
+ $(".radio-demo").radioFlat({
+ id: "t", //Base id of the radio set.
+ name: "test", //name of the radio.
+ whichChecked: 2, //First selected position, starts from 1.
+ content: ["apple", "banana", "orange", "cherry"] //set the content array.
+ });
+ $(".radio-demo").click(function() {
+ console.log($(".radio-demo").radioFlat("value")); //this is how to get the value of selected radio value
+ });
+ $(".checkbox-demo").checkboxFlat({
+ id: "t", //Checkbox base id.
+ name: "test", //Checkbox name.
+ content: ["apple", "banana", "orange", "cherry"], //Contents of the checkbox set.
+ checked: [1, 3] //Set the checked item, which starts with number 1.
+ });
+ $(".checkbox-demo").click(function() {
+ console.log($(".selector").checkboxFlat("value")); //Get value of the checked checkbox.
+ });
+ $(".text-demo").textboxFlat({
+ hint: "hint"
+ });
+ $(".text-demo").css({
+ "height": "30px",
+ "width": "200px"
+ });
+ $(".button-demo").buttonFlat();
+ });
+ </script>
+</body>
+
+</html>
diff --git a/ui/new-ui-samples/widgets/message.html b/ui/new-ui-samples/widgets/message.html
new file mode 100644
index 0000000..b8a2cf4
--- /dev/null
+++ b/ui/new-ui-samples/widgets/message.html
@@ -0,0 +1,49 @@
+<!--
+ *
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+-->
+
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="UTF-8">
+ <title>Message Demo</title>
+ <script src="../../../libs/jquery-1.10.0.min.js"></script>
+ <script src="../../../libs/jquery-ui.min.js"></script>
+ <script src="../message-flat.js"></script>
+ <link rel="stylesheet" href="../../../libs/themes/base/jquery-ui.min.css">
+ <link rel="stylesheet" href="../../../css/theme-default/message-flat.css">
+ <link rel="stylesheet" href="../../../fontello/css/animation.css">
+ <link rel="stylesheet" href="../../../fontello/css/fontello.css">
+ </head>
+ <body>
+ <div class="message-demo"></div>
+ <script>
+ $(document).ready(function() {
+ $(".message-demo").messageFlat({
+ contentMain: "This is a test", //Content you are going to add
+ contentConfirm: "Sure?", //Content that inform user whether they want to continue.
+ //Default value is: "Are you sure you want to go on?"
+ confirm: function() {
+ alert("comfirmed")
+ }
+ });
+ });
+ </script>
+ </body>
+</html>
diff --git a/ui/new-ui-samples/widgets/messagebar-flat.html b/ui/new-ui-samples/widgets/messagebar-flat.html
new file mode 100644
index 0000000..fd1417a
--- /dev/null
+++ b/ui/new-ui-samples/widgets/messagebar-flat.html
@@ -0,0 +1,49 @@
+<!--
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="UTF-8">
+ <title>Sample of messagebar</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <link rel="stylesheet" href="../../../fontello/css/fontello.css">
+ <link rel="stylesheet" href="../../../fontello/css/animation.css">
+ <link rel="stylesheet" href="../../../libs/themes/base/jquery-ui.min.css">
+ <link rel="stylesheet" href="../../../css/theme-default/messagebar-flat.css">
+ <script src="../../../libs/jquery-1.10.0.min.js"></script>
+ <script src="../../../libs/jquery-ui.min.js"></script>
+ <script src="../messagebar-flat.js"></script>
+ </head>
+ <body>
+ <div class="message"></div>
+ <script>
+ $(document).ready(function() {
+ $(".message").messagebarFlat({
+ content: "This is a test",
+ color: "red",
+ dismissTime: 1000
+ });
+ });
+ </script>
+ </body>
+
+</html>
diff --git a/ui/new-ui-samples/widgets/tabs.html b/ui/new-ui-samples/widgets/tabs.html
new file mode 100644
index 0000000..a8c4b4d
--- /dev/null
+++ b/ui/new-ui-samples/widgets/tabs.html
@@ -0,0 +1,68 @@
+<!--
+ *
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+-->
+
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Wok</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+
+<link rel="stylesheet" href="../../../libs/themes/base/jquery-ui.min.css">
+<link rel="stylesheet" href="../../../fontello/css/fontello.css">
+<link rel="stylesheet" href="../../../fontello/css/animation.css">
+<link rel="stylesheet" href="../../../css/theme-default.min.css">
+
+<script src="../../../libs/jquery-1.10.0.min.js"></script>
+<script src="../../../libs/jquery-ui.min.js"></script>
+<script src="../../../libs/jquery-ui-i18n.min.js"></script>
+<script src="../../../js/wok.min.js"></script>
+
+<style type="text/css">
+body {
+ background: none;
+}
+</style>
+<script>
+function init(){
+ $( "#tabs" ).tabs();
+}
+</script>
+</head>
+<body onload="init()">
+<div id="tabs">
+ <ul>
+ <li><a href="#tabs-1">Nunc tincidunt</a></li>
+ <li><a href="#tabs-2">Proin dolor</a></li>
+ <li><a href="#tabs-3">Aenean lacinia</a></li>
+ </ul>
+ <div id="tabs-1">
+ <p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
+ </div>
+ <div id="tabs-2">
+ <p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
+ </div>
+ <div id="tabs-3">
+ <p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
+ <p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
+ </div>
+</body>
+</html>
--
1.9.3
1
0
[Proposal] Introducing the version in REST API URI for kimchi/ginger plugins
by Chandra Sr Potula 08 Aug '15
by Chandra Sr Potula 08 Aug '15
08 Aug '15
Hi Kimchi/Ginger Devel-Team,
Thank you for creating WOK branch to separate the kimchi plugin from the
base frame work. It is a great idea.
Along with the separation of kimchi plugin looks like there is a
transformation of REST API URIs as well. So thinking in those lines will it
be good idea even to introduce version to the REST API URIs ?
Let me take one REST API URI to convey clear on what I am talking about.
To retrieve the host repository information, current URI is:
"/plugins/kimchi/host/repositories".
Recommendation:
New host repository URI can look like : "
/plugins/kimchi/v<version>/host/repositories" , so that it is easy to
maintain REST API future enhancements at the same time do not brake some
body who is using the existing URI.
Note* Adding version in the URI above is just an example and we could
place the version in the URI best possible way.
Thanks and Regards,
Chandra Shekhar Reddy Potula
Staff System Software Engineer
IBM Systems & Technology Group, Systems Software Development
System z Firmware Development
Phone: 91-080-4066-0786 | Mobile: 91-973-1122-221 IBM
E-mail: chandra.shekhar(a)in.ibm.com
ORR, Manyatha MD3 1F B247
Bengaluru, Karnataka 560045
India
4
9
07 Aug '15
From: samhenri <sguimaraes943(a)gmail.com>
Added some of the new-ui widgets and login page mockup. These files were generated with gulp.js.
I will add the source files in the next patch.
Signed-off-by: samhenri <samuel.guimaraes(a)eldorado.org.br>
---
ui/new-ui-samples/android-chrome-144x144.png | Bin 0 -> 9965 bytes
ui/new-ui-samples/android-chrome-192x192.png | Bin 0 -> 15190 bytes
ui/new-ui-samples/android-chrome-36x36.png | Bin 0 -> 1663 bytes
ui/new-ui-samples/android-chrome-48x48.png | Bin 0 -> 2322 bytes
ui/new-ui-samples/android-chrome-72x72.png | Bin 0 -> 3915 bytes
ui/new-ui-samples/android-chrome-96x96.png | Bin 0 -> 5684 bytes
ui/new-ui-samples/apple-touch-icon-114x114.png | Bin 0 -> 9159 bytes
ui/new-ui-samples/apple-touch-icon-120x120.png | Bin 0 -> 9860 bytes
ui/new-ui-samples/apple-touch-icon-144x144.png | Bin 0 -> 12771 bytes
ui/new-ui-samples/apple-touch-icon-152x152.png | Bin 0 -> 13861 bytes
ui/new-ui-samples/apple-touch-icon-180x180.png | Bin 0 -> 15806 bytes
ui/new-ui-samples/apple-touch-icon-57x57.png | Bin 0 -> 3613 bytes
ui/new-ui-samples/apple-touch-icon-60x60.png | Bin 0 -> 3839 bytes
ui/new-ui-samples/apple-touch-icon-72x72.png | Bin 0 -> 4862 bytes
ui/new-ui-samples/apple-touch-icon-76x76.png | Bin 0 -> 5193 bytes
ui/new-ui-samples/apple-touch-icon-precomposed.png | Bin 0 -> 16413 bytes
ui/new-ui-samples/apple-touch-icon.png | Bin 0 -> 15806 bytes
ui/new-ui-samples/browserconfig.xml | 12 +
ui/new-ui-samples/css/button-flat.css | 271 +
ui/new-ui-samples/css/checkbox-flat.css | 50 +
ui/new-ui-samples/css/fontello.css | 1137 ++
ui/new-ui-samples/css/main.css | 9157 ++++++++++
ui/new-ui-samples/css/menu-flat.css | 179 +
ui/new-ui-samples/css/radio-flat.css | 60 +
ui/new-ui-samples/css/selectmenu-flat.css | 177 +
ui/new-ui-samples/css/textbox-flat.css | 44 +
ui/new-ui-samples/css/vendor.css | 1801 ++
ui/new-ui-samples/favicon-16x16.png | Bin 0 -> 1301 bytes
ui/new-ui-samples/favicon-194x194.png | Bin 0 -> 21106 bytes
ui/new-ui-samples/favicon-32x32.png | Bin 0 -> 2165 bytes
ui/new-ui-samples/favicon-96x96.png | Bin 0 -> 8147 bytes
ui/new-ui-samples/favicon.ico | Bin 0 -> 15086 bytes
ui/new-ui-samples/fonts/fontawesome-webfont.eot | Bin 0 -> 60767 bytes
ui/new-ui-samples/fonts/fontawesome-webfont.svg | 565 +
ui/new-ui-samples/fonts/fontawesome-webfont.ttf | Bin 0 -> 122092 bytes
ui/new-ui-samples/fonts/fontawesome-webfont.woff | Bin 0 -> 71508 bytes
ui/new-ui-samples/fonts/fontawesome-webfont.woff2 | Bin 0 -> 56780 bytes
ui/new-ui-samples/fonts/fontello.eot | Bin 0 -> 42700 bytes
ui/new-ui-samples/fonts/fontello.svg | 220 +
ui/new-ui-samples/fonts/fontello.ttf | Bin 0 -> 42532 bytes
ui/new-ui-samples/fonts/fontello.woff | Bin 0 -> 24196 bytes
.../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes
.../fonts/glyphicons-halflings-regular.svg | 288 +
.../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes
.../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes
.../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes
ui/new-ui-samples/images/high.png | Bin 0 -> 812 bytes
ui/new-ui-samples/images/icon-centos.png | Bin 0 -> 4734 bytes
ui/new-ui-samples/images/icon-debian.png | Bin 0 -> 4239 bytes
ui/new-ui-samples/images/icon-fedora.png | Bin 0 -> 4449 bytes
ui/new-ui-samples/images/icon-gentoo.png | Bin 0 -> 15307 bytes
ui/new-ui-samples/images/icon-opensuse.png | Bin 0 -> 3046 bytes
ui/new-ui-samples/images/icon-ubuntu.png | Bin 0 -> 4818 bytes
ui/new-ui-samples/images/icon-vm.png | Bin 0 -> 2976 bytes
ui/new-ui-samples/images/logo-white.png | Bin 0 -> 7438 bytes
ui/new-ui-samples/images/logo.ico | Bin 0 -> 1214 bytes
ui/new-ui-samples/images/logo.png | Bin 0 -> 17195 bytes
ui/new-ui-samples/images/logo.svg | 26 +
ui/new-ui-samples/images/low.png | Bin 0 -> 813 bytes
ui/new-ui-samples/images/med.png | Bin 0 -> 873 bytes
ui/new-ui-samples/index.html | 134 +
ui/new-ui-samples/js/button-flat.js | 419 +
ui/new-ui-samples/js/checkbox-flat.js | 86 +
ui/new-ui-samples/js/main.js | 1 +
ui/new-ui-samples/js/menu-flat.js | 98 +
ui/new-ui-samples/js/radio-flat.js | 86 +
ui/new-ui-samples/js/selectmenu-flat.js | 130 +
ui/new-ui-samples/js/textbox-flat.js | 39 +
ui/new-ui-samples/js/vendor.js | 5523 ++++++
ui/new-ui-samples/js/vendor/bootstrap.js | 2345 +++
ui/new-ui-samples/js/vendor/jquery-ui.js | 16617 +++++++++++++++++++
ui/new-ui-samples/js/vendor/jquery.js | 9210 ++++++++++
ui/new-ui-samples/js/vendor/modernizr.js | 1406 ++
ui/new-ui-samples/manifest.json | 41 +
ui/new-ui-samples/mstile-144x144.png | Bin 0 -> 4103 bytes
ui/new-ui-samples/mstile-150x150.png | Bin 0 -> 3891 bytes
ui/new-ui-samples/mstile-310x150.png | Bin 0 -> 4172 bytes
ui/new-ui-samples/mstile-310x310.png | Bin 0 -> 5531 bytes
ui/new-ui-samples/mstile-70x70.png | Bin 0 -> 2602 bytes
ui/new-ui-samples/robots.txt | 4 +
ui/new-ui-samples/widgets/action_button.html | 186 +
ui/new-ui-samples/widgets/dialog.html | 78 +
ui/new-ui-samples/widgets/dialog_bootstrap.html | 102 +
ui/new-ui-samples/widgets/gauge-flat.html | 53 +
ui/new-ui-samples/widgets/grid.html | 80 +
ui/new-ui-samples/widgets/line.html | 168 +
ui/new-ui-samples/widgets/list.html | 46 +
.../menu-button-radio-checkbox-text-select.html | 166 +
ui/new-ui-samples/widgets/message.html | 49 +
ui/new-ui-samples/widgets/messagebar-flat.html | 49 +
ui/new-ui-samples/widgets/tabs.html | 68 +
91 files changed, 51171 insertions(+)
create mode 100644 ui/new-ui-samples/android-chrome-144x144.png
create mode 100644 ui/new-ui-samples/android-chrome-192x192.png
create mode 100644 ui/new-ui-samples/android-chrome-36x36.png
create mode 100644 ui/new-ui-samples/android-chrome-48x48.png
create mode 100644 ui/new-ui-samples/android-chrome-72x72.png
create mode 100644 ui/new-ui-samples/android-chrome-96x96.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-114x114.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-120x120.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-144x144.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-152x152.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-180x180.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-57x57.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-60x60.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-72x72.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-76x76.png
create mode 100644 ui/new-ui-samples/apple-touch-icon-precomposed.png
create mode 100644 ui/new-ui-samples/apple-touch-icon.png
create mode 100644 ui/new-ui-samples/browserconfig.xml
create mode 100755 ui/new-ui-samples/css/button-flat.css
create mode 100644 ui/new-ui-samples/css/checkbox-flat.css
create mode 100644 ui/new-ui-samples/css/fontello.css
create mode 100755 ui/new-ui-samples/css/main.css
create mode 100644 ui/new-ui-samples/css/menu-flat.css
create mode 100644 ui/new-ui-samples/css/radio-flat.css
create mode 100644 ui/new-ui-samples/css/selectmenu-flat.css
create mode 100644 ui/new-ui-samples/css/textbox-flat.css
create mode 100644 ui/new-ui-samples/css/vendor.css
create mode 100644 ui/new-ui-samples/favicon-16x16.png
create mode 100644 ui/new-ui-samples/favicon-194x194.png
create mode 100644 ui/new-ui-samples/favicon-32x32.png
create mode 100644 ui/new-ui-samples/favicon-96x96.png
create mode 100644 ui/new-ui-samples/favicon.ico
create mode 100644 ui/new-ui-samples/fonts/fontawesome-webfont.eot
create mode 100644 ui/new-ui-samples/fonts/fontawesome-webfont.svg
create mode 100644 ui/new-ui-samples/fonts/fontawesome-webfont.ttf
create mode 100644 ui/new-ui-samples/fonts/fontawesome-webfont.woff
create mode 100644 ui/new-ui-samples/fonts/fontawesome-webfont.woff2
create mode 100644 ui/new-ui-samples/fonts/fontello.eot
create mode 100644 ui/new-ui-samples/fonts/fontello.svg
create mode 100644 ui/new-ui-samples/fonts/fontello.ttf
create mode 100644 ui/new-ui-samples/fonts/fontello.woff
create mode 100644 ui/new-ui-samples/fonts/glyphicons-halflings-regular.eot
create mode 100644 ui/new-ui-samples/fonts/glyphicons-halflings-regular.svg
create mode 100644 ui/new-ui-samples/fonts/glyphicons-halflings-regular.ttf
create mode 100644 ui/new-ui-samples/fonts/glyphicons-halflings-regular.woff
create mode 100644 ui/new-ui-samples/fonts/glyphicons-halflings-regular.woff2
create mode 100644 ui/new-ui-samples/images/high.png
create mode 100644 ui/new-ui-samples/images/icon-centos.png
create mode 100644 ui/new-ui-samples/images/icon-debian.png
create mode 100644 ui/new-ui-samples/images/icon-fedora.png
create mode 100644 ui/new-ui-samples/images/icon-gentoo.png
create mode 100644 ui/new-ui-samples/images/icon-opensuse.png
create mode 100644 ui/new-ui-samples/images/icon-ubuntu.png
create mode 100644 ui/new-ui-samples/images/icon-vm.png
create mode 100644 ui/new-ui-samples/images/logo-white.png
create mode 100644 ui/new-ui-samples/images/logo.ico
create mode 100644 ui/new-ui-samples/images/logo.png
create mode 100644 ui/new-ui-samples/images/logo.svg
create mode 100644 ui/new-ui-samples/images/low.png
create mode 100644 ui/new-ui-samples/images/med.png
create mode 100755 ui/new-ui-samples/index.html
create mode 100755 ui/new-ui-samples/js/button-flat.js
create mode 100644 ui/new-ui-samples/js/checkbox-flat.js
create mode 100755 ui/new-ui-samples/js/main.js
create mode 100644 ui/new-ui-samples/js/menu-flat.js
create mode 100644 ui/new-ui-samples/js/radio-flat.js
create mode 100644 ui/new-ui-samples/js/selectmenu-flat.js
create mode 100644 ui/new-ui-samples/js/textbox-flat.js
create mode 100644 ui/new-ui-samples/js/vendor.js
create mode 100644 ui/new-ui-samples/js/vendor/bootstrap.js
create mode 100644 ui/new-ui-samples/js/vendor/jquery-ui.js
create mode 100644 ui/new-ui-samples/js/vendor/jquery.js
create mode 100644 ui/new-ui-samples/js/vendor/modernizr.js
create mode 100644 ui/new-ui-samples/manifest.json
create mode 100644 ui/new-ui-samples/mstile-144x144.png
create mode 100644 ui/new-ui-samples/mstile-150x150.png
create mode 100644 ui/new-ui-samples/mstile-310x150.png
create mode 100644 ui/new-ui-samples/mstile-310x310.png
create mode 100644 ui/new-ui-samples/mstile-70x70.png
create mode 100755 ui/new-ui-samples/robots.txt
create mode 100644 ui/new-ui-samples/widgets/action_button.html
create mode 100644 ui/new-ui-samples/widgets/dialog.html
create mode 100644 ui/new-ui-samples/widgets/dialog_bootstrap.html
create mode 100644 ui/new-ui-samples/widgets/gauge-flat.html
create mode 100644 ui/new-ui-samples/widgets/grid.html
create mode 100644 ui/new-ui-samples/widgets/line.html
create mode 100644 ui/new-ui-samples/widgets/list.html
create mode 100644 ui/new-ui-samples/widgets/menu-button-radio-checkbox-text-select.html
create mode 100644 ui/new-ui-samples/widgets/message.html
create mode 100644 ui/new-ui-samples/widgets/messagebar-flat.html
create mode 100644 ui/new-ui-samples/widgets/tabs.html
diff --git a/ui/new-ui-samples/android-chrome-144x144.png b/ui/new-ui-samples/android-chrome-144x144.png
new file mode 100644
index 0000000000000000000000000000000000000000..f6e28d098a966800c1d07015467b517d825a5fdf
GIT binary patch
literal 9965
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/android-chrome-192x192.png b/ui/new-ui-samples/android-chrome-192x192.png
new file mode 100644
index 0000000000000000000000000000000000000000..040a33d566357cc4dea75cebc527968271516faa
GIT binary patch
literal 15190
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/android-chrome-36x36.png b/ui/new-ui-samples/android-chrome-36x36.png
new file mode 100644
index 0000000000000000000000000000000000000000..c949db775e1c3019a74d4e9af6e3c675a2c7ef65
GIT binary patch
literal 1663
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
JPDHLkV1kV~37!A|
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/android-chrome-48x48.png b/ui/new-ui-samples/android-chrome-48x48.png
new file mode 100644
index 0000000000000000000000000000000000000000..10727b708d4f42e506c5612a572c1a48d92f3220
GIT binary patch
literal 2322
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/android-chrome-72x72.png b/ui/new-ui-samples/android-chrome-72x72.png
new file mode 100644
index 0000000000000000000000000000000000000000..881f75cc8454921d096e322b19fdadd11c67abdf
GIT binary patch
literal 3915
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
ZD=;!TFfa&WKOX=9002ovPDHLkV1ndqRn!0g
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/android-chrome-96x96.png b/ui/new-ui-samples/android-chrome-96x96.png
new file mode 100644
index 0000000000000000000000000000000000000000..97a151cedaf0e81f72938f640c5abfbe28ae06d0
GIT binary patch
literal 5684
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ΠtuuRo})vmv(eVF6p95R<6Bc2_agoDBjd=3b*{i;%Rn<3C8
zRE~sDJQ2bAaYYsokA=f)E97nr)p+^*kWVyB0<3aSb-%0Asw-7ytcRqcEP}GZKwU)}
z5u6p?Yd-++`gf!rIuSn1I-PlK!%xj%Y&|i{Fk@4hc>_Dpd3gEU*+Hz~?^)5qGV2M8
zK)4>;%d?oXZXcg#8<>ZwZvY_$&N<p|hwOkcjs$`}Sj>D9Y3}Hmi#6i~Q~U%zQ+G=G
z_E#f*nC%msxCB<!d4p;@`%_$iMc<%xOzBvWQhy%up1OonQ>yX3^*Io_O`@}63#1~}
z%AerF0$Y*AQG6~^I}Jqcl7#PtiH4e}g~?$&Zn@3!WEq1%-Poh1w8CdbXV^MM*ks5-
zPP3YKZ{%=5a)BodhYYf&P=J%kyRsBz{zZMow&u=u?o#e}5>j#f&+zjbw6ZcG0E#y(
zE`(;nrKMrR$*#RTDsb?EibYY1#j@8pC)J3lY*uiWX6!F1{2olv|2qHbFxp1d?e;%C
z?KtrEUaQ0*S0?><WLd!8j+`qUxbks4od<2g&|^{eXFm^3k<y$rXg4dZ3>in%YX>C3
znY26nRlqU&X|GJ7h`$3V`JSw=464#-ZLRR+t3MBk^K|%sH$Dw1#Dm20Nm(AdVvnll
z+Z;Cgc-j%tY&^BN_X7gIyH=ddI}X8D7%Uc1=4Kx)-wSqNlu=jlm)aC*spC->*nwc~
z3&Q7!p!opBkorJ<U4>I3u8X@HU)^PhF7YXZ1xoN^XF*#|$h9wLQE=vG^^y6G>hI+C
z%zbLlHb*Hi=<A9*US?sGZPkZGHG7_pt9a31_DHIg^--vcLxi5{&f|LF&tlX}N=BE_
z=O2U&->Fph)N)^L4k64Z_~hMt0AKR-Ka#lv$%|I6#|Hy$##K)@h*^b&Y2qcqP|6%d
z#{te#*R!R(7Go0xQ<a)h)N$p%_ddkc;=+$8y=e20U_q8Gs*j<=zkJSEsqsM2LMGFP
z>x@+&GteYSN@;ISuo(6*!DI+ppl#+Mch%SabB=lG+cAy%jV-amn^Jd^)Ctn5+9m$e
z<CkVl22}$ywYK_So#rfp@Lqjf*swVdF#<lNXmYglE=xX^oYZD#W)=_YOamblL&P-1
zTD*VN<{KbVgvhrFzwZu{7N1*|4>dxvNm3H3wVQu&c(G)%Fk8H|CbFU(e>+7U`%pwI
zi<e<-2$5w16zVjXys_K9$=R&r;|ya3fr)A;)U(9BFdB8m88@EggxIf9WQc*e?msdY
zrvd^M&;A~++)$;?X?Z4k+7FCE-C^Id$Rd@iHfvVnlXJs{88}|8juMkz2b`zRl&7lQ
zU0m+;SbbU>&|`{;WWiD?sBdf=m(-WK6JTIy+RU)?Nq;Sc)Hxe!mcCIu{JHMot`auZ
zF2`4Jb>4}TITu=N0Y8glp{&{tS}OUD)Lq&SIQ@7KT$}e;SAH|MWGHYPA6JOGOPG@-
zw)@dd>>JXs7$5&E){*x5+L3jxiZAsID*YQ2L-%;CQ7@~m-TdvgT8#RYFy@mF?|&9?
zX6+(3y-zi>%R(93f2~}i{T{Uj-PNB<2qwf8%+xEsF2*+K4)!~2K8UtV?y7C^9$7nn
zmU3<_S6}?6ZTIjIO|&q$_3niC;S&p~z}GHxx`1M8lYq32x0Su$cI8pwhnw~S^RoP7
zr!Qs@s?>x)kyZB!lT$0Ps?wEOB(3oag~2*?tX->&tK3Kd=QX7i02zRVj@BdA!IRXv
z#>cRj&UGW|rKDhNy#8x$lDEG!->R0DfBBKh%SO&$zKt)(!xDG&{lTwNhN~{mASl%5
zIj4wDe14>Zfu}dqaG|>Nn<3H~PB2xz&#$?0%ivm9X2%yFu<XI2E6awl{V<qbi1Fyu
zl#ff0qrVFPKJ=tMC*qeE%WzerW>y1s!`G4(eEe}(!xik|^A+Dl$n$RScl07wcMc;N
zv`Z4RBs*aJgL4B$6SGdcf^amie~)h94-eC=1DwO)CLtL2z0f;frIs;zlCkTgEK8)h
zn-v0YUY_3!48ZL^jK1rCv+(SA9;>X>f$w)pLQ5Ol&@$ZTTDZ%^Zi}((cEdX^htT=h
z?%pwOf0}b6Ei@u6%Dm6Tqh=-oja@={{Ft-nxA`7ptLYgP!cB)N5u$G>x@+N`#2-A7
zuPiONL={VM3b&y;$1v;rE`PWC9!nP(a+PDBT*c0iMN!bDp@dxtfVkaa8eR;tvrdrj
zTl2yRD_h}V>-%Q-eJ!Sf7^_~)dHVo`T!(1-2WOr~lzrrW)+IH+RCY)Ew;Qp|+uGOj
z67eS9Pez`9dimm<hMzg_-Lo6h?30($?u(fev^i_@G{ofJ5+@j(d*~)OBZXMp9mU+b
z_e-RN?wy3&=Ru4nJEtYX{*Du8KH?@s&e_BQ^kccl<KJH|_)?i8IW`(Kz7rB+w|X(t
z8<FLi&6^Cx!Z$xMQL^FmyWE>;ojN26XGUI9r@u-)ypM4@YgOf9cf-N@Xn;(M^x~RY
z?lRHxMVEGo=(u*6Tws5T9#-@}h~7VCIC!-j|Hg&?QaLL;4ph@xE+SNxQd2feB=gku
zPvC(Zs!^T|LP3Kgnd!?C2xMVpvB|cTa{Ew7i+}FtU00ir2+XIi%=c2P?3-4Dqvd08
z-ivsmD3Ju?2y6UYsr&kZ<z4oXw&2$T66E+hCh5r2#t}q8AB}Bzm4>(3PeA==HDnv{
z;IKRF^Z_5h1PK#_vw%Rq1nWj(xcO{5R!UHv%fb>xArU{H8sg*%D6h-RPDO1>6}9`b
z`S!895JUunl%wXuqm@a%ghS**@RA|oSx)*)*|<PA829+tYkX|zEN{I9pePVZOQv@U
zYO!JM%<RosJ#L{RGXuoa_D#3zB}JbYNl%=~jGQtM$zH)Jls1^2Ot%!1cMT^c0fl?Q
zX%NB;g=*Nf|C|Ad_+s2|fdgPu5XJ}ud4r{Zi0*U<;{tSrbRzJA^G(|nWlBIrO;zES
z7&z+Dp+CTWy))mT<%_ZFa9i^(?En%_h=w*jz1LRo%^+{NDvI6jPjMGDP*ZEK-TDDT
zv5c&mZaG(eG!Y=?ib9a(-)qu#r;YoP?KyZeBGle0rMDZcjZrO(>>P0XIC+xo(ymmz
z+fRZcd|-}+7}4R!*=mYe%Siso5><^0#QMFy{j;AV@f2Z&$0`g{WOJW=t=SDuLiieu
z3#7oEqtCoZgKRTr9=>+Q79|WT_UA3@2}dIG7@V<J^o`2^%se7`Iq5z5YRO8glr^S2
zP=%b1+M2A=dl#Xhk2S*YKOSz65Ldn1gIJ0S&-6e8`UK~heuwX_@(z+X#n1zR7KCU`
zp^Pr8`w2;fe@}26@v@M#n*Y}~E)Oa~P-ocZyZ(`xC3TN>_u6x$l9a?6Xtbn}?m$L3
z=qJs+Z#7tA-mR#TJD}m{M59T1H!>Y+Z4!~DST`Sz({p(#Hf%;19S#<3eCu?mmOSQd
zQm6gc+oWbD^4#u|P4U^T-NK4`R=6!tLLrn1f#6e4Q<WcjUa4_Ct8>CPsD{fR-Z66I
zA$~jc^YJBvDJn*PJhynY-PjC994--dKXOHUzpm`IX)&QM0+pd12YIoe`z3uu(1{Zn
zk;+_z?{IjftIwo2Y<t`<ur`_TmY1%(V)kW+ybYe${5=h@{O3j7_4l1y+!q+5zMxfX
z;(^%(>640wGb%42&?I|b)aFu)!Ro=;7x$jY7Lu@Dv*$yHcio0%rsAB-eudZu9`K<U
zubkDn4|Y5!KP!OR8il}>uiQ61w?BdjOcTD<b|3<M2J0kdWONRnzeUe@czkzJlf$E?
z`J1lL;TQPg+bbqH%<JO+C51G`6^X6F%20Y_>^hSZqLlX${THjUd%*QPtjs;EB`w{o
z{{cV<A}Goa5#twx=m<(kibzO`its{&Bq5O2v?l)lPvGcm^&isv{}zn&0^|P)04i{G
KSe3ll$NvX^`M%=-
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-114x114.png b/ui/new-ui-samples/apple-touch-icon-114x114.png
new file mode 100644
index 0000000000000000000000000000000000000000..33b5bb3ffe03a0670a5cc03a6668c92d04fe2ce4
GIT binary patch
literal 9159
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
K)K3YM;Qs@*ScfA3
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-120x120.png b/ui/new-ui-samples/apple-touch-icon-120x120.png
new file mode 100644
index 0000000000000000000000000000000000000000..6d0ce2746897c9f75b493595f5356cfaab91f025
GIT binary patch
literal 9860
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
ZH1qub4Y{B6?EefPQeyI=)xw6r{{eZSqyzu}
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-144x144.png b/ui/new-ui-samples/apple-touch-icon-144x144.png
new file mode 100644
index 0000000000000000000000000000000000000000..71f3e19ec3dc29ba452fe395b11f2dcebefe9bfb
GIT binary patch
literal 12771
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
aSzCDj{{%VjOq^c?U@{Vl;?<%?LH`A(w0495
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-152x152.png b/ui/new-ui-samples/apple-touch-icon-152x152.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc4ffe25d1e6bb1da5c91cad03ff70c6e608d1bc
GIT binary patch
literal 13861
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-180x180.png b/ui/new-ui-samples/apple-touch-icon-180x180.png
new file mode 100644
index 0000000000000000000000000000000000000000..68f6b0810347c268ad67d9a28d028c4c5078d358
GIT binary patch
literal 15806
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
IM6N<$f@3((RsaA1
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-57x57.png b/ui/new-ui-samples/apple-touch-icon-57x57.png
new file mode 100644
index 0000000000000000000000000000000000000000..da48961409abf3541aac7f903b82d34ca53e1c41
GIT binary patch
literal 3613
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-60x60.png b/ui/new-ui-samples/apple-touch-icon-60x60.png
new file mode 100644
index 0000000000000000000000000000000000000000..511e9caba56c8e2d7b134daed93455df156accb0
GIT binary patch
literal 3839
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
B4j=#k
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-72x72.png b/ui/new-ui-samples/apple-touch-icon-72x72.png
new file mode 100644
index 0000000000000000000000000000000000000000..59a498c7b14870da4bf3642604e53411de735141
GIT binary patch
literal 4862
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-76x76.png b/ui/new-ui-samples/apple-touch-icon-76x76.png
new file mode 100644
index 0000000000000000000000000000000000000000..c145ad38c0e5c77b76e9277498eaebdcb3200d44
GIT binary patch
literal 5193
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
Bn#=$I
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon-precomposed.png b/ui/new-ui-samples/apple-touch-icon-precomposed.png
new file mode 100644
index 0000000000000000000000000000000000000000..7c7bdee612920f195195e8cf566a6467bb8e38ef
GIT binary patch
literal 16413
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/apple-touch-icon.png b/ui/new-ui-samples/apple-touch-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..68f6b0810347c268ad67d9a28d028c4c5078d358
GIT binary patch
literal 15806
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
IM6N<$f@3((RsaA1
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/browserconfig.xml b/ui/new-ui-samples/browserconfig.xml
new file mode 100644
index 0000000..f947e3b
--- /dev/null
+++ b/ui/new-ui-samples/browserconfig.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<browserconfig>
+ <msapplication>
+ <tile>
+ <square70x70logo src="/mstile-70x70.png"/>
+ <square150x150logo src="/mstile-150x150.png"/>
+ <square310x310logo src="/mstile-310x310.png"/>
+ <wide310x150logo src="/mstile-310x150.png"/>
+ <TileColor>#4d4d4d</TileColor>
+ </tile>
+ </msapplication>
+</browserconfig>
diff --git a/ui/new-ui-samples/css/button-flat.css b/ui/new-ui-samples/css/button-flat.css
new file mode 100755
index 0000000..9df6935
--- /dev/null
+++ b/ui/new-ui-samples/css/button-flat.css
@@ -0,0 +1,271 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.ui-button {
+ display: inline-block;
+ position: relative;
+ color: #FFFFFF;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ border-radius: 3px;
+ border: 1px none;
+ background: #4e4d4f;
+ font-weight: normal;
+ overflow: visible; /* removes extra width in IE */
+}
+.ui-button:hover{
+ background: #000000;
+ font-weight: normal;
+}
+.ui-button:active {
+ background: #4e4d4f;
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+}
+
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+.ui-button-icons-only {
+ width: 3.4em;
+}
+button.ui-button-icons-only {
+ width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+ padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+ margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.ui-button {
+ display: inline-block;
+ position: relative;
+ color: #FFFFFF;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ border-radius: 3px;
+ border: 1px none;
+ background: #4e4d4f;
+ font-weight: normal;
+ overflow: visible; /* removes extra width in IE */
+}
+.ui-button:hover{
+ background: #000000;
+ font-weight: normal;
+}
+.ui-button:active {
+ background: #4e4d4f;
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+}
+
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+.ui-button-icons-only {
+ width: 3.4em;
+}
+button.ui-button-icons-only {
+ width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+ padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+ margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
diff --git a/ui/new-ui-samples/css/checkbox-flat.css b/ui/new-ui-samples/css/checkbox-flat.css
new file mode 100644
index 0000000..39c8d22
--- /dev/null
+++ b/ui/new-ui-samples/css/checkbox-flat.css
@@ -0,0 +1,50 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ .checkbox-item {
+ cursor: pointer;
+ }
+
+ .checkbox-inline {
+ display: inline-block;
+ }
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ .checkbox-item {
+ cursor: pointer;
+ }
+
+ .checkbox-inline {
+ display: inline-block;
+ }
\ No newline at end of file
diff --git a/ui/new-ui-samples/css/fontello.css b/ui/new-ui-samples/css/fontello.css
new file mode 100644
index 0000000..3ba2c51
--- /dev/null
+++ b/ui/new-ui-samples/css/fontello.css
@@ -0,0 +1,1137 @@
+@charset "UTF-8";
+/*
+ * A partial implementation of the Ruby list functions from Compass:
+ * https://github.com/Compass/compass/blob/stable/lib/compass/sass_extensions/…
+ */
+/*
+ * A partial implementation of the Ruby constants functions from Compass:
+ * https://github.com/Compass/compass/blob/stable/lib/compass/sass_extensions/…
+ */
+/*
+ * A partial implementation of the Ruby display functions from Compass:
+ * https://github.com/Compass/compass/blob/stable/core/lib/compass/core/sass_e…
+ */
+@font-face {
+ font-family: 'fontello';
+ src: url("../fonts/fontello.eot");
+ src: url("../fonts/fontello.eot#iefix") format("embedded-opentype"), url("../fonts/fontello.woff") format("woff"), url("../fonts/fontello.ttf") format("truetype"), url("../fonts/fontello.svg#fontello") format("svg");
+ font-weight: normal;
+ font-style: normal;
+}
+
+/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
+/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
+/*
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+ @font-face {
+ font-family: 'fontello';
+ src: url('../font/fontello.svg?99320945#fontello') format('svg');
+ }
+}
+*/
+[class^="icon-"]:before, [class*=" icon-"]:before {
+ font-family: "fontello";
+ font-style: normal;
+ font-weight: normal;
+ speak: none;
+ display: inline-block;
+ text-decoration: inherit;
+ width: 1em;
+ margin-right: .2em;
+ text-align: center;
+ /* opacity: .8; */
+ /* For safety - reset parent styles, that can break glyph codes*/
+ font-variant: normal;
+ text-transform: none;
+ /* fix buttons height, for twitter bootstrap */
+ line-height: 1em;
+ /* Animation center compensation - margins should be symmetric */
+ /* remove if not needed */
+ margin-left: .2em;
+ /* you can be more comfortable with increased icons size */
+ /* font-size: 120%; */
+ /* Uncomment for 3D effect */
+ /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
+}
+
+.icon-user:before {
+ content: '\e800';
+}
+
+/* '' */
+.icon-help-circled:before {
+ content: '\e801';
+}
+
+/* '' */
+.icon-search:before {
+ content: '\e802';
+}
+
+/* '' */
+.icon-tag:before {
+ content: '\e803';
+}
+
+/* '' */
+.icon-dot-2:before {
+ content: '\e804';
+}
+
+/* '' */
+.icon-arrows-cw:before {
+ content: '\e805';
+}
+
+/* '' */
+.icon-print:before {
+ content: '\e806';
+}
+
+/* '' */
+.icon-cancel-circled:before {
+ content: '\e807';
+}
+
+/* '' */
+.icon-edit-alt:before {
+ content: '\e808';
+}
+
+/* '' */
+.icon-login:before {
+ content: '\e809';
+}
+
+/* '' */
+.icon-logout:before {
+ content: '\e80a';
+}
+
+/* '' */
+.icon-download:before {
+ content: '\e80b';
+}
+
+/* '' */
+.icon-th-large:before {
+ content: '\e80c';
+}
+
+/* '' */
+.icon-th:before {
+ content: '\e80d';
+}
+
+/* '' */
+.icon-th-list:before {
+ content: '\e80e';
+}
+
+/* '' */
+.icon-star:before {
+ content: '\e80f';
+}
+
+/* '' */
+.icon-star-empty:before {
+ content: '\e810';
+}
+
+/* '' */
+.icon-users:before {
+ content: '\e811';
+}
+
+/* '' */
+.icon-upload:before {
+ content: '\e812';
+}
+
+/* '' */
+.icon-circle-thin:before {
+ content: '\e813';
+}
+
+/* '' */
+.icon-dot-circled:before {
+ content: '\e814';
+}
+
+/* '' */
+.icon-ok:before {
+ content: '\e815';
+}
+
+/* '' */
+.icon-check-empty-1:before {
+ content: '\e816';
+}
+
+/* '' */
+.icon-clock-2:before {
+ content: '\e817';
+}
+
+/* '' */
+.icon-ok-squared:before {
+ content: '\e818';
+}
+
+/* '' */
+.icon-pin:before {
+ content: '\e820';
+}
+
+/* '' */
+.icon-eye:before {
+ content: '\e821';
+}
+
+/* '' */
+.icon-attach:before {
+ content: '\e824';
+}
+
+/* '' */
+.icon-unlink:before {
+ content: '\e825';
+}
+
+/* '' */
+.icon-link:before {
+ content: '\e826';
+}
+
+/* '' */
+.icon-home:before {
+ content: '\e827';
+}
+
+/* '' */
+.icon-info:before {
+ content: '\e828';
+}
+
+/* '' */
+.icon-info-circled:before {
+ content: '\e829';
+}
+
+/* '' */
+.icon-export:before {
+ content: '\e82f';
+}
+
+/* '' */
+.icon-export-alt:before {
+ content: '\e830';
+}
+
+/* '' */
+.icon-share:before {
+ content: '\e831';
+}
+
+/* '' */
+.icon-share-squared:before {
+ content: '\e832';
+}
+
+/* '' */
+.icon-retweet:before {
+ content: '\e836';
+}
+
+/* '' */
+.icon-attention-alt:before {
+ content: '\e837';
+}
+
+/* '' */
+.icon-attention:before {
+ content: '\e838';
+}
+
+/* '' */
+.icon-attention-circled:before {
+ content: '\e839';
+}
+
+/* '' */
+.icon-location:before {
+ content: '\e83a';
+}
+
+/* '' */
+.icon-trash:before {
+ content: '\e83b';
+}
+
+/* '' */
+.icon-doc:before {
+ content: '\e83c';
+}
+
+/* '' */
+.icon-docs:before {
+ content: '\e83d';
+}
+
+/* '' */
+.icon-doc-text:before {
+ content: '\e83e';
+}
+
+/* '' */
+.icon-doc-inv:before {
+ content: '\e83f';
+}
+
+/* '' */
+.icon-doc-text-inv:before {
+ content: '\e840';
+}
+
+/* '' */
+.icon-file-pdf:before {
+ content: '\e841';
+}
+
+/* '' */
+.icon-file-word:before {
+ content: '\e842';
+}
+
+/* '' */
+.icon-file-excel:before {
+ content: '\e843';
+}
+
+/* '' */
+.icon-file-powerpoint:before {
+ content: '\e844';
+}
+
+/* '' */
+.icon-file-image:before {
+ content: '\e845';
+}
+
+/* '' */
+.icon-cog:before {
+ content: '\e84b';
+}
+
+/* '' */
+.icon-cog-alt:before {
+ content: '\e84c';
+}
+
+/* '' */
+.icon-wrench:before {
+ content: '\e84d';
+}
+
+/* '' */
+.icon-calendar:before {
+ content: '\e84e';
+}
+
+/* '' */
+.icon-calendar-empty:before {
+ content: '\e84f';
+}
+
+/* '' */
+.icon-clock:before {
+ content: '\e852';
+}
+
+/* '' */
+.icon-block:before {
+ content: '\e853';
+}
+
+/* '' */
+.icon-zoom-in:before {
+ content: '\e857';
+}
+
+/* '' */
+.icon-zoom-out:before {
+ content: '\e858';
+}
+
+/* '' */
+.icon-down-circled2:before {
+ content: '\e859';
+}
+
+/* '' */
+.icon-up-circled2:before {
+ content: '\e85a';
+}
+
+/* '' */
+.icon-left-circled2:before {
+ content: '\e85b';
+}
+
+/* '' */
+.icon-right-circled2:before {
+ content: '\e85c';
+}
+
+/* '' */
+.icon-down-dir:before {
+ content: '\e85d';
+}
+
+/* '' */
+.icon-up-dir:before {
+ content: '\e85e';
+}
+
+/* '' */
+.icon-left-dir:before {
+ content: '\e85f';
+}
+
+/* '' */
+.icon-right-dir:before {
+ content: '\e860';
+}
+
+/* '' */
+.icon-down-open:before {
+ content: '\e861';
+}
+
+/* '' */
+.icon-left-open:before {
+ content: '\e862';
+}
+
+/* '' */
+.icon-right-open:before {
+ content: '\e863';
+}
+
+/* '' */
+.icon-up-open:before {
+ content: '\e864';
+}
+
+/* '' */
+.icon-angle-left:before {
+ content: '\e865';
+}
+
+/* '' */
+.icon-angle-right:before {
+ content: '\e866';
+}
+
+/* '' */
+.icon-angle-up:before {
+ content: '\e867';
+}
+
+/* '' */
+.icon-angle-down:before {
+ content: '\e868';
+}
+
+/* '' */
+.icon-angle-circled-left:before {
+ content: '\e869';
+}
+
+/* '' */
+.icon-angle-circled-right:before {
+ content: '\e86a';
+}
+
+/* '' */
+.icon-angle-circled-up:before {
+ content: '\e86b';
+}
+
+/* '' */
+.icon-angle-circled-down:before {
+ content: '\e86c';
+}
+
+/* '' */
+.icon-angle-double-left:before {
+ content: '\e86d';
+}
+
+/* '' */
+.icon-angle-double-right:before {
+ content: '\e86e';
+}
+
+/* '' */
+.icon-angle-double-up:before {
+ content: '\e86f';
+}
+
+/* '' */
+.icon-angle-double-down:before {
+ content: '\e870';
+}
+
+/* '' */
+.icon-down-big:before {
+ content: '\e871';
+}
+
+/* '' */
+.icon-left-big:before {
+ content: '\e872';
+}
+
+/* '' */
+.icon-right-big:before {
+ content: '\e873';
+}
+
+/* '' */
+.icon-up-big:before {
+ content: '\e874';
+}
+
+/* '' */
+.icon-left-circled:before {
+ content: '\e875';
+}
+
+/* '' */
+.icon-right-circled:before {
+ content: '\e876';
+}
+
+/* '' */
+.icon-up-circled:before {
+ content: '\e877';
+}
+
+/* '' */
+.icon-down-circled:before {
+ content: '\e878';
+}
+
+/* '' */
+.icon-cw:before {
+ content: '\e879';
+}
+
+/* '' */
+.icon-ccw:before {
+ content: '\e87a';
+}
+
+/* '' */
+.icon-level-up:before {
+ content: '\e87c';
+}
+
+/* '' */
+.icon-level-down:before {
+ content: '\e87d';
+}
+
+/* '' */
+.icon-shuffle:before {
+ content: '\e87e';
+}
+
+/* '' */
+.icon-exchange:before {
+ content: '\e87f';
+}
+
+/* '' */
+.icon-history:before {
+ content: '\e880';
+}
+
+/* '' */
+.icon-expand:before {
+ content: '\e881';
+}
+
+/* '' */
+.icon-collapse:before {
+ content: '\e882';
+}
+
+/* '' */
+.icon-expand-right:before {
+ content: '\e883';
+}
+
+/* '' */
+.icon-collapse-left:before {
+ content: '\e884';
+}
+
+/* '' */
+.icon-play:before {
+ content: '\e885';
+}
+
+/* '' */
+.icon-play-circled2:before {
+ content: '\e886';
+}
+
+/* '' */
+.icon-play-circled:before {
+ content: '\e887';
+}
+
+/* '' */
+.icon-stop:before {
+ content: '\e888';
+}
+
+/* '' */
+.icon-cloud:before {
+ content: '\e889';
+}
+
+/* '' */
+.icon-table:before {
+ content: '\e88a';
+}
+
+/* '' */
+.icon-off:before {
+ content: '\e88b';
+}
+
+/* '' */
+.icon-check:before {
+ content: '\e88c';
+}
+
+/* '' */
+.icon-asterisk:before {
+ content: '\e88e';
+}
+
+/* '' */
+.icon-chart-bar:before {
+ content: '\e88f';
+}
+
+/* '' */
+.icon-bug:before {
+ content: '\e890';
+}
+
+/* '' */
+.icon-certificate:before {
+ content: '\e891';
+}
+
+/* '' */
+.icon-tasks:before {
+ content: '\e892';
+}
+
+/* '' */
+.icon-sort-up:before {
+ content: '\e893';
+}
+
+/* '' */
+.icon-sort-down:before {
+ content: '\e894';
+}
+
+/* '' */
+.icon-sort:before {
+ content: '\e895';
+}
+
+/* '' */
+.icon-gauge:before {
+ content: '\e896';
+}
+
+/* '' */
+.icon-spinner:before {
+ content: '\e897';
+}
+
+/* '' */
+.icon-database:before {
+ content: '\e898';
+}
+
+/* '' */
+.icon-lifebuoy:before {
+ content: '\e899';
+}
+
+/* '' */
+.icon-cubes:before {
+ content: '\e89a';
+}
+
+/* '' */
+.icon-cube:before {
+ content: '\e89b';
+}
+
+/* '' */
+.icon-bullseye:before {
+ content: '\e89c';
+}
+
+/* '' */
+.icon-windows:before {
+ content: '\e89d';
+}
+
+/* '' */
+.icon-cancel-circled-1:before {
+ content: '\e89e';
+}
+
+/* '' */
+.icon-plus-1:before {
+ content: '\e8a0';
+}
+
+/* '' */
+.icon-plus-circled-1:before {
+ content: '\e8a1';
+}
+
+/* '' */
+.icon-minus-1:before {
+ content: '\e8a3';
+}
+
+/* '' */
+.icon-minus-circled-1:before {
+ content: '\e8a4';
+}
+
+/* '' */
+.icon-help-circled-1:before {
+ content: '\e8a7';
+}
+
+/* '' */
+.icon-heart-empty-1:before {
+ content: '\e8aa';
+}
+
+/* '' */
+.icon-mail-1:before {
+ content: '\e8ab';
+}
+
+/* '' */
+.icon-star-1:before {
+ content: '\e8ac';
+}
+
+/* '' */
+.icon-star-empty-1:before {
+ content: '\e8ad';
+}
+
+/* '' */
+.icon-link-1:before {
+ content: '\e8ae';
+}
+
+/* '' */
+.icon-attach-1:before {
+ content: '\e8af';
+}
+
+/* '' */
+.icon-eye-1:before {
+ content: '\e8b2';
+}
+
+/* '' */
+.icon-attention-1:before {
+ content: '\e8b3';
+}
+
+/* '' */
+.icon-doc-text-1:before {
+ content: '\e8b4';
+}
+
+/* '' */
+.icon-doc-text-inv-1:before {
+ content: '\e8b5';
+}
+
+/* '' */
+.icon-share-1:before {
+ content: '\e8b7';
+}
+
+/* '' */
+.icon-shareable:before {
+ content: '\e8b8';
+}
+
+/* '' */
+.icon-ccw-1:before {
+ content: '\e8cc';
+}
+
+/* '' */
+.icon-cw-1:before {
+ content: '\e8cd';
+}
+
+/* '' */
+.icon-arrows-ccw:before {
+ content: '\e8ce';
+}
+
+/* '' */
+.icon-play-1:before {
+ content: '\e8cf';
+}
+
+/* '' */
+.icon-pause:before {
+ content: '\e8d0';
+}
+
+/* '' */
+.icon-record:before {
+ content: '\e8d1';
+}
+
+/* '' */
+.icon-stop-1:before {
+ content: '\e8d2';
+}
+
+/* '' */
+.icon-switch:before {
+ content: '\e8d3';
+}
+
+/* '' */
+.icon-loop:before {
+ content: '\e8d4';
+}
+
+/* '' */
+.icon-cloud-1:before {
+ content: '\e8d5';
+}
+
+/* '' */
+.icon-certificate-outline:before {
+ content: '\e8db';
+}
+
+/* '' */
+.icon-certificate-1:before {
+ content: '\e8dc';
+}
+
+/* '' */
+.icon-windows-1:before {
+ content: '\e8dd';
+}
+
+/* '' */
+.icon-spin5:before {
+ content: '\e8df';
+}
+
+/* '' */
+.icon-spin2:before {
+ content: '\e8e0';
+}
+
+/* '' */
+.icon-picture:before {
+ content: '\e8e4';
+}
+
+/* '' */
+.icon-menu:before {
+ content: '\e8e5';
+}
+
+/* '' */
+.icon-sliders:before {
+ content: '\e8e6';
+}
+
+/* '' */
+.icon-list-alt:before {
+ content: '\e8e7';
+}
+
+/* '' */
+.icon-ajust:before {
+ content: '\e8e8';
+}
+
+/* '' */
+.icon-circle:before {
+ content: '\e8e9';
+}
+
+/* '' */
+.icon-circle-empty:before {
+ content: '\e8ea';
+}
+
+/* '' */
+.icon-circle-notch:before {
+ content: '\e8ec';
+}
+
+/* '' */
+.icon-fork:before {
+ content: '\e8ed';
+}
+
+/* '' */
+.icon-sitemap:before {
+ content: '\e8ee';
+}
+
+/* '' */
+.icon-stethoscope:before {
+ content: '\e8ef';
+}
+
+/* '' */
+.icon-shield:before {
+ content: '\e8f0';
+}
+
+/* '' */
+.icon-heart-1:before {
+ content: '\e8f1';
+}
+
+/* '' */
+.icon-search-1:before {
+ content: '\e8f2';
+}
+
+/* '' */
+.icon-menu-1:before {
+ content: '\e8f3';
+}
+
+/* '' */
+.icon-back:before {
+ content: '\e8f6';
+}
+
+/* '' */
+.icon-home-1:before {
+ content: '\e8f7';
+}
+
+/* '' */
+.icon-pencil-1:before {
+ content: '\e8f8';
+}
+
+/* '' */
+.icon-location-1:before {
+ content: '\e8f9';
+}
+
+/* '' */
+.icon-logout-1:before {
+ content: '\e8fb';
+}
+
+/* '' */
+.icon-login-1:before {
+ content: '\e8fc';
+}
+
+/* '' */
+.icon-publish:before {
+ content: '\e8fd';
+}
+
+/* '' */
+.icon-window:before {
+ content: '\e8fe';
+}
+
+/* '' */
+.icon-chart-pie:before {
+ content: '\e8ff';
+}
+
+/* '' */
+.icon-chart-line:before {
+ content: '\e900';
+}
+
+/* '' */
+.icon-chart-area:before {
+ content: '\e901';
+}
+
+/* '' */
+.icon-chart-bar-1:before {
+ content: '\e902';
+}
+
+/* '' */
+.icon-air:before {
+ content: '\e905';
+}
+
+/* '' */
+.icon-database-1:before {
+ content: '\e906';
+}
+
+/* '' */
+.icon-flow-cascade:before {
+ content: '\e907';
+}
+
+/* '' */
+.icon-flow-tree:before {
+ content: '\e908';
+}
+
+/* '' */
+.icon-flow-line:before {
+ content: '\e909';
+}
+
+/* '' */
+.icon-flow-branch:before {
+ content: '\e90a';
+}
+
+/* '' */
+.icon-flow-parallel-1:before {
+ content: '\e90f';
+}
+
+/* '' */
+.icon-dot:before {
+ content: '\e910';
+}
+
+/* '' */
+.icon-dot-3:before {
+ content: '\e911';
+}
+
+/* '' */
+.icon-cd:before {
+ content: '\e912';
+}
+
+/* '' */
+.icon-back-in-time:before {
+ content: '\e913';
+}
+
+/* '' */
+.icon-list:before {
+ content: '\e914';
+}
+
+/* '' */
+.icon-list-add:before {
+ content: '\e915';
+}
+
+/* '' */
+.icon-progress-0:before {
+ content: '\e919';
+}
+
+/* '' */
+.icon-pencil-2:before {
+ content: '\e91d';
+}
+
+/* '' */
+.icon-cog-2:before {
+ content: '\e91f';
+}
+
+/* '' */
+.icon-cog-circled:before {
+ content: '\e920';
+}
+
+/* '' */
+.icon-cogs:before {
+ content: '\e921';
+}
+
+/* '' */
+.icon-calendar-1:before {
+ content: '\e924';
+}
+
+/* '' */
+.icon-doc-new:before {
+ content: '\e925';
+}
+
+/* '' */
+/*
+ Animation example, for spinners
+*/
+.animate-spin {
+ -webkit-animation: spin 2s infinite linear;
+ animation: spin 2s infinite linear;
+ display: inline-block;
+}
+
+@-webkit-keyframes spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ -ms-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ -ms-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+
+@keyframes spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ -ms-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ -ms-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvbnRlbGxvLmNzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvZnVuY3Rpb25zL19saXN0cy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy9mdW5jdGlvbnMvX2NvbnN0YW50cy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy9mdW5jdGlvbnMvX2Rpc3BsYXkuc2NzcyIsIm1vZHVsZXMvX2ZvbnRlbGxvLnNjc3MiLCJtb2R1bGVzL19hbmltYXRpb24uc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX3ZlbmRvci1wcmVmaXhlcy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzcy9jc3MzL19zaGFyZWQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUI7QUNBakI7OztHQUdHO0FDSEg7OztHQUdHO0FDSEg7OztHQUdHO0FDSEg7RUFDRSx3QkFBd0I7RUFDeEIsa0NBQVE7RUFDUix3TkFHMEQ7RUFDMUQsb0JBQW9CO0VBQ3BCLG1CQUFtQjtDSldwQjs7QUlQRCxpR0FBaUc7QUFDakcsNEZBQTRGO0FBQzVGOzs7Ozs7O0VBT0U7QUpVRjtFSVBFLHdCQUF3QjtFQUN4QixtQkFBbUI7RUFDbkIsb0JBQW9CO0VBQ3BCLFlBQVk7RUFFWixzQkFBc0I7RUFDdEIseUJBQXlCO0VBQ3pCLFdBQVc7RUFDWCxtQkFBbUI7RUFDbkIsbUJBQW1CO0VBQ25CLGtCQUFrQjtFQUVsQixpRUFBaUU7RUFDakUscUJBQXFCO0VBQ3JCLHFCQUFxQjtFQUVyQiwrQ0FBK0M7RUFDL0MsaUJBQWlCO0VBRWpCLGlFQUFpRTtFQUNqRSwwQkFBMEI7RUFDMUIsa0JBQWtCO0VBRWxCLDJEQUEyRDtFQUMzRCxzQkFBc0I7RUFFdEIsNkJBQTZCO0VBQzdCLHdEQUF3RDtDQTVCTjs7QUErQjFDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ25DO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzFCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3BDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzFCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3BCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzVCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzVCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3BDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ25DO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzFCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ25DO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzFCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3BDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzFCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzVCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzFCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzVCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3BDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ25DO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ25DO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzVCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ25CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ25DO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ25DO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzVCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzVCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3BDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2hDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzVCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzlCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3hCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQy9CO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3JCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3ZDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzNCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQzdCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2pDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3RDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ3pCO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FBQ2xDO0VBQVUsaUJBQWlCO0NBQWxCOztBQUFzQixTQUFBO0FDdFE1Qzs7RUFFRTtBQUNGO0VDZ0JFLDJDRGYwQztFQ2lCbEMsbUNEakJrQztFQUMxQyxzQkFBc0I7Q0FGVDs7QUFJZjtFQUNFO0lFTXVELGdDRkw1QjtJRVFnQyw0QkZSaEM7SUVVb0Msd0JGVnBDO0dMcWxDMUI7RUtubENEO0lFR3VELGtDRkY1QjtJRUtnQyw4QkZMaEM7SUVPb0MsMEJGUHBDO0dMeWxDMUI7Q0FDRjs7QUsvbENEO0VBQ0U7SUVNdUQsZ0NGTDVCO0lFUWdDLDRCRlJoQztJRVVvQyx3QkZWcEM7R0xxbEMxQjtFS25sQ0Q7SUVHdUQsa0NGRjVCO0lFS2dDLDhCRkxoQztJRU9vQywwQkZQcEM7R0x5bEMxQjtDQUNGIiwiZmlsZSI6ImZvbnRlbGxvLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIkBjaGFyc2V0IFwiVVRGLThcIjtcbi8qXG4gKiBBIHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJ1YnkgbGlzdCBmdW5jdGlvbnMgZnJvbSBDb21wYXNzOlxuICogaHR0cHM6Ly9naXRodWIuY29tL0NvbXBhc3MvY29tcGFzcy9ibG9iL3N0YWJsZS9saWIvY29tcGFzcy9zYXNzX2V4dGVuc2lvbnMvZnVuY3Rpb25zL2xpc3RzLnJiXG4gKi9cbi8qXG4gKiBBIHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJ1YnkgY29uc3RhbnRzIGZ1bmN0aW9ucyBmcm9tIENvbXBhc3M6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vQ29tcGFzcy9jb21wYXNzL2Jsb2Ivc3RhYmxlL2xpYi9jb21wYXNzL3Nhc3NfZXh0ZW5zaW9ucy9mdW5jdGlvbnMvY29uc3RhbnRzLnJiXG4gKi9cbi8qXG4gKiBBIHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJ1YnkgZGlzcGxheSBmdW5jdGlvbnMgZnJvbSBDb21wYXNzOlxuICogaHR0cHM6Ly9naXRodWIuY29tL0NvbXBhc3MvY29tcGFzcy9ibG9iL3N0YWJsZS9jb3JlL2xpYi9jb21wYXNzL2NvcmUvc2Fzc19leHRlbnNpb25zL2Z1bmN0aW9ucy9kaXNwbGF5LnJiXG4gKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ2ZvbnRlbGxvJztcbiAgc3JjOiB1cmwoXCIuLi9mb250cy9mb250ZWxsby5lb3RcIik7XG4gIHNyYzogdXJsKFwiLi4vZm9udHMvZm9udGVsbG8uZW90I2llZml4XCIpIGZvcm1hdChcImVtYmVkZGVkLW9wZW50eXBlXCIpLCB1cmwoXCIuLi9mb250cy9mb250ZWxsby53b2ZmXCIpIGZvcm1hdChcIndvZmZcIiksIHVybChcIi4uL2ZvbnRzL2ZvbnRlbGxvLnR0ZlwiKSBmb3JtYXQoXCJ0cnVldHlwZVwiKSwgdXJsKFwiLi4vZm9udHMvZm9udGVsbG8uc3ZnI2ZvbnRlbGxvXCIpIGZvcm1hdChcInN2Z1wiKTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG4vKiBDaHJvbWUgaGFjazogU1ZHIGlzIHJlbmRlcmVkIG1vcmUgc21vb3RoIGluIFdpbmRvenplLiAxMDAlIG1hZ2ljLCB1bmNvbW1lbnQgaWYgeW91IG5lZWQgaXQuICovXG4vKiBOb3RlLCB0aGF0IHdpbGwgYnJlYWsgaGludGluZyEgSW4gb3RoZXIgT1MtZXMgZm9udCB3aWxsIGJlIG5vdCBhcyBzaGFycCBhcyBpdCBjb3VsZCBiZSAqL1xuLypcbkBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkge1xuICBAZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ2ZvbnRlbGxvJztcbiAgICBzcmM6IHVybCgnLi4vZm9udC9mb250ZWxsby5zdmc/OTkzMjA5NDUjZm9udGVsbG8nKSBmb3JtYXQoJ3N2ZycpO1xuICB9XG59XG4qL1xuW2NsYXNzXj1cImljb24tXCJdOmJlZm9yZSwgW2NsYXNzKj1cIiBpY29uLVwiXTpiZWZvcmUge1xuICBmb250LWZhbWlseTogXCJmb250ZWxsb1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIHNwZWFrOiBub25lO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRleHQtZGVjb3JhdGlvbjogaW5oZXJpdDtcbiAgd2lkdGg6IDFlbTtcbiAgbWFyZ2luLXJpZ2h0OiAuMmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIC8qIG9wYWNpdHk6IC44OyAqL1xuICAvKiBGb3Igc2FmZXR5IC0gcmVzZXQgcGFyZW50IHN0eWxlcywgdGhhdCBjYW4gYnJlYWsgZ2x5cGggY29kZXMqL1xuICBmb250LXZhcmlhbnQ6IG5vcm1hbDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIC8qIGZpeCBidXR0b25zIGhlaWdodCwgZm9yIHR3aXR0ZXIgYm9vdHN0cmFwICovXG4gIGxpbmUtaGVpZ2h0OiAxZW07XG4gIC8qIEFuaW1hdGlvbiBjZW50ZXIgY29tcGVuc2F0aW9uIC0gbWFyZ2lucyBzaG91bGQgYmUgc3ltbWV0cmljICovXG4gIC8qIHJlbW92ZSBpZiBub3QgbmVlZGVkICovXG4gIG1hcmdpbi1sZWZ0OiAuMmVtO1xuICAvKiB5b3UgY2FuIGJlIG1vcmUgY29tZm9ydGFibGUgd2l0aCBpbmNyZWFzZWQgaWNvbnMgc2l6ZSAqL1xuICAvKiBmb250LXNpemU6IDEyMCU7ICovXG4gIC8qIFVuY29tbWVudCBmb3IgM0QgZWZmZWN0ICovXG4gIC8qIHRleHQtc2hhZG93OiAxcHggMXB4IDFweCByZ2JhKDEyNywgMTI3LCAxMjcsIDAuMyk7ICovXG59XG5cbi5pY29uLXVzZXI6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgwMCc7XG59XG5cbi8qICfuoIAnICovXG4uaWNvbi1oZWxwLWNpcmNsZWQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgwMSc7XG59XG5cbi8qICfuoIEnICovXG4uaWNvbi1zZWFyY2g6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgwMic7XG59XG5cbi8qICfuoIInICovXG4uaWNvbi10YWc6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgwMyc7XG59XG5cbi8qICfuoIMnICovXG4uaWNvbi1kb3QtMjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODA0Jztcbn1cblxuLyogJ+6ghCcgKi9cbi5pY29uLWFycm93cy1jdzpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODA1Jztcbn1cblxuLyogJ+6ghScgKi9cbi5pY29uLXByaW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MDYnO1xufVxuXG4vKiAn7qCGJyAqL1xuLmljb24tY2FuY2VsLWNpcmNsZWQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgwNyc7XG59XG5cbi8qICfuoIcnICovXG4uaWNvbi1lZGl0LWFsdDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODA4Jztcbn1cblxuLyogJ+6giCcgKi9cbi5pY29uLWxvZ2luOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MDknO1xufVxuXG4vKiAn7qCJJyAqL1xuLmljb24tbG9nb3V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MGEnO1xufVxuXG4vKiAn7qCKJyAqL1xuLmljb24tZG93bmxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgwYic7XG59XG5cbi8qICfuoIsnICovXG4uaWNvbi10aC1sYXJnZTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODBjJztcbn1cblxuLyogJ+6gjCcgKi9cbi5pY29uLXRoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MGQnO1xufVxuXG4vKiAn7qCNJyAqL1xuLmljb24tdGgtbGlzdDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODBlJztcbn1cblxuLyogJ+6gjicgKi9cbi5pY29uLXN0YXI6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgwZic7XG59XG5cbi8qICfuoI8nICovXG4uaWNvbi1zdGFyLWVtcHR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MTAnO1xufVxuXG4vKiAn7qCQJyAqL1xuLmljb24tdXNlcnM6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgxMSc7XG59XG5cbi8qICfuoJEnICovXG4uaWNvbi11cGxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgxMic7XG59XG5cbi8qICfuoJInICovXG4uaWNvbi1jaXJjbGUtdGhpbjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODEzJztcbn1cblxuLyogJ+6gkycgKi9cbi5pY29uLWRvdC1jaXJjbGVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MTQnO1xufVxuXG4vKiAn7qCUJyAqL1xuLmljb24tb2s6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgxNSc7XG59XG5cbi8qICfuoJUnICovXG4uaWNvbi1jaGVjay1lbXB0eS0xOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MTYnO1xufVxuXG4vKiAn7qCWJyAqL1xuLmljb24tY2xvY2stMjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODE3Jztcbn1cblxuLyogJ+6glycgKi9cbi5pY29uLW9rLXNxdWFyZWQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgxOCc7XG59XG5cbi8qICfuoJgnICovXG4uaWNvbi1waW46YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgyMCc7XG59XG5cbi8qICfuoKAnICovXG4uaWNvbi1leWU6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgyMSc7XG59XG5cbi8qICfuoKEnICovXG4uaWNvbi1hdHRhY2g6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgyNCc7XG59XG5cbi8qICfuoKQnICovXG4uaWNvbi11bmxpbms6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgyNSc7XG59XG5cbi8qICfuoKUnICovXG4uaWNvbi1saW5rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MjYnO1xufVxuXG4vKiAn7qCmJyAqL1xuLmljb24taG9tZTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODI3Jztcbn1cblxuLyogJ+6gpycgKi9cbi5pY29uLWluZm86YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgyOCc7XG59XG5cbi8qICfuoKgnICovXG4uaWNvbi1pbmZvLWNpcmNsZWQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgyOSc7XG59XG5cbi8qICfuoKknICovXG4uaWNvbi1leHBvcnQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgyZic7XG59XG5cbi8qICfuoK8nICovXG4uaWNvbi1leHBvcnQtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MzAnO1xufVxuXG4vKiAn7qCwJyAqL1xuLmljb24tc2hhcmU6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgzMSc7XG59XG5cbi8qICfuoLEnICovXG4uaWNvbi1zaGFyZS1zcXVhcmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4MzInO1xufVxuXG4vKiAn7qCyJyAqL1xuLmljb24tcmV0d2VldDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODM2Jztcbn1cblxuLyogJ+6gticgKi9cbi5pY29uLWF0dGVudGlvbi1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgzNyc7XG59XG5cbi8qICfuoLcnICovXG4uaWNvbi1hdHRlbnRpb246YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgzOCc7XG59XG5cbi8qICfuoLgnICovXG4uaWNvbi1hdHRlbnRpb24tY2lyY2xlZDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODM5Jztcbn1cblxuLyogJ+6guScgKi9cbi5pY29uLWxvY2F0aW9uOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4M2EnO1xufVxuXG4vKiAn7qC6JyAqL1xuLmljb24tdHJhc2g6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgzYic7XG59XG5cbi8qICfuoLsnICovXG4uaWNvbi1kb2M6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgzYyc7XG59XG5cbi8qICfuoLwnICovXG4uaWNvbi1kb2NzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4M2QnO1xufVxuXG4vKiAn7qC9JyAqL1xuLmljb24tZG9jLXRleHQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTgzZSc7XG59XG5cbi8qICfuoL4nICovXG4uaWNvbi1kb2MtaW52OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4M2YnO1xufVxuXG4vKiAn7qC/JyAqL1xuLmljb24tZG9jLXRleHQtaW52OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NDAnO1xufVxuXG4vKiAn7qGAJyAqL1xuLmljb24tZmlsZS1wZGY6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg0MSc7XG59XG5cbi8qICfuoYEnICovXG4uaWNvbi1maWxlLXdvcmQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg0Mic7XG59XG5cbi8qICfuoYInICovXG4uaWNvbi1maWxlLWV4Y2VsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NDMnO1xufVxuXG4vKiAn7qGDJyAqL1xuLmljb24tZmlsZS1wb3dlcnBvaW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NDQnO1xufVxuXG4vKiAn7qGEJyAqL1xuLmljb24tZmlsZS1pbWFnZTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODQ1Jztcbn1cblxuLyogJ+6hhScgKi9cbi5pY29uLWNvZzpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODRiJztcbn1cblxuLyogJ+6hiycgKi9cbi5pY29uLWNvZy1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg0Yyc7XG59XG5cbi8qICfuoYwnICovXG4uaWNvbi13cmVuY2g6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg0ZCc7XG59XG5cbi8qICfuoY0nICovXG4uaWNvbi1jYWxlbmRhcjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODRlJztcbn1cblxuLyogJ+6hjicgKi9cbi5pY29uLWNhbGVuZGFyLWVtcHR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NGYnO1xufVxuXG4vKiAn7qGPJyAqL1xuLmljb24tY2xvY2s6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg1Mic7XG59XG5cbi8qICfuoZInICovXG4uaWNvbi1ibG9jazpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODUzJztcbn1cblxuLyogJ+6hkycgKi9cbi5pY29uLXpvb20taW46YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg1Nyc7XG59XG5cbi8qICfuoZcnICovXG4uaWNvbi16b29tLW91dDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODU4Jztcbn1cblxuLyogJ+6hmCcgKi9cbi5pY29uLWRvd24tY2lyY2xlZDI6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg1OSc7XG59XG5cbi8qICfuoZknICovXG4uaWNvbi11cC1jaXJjbGVkMjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODVhJztcbn1cblxuLyogJ+6hmicgKi9cbi5pY29uLWxlZnQtY2lyY2xlZDI6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg1Yic7XG59XG5cbi8qICfuoZsnICovXG4uaWNvbi1yaWdodC1jaXJjbGVkMjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODVjJztcbn1cblxuLyogJ+6hnCcgKi9cbi5pY29uLWRvd24tZGlyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NWQnO1xufVxuXG4vKiAn7qGdJyAqL1xuLmljb24tdXAtZGlyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NWUnO1xufVxuXG4vKiAn7qGeJyAqL1xuLmljb24tbGVmdC1kaXI6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg1Zic7XG59XG5cbi8qICfuoZ8nICovXG4uaWNvbi1yaWdodC1kaXI6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2MCc7XG59XG5cbi8qICfuoaAnICovXG4uaWNvbi1kb3duLW9wZW46YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2MSc7XG59XG5cbi8qICfuoaEnICovXG4uaWNvbi1sZWZ0LW9wZW46YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2Mic7XG59XG5cbi8qICfuoaInICovXG4uaWNvbi1yaWdodC1vcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NjMnO1xufVxuXG4vKiAn7qGjJyAqL1xuLmljb24tdXAtb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODY0Jztcbn1cblxuLyogJ+6hpCcgKi9cbi5pY29uLWFuZ2xlLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2NSc7XG59XG5cbi8qICfuoaUnICovXG4uaWNvbi1hbmdsZS1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODY2Jztcbn1cblxuLyogJ+6hpicgKi9cbi5pY29uLWFuZ2xlLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NjcnO1xufVxuXG4vKiAn7qGnJyAqL1xuLmljb24tYW5nbGUtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODY4Jztcbn1cblxuLyogJ+6hqCcgKi9cbi5pY29uLWFuZ2xlLWNpcmNsZWQtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODY5Jztcbn1cblxuLyogJ+6hqScgKi9cbi5pY29uLWFuZ2xlLWNpcmNsZWQtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2YSc7XG59XG5cbi8qICfuoaonICovXG4uaWNvbi1hbmdsZS1jaXJjbGVkLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NmInO1xufVxuXG4vKiAn7qGrJyAqL1xuLmljb24tYW5nbGUtY2lyY2xlZC1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NmMnO1xufVxuXG4vKiAn7qGsJyAqL1xuLmljb24tYW5nbGUtZG91YmxlLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2ZCc7XG59XG5cbi8qICfuoa0nICovXG4uaWNvbi1hbmdsZS1kb3VibGUtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2ZSc7XG59XG5cbi8qICfuoa4nICovXG4uaWNvbi1hbmdsZS1kb3VibGUtdXA6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2Zic7XG59XG5cbi8qICfuoa8nICovXG4uaWNvbi1hbmdsZS1kb3VibGUtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODcwJztcbn1cblxuLyogJ+6hsCcgKi9cbi5pY29uLWRvd24tYmlnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NzEnO1xufVxuXG4vKiAn7qGxJyAqL1xuLmljb24tbGVmdC1iaWc6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg3Mic7XG59XG5cbi8qICfuobInICovXG4uaWNvbi1yaWdodC1iaWc6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg3Myc7XG59XG5cbi8qICfuobMnICovXG4uaWNvbi11cC1iaWc6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg3NCc7XG59XG5cbi8qICfuobQnICovXG4uaWNvbi1sZWZ0LWNpcmNsZWQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg3NSc7XG59XG5cbi8qICfuobUnICovXG4uaWNvbi1yaWdodC1jaXJjbGVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NzYnO1xufVxuXG4vKiAn7qG2JyAqL1xuLmljb24tdXAtY2lyY2xlZDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODc3Jztcbn1cblxuLyogJ+6htycgKi9cbi5pY29uLWRvd24tY2lyY2xlZDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODc4Jztcbn1cblxuLyogJ+6huCcgKi9cbi5pY29uLWN3OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NzknO1xufVxuXG4vKiAn7qG5JyAqL1xuLmljb24tY2N3OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4N2EnO1xufVxuXG4vKiAn7qG6JyAqL1xuLmljb24tbGV2ZWwtdXA6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg3Yyc7XG59XG5cbi8qICfuobwnICovXG4uaWNvbi1sZXZlbC1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4N2QnO1xufVxuXG4vKiAn7qG9JyAqL1xuLmljb24tc2h1ZmZsZTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODdlJztcbn1cblxuLyogJ+6hvicgKi9cbi5pY29uLWV4Y2hhbmdlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4N2YnO1xufVxuXG4vKiAn7qG/JyAqL1xuLmljb24taGlzdG9yeTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODgwJztcbn1cblxuLyogJ+6igCcgKi9cbi5pY29uLWV4cGFuZDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODgxJztcbn1cblxuLyogJ+6igScgKi9cbi5pY29uLWNvbGxhcHNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ODInO1xufVxuXG4vKiAn7qKCJyAqL1xuLmljb24tZXhwYW5kLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ODMnO1xufVxuXG4vKiAn7qKDJyAqL1xuLmljb24tY29sbGFwc2UtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODg0Jztcbn1cblxuLyogJ+6ihCcgKi9cbi5pY29uLXBsYXk6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg4NSc7XG59XG5cbi8qICfuooUnICovXG4uaWNvbi1wbGF5LWNpcmNsZWQyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ODYnO1xufVxuXG4vKiAn7qKGJyAqL1xuLmljb24tcGxheS1jaXJjbGVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ODcnO1xufVxuXG4vKiAn7qKHJyAqL1xuLmljb24tc3RvcDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODg4Jztcbn1cblxuLyogJ+6iiCcgKi9cbi5pY29uLWNsb3VkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ODknO1xufVxuXG4vKiAn7qKJJyAqL1xuLmljb24tdGFibGU6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg4YSc7XG59XG5cbi8qICfuooonICovXG4uaWNvbi1vZmY6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg4Yic7XG59XG5cbi8qICfuoosnICovXG4uaWNvbi1jaGVjazpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODhjJztcbn1cblxuLyogJ+6ijCcgKi9cbi5pY29uLWFzdGVyaXNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4OGUnO1xufVxuXG4vKiAn7qKOJyAqL1xuLmljb24tY2hhcnQtYmFyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4OGYnO1xufVxuXG4vKiAn7qKPJyAqL1xuLmljb24tYnVnOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4OTAnO1xufVxuXG4vKiAn7qKQJyAqL1xuLmljb24tY2VydGlmaWNhdGU6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg5MSc7XG59XG5cbi8qICfuopEnICovXG4uaWNvbi10YXNrczpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODkyJztcbn1cblxuLyogJ+6ikicgKi9cbi5pY29uLXNvcnQtdXA6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg5Myc7XG59XG5cbi8qICfuopMnICovXG4uaWNvbi1zb3J0LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg5NCc7XG59XG5cbi8qICfuopQnICovXG4uaWNvbi1zb3J0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4OTUnO1xufVxuXG4vKiAn7qKVJyAqL1xuLmljb24tZ2F1Z2U6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg5Nic7XG59XG5cbi8qICfuopYnICovXG4uaWNvbi1zcGlubmVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4OTcnO1xufVxuXG4vKiAn7qKXJyAqL1xuLmljb24tZGF0YWJhc2U6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg5OCc7XG59XG5cbi8qICfuopgnICovXG4uaWNvbi1saWZlYnVveTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODk5Jztcbn1cblxuLyogJ+6imScgKi9cbi5pY29uLWN1YmVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4OWEnO1xufVxuXG4vKiAn7qKaJyAqL1xuLmljb24tY3ViZTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODliJztcbn1cblxuLyogJ+6imycgKi9cbi5pY29uLWJ1bGxzZXllOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4OWMnO1xufVxuXG4vKiAn7qKcJyAqL1xuLmljb24td2luZG93czpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODlkJztcbn1cblxuLyogJ+6inScgKi9cbi5pY29uLWNhbmNlbC1jaXJjbGVkLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg5ZSc7XG59XG5cbi8qICfuop4nICovXG4uaWNvbi1wbHVzLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThhMCc7XG59XG5cbi8qICfuoqAnICovXG4uaWNvbi1wbHVzLWNpcmNsZWQtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGExJztcbn1cblxuLyogJ+6ioScgKi9cbi5pY29uLW1pbnVzLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThhMyc7XG59XG5cbi8qICfuoqMnICovXG4uaWNvbi1taW51cy1jaXJjbGVkLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThhNCc7XG59XG5cbi8qICfuoqQnICovXG4uaWNvbi1oZWxwLWNpcmNsZWQtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGE3Jztcbn1cblxuLyogJ+6ipycgKi9cbi5pY29uLWhlYXJ0LWVtcHR5LTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThhYSc7XG59XG5cbi8qICfuoqonICovXG4uaWNvbi1tYWlsLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThhYic7XG59XG5cbi8qICfuoqsnICovXG4uaWNvbi1zdGFyLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThhYyc7XG59XG5cbi8qICfuoqwnICovXG4uaWNvbi1zdGFyLWVtcHR5LTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThhZCc7XG59XG5cbi8qICfuoq0nICovXG4uaWNvbi1saW5rLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThhZSc7XG59XG5cbi8qICfuoq4nICovXG4uaWNvbi1hdHRhY2gtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGFmJztcbn1cblxuLyogJ+6irycgKi9cbi5pY29uLWV5ZS0xOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4YjInO1xufVxuXG4vKiAn7qKyJyAqL1xuLmljb24tYXR0ZW50aW9uLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThiMyc7XG59XG5cbi8qICfuorMnICovXG4uaWNvbi1kb2MtdGV4dC0xOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4YjQnO1xufVxuXG4vKiAn7qK0JyAqL1xuLmljb24tZG9jLXRleHQtaW52LTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThiNSc7XG59XG5cbi8qICfuorUnICovXG4uaWNvbi1zaGFyZS0xOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4YjcnO1xufVxuXG4vKiAn7qK3JyAqL1xuLmljb24tc2hhcmVhYmxlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4YjgnO1xufVxuXG4vKiAn7qK4JyAqL1xuLmljb24tY2N3LTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThjYyc7XG59XG5cbi8qICfuo4wnICovXG4uaWNvbi1jdy0xOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4Y2QnO1xufVxuXG4vKiAn7qONJyAqL1xuLmljb24tYXJyb3dzLWNjdzpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGNlJztcbn1cblxuLyogJ+6jjicgKi9cbi5pY29uLXBsYXktMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGNmJztcbn1cblxuLyogJ+6jjycgKi9cbi5pY29uLXBhdXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZDAnO1xufVxuXG4vKiAn7qOQJyAqL1xuLmljb24tcmVjb3JkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZDEnO1xufVxuXG4vKiAn7qORJyAqL1xuLmljb24tc3RvcC0xOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZDInO1xufVxuXG4vKiAn7qOSJyAqL1xuLmljb24tc3dpdGNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZDMnO1xufVxuXG4vKiAn7qOTJyAqL1xuLmljb24tbG9vcDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGQ0Jztcbn1cblxuLyogJ+6jlCcgKi9cbi5pY29uLWNsb3VkLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThkNSc7XG59XG5cbi8qICfuo5UnICovXG4uaWNvbi1jZXJ0aWZpY2F0ZS1vdXRsaW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZGInO1xufVxuXG4vKiAn7qObJyAqL1xuLmljb24tY2VydGlmaWNhdGUtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGRjJztcbn1cblxuLyogJ+6jnCcgKi9cbi5pY29uLXdpbmRvd3MtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGRkJztcbn1cblxuLyogJ+6jnScgKi9cbi5pY29uLXNwaW41OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZGYnO1xufVxuXG4vKiAn7qOfJyAqL1xuLmljb24tc3BpbjI6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThlMCc7XG59XG5cbi8qICfuo6AnICovXG4uaWNvbi1waWN0dXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZTQnO1xufVxuXG4vKiAn7qOkJyAqL1xuLmljb24tbWVudTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGU1Jztcbn1cblxuLyogJ+6jpScgKi9cbi5pY29uLXNsaWRlcnM6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThlNic7XG59XG5cbi8qICfuo6YnICovXG4uaWNvbi1saXN0LWFsdDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGU3Jztcbn1cblxuLyogJ+6jpycgKi9cbi5pY29uLWFqdXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZTgnO1xufVxuXG4vKiAn7qOoJyAqL1xuLmljb24tY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZTknO1xufVxuXG4vKiAn7qOpJyAqL1xuLmljb24tY2lyY2xlLWVtcHR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZWEnO1xufVxuXG4vKiAn7qOqJyAqL1xuLmljb24tY2lyY2xlLW5vdGNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZWMnO1xufVxuXG4vKiAn7qOsJyAqL1xuLmljb24tZm9yazpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGVkJztcbn1cblxuLyogJ+6jrScgKi9cbi5pY29uLXNpdGVtYXA6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThlZSc7XG59XG5cbi8qICfuo64nICovXG4uaWNvbi1zdGV0aG9zY29wZTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGVmJztcbn1cblxuLyogJ+6jrycgKi9cbi5pY29uLXNoaWVsZDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGYwJztcbn1cblxuLyogJ+6jsCcgKi9cbi5pY29uLWhlYXJ0LTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThmMSc7XG59XG5cbi8qICfuo7EnICovXG4uaWNvbi1zZWFyY2gtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGYyJztcbn1cblxuLyogJ+6jsicgKi9cbi5pY29uLW1lbnUtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGYzJztcbn1cblxuLyogJ+6jsycgKi9cbi5pY29uLWJhY2s6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThmNic7XG59XG5cbi8qICfuo7YnICovXG4uaWNvbi1ob21lLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThmNyc7XG59XG5cbi8qICfuo7cnICovXG4uaWNvbi1wZW5jaWwtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGY4Jztcbn1cblxuLyogJ+6juCcgKi9cbi5pY29uLWxvY2F0aW9uLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThmOSc7XG59XG5cbi8qICfuo7knICovXG4uaWNvbi1sb2dvdXQtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOGZiJztcbn1cblxuLyogJ+6juycgKi9cbi5pY29uLWxvZ2luLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZThmYyc7XG59XG5cbi8qICfuo7wnICovXG4uaWNvbi1wdWJsaXNoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZmQnO1xufVxuXG4vKiAn7qO9JyAqL1xuLmljb24td2luZG93OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZmUnO1xufVxuXG4vKiAn7qO+JyAqL1xuLmljb24tY2hhcnQtcGllOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4ZmYnO1xufVxuXG4vKiAn7qO/JyAqL1xuLmljb24tY2hhcnQtbGluZTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOTAwJztcbn1cblxuLyogJ+6kgCcgKi9cbi5pY29uLWNoYXJ0LWFyZWE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkwMSc7XG59XG5cbi8qICfupIEnICovXG4uaWNvbi1jaGFydC1iYXItMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOTAyJztcbn1cblxuLyogJ+6kgicgKi9cbi5pY29uLWFpcjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOTA1Jztcbn1cblxuLyogJ+6khScgKi9cbi5pY29uLWRhdGFiYXNlLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkwNic7XG59XG5cbi8qICfupIYnICovXG4uaWNvbi1mbG93LWNhc2NhZGU6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkwNyc7XG59XG5cbi8qICfupIcnICovXG4uaWNvbi1mbG93LXRyZWU6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkwOCc7XG59XG5cbi8qICfupIgnICovXG4uaWNvbi1mbG93LWxpbmU6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkwOSc7XG59XG5cbi8qICfupIknICovXG4uaWNvbi1mbG93LWJyYW5jaDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOTBhJztcbn1cblxuLyogJ+6kiicgKi9cbi5pY29uLWZsb3ctcGFyYWxsZWwtMTpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOTBmJztcbn1cblxuLyogJ+6kjycgKi9cbi5pY29uLWRvdDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOTEwJztcbn1cblxuLyogJ+6kkCcgKi9cbi5pY29uLWRvdC0zOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU5MTEnO1xufVxuXG4vKiAn7qSRJyAqL1xuLmljb24tY2Q6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkxMic7XG59XG5cbi8qICfupJInICovXG4uaWNvbi1iYWNrLWluLXRpbWU6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkxMyc7XG59XG5cbi8qICfupJMnICovXG4uaWNvbi1saXN0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU5MTQnO1xufVxuXG4vKiAn7qSUJyAqL1xuLmljb24tbGlzdC1hZGQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkxNSc7XG59XG5cbi8qICfupJUnICovXG4uaWNvbi1wcm9ncmVzcy0wOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU5MTknO1xufVxuXG4vKiAn7qSZJyAqL1xuLmljb24tcGVuY2lsLTI6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkxZCc7XG59XG5cbi8qICfupJ0nICovXG4uaWNvbi1jb2ctMjpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOTFmJztcbn1cblxuLyogJ+6knycgKi9cbi5pY29uLWNvZy1jaXJjbGVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU5MjAnO1xufVxuXG4vKiAn7qSgJyAqL1xuLmljb24tY29nczpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlOTIxJztcbn1cblxuLyogJ+6koScgKi9cbi5pY29uLWNhbGVuZGFyLTE6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTkyNCc7XG59XG5cbi8qICfupKQnICovXG4uaWNvbi1kb2MtbmV3OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU5MjUnO1xufVxuXG4vKiAn7qSlJyAqL1xuLypcbiAgIEFuaW1hdGlvbiBleGFtcGxlLCBmb3Igc3Bpbm5lcnNcbiovXG4uYW5pbWF0ZS1zcGluIHtcbiAgLXdlYmtpdC1hbmltYXRpb246IHNwaW4gMnMgaW5maW5pdGUgbGluZWFyO1xuICAtby1hbmltYXRpb246IHNwaW4gMnMgaW5maW5pdGUgbGluZWFyO1xuICBhbmltYXRpb246IHNwaW4gMnMgaW5maW5pdGUgbGluZWFyO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbkBrZXlmcmFtZXMgc3BpbiB7XG4gIDAlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgIC1tb3otdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgLW1zLXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgIC1vLXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIDEwMCUge1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcbiAgICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XG4gICAgLW1zLXRyYW5zZm9ybTogcm90YXRlKDM1OWRlZyk7XG4gICAgLW8tdHJhbnNmb3JtOiByb3RhdGUoMzU5ZGVnKTtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNTlkZWcpO1xuICB9XG59XG4iLCIvKlxuICogQSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdWJ5IGxpc3QgZnVuY3Rpb25zIGZyb20gQ29tcGFzczpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Db21wYXNzL2NvbXBhc3MvYmxvYi9zdGFibGUvbGliL2NvbXBhc3Mvc2Fzc19leHRlbnNpb25zL2Z1bmN0aW9ucy9saXN0cy5yYlxuICovXG5cblxuLy8gY29tcGFjdCBpcyBwYXJ0IG9mIGxpYnNhc3NcblxuQGZ1bmN0aW9uIC1jb21wYXNzLW50aCgkbGlzdCwgJHBsYWNlKSB7XG4gIC8vIFllcCwgU2Fzcy1saXN0cyBhcmUgMS1pbmRleGVkLlxuICBAaWYgJHBsYWNlID09IFwiZmlyc3RcIiB7XG4gICAgJHBsYWNlOiAxO1xuICB9XG4gIEBpZiAkcGxhY2UgPT0gXCJsYXN0XCIge1xuICAgICRwbGFjZTogbGVuZ3RoKCRsaXN0KTtcbiAgfVxuICBAcmV0dXJuIG50aCgkbGlzdCwgJHBsYWNlKTtcbn1cblxuLy8gY29tcGFzc19saXN0IGFuZCBjb21wYXNzX3NwYWNlX2xpc3QgY2FuJ3QgYmUgaW1wbGVtZW50ZWQgaW4gc2FzcyBzY3JpcHRcblxuQGZ1bmN0aW9uIC1jb21wYXNzLWxpc3Qtc2l6ZSgkbGlzdCkge1xuICBAcmV0dXJuIGxlbmd0aCgkbGlzdCk7XG59XG5cbkBmdW5jdGlvbiAtY29tcGFzcy1zbGljZSgkbGlzdCwgJHN0YXJ0LCAkZW5kOiBmYWxzZSkge1xuICBAaWYgJGVuZCA9PSBmYWxzZSB7XG4gICAgJGVuZDogbGVuZ3RoKCRsaXN0KTtcbiAgfVxuICAkZnVsbDogbnRoKCRsaXN0LCAkc3RhcnQpO1xuICBAZm9yICRpIGZyb20gJHN0YXJ0ICsgMSB0aHJvdWdoICRlbmQge1xuICAgICRmdWxsOiAkZnVsbCwgbnRoKCRsaXN0LCAkaSk7XG4gIH1cbiAgQHJldHVybiAkZnVsbDtcbn1cblxuQGZ1bmN0aW9uIHJlamVjdCgkbGlzdCwgJHJlamVjdDEsICRyZWplY3QyOm51bGwsICRyZWplY3QzOm51bGwsICRyZWplY3Q0Om51bGwsICRyZWplY3Q1Om51bGwsICRyZWplY3Q2Om51bGwsICRyZWplY3Q3Om51bGwsICRyZWplY3Q4Om51bGwsICRyZWplY3Q5Om51bGwpIHtcbiAgJHJlamVjdHM6ICRyZWplY3QxLCAkcmVqZWN0MiwgJHJlamVjdDMsICRyZWplY3Q0LCAkcmVqZWN0NSwgJHJlamVjdDYsICRyZWplY3Q3LCAkcmVqZWN0OCwgJHJlamVjdDk7XG5cbiAgJGZ1bGw6IGZhbHNlO1xuICBAZWFjaCAkaXRlbSBpbiAkbGlzdCB7XG4gICAgQGlmIGluZGV4KCRyZWplY3RzLCAkaXRlbSkge31cbiAgICBAZWxzZSB7XG4gICAgICBAaWYgJGZ1bGwge1xuICAgICAgICAkZnVsbDogJGZ1bGwsICRpdGVtO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICAkZnVsbDogJGl0ZW07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEByZXR1cm4gJGZ1bGw7XG59XG4iLCIvKlxuICogQSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdWJ5IGNvbnN0YW50cyBmdW5jdGlvbnMgZnJvbSBDb21wYXNzOlxuICogaHR0cHM6Ly9naXRodWIuY29tL0NvbXBhc3MvY29tcGFzcy9ibG9iL3N0YWJsZS9saWIvY29tcGFzcy9zYXNzX2V4dGVuc2lvbnMvZnVuY3Rpb25zL2NvbnN0YW50cy5yYlxuICovXG5cbkBmdW5jdGlvbiBvcHBvc2l0ZS1wb3NpdGlvbigkZnJvbSkge1xuICAgIEBpZiAoJGZyb20gPT0gdG9wKSB7XG4gICAgICAgIEByZXR1cm4gYm90dG9tO1xuICAgIH0gQGVsc2UgaWYgKCRmcm9tID09IGJvdHRvbSkge1xuICAgICAgICBAcmV0dXJuIHRvcDtcbiAgICB9IEBlbHNlIGlmICgkZnJvbSA9PSBsZWZ0KSB7XG4gICAgICAgIEByZXR1cm4gcmlnaHQ7XG4gICAgfSBAZWxzZSBpZiAoJGZyb20gPT0gcmlnaHQpIHtcbiAgICAgICAgQHJldHVybiBsZWZ0O1xuICAgIH0gQGVsc2UgaWYgKCRmcm9tID09IGNlbnRlcikge1xuICAgICAgICBAcmV0dXJuIGNlbnRlcjtcbiAgICB9XG59XG4iLCIvKlxuICogQSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdWJ5IGRpc3BsYXkgZnVuY3Rpb25zIGZyb20gQ29tcGFzczpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Db21wYXNzL2NvbXBhc3MvYmxvYi9zdGFibGUvY29yZS9saWIvY29tcGFzcy9jb3JlL3Nhc3NfZXh0ZW5zaW9ucy9mdW5jdGlvbnMvZGlzcGxheS5yYlxuICovXG5cbkBmdW5jdGlvbiBlbGVtZW50cy1vZi10eXBlKCR0eXBlKXtcbiAgICBAaWYgKCR0eXBlID09IGJsb2NrKXtcbiAgICAgICAgQHJldHVybiBhZGRyZXNzLCBhcnRpY2xlLCBhc2lkZSwgYmxvY2txdW90ZSwgY2VudGVyLCBkaXIsIGRpdiwgZGQsIGRldGFpbHMsIGRsLCBkdCwgZmllbGRzZXQsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9ybSwgZm9vdGVyLCBmcmFtZXNldCwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgaHIsIGhlYWRlciwgaGdyb3VwLCBpc2luZGV4LCBtYWluLCBtZW51LCBuYXYsIG5vZnJhbWVzLCBub3NjcmlwdCwgb2wsIHAsIHByZSwgc2VjdGlvbiwgc3VtbWFyeSwgdWw7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gaW5saW5lKXtcbiAgICAgICAgQHJldHVybiBhLCBhYmJyLCBhY3JvbnltLCBhdWRpbywgYiwgYmFzZWZvbnQsIGJkbywgYmlnLCBiciwgY2FudmFzLCBjaXRlLCBjb2RlLCBjb21tYW5kLCBkYXRhbGlzdCwgZGZuLCBlbSwgZW1iZWQsIGZvbnQsIGksIGltZywgaW5wdXQsIGtleWdlbiwga2JkLCBsYWJlbCwgbWFyaywgbWV0ZXIsIG91dHB1dCwgcHJvZ3Jlc3MsIHEsIHJwLCBydCwgcnVieSwgcywgc2FtcCwgc2VsZWN0LCBzbWFsbCwgc3Bhbiwgc3RyaWtlLCBzdHJvbmcsIHN1Yiwgc3VwLCB0ZXh0YXJlYSwgdGltZSwgdHQsIHUsIHZhciwgdmlkZW8sIHdicjtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSBpbmxpbmUtYmxvY2spe1xuICAgICAgICBAcmV0dXJuIGltZztcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSB0YWJsZSl7XG4gICAgICAgIEByZXR1cm4gdGFibGU7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gbGlzdC1pdGVtKXtcbiAgICAgICAgQHJldHVybiBsaTtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSB0YWJsZS1yb3ctZ3JvdXApe1xuICAgICAgICBAcmV0dXJuIHRib2R5O1xuICAgIH0gQGVsc2UgaWYgKCR0eXBlID09IHRhYmxlLWhlYWRlci1ncm91cCl7XG4gICAgICAgIEByZXR1cm4gdGhlYWQ7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gdGFibGUtZm9vdGVyLWdyb3VwKXtcbiAgICAgICAgQHJldHVybiB0Zm9vdDtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSB0YWJsZS1yb3cpe1xuICAgICAgICBAcmV0dXJuIHRyO1xuICAgIH0gQGVsc2UgaWYgKCR0eXBlID09IHRhYmxlLWNlbGwpe1xuICAgICAgICBAcmV0dXJuIHRoLCB0ZDtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSBodG1sNS1ibG9jayl7XG4gICAgICAgIEByZXR1cm4gYXJ0aWNsZSwgYXNpZGUsIGRldGFpbHMsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWFpbiwgbWVudSwgbmF2LCBzZWN0aW9uLCBzdW1tYXJ5O1xuICAgIH0gQGVsc2UgaWYgKCR0eXBlID09IGh0bWw1LWlubGluZSl7XG4gICAgICAgIEByZXR1cm4gYXVkaW8sIGNhbnZhcywgY29tbWFuZCwgZGF0YWxpc3QsIGVtYmVkLCBrZXlnZW4sIG1hcmssIG1ldGVyLCBvdXRwdXQsIHByb2dyZXNzLCBycCwgcnQsIHJ1YnksIHRpbWUsIHZpZGVvLCB3YnI7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gaHRtbDUpe1xuICAgICAgICBAcmV0dXJuIGFydGljbGUsIGFzaWRlLCBhdWRpbywgY2FudmFzLCBjb21tYW5kLCBkYXRhbGlzdCwgZGV0YWlscywgZW1iZWQsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwga2V5Z2VuLCBtYWluLCBtYXJrLCBtZW51LCBtZXRlciwgbmF2LCBvdXRwdXQsIHByb2dyZXNzLCBycCwgcnQsIHJ1YnksIHNlY3Rpb24sIHN1bW1hcnksIHRpbWUsIHZpZGVvLCB3YnI7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gdGV4dC1pbnB1dCl7XG4gICAgICAgIEByZXR1cm4gaW5wdXQsIHRleHRhcmVhO1xuICAgIH1cbn1cbiIsIkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ2ZvbnRlbGxvJztcbiAgc3JjOiB1cmwoJyN7JGljb24tZm9udC1wYXRofWZvbnRlbGxvLmVvdCcpO1xuICBzcmM6IHVybCgnI3skaWNvbi1mb250LXBhdGh9Zm9udGVsbG8uZW90I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLFxuICAgICAgIHVybCgnI3skaWNvbi1mb250LXBhdGh9Zm9udGVsbG8ud29mZicpIGZvcm1hdCgnd29mZicpLFxuICAgICAgIHVybCgnI3skaWNvbi1mb250LXBhdGh9Zm9udGVsbG8udHRmJykgZm9ybWF0KCd0cnVldHlwZScpLFxuICAgICAgIHVybCgnI3skaWNvbi1mb250LXBhdGh9Zm9udGVsbG8uc3ZnI2ZvbnRlbGxvJykgZm9ybWF0KCdzdmcnKTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG5cbi8qIENocm9tZSBoYWNrOiBTVkcgaXMgcmVuZGVyZWQgbW9yZSBzbW9vdGggaW4gV2luZG96emUuIDEwMCUgbWFnaWMsIHVuY29tbWVudCBpZiB5b3UgbmVlZCBpdC4gKi9cbi8qIE5vdGUsIHRoYXQgd2lsbCBicmVhayBoaW50aW5nISBJbiBvdGhlciBPUy1lcyBmb250IHdpbGwgYmUgbm90IGFzIHNoYXJwIGFzIGl0IGNvdWxkIGJlICovXG4vKlxuQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKSB7XG4gIEBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnZm9udGVsbG8nO1xuICAgIHNyYzogdXJsKCcuLi9mb250L2ZvbnRlbGxvLnN2Zz85OTMyMDk0NSNmb250ZWxsbycpIGZvcm1hdCgnc3ZnJyk7XG4gIH1cbn1cbiovXG4gXG4gW2NsYXNzXj1cImljb24tXCJdOmJlZm9yZSwgW2NsYXNzKj1cIiBpY29uLVwiXTpiZWZvcmUge1xuICBmb250LWZhbWlseTogXCJmb250ZWxsb1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIHNwZWFrOiBub25lO1xuIFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRleHQtZGVjb3JhdGlvbjogaW5oZXJpdDtcbiAgd2lkdGg6IDFlbTtcbiAgbWFyZ2luLXJpZ2h0OiAuMmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIC8qIG9wYWNpdHk6IC44OyAqL1xuIFxuICAvKiBGb3Igc2FmZXR5IC0gcmVzZXQgcGFyZW50IHN0eWxlcywgdGhhdCBjYW4gYnJlYWsgZ2x5cGggY29kZXMqL1xuICBmb250LXZhcmlhbnQ6IG5vcm1hbDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgIFxuICAvKiBmaXggYnV0dG9ucyBoZWlnaHQsIGZvciB0d2l0dGVyIGJvb3RzdHJhcCAqL1xuICBsaW5lLWhlaWdodDogMWVtO1xuIFxuICAvKiBBbmltYXRpb24gY2VudGVyIGNvbXBlbnNhdGlvbiAtIG1hcmdpbnMgc2hvdWxkIGJlIHN5bW1ldHJpYyAqL1xuICAvKiByZW1vdmUgaWYgbm90IG5lZWRlZCAqL1xuICBtYXJnaW4tbGVmdDogLjJlbTtcbiBcbiAgLyogeW91IGNhbiBiZSBtb3JlIGNvbWZvcnRhYmxlIHdpdGggaW5jcmVhc2VkIGljb25zIHNpemUgKi9cbiAgLyogZm9udC1zaXplOiAxMjAlOyAqL1xuIFxuICAvKiBVbmNvbW1lbnQgZm9yIDNEIGVmZmVjdCAqL1xuICAvKiB0ZXh0LXNoYWRvdzogMXB4IDFweCAxcHggcmdiYSgxMjcsIDEyNywgMTI3LCAwLjMpOyAqL1xufVxuIFxuLmljb24tdXNlcjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODAwJzsgfSAvKiAn7qCAJyAqL1xuLmljb24taGVscC1jaXJjbGVkOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MDEnOyB9IC8qICfuoIEnICovXG4uaWNvbi1zZWFyY2g6YmVmb3JlIHsgY29udGVudDogJ1xcZTgwMic7IH0gLyogJ+6ggicgKi9cbi5pY29uLXRhZzpiZWZvcmUgeyBjb250ZW50OiAnXFxlODAzJzsgfSAvKiAn7qCDJyAqL1xuLmljb24tZG90LTI6YmVmb3JlIHsgY29udGVudDogJ1xcZTgwNCc7IH0gLyogJ+6ghCcgKi9cbi5pY29uLWFycm93cy1jdzpiZWZvcmUgeyBjb250ZW50OiAnXFxlODA1JzsgfSAvKiAn7qCFJyAqL1xuLmljb24tcHJpbnQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTgwNic7IH0gLyogJ+6ghicgKi9cbi5pY29uLWNhbmNlbC1jaXJjbGVkOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MDcnOyB9IC8qICfuoIcnICovXG4uaWNvbi1lZGl0LWFsdDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODA4JzsgfSAvKiAn7qCIJyAqL1xuLmljb24tbG9naW46YmVmb3JlIHsgY29udGVudDogJ1xcZTgwOSc7IH0gLyogJ+6giScgKi9cbi5pY29uLWxvZ291dDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODBhJzsgfSAvKiAn7qCKJyAqL1xuLmljb24tZG93bmxvYWQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTgwYic7IH0gLyogJ+6giycgKi9cbi5pY29uLXRoLWxhcmdlOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MGMnOyB9IC8qICfuoIwnICovXG4uaWNvbi10aDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODBkJzsgfSAvKiAn7qCNJyAqL1xuLmljb24tdGgtbGlzdDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODBlJzsgfSAvKiAn7qCOJyAqL1xuLmljb24tc3RhcjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODBmJzsgfSAvKiAn7qCPJyAqL1xuLmljb24tc3Rhci1lbXB0eTpiZWZvcmUgeyBjb250ZW50OiAnXFxlODEwJzsgfSAvKiAn7qCQJyAqL1xuLmljb24tdXNlcnM6YmVmb3JlIHsgY29udGVudDogJ1xcZTgxMSc7IH0gLyogJ+6gkScgKi9cbi5pY29uLXVwbG9hZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODEyJzsgfSAvKiAn7qCSJyAqL1xuLmljb24tY2lyY2xlLXRoaW46YmVmb3JlIHsgY29udGVudDogJ1xcZTgxMyc7IH0gLyogJ+6gkycgKi9cbi5pY29uLWRvdC1jaXJjbGVkOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MTQnOyB9IC8qICfuoJQnICovXG4uaWNvbi1vazpiZWZvcmUgeyBjb250ZW50OiAnXFxlODE1JzsgfSAvKiAn7qCVJyAqL1xuLmljb24tY2hlY2stZW1wdHktMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlODE2JzsgfSAvKiAn7qCWJyAqL1xuLmljb24tY2xvY2stMjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODE3JzsgfSAvKiAn7qCXJyAqL1xuLmljb24tb2stc3F1YXJlZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODE4JzsgfSAvKiAn7qCYJyAqL1xuLmljb24tcGluOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MjAnOyB9IC8qICfuoKAnICovXG4uaWNvbi1leWU6YmVmb3JlIHsgY29udGVudDogJ1xcZTgyMSc7IH0gLyogJ+6goScgKi9cbi5pY29uLWF0dGFjaDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODI0JzsgfSAvKiAn7qCkJyAqL1xuLmljb24tdW5saW5rOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MjUnOyB9IC8qICfuoKUnICovXG4uaWNvbi1saW5rOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MjYnOyB9IC8qICfuoKYnICovXG4uaWNvbi1ob21lOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MjcnOyB9IC8qICfuoKcnICovXG4uaWNvbi1pbmZvOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4MjgnOyB9IC8qICfuoKgnICovXG4uaWNvbi1pbmZvLWNpcmNsZWQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTgyOSc7IH0gLyogJ+6gqScgKi9cbi5pY29uLWV4cG9ydDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODJmJzsgfSAvKiAn7qCvJyAqL1xuLmljb24tZXhwb3J0LWFsdDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODMwJzsgfSAvKiAn7qCwJyAqL1xuLmljb24tc2hhcmU6YmVmb3JlIHsgY29udGVudDogJ1xcZTgzMSc7IH0gLyogJ+6gsScgKi9cbi5pY29uLXNoYXJlLXNxdWFyZWQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTgzMic7IH0gLyogJ+6gsicgKi9cbi5pY29uLXJldHdlZXQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTgzNic7IH0gLyogJ+6gticgKi9cbi5pY29uLWF0dGVudGlvbi1hbHQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTgzNyc7IH0gLyogJ+6gtycgKi9cbi5pY29uLWF0dGVudGlvbjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODM4JzsgfSAvKiAn7qC4JyAqL1xuLmljb24tYXR0ZW50aW9uLWNpcmNsZWQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTgzOSc7IH0gLyogJ+6guScgKi9cbi5pY29uLWxvY2F0aW9uOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4M2EnOyB9IC8qICfuoLonICovXG4uaWNvbi10cmFzaDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODNiJzsgfSAvKiAn7qC7JyAqL1xuLmljb24tZG9jOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4M2MnOyB9IC8qICfuoLwnICovXG4uaWNvbi1kb2NzOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4M2QnOyB9IC8qICfuoL0nICovXG4uaWNvbi1kb2MtdGV4dDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODNlJzsgfSAvKiAn7qC+JyAqL1xuLmljb24tZG9jLWludjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODNmJzsgfSAvKiAn7qC/JyAqL1xuLmljb24tZG9jLXRleHQtaW52OmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NDAnOyB9IC8qICfuoYAnICovXG4uaWNvbi1maWxlLXBkZjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODQxJzsgfSAvKiAn7qGBJyAqL1xuLmljb24tZmlsZS13b3JkOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NDInOyB9IC8qICfuoYInICovXG4uaWNvbi1maWxlLWV4Y2VsOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NDMnOyB9IC8qICfuoYMnICovXG4uaWNvbi1maWxlLXBvd2VycG9pbnQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTg0NCc7IH0gLyogJ+6hhCcgKi9cbi5pY29uLWZpbGUtaW1hZ2U6YmVmb3JlIHsgY29udGVudDogJ1xcZTg0NSc7IH0gLyogJ+6hhScgKi9cbi5pY29uLWNvZzpiZWZvcmUgeyBjb250ZW50OiAnXFxlODRiJzsgfSAvKiAn7qGLJyAqL1xuLmljb24tY29nLWFsdDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODRjJzsgfSAvKiAn7qGMJyAqL1xuLmljb24td3JlbmNoOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NGQnOyB9IC8qICfuoY0nICovXG4uaWNvbi1jYWxlbmRhcjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODRlJzsgfSAvKiAn7qGOJyAqL1xuLmljb24tY2FsZW5kYXItZW1wdHk6YmVmb3JlIHsgY29udGVudDogJ1xcZTg0Zic7IH0gLyogJ+6hjycgKi9cbi5pY29uLWNsb2NrOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NTInOyB9IC8qICfuoZInICovXG4uaWNvbi1ibG9jazpiZWZvcmUgeyBjb250ZW50OiAnXFxlODUzJzsgfSAvKiAn7qGTJyAqL1xuLmljb24tem9vbS1pbjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODU3JzsgfSAvKiAn7qGXJyAqL1xuLmljb24tem9vbS1vdXQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTg1OCc7IH0gLyogJ+6hmCcgKi9cbi5pY29uLWRvd24tY2lyY2xlZDI6YmVmb3JlIHsgY29udGVudDogJ1xcZTg1OSc7IH0gLyogJ+6hmScgKi9cbi5pY29uLXVwLWNpcmNsZWQyOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NWEnOyB9IC8qICfuoZonICovXG4uaWNvbi1sZWZ0LWNpcmNsZWQyOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NWInOyB9IC8qICfuoZsnICovXG4uaWNvbi1yaWdodC1jaXJjbGVkMjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODVjJzsgfSAvKiAn7qGcJyAqL1xuLmljb24tZG93bi1kaXI6YmVmb3JlIHsgY29udGVudDogJ1xcZTg1ZCc7IH0gLyogJ+6hnScgKi9cbi5pY29uLXVwLWRpcjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODVlJzsgfSAvKiAn7qGeJyAqL1xuLmljb24tbGVmdC1kaXI6YmVmb3JlIHsgY29udGVudDogJ1xcZTg1Zic7IH0gLyogJ+6hnycgKi9cbi5pY29uLXJpZ2h0LWRpcjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODYwJzsgfSAvKiAn7qGgJyAqL1xuLmljb24tZG93bi1vcGVuOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NjEnOyB9IC8qICfuoaEnICovXG4uaWNvbi1sZWZ0LW9wZW46YmVmb3JlIHsgY29udGVudDogJ1xcZTg2Mic7IH0gLyogJ+6hoicgKi9cbi5pY29uLXJpZ2h0LW9wZW46YmVmb3JlIHsgY29udGVudDogJ1xcZTg2Myc7IH0gLyogJ+6hoycgKi9cbi5pY29uLXVwLW9wZW46YmVmb3JlIHsgY29udGVudDogJ1xcZTg2NCc7IH0gLyogJ+6hpCcgKi9cbi5pY29uLWFuZ2xlLWxlZnQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTg2NSc7IH0gLyogJ+6hpScgKi9cbi5pY29uLWFuZ2xlLXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NjYnOyB9IC8qICfuoaYnICovXG4uaWNvbi1hbmdsZS11cDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODY3JzsgfSAvKiAn7qGnJyAqL1xuLmljb24tYW5nbGUtZG93bjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODY4JzsgfSAvKiAn7qGoJyAqL1xuLmljb24tYW5nbGUtY2lyY2xlZC1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NjknOyB9IC8qICfuoaknICovXG4uaWNvbi1hbmdsZS1jaXJjbGVkLXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NmEnOyB9IC8qICfuoaonICovXG4uaWNvbi1hbmdsZS1jaXJjbGVkLXVwOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NmInOyB9IC8qICfuoasnICovXG4uaWNvbi1hbmdsZS1jaXJjbGVkLWRvd246YmVmb3JlIHsgY29udGVudDogJ1xcZTg2Yyc7IH0gLyogJ+6hrCcgKi9cbi5pY29uLWFuZ2xlLWRvdWJsZS1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NmQnOyB9IC8qICfuoa0nICovXG4uaWNvbi1hbmdsZS1kb3VibGUtcmlnaHQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTg2ZSc7IH0gLyogJ+6hricgKi9cbi5pY29uLWFuZ2xlLWRvdWJsZS11cDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODZmJzsgfSAvKiAn7qGvJyAqL1xuLmljb24tYW5nbGUtZG91YmxlLWRvd246YmVmb3JlIHsgY29udGVudDogJ1xcZTg3MCc7IH0gLyogJ+6hsCcgKi9cbi5pY29uLWRvd24tYmlnOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NzEnOyB9IC8qICfuobEnICovXG4uaWNvbi1sZWZ0LWJpZzpiZWZvcmUgeyBjb250ZW50OiAnXFxlODcyJzsgfSAvKiAn7qGyJyAqL1xuLmljb24tcmlnaHQtYmlnOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NzMnOyB9IC8qICfuobMnICovXG4uaWNvbi11cC1iaWc6YmVmb3JlIHsgY29udGVudDogJ1xcZTg3NCc7IH0gLyogJ+6htCcgKi9cbi5pY29uLWxlZnQtY2lyY2xlZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODc1JzsgfSAvKiAn7qG1JyAqL1xuLmljb24tcmlnaHQtY2lyY2xlZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODc2JzsgfSAvKiAn7qG2JyAqL1xuLmljb24tdXAtY2lyY2xlZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODc3JzsgfSAvKiAn7qG3JyAqL1xuLmljb24tZG93bi1jaXJjbGVkOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4NzgnOyB9IC8qICfuobgnICovXG4uaWNvbi1jdzpiZWZvcmUgeyBjb250ZW50OiAnXFxlODc5JzsgfSAvKiAn7qG5JyAqL1xuLmljb24tY2N3OmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4N2EnOyB9IC8qICfuobonICovXG4uaWNvbi1sZXZlbC11cDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODdjJzsgfSAvKiAn7qG8JyAqL1xuLmljb24tbGV2ZWwtZG93bjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODdkJzsgfSAvKiAn7qG9JyAqL1xuLmljb24tc2h1ZmZsZTpiZWZvcmUgeyBjb250ZW50OiAnXFxlODdlJzsgfSAvKiAn7qG+JyAqL1xuLmljb24tZXhjaGFuZ2U6YmVmb3JlIHsgY29udGVudDogJ1xcZTg3Zic7IH0gLyogJ+6hvycgKi9cbi5pY29uLWhpc3Rvcnk6YmVmb3JlIHsgY29udGVudDogJ1xcZTg4MCc7IH0gLyogJ+6igCcgKi9cbi5pY29uLWV4cGFuZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODgxJzsgfSAvKiAn7qKBJyAqL1xuLmljb24tY29sbGFwc2U6YmVmb3JlIHsgY29udGVudDogJ1xcZTg4Mic7IH0gLyogJ+6igicgKi9cbi5pY29uLWV4cGFuZC1yaWdodDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODgzJzsgfSAvKiAn7qKDJyAqL1xuLmljb24tY29sbGFwc2UtbGVmdDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODg0JzsgfSAvKiAn7qKEJyAqL1xuLmljb24tcGxheTpiZWZvcmUgeyBjb250ZW50OiAnXFxlODg1JzsgfSAvKiAn7qKFJyAqL1xuLmljb24tcGxheS1jaXJjbGVkMjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODg2JzsgfSAvKiAn7qKGJyAqL1xuLmljb24tcGxheS1jaXJjbGVkOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4ODcnOyB9IC8qICfuoocnICovXG4uaWNvbi1zdG9wOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4ODgnOyB9IC8qICfuoognICovXG4uaWNvbi1jbG91ZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlODg5JzsgfSAvKiAn7qKJJyAqL1xuLmljb24tdGFibGU6YmVmb3JlIHsgY29udGVudDogJ1xcZTg4YSc7IH0gLyogJ+6iiicgKi9cbi5pY29uLW9mZjpiZWZvcmUgeyBjb250ZW50OiAnXFxlODhiJzsgfSAvKiAn7qKLJyAqL1xuLmljb24tY2hlY2s6YmVmb3JlIHsgY29udGVudDogJ1xcZTg4Yyc7IH0gLyogJ+6ijCcgKi9cbi5pY29uLWFzdGVyaXNrOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4OGUnOyB9IC8qICfuoo4nICovXG4uaWNvbi1jaGFydC1iYXI6YmVmb3JlIHsgY29udGVudDogJ1xcZTg4Zic7IH0gLyogJ+6ijycgKi9cbi5pY29uLWJ1ZzpiZWZvcmUgeyBjb250ZW50OiAnXFxlODkwJzsgfSAvKiAn7qKQJyAqL1xuLmljb24tY2VydGlmaWNhdGU6YmVmb3JlIHsgY29udGVudDogJ1xcZTg5MSc7IH0gLyogJ+6ikScgKi9cbi5pY29uLXRhc2tzOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4OTInOyB9IC8qICfuopInICovXG4uaWNvbi1zb3J0LXVwOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4OTMnOyB9IC8qICfuopMnICovXG4uaWNvbi1zb3J0LWRvd246YmVmb3JlIHsgY29udGVudDogJ1xcZTg5NCc7IH0gLyogJ+6ilCcgKi9cbi5pY29uLXNvcnQ6YmVmb3JlIHsgY29udGVudDogJ1xcZTg5NSc7IH0gLyogJ+6ilScgKi9cbi5pY29uLWdhdWdlOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4OTYnOyB9IC8qICfuopYnICovXG4uaWNvbi1zcGlubmVyOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4OTcnOyB9IC8qICfuopcnICovXG4uaWNvbi1kYXRhYmFzZTpiZWZvcmUgeyBjb250ZW50OiAnXFxlODk4JzsgfSAvKiAn7qKYJyAqL1xuLmljb24tbGlmZWJ1b3k6YmVmb3JlIHsgY29udGVudDogJ1xcZTg5OSc7IH0gLyogJ+6imScgKi9cbi5pY29uLWN1YmVzOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4OWEnOyB9IC8qICfuoponICovXG4uaWNvbi1jdWJlOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4OWInOyB9IC8qICfuopsnICovXG4uaWNvbi1idWxsc2V5ZTpiZWZvcmUgeyBjb250ZW50OiAnXFxlODljJzsgfSAvKiAn7qKcJyAqL1xuLmljb24td2luZG93czpiZWZvcmUgeyBjb250ZW50OiAnXFxlODlkJzsgfSAvKiAn7qKdJyAqL1xuLmljb24tY2FuY2VsLWNpcmNsZWQtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlODllJzsgfSAvKiAn7qKeJyAqL1xuLmljb24tcGx1cy0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4YTAnOyB9IC8qICfuoqAnICovXG4uaWNvbi1wbHVzLWNpcmNsZWQtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGExJzsgfSAvKiAn7qKhJyAqL1xuLmljb24tbWludXMtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGEzJzsgfSAvKiAn7qKjJyAqL1xuLmljb24tbWludXMtY2lyY2xlZC0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4YTQnOyB9IC8qICfuoqQnICovXG4uaWNvbi1oZWxwLWNpcmNsZWQtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGE3JzsgfSAvKiAn7qKnJyAqL1xuLmljb24taGVhcnQtZW1wdHktMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGFhJzsgfSAvKiAn7qKqJyAqL1xuLmljb24tbWFpbC0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4YWInOyB9IC8qICfuoqsnICovXG4uaWNvbi1zdGFyLTE6YmVmb3JlIHsgY29udGVudDogJ1xcZThhYyc7IH0gLyogJ+6irCcgKi9cbi5pY29uLXN0YXItZW1wdHktMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGFkJzsgfSAvKiAn7qKtJyAqL1xuLmljb24tbGluay0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4YWUnOyB9IC8qICfuoq4nICovXG4uaWNvbi1hdHRhY2gtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGFmJzsgfSAvKiAn7qKvJyAqL1xuLmljb24tZXllLTE6YmVmb3JlIHsgY29udGVudDogJ1xcZThiMic7IH0gLyogJ+6isicgKi9cbi5pY29uLWF0dGVudGlvbi0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4YjMnOyB9IC8qICfuorMnICovXG4uaWNvbi1kb2MtdGV4dC0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4YjQnOyB9IC8qICfuorQnICovXG4uaWNvbi1kb2MtdGV4dC1pbnYtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGI1JzsgfSAvKiAn7qK1JyAqL1xuLmljb24tc2hhcmUtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGI3JzsgfSAvKiAn7qK3JyAqL1xuLmljb24tc2hhcmVhYmxlOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4YjgnOyB9IC8qICfuorgnICovXG4uaWNvbi1jY3ctMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGNjJzsgfSAvKiAn7qOMJyAqL1xuLmljb24tY3ctMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGNkJzsgfSAvKiAn7qONJyAqL1xuLmljb24tYXJyb3dzLWNjdzpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGNlJzsgfSAvKiAn7qOOJyAqL1xuLmljb24tcGxheS0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4Y2YnOyB9IC8qICfuo48nICovXG4uaWNvbi1wYXVzZTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGQwJzsgfSAvKiAn7qOQJyAqL1xuLmljb24tcmVjb3JkOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4ZDEnOyB9IC8qICfuo5EnICovXG4uaWNvbi1zdG9wLTE6YmVmb3JlIHsgY29udGVudDogJ1xcZThkMic7IH0gLyogJ+6jkicgKi9cbi5pY29uLXN3aXRjaDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGQzJzsgfSAvKiAn7qOTJyAqL1xuLmljb24tbG9vcDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGQ0JzsgfSAvKiAn7qOUJyAqL1xuLmljb24tY2xvdWQtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGQ1JzsgfSAvKiAn7qOVJyAqL1xuLmljb24tY2VydGlmaWNhdGUtb3V0bGluZTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGRiJzsgfSAvKiAn7qObJyAqL1xuLmljb24tY2VydGlmaWNhdGUtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGRjJzsgfSAvKiAn7qOcJyAqL1xuLmljb24td2luZG93cy0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4ZGQnOyB9IC8qICfuo50nICovXG4uaWNvbi1zcGluNTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGRmJzsgfSAvKiAn7qOfJyAqL1xuLmljb24tc3BpbjI6YmVmb3JlIHsgY29udGVudDogJ1xcZThlMCc7IH0gLyogJ+6joCcgKi9cbi5pY29uLXBpY3R1cmU6YmVmb3JlIHsgY29udGVudDogJ1xcZThlNCc7IH0gLyogJ+6jpCcgKi9cbi5pY29uLW1lbnU6YmVmb3JlIHsgY29udGVudDogJ1xcZThlNSc7IH0gLyogJ+6jpScgKi9cbi5pY29uLXNsaWRlcnM6YmVmb3JlIHsgY29udGVudDogJ1xcZThlNic7IH0gLyogJ+6jpicgKi9cbi5pY29uLWxpc3QtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4ZTcnOyB9IC8qICfuo6cnICovXG4uaWNvbi1hanVzdDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGU4JzsgfSAvKiAn7qOoJyAqL1xuLmljb24tY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4ZTknOyB9IC8qICfuo6knICovXG4uaWNvbi1jaXJjbGUtZW1wdHk6YmVmb3JlIHsgY29udGVudDogJ1xcZThlYSc7IH0gLyogJ+6jqicgKi9cbi5pY29uLWNpcmNsZS1ub3RjaDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGVjJzsgfSAvKiAn7qOsJyAqL1xuLmljb24tZm9yazpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGVkJzsgfSAvKiAn7qOtJyAqL1xuLmljb24tc2l0ZW1hcDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGVlJzsgfSAvKiAn7qOuJyAqL1xuLmljb24tc3RldGhvc2NvcGU6YmVmb3JlIHsgY29udGVudDogJ1xcZThlZic7IH0gLyogJ+6jrycgKi9cbi5pY29uLXNoaWVsZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGYwJzsgfSAvKiAn7qOwJyAqL1xuLmljb24taGVhcnQtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGYxJzsgfSAvKiAn7qOxJyAqL1xuLmljb24tc2VhcmNoLTE6YmVmb3JlIHsgY29udGVudDogJ1xcZThmMic7IH0gLyogJ+6jsicgKi9cbi5pY29uLW1lbnUtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGYzJzsgfSAvKiAn7qOzJyAqL1xuLmljb24tYmFjazpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGY2JzsgfSAvKiAn7qO2JyAqL1xuLmljb24taG9tZS0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4ZjcnOyB9IC8qICfuo7cnICovXG4uaWNvbi1wZW5jaWwtMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGY4JzsgfSAvKiAn7qO4JyAqL1xuLmljb24tbG9jYXRpb24tMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGY5JzsgfSAvKiAn7qO5JyAqL1xuLmljb24tbG9nb3V0LTE6YmVmb3JlIHsgY29udGVudDogJ1xcZThmYic7IH0gLyogJ+6juycgKi9cbi5pY29uLWxvZ2luLTE6YmVmb3JlIHsgY29udGVudDogJ1xcZThmYyc7IH0gLyogJ+6jvCcgKi9cbi5pY29uLXB1Ymxpc2g6YmVmb3JlIHsgY29udGVudDogJ1xcZThmZCc7IH0gLyogJ+6jvScgKi9cbi5pY29uLXdpbmRvdzpiZWZvcmUgeyBjb250ZW50OiAnXFxlOGZlJzsgfSAvKiAn7qO+JyAqL1xuLmljb24tY2hhcnQtcGllOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU4ZmYnOyB9IC8qICfuo78nICovXG4uaWNvbi1jaGFydC1saW5lOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MDAnOyB9IC8qICfupIAnICovXG4uaWNvbi1jaGFydC1hcmVhOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MDEnOyB9IC8qICfupIEnICovXG4uaWNvbi1jaGFydC1iYXItMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTAyJzsgfSAvKiAn7qSCJyAqL1xuLmljb24tYWlyOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MDUnOyB9IC8qICfupIUnICovXG4uaWNvbi1kYXRhYmFzZS0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MDYnOyB9IC8qICfupIYnICovXG4uaWNvbi1mbG93LWNhc2NhZGU6YmVmb3JlIHsgY29udGVudDogJ1xcZTkwNyc7IH0gLyogJ+6khycgKi9cbi5pY29uLWZsb3ctdHJlZTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTA4JzsgfSAvKiAn7qSIJyAqL1xuLmljb24tZmxvdy1saW5lOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MDknOyB9IC8qICfupIknICovXG4uaWNvbi1mbG93LWJyYW5jaDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTBhJzsgfSAvKiAn7qSKJyAqL1xuLmljb24tZmxvdy1wYXJhbGxlbC0xOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MGYnOyB9IC8qICfupI8nICovXG4uaWNvbi1kb3Q6YmVmb3JlIHsgY29udGVudDogJ1xcZTkxMCc7IH0gLyogJ+6kkCcgKi9cbi5pY29uLWRvdC0zOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MTEnOyB9IC8qICfupJEnICovXG4uaWNvbi1jZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTEyJzsgfSAvKiAn7qSSJyAqL1xuLmljb24tYmFjay1pbi10aW1lOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MTMnOyB9IC8qICfupJMnICovXG4uaWNvbi1saXN0OmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MTQnOyB9IC8qICfupJQnICovXG4uaWNvbi1saXN0LWFkZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTE1JzsgfSAvKiAn7qSVJyAqL1xuLmljb24tcHJvZ3Jlc3MtMDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTE5JzsgfSAvKiAn7qSZJyAqL1xuLmljb24tcGVuY2lsLTI6YmVmb3JlIHsgY29udGVudDogJ1xcZTkxZCc7IH0gLyogJ+6knScgKi9cbi5pY29uLWNvZy0yOmJlZm9yZSB7IGNvbnRlbnQ6ICdcXGU5MWYnOyB9IC8qICfupJ8nICovXG4uaWNvbi1jb2ctY2lyY2xlZDpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTIwJzsgfSAvKiAn7qSgJyAqL1xuLmljb24tY29nczpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTIxJzsgfSAvKiAn7qShJyAqL1xuLmljb24tY2FsZW5kYXItMTpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTI0JzsgfSAvKiAn7qSkJyAqL1xuLmljb24tZG9jLW5ldzpiZWZvcmUgeyBjb250ZW50OiAnXFxlOTI1JzsgfSAvKiAn7qSlJyAqLyIsIi8qXG4gICBBbmltYXRpb24gZXhhbXBsZSwgZm9yIHNwaW5uZXJzXG4qL1xuLmFuaW1hdGUtc3BpbiB7XG4gIEBpbmNsdWRlIGFuaW1hdGlvbihzcGluIDJzIGluZmluaXRlIGxpbmVhcik7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbkBrZXlmcmFtZXMgc3BpbiB7XG4gIDAlIHtcbiAgICBAaW5jbHVkZSB0cmFuc2Zvcm0ocm90YXRlKDBkZWcpKTtcbiAgfVxuICAxMDAlIHtcbiAgICBAaW5jbHVkZSB0cmFuc2Zvcm0ocm90YXRlKDM1OWRlZykpO1xuICB9XG59IiwiLy8gVmVuZG9yIFByZWZpeGVzXG4vL1xuLy8gQWxsIHZlbmRvciBtaXhpbnMgYXJlIGRlcHJlY2F0ZWQgYXMgb2YgdjMuMi4wIGR1ZSB0byB0aGUgaW50cm9kdWN0aW9uIG9mXG4vLyBBdXRvcHJlZml4ZXIgaW4gb3VyIEdydW50ZmlsZS4gVGhleSB3aWxsIGJlIHJlbW92ZWQgaW4gdjQuXG5cbi8vIC0gQW5pbWF0aW9uc1xuLy8gLSBCYWNrZmFjZSB2aXNpYmlsaXR5XG4vLyAtIEJveCBzaGFkb3dcbi8vIC0gQm94IHNpemluZ1xuLy8gLSBDb250ZW50IGNvbHVtbnNcbi8vIC0gSHlwaGVuc1xuLy8gLSBQbGFjZWhvbGRlciB0ZXh0XG4vLyAtIFRyYW5zZm9ybWF0aW9uc1xuLy8gLSBUcmFuc2l0aW9uc1xuLy8gLSBVc2VyIFNlbGVjdFxuXG5cbi8vIEFuaW1hdGlvbnNcbkBtaXhpbiBhbmltYXRpb24oJGFuaW1hdGlvbikge1xuICAtd2Via2l0LWFuaW1hdGlvbjogJGFuaW1hdGlvbjtcbiAgICAgICAtby1hbmltYXRpb246ICRhbmltYXRpb247XG4gICAgICAgICAgYW5pbWF0aW9uOiAkYW5pbWF0aW9uO1xufVxuQG1peGluIGFuaW1hdGlvbi1uYW1lKCRuYW1lKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6ICRuYW1lO1xuICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiAkbmFtZTtcbn1cbkBtaXhpbiBhbmltYXRpb24tZHVyYXRpb24oJGR1cmF0aW9uKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiAkZHVyYXRpb247XG4gICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAkZHVyYXRpb247XG59XG5AbWl4aW4gYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbigkdGltaW5nLWZ1bmN0aW9uKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHRpbWluZy1mdW5jdGlvbjtcbiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkdGltaW5nLWZ1bmN0aW9uO1xufVxuQG1peGluIGFuaW1hdGlvbi1kZWxheSgkZGVsYXkpIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6ICRkZWxheTtcbiAgICAgICAgICBhbmltYXRpb24tZGVsYXk6ICRkZWxheTtcbn1cbkBtaXhpbiBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50KCRpdGVyYXRpb24tY291bnQpIHtcbiAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAkaXRlcmF0aW9uLWNvdW50O1xuICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6ICRpdGVyYXRpb24tY291bnQ7XG59XG5AbWl4aW4gYW5pbWF0aW9uLWRpcmVjdGlvbigkZGlyZWN0aW9uKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbjogJGRpcmVjdGlvbjtcbiAgICAgICAgICBhbmltYXRpb24tZGlyZWN0aW9uOiAkZGlyZWN0aW9uO1xufVxuQG1peGluIGFuaW1hdGlvbi1maWxsLW1vZGUoJGZpbGwtbW9kZSkge1xuICAtd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6ICRmaWxsLW1vZGU7XG4gICAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogJGZpbGwtbW9kZTtcbn1cblxuLy8gQmFja2ZhY2UgdmlzaWJpbGl0eVxuLy8gUHJldmVudCBicm93c2VycyBmcm9tIGZsaWNrZXJpbmcgd2hlbiB1c2luZyBDU1MgM0QgdHJhbnNmb3Jtcy5cbi8vIERlZmF1bHQgdmFsdWUgaXMgYHZpc2libGVgLCBidXQgY2FuIGJlIGNoYW5nZWQgdG8gYGhpZGRlbmBcblxuQG1peGluIGJhY2tmYWNlLXZpc2liaWxpdHkoJHZpc2liaWxpdHkpe1xuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6ICR2aXNpYmlsaXR5O1xuICAgICAtbW96LWJhY2tmYWNlLXZpc2liaWxpdHk6ICR2aXNpYmlsaXR5O1xuICAgICAgICAgIGJhY2tmYWNlLXZpc2liaWxpdHk6ICR2aXNpYmlsaXR5O1xufVxuXG4vLyBEcm9wIHNoYWRvd3Ncbi8vXG4vLyBOb3RlOiBEZXByZWNhdGVkIGAuYm94LXNoYWRvdygpYCBhcyBvZiB2My4xLjAgc2luY2UgYWxsIG9mIEJvb3RzdHJhcCdzXG4vLyBzdXBwb3J0ZWQgYnJvd3NlcnMgdGhhdCBoYXZlIGJveCBzaGFkb3cgY2FwYWJpbGl0aWVzIG5vdyBzdXBwb3J0IGl0LlxuXG5AbWl4aW4gYm94LXNoYWRvdygkc2hhZG93Li4uKSB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogJHNoYWRvdzsgLy8gaU9TIDw0LjMgJiBBbmRyb2lkIDw0LjFcbiAgICAgICAgICBib3gtc2hhZG93OiAkc2hhZG93O1xufVxuXG4vLyBCb3ggc2l6aW5nXG5AbWl4aW4gYm94LXNpemluZygkYm94bW9kZWwpIHtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiAkYm94bW9kZWw7XG4gICAgIC1tb3otYm94LXNpemluZzogJGJveG1vZGVsO1xuICAgICAgICAgIGJveC1zaXppbmc6ICRib3htb2RlbDtcbn1cblxuLy8gQ1NTMyBDb250ZW50IENvbHVtbnNcbkBtaXhpbiBjb250ZW50LWNvbHVtbnMoJGNvbHVtbi1jb3VudCwgJGNvbHVtbi1nYXA6ICRncmlkLWd1dHRlci13aWR0aCkge1xuICAtd2Via2l0LWNvbHVtbi1jb3VudDogJGNvbHVtbi1jb3VudDtcbiAgICAgLW1vei1jb2x1bW4tY291bnQ6ICRjb2x1bW4tY291bnQ7XG4gICAgICAgICAgY29sdW1uLWNvdW50OiAkY29sdW1uLWNvdW50O1xuICAtd2Via2l0LWNvbHVtbi1nYXA6ICRjb2x1bW4tZ2FwO1xuICAgICAtbW96LWNvbHVtbi1nYXA6ICRjb2x1bW4tZ2FwO1xuICAgICAgICAgIGNvbHVtbi1nYXA6ICRjb2x1bW4tZ2FwO1xufVxuXG4vLyBPcHRpb25hbCBoeXBoZW5hdGlvblxuQG1peGluIGh5cGhlbnMoJG1vZGU6IGF1dG8pIHtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAtd2Via2l0LWh5cGhlbnM6ICRtb2RlO1xuICAgICAtbW96LWh5cGhlbnM6ICRtb2RlO1xuICAgICAgLW1zLWh5cGhlbnM6ICRtb2RlOyAvLyBJRTEwK1xuICAgICAgIC1vLWh5cGhlbnM6ICRtb2RlO1xuICAgICAgICAgIGh5cGhlbnM6ICRtb2RlO1xufVxuXG4vLyBQbGFjZWhvbGRlciB0ZXh0XG5AbWl4aW4gcGxhY2Vob2xkZXIoJGNvbG9yOiAkaW5wdXQtY29sb3ItcGxhY2Vob2xkZXIpIHtcbiAgLy8gRmlyZWZveFxuICAmOjotbW96LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogJGNvbG9yO1xuICAgIG9wYWNpdHk6IDE7IC8vIE92ZXJyaWRlIEZpcmVmb3gncyB1bnVzdWFsIGRlZmF1bHQgb3BhY2l0eTsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9wdWxsLzExNTI2XG4gIH1cbiAgJjotbXMtaW5wdXQtcGxhY2Vob2xkZXIgeyBjb2xvcjogJGNvbG9yOyB9IC8vIEludGVybmV0IEV4cGxvcmVyIDEwK1xuICAmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyICB7IGNvbG9yOiAkY29sb3I7IH0gLy8gU2FmYXJpIGFuZCBDaHJvbWVcbn1cblxuLy8gVHJhbnNmb3JtYXRpb25zXG5AbWl4aW4gc2NhbGUoJHJhdGlvLi4uKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgkcmF0aW8pO1xuICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUoJHJhdGlvKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHNjYWxlKCRyYXRpbyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgkcmF0aW8pO1xufVxuXG5AbWl4aW4gc2NhbGVYKCRyYXRpbykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKCRyYXRpbyk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZVgoJHJhdGlvKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHNjYWxlWCgkcmF0aW8pO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKCRyYXRpbyk7XG59XG5AbWl4aW4gc2NhbGVZKCRyYXRpbykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVZKCRyYXRpbyk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZVkoJHJhdGlvKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHNjYWxlWSgkcmF0aW8pO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVZKCRyYXRpbyk7XG59XG5AbWl4aW4gc2tldygkeCwgJHkpIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNrZXdYKCR4KSBza2V3WSgkeSk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiBza2V3WCgkeCkgc2tld1koJHkpOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy80ODg1OyBJRTkrXG4gICAgICAgLW8tdHJhbnNmb3JtOiBza2V3WCgkeCkgc2tld1koJHkpO1xuICAgICAgICAgIHRyYW5zZm9ybTogc2tld1goJHgpIHNrZXdZKCR5KTtcbn1cbkBtaXhpbiB0cmFuc2xhdGUoJHgsICR5KSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoJHgsICR5KTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgkeCwgJHkpOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlKCR4LCAkeSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoJHgsICR5KTtcbn1cbkBtaXhpbiB0cmFuc2xhdGUzZCgkeCwgJHksICR6KSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgkeCwgJHksICR6KTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKCR4LCAkeSwgJHopO1xufVxuQG1peGluIHJvdGF0ZSgkZGVncmVlcykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKCRkZWdyZWVzKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZSgkZGVncmVlcyk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiByb3RhdGUoJGRlZ3JlZXMpO1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKCRkZWdyZWVzKTtcbn1cbkBtaXhpbiByb3RhdGVYKCRkZWdyZWVzKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVYKCRkZWdyZWVzKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZVgoJGRlZ3JlZXMpOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogcm90YXRlWCgkZGVncmVlcyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVYKCRkZWdyZWVzKTtcbn1cbkBtaXhpbiByb3RhdGVZKCRkZWdyZWVzKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVZKCRkZWdyZWVzKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZVkoJGRlZ3JlZXMpOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogcm90YXRlWSgkZGVncmVlcyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVZKCRkZWdyZWVzKTtcbn1cbkBtaXhpbiBwZXJzcGVjdGl2ZSgkcGVyc3BlY3RpdmUpIHtcbiAgLXdlYmtpdC1wZXJzcGVjdGl2ZTogJHBlcnNwZWN0aXZlO1xuICAgICAtbW96LXBlcnNwZWN0aXZlOiAkcGVyc3BlY3RpdmU7XG4gICAgICAgICAgcGVyc3BlY3RpdmU6ICRwZXJzcGVjdGl2ZTtcbn1cbkBtaXhpbiBwZXJzcGVjdGl2ZS1vcmlnaW4oJHBlcnNwZWN0aXZlKSB7XG4gIC13ZWJraXQtcGVyc3BlY3RpdmUtb3JpZ2luOiAkcGVyc3BlY3RpdmU7XG4gICAgIC1tb3otcGVyc3BlY3RpdmUtb3JpZ2luOiAkcGVyc3BlY3RpdmU7XG4gICAgICAgICAgcGVyc3BlY3RpdmUtb3JpZ2luOiAkcGVyc3BlY3RpdmU7XG59XG5AbWl4aW4gdHJhbnNmb3JtLW9yaWdpbigkb3JpZ2luKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogJG9yaWdpbjtcbiAgICAgLW1vei10cmFuc2Zvcm0tb3JpZ2luOiAkb3JpZ2luO1xuICAgICAgLW1zLXRyYW5zZm9ybS1vcmlnaW46ICRvcmlnaW47IC8vIElFOSBvbmx5XG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogJG9yaWdpbjtcbn1cblxuXG4vLyBUcmFuc2l0aW9uc1xuXG5AbWl4aW4gdHJhbnNpdGlvbigkdHJhbnNpdGlvbi4uLikge1xuICAtd2Via2l0LXRyYW5zaXRpb246ICR0cmFuc2l0aW9uO1xuICAgICAgIC1vLXRyYW5zaXRpb246ICR0cmFuc2l0aW9uO1xuICAgICAgICAgIHRyYW5zaXRpb246ICR0cmFuc2l0aW9uO1xufVxuQG1peGluIHRyYW5zaXRpb24tcHJvcGVydHkoJHRyYW5zaXRpb24tcHJvcGVydHkuLi4pIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiAkdHJhbnNpdGlvbi1wcm9wZXJ0eTtcbiAgICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiAkdHJhbnNpdGlvbi1wcm9wZXJ0eTtcbn1cbkBtaXhpbiB0cmFuc2l0aW9uLWRlbGF5KCR0cmFuc2l0aW9uLWRlbGF5KSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kZWxheTogJHRyYW5zaXRpb24tZGVsYXk7XG4gICAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogJHRyYW5zaXRpb24tZGVsYXk7XG59XG5AbWl4aW4gdHJhbnNpdGlvbi1kdXJhdGlvbigkdHJhbnNpdGlvbi1kdXJhdGlvbi4uLikge1xuICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246ICR0cmFuc2l0aW9uLWR1cmF0aW9uO1xuICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246ICR0cmFuc2l0aW9uLWR1cmF0aW9uO1xufVxuQG1peGluIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKCR0aW1pbmctZnVuY3Rpb24pIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogJHRpbWluZy1mdW5jdGlvbjtcbiAgICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogJHRpbWluZy1mdW5jdGlvbjtcbn1cbkBtaXhpbiB0cmFuc2l0aW9uLXRyYW5zZm9ybSgkdHJhbnNpdGlvbi4uLikge1xuICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtICR0cmFuc2l0aW9uO1xuICAgICAtbW96LXRyYW5zaXRpb246IC1tb3otdHJhbnNmb3JtICR0cmFuc2l0aW9uO1xuICAgICAgIC1vLXRyYW5zaXRpb246IC1vLXRyYW5zZm9ybSAkdHJhbnNpdGlvbjtcbiAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gJHRyYW5zaXRpb247XG59XG5cblxuLy8gVXNlciBzZWxlY3Rcbi8vIEZvciBzZWxlY3RpbmcgdGV4dCBvbiB0aGUgcGFnZVxuXG5AbWl4aW4gdXNlci1zZWxlY3QoJHNlbGVjdCkge1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiAkc2VsZWN0O1xuICAgICAtbW96LXVzZXItc2VsZWN0OiAkc2VsZWN0O1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiAkc2VsZWN0OyAvLyBJRTEwK1xuICAgICAgICAgIHVzZXItc2VsZWN0OiAkc2VsZWN0O1xufVxuIiwiQGltcG9ydCBcIi4uL3N1cHBvcnRcIjtcblxuLy8gVGhpcyBtaXhpbiBwcm92aWRlcyBiYXNpYyBzdXBwb3J0IGZvciBDU1MzIHByb3BlcnRpZXMgYW5kXG4vLyB0aGVpciBjb3JyZXNwb25kaW5nIGV4cGVyaW1lbnRhbCBDU1MyIHByb3BlcnRpZXMgd2hlblxuLy8gdGhlIGltcGxlbWVudGF0aW9ucyBhcmUgaWRlbnRpY2FsIGV4Y2VwdCBmb3IgdGhlIHByb3BlcnR5XG4vLyBwcmVmaXguXG5AbWl4aW4gZXhwZXJpbWVudGFsKCRwcm9wZXJ0eSwgJHZhbHVlLFxuICAkbW96ICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1vemlsbGEsXG4gICR3ZWJraXQgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itd2Via2l0LFxuICAkbyAgICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW9wZXJhLFxuICAkbXMgICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1pY3Jvc29mdCxcbiAgJGtodG1sICAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1raHRtbCxcbiAgJG9mZmljaWFsIDogdHJ1ZVxuKSB7XG4gIEBpZiAkd2Via2l0ICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQgICAgeyAtd2Via2l0LSN7JHByb3BlcnR5fSA6ICR2YWx1ZTsgfVxuICBAaWYgJGtodG1sICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Ita2h0bWwgICAgIHsgIC1raHRtbC0jeyRwcm9wZXJ0eX0gOiAkdmFsdWU7IH1cbiAgQGlmICRtb3ogICAgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1vemlsbGEgICB7ICAgIC1tb3otI3skcHJvcGVydHl9IDogJHZhbHVlOyB9XG4gIEBpZiAkbXMgICAgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1taWNyb3NvZnQgeyAgICAgLW1zLSN7JHByb3BlcnR5fSA6ICR2YWx1ZTsgfVxuICBAaWYgJG8gICAgICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itb3BlcmEgICAgIHsgICAgICAtby0jeyRwcm9wZXJ0eX0gOiAkdmFsdWU7IH1cbiAgQGlmICRvZmZpY2lhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgICAgICAgI3skcHJvcGVydHl9IDogJHZhbHVlOyB9XG59XG5cbi8vIFNhbWUgYXMgZXhwZXJpbWVudGFsKCksIGJ1dCBmb3IgY2FzZXMgd2hlbiB0aGUgcHJvcGVydHkgaXMgdGhlIHNhbWUgYW5kIHRoZSB2YWx1ZSBpcyB2ZW5kb3JpemVkXG5AbWl4aW4gZXhwZXJpbWVudGFsLXZhbHVlKCRwcm9wZXJ0eSwgJHZhbHVlLFxuICAkbW96ICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1vemlsbGEsXG4gICR3ZWJraXQgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itd2Via2l0LFxuICAkbyAgICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW9wZXJhLFxuICAkbXMgICAgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1pY3Jvc29mdCxcbiAgJGtodG1sICAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1raHRtbCxcbiAgJG9mZmljaWFsIDogdHJ1ZVxuKSB7XG4gIEBpZiAkd2Via2l0ICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQgICAgeyAjeyRwcm9wZXJ0eX0gOiAtd2Via2l0LSN7JHZhbHVlfTsgfVxuICBAaWYgJGtodG1sICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Ita2h0bWwgICAgIHsgI3skcHJvcGVydHl9IDogIC1raHRtbC0jeyR2YWx1ZX07IH1cbiAgQGlmICRtb3ogICAgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1vemlsbGEgICB7ICN7JHByb3BlcnR5fSA6ICAgIC1tb3otI3skdmFsdWV9OyB9XG4gIEBpZiAkbXMgICAgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1taWNyb3NvZnQgeyAjeyRwcm9wZXJ0eX0gOiAgICAgLW1zLSN7JHZhbHVlfTsgfVxuICBAaWYgJG8gICAgICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itb3BlcmEgICAgIHsgI3skcHJvcGVydHl9IDogICAgICAtby0jeyR2YWx1ZX07IH1cbiAgQGlmICRvZmZpY2lhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICN7JHByb3BlcnR5fSA6ICAgICAgICAgI3skdmFsdWV9OyB9XG59XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= */
\ No newline at end of file
diff --git a/ui/new-ui-samples/css/main.css b/ui/new-ui-samples/css/main.css
new file mode 100755
index 0000000..c544790
--- /dev/null
+++ b/ui/new-ui-samples/css/main.css
@@ -0,0 +1,9157 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 */
+html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr,
+address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub,
+sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table,
+caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure,
+figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark,
+audio, video, button {
+ margin: 0;
+ padding: 0;
+ border: 0;
+}
+
+article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
+ display: block;
+}
+
+ol, ul {
+ list-style: none;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+img {
+ border: none;
+}
+
+a {
+ text-decoration: none;
+}
+
+a:active, a:hover {
+ outline: none;
+}
+
+a label {
+ cursor: pointer;
+}
+
+/*
+ * A partial implementation of the Ruby list functions from Compass:
+ * https://github.com/Compass/compass/blob/stable/lib/compass/sass_extensions/…
+ */
+/*
+ * A partial implementation of the Ruby constants functions from Compass:
+ * https://github.com/Compass/compass/blob/stable/lib/compass/sass_extensions/…
+ */
+/*
+ * A partial implementation of the Ruby display functions from Compass:
+ * https://github.com/Compass/compass/blob/stable/core/lib/compass/core/sass_e…
+ */
+/*!
+ * Bootstrap v3.3.5 (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("../fonts/glyphicons-halflings-regular.eot");
+ src: url("../fonts/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"), url("../fonts/glyphicons-halflings-regular.woff2") format("woff2"), url("../fonts/glyphicons-halflings-regular.woff") format("woff"), url("../fonts/glyphicons-halflings-regular.ttf") format("truetype"), url("../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg");
+}
+
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.glyphicon-asterisk:before {
+ content: "\2a";
+}
+
+.glyphicon-plus:before {
+ content: "\2b";
+}
+
+.glyphicon-euro:before,
+.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: "HelveticaNeueMedium", "HelveticaNeue-Medium", "Helvetica Neue Medium", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-size: 14px;
+ line-height: 1.428571429;
+ color: #222;
+ background-color: #fff;
+}
+
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+
+a {
+ color: #3a393b;
+ text-decoration: none;
+}
+
+a:hover,
+a:focus {
+ color: #141314;
+ 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: 3px;
+}
+
+.img-thumbnail {
+ padding: 4px;
+ line-height: 1.428571429;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 3px;
+ 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 #fff;
+}
+
+.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: #999;
+}
+
+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: 1.571em;
+}
+
+h2, .h2 {
+ font-size: 22px;
+}
+
+h3, .h3 {
+ font-size: 17px;
+}
+
+h4, .h4 {
+ font-size: 14px;
+}
+
+h5, .h5 {
+ font-size: 14px;
+}
+
+h6, .h6 {
+ font-size: 14px;
+}
+
+p {
+ margin: 0 0 10px;
+}
+
+.lead {
+ margin-bottom: 20px;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 1.4;
+}
+
+@media (min-width: 992px) {
+ .lead {
+ font-size: 21px;
+ }
+}
+
+small,
+.small {
+ font-size: 85%;
+}
+
+mark,
+.mark {
+ background-color: #f1e3c2;
+ 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: #999;
+}
+
+.text-primary {
+ color: #3a393b;
+}
+
+a.text-primary:hover,
+a.text-primary:focus {
+ color: #212021;
+}
+
+.text-success {
+ color: #6c6c6c;
+}
+
+a.text-success:hover,
+a.text-success:focus {
+ color: #525252;
+}
+
+.text-info {
+ color: #6c6c6c;
+}
+
+a.text-info:hover,
+a.text-info:focus {
+ color: #525252;
+}
+
+.text-warning {
+ color: #6c6c6c;
+}
+
+a.text-warning:hover,
+a.text-warning:focus {
+ color: #525252;
+}
+
+.text-danger {
+ color: #6c6c6c;
+}
+
+a.text-danger:hover,
+a.text-danger:focus {
+ color: #525252;
+}
+
+.bg-primary {
+ color: #fff;
+}
+
+.bg-primary {
+ background-color: #3a393b;
+}
+
+a.bg-primary:hover,
+a.bg-primary:focus {
+ background-color: #212021;
+}
+
+.bg-success {
+ background-color: #dae6cb;
+}
+
+a.bg-success:hover,
+a.bg-success:focus {
+ background-color: #c1d5a9;
+}
+
+.bg-info {
+ background-color: #d9edf7;
+}
+
+a.bg-info:hover,
+a.bg-info:focus {
+ background-color: #afd9ee;
+}
+
+.bg-warning {
+ background-color: #f1e3c2;
+}
+
+a.bg-warning:hover,
+a.bg-warning:focus {
+ background-color: #e7d099;
+}
+
+.bg-danger {
+ background-color: #eac3c7;
+}
+
+a.bg-danger:hover,
+a.bg-danger:focus {
+ background-color: #dd9da4;
+}
+
+.page-header {
+ padding-bottom: 9px;
+ margin: 40px 0 20px;
+ border-bottom: 1px solid #fff;
+}
+
+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.428571429;
+}
+
+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: 992px) {
+ .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 #999;
+}
+
+.initialism {
+ font-size: 90%;
+}
+
+blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #fff;
+}
+
+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.428571429;
+ color: #999;
+}
+
+blockquote footer:before,
+blockquote small:before,
+blockquote .small:before {
+ content: '\2014 \00A0';
+}
+
+.blockquote-reverse,
+blockquote.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ border-right: 5px solid #fff;
+ 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.428571429;
+}
+
+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: 3px;
+}
+
+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.428571429;
+ word-break: break-all;
+ word-wrap: break-word;
+ color: #222;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+}
+
+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: 0;
+ padding-right: 0;
+}
+
+.container:before,
+.container:after {
+ content: " ";
+ display: table;
+}
+
+.container:after {
+ clear: both;
+}
+
+@media (min-width: 992px) {
+ .container {
+ width: 940px;
+ }
+}
+
+@media (min-width: 1200px) {
+ .container {
+ width: 1140px;
+ }
+}
+
+@media (min-width: 1680) {
+ .container {
+ width: 1540px;
+ }
+}
+
+.container-fluid {
+ margin-right: auto;
+ margin-left: auto;
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.container-fluid:before,
+.container-fluid:after {
+ content: " ";
+ display: table;
+}
+
+.container-fluid:after {
+ clear: both;
+}
+
+.row {
+ margin-left: 0;
+ margin-right: 0;
+}
+
+.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: 0;
+ padding-right: 0;
+}
+
+.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.3333333333%;
+}
+
+.col-xs-2 {
+ width: 16.6666666667%;
+}
+
+.col-xs-3 {
+ width: 25%;
+}
+
+.col-xs-4 {
+ width: 33.3333333333%;
+}
+
+.col-xs-5 {
+ width: 41.6666666667%;
+}
+
+.col-xs-6 {
+ width: 50%;
+}
+
+.col-xs-7 {
+ width: 58.3333333333%;
+}
+
+.col-xs-8 {
+ width: 66.6666666667%;
+}
+
+.col-xs-9 {
+ width: 75%;
+}
+
+.col-xs-10 {
+ width: 83.3333333333%;
+}
+
+.col-xs-11 {
+ width: 91.6666666667%;
+}
+
+.col-xs-12 {
+ width: 100%;
+}
+
+.col-xs-pull-0 {
+ right: auto;
+}
+
+.col-xs-pull-1 {
+ right: 8.3333333333%;
+}
+
+.col-xs-pull-2 {
+ right: 16.6666666667%;
+}
+
+.col-xs-pull-3 {
+ right: 25%;
+}
+
+.col-xs-pull-4 {
+ right: 33.3333333333%;
+}
+
+.col-xs-pull-5 {
+ right: 41.6666666667%;
+}
+
+.col-xs-pull-6 {
+ right: 50%;
+}
+
+.col-xs-pull-7 {
+ right: 58.3333333333%;
+}
+
+.col-xs-pull-8 {
+ right: 66.6666666667%;
+}
+
+.col-xs-pull-9 {
+ right: 75%;
+}
+
+.col-xs-pull-10 {
+ right: 83.3333333333%;
+}
+
+.col-xs-pull-11 {
+ right: 91.6666666667%;
+}
+
+.col-xs-pull-12 {
+ right: 100%;
+}
+
+.col-xs-push-0 {
+ left: auto;
+}
+
+.col-xs-push-1 {
+ left: 8.3333333333%;
+}
+
+.col-xs-push-2 {
+ left: 16.6666666667%;
+}
+
+.col-xs-push-3 {
+ left: 25%;
+}
+
+.col-xs-push-4 {
+ left: 33.3333333333%;
+}
+
+.col-xs-push-5 {
+ left: 41.6666666667%;
+}
+
+.col-xs-push-6 {
+ left: 50%;
+}
+
+.col-xs-push-7 {
+ left: 58.3333333333%;
+}
+
+.col-xs-push-8 {
+ left: 66.6666666667%;
+}
+
+.col-xs-push-9 {
+ left: 75%;
+}
+
+.col-xs-push-10 {
+ left: 83.3333333333%;
+}
+
+.col-xs-push-11 {
+ left: 91.6666666667%;
+}
+
+.col-xs-push-12 {
+ left: 100%;
+}
+
+.col-xs-offset-0 {
+ margin-left: 0%;
+}
+
+.col-xs-offset-1 {
+ margin-left: 8.3333333333%;
+}
+
+.col-xs-offset-2 {
+ margin-left: 16.6666666667%;
+}
+
+.col-xs-offset-3 {
+ margin-left: 25%;
+}
+
+.col-xs-offset-4 {
+ margin-left: 33.3333333333%;
+}
+
+.col-xs-offset-5 {
+ margin-left: 41.6666666667%;
+}
+
+.col-xs-offset-6 {
+ margin-left: 50%;
+}
+
+.col-xs-offset-7 {
+ margin-left: 58.3333333333%;
+}
+
+.col-xs-offset-8 {
+ margin-left: 66.6666666667%;
+}
+
+.col-xs-offset-9 {
+ margin-left: 75%;
+}
+
+.col-xs-offset-10 {
+ margin-left: 83.3333333333%;
+}
+
+.col-xs-offset-11 {
+ margin-left: 91.6666666667%;
+}
+
+.col-xs-offset-12 {
+ margin-left: 100%;
+}
+
+@media (min-width: 992px) {
+ .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.3333333333%;
+ }
+ .col-sm-2 {
+ width: 16.6666666667%;
+ }
+ .col-sm-3 {
+ width: 25%;
+ }
+ .col-sm-4 {
+ width: 33.3333333333%;
+ }
+ .col-sm-5 {
+ width: 41.6666666667%;
+ }
+ .col-sm-6 {
+ width: 50%;
+ }
+ .col-sm-7 {
+ width: 58.3333333333%;
+ }
+ .col-sm-8 {
+ width: 66.6666666667%;
+ }
+ .col-sm-9 {
+ width: 75%;
+ }
+ .col-sm-10 {
+ width: 83.3333333333%;
+ }
+ .col-sm-11 {
+ width: 91.6666666667%;
+ }
+ .col-sm-12 {
+ width: 100%;
+ }
+ .col-sm-pull-0 {
+ right: auto;
+ }
+ .col-sm-pull-1 {
+ right: 8.3333333333%;
+ }
+ .col-sm-pull-2 {
+ right: 16.6666666667%;
+ }
+ .col-sm-pull-3 {
+ right: 25%;
+ }
+ .col-sm-pull-4 {
+ right: 33.3333333333%;
+ }
+ .col-sm-pull-5 {
+ right: 41.6666666667%;
+ }
+ .col-sm-pull-6 {
+ right: 50%;
+ }
+ .col-sm-pull-7 {
+ right: 58.3333333333%;
+ }
+ .col-sm-pull-8 {
+ right: 66.6666666667%;
+ }
+ .col-sm-pull-9 {
+ right: 75%;
+ }
+ .col-sm-pull-10 {
+ right: 83.3333333333%;
+ }
+ .col-sm-pull-11 {
+ right: 91.6666666667%;
+ }
+ .col-sm-pull-12 {
+ right: 100%;
+ }
+ .col-sm-push-0 {
+ left: auto;
+ }
+ .col-sm-push-1 {
+ left: 8.3333333333%;
+ }
+ .col-sm-push-2 {
+ left: 16.6666666667%;
+ }
+ .col-sm-push-3 {
+ left: 25%;
+ }
+ .col-sm-push-4 {
+ left: 33.3333333333%;
+ }
+ .col-sm-push-5 {
+ left: 41.6666666667%;
+ }
+ .col-sm-push-6 {
+ left: 50%;
+ }
+ .col-sm-push-7 {
+ left: 58.3333333333%;
+ }
+ .col-sm-push-8 {
+ left: 66.6666666667%;
+ }
+ .col-sm-push-9 {
+ left: 75%;
+ }
+ .col-sm-push-10 {
+ left: 83.3333333333%;
+ }
+ .col-sm-push-11 {
+ left: 91.6666666667%;
+ }
+ .col-sm-push-12 {
+ left: 100%;
+ }
+ .col-sm-offset-0 {
+ margin-left: 0%;
+ }
+ .col-sm-offset-1 {
+ margin-left: 8.3333333333%;
+ }
+ .col-sm-offset-2 {
+ margin-left: 16.6666666667%;
+ }
+ .col-sm-offset-3 {
+ margin-left: 25%;
+ }
+ .col-sm-offset-4 {
+ margin-left: 33.3333333333%;
+ }
+ .col-sm-offset-5 {
+ margin-left: 41.6666666667%;
+ }
+ .col-sm-offset-6 {
+ margin-left: 50%;
+ }
+ .col-sm-offset-7 {
+ margin-left: 58.3333333333%;
+ }
+ .col-sm-offset-8 {
+ margin-left: 66.6666666667%;
+ }
+ .col-sm-offset-9 {
+ margin-left: 75%;
+ }
+ .col-sm-offset-10 {
+ margin-left: 83.3333333333%;
+ }
+ .col-sm-offset-11 {
+ margin-left: 91.6666666667%;
+ }
+ .col-sm-offset-12 {
+ margin-left: 100%;
+ }
+}
+
+@media (min-width: 1200px) {
+ .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.3333333333%;
+ }
+ .col-md-2 {
+ width: 16.6666666667%;
+ }
+ .col-md-3 {
+ width: 25%;
+ }
+ .col-md-4 {
+ width: 33.3333333333%;
+ }
+ .col-md-5 {
+ width: 41.6666666667%;
+ }
+ .col-md-6 {
+ width: 50%;
+ }
+ .col-md-7 {
+ width: 58.3333333333%;
+ }
+ .col-md-8 {
+ width: 66.6666666667%;
+ }
+ .col-md-9 {
+ width: 75%;
+ }
+ .col-md-10 {
+ width: 83.3333333333%;
+ }
+ .col-md-11 {
+ width: 91.6666666667%;
+ }
+ .col-md-12 {
+ width: 100%;
+ }
+ .col-md-pull-0 {
+ right: auto;
+ }
+ .col-md-pull-1 {
+ right: 8.3333333333%;
+ }
+ .col-md-pull-2 {
+ right: 16.6666666667%;
+ }
+ .col-md-pull-3 {
+ right: 25%;
+ }
+ .col-md-pull-4 {
+ right: 33.3333333333%;
+ }
+ .col-md-pull-5 {
+ right: 41.6666666667%;
+ }
+ .col-md-pull-6 {
+ right: 50%;
+ }
+ .col-md-pull-7 {
+ right: 58.3333333333%;
+ }
+ .col-md-pull-8 {
+ right: 66.6666666667%;
+ }
+ .col-md-pull-9 {
+ right: 75%;
+ }
+ .col-md-pull-10 {
+ right: 83.3333333333%;
+ }
+ .col-md-pull-11 {
+ right: 91.6666666667%;
+ }
+ .col-md-pull-12 {
+ right: 100%;
+ }
+ .col-md-push-0 {
+ left: auto;
+ }
+ .col-md-push-1 {
+ left: 8.3333333333%;
+ }
+ .col-md-push-2 {
+ left: 16.6666666667%;
+ }
+ .col-md-push-3 {
+ left: 25%;
+ }
+ .col-md-push-4 {
+ left: 33.3333333333%;
+ }
+ .col-md-push-5 {
+ left: 41.6666666667%;
+ }
+ .col-md-push-6 {
+ left: 50%;
+ }
+ .col-md-push-7 {
+ left: 58.3333333333%;
+ }
+ .col-md-push-8 {
+ left: 66.6666666667%;
+ }
+ .col-md-push-9 {
+ left: 75%;
+ }
+ .col-md-push-10 {
+ left: 83.3333333333%;
+ }
+ .col-md-push-11 {
+ left: 91.6666666667%;
+ }
+ .col-md-push-12 {
+ left: 100%;
+ }
+ .col-md-offset-0 {
+ margin-left: 0%;
+ }
+ .col-md-offset-1 {
+ margin-left: 8.3333333333%;
+ }
+ .col-md-offset-2 {
+ margin-left: 16.6666666667%;
+ }
+ .col-md-offset-3 {
+ margin-left: 25%;
+ }
+ .col-md-offset-4 {
+ margin-left: 33.3333333333%;
+ }
+ .col-md-offset-5 {
+ margin-left: 41.6666666667%;
+ }
+ .col-md-offset-6 {
+ margin-left: 50%;
+ }
+ .col-md-offset-7 {
+ margin-left: 58.3333333333%;
+ }
+ .col-md-offset-8 {
+ margin-left: 66.6666666667%;
+ }
+ .col-md-offset-9 {
+ margin-left: 75%;
+ }
+ .col-md-offset-10 {
+ margin-left: 83.3333333333%;
+ }
+ .col-md-offset-11 {
+ margin-left: 91.6666666667%;
+ }
+ .col-md-offset-12 {
+ margin-left: 100%;
+ }
+}
+
+@media (min-width: 1680) {
+ .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.3333333333%;
+ }
+ .col-lg-2 {
+ width: 16.6666666667%;
+ }
+ .col-lg-3 {
+ width: 25%;
+ }
+ .col-lg-4 {
+ width: 33.3333333333%;
+ }
+ .col-lg-5 {
+ width: 41.6666666667%;
+ }
+ .col-lg-6 {
+ width: 50%;
+ }
+ .col-lg-7 {
+ width: 58.3333333333%;
+ }
+ .col-lg-8 {
+ width: 66.6666666667%;
+ }
+ .col-lg-9 {
+ width: 75%;
+ }
+ .col-lg-10 {
+ width: 83.3333333333%;
+ }
+ .col-lg-11 {
+ width: 91.6666666667%;
+ }
+ .col-lg-12 {
+ width: 100%;
+ }
+ .col-lg-pull-0 {
+ right: auto;
+ }
+ .col-lg-pull-1 {
+ right: 8.3333333333%;
+ }
+ .col-lg-pull-2 {
+ right: 16.6666666667%;
+ }
+ .col-lg-pull-3 {
+ right: 25%;
+ }
+ .col-lg-pull-4 {
+ right: 33.3333333333%;
+ }
+ .col-lg-pull-5 {
+ right: 41.6666666667%;
+ }
+ .col-lg-pull-6 {
+ right: 50%;
+ }
+ .col-lg-pull-7 {
+ right: 58.3333333333%;
+ }
+ .col-lg-pull-8 {
+ right: 66.6666666667%;
+ }
+ .col-lg-pull-9 {
+ right: 75%;
+ }
+ .col-lg-pull-10 {
+ right: 83.3333333333%;
+ }
+ .col-lg-pull-11 {
+ right: 91.6666666667%;
+ }
+ .col-lg-pull-12 {
+ right: 100%;
+ }
+ .col-lg-push-0 {
+ left: auto;
+ }
+ .col-lg-push-1 {
+ left: 8.3333333333%;
+ }
+ .col-lg-push-2 {
+ left: 16.6666666667%;
+ }
+ .col-lg-push-3 {
+ left: 25%;
+ }
+ .col-lg-push-4 {
+ left: 33.3333333333%;
+ }
+ .col-lg-push-5 {
+ left: 41.6666666667%;
+ }
+ .col-lg-push-6 {
+ left: 50%;
+ }
+ .col-lg-push-7 {
+ left: 58.3333333333%;
+ }
+ .col-lg-push-8 {
+ left: 66.6666666667%;
+ }
+ .col-lg-push-9 {
+ left: 75%;
+ }
+ .col-lg-push-10 {
+ left: 83.3333333333%;
+ }
+ .col-lg-push-11 {
+ left: 91.6666666667%;
+ }
+ .col-lg-push-12 {
+ left: 100%;
+ }
+ .col-lg-offset-0 {
+ margin-left: 0%;
+ }
+ .col-lg-offset-1 {
+ margin-left: 8.3333333333%;
+ }
+ .col-lg-offset-2 {
+ margin-left: 16.6666666667%;
+ }
+ .col-lg-offset-3 {
+ margin-left: 25%;
+ }
+ .col-lg-offset-4 {
+ margin-left: 33.3333333333%;
+ }
+ .col-lg-offset-5 {
+ margin-left: 41.6666666667%;
+ }
+ .col-lg-offset-6 {
+ margin-left: 50%;
+ }
+ .col-lg-offset-7 {
+ margin-left: 58.3333333333%;
+ }
+ .col-lg-offset-8 {
+ margin-left: 66.6666666667%;
+ }
+ .col-lg-offset-9 {
+ margin-left: 75%;
+ }
+ .col-lg-offset-10 {
+ margin-left: 83.3333333333%;
+ }
+ .col-lg-offset-11 {
+ margin-left: 91.6666666667%;
+ }
+ .col-lg-offset-12 {
+ margin-left: 100%;
+ }
+}
+
+table {
+ background-color: transparent;
+}
+
+caption {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ color: #999;
+ 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.428571429;
+ 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: #dae6cb;
+}
+
+.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: #cedeba;
+}
+
+.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: #f1e3c2;
+}
+
+.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: #ecd9ad;
+}
+
+.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: #eac3c7;
+}
+
+.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: #e3b0b5;
+}
+
+.table-responsive {
+ overflow-x: auto;
+ min-height: 0.01%;
+}
+
+@media screen and (max-width: 991px) {
+ .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: #222;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+label {
+ display: inline-block;
+ max-width: 100%;
+ margin-bottom: 5px;
+ font-weight: bold;
+}
+
+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.428571429;
+ color: #444;
+}
+
+.form-control {
+ display: block;
+ width: 100%;
+ height: 34px;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.428571429;
+ color: #444;
+ background-color: #fff;
+ background-image: none;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
+}
+
+.form-control:focus {
+ border-color: #66afe9;
+ outline: 0;
+ 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[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+ background-color: #fff;
+ 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.3333333;
+ border-radius: 3px;
+}
+
+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.3333333;
+ border-radius: 3px;
+}
+
+.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.3333333;
+}
+
+.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: #6c6c6c;
+}
+
+.has-success .form-control {
+ border-color: #6c6c6c;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.has-success .form-control:focus {
+ border-color: #525252;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #9f9f9f;
+}
+
+.has-success .input-group-addon {
+ color: #6c6c6c;
+ border-color: #6c6c6c;
+ background-color: #dae6cb;
+}
+
+.has-success .form-control-feedback {
+ color: #6c6c6c;
+}
+
+.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: #6c6c6c;
+}
+
+.has-warning .form-control {
+ border-color: #6c6c6c;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.has-warning .form-control:focus {
+ border-color: #525252;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #9f9f9f;
+}
+
+.has-warning .input-group-addon {
+ color: #6c6c6c;
+ border-color: #6c6c6c;
+ background-color: #f1e3c2;
+}
+
+.has-warning .form-control-feedback {
+ color: #6c6c6c;
+}
+
+.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: #6c6c6c;
+}
+
+.has-error .form-control {
+ border-color: #6c6c6c;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.has-error .form-control:focus {
+ border-color: #525252;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #9f9f9f;
+}
+
+.has-error .input-group-addon {
+ color: #6c6c6c;
+ border-color: #6c6c6c;
+ background-color: #eac3c7;
+}
+
+.has-error .form-control-feedback {
+ color: #6c6c6c;
+}
+
+.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: #626262;
+}
+
+@media (min-width: 992px) {
+ .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: 0;
+ margin-right: 0;
+}
+
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after {
+ content: " ";
+ display: table;
+}
+
+.form-horizontal .form-group:after {
+ clear: both;
+}
+
+@media (min-width: 992px) {
+ .form-horizontal .control-label {
+ text-align: right;
+ margin-bottom: 0;
+ padding-top: 7px;
+ }
+}
+
+.form-horizontal .has-feedback .form-control-feedback {
+ right: 0;
+}
+
+@media (min-width: 992px) {
+ .form-horizontal .form-group-lg .control-label {
+ padding-top: 14.333333px;
+ font-size: 18px;
+ }
+}
+
+@media (min-width: 992px) {
+ .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.428571429;
+ border-radius: 3px;
+ -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: #444;
+ text-decoration: none;
+}
+
+.btn:active,
+.btn.active {
+ outline: 0;
+ background-image: none;
+ 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);
+ box-shadow: none;
+}
+
+a.btn.disabled,
+fieldset[disabled] a.btn {
+ pointer-events: none;
+}
+
+.btn-default {
+ color: #444;
+ background-color: #fff;
+ border-color: #ccc;
+}
+
+.btn-default:focus,
+.btn-default.focus {
+ color: #444;
+ background-color: #e6e6e6;
+ border-color: #8c8c8c;
+}
+
+.btn-default:hover {
+ color: #444;
+ background-color: #e6e6e6;
+ border-color: #adadad;
+}
+
+.btn-default:active,
+.btn-default.active,
+.open > .btn-default.dropdown-toggle {
+ color: #444;
+ 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: #444;
+ background-color: #d4d4d4;
+ border-color: #8c8c8c;
+}
+
+.btn-default:active,
+.btn-default.active,
+.open > .btn-default.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-default.disabled,
+.btn-default.disabled:hover,
+.btn-default.disabled:focus,
+.btn-default.disabled.focus,
+.btn-default.disabled:active,
+.btn-default.disabled.active,
+.btn-default[disabled],
+.btn-default[disabled]:hover,
+.btn-default[disabled]:focus,
+.btn-default[disabled].focus,
+.btn-default[disabled]:active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default,
+fieldset[disabled] .btn-default:hover,
+fieldset[disabled] .btn-default:focus,
+fieldset[disabled] .btn-default.focus,
+fieldset[disabled] .btn-default:active,
+fieldset[disabled] .btn-default.active {
+ background-color: #fff;
+ border-color: #ccc;
+}
+
+.btn-default .badge {
+ color: #fff;
+ background-color: #444;
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #3a393b;
+ border-color: #3a393b;
+}
+
+.btn-primary:focus,
+.btn-primary.focus {
+ color: #fff;
+ background-color: #212021;
+ border-color: black;
+}
+
+.btn-primary:hover {
+ color: #fff;
+ background-color: #212021;
+ border-color: #1b1b1c;
+}
+
+.btn-primary:active,
+.btn-primary.active,
+.open > .btn-primary.dropdown-toggle {
+ color: #fff;
+ background-color: #212021;
+ border-color: #1b1b1c;
+}
+
+.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: #0f0e0f;
+ border-color: black;
+}
+
+.btn-primary:active,
+.btn-primary.active,
+.open > .btn-primary.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-primary.disabled,
+.btn-primary.disabled:hover,
+.btn-primary.disabled:focus,
+.btn-primary.disabled.focus,
+.btn-primary.disabled:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled],
+.btn-primary[disabled]:hover,
+.btn-primary[disabled]:focus,
+.btn-primary[disabled].focus,
+.btn-primary[disabled]:active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary,
+fieldset[disabled] .btn-primary:hover,
+fieldset[disabled] .btn-primary:focus,
+fieldset[disabled] .btn-primary.focus,
+fieldset[disabled] .btn-primary:active,
+fieldset[disabled] .btn-primary.active {
+ background-color: #3a393b;
+ border-color: #3a393b;
+}
+
+.btn-primary .badge {
+ color: #3a393b;
+ background-color: #fff;
+}
+
+.btn-success {
+ color: #fff;
+ background-color: #5cb85c;
+ border-color: #5cb85c;
+}
+
+.btn-success:focus,
+.btn-success.focus {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #2d672d;
+}
+
+.btn-success:hover {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #419641;
+}
+
+.btn-success:active,
+.btn-success.active,
+.open > .btn-success.dropdown-toggle {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #419641;
+}
+
+.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: #2d672d;
+}
+
+.btn-success:active,
+.btn-success.active,
+.open > .btn-success.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-success.disabled,
+.btn-success.disabled:hover,
+.btn-success.disabled:focus,
+.btn-success.disabled.focus,
+.btn-success.disabled:active,
+.btn-success.disabled.active,
+.btn-success[disabled],
+.btn-success[disabled]:hover,
+.btn-success[disabled]:focus,
+.btn-success[disabled].focus,
+.btn-success[disabled]:active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success,
+fieldset[disabled] .btn-success:hover,
+fieldset[disabled] .btn-success:focus,
+fieldset[disabled] .btn-success.focus,
+fieldset[disabled] .btn-success:active,
+fieldset[disabled] .btn-success.active {
+ background-color: #5cb85c;
+ border-color: #5cb85c;
+}
+
+.btn-success .badge {
+ color: #5cb85c;
+ background-color: #fff;
+}
+
+.btn-info {
+ color: #fff;
+ background-color: #5bc0de;
+ border-color: #5bc0de;
+}
+
+.btn-info:focus,
+.btn-info.focus {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #1f7e9a;
+}
+
+.btn-info:hover {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #2aabd2;
+}
+
+.btn-info:active,
+.btn-info.active,
+.open > .btn-info.dropdown-toggle {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #2aabd2;
+}
+
+.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: #1f7e9a;
+}
+
+.btn-info:active,
+.btn-info.active,
+.open > .btn-info.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-info.disabled,
+.btn-info.disabled:hover,
+.btn-info.disabled:focus,
+.btn-info.disabled.focus,
+.btn-info.disabled:active,
+.btn-info.disabled.active,
+.btn-info[disabled],
+.btn-info[disabled]:hover,
+.btn-info[disabled]:focus,
+.btn-info[disabled].focus,
+.btn-info[disabled]:active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info,
+fieldset[disabled] .btn-info:hover,
+fieldset[disabled] .btn-info:focus,
+fieldset[disabled] .btn-info.focus,
+fieldset[disabled] .btn-info:active,
+fieldset[disabled] .btn-info.active {
+ background-color: #5bc0de;
+ border-color: #5bc0de;
+}
+
+.btn-info .badge {
+ color: #5bc0de;
+ background-color: #fff;
+}
+
+.btn-warning {
+ color: #fff;
+ background-color: #f0ad4e;
+ border-color: #f0ad4e;
+}
+
+.btn-warning:focus,
+.btn-warning.focus {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #b06d0f;
+}
+
+.btn-warning:hover {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #eb9316;
+}
+
+.btn-warning:active,
+.btn-warning.active,
+.open > .btn-warning.dropdown-toggle {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #eb9316;
+}
+
+.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: #b06d0f;
+}
+
+.btn-warning:active,
+.btn-warning.active,
+.open > .btn-warning.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-warning.disabled,
+.btn-warning.disabled:hover,
+.btn-warning.disabled:focus,
+.btn-warning.disabled.focus,
+.btn-warning.disabled:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled],
+.btn-warning[disabled]:hover,
+.btn-warning[disabled]:focus,
+.btn-warning[disabled].focus,
+.btn-warning[disabled]:active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning,
+fieldset[disabled] .btn-warning:hover,
+fieldset[disabled] .btn-warning:focus,
+fieldset[disabled] .btn-warning.focus,
+fieldset[disabled] .btn-warning:active,
+fieldset[disabled] .btn-warning.active {
+ background-color: #f0ad4e;
+ border-color: #f0ad4e;
+}
+
+.btn-warning .badge {
+ color: #f0ad4e;
+ background-color: #fff;
+}
+
+.btn-danger {
+ color: #fff;
+ background-color: #d9534f;
+ border-color: #d9534f;
+}
+
+.btn-danger:focus,
+.btn-danger.focus {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #8b211e;
+}
+
+.btn-danger:hover {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #c12e2a;
+}
+
+.btn-danger:active,
+.btn-danger.active,
+.open > .btn-danger.dropdown-toggle {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #c12e2a;
+}
+
+.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: #8b211e;
+}
+
+.btn-danger:active,
+.btn-danger.active,
+.open > .btn-danger.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-danger.disabled,
+.btn-danger.disabled:hover,
+.btn-danger.disabled:focus,
+.btn-danger.disabled.focus,
+.btn-danger.disabled:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled],
+.btn-danger[disabled]:hover,
+.btn-danger[disabled]:focus,
+.btn-danger[disabled].focus,
+.btn-danger[disabled]:active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger,
+fieldset[disabled] .btn-danger:hover,
+fieldset[disabled] .btn-danger:focus,
+fieldset[disabled] .btn-danger.focus,
+fieldset[disabled] .btn-danger:active,
+fieldset[disabled] .btn-danger.active {
+ background-color: #d9534f;
+ border-color: #d9534f;
+}
+
+.btn-danger .badge {
+ color: #d9534f;
+ background-color: #fff;
+}
+
+.btn-link {
+ color: #3a393b;
+ font-weight: normal;
+ 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: #141314;
+ 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: #999;
+ text-decoration: none;
+}
+
+.btn-lg, .btn-group-lg > .btn {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 3px;
+}
+
+.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 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;
+ transition-property: height, visibility;
+ transition-duration: 0.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: #fcfcfc;
+ border: 1px solid #ccc;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ 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: #eee;
+}
+
+.dropdown-menu > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.428571429;
+ color: #222;
+ white-space: nowrap;
+}
+
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ text-decoration: none;
+ color: #151515;
+ 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: #3a393b;
+}
+
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ color: #999;
+}
+
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ 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.428571429;
+ color: #999;
+ 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: 992px) {
+ .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 {
+ box-shadow: inset 0 3px 5px rgba(0, 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: 3px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+ border-bottom-left-radius: 3px;
+ border-top-right-radius: 0;
+ border-top-left-radius: 0;
+}
+
+.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-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: #444;
+ text-align: center;
+ background-color: #fff;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+}
+
+.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: 3px;
+}
+
+.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: #fff;
+}
+
+.nav > li.disabled > a {
+ color: #999;
+}
+
+.nav > li.disabled > a:hover,
+.nav > li.disabled > a:focus {
+ color: #999;
+ text-decoration: none;
+ background-color: transparent;
+ cursor: not-allowed;
+}
+
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus {
+ background-color: #fff;
+ border-color: #3a393b;
+}
+
+.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.428571429;
+ border: 1px solid transparent;
+ border-radius: 3px 3px 0 0;
+}
+
+.nav-tabs > li > a:hover {
+ border-color: #fff #fff #ddd;
+}
+
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+ color: #444;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+ cursor: default;
+}
+
+.nav-pills > li {
+ float: left;
+}
+
+.nav-pills > li > a {
+ border-radius: 3px;
+}
+
+.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: #3a393b;
+}
+
+.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: 992px) {
+ .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: 3px;
+}
+
+.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: 992px) {
+ .nav-tabs-justified > li > a, .nav-tabs.nav-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 3px 3px 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: 992px) {
+ .navbar {
+ border-radius: 3px;
+ }
+}
+
+.navbar-header:before,
+.navbar-header:after {
+ content: " ";
+ display: table;
+}
+
+.navbar-header:after {
+ clear: both;
+}
+
+@media (min-width: 992px) {
+ .navbar-header {
+ float: left;
+ }
+}
+
+.navbar-collapse {
+ overflow-x: visible;
+ padding-right: 0;
+ padding-left: 0;
+ 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: 992px) {
+ .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: 0;
+ margin-left: 0;
+}
+
+@media (min-width: 992px) {
+ .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: 992px) {
+ .navbar-static-top {
+ border-radius: 0;
+ }
+}
+
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030;
+}
+
+@media (min-width: 992px) {
+ .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 0;
+ 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: 992px) {
+ .navbar > .container .navbar-brand,
+ .navbar > .container-fluid .navbar-brand {
+ margin-left: 0;
+ }
+}
+
+.navbar-toggle {
+ position: relative;
+ float: right;
+ margin-right: 0;
+ padding: 9px 10px;
+ margin-top: 8px;
+ margin-bottom: 8px;
+ background-color: transparent;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 3px;
+}
+
+.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: 992px) {
+ .navbar-toggle {
+ display: none;
+ }
+}
+
+.navbar-nav {
+ margin: 7.5px 0;
+}
+
+.navbar-nav > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 20px;
+}
+
+@media (max-width: 991px) {
+ .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: 992px) {
+ .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: 0;
+ margin-right: 0;
+ padding: 10px 0;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ 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: 992px) {
+ .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: 991px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px;
+ }
+ .navbar-form .form-group:last-child {
+ margin-bottom: 0;
+ }
+}
+
+@media (min-width: 992px) {
+ .navbar-form {
+ width: auto;
+ border: 0;
+ margin-left: 0;
+ margin-right: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ 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: 3px;
+ border-top-left-radius: 3px;
+ 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: 992px) {
+ .navbar-text {
+ float: left;
+ margin-left: 0;
+ margin-right: 0;
+ }
+}
+
+@media (min-width: 992px) {
+ .navbar-left {
+ float: left !important;
+ }
+ .navbar-right {
+ float: right !important;
+ margin-right: 0;
+ }
+ .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: 991px) {
+ .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: #bfbfbf;
+}
+
+.navbar-inverse .navbar-brand:hover,
+.navbar-inverse .navbar-brand:focus {
+ color: #fff;
+ background-color: transparent;
+}
+
+.navbar-inverse .navbar-text {
+ color: #bfbfbf;
+}
+
+.navbar-inverse .navbar-nav > li > a {
+ color: #bfbfbf;
+}
+
+.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: 991px) {
+ .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: #bfbfbf;
+ }
+ .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: #bfbfbf;
+}
+
+.navbar-inverse .navbar-link:hover {
+ color: #fff;
+}
+
+.navbar-inverse .btn-link {
+ color: #bfbfbf;
+}
+
+.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: 3px;
+}
+
+.breadcrumb > li {
+ display: inline-block;
+}
+
+.breadcrumb > li + li:before {
+ content: "/\\00a0";
+ padding: 0 5px;
+ color: #ccc;
+}
+
+.breadcrumb > .active {
+ color: #999;
+}
+
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 20px 0;
+ border-radius: 3px;
+}
+
+.pagination > li {
+ display: inline;
+}
+
+.pagination > li > a,
+.pagination > li > span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ line-height: 1.428571429;
+ text-decoration: none;
+ color: #3a393b;
+ 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: 3px;
+ border-top-left-radius: 3px;
+}
+
+.pagination > li:last-child > a,
+.pagination > li:last-child > span {
+ border-bottom-right-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.pagination > li > a:hover,
+.pagination > li > a:focus,
+.pagination > li > span:hover,
+.pagination > li > span:focus {
+ z-index: 3;
+ color: #141314;
+ background-color: #fff;
+ 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: 2;
+ color: #fff;
+ background-color: #3a393b;
+ border-color: #3a393b;
+ 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: #999;
+ 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.3333333;
+}
+
+.pagination-lg > li:first-child > a,
+.pagination-lg > li:first-child > span {
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px;
+}
+
+.pagination-lg > li:last-child > a,
+.pagination-lg > li:last-child > span {
+ border-bottom-right-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.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: #fff;
+}
+
+.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: #999;
+ background-color: #fff;
+ cursor: not-allowed;
+}
+
+.label {
+ display: inline;
+ padding: 0.2em 0.6em 0.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: #999;
+}
+
+.label-default[href]:hover,
+.label-default[href]:focus {
+ background-color: gray;
+}
+
+.label-primary {
+ background-color: #3a393b;
+}
+
+.label-primary[href]:hover,
+.label-primary[href]:focus {
+ background-color: #212021;
+}
+
+.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: #999;
+ 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: #3a393b;
+ 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: #fff;
+}
+
+.jumbotron h1,
+.jumbotron .h1 {
+ color: inherit;
+}
+
+.jumbotron p {
+ margin-bottom: 15px;
+ font-size: 21px;
+ font-weight: 200;
+}
+
+.jumbotron > hr {
+ border-top-color: #e6e6e6;
+}
+
+.container .jumbotron,
+.container-fluid .jumbotron {
+ border-radius: 3px;
+}
+
+.jumbotron .container {
+ max-width: 100%;
+}
+
+@media screen and (min-width: 992px) {
+ .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.428571429;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 3px;
+ 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: #222;
+}
+
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+ border-color: #3a393b;
+}
+
+.alert {
+ padding: 8px 15px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+ border-radius: 0;
+}
+
+.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: 8px 15px20;
+}
+
+.alert-dismissable .close, .alert-dismissible .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit;
+}
+
+.alert-success {
+ background-color: #dae6cb;
+ border-color: #8cc63f;
+ color: #6c6c6c;
+}
+
+.alert-success hr {
+ border-top-color: #7fb636;
+}
+
+.alert-success .alert-link {
+ color: #525252;
+}
+
+.alert-info {
+ background-color: #d9edf7;
+ border-color: #008abf;
+ color: #6c6c6c;
+}
+
+.alert-info hr {
+ border-top-color: #0078a6;
+}
+
+.alert-info .alert-link {
+ color: #525252;
+}
+
+.alert-warning {
+ background-color: #f1e3c2;
+ border-color: #fdb813;
+ color: #6c6c6c;
+}
+
+.alert-warning hr {
+ border-top-color: #f4ad02;
+}
+
+.alert-warning .alert-link {
+ color: #525252;
+}
+
+.alert-danger {
+ background-color: #eac3c7;
+ border-color: #d9182d;
+ color: #6c6c6c;
+}
+
+.alert-danger hr {
+ border-top-color: #c21528;
+}
+
+.alert-danger .alert-link {
+ color: #525252;
+}
+
+@-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: 3px;
+ 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: #3a393b;
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ transition: width 0.6s ease;
+}
+
+.progress-striped .progress-bar,
+.progress-bar-striped {
+ 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;
+ 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, 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: 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: 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: 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: 3px;
+ border-top-left-radius: 3px;
+}
+
+.list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+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: #fff;
+ color: #999;
+ 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: #999;
+}
+
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #3a393b;
+ border-color: #3a393b;
+}
+
+.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: #a09ea2;
+}
+
+.list-group-item-success {
+ color: #6c6c6c;
+ background-color: #dae6cb;
+}
+
+a.list-group-item-success,
+button.list-group-item-success {
+ color: #6c6c6c;
+}
+
+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: #6c6c6c;
+ background-color: #cedeba;
+}
+
+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: #6c6c6c;
+ border-color: #6c6c6c;
+}
+
+.list-group-item-info {
+ color: #6c6c6c;
+ background-color: #d9edf7;
+}
+
+a.list-group-item-info,
+button.list-group-item-info {
+ color: #6c6c6c;
+}
+
+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: #6c6c6c;
+ 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: #6c6c6c;
+ border-color: #6c6c6c;
+}
+
+.list-group-item-warning {
+ color: #6c6c6c;
+ background-color: #f1e3c2;
+}
+
+a.list-group-item-warning,
+button.list-group-item-warning {
+ color: #6c6c6c;
+}
+
+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: #6c6c6c;
+ background-color: #ecd9ad;
+}
+
+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: #6c6c6c;
+ border-color: #6c6c6c;
+}
+
+.list-group-item-danger {
+ color: #6c6c6c;
+ background-color: #eac3c7;
+}
+
+a.list-group-item-danger,
+button.list-group-item-danger {
+ color: #6c6c6c;
+}
+
+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: #6c6c6c;
+ background-color: #e3b0b5;
+}
+
+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: #6c6c6c;
+ border-color: #6c6c6c;
+}
+
+.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: 3px;
+ 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: 2px;
+ border-top-left-radius: 2px;
+}
+
+.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: 2px;
+ border-bottom-left-radius: 2px;
+}
+
+.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: 2px;
+ border-top-left-radius: 2px;
+}
+
+.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: 2px;
+ border-bottom-left-radius: 2px;
+}
+
+.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: 2px;
+ border-top-left-radius: 2px;
+}
+
+.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: 2px;
+ border-top-right-radius: 2px;
+}
+
+.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: 2px;
+}
+
+.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: 2px;
+}
+
+.panel > .table:last-child,
+.panel > .table-responsive:last-child > .table:last-child {
+ border-bottom-right-radius: 2px;
+ border-bottom-left-radius: 2px;
+}
+
+.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: 2px;
+ border-bottom-right-radius: 2px;
+}
+
+.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: 2px;
+}
+
+.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: 2px;
+}
+
+.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: 3px;
+}
+
+.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: #222;
+ 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: #222;
+}
+
+.panel-default > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #ddd;
+}
+
+.panel-primary {
+ border-color: #3a393b;
+}
+
+.panel-primary > .panel-heading {
+ color: #fff;
+ background-color: #3a393b;
+ border-color: #3a393b;
+}
+
+.panel-primary > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #3a393b;
+}
+
+.panel-primary > .panel-heading .badge {
+ color: #3a393b;
+ background-color: #fff;
+}
+
+.panel-primary > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #3a393b;
+}
+
+.panel-success {
+ border-color: #8cc63f;
+}
+
+.panel-success > .panel-heading {
+ color: #6c6c6c;
+ background-color: #dae6cb;
+ border-color: #8cc63f;
+}
+
+.panel-success > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #8cc63f;
+}
+
+.panel-success > .panel-heading .badge {
+ color: #dae6cb;
+ background-color: #6c6c6c;
+}
+
+.panel-success > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #8cc63f;
+}
+
+.panel-info {
+ border-color: #008abf;
+}
+
+.panel-info > .panel-heading {
+ color: #6c6c6c;
+ background-color: #d9edf7;
+ border-color: #008abf;
+}
+
+.panel-info > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #008abf;
+}
+
+.panel-info > .panel-heading .badge {
+ color: #d9edf7;
+ background-color: #6c6c6c;
+}
+
+.panel-info > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #008abf;
+}
+
+.panel-warning {
+ border-color: #fdb813;
+}
+
+.panel-warning > .panel-heading {
+ color: #6c6c6c;
+ background-color: #f1e3c2;
+ border-color: #fdb813;
+}
+
+.panel-warning > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #fdb813;
+}
+
+.panel-warning > .panel-heading .badge {
+ color: #f1e3c2;
+ background-color: #6c6c6c;
+}
+
+.panel-warning > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #fdb813;
+}
+
+.panel-danger {
+ border-color: #d9182d;
+}
+
+.panel-danger > .panel-heading {
+ color: #6c6c6c;
+ background-color: #eac3c7;
+ border-color: #d9182d;
+}
+
+.panel-danger > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #d9182d;
+}
+
+.panel-danger > .panel-heading .badge {
+ color: #eac3c7;
+ background-color: #6c6c6c;
+}
+
+.panel-danger > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #d9182d;
+}
+
+.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: 3px;
+ 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: 3px;
+}
+
+.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%);
+ transform: translate(0, -25%);
+ transition: -webkit-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);
+ 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 #aaa;
+ border: 1px solid rgba(170, 170, 170, 0.3);
+ border-radius: 3px;
+ 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: #fff;
+}
+
+.modal-backdrop.fade {
+ opacity: 0;
+ filter: alpha(opacity=0);
+}
+
+.modal-backdrop.in {
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+}
+
+.modal-header {
+ padding: 27px 14px 14px 30px;
+ border-bottom: 1px solid transparent;
+ min-height: 27px 14px 14px 30px23px;
+}
+
+.modal-header .close {
+ margin-top: -2px;
+}
+
+.modal-title {
+ margin: 0;
+ line-height: 23px;
+}
+
+.modal-body {
+ position: relative;
+ padding: 20px 30px;
+}
+
+.modal-footer {
+ padding: 20px 30px;
+ text-align: right;
+ border-top: 1px solid transparent;
+}
+
+.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: 992px) {
+ .modal-dialog {
+ width: 824px;
+ margin: 30px auto;
+ }
+ .modal-content {
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
+ }
+ .modal-sm {
+ width: 524px;
+ }
+}
+
+@media (min-width: 1200px) {
+ .modal-lg {
+ width: 1124px;
+ }
+}
+
+.tooltip {
+ position: absolute;
+ z-index: 1070;
+ display: block;
+ font-family: "HelveticaNeueMedium", "HelveticaNeue-Medium", "Helvetica Neue Medium", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-style: normal;
+ font-weight: normal;
+ letter-spacing: normal;
+ line-break: auto;
+ line-height: 1.428571429;
+ 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: 3px;
+}
+
+.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: "HelveticaNeueMedium", "HelveticaNeue-Medium", "Helvetica Neue Medium", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-style: normal;
+ font-weight: normal;
+ letter-spacing: normal;
+ line-break: auto;
+ line-height: 1.428571429;
+ 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: 3px;
+ 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: 2px 2px 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;
+ 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 {
+ transition: -webkit-transform 0.6s ease-in-out;
+ transition: transform 0.6s ease-in-out;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-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);
+}
+
+.carousel-control.left {
+ 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: 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: 992px) {
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-prev,
+ .carousel-control .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ font-size: 30px;
+ }
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .icon-prev {
+ margin-left: -15px;
+ }
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-next {
+ margin-right: -15px;
+ }
+ .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: 991px) {
+ .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: 991px) {
+ .visible-xs-block {
+ display: block !important;
+ }
+}
+
+@media (max-width: 991px) {
+ .visible-xs-inline {
+ display: inline !important;
+ }
+}
+
+@media (max-width: 991px) {
+ .visible-xs-inline-block {
+ display: inline-block !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .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: 992px) and (max-width: 1199px) {
+ .visible-sm-block {
+ display: block !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-sm-inline {
+ display: inline !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-sm-inline-block {
+ display: inline-block !important;
+ }
+}
+
+@media (min-width: 1200px) and (max-width: 1679) {
+ .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: 1200px) and (max-width: 1679) {
+ .visible-md-block {
+ display: block !important;
+ }
+}
+
+@media (min-width: 1200px) and (max-width: 1679) {
+ .visible-md-inline {
+ display: inline !important;
+ }
+}
+
+@media (min-width: 1200px) and (max-width: 1679) {
+ .visible-md-inline-block {
+ display: inline-block !important;
+ }
+}
+
+@media (min-width: 1680) {
+ .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: 1680) {
+ .visible-lg-block {
+ display: block !important;
+ }
+}
+
+@media (min-width: 1680) {
+ .visible-lg-inline {
+ display: inline !important;
+ }
+}
+
+@media (min-width: 1680) {
+ .visible-lg-inline-block {
+ display: inline-block !important;
+ }
+}
+
+@media (max-width: 991px) {
+ .hidden-xs {
+ display: none !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-sm {
+ display: none !important;
+ }
+}
+
+@media (min-width: 1200px) and (max-width: 1679) {
+ .hidden-md {
+ display: none !important;
+ }
+}
+
+@media (min-width: 1680) {
+ .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;
+ }
+}
+
+/*
+The MIT License (MIT)
+
+Copyright (c) 2013-2015 bootstrap-select
+
+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. */
+.bootstrap-select {
+ /*width: 220px\9; IE8 and below*/
+ width: 220px \0;
+ /*IE9 and below*/
+}
+
+.bootstrap-select > .btn {
+ width: 100%;
+ height: 40px;
+ padding-right: 25px;
+}
+
+.error .bootstrap-select .btn {
+ border: 1px solid #b94a48;
+}
+
+.control-group.error .bootstrap-select .dropdown-toggle {
+ border-color: #b94a48;
+}
+
+.bootstrap-select.fit-width {
+ width: auto !important;
+}
+
+.bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) {
+ width: 220px;
+}
+
+.bootstrap-select .btn:focus {
+ outline: thin dotted #333333 !important;
+ outline: 5px auto -webkit-focus-ring-color !important;
+ outline-offset: -2px;
+}
+
+.bootstrap-select.form-control {
+ margin-bottom: 0;
+ padding: 0;
+ border: none;
+}
+
+.bootstrap-select.form-control:not([class*="col-"]) {
+ width: 100%;
+}
+
+.bootstrap-select.btn-group:not(.input-group-btn),
+.bootstrap-select.btn-group[class*="col-"] {
+ float: none;
+ display: inline-block;
+ margin-left: 0;
+}
+
+.bootstrap-select.btn-group.dropdown-menu-right,
+.bootstrap-select.btn-group[class*="col-"].dropdown-menu-right,
+.row-fluid .bootstrap-select.btn-group[class*="col-"].dropdown-menu-right {
+ float: right;
+}
+
+.form-search .bootstrap-select.btn-group,
+.form-inline .bootstrap-select.btn-group,
+.form-horizontal .bootstrap-select.btn-group,
+.form-group .bootstrap-select.btn-group {
+ margin-bottom: 0;
+}
+
+.form-group-lg .bootstrap-select.btn-group.form-control,
+.form-group-sm .bootstrap-select.btn-group.form-control {
+ padding: 0;
+}
+
+.form-inline .bootstrap-select.btn-group .form-control {
+ width: 100%;
+}
+
+.input-append .bootstrap-select.btn-group {
+ margin-left: -1px;
+}
+
+.input-prepend .bootstrap-select.btn-group {
+ margin-right: -1px;
+}
+
+.bootstrap-select.btn-group > .disabled {
+ cursor: not-allowed;
+}
+
+.bootstrap-select.btn-group > .disabled:focus {
+ outline: none !important;
+}
+
+.bootstrap-select.btn-group .btn .filter-option {
+ display: inline-block;
+ overflow: hidden;
+ width: 100%;
+ text-align: left;
+}
+
+.bootstrap-select.btn-group .btn .caret {
+ position: absolute;
+ top: 0;
+ right: 40px;
+ margin-top: 0;
+ vertical-align: top;
+ border: 0;
+ border-left: 1px solid #ccc;
+ height: 38px;
+}
+
+.bootstrap-select.btn-group .btn .caret:before {
+ content: '\e861';
+ font-family: "fontello";
+ font-size: 15px;
+ color: #666666;
+ position: absolute;
+ left: 12px;
+ top: 9px;
+ display: block;
+}
+
+.bootstrap-select.btn-group .btn:hover .caret {
+ border-color: #adadad;
+}
+
+.bootstrap-select.btn-group .btn:focus .caret {
+ border-color: #8c8c8c;
+}
+
+.bootstrap-select.btn-group[class*="col-"] .btn {
+ width: 100%;
+}
+
+.bootstrap-select.btn-group .dropdown-menu {
+ min-width: 100%;
+ z-index: 1035;
+ box-sizing: border-box;
+}
+
+.bootstrap-select.btn-group .dropdown-menu.inner {
+ position: static;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ border-radius: 0;
+ box-shadow: none;
+}
+
+.bootstrap-select.btn-group .dropdown-menu li {
+ position: relative;
+}
+
+.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) a:hover small,
+.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) a:focus small,
+.bootstrap-select.btn-group .dropdown-menu li.active:not(.disabled) a small {
+ color: #64b1d8;
+ color: fade(#64b1d8, 40%);
+}
+
+.bootstrap-select.btn-group .dropdown-menu li.disabled a {
+ cursor: not-allowed;
+}
+
+.bootstrap-select.btn-group .dropdown-menu li a {
+ outline: none;
+ cursor: pointer;
+}
+
+.bootstrap-select.btn-group .dropdown-menu li a.opt {
+ position: relative;
+ padding-left: 2.25em;
+}
+
+.bootstrap-select.btn-group .dropdown-menu li a span.check-mark {
+ display: none;
+}
+
+.bootstrap-select.btn-group .dropdown-menu li a span.text {
+ display: inline-block;
+}
+
+.bootstrap-select.btn-group .dropdown-menu li small {
+ padding-left: 0.5em;
+}
+
+.bootstrap-select.btn-group .dropdown-menu .notify {
+ position: absolute;
+ bottom: 5px;
+ width: 96%;
+ margin: 0 2%;
+ min-height: 26px;
+ padding: 3px 5px;
+ background: whitesmoke;
+ border: 1px solid #e3e3e3;
+ box-shadow: inset 0 1px 1px fade(black, 5%);
+ pointer-events: none;
+ opacity: 0.9;
+ box-sizing: border-box;
+}
+
+.bootstrap-select.btn-group .no-results {
+ padding: 3px;
+ background: #f5f5f5;
+ margin: 0 5px;
+}
+
+.bootstrap-select.btn-group.fit-width .btn .filter-option {
+ position: static;
+}
+
+.bootstrap-select.btn-group.fit-width .btn .caret {
+ position: static;
+ top: auto;
+ margin-top: -1px;
+}
+
+.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark {
+ position: absolute;
+ display: inline-block;
+ right: 15px;
+ margin-top: 5px;
+}
+
+.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text {
+ margin-right: 34px;
+}
+
+.bootstrap-select.show-menu-arrow.open > .btn {
+ z-index: 1036;
+}
+
+.bootstrap-select.show-menu-arrow .dropdown-toggle:before {
+ content: '';
+ border-left: 7px solid transparent;
+ border-right: 7px solid transparent;
+ border-bottom-width: 7px;
+ border-bottom-style: solid;
+ border-bottom-color: #cccccc;
+ border-bottom-color: fade(#cccccc, 20%);
+ position: absolute;
+ bottom: -4px;
+ left: 9px;
+ display: none;
+}
+
+.bootstrap-select.show-menu-arrow .dropdown-toggle:after {
+ content: '';
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ border-bottom: 6px solid white;
+ position: absolute;
+ bottom: -4px;
+ left: 10px;
+ display: none;
+}
+
+.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before {
+ bottom: auto;
+ top: -3px;
+ border-bottom: 0;
+ border-top-width: 7px;
+ border-top-style: solid;
+ border-top-color: #cccccc;
+ border-top-color: fade(#cccccc, 20%);
+}
+
+.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after {
+ bottom: auto;
+ top: -3px;
+ border-top: 6px solid white;
+ border-bottom: 0;
+}
+
+.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before {
+ right: 12px;
+ left: auto;
+}
+
+.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after {
+ right: 13px;
+ left: auto;
+}
+
+.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:before,
+.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:after {
+ display: block;
+}
+
+.bootstrap-select.btn-group.open .btn .caret {
+ border-left-color: #adadad;
+}
+
+.bootstrap-select.btn-group.open .btn:hover .caret {
+ border-left-color: #8c8c8c;
+}
+
+.bs-searchbox,
+.bs-actionsbox {
+ padding: 4px 8px;
+}
+
+.bs-actionsbox {
+ float: left;
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.bs-actionsbox .btn-group button {
+ width: 50%;
+}
+
+.bs-searchbox + .bs-actionsbox {
+ padding: 0 8px 4px;
+}
+
+.bs-searchbox input.form-control {
+ margin-bottom: 0;
+ width: 100%;
+}
+
+.mobile-device {
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: block !important;
+ width: 100%;
+ height: 100% !important;
+ opacity: 0;
+}
+
+.container {
+ margin-right: auto;
+ margin-left: auto;
+ padding-left: 80px !important;
+ padding-right: 60px !important;
+}
+
+.alert {
+ border-width: 0 0 0 5px;
+}
+
+/* Body specs */
+body {
+ color: #222;
+ background: #fff;
+}
+
+/* Message warning users that some features might not be supported in old browsers */
+.browserupgrade {
+ margin: 0.2em 0;
+ background: #ccc;
+ color: #000;
+ padding: 0.2em 0;
+}
+
+/* Topbar */
+.topbar {
+ padding: 0;
+ background: #222;
+}
+
+.topbar .banner-area {
+ background: #222;
+}
+
+.topbar .banner-area h1 {
+ margin: 0 0 0 -80px;
+ padding: 0 0 0 80px;
+ height: 55px;
+ background: transparent url("../images/logo-white.png") no-repeat 24px 3px;
+ color: #fff;
+ font-family: "HelveticaNeueBold", "HelveticaNeue-Bold", "HelveticaNeue Bold", "Helvetica Neue Bold", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-weight: 600;
+ font-size: 1.571em;
+ line-height: 55px;
+ cursor: default;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.topbar .tab-area {
+ background: #3a393b;
+ height: 40px;
+}
+
+.topbar .tab-area span.hostname {
+ display: inline-block;
+ font-family: "Helvetica Neue LT W1G 55 Roman", "Helvetica Neue LT W1G", "HelveticaNeue Roman", "HelveticaNeue-Roman", "Helvetica Neue Roman", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ color: #fff;
+ font-size: 13pt;
+ font-weight: 400;
+ margin: 0;
+ padding: 8px 0;
+ vertical-align: top;
+ box-sizing: border-box;
+}
+
+.topbar .tab-area ul.nav-menu {
+ display: inline-block;
+ list-style: none;
+ list-style-position: inside;
+ padding: 0;
+ margin: 0 0 0 24px;
+}
+
+.topbar .tab-area ul.nav-menu li {
+ float: left;
+ display: block;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.topbar .tab-area ul.nav-menu li a, .topbar .tab-area ul.nav-menu li .disabled {
+ display: block;
+ font-family: "HelveticaNeueBold", "HelveticaNeue-Bold", "HelveticaNeue Bold", "Helvetica Neue Bold", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-weight: 600;
+ color: #fff;
+ text-decoration: none;
+ font-size: 13pt;
+ padding: 8px 40px;
+ min-width: 190px;
+ text-align: center;
+ outline: none;
+}
+
+.topbar .tab-area ul.nav-menu li .disabled {
+ color: #999;
+ cursor: default;
+}
+
+.topbar .tab-area ul.nav-menu li .disabled .digit-container {
+ display: none;
+}
+
+.topbar .tab-area ul.nav-menu li .digit-container {
+ display: inline-block;
+ margin-left: 10px;
+ border-radius: 16px;
+ height: 22px;
+ background: #555;
+ border: 2px solid #555;
+ color: #fff;
+ font-family: "HelveticaNeueMedium", "HelveticaNeue-Medium", "Helvetica Neue Medium", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-size: 14px;
+ padding: 0 8px;
+}
+
+.topbar .tab-area ul.nav-menu li.current .digit-container {
+ border-color: #fff;
+ background: transparent;
+}
+
+.topbar .tab-area ul.nav-menu li.current.hosts {
+ background: #008abf;
+}
+
+.topbar .tab-area ul.nav-menu li.current.guests {
+ background: #8cc63f;
+}
+
+.topbar .tab-area ul.nav-menu li.current.templates {
+ background: #00a6a0;
+}
+
+.topbar .tab-area ul.nav-menu li.current.storage {
+ background: #feb813;
+}
+
+.topbar .tab-area ul.nav-menu li.current.networks {
+ background: #7f1c7d;
+}
+
+.topbar .tab-area ul.nav-menu li.current.administration {
+ background: #d9182d;
+}
+
+.topbar .panel-actions-area {
+ min-height: 40px;
+}
+
+.login-area {
+ margin: 90px auto 0;
+ width: 300px;
+}
+
+.login-area .btn-login {
+ display: block;
+ position: static;
+ float: none;
+ margin-bottom: 50px;
+}
+
+.login-area .col-md-12, .login-area .col-lg-12 {
+ width: 100%;
+}
+
+.login-area .bootstrap-select,
+.login-area .selectpicker {
+ font-family: "HelveticaNeueLight", "HelveticaNeue-Light", "HelveticaNeue Light", "HelveticaNeue", "HelveticaNeue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-size: 13pt;
+}
+
+.login-area .dropdown-toggle.selectpicker {
+ height: 40px;
+}
+
+.login-area .form-group {
+ margin-bottom: 20px;
+}
+
+.login-area .form-group:last-child {
+ margin-bottom: 0;
+}
+
+.btn {
+ font-family: "HelveticaNeueMedium", "HelveticaNeue-Medium", "Helvetica Neue Medium", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-size: 13pt;
+}
+
+.btn-login {
+ color: #fff;
+ background-color: #008abf;
+ border-color: #008abf;
+}
+
+.btn-login:focus,
+.btn-login.focus {
+ color: #fff;
+ background-color: #00658c;
+ border-color: #002e40;
+}
+
+.btn-login:hover {
+ color: #fff;
+ background-color: #00658c;
+ border-color: #005e82;
+}
+
+.btn-login:active,
+.btn-login.active,
+.open > .btn-login.dropdown-toggle {
+ color: #fff;
+ background-color: #00658c;
+ border-color: #005e82;
+}
+
+.btn-login:active:hover,
+.btn-login:active:focus,
+.btn-login:active.focus,
+.btn-login.active:hover,
+.btn-login.active:focus,
+.btn-login.active.focus,
+.open > .btn-login.dropdown-toggle:hover,
+.open > .btn-login.dropdown-toggle:focus,
+.open > .btn-login.dropdown-toggle.focus {
+ color: #fff;
+ background-color: #004b68;
+ border-color: #002e40;
+}
+
+.btn-login:active,
+.btn-login.active,
+.open > .btn-login.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-login.disabled,
+.btn-login.disabled:hover,
+.btn-login.disabled:focus,
+.btn-login.disabled.focus,
+.btn-login.disabled:active,
+.btn-login.disabled.active,
+.btn-login[disabled],
+.btn-login[disabled]:hover,
+.btn-login[disabled]:focus,
+.btn-login[disabled].focus,
+.btn-login[disabled]:active,
+.btn-login[disabled].active,
+fieldset[disabled] .btn-login,
+fieldset[disabled] .btn-login:hover,
+fieldset[disabled] .btn-login:focus,
+fieldset[disabled] .btn-login.focus,
+fieldset[disabled] .btn-login:active,
+fieldset[disabled] .btn-login.active {
+ background-color: #008abf;
+ border-color: #008abf;
+}
+
+.btn-login .badge {
+ color: #008abf;
+ background-color: #fff;
+}
+
+/*
+* Project Kimchi
+*
+* Copyright IBM, Corp. 2015
+*
+* Licensed under the Apache License, Version 2.0 (the 'License');
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an 'AS IS' BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+.dialog-border-grey {
+ background-clip: border-box;
+ border: 6px solid rgba(170, 170, 170, 0.3);
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ margin: auto;
+ border-radius: 5px;
+}
+
+.dialog-container {
+ border: 3px solid #999999;
+ background: white;
+}
+
+.dialog-container .dialog-title {
+ height: 60px;
+ padding: 20px 0 20px 20px;
+ margin: 0;
+ float: left;
+ font-size: 27px;
+ font-family: "HelveticaNeueLight", "HelveticaNeue-Light", "HelveticaNeue Light", "HelveticaNeue", "HelveticaNeue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-weight: 300 !important;
+}
+
+.dialog-container .dialog-body {
+ position: relative;
+}
+
+.dialog-container .dialog-footer {
+ height: 50px;
+ background-color: #008ABF;
+}
+
+.dialog-container .dialog-footer .dialog-button {
+ display: inline-block;
+ background-color: white;
+ width: 75px;
+ height: 30px;
+ line-height: 30px;
+ position: relative;
+ margin-left: 10px;
+ margin-top: 10px;
+ text-align: center;
+ vertical-align: middle;
+}
+
+.dialog-container .dialog-footer .dialog-button:hover {
+ background-color: #EEEEEE;
+ cursor: pointer;
+}
+
+/*
+* Project Kimchi
+*
+* Copyright IBM, Corp. 2015
+*
+* Licensed under the Apache License, Version 2.0 (the 'License');
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an 'AS IS' BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+.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%);
+ transform: translate(0, -25%);
+ transition: -webkit-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);
+ transform: translate(0, 0);
+}
+
+.modal-open .modal {
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 10px;
+ border: 6px solid #aaa;
+ border: 6px solid rgba(170, 170, 170, 0.3);
+ border-radius: 5px;
+ background-clip: padding-box;
+}
+
+.modal-content {
+ position: relative;
+ background-color: #fff;
+ border-radius: 0;
+ border: 3px solid #999;
+ background-clip: padding-box;
+ box-shadow: none !important;
+ border-radius: 0;
+ outline: 0;
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ background-color: #fff;
+}
+
+.modal-backdrop.fade {
+ opacity: 0;
+ filter: alpha(opacity=0);
+}
+
+.modal-backdrop.in {
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+}
+
+.modal-header {
+ padding: 27px 14px 14px 30px;
+ border-bottom: 1px solid transparent;
+ min-height: 27px 14px 14px 30px23px;
+}
+
+.modal-header .close {
+ margin-top: -2px;
+}
+
+.modal-title {
+ margin: 0;
+ line-height: 23px;
+ font-size: 27px;
+ font-family: "HelveticaNeueLight", "HelveticaNeue-Light", "HelveticaNeue Light", "HelveticaNeue", "HelveticaNeue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-weight: 300 !important;
+}
+
+.modal-body {
+ position: relative;
+ padding: 20px 30px;
+}
+
+.modal-footer {
+ padding: 20px 30px;
+ text-align: left !important;
+ border-top: 0;
+ margin-top: 20px;
+}
+
+.modal-footer:before,
+.modal-footer:after {
+ content: " ";
+ display: table;
+}
+
+.modal-footer:after {
+ clear: both;
+}
+
+.modal-footer .btn {
+ padding: 6px 12px;
+ min-width: 75px;
+}
+
+.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: 992px) {
+ .modal-dialog {
+ width: 824px;
+ margin: 30px auto;
+ }
+ .modal-content {
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
+ }
+ .modal-sm {
+ width: 524px;
+ }
+}
+
+@media (min-width: 1200px) {
+ .modal-lg {
+ width: 1124px;
+ }
+}
+
+.modal {
+ text-align: center;
+}
+
+@media screen and (min-width: 768px) {
+ .modal:before {
+ display: inline-block;
+ vertical-align: middle;
+ content: " ";
+ height: 100%;
+ }
+}
+
+.modal-dialog {
+ display: inline-block;
+ text-align: left;
+ vertical-align: middle;
+}
+
+/*
+* Project Kimchi
+*
+* Copyright IBM, Corp. 2015
+*
+* Licensed under the Apache License, Version 2.0 (the 'License');
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an 'AS IS' BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+.menu-flat .btn {
+ background: #4d4c4e !important;
+ min-width: 160px;
+ border: 0 !important;
+ font-family: "HelveticaNeueBold", "HelveticaNeue-Bold", "HelveticaNeue Bold", "Helvetica Neue Bold", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, "Lucida Grande", sans-serif;
+ font-weight: 700;
+ font-size: 13.5pt;
+ position: relative;
+ height: 40px;
+ padding: 4px 45px 5px 38px;
+}
+
+.menu-flat .btn > i {
+ font-size: 22px;
+ vertical-align: bottom;
+ width: 26px;
+ height: 40px;
+ text-align: left;
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 6px;
+}
+
+.menu-flat .btn > i:before {
+ line-height: 40px;
+}
+
+.menu-flat .caret {
+ position: absolute;
+ top: 0;
+ right: 0;
+ display: block;
+ width: 40px;
+ height: 40px;
+ margin-left: 0;
+ vertical-align: middle;
+ border-top: 0;
+ border-top: 0 \9;
+ border-right: 0;
+ border-left: 0;
+}
+
+.menu-flat .caret:before {
+ font-family: "fontello";
+ font-style: normal;
+ font-weight: normal;
+ font-size: 13px;
+ speak: none;
+ display: inline-block;
+ text-decoration: inherit;
+ width: 1.2em;
+ height: 1.2em;
+ margin: .5em;
+ text-align: center;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 2em;
+ content: '\e861';
+}
+
+.menu-flat.dropup,
+.menu-flat.dropdown {
+ position: relative;
+}
+
+.menu-flat .dropdown-toggle:focus {
+ outline: 0;
+}
+
+.menu-flat .dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ font-size: 13.5pt;
+ text-align: left;
+ background-color: #3a393b;
+ border: 0;
+ border-radius: 0;
+ box-shadow: none !important;
+ background-clip: padding-box;
+}
+
+.menu-flat .dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+
+.menu-flat .dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #404042;
+}
+
+.menu-flat .dropdown-menu > li > a {
+ border-top: 1px solid #2e2e2e;
+ box-shadow: inset 0px 1px 0px 0px #404042;
+}
+
+.menu-flat .dropdown-menu > li:first-child > a {
+ border-top: 1px solid #3a393b;
+ box-shadow: none;
+}
+
+.menu-flat .dropdown-menu > li.critical:last-child > a {
+ box-shadow: none;
+}
+
+.menu-flat .dropdown-menu > li > a {
+ display: block;
+ padding: 4px 6px;
+ clear: both;
+ font-weight: normal;
+ line-height: 31px;
+ color: #fff;
+ white-space: nowrap;
+}
+
+.menu-flat .dropdown-menu > li > a > i {
+ font-size: 22px;
+ margin-right: 10px;
+ vertical-align: top;
+ width: 26px;
+ height: 26px;
+ text-align: left;
+ display: inline-block;
+}
+
+.menu-flat .dropdown-menu > li > a:hover,
+.menu-flat .dropdown-menu > li > a:focus {
+ text-decoration: none;
+ color: #fff;
+ background-color: #3a393b;
+}
+
+.menu-flat .dropdown-menu > .active > a,
+.menu-flat .dropdown-menu > .active > a:hover,
+.menu-flat .dropdown-menu > .active > a:focus {
+ color: #fff;
+ text-decoration: none;
+ outline: 0;
+ background-color: #3a393b;
+}
+
+.menu-flat .dropdown-menu > li.critical > a {
+ background: #d9182d;
+}
+
+.menu-flat .dropdown-menu > .disabled > a,
+.menu-flat .dropdown-menu > .disabled > a:hover,
+.menu-flat .dropdown-menu > .disabled > a:focus {
+ color: #999;
+}
+
+.menu-flat .dropdown-menu > .disabled > a:hover,
+.menu-flat .dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ cursor: not-allowed;
+}
+
+.menu-flat.open .btn {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.menu-flat.open > .dropdown-menu {
+ display: block;
+}
+
+.menu-flat.open .caret {
+ background: #3a393b;
+}
+
+.menu-flat.open .caret:before {
+ content: '\e864';
+}
+
+.menu-flat.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.428571429;
+ color: #999;
+ 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: 992px) {
+ .navbar-right .dropdown-menu {
+ right: 0;
+ left: auto;
+ }
+ .navbar-right .dropdown-menu-left {
+ left: 0;
+ right: auto;
+ }
+}
+
+.hosts {
+ /* Bootstrap Modal*/
+}
+
+.hosts .modal-footer {
+ background: #008abf;
+}
+
+pre {
+ margin-top: 20px;
+}
+
+@media screen and (min-width: 768px) {
+ .container {
+ width: 1540px;
+ }
+}
+
+@media screen and (min-width: 1680px) {
+ .container {
+ width: 1540px;
+ }
+}
+
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uc2NzcyIsIm1vZHVsZXMvX3Jlc2V0LnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL2Z1bmN0aW9ucy9fbGlzdHMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvZnVuY3Rpb25zL19jb25zdGFudHMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvZnVuY3Rpb25zL19kaXNwbGF5LnNjc3MiLCJtb2R1bGVzL19ib290c3RyYXAuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fbm9ybWFsaXplLnNjc3MiLCJtYWluLmNzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fcHJpbnQuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fZ2x5cGhpY29ucy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19zY2FmZm9sZGluZy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fdmVuZG9yLXByZWZpeGVzLnNjc3MiLCJtb2R1bGVzL19raW1jaGktdmFyaWFibGVzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zL190YWItZm9jdXMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX2ltYWdlLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvX3R5cGUuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX3RleHQtZW1waGFzaXMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX2JhY2tncm91bmQtdmFyaWFudC5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fY2xlYXJmaXguc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX3RleHQtb3ZlcmZsb3cuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fY29kZS5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19ncmlkLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zL19ncmlkLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zL19ncmlkLWZyYW1ld29yay5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL190YWJsZXMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX3RhYmxlLXJvdy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19mb3Jtcy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fZm9ybXMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fYnV0dG9ucy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fYnV0dG9ucy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fb3BhY2l0eS5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19jb21wb25lbnQtYW5pbWF0aW9ucy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19kcm9wZG93bnMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX25hdi1kaXZpZGVyLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zL19yZXNldC1maWx0ZXIuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fYnV0dG9uLWdyb3Vwcy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fYm9yZGVyLXJhZGl1cy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19pbnB1dC1ncm91cHMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fbmF2cy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19uYXZiYXIuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX25hdi12ZXJ0aWNhbC1hbGlnbi5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19icmVhZGNydW1icy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19wYWdpbmF0aW9uLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zL19wYWdpbmF0aW9uLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvX3BhZ2VyLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvX2xhYmVscy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fbGFiZWxzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvX2JhZGdlcy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19qdW1ib3Ryb24uc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fdGh1bWJuYWlscy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19hbGVydHMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX2FsZXJ0cy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19wcm9ncmVzcy1iYXJzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zL19ncmFkaWVudHMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX3Byb2dyZXNzLWJhci5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19tZWRpYS5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19saXN0LWdyb3VwLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zL19saXN0LWdyb3VwLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvX3BhbmVscy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fcGFuZWxzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvX3Jlc3BvbnNpdmUtZW1iZWQuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fd2VsbHMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fY2xvc2Uuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fbW9kYWxzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvX3Rvb2x0aXAuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX3Jlc2V0LXRleHQuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fcG9wb3ZlcnMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fY2Fyb3VzZWwuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9fdXRpbGl0aWVzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWl4aW5zL19jZW50ZXItYmxvY2suc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnMvX2hpZGUtdGV4dC5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL19yZXNwb25zaXZlLXV0aWxpdGllcy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL21peGlucy9fcmVzcG9uc2l2ZS12aXNpYmlsaXR5LnNjc3MiLCJtb2R1bGVzL19ib290c3RyYXAtc2VsZWN0LnNjc3MiLCJtb2R1bGVzL19iYXNlLnNjc3MiLCJtb2R1bGVzL190b3BiYXIuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvY29tcGFzcy1taXhpbnMvbGliL2NvbXBhc3MvY3NzMy9fc2hhcmVkLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL2NzczMvX3VzZXItaW50ZXJmYWNlLnNjc3MiLCJtb2R1bGVzL19sb2dpbi5zY3NzIiwibW9kdWxlcy9fYnV0dG9ucy5zY3NzIiwibW9kdWxlcy9fZGlhbG9nLWZsYXQuc2NzcyIsIm1vZHVsZXMvX21vZGFsLWZsYXQuc2NzcyIsIm1vZHVsZXMvX21lbnUtZmxhdC5zY3NzIiwibW9kdWxlcy9fY29sb3JzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUNoQkgsV0FBVztBQU9DOzs7Ozs7RUFDUixVQUFVO0VBQ1YsV0FBVztFQUNYLFVBQVU7Q0FITTs7QUFNa0Q7RUFFbEUsZUFBZTtDQURkOztBQUlGO0VBQ0MsaUJBQWlC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aUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBU1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFBaUI7Q0FBbEI7O0FBQ1Q7RUFBVSxpQkFB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QkFBb0M7RUFDcEMsb0JBQXVDO0VBRXZDLGlCQUFpQjtFQUNqQixpQkFBa0M7Q0FOZDs7QUFTbkI7Ozs7Ozs7RUFDQyxnQkFBZ0I7RUFDaEIsaUJBQWlCO0NBRlA7O0FDaFArRzs7O0VBRXpILGFmeUttQztFZXhLbkMsa0JmZ0Q0QjtFZS9DNUIsZ0JmRjBCO0VlRzFCLGlCZm9EMkI7RWVuRDNCLG1CZnVEMkI7Q2U1RDNCOztBQU1EOzs7RUFHQyxhZmlLbUM7RWVoS25DLGtCZmdLbUM7Q2VsS25DOztBQUdEOzs7Ozs7O0VBR0MsYUFBYTtDQURiOztBRG1QRjtFQUNFLGFkdkZtQztFY3dGbkMsa0JkaE40QjtFY2lONUIsZ0JkbFEwQjtFY21RMUIsaUJkNU0yQjtFYzZNM0IsbUJkek0yQjtDY29NZDs7QUFPVDtFQUNKLGFkOUZtQztFYytGbkMsa0JkL0ZtQztDYzZGaEI7O0FBS0w7O0VBQ2QsYUFBYTtDQURnQjs7QUFHL0I7RUFDRSxhZHRHbUM7RWN1R25DLGlCQUFrQztFQUNsQyxrQmRoTzRCO0VjaU81QixnQmRsUjBCO0VjbVIxQixpQmQ1TjJCO0NjdU5QOztBQ2hScUc7OztFQUV6SCxhZnVLa0M7RWV0S2xDLG1CZjZDNEI7RWU1QzVCLGdCZkgwQjtFZUkxQix1QmZtRGlDO0VlbERqQyxtQmZzRDJCO0NlM0QzQjs7QUFNRDs7O0VBR0MsYWYrSmtDO0VlOUpsQyxrQmY4SmtDO0NlaEtsQzs7QUFHRDs7Ozs7OztFQUdDLGFBQWE7Q0FEYjs7QUQ2UUY7RUFDRSxhZG5Ia0M7RWNvSGxDLG1CZDdPNEI7RWM4TzVCLGdCZDdSMEI7RWM4UjFCLHVCZHZPaUM7RWN3T2pDLG1CZHBPMkI7Q2MrTmQ7O0FBT1Q7RUFDSixhZDFIa0M7RWMySGxDLGtCZDNIa0M7Q2N5SGY7O0FBS0w7O0VBQ2QsYUFBYTtDQURnQjs7QUFHL0I7RUFDRSxhZGxJa0M7RWNtSWxDLGlCQUFrQztFQUNsQyxtQmQ3UDRCO0VjOFA1QixnQmQ3UzBCO0VjOFMxQix1QmR2UGlDO0Nja1BiOztBQWN4QjtFQUVFLG1CQUFtQjtDQUZOOztBQUtiO0VBQ0Usc0JBQWtDO0NBRHJCOztBQUtqQjtFQUNFLG1CQUFtQjtFQUNuQixPQUFPO0VBQ1AsU0FBUztFQUNULFdBQVc7RUFDWCxlQUFlO0VBQ2YsWWRqS3FEO0Vja0tyRCxhZGxLcUQ7RWNtS3JELGtCZG5LcUQ7RWNvS3JELG1CQUFtQjtFQUNuQixxQkFBcUI7Q0FWQzs7QUFjTzs7Ozs7O0VBQzdCLFlkeEtvQztFY3lLcEMsYWR6S29DO0VjMEtwQyxrQmQxS29DO0NjdUtpQjs7QUFPeEI7Ozs7OztFQUM3QixZZDdLcUM7RWM4S3JDLGFkOUtxQztFYytLckMsa0JkL0txQztDYzRLZ0I7O0FDNVluQzs7Ozs7Ozs7OztFQUNoQixlZm1oQm9DO0NlcGhCWjs7QUFJMUI7RUFDRSxzQmYrZ0JvQztFRC9kOUIsaURnQi9Da0M7Q0FGM0I7O0FBR1o7RUFDQyxzQkFBb0I7RWhCNkNoQixrRWdCNUNzRDtDQUZuRDs7QUFPWDtFQUNFLGVmcWdCb0M7RWVwZ0JwQyxzQmZvZ0JvQztFZW5nQnBDLDBCZm9nQm9DO0NldmdCbEI7O0FBTXBCO0VBQ0UsZWYrZm9DO0NlaGdCZDs7QUFwQk47Ozs7Ozs7Ozs7RUFDaEIsZWYyaEJvQztDZTVoQlo7O0FBSTFCO0VBQ0Usc0JmdWhCb0M7RUR2ZTlCLGlEZ0IvQ2tDO0NBRjNCOztBQUdaO0VBQ0Msc0JBQW9CO0VoQjZDaEIsa0VnQjVDc0Q7Q0FGbkQ7O0FBT1g7RUFDRSxlZjZnQm9DO0VlNWdCcEMsc0JmNGdCb0M7RWUzZ0JwQywwQmY0Z0JvQztDZS9nQmxCOztBQU1wQjtFQUNFLGVmdWdCb0M7Q2V4Z0JkOztBQXBCTjs7Ozs7Ozs7OztFQUNoQixlZitoQm9DO0NlaGlCWjs7QUFJMUI7RUFDRSxzQmYyaEJvQztFRDNlOUIsaURnQi9Da0M7Q0FGM0I7O0FBR1o7RUFDQyxzQkFBb0I7RWhCNkNoQixrRWdCNUNzRDtDQUZuRDs7QUFPWDtFQUNFLGVmaWhCb0M7RWVoaEJwQyxzQmZnaEJvQztFZS9nQnBDLDBCZmdoQnFDO0NlbmhCbkI7O0FBTXBCO0VBQ0UsZWYyZ0JvQztDZTVnQmQ7O0FE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SkQ7RUFDRTtJQUNFLHVCQUF1QjtHQURYO0VBR2Q7SUFDRSx3QkFBd0I7SUFDMUIsZ0IzQjZCc0M7RzJCL0J2QjtFQUlYO0lBQ0EsZ0JBQWdCO0dBREQ7Q2hDKzVKcEI7O0FnQ3A1SkQ7RUFDRSwwQjNCb0J3QztFMkJuQnhDLHNCM0JvQnVDO0MyQnRCeEI7O0FBSWY7RUFDRSxZM0JvQjJDO0MyQnJCOUI7O0FBR1o7O0VBQ0MsZTNCMkIyQztFMkIxQjNDLDhCM0IyQmdEO0MyQjdCekM7O0FBTVg7RUFDRSxZM0JNbUM7QzJCUHZCOztBQUtMO0VBQ0wsWTNCTXlDO0MyQlBqQzs7QUFJUDs7RUFDQyxZM0JHdUM7RTJCRnZDLDhCM0JHOEM7QzJCTHZDOztBQVFSOzs7RUFDQyxZM0JIdUM7RTJCSXZDLDBCM0JIeUM7QzJCQ2xDOztBQVFSOzs7RUFDQyxZM0JUdUM7RTJCVXZDLDhCM0JUOEM7QzJCT3ZDOztBQU9iO0VBQ0UsbUIzQkwyQztDMkJJN0I7O0FBR2I7O0VBQ0MsdUIzQlZ5QztDMkJTbEM7O0FBR1Q7RUFDRSx1QjNCWnlDO0MyQldoQzs7QUFNYjs7RUFDRSxzQjNCcENxQztDMkJtQ3pCOztBQVVUOzs7RUFDQywwQjNCdkN5QztFMkJ3Q3pDLFkzQnpDdUM7QzJCdUNoQzs7QUFNWDtFQUdXO0lBQ0wsWTNCcERxQztHMkJtRDdCO0VBR1A7O0lBQ0MsWTNCdERtQztJMkJ1RG5DLDhCM0J0RDBDO0cyQm9EbkM7RUFRUjs7O0lBQ0MsWTNCNURtQztJMkI2RG5DLDBCM0I1RHFDO0cyQjBEOUI7RUFRUjs7O0lBQ0MsWTNCbEVtQztJMkJtRW5DLDhCM0JsRTBDO0cyQmdFbkM7Q2hDZzVKbEI7O0FnQ2w0SkM7RUFDRSxZM0JyRjJDO0MyQm9GL0I7O0FBRVg7RUFDQyxZM0J0RnlDO0MyQnFGbEM7O0FBS1g7RUFDRSxZM0I1RjJDO0MyQjJGbEM7O0FBR1I7O0VBQ0MsWTNCOUZ5QztDMkI2RmxDOztBQU1OOzs7O0VBQ0MsWTNCaEd1QztDMkIrRmhDOztBQVNmO0VBQ0UsdUIzQnhGOEM7RTJCeUY5QyxzQjNCeEZnRDtDMkJzRmpDOztBQUlmO0VBQ0UsZTNCeEYrQztDMkJ1RmxDOztBQUdaOztFQUNDLFkzQmpGMEM7RTJCa0YxQyw4QjNCakZpRDtDMkIrRTFDOztBQU1YO0VBQ0UsZTNCdEcrQztDMkJxR25DOztBQUtMO0VBQ0wsZTNCdEc2QztDMkJxR3JDOztBQUlQOztFQUNDLFkzQnpHd0M7RTJCMEd4Qyw4QjNCekcrQztDMkJ1R3hDOztBQVFSOzs7RUFDQyxZM0JqSHdDO0UyQmtIeEMsMEIzQi9HMEM7QzJCNkduQzs7QUFRUjs7O0VBQ0MsWTNCckh3QztFMkJzSHhDLDhCM0JySCtDO0MyQm1IeEM7O0FBUWI7RUFDRSxtQjNCbEg0QztDMkJpSDlCOztBQUdiOztFQUNDLHVCM0J2SDBDO0MyQnNIbkM7O0FBR1Q7RUFDRSx1QjNCekgwQztDMkJ3SGpDOztBQU1iOztFQUNFLHNCQUFvQjtDQURSOztBQVNUOzs7RUFDQywwQjNCbkowQztFMkJvSjFDLFkzQnZKd0M7QzJCcUpqQzs7QUFNWDtFQUdNO0lBQ0Esc0IzQm5Ld0M7RzJCa0t0QjtFQUdwQjtJQUNFLDBCM0J0S3dDO0cyQnFLaEM7RUFHSDtJQUNMLGUzQnRLeUM7RzJCcUtqQztFQUdQOztJQUNDLFkzQnhLb0M7STJCeUtwQyw4QjNCeEsyQztHMkJzS3BDO0VBUVI7OztJQUNDLFkzQmhMb0M7STJCaUxwQywwQjNCOUtzQztHMkI0Sy9CO0VBUVI7OztJQUNDLFkzQnBMb0M7STJCcUxwQyw4QjNCcEwyQztHMkJrTHBDO0NoQzYzSmxCOztBZ0NwM0pDO0VBQ0UsZTNCbE0rQztDMkJpTW5DOztBQUVYO0VBQ0MsWTNCbk0wQztDMkJrTW5DOztBQUtYO0VBQ0UsZTNCek0rQztDMkJ3TXRDOztBQUdSOztFQUNDLFkzQjNNMEM7QzJCME1uQzs7QUFNTjs7OztFQUNDLFkzQjdNd0M7QzJCNE1qQzs7QUUzb0JmO0VBQ0Usa0I3Qm8wQmtDO0U2Qm4wQmxDLG9CN0I2RTZCO0U2QjVFN0IsaUJBQWlCO0VBQ2pCLDBCN0JtMEJxQztFNkJsMEJyQyxtQjdCc0g2QjtDNkIzSGxCOztBQU9UO0VBQ0Esc0JBQXNCO0NBRGxCOztBQUdBO0VBQ0YsbUJBQXdDO0VBQ3hDLGVBQWM7RUFDZCxZN0I0ekI4QjtDNkIvekJuQjs7QUFPYjtFQUNBLFk3QlAyQjtDNkJNbEI7O0FDbkJiO0VBQ0Usc0JBQXNCO0VBQ3RCLGdCQUFnQjtFQUNoQixlQUErQjtFQUMvQixtQjlCeUg2QjtDOEI3SGxCOztBQU1UO0VBQ0EsZ0JBQWdCO0NBRFo7O0FBR0Y7O0VBQ0EsbUJBQW1CO0VBQ25CLFlBQVk7RUFDWixrQjlCbUcwQjtFOEJsRzFCLHlCOUJrRStCO0U4QmpFL0Isc0JBQXNCO0VBQ3RCLGU5QkN5QjtFOEJBekIsdUI5QmllcUM7RThCaGVyQyx1QjlCaWVxQztFOEJoZXJDLGtCQUFrQjtDQVRaOztBQWFKOztFQUNBLGVBQWU7RU5YckIsK0J4QmlINkI7RXdCaEgxQiw0QnhCZ0gwQjtDOEJ2R2pCOztBQU9OOztFTnpCTixnQ3hCeUg2QjtFd0J4SDFCLDZCeEJ3SDBCO0M4QmhHakI7O0FBU1Q7Ozs7RUFDQyxXQUFXO0VBQ1gsZTlCT3dCO0U4Qk54Qix1QjlCM0J3QjtFOEI0QnhCLG1COUI0Y3FDO0M4QmhkOUI7O0FBWVI7Ozs7OztFQUNDLFdBQVc7RUFDWCxZOUJvY3FDO0U4Qm5jckMsMEI5QnJDeUI7RThCc0N6QixzQjlCdEN5QjtFOEJ1Q3pCLGdCQUFnQjtDQUxUOztBQWVOOzs7Ozs7RUFDRCxZOUJyRHlCO0U4QnNEekIsdUI5QjBicUM7RThCemJyQyxtQjlCMGJxQztFOEJ6YnJDLG9COUJzTHNDO0M4QjFMN0I7O0FDL0RUOztFQUNBLG1CL0IrRzBCO0UrQjlHMUIsZ0IvQitEd0I7RStCOUR4Qix1Qi9CcUgrQjtDK0J4SHpCOztBQU9KOztFUEdOLCtCeEJrSDZCO0V3QmpIMUIsNEJ4QmlIMEI7QytCckhqQjs7QUFNTjs7RVBYTixnQ3hCMEg2QjtFd0J6SDFCLDZCeEJ5SDBCO0MrQi9HakI7O0FBYlI7O0VBQ0Esa0IvQmtIMEI7RStCakgxQixnQi9CZ0V3QjtFK0IvRHhCLGlCL0JzSHlCO0MrQnpIbkI7O0FBT0o7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aUJ0QyxzQnZDMGlCc0M7RXVDemlCdEMsZXZDdWlCc0M7Q3NDMWV4Qjs7QUMzRGQ7RUFDRSwwQkFBd0I7Q0FEdEI7O0FBR0o7RUFDRSxlQUFhO0NBREY7O0FENERmO0VDbkVFLDBCdkM4aUJ1QztFdUM3aUJ2QyxzQnZDOGlCcUM7RXVDN2lCckMsZXZDMmlCc0M7Q3NDMWV6Qjs7QUMvRGI7RUFDRSwwQkFBd0I7Q0FEdEI7O0FBR0o7RUFDRSxlQUFhO0NBREY7O0FDRGY7RUFDRTtJQUFRLDRCQUE0QjtHN0MwL0xuQztFNkN6L0xEO0lBQVEseUJBQXlCO0c3QzQvTGhDO0NBQ0Y7O0E2Q3ovTEQ7RUFDRTtJQUFRLDRCQUE0QjtHN0M2L0xuQztFNkM1L0xEO0lBQVEseUJBQXlCO0c3QysvTGhDO0NBQ0Y7O0E2Q3gvTEQ7RUFDRSxpQkFBaUI7RUFDakIsYXhDeUQ2QjtFd0N4RDdCLG9CeEN3RDZCO0V3Q3ZEN0IsMEJ4QytwQm1DO0V3QzlwQm5DLG1CeENrRzZCO0VEM0RyQiwrQ3lDdENnQztDQU4vQjs7QUFVWDtFQUNFLFlBQVk7RUFDWixVQUFVO0VBQ1YsYUFBYTtFQUNiLGdCeENnQzRCO0V3Qy9CNUIsa0J4QzRDNkI7RXdDM0M3QixZeENxcEJnQztFd0NwcEJoQyxtQkFBbUI7RUFDbkIsMEJ4Q3hCNkI7RURrRHJCLCtDeUN6QitCO0V6QytJL0IsNEJ5QzlJMEI7Q0FWckI7O0FBbUJmOztFQ0VFLHNNQUFpQztFREFqQywyQkFBMEI7Q0FGTDs7QUFVVjs7RXpDN0NYLDJEeUM4QzBEO0V6QzVDbEQsbUR5QzRDa0Q7Q0FEdEM7O0FBUXRCO0VFckVFLDBCMUNpQjZCO0N3Q29EUjs7QUVsRUg7RURrRGxCLHNNQUFpQztDQ2xEWjs7QUZzRXZCO0VFekVFLDBCMUNrQjZCO0N3Q3VEWDs7QUV0RUE7RURrRGxCLHNNQUFpQztDQ2xEWjs7QUYwRXZCO0VFN0VFLDBCMUNtQjZCO0N3QzBEUjs7QUUxRUg7RURrRGxCLHNNQUFpQztDQ2xEWjs7QUY4RXZCO0VFakZFLDBCMUNvQjZCO0N3QzZEVDs7QUU5RUY7RURrRGxCLHNN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O0FBR2pDO0VBQ0UsZS9Da3ZCK0I7RStDanZCL0IsdUIvQ0Z1QjtDK0NBakI7O0FBTVk7RUFDbEIsMEIvQzJ1QjRCO0MrQzV1Qkc7O0FENk9yQztFQzdQRSxzQi9DZ0I2QjtDOEM2T2Y7O0FDM1BWO0VBQ0YsWS9DNHZCOEI7RStDM3ZCOUIsMEIvQ1kyQjtFK0NYM0Isc0IvQ1cyQjtDK0NkVDs7QUFLRTtFQUNsQiwwQi9DUXlCO0MrQ1RNOztBQUdqQztFQUNFLGUvQ0t5QjtFK0NKekIsdUIvQ212QjRCO0MrQ3J2QnRCOztBQU1ZO0VBQ2xCLDZCL0NEeUI7QytDQU07O0FEZ1ByQztFQ2hRRSxzQi9DbWlCc0M7QzhDblN4Qjs7QUM5UFY7RUFDRixlL0M4aEJvQztFK0M3aEJwQywwQi9DOGhCb0M7RStDN2hCcEMsc0IvQzhoQm9DO0MrQ2ppQmxCOztBQUtFO0VBQ2xCLDBCL0MyaEJrQztDK0M1aEJIOztBQUdqQztFQUNFLGUvQ3VoQmtDO0UrQ3RoQmxDLDBCL0NxaEJrQztDK0N2aEI1Qjs7QUFNWTtFQUNsQiw2Qi9Da2hCa0M7QytDbmhCSDs7QURtUHJDO0VDblFFLHNCL0N1aUJzQztDOENwUzNCOztBQ2pRUDtFQUNGLGUvQ2tpQm9DO0UrQ2ppQnBDLDBCL0NraUJvQztFK0NqaUJwQyxzQi9Da2lCb0M7QytDcmlCbEI7O0FBS0U7RUFDbEIsMEIvQytoQmtDO0MrQ2hpQkg7O0FBR2pDO0VBQ0UsZS9DMmhCa0M7RStDMWhCbEMsMEIvQ3loQmtDO0MrQzNoQjVCOztBQU1ZO0VBQ2xCLDZCL0NzaEJrQztDK0N2aEJIOztBRHNQckM7RUN0UUUsc0IvQzJpQnNDO0M4Q3JTeEI7O0FDcFFWO0VBQ0YsZS9Dc2lCb0M7RStDcmlCcEMsMEIvQ3NpQm9DO0UrQ3JpQnBDLHNCL0NzaUJvQztDK0N6aUJsQjs7QUFLRTtFQUNsQiwwQi9DbWlCa0M7QytDcGlCSDs7QUFHakM7RUFDRSxlL0MraEJrQztFK0M5aEJsQywwQi9DNmhCa0M7QytDL2hCNUI7O0FBTVk7RUFDbEIsNkIvQzBoQmtDO0MrQzNoQkg7O0FEeVByQztFQ3pR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S2ltY2hpXG4gKlxuICogQ29weXJpZ2h0IElCTSwgQ29ycC4gMjAxNVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBDU1MgcmVzZXRcbkBpbXBvcnQgXCJtb2R1bGVzL3Jlc2V0XCI7XG5cbi8vIE92ZXJyaWRlIEJvb3RzdHJhcCBTQVNTIHZhcmlhYmxlc1xuQGltcG9ydCBcIm1vZHVsZXMva2ltY2hpLXZhcmlhYmxlc1wiO1xuXG4vLyBib3dlcjpzY3NzXG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9jb21wYXNzLW1peGlucy9saWIvY29tcGFzc1wiO1xuLy8gZW5kYm93ZXJcblxuLy8gQm9vdHN0cmFwIGN1c3RvbSBpbXBvcnRzXG5AaW1wb3J0IFwibW9kdWxlcy9ib290c3RyYXBcIjtcbi8vIEJvb3RzdHJhcCBzZWxlY3QgcGx1Z2luXG5AaW1wb3J0IFwibW9kdWxlcy9ib290c3RyYXAtc2VsZWN0XCI7XG5cbi8vIE92ZXJyaWRlIEJvb3RzdHJhcCBtaXhpblxuLmNvbnRhaW5lciB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIHBhZGRpbmctbGVmdDogIDgwcHggIWltcG9ydGFudDtcbiAgcGFkZGluZy1yaWdodDogNjBweCAhaW1wb3J0YW50O1xufVxuXG4vLyBPdmVycmlkZSBhbGVydFxuXG4uYWxlcnQge1xuICBib3JkZXItd2lkdGg6ICRhbGVydC1ib3JkZXItd2lkdGg7XG59XG5cbi8vIEJvZHkgc3BlY3NcbkBpbXBvcnQgXCJtb2R1bGVzL2Jhc2VcIjtcblxuLy8gVG9wYmFyIGFuZCBuYXZpZ2F0aW9uXG5AaW1wb3J0IFwibW9kdWxlcy90b3BiYXJcIjtcblxuLy8gTG9naW5cbkBpbXBvcnQgXCJtb2R1bGVzL2xvZ2luXCI7XG5cbi8vIEJ1dHRvbnNcbkBpbXBvcnQgXCJtb2R1bGVzL2J1dHRvbnNcIjtcblxuLy8gRGlhbG9nIEZsYXRcbkBpbXBvcnQgXCJtb2R1bGVzL2RpYWxvZy1mbGF0XCI7XG5AaW1wb3J0IFwibW9kdWxlcy9tb2RhbC1mbGF0XCI7XG5cbi8vIERyb3Bkb3duIEJ1dHRvbiAtIEZsYXRcbkBpbXBvcnQgXCJtb2R1bGVzL21lbnUtZmxhdFwiO1xuXG4vLyBDb2xvciBzcGVjaWZpYyBcbkBpbXBvcnQgXCJtb2R1bGVzL2NvbG9yc1wiO1xuXG5cbnByZSB7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG59XG5cbi8vIE1lZGlhIHF1ZXJpZXNcblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHtcblxuICAuY29udGFpbmVyIHtcbiAgICB3aWR0aDogMTU0MHB4O1xuICB9XG5cbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTY4MHB4KSB7XG5cbiAgLmNvbnRhaW5lciB7XG4gICAgd2lkdGg6IDE1NDBweDtcbiAgfVxuXG59IiwiLyogUmVzZXQgKi9cblxuaHRtbCxib2R5LGRpdixzcGFuLG9iamVjdCxpZnJhbWUsaDEsaDIsaDMsaDQsaDUsaDYscCxibG9ja3F1b3RlLHByZSxhLGFiYnIsXG5hZGRyZXNzLGJpZyxjaXRlLGNvZGUsZGVsLGRmbixlbSxpbWcsaW5zLGtiZCxxLHMsc2FtcCxzbWFsbCxzdHJpa2Usc3Ryb25nLHN1YixcbnN1cCx0dCx2YXIsYix1LGksY2VudGVyLGRsLGR0LGRkLG9sLHVsLGxpLGZpZWxkc2V0LGZvcm0sbGFiZWwsbGVnZW5kLHRhYmxlLFxuY2FwdGlvbix0Ym9keSx0Zm9vdCx0aGVhZCx0cix0aCx0ZCxhcnRpY2xlLGFzaWRlLGNhbnZhcyxkZXRhaWxzLGVtYmVkLGZpZ3VyZSxcbmZpZ2NhcHRpb24sZm9vdGVyLGhlYWRlcixoZ3JvdXAsbWVudSxuYXYsb3V0cHV0LHJ1Ynksc2VjdGlvbixzdW1tYXJ5LHRpbWUsbWFyayxcbmF1ZGlvLHZpZGVvLGJ1dHRvbiB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYm9yZGVyOiAwO1xufVxuXG5hcnRpY2xlLGFzaWRlLGRldGFpbHMsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixoZ3JvdXAsbWVudSxuYXYsc2VjdGlvblxuICAgIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cblxub2wsdWwge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG5cbnRhYmxlIHtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgIGJvcmRlci1zcGFjaW5nOiAwO1xufVxuXG5pbWcge1xuICAgIGJvcmRlcjogbm9uZTtcbn1cblxuYSB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG5hOmFjdGl2ZSxhOmhvdmVyIHtcbiAgICBvdXRsaW5lOiBub25lO1xufVxuXG5hIGxhYmVsIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG4iLCIvKlxuICogQSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdWJ5IGxpc3QgZnVuY3Rpb25zIGZyb20gQ29tcGFzczpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Db21wYXNzL2NvbXBhc3MvYmxvYi9zdGFibGUvbGliL2NvbXBhc3Mvc2Fzc19leHRlbnNpb25zL2Z1bmN0aW9ucy9saXN0cy5yYlxuICovXG5cblxuLy8gY29tcGFjdCBpcyBwYXJ0IG9mIGxpYnNhc3NcblxuQGZ1bmN0aW9uIC1jb21wYXNzLW50aCgkbGlzdCwgJHBsYWNlKSB7XG4gIC8vIFllcCwgU2Fzcy1saXN0cyBhcmUgMS1pbmRleGVkLlxuICBAaWYgJHBsYWNlID09IFwiZmlyc3RcIiB7XG4gICAgJHBsYWNlOiAxO1xuICB9XG4gIEBpZiAkcGxhY2UgPT0gXCJsYXN0XCIge1xuICAgICRwbGFjZTogbGVuZ3RoKCRsaXN0KTtcbiAgfVxuICBAcmV0dXJuIG50aCgkbGlzdCwgJHBsYWNlKTtcbn1cblxuLy8gY29tcGFzc19saXN0IGFuZCBjb21wYXNzX3NwYWNlX2xpc3QgY2FuJ3QgYmUgaW1wbGVtZW50ZWQgaW4gc2FzcyBzY3JpcHRcblxuQGZ1bmN0aW9uIC1jb21wYXNzLWxpc3Qtc2l6ZSgkbGlzdCkge1xuICBAcmV0dXJuIGxlbmd0aCgkbGlzdCk7XG59XG5cbkBmdW5jdGlvbiAtY29tcGFzcy1zbGljZSgkbGlzdCwgJHN0YXJ0LCAkZW5kOiBmYWxzZSkge1xuICBAaWYgJGVuZCA9PSBmYWxzZSB7XG4gICAgJGVuZDogbGVuZ3RoKCRsaXN0KTtcbiAgfVxuICAkZnVsbDogbnRoKCRsaXN0LCAkc3RhcnQpO1xuICBAZm9yICRpIGZyb20gJHN0YXJ0ICsgMSB0aHJvdWdoICRlbmQge1xuICAgICRmdWxsOiAkZnVsbCwgbnRoKCRsaXN0LCAkaSk7XG4gIH1cbiAgQHJldHVybiAkZnVsbDtcbn1cblxuQGZ1bmN0aW9uIHJlamVjdCgkbGlzdCwgJHJlamVjdDEsICRyZWplY3QyOm51bGwsICRyZWplY3QzOm51bGwsICRyZWplY3Q0Om51bGwsICRyZWplY3Q1Om51bGwsICRyZWplY3Q2Om51bGwsICRyZWplY3Q3Om51bGwsICRyZWplY3Q4Om51bGwsICRyZWplY3Q5Om51bGwpIHtcbiAgJHJlamVjdHM6ICRyZWplY3QxLCAkcmVqZWN0MiwgJHJlamVjdDMsICRyZWplY3Q0LCAkcmVqZWN0NSwgJHJlamVjdDYsICRyZWplY3Q3LCAkcmVqZWN0OCwgJHJlamVjdDk7XG5cbiAgJGZ1bGw6IGZhbHNlO1xuICBAZWFjaCAkaXRlbSBpbiAkbGlzdCB7XG4gICAgQGlmIGluZGV4KCRyZWplY3RzLCAkaXRlbSkge31cbiAgICBAZWxzZSB7XG4gICAgICBAaWYgJGZ1bGwge1xuICAgICAgICAkZnVsbDogJGZ1bGwsICRpdGVtO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICAkZnVsbDogJGl0ZW07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEByZXR1cm4gJGZ1bGw7XG59XG4iLCIvKlxuICogQSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdWJ5IGNvbnN0YW50cyBmdW5jdGlvbnMgZnJvbSBDb21wYXNzOlxuICogaHR0cHM6Ly9naXRodWIuY29tL0NvbXBhc3MvY29tcGFzcy9ibG9iL3N0YWJsZS9saWIvY29tcGFzcy9zYXNzX2V4dGVuc2lvbnMvZnVuY3Rpb25zL2NvbnN0YW50cy5yYlxuICovXG5cbkBmdW5jdGlvbiBvcHBvc2l0ZS1wb3NpdGlvbigkZnJvbSkge1xuICAgIEBpZiAoJGZyb20gPT0gdG9wKSB7XG4gICAgICAgIEByZXR1cm4gYm90dG9tO1xuICAgIH0gQGVsc2UgaWYgKCRmcm9tID09IGJvdHRvbSkge1xuICAgICAgICBAcmV0dXJuIHRvcDtcbiAgICB9IEBlbHNlIGlmICgkZnJvbSA9PSBsZWZ0KSB7XG4gICAgICAgIEByZXR1cm4gcmlnaHQ7XG4gICAgfSBAZWxzZSBpZiAoJGZyb20gPT0gcmlnaHQpIHtcbiAgICAgICAgQHJldHVybiBsZWZ0O1xuICAgIH0gQGVsc2UgaWYgKCRmcm9tID09IGNlbnRlcikge1xuICAgICAgICBAcmV0dXJuIGNlbnRlcjtcbiAgICB9XG59XG4iLCIvKlxuICogQSBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdWJ5IGRpc3BsYXkgZnVuY3Rpb25zIGZyb20gQ29tcGFzczpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Db21wYXNzL2NvbXBhc3MvYmxvYi9zdGFibGUvY29yZS9saWIvY29tcGFzcy9jb3JlL3Nhc3NfZXh0ZW5zaW9ucy9mdW5jdGlvbnMvZGlzcGxheS5yYlxuICovXG5cbkBmdW5jdGlvbiBlbGVtZW50cy1vZi10eXBlKCR0eXBlKXtcbiAgICBAaWYgKCR0eXBlID09IGJsb2NrKXtcbiAgICAgICAgQHJldHVybiBhZGRyZXNzLCBhcnRpY2xlLCBhc2lkZSwgYmxvY2txdW90ZSwgY2VudGVyLCBkaXIsIGRpdiwgZGQsIGRldGFpbHMsIGRsLCBkdCwgZmllbGRzZXQsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9ybSwgZm9vdGVyLCBmcmFtZXNldCwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgaHIsIGhlYWRlciwgaGdyb3VwLCBpc2luZGV4LCBtYWluLCBtZW51LCBuYXYsIG5vZnJhbWVzLCBub3NjcmlwdCwgb2wsIHAsIHByZSwgc2VjdGlvbiwgc3VtbWFyeSwgdWw7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gaW5saW5lKXtcbiAgICAgICAgQHJldHVybiBhLCBhYmJyLCBhY3JvbnltLCBhdWRpbywgYiwgYmFzZWZvbnQsIGJkbywgYmlnLCBiciwgY2FudmFzLCBjaXRlLCBjb2RlLCBjb21tYW5kLCBkYXRhbGlzdCwgZGZuLCBlbSwgZW1iZWQsIGZvbnQsIGksIGltZywgaW5wdXQsIGtleWdlbiwga2JkLCBsYWJlbCwgbWFyaywgbWV0ZXIsIG91dHB1dCwgcHJvZ3Jlc3MsIHEsIHJwLCBydCwgcnVieSwgcywgc2FtcCwgc2VsZWN0LCBzbWFsbCwgc3Bhbiwgc3RyaWtlLCBzdHJvbmcsIHN1Yiwgc3VwLCB0ZXh0YXJlYSwgdGltZSwgdHQsIHUsIHZhciwgdmlkZW8sIHdicjtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSBpbmxpbmUtYmxvY2spe1xuICAgICAgICBAcmV0dXJuIGltZztcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSB0YWJsZSl7XG4gICAgICAgIEByZXR1cm4gdGFibGU7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gbGlzdC1pdGVtKXtcbiAgICAgICAgQHJldHVybiBsaTtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSB0YWJsZS1yb3ctZ3JvdXApe1xuICAgICAgICBAcmV0dXJuIHRib2R5O1xuICAgIH0gQGVsc2UgaWYgKCR0eXBlID09IHRhYmxlLWhlYWRlci1ncm91cCl7XG4gICAgICAgIEByZXR1cm4gdGhlYWQ7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gdGFibGUtZm9vdGVyLWdyb3VwKXtcbiAgICAgICAgQHJldHVybiB0Zm9vdDtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSB0YWJsZS1yb3cpe1xuICAgICAgICBAcmV0dXJuIHRyO1xuICAgIH0gQGVsc2UgaWYgKCR0eXBlID09IHRhYmxlLWNlbGwpe1xuICAgICAgICBAcmV0dXJuIHRoLCB0ZDtcbiAgICB9IEBlbHNlIGlmICgkdHlwZSA9PSBodG1sNS1ibG9jayl7XG4gICAgICAgIEByZXR1cm4gYXJ0aWNsZSwgYXNpZGUsIGRldGFpbHMsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWFpbiwgbWVudSwgbmF2LCBzZWN0aW9uLCBzdW1tYXJ5O1xuICAgIH0gQGVsc2UgaWYgKCR0eXBlID09IGh0bWw1LWlubGluZSl7XG4gICAgICAgIEByZXR1cm4gYXVkaW8sIGNhbnZhcywgY29tbWFuZCwgZGF0YWxpc3QsIGVtYmVkLCBrZXlnZW4sIG1hcmssIG1ldGVyLCBvdXRwdXQsIHByb2dyZXNzLCBycCwgcnQsIHJ1YnksIHRpbWUsIHZpZGVvLCB3YnI7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gaHRtbDUpe1xuICAgICAgICBAcmV0dXJuIGFydGljbGUsIGFzaWRlLCBhdWRpbywgY2FudmFzLCBjb21tYW5kLCBkYXRhbGlzdCwgZGV0YWlscywgZW1iZWQsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwga2V5Z2VuLCBtYWluLCBtYXJrLCBtZW51LCBtZXRlciwgbmF2LCBvdXRwdXQsIHByb2dyZXNzLCBycCwgcnQsIHJ1YnksIHNlY3Rpb24sIHN1bW1hcnksIHRpbWUsIHZpZGVvLCB3YnI7XG4gICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gdGV4dC1pbnB1dCl7XG4gICAgICAgIEByZXR1cm4gaW5wdXQsIHRleHRhcmVhO1xuICAgIH1cbn1cbiIsIi8qIVxuICogQm9vdHN0cmFwIHYzLjMuNSAoaHR0cDovL2dldGJvb3RzdHJhcC5jb20pXG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKi9cblxuLy8gQ29yZSB2YXJpYWJsZXMgYW5kIG1peGluc1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9taXhpbnNcIjtcblxuLy8gUmVzZXQgYW5kIGRlcGVuZGVuY2llc1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9ub3JtYWxpemVcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvcHJpbnRcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvZ2x5cGhpY29uc1wiO1xuXG4vLyBDb3JlIENTU1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9zY2FmZm9sZGluZ1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC90eXBlXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL2NvZGVcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvZ3JpZFwiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC90YWJsZXNcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvZm9ybXNcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvYnV0dG9uc1wiO1xuXG4vLyBDb21wb25lbnRzXG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL2NvbXBvbmVudC1hbmltYXRpb25zXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL2Ryb3Bkb3duc1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9idXR0b24tZ3JvdXBzXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL2lucHV0LWdyb3Vwc1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9uYXZzXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL25hdmJhclwiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9icmVhZGNydW1ic1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9wYWdpbmF0aW9uXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL3BhZ2VyXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL2xhYmVsc1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9iYWRnZXNcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvanVtYm90cm9uXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL3RodW1ibmFpbHNcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvYWxlcnRzXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL3Byb2dyZXNzLWJhcnNcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbWVkaWFcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbGlzdC1ncm91cFwiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9wYW5lbHNcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvcmVzcG9uc2l2ZS1lbWJlZFwiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC93ZWxsc1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9jbG9zZVwiO1xuXG4vLyBDb21wb25lbnRzIHcvIEphdmFTY3JpcHRcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvbW9kYWxzXCI7XG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL3Rvb2x0aXBcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvcG9wb3ZlcnNcIjtcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2Jvb3RzdHJhcC1zYXNzLW9mZmljaWFsL2Fzc2V0cy9zdHlsZXNoZWV0cy9ib290c3RyYXAvY2Fyb3VzZWxcIjtcblxuLy8gVXRpbGl0eSBjbGFzc2VzXG5AaW1wb3J0IFwiYm93ZXJfY29tcG9uZW50cy9ib290c3RyYXAtc2Fzcy1vZmZpY2lhbC9hc3NldHMvc3R5bGVzaGVldHMvYm9vdHN0cmFwL3V0aWxpdGllc1wiO1xuQGltcG9ydCBcImJvd2VyX2NvbXBvbmVudHMvYm9vdHN0cmFwLXNhc3Mtb2ZmaWNpYWwvYXNzZXRzL3N0eWxlc2hlZXRzL2Jvb3RzdHJhcC9yZXNwb25zaXZlLXV0aWxpdGllc1wiO1xuIiwiLyohIG5vcm1hbGl6ZS5jc3MgdjMuMC4zIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcyAqL1xuXG4vL1xuLy8gMS4gU2V0IGRlZmF1bHQgZm9udCBmYW1pbHkgdG8gc2Fucy1zZXJpZi5cbi8vIDIuIFByZXZlbnQgaU9TIGFuZCBJRSB0ZXh0IHNpemUgYWRqdXN0IGFmdGVyIGRldmljZSBvcmllbnRhdGlvbiBjaGFuZ2UsXG4vLyAgICB3aXRob3V0IGRpc2FibGluZyB1c2VyIHpvb20uXG4vL1xuXG5odG1sIHtcbiAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IC8vIDFcbiAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC8vIDJcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvLyAyXG59XG5cbi8vXG4vLyBSZW1vdmUgZGVmYXVsdCBtYXJnaW4uXG4vL1xuXG5ib2R5IHtcbiAgbWFyZ2luOiAwO1xufVxuXG4vLyBIVE1MNSBkaXNwbGF5IGRlZmluaXRpb25zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vL1xuLy8gQ29ycmVjdCBgYmxvY2tgIGRpc3BsYXkgbm90IGRlZmluZWQgZm9yIGFueSBIVE1MNSBlbGVtZW50IGluIElFIDgvOS5cbi8vIENvcnJlY3QgYGJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGZvciBgZGV0YWlsc2Agb3IgYHN1bW1hcnlgIGluIElFIDEwLzExXG4vLyBhbmQgRmlyZWZveC5cbi8vIENvcnJlY3QgYGJsb2NrYCBkaXNwbGF5IG5vdCBkZWZpbmVkIGZvciBgbWFpbmAgaW4gSUUgMTEuXG4vL1xuXG5hcnRpY2xlLFxuYXNpZGUsXG5kZXRhaWxzLFxuZmlnY2FwdGlvbixcbmZpZ3VyZSxcbmZvb3RlcixcbmhlYWRlcixcbmhncm91cCxcbm1haW4sXG5tZW51LFxubmF2LFxuc2VjdGlvbixcbnN1bW1hcnkge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLy9cbi8vIDEuIENvcnJlY3QgYGlubGluZS1ibG9ja2AgZGlzcGxheSBub3QgZGVmaW5lZCBpbiBJRSA4LzkuXG4vLyAyLiBOb3JtYWxpemUgdmVydGljYWwgYWxpZ25tZW50IG9mIGBwcm9ncmVzc2AgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgT3BlcmEuXG4vL1xuXG5hdWRpbyxcbmNhbnZhcyxcbnByb2dyZXNzLFxudmlkZW8ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8vIDFcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyAvLyAyXG59XG5cbi8vXG4vLyBQcmV2ZW50IG1vZGVybiBicm93c2VycyBmcm9tIGRpc3BsYXlpbmcgYGF1ZGlvYCB3aXRob3V0IGNvbnRyb2xzLlxuLy8gUmVtb3ZlIGV4Y2VzcyBoZWlnaHQgaW4gaU9TIDUgZGV2aWNlcy5cbi8vXG5cbmF1ZGlvOm5vdChbY29udHJvbHNdKSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGhlaWdodDogMDtcbn1cblxuLy9cbi8vIEFkZHJlc3MgYFtoaWRkZW5dYCBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOS8xMC5cbi8vIEhpZGUgdGhlIGB0ZW1wbGF0ZWAgZWxlbWVudCBpbiBJRSA4LzkvMTAvMTEsIFNhZmFyaSwgYW5kIEZpcmVmb3ggPCAyMi5cbi8vXG5cbltoaWRkZW5dLFxudGVtcGxhdGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vLyBMaW5rc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy9cbi8vIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIGNvbG9yIGZyb20gYWN0aXZlIGxpbmtzIGluIElFIDEwLlxuLy9cblxuYSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4vL1xuLy8gSW1wcm92ZSByZWFkYWJpbGl0eSBvZiBmb2N1c2VkIGVsZW1lbnRzIHdoZW4gdGhleSBhcmUgYWxzbyBpbiBhblxuLy8gYWN0aXZlL2hvdmVyIHN0YXRlLlxuLy9cblxuYTphY3RpdmUsXG5hOmhvdmVyIHtcbiAgb3V0bGluZTogMDtcbn1cblxuLy8gVGV4dC1sZXZlbCBzZW1hbnRpY3Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vXG4vLyBBZGRyZXNzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gSUUgOC85LzEwLzExLCBTYWZhcmksIGFuZCBDaHJvbWUuXG4vL1xuXG5hYmJyW3RpdGxlXSB7XG4gIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQ7XG59XG5cbi8vXG4vLyBBZGRyZXNzIHN0eWxlIHNldCB0byBgYm9sZGVyYCBpbiBGaXJlZm94IDQrLCBTYWZhcmksIGFuZCBDaHJvbWUuXG4vL1xuXG5iLFxuc3Ryb25nIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi8vXG4vLyBBZGRyZXNzIHN0eWxpbmcgbm90IHByZXNlbnQgaW4gU2FmYXJpIGFuZCBDaHJvbWUuXG4vL1xuXG5kZm4ge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbi8vXG4vLyBBZGRyZXNzIHZhcmlhYmxlIGBoMWAgZm9udC1zaXplIGFuZCBtYXJnaW4gd2l0aGluIGBzZWN0aW9uYCBhbmQgYGFydGljbGVgXG4vLyBjb250ZXh0cyBpbiBGaXJlZm94IDQrLCBTYWZhcmksIGFuZCBDaHJvbWUuXG4vL1xuXG5oMSB7XG4gIGZvbnQtc2l6ZTogMmVtO1xuICBtYXJnaW46IDAuNjdlbSAwO1xufVxuXG4vL1xuLy8gQWRkcmVzcyBzdHlsaW5nIG5vdCBwcmVzZW50IGluIElFIDgvOS5cbi8vXG5cbm1hcmsge1xuICBiYWNrZ3JvdW5kOiAjZmYwO1xuICBjb2xvcjogIzAwMDtcbn1cblxuLy9cbi8vIEFkZHJlc3MgaW5jb25zaXN0ZW50IGFuZCB2YXJpYWJsZSBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLlxuLy9cblxuc21hbGwge1xuICBmb250LXNpemU6IDgwJTtcbn1cblxuLy9cbi8vIFByZXZlbnQgYHN1YmAgYW5kIGBzdXBgIGFmZmVjdGluZyBgbGluZS1oZWlnaHRgIGluIGFsbCBicm93c2Vycy5cbi8vXG5cbnN1YixcbnN1cCB7XG4gIGZvbnQtc2l6ZTogNzUlO1xuICBsaW5lLWhlaWdodDogMDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG5cbnN1cCB7XG4gIHRvcDogLTAuNWVtO1xufVxuXG5zdWIge1xuICBib3R0b206IC0wLjI1ZW07XG59XG5cbi8vIEVtYmVkZGVkIGNvbnRlbnRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vXG4vLyBSZW1vdmUgYm9yZGVyIHdoZW4gaW5zaWRlIGBhYCBlbGVtZW50IGluIElFIDgvOS8xMC5cbi8vXG5cbmltZyB7XG4gIGJvcmRlcjogMDtcbn1cblxuLy9cbi8vIENvcnJlY3Qgb3ZlcmZsb3cgbm90IGhpZGRlbiBpbiBJRSA5LzEwLzExLlxuLy9cblxuc3ZnOm5vdCg6cm9vdCkge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vLyBHcm91cGluZyBjb250ZW50XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vL1xuLy8gQWRkcmVzcyBtYXJnaW4gbm90IHByZXNlbnQgaW4gSUUgOC85IGFuZCBTYWZhcmkuXG4vL1xuXG5maWd1cmUge1xuICBtYXJnaW46IDFlbSA0MHB4O1xufVxuXG4vL1xuLy8gQWRkcmVzcyBkaWZmZXJlbmNlcyBiZXR3ZWVuIEZpcmVmb3ggYW5kIG90aGVyIGJyb3dzZXJzLlxuLy9cblxuaHIge1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgaGVpZ2h0OiAwO1xufVxuXG4vL1xuLy8gQ29udGFpbiBvdmVyZmxvdyBpbiBhbGwgYnJvd3NlcnMuXG4vL1xuXG5wcmUge1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuLy9cbi8vIEFkZHJlc3Mgb2RkIGBlbWAtdW5pdCBmb250IHNpemUgcmVuZGVyaW5nIGluIGFsbCBicm93c2Vycy5cbi8vXG5cbmNvZGUsXG5rYmQsXG5wcmUsXG5zYW1wIHtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSwgbW9ub3NwYWNlO1xuICBmb250LXNpemU6IDFlbTtcbn1cblxuLy8gRm9ybXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vXG4vLyBLbm93biBsaW1pdGF0aW9uOiBieSBkZWZhdWx0LCBDaHJvbWUgYW5kIFNhZmFyaSBvbiBPUyBYIGFsbG93IHZlcnkgbGltaXRlZFxuLy8gc3R5bGluZyBvZiBgc2VsZWN0YCwgdW5sZXNzIGEgYGJvcmRlcmAgcHJvcGVydHkgaXMgc2V0LlxuLy9cblxuLy9cbi8vIDEuIENvcnJlY3QgY29sb3Igbm90IGJlaW5nIGluaGVyaXRlZC5cbi8vICAgIEtub3duIGlzc3VlOiBhZmZlY3RzIGNvbG9yIG9mIGRpc2FibGVkIGVsZW1lbnRzLlxuLy8gMi4gQ29ycmVjdCBmb250IHByb3BlcnRpZXMgbm90IGJlaW5nIGluaGVyaXRlZC5cbi8vIDMuIEFkZHJlc3MgbWFyZ2lucyBzZXQgZGlmZmVyZW50bHkgaW4gRmlyZWZveCA0KywgU2FmYXJpLCBhbmQgQ2hyb21lLlxuLy9cblxuYnV0dG9uLFxuaW5wdXQsXG5vcHRncm91cCxcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgY29sb3I6IGluaGVyaXQ7IC8vIDFcbiAgZm9udDogaW5oZXJpdDsgLy8gMlxuICBtYXJnaW46IDA7IC8vIDNcbn1cblxuLy9cbi8vIEFkZHJlc3MgYG92ZXJmbG93YCBzZXQgdG8gYGhpZGRlbmAgaW4gSUUgOC85LzEwLzExLlxuLy9cblxuYnV0dG9uIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG5cbi8vXG4vLyBBZGRyZXNzIGluY29uc2lzdGVudCBgdGV4dC10cmFuc2Zvcm1gIGluaGVyaXRhbmNlIGZvciBgYnV0dG9uYCBhbmQgYHNlbGVjdGAuXG4vLyBBbGwgb3RoZXIgZm9ybSBjb250cm9sIGVsZW1lbnRzIGRvIG5vdCBpbmhlcml0IGB0ZXh0LXRyYW5zZm9ybWAgdmFsdWVzLlxuLy8gQ29ycmVjdCBgYnV0dG9uYCBzdHlsZSBpbmhlcml0YW5jZSBpbiBGaXJlZm94LCBJRSA4LzkvMTAvMTEsIGFuZCBPcGVyYS5cbi8vIENvcnJlY3QgYHNlbGVjdGAgc3R5bGUgaW5oZXJpdGFuY2UgaW4gRmlyZWZveC5cbi8vXG5cbmJ1dHRvbixcbnNlbGVjdCB7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuXG4vL1xuLy8gMS4gQXZvaWQgdGhlIFdlYktpdCBidWcgaW4gQW5kcm9pZCA0LjAuKiB3aGVyZSAoMikgZGVzdHJveXMgbmF0aXZlIGBhdWRpb2Bcbi8vICAgIGFuZCBgdmlkZW9gIGNvbnRyb2xzLlxuLy8gMi4gQ29ycmVjdCBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIGBpbnB1dGAgdHlwZXMgaW4gaU9TLlxuLy8gMy4gSW1wcm92ZSB1c2FiaWxpdHkgYW5kIGNvbnNpc3RlbmN5IG9mIGN1cnNvciBzdHlsZSBiZXR3ZWVuIGltYWdlLXR5cGVcbi8vICAgIGBpbnB1dGAgYW5kIG90aGVycy5cbi8vXG5cbmJ1dHRvbixcbmh0bWwgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSwgLy8gMVxuaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uOyAvLyAyXG4gIGN1cnNvcjogcG9pbnRlcjsgLy8gM1xufVxuXG4vL1xuLy8gUmUtc2V0IGRlZmF1bHQgY3Vyc29yIGZvciBkaXNhYmxlZCBlbGVtZW50cy5cbi8vXG5cbmJ1dHRvbltkaXNhYmxlZF0sXG5odG1sIGlucHV0W2Rpc2FibGVkXSB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLy9cbi8vIFJlbW92ZSBpbm5lciBwYWRkaW5nIGFuZCBib3JkZXIgaW4gRmlyZWZveCA0Ky5cbi8vXG5cbmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcbmlucHV0OjotbW96LWZvY3VzLWlubmVyIHtcbiAgYm9yZGVyOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuXG4vL1xuLy8gQWRkcmVzcyBGaXJlZm94IDQrIHNldHRpbmcgYGxpbmUtaGVpZ2h0YCBvbiBgaW5wdXRgIHVzaW5nIGAhaW1wb3J0YW50YCBpblxuLy8gdGhlIFVBIHN0eWxlc2hlZXQuXG4vL1xuXG5pbnB1dCB7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG59XG5cbi8vXG4vLyBJdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IGF0dGVtcHQgdG8gc3R5bGUgdGhlc2UgZWxlbWVudHMuXG4vLyBGaXJlZm94J3MgaW1wbGVtZW50YXRpb24gZG9lc24ndCByZXNwZWN0IGJveC1zaXppbmcsIHBhZGRpbmcsIG9yIHdpZHRoLlxuLy9cbi8vIDEuIEFkZHJlc3MgYm94IHNpemluZyBzZXQgdG8gYGNvbnRlbnQtYm94YCBpbiBJRSA4LzkvMTAuXG4vLyAyLiBSZW1vdmUgZXhjZXNzIHBhZGRpbmcgaW4gSUUgOC85LzEwLlxuLy9cblxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDsgLy8gMVxuICBwYWRkaW5nOiAwOyAvLyAyXG59XG5cbi8vXG4vLyBGaXggdGhlIGN1cnNvciBzdHlsZSBmb3IgQ2hyb21lJ3MgaW5jcmVtZW50L2RlY3JlbWVudCBidXR0b25zLiBGb3IgY2VydGFpblxuLy8gYGZvbnQtc2l6ZWAgdmFsdWVzIG9mIHRoZSBgaW5wdXRgLCBpdCBjYXVzZXMgdGhlIGN1cnNvciBzdHlsZSBvZiB0aGVcbi8vIGRlY3JlbWVudCBidXR0b24gdG8gY2hhbmdlIGZyb20gYGRlZmF1bHRgIHRvIGB0ZXh0YC5cbi8vXG5cbmlucHV0W3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG5pbnB1dFt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuXG4vL1xuLy8gMS4gQWRkcmVzcyBgYXBwZWFyYW5jZWAgc2V0IHRvIGBzZWFyY2hmaWVsZGAgaW4gU2FmYXJpIGFuZCBDaHJvbWUuXG4vLyAyLiBBZGRyZXNzIGBib3gtc2l6aW5nYCBzZXQgdG8gYGJvcmRlci1ib3hgIGluIFNhZmFyaSBhbmQgQ2hyb21lLlxuLy9cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkOyAvLyAxXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyAvLzJcbn1cblxuLy9cbi8vIFJlbW92ZSBpbm5lciBwYWRkaW5nIGFuZCBzZWFyY2ggY2FuY2VsIGJ1dHRvbiBpbiBTYWZhcmkgYW5kIENocm9tZSBvbiBPUyBYLlxuLy8gU2FmYXJpIChidXQgbm90IENocm9tZSkgY2xpcHMgdGhlIGNhbmNlbCBidXR0b24gd2hlbiB0aGUgc2VhcmNoIGlucHV0IGhhc1xuLy8gcGFkZGluZyAoYW5kIGB0ZXh0ZmllbGRgIGFwcGVhcmFuY2UpLlxuLy9cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5cbi8vXG4vLyBEZWZpbmUgY29uc2lzdGVudCBib3JkZXIsIG1hcmdpbiwgYW5kIHBhZGRpbmcuXG4vL1xuXG5maWVsZHNldCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gIG1hcmdpbjogMCAycHg7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTtcbn1cblxuLy9cbi8vIDEuIENvcnJlY3QgYGNvbG9yYCBub3QgYmVpbmcgaW5oZXJpdGVkIGluIElFIDgvOS8xMC8xMS5cbi8vIDIuIFJlbW92ZSBwYWRkaW5nIHNvIHBlb3BsZSBhcmVuJ3QgY2F1Z2h0IG91dCBpZiB0aGV5IHplcm8gb3V0IGZpZWxkc2V0cy5cbi8vXG5cbmxlZ2VuZCB7XG4gIGJvcmRlcjogMDsgLy8gMVxuICBwYWRkaW5nOiAwOyAvLyAyXG59XG5cbi8vXG4vLyBSZW1vdmUgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUgOC85LzEwLzExLlxuLy9cblxudGV4dGFyZWEge1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuLy9cbi8vIERvbid0IGluaGVyaXQgdGhlIGBmb250LXdlaWdodGAgKGFwcGxpZWQgYnkgYSBydWxlIGFib3ZlKS5cbi8vIE5PVEU6IHRoZSBkZWZhdWx0IGNhbm5vdCBzYWZlbHkgYmUgY2hhbmdlZCBpbiBDaHJvbWUgYW5kIFNhZmFyaSBvbiBPUyBYLlxuLy9cblxub3B0Z3JvdXAge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLy8gVGFibGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vL1xuLy8gUmVtb3ZlIG1vc3Qgc3BhY2luZyBiZXR3ZWVuIHRhYmxlIGNlbGxzLlxuLy9cblxudGFibGUge1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICBib3JkZXItc3BhY2luZzogMDtcbn1cblxudGQsXG50aCB7XG4gIHBhZGRpbmc6IDA7XG59XG4iLCIvKlxuICogUHJvamVjdCBLaW1jaGlcbiAqXG4gKiBDb3B5cmlnaHQgSUJNLCBDb3JwLiAyMDE1XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKiBSZXNldCAqL1xuaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBvYmplY3QsIGlmcmFtZSwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCwgYmxvY2txdW90ZSwgcHJlLCBhLCBhYmJyLFxuYWRkcmVzcywgYmlnLCBjaXRlLCBjb2RlLCBkZWwsIGRmbiwgZW0sIGltZywgaW5zLCBrYmQsIHEsIHMsIHNhbXAsIHNtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLFxuc3VwLCB0dCwgdmFyLCBiLCB1LCBpLCBjZW50ZXIsIGRsLCBkdCwgZGQsIG9sLCB1bCwgbGksIGZpZWxkc2V0LCBmb3JtLCBsYWJlbCwgbGVnZW5kLCB0YWJsZSxcbmNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQsIGFydGljbGUsIGFzaWRlLCBjYW52YXMsIGRldGFpbHMsIGVtYmVkLCBmaWd1cmUsXG5maWdjYXB0aW9uLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLCBtZW51LCBuYXYsIG91dHB1dCwgcnVieSwgc2VjdGlvbiwgc3VtbWFyeSwgdGltZSwgbWFyayxcbmF1ZGlvLCB2aWRlbywgYnV0dG9uIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7XG59XG5cbmFydGljbGUsIGFzaWRlLCBkZXRhaWxzLCBmaWdjYXB0aW9uLCBmaWd1cmUsIGZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsIG1lbnUsIG5hdiwgc2VjdGlvbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG5vbCwgdWwge1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuXG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xufVxuXG5pbWcge1xuICBib3JkZXI6IG5vbmU7XG59XG5cbmEge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbmE6YWN0aXZlLCBhOmhvdmVyIHtcbiAgb3V0bGluZTogbm9uZTtcbn1cblxuYSBsYWJlbCB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLypcbiAqIEEgcGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUnVieSBsaXN0IGZ1bmN0aW9ucyBmcm9tIENvbXBhc3M6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vQ29tcGFzcy9jb21wYXNzL2Jsb2Ivc3RhYmxlL2xpYi9jb21wYXNzL3Nhc3NfZXh0ZW5zaW9ucy9mdW5jdGlvbnMvbGlzdHMucmJcbiAqL1xuLypcbiAqIEEgcGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUnVieSBjb25zdGFudHMgZnVuY3Rpb25zIGZyb20gQ29tcGFzczpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Db21wYXNzL2NvbXBhc3MvYmxvYi9zdGFibGUvbGliL2NvbXBhc3Mvc2Fzc19leHRlbnNpb25zL2Z1bmN0aW9ucy9jb25zdGFudHMucmJcbiAqL1xuLypcbiAqIEEgcGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUnVieSBkaXNwbGF5IGZ1bmN0aW9ucyBmcm9tIENvbXBhc3M6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vQ29tcGFzcy9jb21wYXNzL2Jsb2Ivc3RhYmxlL2NvcmUvbGliL2NvbXBhc3MvY29yZS9zYXNzX2V4dGVuc2lvbnMvZnVuY3Rpb25zL2Rpc3BsYXkucmJcbiAqL1xuLyohXG4gKiBCb290c3RyYXAgdjMuMy41IChodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbSlcbiAqIENvcHlyaWdodCAyMDExLTIwMTUgVHdpdHRlciwgSW5jLlxuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqL1xuLyohIG5vcm1hbGl6ZS5jc3MgdjMuMC4zIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcyAqL1xuaHRtbCB7XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xuICAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xufVxuXG5ib2R5IHtcbiAgbWFyZ2luOiAwO1xufVxuXG5hcnRpY2xlLFxuYXNpZGUsXG5kZXRhaWxzLFxuZmlnY2FwdGlvbixcbmZpZ3VyZSxcbmZvb3RlcixcbmhlYWRlcixcbmhncm91cCxcbm1haW4sXG5tZW51LFxubmF2LFxuc2VjdGlvbixcbnN1bW1hcnkge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuYXVkaW8sXG5jYW52YXMsXG5wcm9ncmVzcyxcbnZpZGVvIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG5cbmF1ZGlvOm5vdChbY29udHJvbHNdKSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGhlaWdodDogMDtcbn1cblxuW2hpZGRlbl0sXG50ZW1wbGF0ZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbmEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuYTphY3RpdmUsXG5hOmhvdmVyIHtcbiAgb3V0bGluZTogMDtcbn1cblxuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkO1xufVxuXG5iLFxuc3Ryb25nIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbmRmbiB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbn1cblxuaDEge1xuICBmb250LXNpemU6IDJlbTtcbiAgbWFyZ2luOiAwLjY3ZW0gMDtcbn1cblxubWFyayB7XG4gIGJhY2tncm91bmQ6ICNmZjA7XG4gIGNvbG9yOiAjMDAwO1xufVxuXG5zbWFsbCB7XG4gIGZvbnQtc2l6ZTogODAlO1xufVxuXG5zdWIsXG5zdXAge1xuICBmb250LXNpemU6IDc1JTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG5zdXAge1xuICB0b3A6IC0wLjVlbTtcbn1cblxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuXG5pbWcge1xuICBib3JkZXI6IDA7XG59XG5cbnN2Zzpub3QoOnJvb3QpIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuZmlndXJlIHtcbiAgbWFyZ2luOiAxZW0gNDBweDtcbn1cblxuaHIge1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgaGVpZ2h0OiAwO1xufVxuXG5wcmUge1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuY29kZSxcbmtiZCxcbnByZSxcbnNhbXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7XG4gIGZvbnQtc2l6ZTogMWVtO1xufVxuXG5idXR0b24sXG5pbnB1dCxcbm9wdGdyb3VwLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBjb2xvcjogaW5oZXJpdDtcbiAgZm9udDogaW5oZXJpdDtcbiAgbWFyZ2luOiAwO1xufVxuXG5idXR0b24ge1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuYnV0dG9uLFxuc2VsZWN0IHtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG59XG5cbmJ1dHRvbixcbmh0bWwgaW5wdXRbdHlwZT1cImJ1dHRvblwiXSwgaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbmJ1dHRvbltkaXNhYmxlZF0sXG5odG1sIGlucHV0W2Rpc2FibGVkXSB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxuaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXIge1xuICBib3JkZXI6IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbmlucHV0IHtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cblxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcGFkZGluZzogMDtcbn1cblxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG59XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuXG5maWVsZHNldCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gIG1hcmdpbjogMCAycHg7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjYyNWVtIDAuNzVlbTtcbn1cblxubGVnZW5kIHtcbiAgYm9yZGVyOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuXG50ZXh0YXJlYSB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG5vcHRncm91cCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG50YWJsZSB7XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGJvcmRlci1zcGFjaW5nOiAwO1xufVxuXG50ZCxcbnRoIHtcbiAgcGFkZGluZzogMDtcbn1cblxuLyohIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2g1YnAvaHRtbDUtYm9pbGVycGxhdGUvYmxvYi9tYXN0ZXIvc3JjL2Nzcy9tYWluLmNzcyAqL1xuQG1lZGlhIHByaW50IHtcbiAgKixcbiAgKjpiZWZvcmUsXG4gICo6YWZ0ZXIge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICMwMDAgIWltcG9ydGFudDtcbiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxuICBhLFxuICBhOnZpc2l0ZWQge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG4gIGFbaHJlZl06YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIChcIiBhdHRyKGhyZWYpIFwiKVwiO1xuICB9XG4gIGFiYnJbdGl0bGVdOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIiAoXCIgYXR0cih0aXRsZSkgXCIpXCI7XG4gIH1cbiAgYVtocmVmXj1cIiNcIl06YWZ0ZXIsXG4gIGFbaHJlZl49XCJqYXZhc2NyaXB0OlwiXTphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgfVxuICBwcmUsXG4gIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7XG4gICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkO1xuICB9XG4gIHRoZWFkIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7XG4gIH1cbiAgdHIsXG4gIGltZyB7XG4gICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkO1xuICB9XG4gIGltZyB7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIH1cbiAgcCxcbiAgaDIsXG4gIGgzIHtcbiAgICBvcnBoYW5zOiAzO1xuICAgIHdpZG93czogMztcbiAgfVxuICBoMixcbiAgaDMge1xuICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkO1xuICB9XG4gIC5uYXZiYXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbiAgLmJ0biA+IC5jYXJldCxcbiAgLmRyb3B1cCA+IC5idG4gPiAuY2FyZXQge1xuICAgIGJvcmRlci10b3AtY29sb3I6ICMwMDAgIWltcG9ydGFudDtcbiAgfVxuICAubGFiZWwge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG4gIH1cbiAgLnRhYmxlIHtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlICFpbXBvcnRhbnQ7XG4gIH1cbiAgLnRhYmxlIHRkLFxuICAudGFibGUgdGgge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDtcbiAgfVxuICAudGFibGUtYm9yZGVyZWQgdGgsXG4gIC50YWJsZS1ib3JkZXJlZCB0ZCB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2RkZCAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ0dseXBoaWNvbnMgSGFsZmxpbmdzJztcbiAgc3JjOiB1cmwoXCIuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLmVvdFwiKTtcbiAgc3JjOiB1cmwoXCIuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLmVvdD8jaWVmaXhcIikgZm9ybWF0KFwiZW1iZWRkZWQtb3BlbnR5cGVcIiksIHVybChcIi4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksIHVybChcIi4uL2ZvbnRzL2dseXBoaWNvbnMtaGFsZmxpbmdzLXJlZ3VsYXIud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpLCB1cmwoXCIuLi9mb250cy9nbHlwaGljb25zLWhhbGZsaW5ncy1yZWd1bGFyLnR0ZlwiKSBmb3JtYXQoXCJ0cnVldHlwZVwiKSwgdXJsKFwiLi4vZm9udHMvZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhci5zdmcjZ2x5cGhpY29uc19oYWxmbGluZ3NyZWd1bGFyXCIpIGZvcm1hdChcInN2Z1wiKTtcbn1cblxuLmdseXBoaWNvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAxcHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1mYW1pbHk6ICdHbHlwaGljb25zIEhhbGZsaW5ncyc7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xufVxuXG4uZ2x5cGhpY29uLWFzdGVyaXNrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyYVwiO1xufVxuXG4uZ2x5cGhpY29uLXBsdXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDJiXCI7XG59XG5cbi5nbHlwaGljb24tZXVybzpiZWZvcmUsXG4uZ2x5cGhpY29uLWV1cjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjBhY1wiO1xufVxuXG4uZ2x5cGhpY29uLW1pbnVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwyMjEyXCI7XG59XG5cbi5nbHlwaGljb24tY2xvdWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDI2MDFcIjtcbn1cblxuLmdseXBoaWNvbi1lbnZlbG9wZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjcwOVwiO1xufVxuXG4uZ2x5cGhpY29uLXBlbmNpbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjcwZlwiO1xufVxuXG4uZ2x5cGhpY29uLWdsYXNzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDAxXCI7XG59XG5cbi5nbHlwaGljb24tbXVzaWM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDJcIjtcbn1cblxuLmdseXBoaWNvbi1zZWFyY2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDNcIjtcbn1cblxuLmdseXBoaWNvbi1oZWFydDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAwNVwiO1xufVxuXG4uZ2x5cGhpY29uLXN0YXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDZcIjtcbn1cblxuLmdseXBoaWNvbi1zdGFyLWVtcHR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDA3XCI7XG59XG5cbi5nbHlwaGljb24tdXNlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAwOFwiO1xufVxuXG4uZ2x5cGhpY29uLWZpbG06YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMDlcIjtcbn1cblxuLmdseXBoaWNvbi10aC1sYXJnZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxMFwiO1xufVxuXG4uZ2x5cGhpY29uLXRoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDExXCI7XG59XG5cbi5nbHlwaGljb24tdGgtbGlzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxMlwiO1xufVxuXG4uZ2x5cGhpY29uLW9rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDEzXCI7XG59XG5cbi5nbHlwaGljb24tcmVtb3ZlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE0XCI7XG59XG5cbi5nbHlwaGljb24tem9vbS1pbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxNVwiO1xufVxuXG4uZ2x5cGhpY29uLXpvb20tb3V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE2XCI7XG59XG5cbi5nbHlwaGljb24tb2ZmOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE3XCI7XG59XG5cbi5nbHlwaGljb24tc2lnbmFsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE4XCI7XG59XG5cbi5nbHlwaGljb24tY29nOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDE5XCI7XG59XG5cbi5nbHlwaGljb24tdHJhc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjBcIjtcbn1cblxuLmdseXBoaWNvbi1ob21lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDIxXCI7XG59XG5cbi5nbHlwaGljb24tZmlsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyMlwiO1xufVxuXG4uZ2x5cGhpY29uLXRpbWU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjNcIjtcbn1cblxuLmdseXBoaWNvbi1yb2FkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDI0XCI7XG59XG5cbi5nbHlwaGljb24tZG93bmxvYWQtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDI1XCI7XG59XG5cbi5nbHlwaGljb24tZG93bmxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjZcIjtcbn1cblxuLmdseXBoaWNvbi11cGxvYWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMjdcIjtcbn1cblxuLmdseXBoaWNvbi1pbmJveDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAyOFwiO1xufVxuXG4uZ2x5cGhpY29uLXBsYXktY2lyY2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDI5XCI7XG59XG5cbi5nbHlwaGljb24tcmVwZWF0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDMwXCI7XG59XG5cbi5nbHlwaGljb24tcmVmcmVzaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzMVwiO1xufVxuXG4uZ2x5cGhpY29uLWxpc3QtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDMyXCI7XG59XG5cbi5nbHlwaGljb24tbG9jazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzM1wiO1xufVxuXG4uZ2x5cGhpY29uLWZsYWc6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwMzRcIjtcbn1cblxuLmdseXBoaWNvbi1oZWFkcGhvbmVzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDM1XCI7XG59XG5cbi5nbHlwaGljb24tdm9sdW1lLW9mZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAzNlwiO1xufVxuXG4uZ2x5cGhpY29uLXZvbHVtZS1kb3duOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDM3XCI7XG59XG5cbi5nbHlwaGljb24tdm9sdW1lLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDM4XCI7XG59XG5cbi5nbHlwaGljb24tcXJjb2RlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDM5XCI7XG59XG5cbi5nbHlwaGljb24tYmFyY29kZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0MFwiO1xufVxuXG4uZ2x5cGhpY29uLXRhZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0MVwiO1xufVxuXG4uZ2x5cGhpY29uLXRhZ3M6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDJcIjtcbn1cblxuLmdseXBoaWNvbi1ib29rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQzXCI7XG59XG5cbi5nbHlwaGljb24tYm9va21hcms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDRcIjtcbn1cblxuLmdseXBoaWNvbi1wcmludDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0NVwiO1xufVxuXG4uZ2x5cGhpY29uLWNhbWVyYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA0NlwiO1xufVxuXG4uZ2x5cGhpY29uLWZvbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNDdcIjtcbn1cblxuLmdseXBoaWNvbi1ib2xkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQ4XCI7XG59XG5cbi5nbHlwaGljb24taXRhbGljOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDQ5XCI7XG59XG5cbi5nbHlwaGljb24tdGV4dC1oZWlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNTBcIjtcbn1cblxuLmdseXBoaWNvbi10ZXh0LXdpZHRoOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDUxXCI7XG59XG5cbi5nbHlwaGljb24tYWxpZ24tbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1MlwiO1xufVxuXG4uZ2x5cGhpY29uLWFsaWduLWNlbnRlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1M1wiO1xufVxuXG4uZ2x5cGhpY29uLWFsaWduLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDU0XCI7XG59XG5cbi5nbHlwaGljb24tYWxpZ24tanVzdGlmeTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1NVwiO1xufVxuXG4uZ2x5cGhpY29uLWxpc3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNTZcIjtcbn1cblxuLmdseXBoaWNvbi1pbmRlbnQtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1N1wiO1xufVxuXG4uZ2x5cGhpY29uLWluZGVudC1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA1OFwiO1xufVxuXG4uZ2x5cGhpY29uLWZhY2V0aW1lLXZpZGVvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDU5XCI7XG59XG5cbi5nbHlwaGljb24tcGljdHVyZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2MFwiO1xufVxuXG4uZ2x5cGhpY29uLW1hcC1tYXJrZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjJcIjtcbn1cblxuLmdseXBoaWNvbi1hZGp1c3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjNcIjtcbn1cblxuLmdseXBoaWNvbi10aW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDY0XCI7XG59XG5cbi5nbHlwaGljb24tZWRpdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2NVwiO1xufVxuXG4uZ2x5cGhpY29uLXNoYXJlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDY2XCI7XG59XG5cbi5nbHlwaGljb24tY2hlY2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNjdcIjtcbn1cblxuLmdseXBoaWNvbi1tb3ZlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDY4XCI7XG59XG5cbi5nbHlwaGljb24tc3RlcC1iYWNrd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA2OVwiO1xufVxuXG4uZ2x5cGhpY29uLWZhc3QtYmFja3dhcmQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzBcIjtcbn1cblxuLmdseXBoaWNvbi1iYWNrd2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3MVwiO1xufVxuXG4uZ2x5cGhpY29uLXBsYXk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzJcIjtcbn1cblxuLmdseXBoaWNvbi1wYXVzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA3M1wiO1xufVxuXG4uZ2x5cGhpY29uLXN0b3A6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzRcIjtcbn1cblxuLmdseXBoaWNvbi1mb3J3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDc1XCI7XG59XG5cbi5nbHlwaGljb24tZmFzdC1mb3J3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDc2XCI7XG59XG5cbi5nbHlwaGljb24tc3RlcC1mb3J3YXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDc3XCI7XG59XG5cbi5nbHlwaGljb24tZWplY3Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzhcIjtcbn1cblxuLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwNzlcIjtcbn1cblxuLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDgwXCI7XG59XG5cbi5nbHlwaGljb24tcGx1cy1zaWduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDgxXCI7XG59XG5cbi5nbHlwaGljb24tbWludXMtc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4MlwiO1xufVxuXG4uZ2x5cGhpY29uLXJlbW92ZS1zaWduOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDgzXCI7XG59XG5cbi5nbHlwaGljb24tb2stc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4NFwiO1xufVxuXG4uZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODVcIjtcbn1cblxuLmdseXBoaWNvbi1pbmZvLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwODZcIjtcbn1cblxuLmdseXBoaWNvbi1zY3JlZW5zaG90OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDg3XCI7XG59XG5cbi5nbHlwaGljb24tcmVtb3ZlLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4OFwiO1xufVxuXG4uZ2x5cGhpY29uLW9rLWNpcmNsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA4OVwiO1xufVxuXG4uZ2x5cGhpY29uLWJhbi1jaXJjbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTBcIjtcbn1cblxuLmdseXBoaWNvbi1hcnJvdy1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMDkxXCI7XG59XG5cbi5nbHlwaGljb24tYXJyb3ctcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTJcIjtcbn1cblxuLmdseXBoaWNvbi1hcnJvdy11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5M1wiO1xufVxuXG4uZ2x5cGhpY29uLWFycm93LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTRcIjtcbn1cblxuLmdseXBoaWNvbi1zaGFyZS1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUwOTVcIjtcbn1cblxuLmdseXBoaWNvbi1yZXNpemUtZnVsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5NlwiO1xufVxuXG4uZ2x5cGhpY29uLXJlc2l6ZS1zbWFsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTA5N1wiO1xufVxuXG4uZ2x5cGhpY29uLWV4Y2xhbWF0aW9uLXNpZ246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDFcIjtcbn1cblxuLmdseXBoaWNvbi1naWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTAyXCI7XG59XG5cbi5nbHlwaGljb24tbGVhZjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwM1wiO1xufVxuXG4uZ2x5cGhpY29uLWZpcmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDRcIjtcbn1cblxuLmdseXBoaWNvbi1leWUtb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwNVwiO1xufVxuXG4uZ2x5cGhpY29uLWV5ZS1jbG9zZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwNlwiO1xufVxuXG4uZ2x5cGhpY29uLXdhcm5pbmctc2lnbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEwN1wiO1xufVxuXG4uZ2x5cGhpY29uLXBsYW5lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTA4XCI7XG59XG5cbi5nbHlwaGljb24tY2FsZW5kYXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMDlcIjtcbn1cblxuLmdseXBoaWNvbi1yYW5kb206YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTBcIjtcbn1cblxuLmdseXBoaWNvbi1jb21tZW50OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTExXCI7XG59XG5cbi5nbHlwaGljb24tbWFnbmV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTEyXCI7XG59XG5cbi5nbHlwaGljb24tY2hldnJvbi11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExM1wiO1xufVxuXG4uZ2x5cGhpY29uLWNoZXZyb24tZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTExNFwiO1xufVxuXG4uZ2x5cGhpY29uLXJldHdlZXQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTVcIjtcbn1cblxuLmdseXBoaWNvbi1zaG9wcGluZy1jYXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTE2XCI7XG59XG5cbi5nbHlwaGljb24tZm9sZGVyLWNsb3NlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTE3XCI7XG59XG5cbi5nbHlwaGljb24tZm9sZGVyLW9wZW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMThcIjtcbn1cblxuLmdseXBoaWNvbi1yZXNpemUtdmVydGljYWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMTlcIjtcbn1cblxuLmdseXBoaWNvbi1yZXNpemUtaG9yaXpvbnRhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyMFwiO1xufVxuXG4uZ2x5cGhpY29uLWhkZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyMVwiO1xufVxuXG4uZ2x5cGhpY29uLWJ1bGxob3JuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTIyXCI7XG59XG5cbi5nbHlwaGljb24tYmVsbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyM1wiO1xufVxuXG4uZ2x5cGhpY29uLWNlcnRpZmljYXRlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI0XCI7XG59XG5cbi5nbHlwaGljb24tdGh1bWJzLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI1XCI7XG59XG5cbi5nbHlwaGljb24tdGh1bWJzLWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMjZcIjtcbn1cblxuLmdseXBoaWNvbi1oYW5kLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI3XCI7XG59XG5cbi5nbHlwaGljb24taGFuZC1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTI4XCI7XG59XG5cbi5nbHlwaGljb24taGFuZC11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEyOVwiO1xufVxuXG4uZ2x5cGhpY29uLWhhbmQtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzMFwiO1xufVxuXG4uZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzMVwiO1xufVxuXG4uZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy1sZWZ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTMyXCI7XG59XG5cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTMzXCI7XG59XG5cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxMzRcIjtcbn1cblxuLmdseXBoaWNvbi1nbG9iZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzNVwiO1xufVxuXG4uZ2x5cGhpY29uLXdyZW5jaDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTEzNlwiO1xufVxuXG4uZ2x5cGhpY29uLXRhc2tzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTM3XCI7XG59XG5cbi5nbHlwaGljb24tZmlsdGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTM4XCI7XG59XG5cbi5nbHlwaGljb24tYnJpZWZjYXNlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTM5XCI7XG59XG5cbi5nbHlwaGljb24tZnVsbHNjcmVlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0MFwiO1xufVxuXG4uZ2x5cGhpY29uLWRhc2hib2FyZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0MVwiO1xufVxuXG4uZ2x5cGhpY29uLXBhcGVyY2xpcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0MlwiO1xufVxuXG4uZ2x5cGhpY29uLWhlYXJ0LWVtcHR5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQzXCI7XG59XG5cbi5nbHlwaGljb24tbGluazpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0NFwiO1xufVxuXG4uZ2x5cGhpY29uLXBob25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTQ1XCI7XG59XG5cbi5nbHlwaGljb24tcHVzaHBpbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0NlwiO1xufVxuXG4uZ2x5cGhpY29uLXVzZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0OFwiO1xufVxuXG4uZ2x5cGhpY29uLWdicDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE0OVwiO1xufVxuXG4uZ2x5cGhpY29uLXNvcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTBcIjtcbn1cblxuLmdseXBoaWNvbi1zb3J0LWJ5LWFscGhhYmV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTUxXCI7XG59XG5cbi5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldC1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTJcIjtcbn1cblxuLmdseXBoaWNvbi1zb3J0LWJ5LW9yZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTUzXCI7XG59XG5cbi5nbHlwaGljb24tc29ydC1ieS1vcmRlci1hbHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTRcIjtcbn1cblxuLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNTVcIjtcbn1cblxuLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXMtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTU2XCI7XG59XG5cbi5nbHlwaGljb24tdW5jaGVja2VkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTU3XCI7XG59XG5cbi5nbHlwaGljb24tZXhwYW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTU4XCI7XG59XG5cbi5nbHlwaGljb24tY29sbGFwc2UtZG93bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE1OVwiO1xufVxuXG4uZ2x5cGhpY29uLWNvbGxhcHNlLXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTYwXCI7XG59XG5cbi5nbHlwaGljb24tbG9nLWluOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTYxXCI7XG59XG5cbi5nbHlwaGljb24tZmxhc2g6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjJcIjtcbn1cblxuLmdseXBoaWNvbi1sb2ctb3V0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTYzXCI7XG59XG5cbi5nbHlwaGljb24tbmV3LXdpbmRvdzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2NFwiO1xufVxuXG4uZ2x5cGhpY29uLXJlY29yZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE2NVwiO1xufVxuXG4uZ2x5cGhpY29uLXNhdmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjZcIjtcbn1cblxuLmdseXBoaWNvbi1vcGVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTY3XCI7XG59XG5cbi5nbHlwaGljb24tc2F2ZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjhcIjtcbn1cblxuLmdseXBoaWNvbi1pbXBvcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNjlcIjtcbn1cblxuLmdseXBoaWNvbi1leHBvcnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzBcIjtcbn1cblxuLmdseXBoaWNvbi1zZW5kOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTcxXCI7XG59XG5cbi5nbHlwaGljb24tZmxvcHB5LWRpc2s6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzJcIjtcbn1cblxuLmdseXBoaWNvbi1mbG9wcHktc2F2ZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzNcIjtcbn1cblxuLmdseXBoaWNvbi1mbG9wcHktcmVtb3ZlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTc0XCI7XG59XG5cbi5nbHlwaGljb24tZmxvcHB5LXNhdmU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzVcIjtcbn1cblxuLmdseXBoaWNvbi1mbG9wcHktb3BlbjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE3NlwiO1xufVxuXG4uZ2x5cGhpY29uLWNyZWRpdC1jYXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTc3XCI7XG59XG5cbi5nbHlwaGljb24tdHJhbnNmZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxNzhcIjtcbn1cblxuLmdseXBoaWNvbi1jdXRsZXJ5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTc5XCI7XG59XG5cbi5nbHlwaGljb24taGVhZGVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTgwXCI7XG59XG5cbi5nbHlwaGljb24tY29tcHJlc3NlZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4MVwiO1xufVxuXG4uZ2x5cGhpY29uLWVhcnBob25lOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTgyXCI7XG59XG5cbi5nbHlwaGljb24tcGhvbmUtYWx0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTgzXCI7XG59XG5cbi5nbHlwaGljb24tdG93ZXI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODRcIjtcbn1cblxuLmdseXBoaWNvbi1zdGF0czpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE4NVwiO1xufVxuXG4uZ2x5cGhpY29uLXNkLXZpZGVvOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTg2XCI7XG59XG5cbi5nbHlwaGljb24taGQtdmlkZW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODdcIjtcbn1cblxuLmdseXBoaWNvbi1zdWJ0aXRsZXM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODhcIjtcbn1cblxuLmdseXBoaWNvbi1zb3VuZC1zdGVyZW86YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxODlcIjtcbn1cblxuLmdseXBoaWNvbi1zb3VuZC1kb2xieTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5MFwiO1xufVxuXG4uZ2x5cGhpY29uLXNvdW5kLTUtMTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5MVwiO1xufVxuXG4uZ2x5cGhpY29uLXNvdW5kLTYtMTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5MlwiO1xufVxuXG4uZ2x5cGhpY29uLXNvdW5kLTctMTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5M1wiO1xufVxuXG4uZ2x5cGhpY29uLWNvcHlyaWdodC1tYXJrOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMTk0XCI7XG59XG5cbi5nbHlwaGljb24tcmVnaXN0cmF0aW9uLW1hcms6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUxOTVcIjtcbn1cblxuLmdseXBoaWNvbi1jbG91ZC1kb3dubG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5N1wiO1xufVxuXG4uZ2x5cGhpY29uLWNsb3VkLXVwbG9hZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5OFwiO1xufVxuXG4uZ2x5cGhpY29uLXRyZWUtY29uaWZlcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTE5OVwiO1xufVxuXG4uZ2x5cGhpY29uLXRyZWUtZGVjaWR1b3VzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjAwXCI7XG59XG5cbi5nbHlwaGljb24tY2Q6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDFcIjtcbn1cblxuLmdseXBoaWNvbi1zYXZlLWZpbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDJcIjtcbn1cblxuLmdseXBoaWNvbi1vcGVuLWZpbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDNcIjtcbn1cblxuLmdseXBoaWNvbi1sZXZlbC11cDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwNFwiO1xufVxuXG4uZ2x5cGhpY29uLWNvcHk6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMDVcIjtcbn1cblxuLmdseXBoaWNvbi1wYXN0ZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIwNlwiO1xufVxuXG4uZ2x5cGhpY29uLWFsZXJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjA5XCI7XG59XG5cbi5nbHlwaGljb24tZXF1YWxpemVyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjEwXCI7XG59XG5cbi5nbHlwaGljb24ta2luZzpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxMVwiO1xufVxuXG4uZ2x5cGhpY29uLXF1ZWVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjEyXCI7XG59XG5cbi5nbHlwaGljb24tcGF3bjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxM1wiO1xufVxuXG4uZ2x5cGhpY29uLWJpc2hvcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxNFwiO1xufVxuXG4uZ2x5cGhpY29uLWtuaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxNVwiO1xufVxuXG4uZ2x5cGhpY29uLWJhYnktZm9ybXVsYTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIxNlwiO1xufVxuXG4uZ2x5cGhpY29uLXRlbnQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDI2ZmFcIjtcbn1cblxuLmdseXBoaWNvbi1ibGFja2JvYXJkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjE4XCI7XG59XG5cbi5nbHlwaGljb24tYmVkOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjE5XCI7XG59XG5cbi5nbHlwaGljb24tYXBwbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGY4ZmZcIjtcbn1cblxuLmdseXBoaWNvbi1lcmFzZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIyMVwiO1xufVxuXG4uZ2x5cGhpY29uLWhvdXJnbGFzczpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcMjMxYlwiO1xufVxuXG4uZ2x5cGhpY29uLWxhbXA6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjNcIjtcbn1cblxuLmdseXBoaWNvbi1kdXBsaWNhdGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjRcIjtcbn1cblxuLmdseXBoaWNvbi1waWdneS1iYW5rOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI1XCI7XG59XG5cbi5nbHlwaGljb24tc2Npc3NvcnM6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMjZcIjtcbn1cblxuLmdseXBoaWNvbi1iaXRjb2luOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI3XCI7XG59XG5cbi5nbHlwaGljb24tYnRjOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI3XCI7XG59XG5cbi5nbHlwaGljb24teGJ0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjI3XCI7XG59XG5cbi5nbHlwaGljb24teWVuOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwwMGE1XCI7XG59XG5cbi5nbHlwaGljb24tanB5OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFwwMGE1XCI7XG59XG5cbi5nbHlwaGljb24tcnVibGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDIwYmRcIjtcbn1cblxuLmdseXBoaWNvbi1ydWI6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXDIwYmRcIjtcbn1cblxuLmdseXBoaWNvbi1zY2FsZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzMFwiO1xufVxuXG4uZ2x5cGhpY29uLWljZS1sb2xseTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzMVwiO1xufVxuXG4uZ2x5cGhpY29uLWljZS1sb2xseS10YXN0ZWQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzJcIjtcbn1cblxuLmdseXBoaWNvbi1lZHVjYXRpb246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzNcIjtcbn1cblxuLmdseXBoaWNvbi1vcHRpb24taG9yaXpvbnRhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzNFwiO1xufVxuXG4uZ2x5cGhpY29uLW9wdGlvbi12ZXJ0aWNhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTIzNVwiO1xufVxuXG4uZ2x5cGhpY29uLW1lbnUtaGFtYnVyZ2VyOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjM2XCI7XG59XG5cbi5nbHlwaGljb24tbW9kYWwtd2luZG93OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjM3XCI7XG59XG5cbi5nbHlwaGljb24tb2lsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjM4XCI7XG59XG5cbi5nbHlwaGljb24tZ3JhaW46YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyMzlcIjtcbn1cblxuLmdseXBoaWNvbi1zdW5nbGFzc2VzOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQwXCI7XG59XG5cbi5nbHlwaGljb24tdGV4dC1zaXplOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQxXCI7XG59XG5cbi5nbHlwaGljb24tdGV4dC1jb2xvcjpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0MlwiO1xufVxuXG4uZ2x5cGhpY29uLXRleHQtYmFja2dyb3VuZDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0M1wiO1xufVxuXG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi10b3A6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDRcIjtcbn1cblxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tYm90dG9tOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjQ1XCI7XG59XG5cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLWhvcml6b250YWw6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNDZcIjtcbn1cblxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0N1wiO1xufVxuXG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi12ZXJ0aWNhbDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0OFwiO1xufVxuXG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1yaWdodDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI0OVwiO1xufVxuXG4uZ2x5cGhpY29uLXRyaWFuZ2xlLXJpZ2h0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjUwXCI7XG59XG5cbi5nbHlwaGljb24tdHJpYW5nbGUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1MVwiO1xufVxuXG4uZ2x5cGhpY29uLXRyaWFuZ2xlLWJvdHRvbTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1MlwiO1xufVxuXG4uZ2x5cGhpY29uLXRyaWFuZ2xlLXRvcDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1M1wiO1xufVxuXG4uZ2x5cGhpY29uLWNvbnNvbGU6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTRcIjtcbn1cblxuLmdseXBoaWNvbi1zdXBlcnNjcmlwdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1NVwiO1xufVxuXG4uZ2x5cGhpY29uLXN1YnNjcmlwdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1NlwiO1xufVxuXG4uZ2x5cGhpY29uLW1lbnUtbGVmdDpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTI1N1wiO1xufVxuXG4uZ2x5cGhpY29uLW1lbnUtcmlnaHQ6YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNThcIjtcbn1cblxuLmdseXBoaWNvbi1tZW51LWRvd246YmVmb3JlIHtcbiAgY29udGVudDogXCJcXGUyNTlcIjtcbn1cblxuLmdseXBoaWNvbi1tZW51LXVwOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXFxlMjYwXCI7XG59XG5cbioge1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuKjpiZWZvcmUsXG4qOmFmdGVyIHtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbmh0bWwge1xuICBmb250LXNpemU6IDEwcHg7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbmJvZHkge1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2FOZXVlTWVkaXVtXCIsIFwiSGVsdmV0aWNhTmV1ZS1NZWRpdW1cIiwgXCJIZWx2ZXRpY2EgTmV1ZSBNZWRpdW1cIiwgXCJIZWx2ZXRpY2FOZXVlXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgXCJMdWNpZGEgR3JhbmRlXCIsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICBjb2xvcjogIzIyMjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cblxuaW5wdXQsXG5idXR0b24sXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xufVxuXG5hIHtcbiAgY29sb3I6ICMzYTM5M2I7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuYTpob3ZlcixcbmE6Zm9jdXMge1xuICBjb2xvcjogIzE0MTMxNDtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbmE6Zm9jdXMge1xuICBvdXRsaW5lOiB0aGluIGRvdHRlZDtcbiAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xuICBvdXRsaW5lLW9mZnNldDogLTJweDtcbn1cblxuZmlndXJlIHtcbiAgbWFyZ2luOiAwO1xufVxuXG5pbWcge1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uaW1nLXJlc3BvbnNpdmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi5pbWctcm91bmRlZCB7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLmltZy10aHVtYm5haWwge1xuICBwYWRkaW5nOiA0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICAtby10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluLW91dDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi5pbWctY2lyY2xlIHtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xufVxuXG5ociB7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNmZmY7XG59XG5cbi5zci1vbmx5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xuICBoZWlnaHQ6IDFweDtcbiAgbWFyZ2luOiAtMXB4O1xuICBwYWRkaW5nOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xuICBib3JkZXI6IDA7XG59XG5cbi5zci1vbmx5LWZvY3VzYWJsZTphY3RpdmUsXG4uc3Itb25seS1mb2N1c2FibGU6Zm9jdXMge1xuICBwb3NpdGlvbjogc3RhdGljO1xuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXJnaW46IDA7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuICBjbGlwOiBhdXRvO1xufVxuXG5bcm9sZT1cImJ1dHRvblwiXSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNixcbi5oMSwgLmgyLCAuaDMsIC5oNCwgLmg1LCAuaDYge1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgbGluZS1oZWlnaHQ6IDEuMTtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbmgxIHNtYWxsLFxuaDEgLnNtYWxsLCBoMiBzbWFsbCxcbmgyIC5zbWFsbCwgaDMgc21hbGwsXG5oMyAuc21hbGwsIGg0IHNtYWxsLFxuaDQgLnNtYWxsLCBoNSBzbWFsbCxcbmg1IC5zbWFsbCwgaDYgc21hbGwsXG5oNiAuc21hbGwsXG4uaDEgc21hbGwsXG4uaDEgLnNtYWxsLCAuaDIgc21hbGwsXG4uaDIgLnNtYWxsLCAuaDMgc21hbGwsXG4uaDMgLnNtYWxsLCAuaDQgc21hbGwsXG4uaDQgLnNtYWxsLCAuaDUgc21hbGwsXG4uaDUgLnNtYWxsLCAuaDYgc21hbGwsXG4uaDYgLnNtYWxsIHtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGNvbG9yOiAjOTk5O1xufVxuXG5oMSwgLmgxLFxuaDIsIC5oMixcbmgzLCAuaDMge1xuICBtYXJnaW4tdG9wOiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG5oMSBzbWFsbCxcbmgxIC5zbWFsbCwgLmgxIHNtYWxsLFxuLmgxIC5zbWFsbCxcbmgyIHNtYWxsLFxuaDIgLnNtYWxsLCAuaDIgc21hbGwsXG4uaDIgLnNtYWxsLFxuaDMgc21hbGwsXG5oMyAuc21hbGwsIC5oMyBzbWFsbCxcbi5oMyAuc21hbGwge1xuICBmb250LXNpemU6IDY1JTtcbn1cblxuaDQsIC5oNCxcbmg1LCAuaDUsXG5oNiwgLmg2IHtcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxuaDQgc21hbGwsXG5oNCAuc21hbGwsIC5oNCBzbWFsbCxcbi5oNCAuc21hbGwsXG5oNSBzbWFsbCxcbmg1IC5zbWFsbCwgLmg1IHNtYWxsLFxuLmg1IC5zbWFsbCxcbmg2IHNtYWxsLFxuaDYgLnNtYWxsLCAuaDYgc21hbGwsXG4uaDYgLnNtYWxsIHtcbiAgZm9udC1zaXplOiA3NSU7XG59XG5cbmgxLCAuaDEge1xuICBmb250LXNpemU6IDEuNTcxZW07XG59XG5cbmgyLCAuaDIge1xuICBmb250LXNpemU6IDIycHg7XG59XG5cbmgzLCAuaDMge1xuICBmb250LXNpemU6IDE3cHg7XG59XG5cbmg0LCAuaDQge1xuICBmb250LXNpemU6IDE0cHg7XG59XG5cbmg1LCAuaDUge1xuICBmb250LXNpemU6IDE0cHg7XG59XG5cbmg2LCAuaDYge1xuICBmb250LXNpemU6IDE0cHg7XG59XG5cbnAge1xuICBtYXJnaW46IDAgMCAxMHB4O1xufVxuXG4ubGVhZCB7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5sZWFkIHtcbiAgICBmb250LXNpemU6IDIxcHg7XG4gIH1cbn1cblxuc21hbGwsXG4uc21hbGwge1xuICBmb250LXNpemU6IDg1JTtcbn1cblxubWFyayxcbi5tYXJrIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxZTNjMjtcbiAgcGFkZGluZzogLjJlbTtcbn1cblxuLnRleHQtbGVmdCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi50ZXh0LXJpZ2h0IHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG5cbi50ZXh0LWNlbnRlciB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnRleHQtanVzdGlmeSB7XG4gIHRleHQtYWxpZ246IGp1c3RpZnk7XG59XG5cbi50ZXh0LW5vd3JhcCB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi50ZXh0LWxvd2VyY2FzZSB7XG4gIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2U7XG59XG5cbi50ZXh0LXVwcGVyY2FzZSwgLmluaXRpYWxpc20ge1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG4udGV4dC1jYXBpdGFsaXplIHtcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG59XG5cbi50ZXh0LW11dGVkIHtcbiAgY29sb3I6ICM5OTk7XG59XG5cbi50ZXh0LXByaW1hcnkge1xuICBjb2xvcjogIzNhMzkzYjtcbn1cblxuYS50ZXh0LXByaW1hcnk6aG92ZXIsXG5hLnRleHQtcHJpbWFyeTpmb2N1cyB7XG4gIGNvbG9yOiAjMjEyMDIxO1xufVxuXG4udGV4dC1zdWNjZXNzIHtcbiAgY29sb3I6ICM2YzZjNmM7XG59XG5cbmEudGV4dC1zdWNjZXNzOmhvdmVyLFxuYS50ZXh0LXN1Y2Nlc3M6Zm9jdXMge1xuICBjb2xvcjogIzUyNTI1Mjtcbn1cblxuLnRleHQtaW5mbyB7XG4gIGNvbG9yOiAjNmM2YzZjO1xufVxuXG5hLnRleHQtaW5mbzpob3ZlcixcbmEudGV4dC1pbmZvOmZvY3VzIHtcbiAgY29sb3I6ICM1MjUyNTI7XG59XG5cbi50ZXh0LXdhcm5pbmcge1xuICBjb2xvcjogIzZjNmM2Yztcbn1cblxuYS50ZXh0LXdhcm5pbmc6aG92ZXIsXG5hLnRleHQtd2FybmluZzpmb2N1cyB7XG4gIGNvbG9yOiAjNTI1MjUyO1xufVxuXG4udGV4dC1kYW5nZXIge1xuICBjb2xvcjogIzZjNmM2Yztcbn1cblxuYS50ZXh0LWRhbmdlcjpob3ZlcixcbmEudGV4dC1kYW5nZXI6Zm9jdXMge1xuICBjb2xvcjogIzUyNTI1Mjtcbn1cblxuLmJnLXByaW1hcnkge1xuICBjb2xvcjogI2ZmZjtcbn1cblxuLmJnLXByaW1hcnkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2EzOTNiO1xufVxuXG5hLmJnLXByaW1hcnk6aG92ZXIsXG5hLmJnLXByaW1hcnk6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyMDIxO1xufVxuXG4uYmctc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkYWU2Y2I7XG59XG5cbmEuYmctc3VjY2Vzczpob3ZlcixcbmEuYmctc3VjY2Vzczpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjMWQ1YTk7XG59XG5cbi5iZy1pbmZvIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5ZWRmNztcbn1cblxuYS5iZy1pbmZvOmhvdmVyLFxuYS5iZy1pbmZvOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2FmZDllZTtcbn1cblxuLmJnLXdhcm5pbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFlM2MyO1xufVxuXG5hLmJnLXdhcm5pbmc6aG92ZXIsXG5hLmJnLXdhcm5pbmc6Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTdkMDk5O1xufVxuXG4uYmctZGFuZ2VyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VhYzNjNztcbn1cblxuYS5iZy1kYW5nZXI6aG92ZXIsXG5hLmJnLWRhbmdlcjpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkZDlkYTQ7XG59XG5cbi5wYWdlLWhlYWRlciB7XG4gIHBhZGRpbmctYm90dG9tOiA5cHg7XG4gIG1hcmdpbjogNDBweCAwIDIwcHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZmZmO1xufVxuXG51bCxcbm9sIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxudWwgdWwsXG51bCBvbCxcbm9sIHVsLFxub2wgb2wge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4ubGlzdC11bnN0eWxlZCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxuLmxpc3QtaW5saW5lIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBtYXJnaW4tbGVmdDogLTVweDtcbn1cblxuLmxpc3QtaW5saW5lID4gbGkge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmctbGVmdDogNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XG59XG5cbmRsIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuZHQsXG5kZCB7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbn1cblxuZHQge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuZGQge1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLmRsLWhvcml6b250YWwgZGQ6YmVmb3JlLFxuLmRsLWhvcml6b250YWwgZGQ6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgZGlzcGxheTogdGFibGU7XG59XG5cbi5kbC1ob3Jpem9udGFsIGRkOmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAuZGwtaG9yaXpvbnRhbCBkdCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IDE2MHB4O1xuICAgIGNsZWFyOiBsZWZ0O1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuICAuZGwtaG9yaXpvbnRhbCBkZCB7XG4gICAgbWFyZ2luLWxlZnQ6IDE4MHB4O1xuICB9XG59XG5cbmFiYnJbdGl0bGVdLFxuYWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXSB7XG4gIGN1cnNvcjogaGVscDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjOTk5O1xufVxuXG4uaW5pdGlhbGlzbSB7XG4gIGZvbnQtc2l6ZTogOTAlO1xufVxuXG5ibG9ja3F1b3RlIHtcbiAgcGFkZGluZzogMTBweCAyMHB4O1xuICBtYXJnaW46IDAgMCAyMHB4O1xuICBmb250LXNpemU6IDE3LjVweDtcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjZmZmO1xufVxuXG5ibG9ja3F1b3RlIHA6bGFzdC1jaGlsZCxcbmJsb2NrcXVvdGUgdWw6bGFzdC1jaGlsZCxcbmJsb2NrcXVvdGUgb2w6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbmJsb2NrcXVvdGUgZm9vdGVyLFxuYmxvY2txdW90ZSBzbWFsbCxcbmJsb2NrcXVvdGUgLnNtYWxsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZvbnQtc2l6ZTogODAlO1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7XG4gIGNvbG9yOiAjOTk5O1xufVxuXG5ibG9ja3F1b3RlIGZvb3RlcjpiZWZvcmUsXG5ibG9ja3F1b3RlIHNtYWxsOmJlZm9yZSxcbmJsb2NrcXVvdGUgLnNtYWxsOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXDIwMTQgXFwwMEEwJztcbn1cblxuLmJsb2NrcXVvdGUtcmV2ZXJzZSxcbmJsb2NrcXVvdGUucHVsbC1yaWdodCB7XG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgI2ZmZjtcbiAgYm9yZGVyLWxlZnQ6IDA7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG4uYmxvY2txdW90ZS1yZXZlcnNlIGZvb3RlcjpiZWZvcmUsXG4uYmxvY2txdW90ZS1yZXZlcnNlIHNtYWxsOmJlZm9yZSxcbi5ibG9ja3F1b3RlLXJldmVyc2UgLnNtYWxsOmJlZm9yZSxcbmJsb2NrcXVvdGUucHVsbC1yaWdodCBmb290ZXI6YmVmb3JlLFxuYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxsOmJlZm9yZSxcbmJsb2NrcXVvdGUucHVsbC1yaWdodCAuc21hbGw6YmVmb3JlIHtcbiAgY29udGVudDogJyc7XG59XG5cbi5ibG9ja3F1b3RlLXJldmVyc2UgZm9vdGVyOmFmdGVyLFxuLmJsb2NrcXVvdGUtcmV2ZXJzZSBzbWFsbDphZnRlcixcbi5ibG9ja3F1b3RlLXJldmVyc2UgLnNtYWxsOmFmdGVyLFxuYmxvY2txdW90ZS5wdWxsLXJpZ2h0IGZvb3RlcjphZnRlcixcbmJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbDphZnRlcixcbmJsb2NrcXVvdGUucHVsbC1yaWdodCAuc21hbGw6YWZ0ZXIge1xuICBjb250ZW50OiAnXFwwMEEwIFxcMjAxNCc7XG59XG5cbmFkZHJlc3Mge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbn1cblxuY29kZSxcbmtiZCxcbnByZSxcbnNhbXAge1xuICBmb250LWZhbWlseTogTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlO1xufVxuXG5jb2RlIHtcbiAgcGFkZGluZzogMnB4IDRweDtcbiAgZm9udC1zaXplOiA5MCU7XG4gIGNvbG9yOiAjYzcyNTRlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmMmY0O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbmtiZCB7XG4gIHBhZGRpbmc6IDJweCA0cHg7XG4gIGZvbnQtc2l6ZTogOTAlO1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMztcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xufVxuXG5rYmQga2JkIHtcbiAgcGFkZGluZzogMDtcbiAgZm9udC1zaXplOiAxMDAlO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cblxucHJlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDkuNXB4O1xuICBtYXJnaW46IDAgMCAxMHB4O1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbiAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIGNvbG9yOiAjMjIyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbnByZSBjb2RlIHtcbiAgcGFkZGluZzogMDtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBjb2xvcjogaW5oZXJpdDtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLnByZS1zY3JvbGxhYmxlIHtcbiAgbWF4LWhlaWdodDogMzQwcHg7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbn1cblxuLmNvbnRhaW5lciB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgcGFkZGluZy1yaWdodDogMDtcbn1cblxuLmNvbnRhaW5lcjpiZWZvcmUsXG4uY29udGFpbmVyOmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4uY29udGFpbmVyOmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAuY29udGFpbmVyIHtcbiAgICB3aWR0aDogOTQwcHg7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAuY29udGFpbmVyIHtcbiAgICB3aWR0aDogMTE0MHB4O1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxNjgwKSB7XG4gIC5jb250YWluZXIge1xuICAgIHdpZHRoOiAxNTQwcHg7XG4gIH1cbn1cblxuLmNvbnRhaW5lci1mbHVpZCB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgcGFkZGluZy1yaWdodDogMDtcbn1cblxuLmNvbnRhaW5lci1mbHVpZDpiZWZvcmUsXG4uY29udGFpbmVyLWZsdWlkOmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4uY29udGFpbmVyLWZsdWlkOmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG5cbi5yb3cge1xuICBtYXJnaW4tbGVmdDogMDtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xufVxuXG4ucm93OmJlZm9yZSxcbi5yb3c6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgZGlzcGxheTogdGFibGU7XG59XG5cbi5yb3c6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuLmNvbC14cy0xLCAuY29sLXNtLTEsIC5jb2wtbWQtMSwgLmNvbC1sZy0xLCAuY29sLXhzLTIsIC5jb2wtc20tMiwgLmNvbC1tZC0yLCAuY29sLWxnLTIsIC5jb2wteHMtMywgLmNvbC1zbS0zLCAuY29sLW1kLTMsIC5jb2wtbGctMywgLmNvbC14cy00LCAuY29sLXNtLTQsIC5jb2wtbWQtNCwgLmNvbC1sZy00LCAuY29sLXhzLTUsIC5jb2wtc20tNSwgLmNvbC1tZC01LCAuY29sLWxnLTUsIC5jb2wteHMtNiwgLmNvbC1zbS02LCAuY29sLW1kLTYsIC5jb2wtbGctNiwgLmNvbC14cy03LCAuY29sLXNtLTcsIC5jb2wtbWQtNywgLmNvbC1sZy03LCAuY29sLXhzLTgsIC5jb2wtc20tOCwgLmNvbC1tZC04LCAuY29sLWxnLTgsIC5jb2wteHMtOSwgLmNvbC1zbS05LCAuY29sLW1kLTksIC5jb2wtbGctOSwgLmNvbC14cy0xMCwgLmNvbC1zbS0xMCwgLmNvbC1tZC0xMCwgLmNvbC1sZy0xMCwgLmNvbC14cy0xMSwgLmNvbC1zbS0xMSwgLmNvbC1tZC0xMSwgLmNvbC1sZy0xMSwgLmNvbC14cy0xMiwgLmNvbC1zbS0xMiwgLmNvbC1tZC0xMiwgLmNvbC1sZy0xMiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLWhlaWdodDogMXB4O1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG59XG5cbi5jb2wteHMtMSwgLmNvbC14cy0yLCAuY29sLXhzLTMsIC5jb2wteHMtNCwgLmNvbC14cy01LCAuY29sLXhzLTYsIC5jb2wteHMtNywgLmNvbC14cy04LCAuY29sLXhzLTksIC5jb2wteHMtMTAsIC5jb2wteHMtMTEsIC5jb2wteHMtMTIge1xuICBmbG9hdDogbGVmdDtcbn1cblxuLmNvbC14cy0xIHtcbiAgd2lkdGg6IDguMzMzMzMzMzMzMyU7XG59XG5cbi5jb2wteHMtMiB7XG4gIHdpZHRoOiAxNi42NjY2NjY2NjY3JTtcbn1cblxuLmNvbC14cy0zIHtcbiAgd2lkdGg6IDI1JTtcbn1cblxuLmNvbC14cy00IHtcbiAgd2lkdGg6IDMzLjMzMzMzMzMzMzMlO1xufVxuXG4uY29sLXhzLTUge1xuICB3aWR0aDogNDEuNjY2NjY2NjY2NyU7XG59XG5cbi5jb2wteHMtNiB7XG4gIHdpZHRoOiA1MCU7XG59XG5cbi5jb2wteHMtNyB7XG4gIHdpZHRoOiA1OC4zMzMzMzMzMzMzJTtcbn1cblxuLmNvbC14cy04IHtcbiAgd2lkdGg6IDY2LjY2NjY2NjY2NjclO1xufVxuXG4uY29sLXhzLTkge1xuICB3aWR0aDogNzUlO1xufVxuXG4uY29sLXhzLTEwIHtcbiAgd2lkdGg6IDgzLjMzMzMzMzMzMzMlO1xufVxuXG4uY29sLXhzLTExIHtcbiAgd2lkdGg6IDkxLjY2NjY2NjY2NjclO1xufVxuXG4uY29sLXhzLTEyIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5jb2wteHMtcHVsbC0wIHtcbiAgcmlnaHQ6IGF1dG87XG59XG5cbi5jb2wteHMtcHVsbC0xIHtcbiAgcmlnaHQ6IDguMzMzMzMzMzMzMyU7XG59XG5cbi5jb2wteHMtcHVsbC0yIHtcbiAgcmlnaHQ6IDE2LjY2NjY2NjY2NjclO1xufVxuXG4uY29sLXhzLXB1bGwtMyB7XG4gIHJpZ2h0OiAyNSU7XG59XG5cbi5jb2wteHMtcHVsbC00IHtcbiAgcmlnaHQ6IDMzLjMzMzMzMzMzMzMlO1xufVxuXG4uY29sLXhzLXB1bGwtNSB7XG4gIHJpZ2h0OiA0MS42NjY2NjY2NjY3JTtcbn1cblxuLmNvbC14cy1wdWxsLTYge1xuICByaWdodDogNTAlO1xufVxuXG4uY29sLXhzLXB1bGwtNyB7XG4gIHJpZ2h0OiA1OC4zMzMzMzMzMzMzJTtcbn1cblxuLmNvbC14cy1wdWxsLTgge1xuICByaWdodDogNjYuNjY2NjY2NjY2NyU7XG59XG5cbi5jb2wteHMtcHVsbC05IHtcbiAgcmlnaHQ6IDc1JTtcbn1cblxuLmNvbC14cy1wdWxsLTEwIHtcbiAgcmlnaHQ6IDgzLjMzMzMzMzMzMzMlO1xufVxuXG4uY29sLXhzLXB1bGwtMTEge1xuICByaWdodDogOTEuNjY2NjY2NjY2NyU7XG59XG5cbi5jb2wteHMtcHVsbC0xMiB7XG4gIHJpZ2h0OiAxMDAlO1xufVxuXG4uY29sLXhzLXB1c2gtMCB7XG4gIGxlZnQ6IGF1dG87XG59XG5cbi5jb2wteHMtcHVzaC0xIHtcbiAgbGVmdDogOC4zMzMzMzMzMzMzJTtcbn1cblxuLmNvbC14cy1wdXNoLTIge1xuICBsZWZ0OiAxNi42NjY2NjY2NjY3JTtcbn1cblxuLmNvbC14cy1wdXNoLTMge1xuICBsZWZ0OiAyNSU7XG59XG5cbi5jb2wteHMtcHVzaC00IHtcbiAgbGVmdDogMzMuMzMzMzMzMzMzMyU7XG59XG5cbi5jb2wteHMtcHVzaC01IHtcbiAgbGVmdDogNDEuNjY2NjY2NjY2NyU7XG59XG5cbi5jb2wteHMtcHVzaC02IHtcbiAgbGVmdDogNTAlO1xufVxuXG4uY29sLXhzLXB1c2gtNyB7XG4gIGxlZnQ6IDU4LjMzMzMzMzMzMzMlO1xufVxuXG4uY29sLXhzLXB1c2gtOCB7XG4gIGxlZnQ6IDY2LjY2NjY2NjY2NjclO1xufVxuXG4uY29sLXhzLXB1c2gtOSB7XG4gIGxlZnQ6IDc1JTtcbn1cblxuLmNvbC14cy1wdXNoLTEwIHtcbiAgbGVmdDogODMuMzMzMzMzMzMzMyU7XG59XG5cbi5jb2wteHMtcHVzaC0xMSB7XG4gIGxlZnQ6IDkxLjY2NjY2NjY2NjclO1xufVxuXG4uY29sLXhzLXB1c2gtMTIge1xuICBsZWZ0OiAxMDAlO1xufVxuXG4uY29sLXhzLW9mZnNldC0wIHtcbiAgbWFyZ2luLWxlZnQ6IDAlO1xufVxuXG4uY29sLXhzLW9mZnNldC0xIHtcbiAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMyU7XG59XG5cbi5jb2wteHMtb2Zmc2V0LTIge1xuICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NyU7XG59XG5cbi5jb2wteHMtb2Zmc2V0LTMge1xuICBtYXJnaW4tbGVmdDogMjUlO1xufVxuXG4uY29sLXhzLW9mZnNldC00IHtcbiAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xufVxuXG4uY29sLXhzLW9mZnNldC01IHtcbiAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjclO1xufVxuXG4uY29sLXhzLW9mZnNldC02IHtcbiAgbWFyZ2luLWxlZnQ6IDUwJTtcbn1cblxuLmNvbC14cy1vZmZzZXQtNyB7XG4gIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzJTtcbn1cblxuLmNvbC14cy1vZmZzZXQtOCB7XG4gIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NjY3JTtcbn1cblxuLmNvbC14cy1vZmZzZXQtOSB7XG4gIG1hcmdpbi1sZWZ0OiA3NSU7XG59XG5cbi5jb2wteHMtb2Zmc2V0LTEwIHtcbiAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xufVxuXG4uY29sLXhzLW9mZnNldC0xMSB7XG4gIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY3JTtcbn1cblxuLmNvbC14cy1vZmZzZXQtMTIge1xuICBtYXJnaW4tbGVmdDogMTAwJTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5jb2wtc20tMSwgLmNvbC1zbS0yLCAuY29sLXNtLTMsIC5jb2wtc20tNCwgLmNvbC1zbS01LCAuY29sLXNtLTYsIC5jb2wtc20tNywgLmNvbC1zbS04LCAuY29sLXNtLTksIC5jb2wtc20tMTAsIC5jb2wtc20tMTEsIC5jb2wtc20tMTIge1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG4gIC5jb2wtc20tMSB7XG4gICAgd2lkdGg6IDguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS0yIHtcbiAgICB3aWR0aDogMTYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS0zIHtcbiAgICB3aWR0aDogMjUlO1xuICB9XG4gIC5jb2wtc20tNCB7XG4gICAgd2lkdGg6IDMzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tNSB7XG4gICAgd2lkdGg6IDQxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tNiB7XG4gICAgd2lkdGg6IDUwJTtcbiAgfVxuICAuY29sLXNtLTcge1xuICAgIHdpZHRoOiA1OC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLTgge1xuICAgIHdpZHRoOiA2Ni42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLTkge1xuICAgIHdpZHRoOiA3NSU7XG4gIH1cbiAgLmNvbC1zbS0xMCB7XG4gICAgd2lkdGg6IDgzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tMTEge1xuICAgIHdpZHRoOiA5MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLTEyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAuY29sLXNtLXB1bGwtMCB7XG4gICAgcmlnaHQ6IGF1dG87XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTEge1xuICAgIHJpZ2h0OiA4LjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tcHVsbC0yIHtcbiAgICByaWdodDogMTYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTMge1xuICAgIHJpZ2h0OiAyNSU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTQge1xuICAgIHJpZ2h0OiAzMy4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLXB1bGwtNSB7XG4gICAgcmlnaHQ6IDQxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tcHVsbC02IHtcbiAgICByaWdodDogNTAlO1xuICB9XG4gIC5jb2wtc20tcHVsbC03IHtcbiAgICByaWdodDogNTguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1wdWxsLTgge1xuICAgIHJpZ2h0OiA2Ni42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLXB1bGwtOSB7XG4gICAgcmlnaHQ6IDc1JTtcbiAgfVxuICAuY29sLXNtLXB1bGwtMTAge1xuICAgIHJpZ2h0OiA4My4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLXB1bGwtMTEge1xuICAgIHJpZ2h0OiA5MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLXB1bGwtMTIge1xuICAgIHJpZ2h0OiAxMDAlO1xuICB9XG4gIC5jb2wtc20tcHVzaC0wIHtcbiAgICBsZWZ0OiBhdXRvO1xuICB9XG4gIC5jb2wtc20tcHVzaC0xIHtcbiAgICBsZWZ0OiA4LjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tcHVzaC0yIHtcbiAgICBsZWZ0OiAxNi42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLXB1c2gtMyB7XG4gICAgbGVmdDogMjUlO1xuICB9XG4gIC5jb2wtc20tcHVzaC00IHtcbiAgICBsZWZ0OiAzMy4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLXB1c2gtNSB7XG4gICAgbGVmdDogNDEuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTYge1xuICAgIGxlZnQ6IDUwJTtcbiAgfVxuICAuY29sLXNtLXB1c2gtNyB7XG4gICAgbGVmdDogNTguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTgge1xuICAgIGxlZnQ6IDY2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tcHVzaC05IHtcbiAgICBsZWZ0OiA3NSU7XG4gIH1cbiAgLmNvbC1zbS1wdXNoLTEwIHtcbiAgICBsZWZ0OiA4My4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLXB1c2gtMTEge1xuICAgIGxlZnQ6IDkxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tcHVzaC0xMiB7XG4gICAgbGVmdDogMTAwJTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC0wIHtcbiAgICBtYXJnaW4tbGVmdDogMCU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtMSB7XG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtMiB7XG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTMge1xuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtNCB7XG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTUge1xuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC02IHtcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTcge1xuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC04IHtcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtOSB7XG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcbiAgfVxuICAuY29sLXNtLW9mZnNldC0xMCB7XG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtc20tb2Zmc2V0LTExIHtcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1zbS1vZmZzZXQtMTIge1xuICAgIG1hcmdpbi1sZWZ0OiAxMDAlO1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLmNvbC1tZC0xLCAuY29sLW1kLTIsIC5jb2wtbWQtMywgLmNvbC1tZC00LCAuY29sLW1kLTUsIC5jb2wtbWQtNiwgLmNvbC1tZC03LCAuY29sLW1kLTgsIC5jb2wtbWQtOSwgLmNvbC1tZC0xMCwgLmNvbC1tZC0xMSwgLmNvbC1tZC0xMiB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbiAgLmNvbC1tZC0xIHtcbiAgICB3aWR0aDogOC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLTIge1xuICAgIHdpZHRoOiAxNi42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLTMge1xuICAgIHdpZHRoOiAyNSU7XG4gIH1cbiAgLmNvbC1tZC00IHtcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC01IHtcbiAgICB3aWR0aDogNDEuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC02IHtcbiAgICB3aWR0aDogNTAlO1xuICB9XG4gIC5jb2wtbWQtNyB7XG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtOCB7XG4gICAgd2lkdGg6IDY2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtOSB7XG4gICAgd2lkdGg6IDc1JTtcbiAgfVxuICAuY29sLW1kLTEwIHtcbiAgICB3aWR0aDogODMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC0xMSB7XG4gICAgd2lkdGg6IDkxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtMTIge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb2wtbWQtcHVsbC0wIHtcbiAgICByaWdodDogYXV0bztcbiAgfVxuICAuY29sLW1kLXB1bGwtMSB7XG4gICAgcmlnaHQ6IDguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTIge1xuICAgIHJpZ2h0OiAxNi42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLXB1bGwtMyB7XG4gICAgcmlnaHQ6IDI1JTtcbiAgfVxuICAuY29sLW1kLXB1bGwtNCB7XG4gICAgcmlnaHQ6IDMzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtcHVsbC01IHtcbiAgICByaWdodDogNDEuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTYge1xuICAgIHJpZ2h0OiA1MCU7XG4gIH1cbiAgLmNvbC1tZC1wdWxsLTcge1xuICAgIHJpZ2h0OiA1OC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLXB1bGwtOCB7XG4gICAgcmlnaHQ6IDY2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtcHVsbC05IHtcbiAgICByaWdodDogNzUlO1xuICB9XG4gIC5jb2wtbWQtcHVsbC0xMCB7XG4gICAgcmlnaHQ6IDgzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtcHVsbC0xMSB7XG4gICAgcmlnaHQ6IDkxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtcHVsbC0xMiB7XG4gICAgcmlnaHQ6IDEwMCU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTAge1xuICAgIGxlZnQ6IGF1dG87XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTEge1xuICAgIGxlZnQ6IDguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTIge1xuICAgIGxlZnQ6IDE2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtcHVzaC0zIHtcbiAgICBsZWZ0OiAyNSU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTQge1xuICAgIGxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtcHVzaC01IHtcbiAgICBsZWZ0OiA0MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLXB1c2gtNiB7XG4gICAgbGVmdDogNTAlO1xuICB9XG4gIC5jb2wtbWQtcHVzaC03IHtcbiAgICBsZWZ0OiA1OC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLXB1c2gtOCB7XG4gICAgbGVmdDogNjYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTkge1xuICAgIGxlZnQ6IDc1JTtcbiAgfVxuICAuY29sLW1kLXB1c2gtMTAge1xuICAgIGxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtcHVzaC0xMSB7XG4gICAgbGVmdDogOTEuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1wdXNoLTEyIHtcbiAgICBsZWZ0OiAxMDAlO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTAge1xuICAgIG1hcmdpbi1sZWZ0OiAwJTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC0xIHtcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC0yIHtcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtMyB7XG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC00IHtcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtNSB7XG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTYge1xuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtNyB7XG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTgge1xuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC05IHtcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xuICB9XG4gIC5jb2wtbWQtb2Zmc2V0LTEwIHtcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1tZC1vZmZzZXQtMTEge1xuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLW1kLW9mZnNldC0xMiB7XG4gICAgbWFyZ2luLWxlZnQ6IDEwMCU7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDE2ODApIHtcbiAgLmNvbC1sZy0xLCAuY29sLWxnLTIsIC5jb2wtbGctMywgLmNvbC1sZy00LCAuY29sLWxnLTUsIC5jb2wtbGctNiwgLmNvbC1sZy03LCAuY29sLWxnLTgsIC5jb2wtbGctOSwgLmNvbC1sZy0xMCwgLmNvbC1sZy0xMSwgLmNvbC1sZy0xMiB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbiAgLmNvbC1sZy0xIHtcbiAgICB3aWR0aDogOC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLTIge1xuICAgIHdpZHRoOiAxNi42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLTMge1xuICAgIHdpZHRoOiAyNSU7XG4gIH1cbiAgLmNvbC1sZy00IHtcbiAgICB3aWR0aDogMzMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy01IHtcbiAgICB3aWR0aDogNDEuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy02IHtcbiAgICB3aWR0aDogNTAlO1xuICB9XG4gIC5jb2wtbGctNyB7XG4gICAgd2lkdGg6IDU4LjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctOCB7XG4gICAgd2lkdGg6IDY2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctOSB7XG4gICAgd2lkdGg6IDc1JTtcbiAgfVxuICAuY29sLWxnLTEwIHtcbiAgICB3aWR0aDogODMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy0xMSB7XG4gICAgd2lkdGg6IDkxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctMTIge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5jb2wtbGctcHVsbC0wIHtcbiAgICByaWdodDogYXV0bztcbiAgfVxuICAuY29sLWxnLXB1bGwtMSB7XG4gICAgcmlnaHQ6IDguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTIge1xuICAgIHJpZ2h0OiAxNi42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLXB1bGwtMyB7XG4gICAgcmlnaHQ6IDI1JTtcbiAgfVxuICAuY29sLWxnLXB1bGwtNCB7XG4gICAgcmlnaHQ6IDMzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctcHVsbC01IHtcbiAgICByaWdodDogNDEuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTYge1xuICAgIHJpZ2h0OiA1MCU7XG4gIH1cbiAgLmNvbC1sZy1wdWxsLTcge1xuICAgIHJpZ2h0OiA1OC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLXB1bGwtOCB7XG4gICAgcmlnaHQ6IDY2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctcHVsbC05IHtcbiAgICByaWdodDogNzUlO1xuICB9XG4gIC5jb2wtbGctcHVsbC0xMCB7XG4gICAgcmlnaHQ6IDgzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctcHVsbC0xMSB7XG4gICAgcmlnaHQ6IDkxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctcHVsbC0xMiB7XG4gICAgcmlnaHQ6IDEwMCU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTAge1xuICAgIGxlZnQ6IGF1dG87XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTEge1xuICAgIGxlZnQ6IDguMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTIge1xuICAgIGxlZnQ6IDE2LjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctcHVzaC0zIHtcbiAgICBsZWZ0OiAyNSU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTQge1xuICAgIGxlZnQ6IDMzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctcHVzaC01IHtcbiAgICBsZWZ0OiA0MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLXB1c2gtNiB7XG4gICAgbGVmdDogNTAlO1xuICB9XG4gIC5jb2wtbGctcHVzaC03IHtcbiAgICBsZWZ0OiA1OC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLXB1c2gtOCB7XG4gICAgbGVmdDogNjYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTkge1xuICAgIGxlZnQ6IDc1JTtcbiAgfVxuICAuY29sLWxnLXB1c2gtMTAge1xuICAgIGxlZnQ6IDgzLjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctcHVzaC0xMSB7XG4gICAgbGVmdDogOTEuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1wdXNoLTEyIHtcbiAgICBsZWZ0OiAxMDAlO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTAge1xuICAgIG1hcmdpbi1sZWZ0OiAwJTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC0xIHtcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzMzMzMzMzJTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC0yIHtcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NjY2NjY2NyU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtMyB7XG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC00IHtcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtNSB7XG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjY2NjY2NjclO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTYge1xuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtNyB7XG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMzMzMzMzMlO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTgge1xuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC05IHtcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xuICB9XG4gIC5jb2wtbGctb2Zmc2V0LTEwIHtcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMzMzMzMzMyU7XG4gIH1cbiAgLmNvbC1sZy1vZmZzZXQtMTEge1xuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY2NjY2NjY3JTtcbiAgfVxuICAuY29sLWxnLW9mZnNldC0xMiB7XG4gICAgbWFyZ2luLWxlZnQ6IDEwMCU7XG4gIH1cbn1cblxudGFibGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuY2FwdGlvbiB7XG4gIHBhZGRpbmctdG9wOiA4cHg7XG4gIHBhZGRpbmctYm90dG9tOiA4cHg7XG4gIGNvbG9yOiAjOTk5O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG50aCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi50YWJsZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aCxcbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZCxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0aCxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZCxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aCxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0ZCB7XG4gIHBhZGRpbmc6IDhweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbn1cblxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoIHtcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNkZGQ7XG59XG5cbi50YWJsZSA+IGNhcHRpb24gKyB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsXG4udGFibGUgPiBjYXB0aW9uICsgdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkLFxuLnRhYmxlID4gY29sZ3JvdXAgKyB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsXG4udGFibGUgPiBjb2xncm91cCArIHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCxcbi50YWJsZSA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbi50YWJsZSA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCB7XG4gIGJvcmRlci10b3A6IDA7XG59XG5cbi50YWJsZSA+IHRib2R5ICsgdGJvZHkge1xuICBib3JkZXItdG9wOiAycHggc29saWQgI2RkZDtcbn1cblxuLnRhYmxlIC50YWJsZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cbi50YWJsZS1jb25kZW5zZWQgPiB0aGVhZCA+IHRyID4gdGgsXG4udGFibGUtY29uZGVuc2VkID4gdGhlYWQgPiB0ciA+IHRkLFxuLnRhYmxlLWNvbmRlbnNlZCA+IHRib2R5ID4gdHIgPiB0aCxcbi50YWJsZS1jb25kZW5zZWQgPiB0Ym9keSA+IHRyID4gdGQsXG4udGFibGUtY29uZGVuc2VkID4gdGZvb3QgPiB0ciA+IHRoLFxuLnRhYmxlLWNvbmRlbnNlZCA+IHRmb290ID4gdHIgPiB0ZCB7XG4gIHBhZGRpbmc6IDVweDtcbn1cblxuLnRhYmxlLWJvcmRlcmVkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbn1cblxuLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoLFxuLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkLFxuLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoLFxuLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRkLFxuLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRoLFxuLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbn1cblxuLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoLFxuLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRkIHtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMnB4O1xufVxuXG4udGFibGUtc3RyaXBlZCA+IHRib2R5ID4gdHI6bnRoLW9mLXR5cGUob2RkKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7XG59XG5cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xufVxuXG50YWJsZSBjb2xbY2xhc3MqPVwiY29sLVwiXSB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIGZsb2F0OiBub25lO1xuICBkaXNwbGF5OiB0YWJsZS1jb2x1bW47XG59XG5cbnRhYmxlIHRkW2NsYXNzKj1cImNvbC1cIl0sXG50YWJsZSB0aFtjbGFzcyo9XCJjb2wtXCJdIHtcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgZmxvYXQ6IG5vbmU7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG59XG5cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5hY3RpdmUsXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGguYWN0aXZlLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5hY3RpdmUgPiB0ZCxcbi50YWJsZSA+IHRoZWFkID4gdHIuYWN0aXZlID4gdGgsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGQuYWN0aXZlLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLmFjdGl2ZSxcbi50YWJsZSA+IHRib2R5ID4gdHIuYWN0aXZlID4gdGQsXG4udGFibGUgPiB0Ym9keSA+IHRyLmFjdGl2ZSA+IHRoLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLmFjdGl2ZSxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5hY3RpdmUsXG4udGFibGUgPiB0Zm9vdCA+IHRyLmFjdGl2ZSA+IHRkLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5hY3RpdmUgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG59XG5cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC5hY3RpdmU6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGguYWN0aXZlOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5hY3RpdmU6aG92ZXIgPiB0ZCxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAuYWN0aXZlLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5hY3RpdmU6aG92ZXIgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlOGU4ZTg7XG59XG5cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5zdWNjZXNzLFxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLnN1Y2Nlc3MsXG4udGFibGUgPiB0aGVhZCA+IHRyLnN1Y2Nlc3MgPiB0ZCxcbi50YWJsZSA+IHRoZWFkID4gdHIuc3VjY2VzcyA+IHRoLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLnN1Y2Nlc3MsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGguc3VjY2Vzcyxcbi50YWJsZSA+IHRib2R5ID4gdHIuc3VjY2VzcyA+IHRkLFxuLnRhYmxlID4gdGJvZHkgPiB0ci5zdWNjZXNzID4gdGgsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGQuc3VjY2Vzcyxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5zdWNjZXNzLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5zdWNjZXNzID4gdGQsXG4udGFibGUgPiB0Zm9vdCA+IHRyLnN1Y2Nlc3MgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkYWU2Y2I7XG59XG5cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC5zdWNjZXNzOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRoLnN1Y2Nlc3M6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLnN1Y2Nlc3M6aG92ZXIgPiB0ZCxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAuc3VjY2Vzcyxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuc3VjY2Vzczpob3ZlciA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NlZGViYTtcbn1cblxuLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRkLmluZm8sXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGguaW5mbyxcbi50YWJsZSA+IHRoZWFkID4gdHIuaW5mbyA+IHRkLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5pbmZvID4gdGgsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGQuaW5mbyxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0aC5pbmZvLFxuLnRhYmxlID4gdGJvZHkgPiB0ci5pbmZvID4gdGQsXG4udGFibGUgPiB0Ym9keSA+IHRyLmluZm8gPiB0aCxcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0ZC5pbmZvLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRoLmluZm8sXG4udGFibGUgPiB0Zm9vdCA+IHRyLmluZm8gPiB0ZCxcbi50YWJsZSA+IHRmb290ID4gdHIuaW5mbyA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5ZWRmNztcbn1cblxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ciA+IHRkLmluZm86aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGguaW5mbzpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIuaW5mbzpob3ZlciA+IHRkLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0cjpob3ZlciA+IC5pbmZvLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5pbmZvOmhvdmVyID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzRlM2YzO1xufVxuXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGQud2FybmluZyxcbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0aC53YXJuaW5nLFxuLnRhYmxlID4gdGhlYWQgPiB0ci53YXJuaW5nID4gdGQsXG4udGFibGUgPiB0aGVhZCA+IHRyLndhcm5pbmcgPiB0aCxcbi50YWJsZSA+IHRib2R5ID4gdHIgPiB0ZC53YXJuaW5nLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLndhcm5pbmcsXG4udGFibGUgPiB0Ym9keSA+IHRyLndhcm5pbmcgPiB0ZCxcbi50YWJsZSA+IHRib2R5ID4gdHIud2FybmluZyA+IHRoLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLndhcm5pbmcsXG4udGFibGUgPiB0Zm9vdCA+IHRyID4gdGgud2FybmluZyxcbi50YWJsZSA+IHRmb290ID4gdHIud2FybmluZyA+IHRkLFxuLnRhYmxlID4gdGZvb3QgPiB0ci53YXJuaW5nID4gdGgge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFlM2MyO1xufVxuXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGQud2FybmluZzpob3Zlcixcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0aC53YXJuaW5nOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci53YXJuaW5nOmhvdmVyID4gdGQsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyOmhvdmVyID4gLndhcm5pbmcsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyLndhcm5pbmc6aG92ZXIgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlY2Q5YWQ7XG59XG5cbi50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZC5kYW5nZXIsXG4udGFibGUgPiB0aGVhZCA+IHRyID4gdGguZGFuZ2VyLFxuLnRhYmxlID4gdGhlYWQgPiB0ci5kYW5nZXIgPiB0ZCxcbi50YWJsZSA+IHRoZWFkID4gdHIuZGFuZ2VyID4gdGgsXG4udGFibGUgPiB0Ym9keSA+IHRyID4gdGQuZGFuZ2VyLFxuLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRoLmRhbmdlcixcbi50YWJsZSA+IHRib2R5ID4gdHIuZGFuZ2VyID4gdGQsXG4udGFibGUgPiB0Ym9keSA+IHRyLmRhbmdlciA+IHRoLFxuLnRhYmxlID4gdGZvb3QgPiB0ciA+IHRkLmRhbmdlcixcbi50YWJsZSA+IHRmb290ID4gdHIgPiB0aC5kYW5nZXIsXG4udGFibGUgPiB0Zm9vdCA+IHRyLmRhbmdlciA+IHRkLFxuLnRhYmxlID4gdGZvb3QgPiB0ci5kYW5nZXIgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlYWMzYzc7XG59XG5cbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHIgPiB0ZC5kYW5nZXI6aG92ZXIsXG4udGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyID4gdGguZGFuZ2VyOmhvdmVyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5kYW5nZXI6aG92ZXIgPiB0ZCxcbi50YWJsZS1ob3ZlciA+IHRib2R5ID4gdHI6aG92ZXIgPiAuZGFuZ2VyLFxuLnRhYmxlLWhvdmVyID4gdGJvZHkgPiB0ci5kYW5nZXI6aG92ZXIgPiB0aCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlM2IwYjU7XG59XG5cbi50YWJsZS1yZXNwb25zaXZlIHtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgbWluLWhlaWdodDogMC4wMSU7XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC50YWJsZS1yZXNwb25zaXZlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IC1tcy1hdXRvaGlkaW5nLXNjcm9sbGJhcjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICB9XG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlID4gdGhlYWQgPiB0ciA+IHRoLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSA+IHRoZWFkID4gdHIgPiB0ZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgPiB0Ym9keSA+IHRyID4gdGgsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlID4gdGJvZHkgPiB0ciA+IHRkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSA+IHRmb290ID4gdHIgPiB0aCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgPiB0Zm9vdCA+IHRyID4gdGQge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQge1xuICAgIGJvcmRlcjogMDtcbiAgfVxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsXG4gIC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkOmZpcnN0LWNoaWxkIHtcbiAgICBib3JkZXItbGVmdDogMDtcbiAgfVxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZDpsYXN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZDpsYXN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuICAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0ZDpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gIH1cbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmxhc3QtY2hpbGQgPiB0aCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmxhc3QtY2hpbGQgPiB0ZCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyOmxhc3QtY2hpbGQgPiB0aCxcbiAgLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyOmxhc3QtY2hpbGQgPiB0ZCB7XG4gICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgfVxufVxuXG5maWVsZHNldCB7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgYm9yZGVyOiAwO1xuICBtaW4td2lkdGg6IDA7XG59XG5cbmxlZ2VuZCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgZm9udC1zaXplOiAyMXB4O1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgY29sb3I6ICMyMjI7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNWU1ZTU7XG59XG5cbmxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgbWFyZ2luOiA0cHggMCAwO1xuICBtYXJnaW4tdG9wOiAxcHggXFw5O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xufVxuXG5pbnB1dFt0eXBlPVwiZmlsZVwiXSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG5pbnB1dFt0eXBlPVwicmFuZ2VcIl0ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG59XG5cbnNlbGVjdFttdWx0aXBsZV0sXG5zZWxlY3Rbc2l6ZV0ge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbmlucHV0W3R5cGU9XCJmaWxlXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmZvY3VzIHtcbiAgb3V0bGluZTogdGhpbiBkb3R0ZWQ7XG4gIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XG59XG5cbm91dHB1dCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nLXRvcDogN3B4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbiAgY29sb3I6ICM0NDQ7XG59XG5cbi5mb3JtLWNvbnRyb2wge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMzRweDtcbiAgcGFkZGluZzogNnB4IDEycHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICBjb2xvcjogIzQ0NDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xuICAtd2Via2l0LXRyYW5zaXRpb246IGJvcmRlci1jb2xvciBlYXNlLWluLW91dCAwLjE1cywgYm94LXNoYWRvdyBlYXNlLWluLW91dCAwLjE1cztcbiAgLW8tdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIGVhc2UtaW4tb3V0IDAuMTVzLCBib3gtc2hhZG93IGVhc2UtaW4tb3V0IDAuMTVzO1xuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgZWFzZS1pbi1vdXQgMC4xNXMsIGJveC1zaGFkb3cgZWFzZS1pbi1vdXQgMC4xNXM7XG59XG5cbi5mb3JtLWNvbnRyb2w6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICM2NmFmZTk7XG4gIG91dGxpbmU6IDA7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgOHB4IHJnYmEoMTAyLCAxNzUsIDIzMywgMC42KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgOHB4IHJnYmEoMTAyLCAxNzUsIDIzMywgMC42KTtcbn1cblxuLmZvcm0tY29udHJvbDo6LW1vei1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjOTk5O1xuICBvcGFjaXR5OiAxO1xufVxuXG4uZm9ybS1jb250cm9sOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjOTk5O1xufVxuXG4uZm9ybS1jb250cm9sOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6ICM5OTk7XG59XG5cbi5mb3JtLWNvbnRyb2xbZGlzYWJsZWRdLFxuLmZvcm0tY29udHJvbFtyZWFkb25seV0sXG5maWVsZHNldFtkaXNhYmxlZF0gLmZvcm0tY29udHJvbCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIG9wYWNpdHk6IDE7XG59XG5cbi5mb3JtLWNvbnRyb2xbZGlzYWJsZWRdLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5mb3JtLWNvbnRyb2wge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG50ZXh0YXJlYS5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDApIHtcbiAgaW5wdXRbdHlwZT1cImRhdGVcIl0uZm9ybS1jb250cm9sLFxuICBpbnB1dFt0eXBlPVwidGltZVwiXS5mb3JtLWNvbnRyb2wsXG4gIGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXS5mb3JtLWNvbnRyb2wsXG4gIGlucHV0W3R5cGU9XCJtb250aFwiXS5mb3JtLWNvbnRyb2wge1xuICAgIGxpbmUtaGVpZ2h0OiAzNHB4O1xuICB9XG4gIGlucHV0W3R5cGU9XCJkYXRlXCJdLmlucHV0LXNtLFxuICAuaW5wdXQtZ3JvdXAtc20gPiBpbnB1dFt0eXBlPVwiZGF0ZVwiXS5mb3JtLWNvbnRyb2wsXG4gIC5pbnB1dC1ncm91cC1zbSA+IGlucHV0W3R5cGU9XCJkYXRlXCJdLmlucHV0LWdyb3VwLWFkZG9uLFxuICAuaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gaW5wdXRbdHlwZT1cImRhdGVcIl0uYnRuLFxuICAuaW5wdXQtZ3JvdXAtc20gaW5wdXRbdHlwZT1cImRhdGVcIl0sXG4gIGlucHV0W3R5cGU9XCJ0aW1lXCJdLmlucHV0LXNtLFxuICAuaW5wdXQtZ3JvdXAtc20gPiBpbnB1dFt0eXBlPVwidGltZVwiXS5mb3JtLWNvbnRyb2wsXG4gIC5pbnB1dC1ncm91cC1zbSA+IGlucHV0W3R5cGU9XCJ0aW1lXCJdLmlucHV0LWdyb3VwLWFkZG9uLFxuICAuaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gaW5wdXRbdHlwZT1cInRpbWVcIl0uYnRuLFxuICAuaW5wdXQtZ3JvdXAtc20gaW5wdXRbdHlwZT1cInRpbWVcIl0sXG4gIGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXS5pbnB1dC1zbSxcbiAgLmlucHV0LWdyb3VwLXNtID4gaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLmZvcm0tY29udHJvbCxcbiAgLmlucHV0LWdyb3VwLXNtID4gaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLmlucHV0LWdyb3VwLWFkZG9uLFxuICAuaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gaW5wdXRbdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJdLmJ0bixcbiAgLmlucHV0LWdyb3VwLXNtIGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXSxcbiAgaW5wdXRbdHlwZT1cIm1vbnRoXCJdLmlucHV0LXNtLFxuICAuaW5wdXQtZ3JvdXAtc20gPiBpbnB1dFt0eXBlPVwibW9udGhcIl0uZm9ybS1jb250cm9sLFxuICAuaW5wdXQtZ3JvdXAtc20gPiBpbnB1dFt0eXBlPVwibW9udGhcIl0uaW5wdXQtZ3JvdXAtYWRkb24sXG4gIC5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiBpbnB1dFt0eXBlPVwibW9udGhcIl0uYnRuLFxuICAuaW5wdXQtZ3JvdXAtc20gaW5wdXRbdHlwZT1cIm1vbnRoXCJdIHtcbiAgICBsaW5lLWhlaWdodDogMzBweDtcbiAgfVxuICBpbnB1dFt0eXBlPVwiZGF0ZVwiXS5pbnB1dC1sZyxcbiAgLmlucHV0LWdyb3VwLWxnID4gaW5wdXRbdHlwZT1cImRhdGVcIl0uZm9ybS1jb250cm9sLFxuICAuaW5wdXQtZ3JvdXAtbGcgPiBpbnB1dFt0eXBlPVwiZGF0ZVwiXS5pbnB1dC1ncm91cC1hZGRvbixcbiAgLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IGlucHV0W3R5cGU9XCJkYXRlXCJdLmJ0bixcbiAgLmlucHV0LWdyb3VwLWxnIGlucHV0W3R5cGU9XCJkYXRlXCJdLFxuICBpbnB1dFt0eXBlPVwidGltZVwiXS5pbnB1dC1sZyxcbiAgLmlucHV0LWdyb3VwLWxnID4gaW5wdXRbdHlwZT1cInRpbWVcIl0uZm9ybS1jb250cm9sLFxuICAuaW5wdXQtZ3JvdXAtbGcgPiBpbnB1dFt0eXBlPVwidGltZVwiXS5pbnB1dC1ncm91cC1hZGRvbixcbiAgLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IGlucHV0W3R5cGU9XCJ0aW1lXCJdLmJ0bixcbiAgLmlucHV0LWdyb3VwLWxnIGlucHV0W3R5cGU9XCJ0aW1lXCJdLFxuICBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0uaW5wdXQtbGcsXG4gIC5pbnB1dC1ncm91cC1sZyA+IGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXS5mb3JtLWNvbnRyb2wsXG4gIC5pbnB1dC1ncm91cC1sZyA+IGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXS5pbnB1dC1ncm91cC1hZGRvbixcbiAgLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IGlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXS5idG4sXG4gIC5pbnB1dC1ncm91cC1sZyBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG4gIGlucHV0W3R5cGU9XCJtb250aFwiXS5pbnB1dC1sZyxcbiAgLmlucHV0LWdyb3VwLWxnID4gaW5wdXRbdHlwZT1cIm1vbnRoXCJdLmZvcm0tY29udHJvbCxcbiAgLmlucHV0LWdyb3VwLWxnID4gaW5wdXRbdHlwZT1cIm1vbnRoXCJdLmlucHV0LWdyb3VwLWFkZG9uLFxuICAuaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gaW5wdXRbdHlwZT1cIm1vbnRoXCJdLmJ0bixcbiAgLmlucHV0LWdyb3VwLWxnIGlucHV0W3R5cGU9XCJtb250aFwiXSB7XG4gICAgbGluZS1oZWlnaHQ6IDQ2cHg7XG4gIH1cbn1cblxuLmZvcm0tZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG4ucmFkaW8sXG4uY2hlY2tib3gge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4ucmFkaW8gbGFiZWwsXG4uY2hlY2tib3ggbGFiZWwge1xuICBtaW4taGVpZ2h0OiAyMHB4O1xuICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnJhZGlvIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbi5yYWRpby1pbmxpbmUgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5jaGVja2JveC1pbmxpbmUgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW4tbGVmdDogLTIwcHg7XG4gIG1hcmdpbi10b3A6IDRweCBcXDk7XG59XG5cbi5yYWRpbyArIC5yYWRpbyxcbi5jaGVja2JveCArIC5jaGVja2JveCB7XG4gIG1hcmdpbi10b3A6IC01cHg7XG59XG5cbi5yYWRpby1pbmxpbmUsXG4uY2hlY2tib3gtaW5saW5lIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmctbGVmdDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ucmFkaW8taW5saW5lICsgLnJhZGlvLWlubGluZSxcbi5jaGVja2JveC1pbmxpbmUgKyAuY2hlY2tib3gtaW5saW5lIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XG59XG5cbmlucHV0W3R5cGU9XCJyYWRpb1wiXVtkaXNhYmxlZF0sXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0uZGlzYWJsZWQsXG5maWVsZHNldFtkaXNhYmxlZF0gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdW2Rpc2FibGVkXSxcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5kaXNhYmxlZCxcbmZpZWxkc2V0W2Rpc2FibGVkXSBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4ucmFkaW8taW5saW5lLmRpc2FibGVkLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5yYWRpby1pbmxpbmUsXG4uY2hlY2tib3gtaW5saW5lLmRpc2FibGVkLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5jaGVja2JveC1pbmxpbmUge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4ucmFkaW8uZGlzYWJsZWQgbGFiZWwsXG5maWVsZHNldFtkaXNhYmxlZF0gLnJhZGlvIGxhYmVsLFxuLmNoZWNrYm94LmRpc2FibGVkIGxhYmVsLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5jaGVja2JveCBsYWJlbCB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5mb3JtLWNvbnRyb2wtc3RhdGljIHtcbiAgcGFkZGluZy10b3A6IDdweDtcbiAgcGFkZGluZy1ib3R0b206IDdweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbWluLWhlaWdodDogMzRweDtcbn1cblxuLmZvcm0tY29udHJvbC1zdGF0aWMuaW5wdXQtbGcsXG4uaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLXN0YXRpYy5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLXN0YXRpYy5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiAuZm9ybS1jb250cm9sLXN0YXRpYy5idG4sXG4uZm9ybS1jb250cm9sLXN0YXRpYy5pbnB1dC1zbSwgLmlucHV0LWdyb3VwLXNtID4gLmZvcm0tY29udHJvbC1zdGF0aWMuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLXNtID4gLmZvcm0tY29udHJvbC1zdGF0aWMuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmZvcm0tY29udHJvbC1zdGF0aWMuYnRuIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuXG4uaW5wdXQtc20sIC5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biB7XG4gIGhlaWdodDogMzBweDtcbiAgcGFkZGluZzogNXB4IDEwcHg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG5zZWxlY3QuaW5wdXQtc20sIC5pbnB1dC1ncm91cC1zbSA+IHNlbGVjdC5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtc20gPiBzZWxlY3QuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gc2VsZWN0LmJ0biB7XG4gIGhlaWdodDogMzBweDtcbiAgbGluZS1oZWlnaHQ6IDMwcHg7XG59XG5cbnRleHRhcmVhLmlucHV0LXNtLFxuLmlucHV0LWdyb3VwLXNtID4gdGV4dGFyZWEuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLXNtID4gdGV4dGFyZWEuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtc20gPiAuaW5wdXQtZ3JvdXAtYnRuID4gdGV4dGFyZWEuYnRuLFxuc2VsZWN0W211bHRpcGxlXS5pbnB1dC1zbSwgLmlucHV0LWdyb3VwLXNtID4gc2VsZWN0W211bHRpcGxlXS5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtc20gPiBzZWxlY3RbbXVsdGlwbGVdLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IHNlbGVjdFttdWx0aXBsZV0uYnRuIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuXG4uZm9ybS1ncm91cC1zbSAuZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICBwYWRkaW5nOiA1cHggMTBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS41O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi5mb3JtLWdyb3VwLXNtIHNlbGVjdC5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IDMwcHg7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xufVxuXG4uZm9ybS1ncm91cC1zbSB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wsXG4uZm9ybS1ncm91cC1zbSBzZWxlY3RbbXVsdGlwbGVdLmZvcm0tY29udHJvbCB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLmZvcm0tZ3JvdXAtc20gLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICBoZWlnaHQ6IDMwcHg7XG4gIG1pbi1oZWlnaHQ6IDMycHg7XG4gIHBhZGRpbmc6IDZweCAxMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG5cbi5pbnB1dC1sZywgLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tY29udHJvbCxcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHtcbiAgaGVpZ2h0OiA0NnB4O1xuICBwYWRkaW5nOiAxMHB4IDE2cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMztcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG5zZWxlY3QuaW5wdXQtbGcsIC5pbnB1dC1ncm91cC1sZyA+IHNlbGVjdC5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtbGcgPiBzZWxlY3QuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gc2VsZWN0LmJ0biB7XG4gIGhlaWdodDogNDZweDtcbiAgbGluZS1oZWlnaHQ6IDQ2cHg7XG59XG5cbnRleHRhcmVhLmlucHV0LWxnLFxuLmlucHV0LWdyb3VwLWxnID4gdGV4dGFyZWEuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLWxnID4gdGV4dGFyZWEuaW5wdXQtZ3JvdXAtYWRkb24sXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gdGV4dGFyZWEuYnRuLFxuc2VsZWN0W211bHRpcGxlXS5pbnB1dC1sZywgLmlucHV0LWdyb3VwLWxnID4gc2VsZWN0W211bHRpcGxlXS5mb3JtLWNvbnRyb2wsXG4uaW5wdXQtZ3JvdXAtbGcgPiBzZWxlY3RbbXVsdGlwbGVdLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IHNlbGVjdFttdWx0aXBsZV0uYnRuIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuXG4uZm9ybS1ncm91cC1sZyAuZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiA0NnB4O1xuICBwYWRkaW5nOiAxMHB4IDE2cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMztcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4uZm9ybS1ncm91cC1sZyBzZWxlY3QuZm9ybS1jb250cm9sIHtcbiAgaGVpZ2h0OiA0NnB4O1xuICBsaW5lLWhlaWdodDogNDZweDtcbn1cblxuLmZvcm0tZ3JvdXAtbGcgdGV4dGFyZWEuZm9ybS1jb250cm9sLFxuLmZvcm0tZ3JvdXAtbGcgc2VsZWN0W211bHRpcGxlXS5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi5mb3JtLWdyb3VwLWxnIC5mb3JtLWNvbnRyb2wtc3RhdGljIHtcbiAgaGVpZ2h0OiA0NnB4O1xuICBtaW4taGVpZ2h0OiAzOHB4O1xuICBwYWRkaW5nOiAxMXB4IDE2cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMztcbn1cblxuLmhhcy1mZWVkYmFjayB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sIHtcbiAgcGFkZGluZy1yaWdodDogNDIuNXB4O1xufVxuXG4uZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICB6LWluZGV4OiAyO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDM0cHg7XG4gIGhlaWdodDogMzRweDtcbiAgbGluZS1oZWlnaHQ6IDM0cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5pbnB1dC1sZyArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayxcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1hZGRvbiArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uaW5wdXQtZ3JvdXAtbGcgPiAuaW5wdXQtZ3JvdXAtYnRuID4gLmJ0biArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uaW5wdXQtZ3JvdXAtbGcgKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLFxuLmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbCArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB3aWR0aDogNDZweDtcbiAgaGVpZ2h0OiA0NnB4O1xuICBsaW5lLWhlaWdodDogNDZweDtcbn1cblxuLmlucHV0LXNtICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayxcbi5pbnB1dC1ncm91cC1zbSA+IC5mb3JtLWNvbnRyb2wgKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFkZG9uICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayxcbi5pbnB1dC1ncm91cC1zbSA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayxcbi5pbnB1dC1ncm91cC1zbSArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uZm9ybS1ncm91cC1zbSAuZm9ybS1jb250cm9sICsgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHdpZHRoOiAzMHB4O1xuICBoZWlnaHQ6IDMwcHg7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xufVxuXG4uaGFzLXN1Y2Nlc3MgLmhlbHAtYmxvY2ssXG4uaGFzLXN1Y2Nlc3MgLmNvbnRyb2wtbGFiZWwsXG4uaGFzLXN1Y2Nlc3MgLnJhZGlvLFxuLmhhcy1zdWNjZXNzIC5jaGVja2JveCxcbi5oYXMtc3VjY2VzcyAucmFkaW8taW5saW5lLFxuLmhhcy1zdWNjZXNzIC5jaGVja2JveC1pbmxpbmUsXG4uaGFzLXN1Y2Nlc3MucmFkaW8gbGFiZWwsXG4uaGFzLXN1Y2Nlc3MuY2hlY2tib3ggbGFiZWwsXG4uaGFzLXN1Y2Nlc3MucmFkaW8taW5saW5lIGxhYmVsLFxuLmhhcy1zdWNjZXNzLmNoZWNrYm94LWlubGluZSBsYWJlbCB7XG4gIGNvbG9yOiAjNmM2YzZjO1xufVxuXG4uaGFzLXN1Y2Nlc3MgLmZvcm0tY29udHJvbCB7XG4gIGJvcmRlci1jb2xvcjogIzZjNmM2YztcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbn1cblxuLmhhcy1zdWNjZXNzIC5mb3JtLWNvbnRyb2w6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICM1MjUyNTI7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICM5ZjlmOWY7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjOWY5ZjlmO1xufVxuXG4uaGFzLXN1Y2Nlc3MgLmlucHV0LWdyb3VwLWFkZG9uIHtcbiAgY29sb3I6ICM2YzZjNmM7XG4gIGJvcmRlci1jb2xvcjogIzZjNmM2YztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RhZTZjYjtcbn1cblxuLmhhcy1zdWNjZXNzIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICBjb2xvcjogIzZjNmM2Yztcbn1cblxuLmhhcy13YXJuaW5nIC5oZWxwLWJsb2NrLFxuLmhhcy13YXJuaW5nIC5jb250cm9sLWxhYmVsLFxuLmhhcy13YXJuaW5nIC5yYWRpbyxcbi5oYXMtd2FybmluZyAuY2hlY2tib3gsXG4uaGFzLXdhcm5pbmcgLnJhZGlvLWlubGluZSxcbi5oYXMtd2FybmluZyAuY2hlY2tib3gtaW5saW5lLFxuLmhhcy13YXJuaW5nLnJhZGlvIGxhYmVsLFxuLmhhcy13YXJuaW5nLmNoZWNrYm94IGxhYmVsLFxuLmhhcy13YXJuaW5nLnJhZGlvLWlubGluZSBsYWJlbCxcbi5oYXMtd2FybmluZy5jaGVja2JveC1pbmxpbmUgbGFiZWwge1xuICBjb2xvcjogIzZjNmM2Yztcbn1cblxuLmhhcy13YXJuaW5nIC5mb3JtLWNvbnRyb2wge1xuICBib3JkZXItY29sb3I6ICM2YzZjNmM7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG59XG5cbi5oYXMtd2FybmluZyAuZm9ybS1jb250cm9sOmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjNTI1MjUyO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDZweCAjOWY5ZjlmO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggIzlmOWY5Zjtcbn1cblxuLmhhcy13YXJuaW5nIC5pbnB1dC1ncm91cC1hZGRvbiB7XG4gIGNvbG9yOiAjNmM2YzZjO1xuICBib3JkZXItY29sb3I6ICM2YzZjNmM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMWUzYzI7XG59XG5cbi5oYXMtd2FybmluZyAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgY29sb3I6ICM2YzZjNmM7XG59XG5cbi5oYXMtZXJyb3IgLmhlbHAtYmxvY2ssXG4uaGFzLWVycm9yIC5jb250cm9sLWxhYmVsLFxuLmhhcy1lcnJvciAucmFkaW8sXG4uaGFzLWVycm9yIC5jaGVja2JveCxcbi5oYXMtZXJyb3IgLnJhZGlvLWlubGluZSxcbi5oYXMtZXJyb3IgLmNoZWNrYm94LWlubGluZSxcbi5oYXMtZXJyb3IucmFkaW8gbGFiZWwsXG4uaGFzLWVycm9yLmNoZWNrYm94IGxhYmVsLFxuLmhhcy1lcnJvci5yYWRpby1pbmxpbmUgbGFiZWwsXG4uaGFzLWVycm9yLmNoZWNrYm94LWlubGluZSBsYWJlbCB7XG4gIGNvbG9yOiAjNmM2YzZjO1xufVxuXG4uaGFzLWVycm9yIC5mb3JtLWNvbnRyb2wge1xuICBib3JkZXItY29sb3I6ICM2YzZjNmM7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG59XG5cbi5oYXMtZXJyb3IgLmZvcm0tY29udHJvbDpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogIzUyNTI1MjtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggIzlmOWY5ZjtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICM5ZjlmOWY7XG59XG5cbi5oYXMtZXJyb3IgLmlucHV0LWdyb3VwLWFkZG9uIHtcbiAgY29sb3I6ICM2YzZjNmM7XG4gIGJvcmRlci1jb2xvcjogIzZjNmM2YztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VhYzNjNztcbn1cblxuLmhhcy1lcnJvciAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgY29sb3I6ICM2YzZjNmM7XG59XG5cbi5oYXMtZmVlZGJhY2sgbGFiZWwgfiAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgdG9wOiAyNXB4O1xufVxuXG4uaGFzLWZlZWRiYWNrIGxhYmVsLnNyLW9ubHkgfiAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgdG9wOiAwO1xufVxuXG4uaGVscC1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tdG9wOiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gIGNvbG9yOiAjNjI2MjYyO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmZvcm0taW5saW5lIC5mb3JtLWdyb3VwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG4gIC5mb3JtLWlubGluZSAuZm9ybS1jb250cm9sIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAuZm9ybS1pbmxpbmUgLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxuICAuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtdGFibGU7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1hZGRvbixcbiAgLmZvcm0taW5saW5lIC5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYnRuLFxuICAuZm9ybS1pbmxpbmUgLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wge1xuICAgIHdpZHRoOiBhdXRvO1xuICB9XG4gIC5mb3JtLWlubGluZSAuaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAuZm9ybS1pbmxpbmUgLmNvbnRyb2wtbGFiZWwge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAuZm9ybS1pbmxpbmUgLnJhZGlvLFxuICAuZm9ybS1pbmxpbmUgLmNoZWNrYm94IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIH1cbiAgLmZvcm0taW5saW5lIC5yYWRpbyBsYWJlbCxcbiAgLmZvcm0taW5saW5lIC5jaGVja2JveCBsYWJlbCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICB9XG4gIC5mb3JtLWlubGluZSAucmFkaW8gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuICAuZm9ybS1pbmxpbmUgLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICB9XG4gIC5mb3JtLWlubGluZSAuaGFzLWZlZWRiYWNrIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgIHRvcDogMDtcbiAgfVxufVxuXG4uZm9ybS1ob3Jpem9udGFsIC5yYWRpbyxcbi5mb3JtLWhvcml6b250YWwgLmNoZWNrYm94LFxuLmZvcm0taG9yaXpvbnRhbCAucmFkaW8taW5saW5lLFxuLmZvcm0taG9yaXpvbnRhbCAuY2hlY2tib3gtaW5saW5lIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZy10b3A6IDdweDtcbn1cblxuLmZvcm0taG9yaXpvbnRhbCAucmFkaW8sXG4uZm9ybS1ob3Jpem9udGFsIC5jaGVja2JveCB7XG4gIG1pbi1oZWlnaHQ6IDI3cHg7XG59XG5cbi5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXAge1xuICBtYXJnaW4tbGVmdDogMDtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xufVxuXG4uZm9ybS1ob3Jpem9udGFsIC5mb3JtLWdyb3VwOmJlZm9yZSxcbi5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXA6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgZGlzcGxheTogdGFibGU7XG59XG5cbi5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXA6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtbGFiZWwge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgcGFkZGluZy10b3A6IDdweDtcbiAgfVxufVxuXG4uZm9ybS1ob3Jpem9udGFsIC5oYXMtZmVlZGJhY2sgLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHJpZ2h0OiAwO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cC1sZyAuY29udHJvbC1sYWJlbCB7XG4gICAgcGFkZGluZy10b3A6IDE0LjMzMzMzM3B4O1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1ncm91cC1zbSAuY29udHJvbC1sYWJlbCB7XG4gICAgcGFkZGluZy10b3A6IDZweDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gIH1cbn1cblxuLmJ0biB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgcGFkZGluZzogNnB4IDEycHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi5idG46Zm9jdXMsXG4uYnRuLmZvY3VzLFxuLmJ0bjphY3RpdmU6Zm9jdXMsXG4uYnRuOmFjdGl2ZS5mb2N1cyxcbi5idG4uYWN0aXZlOmZvY3VzLFxuLmJ0bi5hY3RpdmUuZm9jdXMge1xuICBvdXRsaW5lOiB0aGluIGRvdHRlZDtcbiAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xuICBvdXRsaW5lLW9mZnNldDogLTJweDtcbn1cblxuLmJ0bjpob3Zlcixcbi5idG46Zm9jdXMsXG4uYnRuLmZvY3VzIHtcbiAgY29sb3I6ICM0NDQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmJ0bjphY3RpdmUsXG4uYnRuLmFjdGl2ZSB7XG4gIG91dGxpbmU6IDA7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyNSk7XG59XG5cbi5idG4uZGlzYWJsZWQsXG4uYnRuW2Rpc2FibGVkXSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgb3BhY2l0eTogMC42NTtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTY1KTtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xuICBib3gtc2hhZG93OiBub25lO1xufVxuXG5hLmJ0bi5kaXNhYmxlZCxcbmZpZWxkc2V0W2Rpc2FibGVkXSBhLmJ0biB7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uYnRuLWRlZmF1bHQge1xuICBjb2xvcjogIzQ0NDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xufVxuXG4uYnRuLWRlZmF1bHQ6Zm9jdXMsXG4uYnRuLWRlZmF1bHQuZm9jdXMge1xuICBjb2xvcjogIzQ0NDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcbiAgYm9yZGVyLWNvbG9yOiAjOGM4YzhjO1xufVxuXG4uYnRuLWRlZmF1bHQ6aG92ZXIge1xuICBjb2xvcjogIzQ0NDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjtcbiAgYm9yZGVyLWNvbG9yOiAjYWRhZGFkO1xufVxuXG4uYnRuLWRlZmF1bHQ6YWN0aXZlLFxuLmJ0bi1kZWZhdWx0LmFjdGl2ZSxcbi5vcGVuID4gLmJ0bi1kZWZhdWx0LmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGNvbG9yOiAjNDQ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xuICBib3JkZXItY29sb3I6ICNhZGFkYWQ7XG59XG5cbi5idG4tZGVmYXVsdDphY3RpdmU6aG92ZXIsXG4uYnRuLWRlZmF1bHQ6YWN0aXZlOmZvY3VzLFxuLmJ0bi1kZWZhdWx0OmFjdGl2ZS5mb2N1cyxcbi5idG4tZGVmYXVsdC5hY3RpdmU6aG92ZXIsXG4uYnRuLWRlZmF1bHQuYWN0aXZlOmZvY3VzLFxuLmJ0bi1kZWZhdWx0LmFjdGl2ZS5mb2N1cyxcbi5vcGVuID4gLmJ0bi1kZWZhdWx0LmRyb3Bkb3duLXRvZ2dsZTpob3Zlcixcbi5vcGVuID4gLmJ0bi1kZWZhdWx0LmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyxcbi5vcGVuID4gLmJ0bi1kZWZhdWx0LmRyb3Bkb3duLXRvZ2dsZS5mb2N1cyB7XG4gIGNvbG9yOiAjNDQ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDRkNGQ0O1xuICBib3JkZXItY29sb3I6ICM4YzhjOGM7XG59XG5cbi5idG4tZGVmYXVsdDphY3RpdmUsXG4uYnRuLWRlZmF1bHQuYWN0aXZlLFxuLm9wZW4gPiAuYnRuLWRlZmF1bHQuZHJvcGRvd24tdG9nZ2xlIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbn1cblxuLmJ0bi1kZWZhdWx0LmRpc2FibGVkLFxuLmJ0bi1kZWZhdWx0LmRpc2FibGVkOmhvdmVyLFxuLmJ0bi1kZWZhdWx0LmRpc2FibGVkOmZvY3VzLFxuLmJ0bi1kZWZhdWx0LmRpc2FibGVkLmZvY3VzLFxuLmJ0bi1kZWZhdWx0LmRpc2FibGVkOmFjdGl2ZSxcbi5idG4tZGVmYXVsdC5kaXNhYmxlZC5hY3RpdmUsXG4uYnRuLWRlZmF1bHRbZGlzYWJsZWRdLFxuLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXTpob3Zlcixcbi5idG4tZGVmYXVsdFtkaXNhYmxlZF06Zm9jdXMsXG4uYnRuLWRlZmF1bHRbZGlzYWJsZWRdLmZvY3VzLFxuLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXTphY3RpdmUsXG4uYnRuLWRlZmF1bHRbZGlzYWJsZWRdLmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0OmhvdmVyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdDpmb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQuZm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0OmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQuYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xufVxuXG4uYnRuLWRlZmF1bHQgLmJhZGdlIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7XG59XG5cbi5idG4tcHJpbWFyeSB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2EzOTNiO1xuICBib3JkZXItY29sb3I6ICMzYTM5M2I7XG59XG5cbi5idG4tcHJpbWFyeTpmb2N1cyxcbi5idG4tcHJpbWFyeS5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyMDIxO1xuICBib3JkZXItY29sb3I6IGJsYWNrO1xufVxuXG4uYnRuLXByaW1hcnk6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIxMjAyMTtcbiAgYm9yZGVyLWNvbG9yOiAjMWIxYjFjO1xufVxuXG4uYnRuLXByaW1hcnk6YWN0aXZlLFxuLmJ0bi1wcmltYXJ5LmFjdGl2ZSxcbi5vcGVuID4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyMDIxO1xuICBib3JkZXItY29sb3I6ICMxYjFiMWM7XG59XG5cbi5idG4tcHJpbWFyeTphY3RpdmU6aG92ZXIsXG4uYnRuLXByaW1hcnk6YWN0aXZlOmZvY3VzLFxuLmJ0bi1wcmltYXJ5OmFjdGl2ZS5mb2N1cyxcbi5idG4tcHJpbWFyeS5hY3RpdmU6aG92ZXIsXG4uYnRuLXByaW1hcnkuYWN0aXZlOmZvY3VzLFxuLmJ0bi1wcmltYXJ5LmFjdGl2ZS5mb2N1cyxcbi5vcGVuID4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZTpob3Zlcixcbi5vcGVuID4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyxcbi5vcGVuID4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZS5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGYwZTBmO1xuICBib3JkZXItY29sb3I6IGJsYWNrO1xufVxuXG4uYnRuLXByaW1hcnk6YWN0aXZlLFxuLmJ0bi1wcmltYXJ5LmFjdGl2ZSxcbi5vcGVuID4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG59XG5cbi5idG4tcHJpbWFyeS5kaXNhYmxlZCxcbi5idG4tcHJpbWFyeS5kaXNhYmxlZDpob3Zlcixcbi5idG4tcHJpbWFyeS5kaXNhYmxlZDpmb2N1cyxcbi5idG4tcHJpbWFyeS5kaXNhYmxlZC5mb2N1cyxcbi5idG4tcHJpbWFyeS5kaXNhYmxlZDphY3RpdmUsXG4uYnRuLXByaW1hcnkuZGlzYWJsZWQuYWN0aXZlLFxuLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXSxcbi5idG4tcHJpbWFyeVtkaXNhYmxlZF06aG92ZXIsXG4uYnRuLXByaW1hcnlbZGlzYWJsZWRdOmZvY3VzLFxuLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXS5mb2N1cyxcbi5idG4tcHJpbWFyeVtkaXNhYmxlZF06YWN0aXZlLFxuLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXS5hY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5LFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeTpob3ZlcixcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5LmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeTphY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5LmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzYTM5M2I7XG4gIGJvcmRlci1jb2xvcjogIzNhMzkzYjtcbn1cblxuLmJ0bi1wcmltYXJ5IC5iYWRnZSB7XG4gIGNvbG9yOiAjM2EzOTNiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4uYnRuLXN1Y2Nlc3Mge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVjYjg1YztcbiAgYm9yZGVyLWNvbG9yOiAjNWNiODVjO1xufVxuXG4uYnRuLXN1Y2Nlc3M6Zm9jdXMsXG4uYnRuLXN1Y2Nlc3MuZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0OWQ0NDtcbiAgYm9yZGVyLWNvbG9yOiAjMmQ2NzJkO1xufVxuXG4uYnRuLXN1Y2Nlc3M6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0OWQ0NDtcbiAgYm9yZGVyLWNvbG9yOiAjNDE5NjQxO1xufVxuXG4uYnRuLXN1Y2Nlc3M6YWN0aXZlLFxuLmJ0bi1zdWNjZXNzLmFjdGl2ZSxcbi5vcGVuID4gLmJ0bi1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ5ZDQ0O1xuICBib3JkZXItY29sb3I6ICM0MTk2NDE7XG59XG5cbi5idG4tc3VjY2VzczphY3RpdmU6aG92ZXIsXG4uYnRuLXN1Y2Nlc3M6YWN0aXZlOmZvY3VzLFxuLmJ0bi1zdWNjZXNzOmFjdGl2ZS5mb2N1cyxcbi5idG4tc3VjY2Vzcy5hY3RpdmU6aG92ZXIsXG4uYnRuLXN1Y2Nlc3MuYWN0aXZlOmZvY3VzLFxuLmJ0bi1zdWNjZXNzLmFjdGl2ZS5mb2N1cyxcbi5vcGVuID4gLmJ0bi1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZTpob3Zlcixcbi5vcGVuID4gLmJ0bi1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyxcbi5vcGVuID4gLmJ0bi1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZS5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzk4NDM5O1xuICBib3JkZXItY29sb3I6ICMyZDY3MmQ7XG59XG5cbi5idG4tc3VjY2VzczphY3RpdmUsXG4uYnRuLXN1Y2Nlc3MuYWN0aXZlLFxuLm9wZW4gPiAuYnRuLXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xlIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbn1cblxuLmJ0bi1zdWNjZXNzLmRpc2FibGVkLFxuLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmhvdmVyLFxuLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmZvY3VzLFxuLmJ0bi1zdWNjZXNzLmRpc2FibGVkLmZvY3VzLFxuLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmFjdGl2ZSxcbi5idG4tc3VjY2Vzcy5kaXNhYmxlZC5hY3RpdmUsXG4uYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdLFxuLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXTpob3Zlcixcbi5idG4tc3VjY2Vzc1tkaXNhYmxlZF06Zm9jdXMsXG4uYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdLmZvY3VzLFxuLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXTphY3RpdmUsXG4uYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdLmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3MsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzOmhvdmVyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2Vzczpmb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3MuZm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzOmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3MuYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVjYjg1YztcbiAgYm9yZGVyLWNvbG9yOiAjNWNiODVjO1xufVxuXG4uYnRuLXN1Y2Nlc3MgLmJhZGdlIHtcbiAgY29sb3I6ICM1Y2I4NWM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cbi5idG4taW5mbyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWJjMGRlO1xuICBib3JkZXItY29sb3I6ICM1YmMwZGU7XG59XG5cbi5idG4taW5mbzpmb2N1cyxcbi5idG4taW5mby5mb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzFiMGQ1O1xuICBib3JkZXItY29sb3I6ICMxZjdlOWE7XG59XG5cbi5idG4taW5mbzpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzFiMGQ1O1xuICBib3JkZXItY29sb3I6ICMyYWFiZDI7XG59XG5cbi5idG4taW5mbzphY3RpdmUsXG4uYnRuLWluZm8uYWN0aXZlLFxuLm9wZW4gPiAuYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMWIwZDU7XG4gIGJvcmRlci1jb2xvcjogIzJhYWJkMjtcbn1cblxuLmJ0bi1pbmZvOmFjdGl2ZTpob3Zlcixcbi5idG4taW5mbzphY3RpdmU6Zm9jdXMsXG4uYnRuLWluZm86YWN0aXZlLmZvY3VzLFxuLmJ0bi1pbmZvLmFjdGl2ZTpob3Zlcixcbi5idG4taW5mby5hY3RpdmU6Zm9jdXMsXG4uYnRuLWluZm8uYWN0aXZlLmZvY3VzLFxuLm9wZW4gPiAuYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlOmhvdmVyLFxuLm9wZW4gPiAuYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlOmZvY3VzLFxuLm9wZW4gPiAuYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xlLmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyNjlhYmM7XG4gIGJvcmRlci1jb2xvcjogIzFmN2U5YTtcbn1cblxuLmJ0bi1pbmZvOmFjdGl2ZSxcbi5idG4taW5mby5hY3RpdmUsXG4ub3BlbiA+IC5idG4taW5mby5kcm9wZG93bi10b2dnbGUge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xufVxuXG4uYnRuLWluZm8uZGlzYWJsZWQsXG4uYnRuLWluZm8uZGlzYWJsZWQ6aG92ZXIsXG4uYnRuLWluZm8uZGlzYWJsZWQ6Zm9jdXMsXG4uYnRuLWluZm8uZGlzYWJsZWQuZm9jdXMsXG4uYnRuLWluZm8uZGlzYWJsZWQ6YWN0aXZlLFxuLmJ0bi1pbmZvLmRpc2FibGVkLmFjdGl2ZSxcbi5idG4taW5mb1tkaXNhYmxlZF0sXG4uYnRuLWluZm9bZGlzYWJsZWRdOmhvdmVyLFxuLmJ0bi1pbmZvW2Rpc2FibGVkXTpmb2N1cyxcbi5idG4taW5mb1tkaXNhYmxlZF0uZm9jdXMsXG4uYnRuLWluZm9bZGlzYWJsZWRdOmFjdGl2ZSxcbi5idG4taW5mb1tkaXNhYmxlZF0uYWN0aXZlLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mbyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm86aG92ZXIsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvOmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mby5mb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm86YWN0aXZlLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mby5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWJjMGRlO1xuICBib3JkZXItY29sb3I6ICM1YmMwZGU7XG59XG5cbi5idG4taW5mbyAuYmFkZ2Uge1xuICBjb2xvcjogIzViYzBkZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cblxuLmJ0bi13YXJuaW5nIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGFkNGU7XG4gIGJvcmRlci1jb2xvcjogI2YwYWQ0ZTtcbn1cblxuLmJ0bi13YXJuaW5nOmZvY3VzLFxuLmJ0bi13YXJuaW5nLmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlYzk3MWY7XG4gIGJvcmRlci1jb2xvcjogI2IwNmQwZjtcbn1cblxuLmJ0bi13YXJuaW5nOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlYzk3MWY7XG4gIGJvcmRlci1jb2xvcjogI2ViOTMxNjtcbn1cblxuLmJ0bi13YXJuaW5nOmFjdGl2ZSxcbi5idG4td2FybmluZy5hY3RpdmUsXG4ub3BlbiA+IC5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGUge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VjOTcxZjtcbiAgYm9yZGVyLWNvbG9yOiAjZWI5MzE2O1xufVxuXG4uYnRuLXdhcm5pbmc6YWN0aXZlOmhvdmVyLFxuLmJ0bi13YXJuaW5nOmFjdGl2ZTpmb2N1cyxcbi5idG4td2FybmluZzphY3RpdmUuZm9jdXMsXG4uYnRuLXdhcm5pbmcuYWN0aXZlOmhvdmVyLFxuLmJ0bi13YXJuaW5nLmFjdGl2ZTpmb2N1cyxcbi5idG4td2FybmluZy5hY3RpdmUuZm9jdXMsXG4ub3BlbiA+IC5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGU6aG92ZXIsXG4ub3BlbiA+IC5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGU6Zm9jdXMsXG4ub3BlbiA+IC5idG4td2FybmluZy5kcm9wZG93bi10b2dnbGUuZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q1ODUxMjtcbiAgYm9yZGVyLWNvbG9yOiAjYjA2ZDBmO1xufVxuXG4uYnRuLXdhcm5pbmc6YWN0aXZlLFxuLmJ0bi13YXJuaW5nLmFjdGl2ZSxcbi5vcGVuID4gLmJ0bi13YXJuaW5nLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG59XG5cbi5idG4td2FybmluZy5kaXNhYmxlZCxcbi5idG4td2FybmluZy5kaXNhYmxlZDpob3Zlcixcbi5idG4td2FybmluZy5kaXNhYmxlZDpmb2N1cyxcbi5idG4td2FybmluZy5kaXNhYmxlZC5mb2N1cyxcbi5idG4td2FybmluZy5kaXNhYmxlZDphY3RpdmUsXG4uYnRuLXdhcm5pbmcuZGlzYWJsZWQuYWN0aXZlLFxuLmJ0bi13YXJuaW5nW2Rpc2FibGVkXSxcbi5idG4td2FybmluZ1tkaXNhYmxlZF06aG92ZXIsXG4uYnRuLXdhcm5pbmdbZGlzYWJsZWRdOmZvY3VzLFxuLmJ0bi13YXJuaW5nW2Rpc2FibGVkXS5mb2N1cyxcbi5idG4td2FybmluZ1tkaXNhYmxlZF06YWN0aXZlLFxuLmJ0bi13YXJuaW5nW2Rpc2FibGVkXS5hY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZzpob3ZlcixcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmc6Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nLmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZzphY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nLmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGFkNGU7XG4gIGJvcmRlci1jb2xvcjogI2YwYWQ0ZTtcbn1cblxuLmJ0bi13YXJuaW5nIC5iYWRnZSB7XG4gIGNvbG9yOiAjZjBhZDRlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4uYnRuLWRhbmdlciB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDk1MzRmO1xuICBib3JkZXItY29sb3I6ICNkOTUzNGY7XG59XG5cbi5idG4tZGFuZ2VyOmZvY3VzLFxuLmJ0bi1kYW5nZXIuZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M5MzAyYztcbiAgYm9yZGVyLWNvbG9yOiAjOGIyMTFlO1xufVxuXG4uYnRuLWRhbmdlcjpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzkzMDJjO1xuICBib3JkZXItY29sb3I6ICNjMTJlMmE7XG59XG5cbi5idG4tZGFuZ2VyOmFjdGl2ZSxcbi5idG4tZGFuZ2VyLmFjdGl2ZSxcbi5vcGVuID4gLmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjOTMwMmM7XG4gIGJvcmRlci1jb2xvcjogI2MxMmUyYTtcbn1cblxuLmJ0bi1kYW5nZXI6YWN0aXZlOmhvdmVyLFxuLmJ0bi1kYW5nZXI6YWN0aXZlOmZvY3VzLFxuLmJ0bi1kYW5nZXI6YWN0aXZlLmZvY3VzLFxuLmJ0bi1kYW5nZXIuYWN0aXZlOmhvdmVyLFxuLmJ0bi1kYW5nZXIuYWN0aXZlOmZvY3VzLFxuLmJ0bi1kYW5nZXIuYWN0aXZlLmZvY3VzLFxuLm9wZW4gPiAuYnRuLWRhbmdlci5kcm9wZG93bi10b2dnbGU6aG92ZXIsXG4ub3BlbiA+IC5idG4tZGFuZ2VyLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyxcbi5vcGVuID4gLmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xlLmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNhYzI5MjU7XG4gIGJvcmRlci1jb2xvcjogIzhiMjExZTtcbn1cblxuLmJ0bi1kYW5nZXI6YWN0aXZlLFxuLmJ0bi1kYW5nZXIuYWN0aXZlLFxuLm9wZW4gPiAuYnRuLWRhbmdlci5kcm9wZG93bi10b2dnbGUge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xufVxuXG4uYnRuLWRhbmdlci5kaXNhYmxlZCxcbi5idG4tZGFuZ2VyLmRpc2FibGVkOmhvdmVyLFxuLmJ0bi1kYW5nZXIuZGlzYWJsZWQ6Zm9jdXMsXG4uYnRuLWRhbmdlci5kaXNhYmxlZC5mb2N1cyxcbi5idG4tZGFuZ2VyLmRpc2FibGVkOmFjdGl2ZSxcbi5idG4tZGFuZ2VyLmRpc2FibGVkLmFjdGl2ZSxcbi5idG4tZGFuZ2VyW2Rpc2FibGVkXSxcbi5idG4tZGFuZ2VyW2Rpc2FibGVkXTpob3Zlcixcbi5idG4tZGFuZ2VyW2Rpc2FibGVkXTpmb2N1cyxcbi5idG4tZGFuZ2VyW2Rpc2FibGVkXS5mb2N1cyxcbi5idG4tZGFuZ2VyW2Rpc2FibGVkXTphY3RpdmUsXG4uYnRuLWRhbmdlcltkaXNhYmxlZF0uYWN0aXZlLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyOmhvdmVyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyOmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyLmZvY3VzLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyOmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlci5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDk1MzRmO1xuICBib3JkZXItY29sb3I6ICNkOTUzNGY7XG59XG5cbi5idG4tZGFuZ2VyIC5iYWRnZSB7XG4gIGNvbG9yOiAjZDk1MzRmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4uYnRuLWxpbmsge1xuICBjb2xvcjogIzNhMzkzYjtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLmJ0bi1saW5rLFxuLmJ0bi1saW5rOmFjdGl2ZSxcbi5idG4tbGluay5hY3RpdmUsXG4uYnRuLWxpbmtbZGlzYWJsZWRdLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tbGluayB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XG5cbi5idG4tbGluayxcbi5idG4tbGluazpob3Zlcixcbi5idG4tbGluazpmb2N1cyxcbi5idG4tbGluazphY3RpdmUge1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4uYnRuLWxpbms6aG92ZXIsXG4uYnRuLWxpbms6Zm9jdXMge1xuICBjb2xvcjogIzE0MTMxNDtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4uYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVyLFxuLmJ0bi1saW5rW2Rpc2FibGVkXTpmb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxpbms6aG92ZXIsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICM5OTk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmJ0bi1sZywgLmJ0bi1ncm91cC1sZyA+IC5idG4ge1xuICBwYWRkaW5nOiAxMHB4IDE2cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDEuMzMzMzMzMztcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4uYnRuLXNtLCAuYnRuLWdyb3VwLXNtID4gLmJ0biB7XG4gIHBhZGRpbmc6IDVweCAxMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLmJ0bi14cywgLmJ0bi1ncm91cC14cyA+IC5idG4ge1xuICBwYWRkaW5nOiAxcHggNXB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLmJ0bi1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmJ0bi1ibG9jayArIC5idG4tYmxvY2sge1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG5cbmlucHV0W3R5cGU9XCJzdWJtaXRcIl0uYnRuLWJsb2NrLFxuaW5wdXRbdHlwZT1cInJlc2V0XCJdLmJ0bi1ibG9jayxcbmlucHV0W3R5cGU9XCJidXR0b25cIl0uYnRuLWJsb2NrIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5mYWRlIHtcbiAgb3BhY2l0eTogMDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGxpbmVhcjtcbiAgLW8tdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBsaW5lYXI7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyO1xufVxuXG4uZmFkZS5pbiB7XG4gIG9wYWNpdHk6IDE7XG59XG5cbi5jb2xsYXBzZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5jb2xsYXBzZS5pbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG50ci5jb2xsYXBzZS5pbiB7XG4gIGRpc3BsYXk6IHRhYmxlLXJvdztcbn1cblxudGJvZHkuY29sbGFwc2UuaW4ge1xuICBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXA7XG59XG5cbi5jb2xsYXBzaW5nIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogaGVpZ2h0LCB2aXNpYmlsaXR5O1xuICB0cmFuc2l0aW9uLXByb3BlcnR5OiBoZWlnaHQsIHZpc2liaWxpdHk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zNXM7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMzVzO1xuICAtd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTtcbn1cblxuLmNhcmV0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW4tbGVmdDogMnB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBib3JkZXItdG9wOiA0cHggZGFzaGVkO1xuICBib3JkZXItdG9wOiA0cHggc29saWQgXFw5O1xuICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuLmRyb3B1cCxcbi5kcm9wZG93biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XG4gIG91dGxpbmU6IDA7XG59XG5cbi5kcm9wZG93bi1tZW51IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDEwMCU7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDEwMDA7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGZsb2F0OiBsZWZ0O1xuICBtaW4td2lkdGg6IDE2MHB4O1xuICBwYWRkaW5nOiA1cHggMDtcbiAgbWFyZ2luOiAycHggMCAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBmb250LXNpemU6IDE0cHg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2ZjZmM7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDZweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNzUpO1xuICBib3gtc2hhZG93OiAwIDZweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNzUpO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xufVxuXG4uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0IHtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IGF1dG87XG59XG5cbi5kcm9wZG93bi1tZW51IC5kaXZpZGVyIHtcbiAgaGVpZ2h0OiAxcHg7XG4gIG1hcmdpbjogOXB4IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG59XG5cbi5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDNweCAyMHB4O1xuICBjbGVhcjogYm90aDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICBjb2xvcjogIzIyMjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIsXG4uZHJvcGRvd24tbWVudSA+IGxpID4gYTpmb2N1cyB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6ICMxNTE1MTU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG59XG5cbi5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGEsXG4uZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIG91dGxpbmU6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzYTM5M2I7XG59XG5cbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYSxcbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpob3Zlcixcbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjOTk5O1xufVxuXG4uZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4uZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkID0gZmFsc2UpO1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4ub3BlbiA+IC5kcm9wZG93bi1tZW51IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5vcGVuID4gYSB7XG4gIG91dGxpbmU6IDA7XG59XG5cbi5kcm9wZG93bi1tZW51LXJpZ2h0IHtcbiAgbGVmdDogYXV0bztcbiAgcmlnaHQ6IDA7XG59XG5cbi5kcm9wZG93bi1tZW51LWxlZnQge1xuICBsZWZ0OiAwO1xuICByaWdodDogYXV0bztcbn1cblxuLmRyb3Bkb3duLWhlYWRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAzcHggMjBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7XG4gIGNvbG9yOiAjOTk5O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4uZHJvcGRvd24tYmFja2Ryb3Age1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIHRvcDogMDtcbiAgei1pbmRleDogOTkwO1xufVxuXG4ucHVsbC1yaWdodCA+IC5kcm9wZG93bi1tZW51IHtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IGF1dG87XG59XG5cbi5kcm9wdXAgLmNhcmV0LFxuLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5jYXJldCB7XG4gIGJvcmRlci10b3A6IDA7XG4gIGJvcmRlci1ib3R0b206IDRweCBkYXNoZWQ7XG4gIGJvcmRlci1ib3R0b206IDRweCBzb2xpZCBcXDk7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG5cbi5kcm9wdXAgLmRyb3Bkb3duLW1lbnUsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUge1xuICB0b3A6IGF1dG87XG4gIGJvdHRvbTogMTAwJTtcbiAgbWFyZ2luLWJvdHRvbTogMnB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLm5hdmJhci1yaWdodCAuZHJvcGRvd24tbWVudSB7XG4gICAgcmlnaHQ6IDA7XG4gICAgbGVmdDogYXV0bztcbiAgfVxuICAubmF2YmFyLXJpZ2h0IC5kcm9wZG93bi1tZW51LWxlZnQge1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IGF1dG87XG4gIH1cbn1cblxuLmJ0bi1ncm91cCxcbi5idG4tZ3JvdXAtdmVydGljYWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG4sXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5cbi5idG4tZ3JvdXAgPiAuYnRuOmhvdmVyLFxuLmJ0bi1ncm91cCA+IC5idG46Zm9jdXMsXG4uYnRuLWdyb3VwID4gLmJ0bjphY3RpdmUsXG4uYnRuLWdyb3VwID4gLmJ0bi5hY3RpdmUsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpob3Zlcixcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOmZvY3VzLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46YWN0aXZlLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4uYWN0aXZlIHtcbiAgei1pbmRleDogMjtcbn1cblxuLmJ0bi1ncm91cCAuYnRuICsgLmJ0bixcbi5idG4tZ3JvdXAgLmJ0biArIC5idG4tZ3JvdXAsXG4uYnRuLWdyb3VwIC5idG4tZ3JvdXAgKyAuYnRuLFxuLmJ0bi1ncm91cCAuYnRuLWdyb3VwICsgLmJ0bi1ncm91cCB7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuXG4uYnRuLXRvb2xiYXIge1xuICBtYXJnaW4tbGVmdDogLTVweDtcbn1cblxuLmJ0bi10b29sYmFyOmJlZm9yZSxcbi5idG4tdG9vbGJhcjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLmJ0bi10b29sYmFyOmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG5cbi5idG4tdG9vbGJhciAuYnRuLFxuLmJ0bi10b29sYmFyIC5idG4tZ3JvdXAsXG4uYnRuLXRvb2xiYXIgLmlucHV0LWdyb3VwIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5cbi5idG4tdG9vbGJhciA+IC5idG4sXG4uYnRuLXRvb2xiYXIgPiAuYnRuLWdyb3VwLFxuLmJ0bi10b29sYmFyID4gLmlucHV0LWdyb3VwIHtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG46bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSkge1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG4uYnRuLWdyb3VwID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuXG4uYnRuLWdyb3VwID4gLmJ0bjpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG46bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSxcbi5idG4tZ3JvdXAgPiAuZHJvcGRvd24tdG9nZ2xlOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXAge1xuICBmbG9hdDogbGVmdDtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXA6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSA+IC5idG4ge1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpID4gLmJ0bjpsYXN0LWNoaWxkLFxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSA+IC5kcm9wZG93bi10b2dnbGUge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG59XG5cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuOmZpcnN0LWNoaWxkIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbn1cblxuLmJ0bi1ncm91cCAuZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZSxcbi5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgb3V0bGluZTogMDtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG4gKyAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG4tbGcgKyAuZHJvcGRvd24tdG9nZ2xlLCAuYnRuLWdyb3VwLWxnLmJ0bi1ncm91cCA+IC5idG4gKyAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgcGFkZGluZy1sZWZ0OiAxMnB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxMnB4O1xufVxuXG4uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDNweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyNSk7XG59XG5cbi5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xlLmJ0bi1saW5rIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xuICBib3gtc2hhZG93OiBub25lO1xufVxuXG4uYnRuIC5jYXJldCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuXG4uYnRuLWxnIC5jYXJldCwgLmJ0bi1ncm91cC1sZyA+IC5idG4gLmNhcmV0IHtcbiAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDA7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG59XG5cbi5kcm9wdXAgLmJ0bi1sZyAuY2FyZXQsIC5kcm9wdXAgLmJ0bi1ncm91cC1sZyA+IC5idG4gLmNhcmV0IHtcbiAgYm9yZGVyLXdpZHRoOiAwIDVweCA1cHg7XG59XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cCA+IC5idG4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZmxvYXQ6IG5vbmU7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG59XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmJlZm9yZSxcbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDphZnRlciB7XG4gIGNsZWFyOiBib3RoO1xufVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cCA+IC5idG4ge1xuICBmbG9hdDogbm9uZTtcbn1cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4gKyAuYnRuLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4gKyAuYnRuLWdyb3VwLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAgKyAuYnRuLFxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tZ3JvdXAgKyAuYnRuLWdyb3VwIHtcbiAgbWFyZ2luLXRvcDogLTFweDtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkge1xuICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bjpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG59XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xufVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuOmxhc3QtY2hpbGQsXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpID4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xufVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xufVxuXG4uYnRuLWdyb3VwLWp1c3RpZmllZCB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICB3aWR0aDogMTAwJTtcbiAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbn1cblxuLmJ0bi1ncm91cC1qdXN0aWZpZWQgPiAuYnRuLFxuLmJ0bi1ncm91cC1qdXN0aWZpZWQgPiAuYnRuLWdyb3VwIHtcbiAgZmxvYXQ6IG5vbmU7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIHdpZHRoOiAxJTtcbn1cblxuLmJ0bi1ncm91cC1qdXN0aWZpZWQgPiAuYnRuLWdyb3VwIC5idG4ge1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmJ0bi1ncm91cC1qdXN0aWZpZWQgPiAuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IHtcbiAgbGVmdDogYXV0bztcbn1cblxuW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXSA+IC5idG4gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXSA+IC5idG4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXSA+IC5idG4tZ3JvdXAgPiAuYnRuIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbltkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIl0gPiAuYnRuLWdyb3VwID4gLmJ0biBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uaW5wdXQtZ3JvdXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlO1xufVxuXG4uaW5wdXQtZ3JvdXBbY2xhc3MqPVwiY29sLVwiXSB7XG4gIGZsb2F0OiBub25lO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG59XG5cbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAyO1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1idG4sXG4uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbCB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG59XG5cbi5pbnB1dC1ncm91cC1hZGRvbjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLFxuLmlucHV0LWdyb3VwLWJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLFxuLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2w6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbi5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1idG4ge1xuICB3aWR0aDogMSU7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5pbnB1dC1ncm91cC1hZGRvbiB7XG4gIHBhZGRpbmc6IDZweCAxMnB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogIzQ0NDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi5pbnB1dC1ncm91cC1hZGRvbi5pbnB1dC1zbSwgLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IC5pbnB1dC1ncm91cC1hZGRvbi5idG4ge1xuICBwYWRkaW5nOiA1cHggMTBweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi5pbnB1dC1ncm91cC1hZGRvbi5pbnB1dC1sZywgLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLWJ0biA+IC5pbnB1dC1ncm91cC1hZGRvbi5idG4ge1xuICBwYWRkaW5nOiAxMHB4IDE2cHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4uaW5wdXQtZ3JvdXAtYWRkb24gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmlucHV0LWdyb3VwLWFkZG9uIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmZpcnN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWFkZG9uOmZpcnN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bi1ncm91cCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmRyb3Bkb3duLXRvZ2dsZSxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xufVxuXG4uaW5wdXQtZ3JvdXAtYWRkb246Zmlyc3QtY2hpbGQge1xuICBib3JkZXItcmlnaHQ6IDA7XG59XG5cbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmxhc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZCxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5kcm9wZG93bi10b2dnbGUsXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKSxcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0biB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG59XG5cbi5pbnB1dC1ncm91cC1hZGRvbjpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLWxlZnQ6IDA7XG59XG5cbi5pbnB1dC1ncm91cC1idG4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZvbnQtc2l6ZTogMDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLmlucHV0LWdyb3VwLWJ0biA+IC5idG4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5pbnB1dC1ncm91cC1idG4gPiAuYnRuICsgLmJ0biB7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuXG4uaW5wdXQtZ3JvdXAtYnRuID4gLmJ0bjpob3Zlcixcbi5pbnB1dC1ncm91cC1idG4gPiAuYnRuOmZvY3VzLFxuLmlucHV0LWdyb3VwLWJ0biA+IC5idG46YWN0aXZlIHtcbiAgei1pbmRleDogMjtcbn1cblxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bi1ncm91cCB7XG4gIG1hcmdpbi1yaWdodDogLTFweDtcbn1cblxuLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4tZ3JvdXAge1xuICB6LWluZGV4OiAyO1xuICBtYXJnaW4tbGVmdDogLTFweDtcbn1cblxuLm5hdiB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxuLm5hdjpiZWZvcmUsXG4ubmF2OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4ubmF2OmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG5cbi5uYXYgPiBsaSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5uYXYgPiBsaSA+IGEge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAxMHB4IDE1cHg7XG59XG5cbi5uYXYgPiBsaSA+IGE6aG92ZXIsXG4ubmF2ID4gbGkgPiBhOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4ubmF2ID4gbGkuZGlzYWJsZWQgPiBhIHtcbiAgY29sb3I6ICM5OTk7XG59XG5cbi5uYXYgPiBsaS5kaXNhYmxlZCA+IGE6aG92ZXIsXG4ubmF2ID4gbGkuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICM5OTk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5uYXYgLm9wZW4gPiBhLFxuLm5hdiAub3BlbiA+IGE6aG92ZXIsXG4ubmF2IC5vcGVuID4gYTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogIzNhMzkzYjtcbn1cblxuLm5hdiAubmF2LWRpdmlkZXIge1xuICBoZWlnaHQ6IDFweDtcbiAgbWFyZ2luOiA5cHggMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1ZTVlNTtcbn1cblxuLm5hdiA+IGxpID4gYSA+IGltZyB7XG4gIG1heC13aWR0aDogbm9uZTtcbn1cblxuLm5hdi10YWJzIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG59XG5cbi5uYXYtdGFicyA+IGxpIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1hcmdpbi1ib3R0b206IC0xcHg7XG59XG5cbi5uYXYtdGFicyA+IGxpID4gYSB7XG4gIG1hcmdpbi1yaWdodDogMnB4O1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiAzcHggM3B4IDAgMDtcbn1cblxuLm5hdi10YWJzID4gbGkgPiBhOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjZmZmICNmZmYgI2RkZDtcbn1cblxuLm5hdi10YWJzID4gbGkuYWN0aXZlID4gYSxcbi5uYXYtdGFicyA+IGxpLmFjdGl2ZSA+IGE6aG92ZXIsXG4ubmF2LXRhYnMgPiBsaS5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICM0NDQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi5uYXYtcGlsbHMgPiBsaSB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuXG4ubmF2LXBpbGxzID4gbGkgPiBhIHtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4ubmF2LXBpbGxzID4gbGkgKyBsaSB7XG4gIG1hcmdpbi1sZWZ0OiAycHg7XG59XG5cbi5uYXYtcGlsbHMgPiBsaS5hY3RpdmUgPiBhLFxuLm5hdi1waWxscyA+IGxpLmFjdGl2ZSA+IGE6aG92ZXIsXG4ubmF2LXBpbGxzID4gbGkuYWN0aXZlID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2EzOTNiO1xufVxuXG4ubmF2LXN0YWNrZWQgPiBsaSB7XG4gIGZsb2F0OiBub25lO1xufVxuXG4ubmF2LXN0YWNrZWQgPiBsaSArIGxpIHtcbiAgbWFyZ2luLXRvcDogMnB4O1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLm5hdi1qdXN0aWZpZWQsIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5uYXYtanVzdGlmaWVkID4gbGksIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkge1xuICBmbG9hdDogbm9uZTtcbn1cblxuLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEsIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkgPiBhIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG5cbi5uYXYtanVzdGlmaWVkID4gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHtcbiAgdG9wOiBhdXRvO1xuICBsZWZ0OiBhdXRvO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLm5hdi1qdXN0aWZpZWQgPiBsaSwgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICB3aWR0aDogMSU7XG4gIH1cbiAgLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEsIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkgPiBhIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG59XG5cbi5uYXYtdGFicy1qdXN0aWZpZWQsIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cblxuLm5hdi10YWJzLWp1c3RpZmllZCA+IGxpID4gYSwgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiBsaSA+IGEge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhLFxuLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYSwgLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpob3ZlciwgLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmZvY3VzLCAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXYtdGFicy1qdXN0aWZpZWQgPiBsaSA+IGEsIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gbGkgPiBhIHtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgICBib3JkZXItcmFkaXVzOiAzcHggM3B4IDAgMDtcbiAgfVxuICAubmF2LXRhYnMtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGEsXG4gIC5uYXYtdGFicy5uYXYtanVzdGlmaWVkID4gLmFjdGl2ZSA+IGEsIC5uYXYtdGFicy1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpob3ZlcixcbiAgLm5hdi10YWJzLm5hdi1qdXN0aWZpZWQgPiAuYWN0aXZlID4gYTpob3ZlciwgLm5hdi10YWJzLWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmZvY3VzLCAubmF2LXRhYnMubmF2LWp1c3RpZmllZCA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmO1xuICB9XG59XG5cbi50YWItY29udGVudCA+IC50YWItcGFuZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi50YWItY29udGVudCA+IC5hY3RpdmUge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLm5hdi10YWJzIC5kcm9wZG93bi1tZW51IHtcbiAgbWFyZ2luLXRvcDogLTFweDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG59XG5cbi5uYXZiYXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1pbi1oZWlnaHQ6IDUwcHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xufVxuXG4ubmF2YmFyOmJlZm9yZSxcbi5uYXZiYXI6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgZGlzcGxheTogdGFibGU7XG59XG5cbi5uYXZiYXI6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXZiYXIge1xuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgfVxufVxuXG4ubmF2YmFyLWhlYWRlcjpiZWZvcmUsXG4ubmF2YmFyLWhlYWRlcjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLm5hdmJhci1oZWFkZXI6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXZiYXItaGVhZGVyIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgfVxufVxuXG4ubmF2YmFyLWNvbGxhcHNlIHtcbiAgb3ZlcmZsb3cteDogdmlzaWJsZTtcbiAgcGFkZGluZy1yaWdodDogMDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG5cbi5uYXZiYXItY29sbGFwc2U6YmVmb3JlLFxuLm5hdmJhci1jb2xsYXBzZTphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLm5hdmJhci1jb2xsYXBzZTphZnRlciB7XG4gIGNsZWFyOiBib3RoO1xufVxuXG4ubmF2YmFyLWNvbGxhcHNlLmluIHtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXZiYXItY29sbGFwc2Uge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgfVxuICAubmF2YmFyLWNvbGxhcHNlLmNvbGxhcHNlIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm5hdmJhci1jb2xsYXBzZS5pbiB7XG4gICAgb3ZlcmZsb3cteTogdmlzaWJsZTtcbiAgfVxuICAubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWNvbGxhcHNlLFxuICAubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1jb2xsYXBzZSxcbiAgLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1jb2xsYXBzZSB7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gIH1cbn1cblxuLm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1jb2xsYXBzZSxcbi5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItY29sbGFwc2Uge1xuICBtYXgtaGVpZ2h0OiAzNDBweDtcbn1cblxuQG1lZGlhIChtYXgtZGV2aWNlLXdpZHRoOiA0ODBweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XG4gIC5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItY29sbGFwc2UsXG4gIC5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItY29sbGFwc2Uge1xuICAgIG1heC1oZWlnaHQ6IDIwMHB4O1xuICB9XG59XG5cbi5jb250YWluZXIgPiAubmF2YmFyLWhlYWRlcixcbi5jb250YWluZXIgPiAubmF2YmFyLWNvbGxhcHNlLFxuLmNvbnRhaW5lci1mbHVpZCA+IC5uYXZiYXItaGVhZGVyLFxuLmNvbnRhaW5lci1mbHVpZCA+IC5uYXZiYXItY29sbGFwc2Uge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmNvbnRhaW5lciA+IC5uYXZiYXItaGVhZGVyLFxuICAuY29udGFpbmVyID4gLm5hdmJhci1jb2xsYXBzZSxcbiAgLmNvbnRhaW5lci1mbHVpZCA+IC5uYXZiYXItaGVhZGVyLFxuICAuY29udGFpbmVyLWZsdWlkID4gLm5hdmJhci1jb2xsYXBzZSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICB9XG59XG5cbi5uYXZiYXItc3RhdGljLXRvcCB7XG4gIHotaW5kZXg6IDEwMDA7XG4gIGJvcmRlci13aWR0aDogMCAwIDFweDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXZiYXItc3RhdGljLXRvcCB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxufVxuXG4ubmF2YmFyLWZpeGVkLXRvcCxcbi5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICByaWdodDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTAzMDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXZiYXItZml4ZWQtdG9wLFxuICAubmF2YmFyLWZpeGVkLWJvdHRvbSB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxufVxuXG4ubmF2YmFyLWZpeGVkLXRvcCB7XG4gIHRvcDogMDtcbiAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4O1xufVxuXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSB7XG4gIGJvdHRvbTogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgYm9yZGVyLXdpZHRoOiAxcHggMCAwO1xufVxuXG4ubmF2YmFyLWJyYW5kIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHBhZGRpbmc6IDE1cHggMDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgaGVpZ2h0OiA1MHB4O1xufVxuXG4ubmF2YmFyLWJyYW5kOmhvdmVyLFxuLm5hdmJhci1icmFuZDpmb2N1cyB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLm5hdmJhci1icmFuZCA+IGltZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLm5hdmJhciA+IC5jb250YWluZXIgLm5hdmJhci1icmFuZCxcbiAgLm5hdmJhciA+IC5jb250YWluZXItZmx1aWQgLm5hdmJhci1icmFuZCB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cbn1cblxuLm5hdmJhci10b2dnbGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsb2F0OiByaWdodDtcbiAgbWFyZ2luLXJpZ2h0OiAwO1xuICBwYWRkaW5nOiA5cHggMTBweDtcbiAgbWFyZ2luLXRvcDogOHB4O1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4ubmF2YmFyLXRvZ2dsZTpmb2N1cyB7XG4gIG91dGxpbmU6IDA7XG59XG5cbi5uYXZiYXItdG9nZ2xlIC5pY29uLWJhciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMjJweDtcbiAgaGVpZ2h0OiAycHg7XG4gIGJvcmRlci1yYWRpdXM6IDFweDtcbn1cblxuLm5hdmJhci10b2dnbGUgLmljb24tYmFyICsgLmljb24tYmFyIHtcbiAgbWFyZ2luLXRvcDogNHB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLm5hdmJhci10b2dnbGUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLm5hdmJhci1uYXYge1xuICBtYXJnaW46IDcuNXB4IDA7XG59XG5cbi5uYXZiYXItbmF2ID4gbGkgPiBhIHtcbiAgcGFkZGluZy10b3A6IDEwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIGZsb2F0OiBub25lO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiAwO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gIH1cbiAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEsXG4gIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXIge1xuICAgIHBhZGRpbmc6IDVweCAxNXB4IDVweCAyNXB4O1xuICB9XG4gIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgfVxuICAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlcixcbiAgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6Zm9jdXMge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXZiYXItbmF2IHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW46IDA7XG4gIH1cbiAgLm5hdmJhci1uYXYgPiBsaSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gIH1cbiAgLm5hdmJhci1uYXYgPiBsaSA+IGEge1xuICAgIHBhZGRpbmctdG9wOiAxNXB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxNXB4O1xuICB9XG59XG5cbi5uYXZiYXItZm9ybSB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIHBhZGRpbmc6IDEwcHggMDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSksIDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSwgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XG4gIG1hcmdpbi10b3A6IDhweDtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLm5hdmJhci1mb3JtIC5mb3JtLWdyb3VwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG4gIC5uYXZiYXItZm9ybSAuZm9ybS1jb250cm9sIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAubmF2YmFyLWZvcm0gLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxuICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtdGFibGU7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1hZGRvbixcbiAgLm5hdmJhci1mb3JtIC5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYnRuLFxuICAubmF2YmFyLWZvcm0gLmlucHV0LWdyb3VwIC5mb3JtLWNvbnRyb2wge1xuICAgIHdpZHRoOiBhdXRvO1xuICB9XG4gIC5uYXZiYXItZm9ybSAuaW5wdXQtZ3JvdXAgPiAuZm9ybS1jb250cm9sIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuICAubmF2YmFyLWZvcm0gLmNvbnRyb2wtbGFiZWwge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuICAubmF2YmFyLWZvcm0gLnJhZGlvLFxuICAubmF2YmFyLWZvcm0gLmNoZWNrYm94IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIH1cbiAgLm5hdmJhci1mb3JtIC5yYWRpbyBsYWJlbCxcbiAgLm5hdmJhci1mb3JtIC5jaGVja2JveCBsYWJlbCB7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICB9XG4gIC5uYXZiYXItZm9ybSAucmFkaW8gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuICAubmF2YmFyLWZvcm0gLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICB9XG4gIC5uYXZiYXItZm9ybSAuaGFzLWZlZWRiYWNrIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgIHRvcDogMDtcbiAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgLm5hdmJhci1mb3JtIC5mb3JtLWdyb3VwIHtcbiAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gIH1cbiAgLm5hdmJhci1mb3JtIC5mb3JtLWdyb3VwOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXZiYXItZm9ybSB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgYm9yZGVyOiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgfVxufVxuXG4ubmF2YmFyLW5hdiA+IGxpID4gLmRyb3Bkb3duLW1lbnUge1xuICBtYXJnaW4tdG9wOiAwO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbn1cblxuLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1uYXYgPiBsaSA+IC5kcm9wZG93bi1tZW51IHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogM3B4O1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbn1cblxuLm5hdmJhci1idG4ge1xuICBtYXJnaW4tdG9wOiA4cHg7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbn1cblxuLm5hdmJhci1idG4uYnRuLXNtLCAuYnRuLWdyb3VwLXNtID4gLm5hdmJhci1idG4uYnRuIHtcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxuLm5hdmJhci1idG4uYnRuLXhzLCAuYnRuLWdyb3VwLXhzID4gLm5hdmJhci1idG4uYnRuIHtcbiAgbWFyZ2luLXRvcDogMTRweDtcbiAgbWFyZ2luLWJvdHRvbTogMTRweDtcbn1cblxuLm5hdmJhci10ZXh0IHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbiAgbWFyZ2luLWJvdHRvbTogMTVweDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XG4gIC5uYXZiYXItdGV4dCB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAubmF2YmFyLWxlZnQge1xuICAgIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm5hdmJhci1yaWdodCB7XG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICB9XG4gIC5uYXZiYXItcmlnaHQgfiAubmF2YmFyLXJpZ2h0IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gIH1cbn1cblxuLm5hdmJhci1kZWZhdWx0IHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODtcbiAgYm9yZGVyLWNvbG9yOiAjZTdlN2U3O1xufVxuXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1icmFuZCB7XG4gIGNvbG9yOiAjNzc3O1xufVxuXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1icmFuZDpob3Zlcixcbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWJyYW5kOmZvY3VzIHtcbiAgY29sb3I6ICM1ZTVlNWU7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci10ZXh0IHtcbiAgY29sb3I6ICM3Nzc7XG59XG5cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IGxpID4gYSB7XG4gIGNvbG9yOiAjNzc3O1xufVxuXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiBsaSA+IGE6aG92ZXIsXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiBsaSA+IGE6Zm9jdXMge1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5hY3RpdmUgPiBhLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjNTU1O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTdlN2U3O1xufVxuXG4ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYTpob3Zlcixcbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICBjb2xvcjogI2NjYztcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLXRvZ2dsZSB7XG4gIGJvcmRlci1jb2xvcjogI2RkZDtcbn1cblxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlOmhvdmVyLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDtcbn1cblxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItdG9nZ2xlIC5pY29uLWJhciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM4ODg7XG59XG5cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWNvbGxhcHNlLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItZm9ybSB7XG4gIGJvcmRlci1jb2xvcjogI2U3ZTdlNztcbn1cblxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhOmhvdmVyLFxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2ID4gLm9wZW4gPiBhOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U3ZTdlNztcbiAgY29sb3I6ICM1NTU7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEge1xuICAgIGNvbG9yOiAjNzc3O1xuICB9XG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlcixcbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogIzMzMztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuICAubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSxcbiAgLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogIzU1NTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTdlN2U3O1xuICB9XG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGEsXG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4gIC5uYXZiYXItZGVmYXVsdCAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICAgIGNvbG9yOiAjY2NjO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG59XG5cbi5uYXZiYXItZGVmYXVsdCAubmF2YmFyLWxpbmsge1xuICBjb2xvcjogIzc3Nztcbn1cblxuLm5hdmJhci1kZWZhdWx0IC5uYXZiYXItbGluazpob3ZlciB7XG4gIGNvbG9yOiAjMzMzO1xufVxuXG4ubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rIHtcbiAgY29sb3I6ICM3Nzc7XG59XG5cbi5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbms6aG92ZXIsXG4ubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICMzMzM7XG59XG5cbi5uYXZiYXItZGVmYXVsdCAuYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVyLFxuLm5hdmJhci1kZWZhdWx0IC5idG4tbGlua1tkaXNhYmxlZF06Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLm5hdmJhci1kZWZhdWx0IC5idG4tbGluazpob3ZlcixcbmZpZWxkc2V0W2Rpc2FibGVkXSAubmF2YmFyLWRlZmF1bHQgLmJ0bi1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICNjY2M7XG59XG5cbi5uYXZiYXItaW52ZXJzZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyMjI7XG4gIGJvcmRlci1jb2xvcjogIzA5MDkwOTtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQge1xuICBjb2xvcjogI2JmYmZiZjtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQ6aG92ZXIsXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1icmFuZDpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdGV4dCB7XG4gIGNvbG9yOiAjYmZiZmJmO1xufVxuXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiBsaSA+IGEge1xuICBjb2xvcjogI2JmYmZiZjtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gbGkgPiBhOmhvdmVyLFxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gbGkgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAuYWN0aXZlID4gYSxcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzA5MDkwOTtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2ID4gLmRpc2FibGVkID4gYSxcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICM0NDQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci10b2dnbGUge1xuICBib3JkZXItY29sb3I6ICMzMzM7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZTpob3Zlcixcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXRvZ2dsZSAuaWNvbi1iYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1jb2xsYXBzZSxcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWZvcm0ge1xuICBib3JkZXItY29sb3I6ICMxMDEwMTA7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5vcGVuID4gYSxcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpob3Zlcixcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiA+IC5vcGVuID4gYTpmb2N1cyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwOTA5MDk7XG4gIGNvbG9yOiAjZmZmO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmRyb3Bkb3duLWhlYWRlciB7XG4gICAgYm9yZGVyLWNvbG9yOiAjMDkwOTA5O1xuICB9XG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSAuZGl2aWRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzA5MDkwOTtcbiAgfVxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGEge1xuICAgIGNvbG9yOiAjYmZiZmJmO1xuICB9XG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IGxpID4gYTpob3ZlcixcbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuICAubmF2YmFyLWludmVyc2UgLm5hdmJhci1uYXYgLm9wZW4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSxcbiAgLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgICBjb2xvcjogI2ZmZjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDkwOTA5O1xuICB9XG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGEsXG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4gIC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdiAub3BlbiAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6Zm9jdXMge1xuICAgIGNvbG9yOiAjNDQ0O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG59XG5cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbmsge1xuICBjb2xvcjogI2JmYmZiZjtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbGluazpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xufVxuXG4ubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rIHtcbiAgY29sb3I6ICNiZmJmYmY7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbms6aG92ZXIsXG4ubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAuYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVyLFxuLm5hdmJhci1pbnZlcnNlIC5idG4tbGlua1tkaXNhYmxlZF06Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLm5hdmJhci1pbnZlcnNlIC5idG4tbGluazpob3ZlcixcbmZpZWxkc2V0W2Rpc2FibGVkXSAubmF2YmFyLWludmVyc2UgLmJ0bi1saW5rOmZvY3VzIHtcbiAgY29sb3I6ICM0NDQ7XG59XG5cbi5icmVhZGNydW1iIHtcbiAgcGFkZGluZzogOHB4IDE1cHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLmJyZWFkY3J1bWIgPiBsaSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLmJyZWFkY3J1bWIgPiBsaSArIGxpOmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiL1xcXFwwMGEwXCI7XG4gIHBhZGRpbmc6IDAgNXB4O1xuICBjb2xvcjogI2NjYztcbn1cblxuLmJyZWFkY3J1bWIgPiAuYWN0aXZlIHtcbiAgY29sb3I6ICM5OTk7XG59XG5cbi5wYWdpbmF0aW9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIG1hcmdpbjogMjBweCAwO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi5wYWdpbmF0aW9uID4gbGkge1xuICBkaXNwbGF5OiBpbmxpbmU7XG59XG5cbi5wYWdpbmF0aW9uID4gbGkgPiBhLFxuLnBhZ2luYXRpb24gPiBsaSA+IHNwYW4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsb2F0OiBsZWZ0O1xuICBwYWRkaW5nOiA2cHggMTJweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiAjM2EzOTNiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBtYXJnaW4tbGVmdDogLTFweDtcbn1cblxuLnBhZ2luYXRpb24gPiBsaTpmaXJzdC1jaGlsZCA+IGEsXG4ucGFnaW5hdGlvbiA+IGxpOmZpcnN0LWNoaWxkID4gc3BhbiB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDtcbn1cblxuLnBhZ2luYXRpb24gPiBsaTpsYXN0LWNoaWxkID4gYSxcbi5wYWdpbmF0aW9uID4gbGk6bGFzdC1jaGlsZCA+IHNwYW4ge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xufVxuXG4ucGFnaW5hdGlvbiA+IGxpID4gYTpob3Zlcixcbi5wYWdpbmF0aW9uID4gbGkgPiBhOmZvY3VzLFxuLnBhZ2luYXRpb24gPiBsaSA+IHNwYW46aG92ZXIsXG4ucGFnaW5hdGlvbiA+IGxpID4gc3Bhbjpmb2N1cyB7XG4gIHotaW5kZXg6IDM7XG4gIGNvbG9yOiAjMTQxMzE0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXItY29sb3I6ICNkZGQ7XG59XG5cbi5wYWdpbmF0aW9uID4gLmFjdGl2ZSA+IGEsXG4ucGFnaW5hdGlvbiA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuLnBhZ2luYXRpb24gPiAuYWN0aXZlID4gYTpmb2N1cyxcbi5wYWdpbmF0aW9uID4gLmFjdGl2ZSA+IHNwYW4sXG4ucGFnaW5hdGlvbiA+IC5hY3RpdmUgPiBzcGFuOmhvdmVyLFxuLnBhZ2luYXRpb24gPiAuYWN0aXZlID4gc3Bhbjpmb2N1cyB7XG4gIHotaW5kZXg6IDI7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2EzOTNiO1xuICBib3JkZXItY29sb3I6ICMzYTM5M2I7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBzcGFuLFxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBzcGFuOmhvdmVyLFxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBzcGFuOmZvY3VzLFxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBhLFxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBhOmhvdmVyLFxuLnBhZ2luYXRpb24gPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICM5OTk7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogI2RkZDtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLnBhZ2luYXRpb24tbGcgPiBsaSA+IGEsXG4ucGFnaW5hdGlvbi1sZyA+IGxpID4gc3BhbiB7XG4gIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMS4zMzMzMzMzO1xufVxuXG4ucGFnaW5hdGlvbi1sZyA+IGxpOmZpcnN0LWNoaWxkID4gYSxcbi5wYWdpbmF0aW9uLWxnID4gbGk6Zmlyc3QtY2hpbGQgPiBzcGFuIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG59XG5cbi5wYWdpbmF0aW9uLWxnID4gbGk6bGFzdC1jaGlsZCA+IGEsXG4ucGFnaW5hdGlvbi1sZyA+IGxpOmxhc3QtY2hpbGQgPiBzcGFuIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDtcbn1cblxuLnBhZ2luYXRpb24tc20gPiBsaSA+IGEsXG4ucGFnaW5hdGlvbi1zbSA+IGxpID4gc3BhbiB7XG4gIHBhZGRpbmc6IDVweCAxMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG5cbi5wYWdpbmF0aW9uLXNtID4gbGk6Zmlyc3QtY2hpbGQgPiBhLFxuLnBhZ2luYXRpb24tc20gPiBsaTpmaXJzdC1jaGlsZCA+IHNwYW4ge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDtcbn1cblxuLnBhZ2luYXRpb24tc20gPiBsaTpsYXN0LWNoaWxkID4gYSxcbi5wYWdpbmF0aW9uLXNtID4gbGk6bGFzdC1jaGlsZCA+IHNwYW4ge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xufVxuXG4ucGFnZXIge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIG1hcmdpbjogMjBweCAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5wYWdlcjpiZWZvcmUsXG4ucGFnZXI6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgZGlzcGxheTogdGFibGU7XG59XG5cbi5wYWdlcjphZnRlciB7XG4gIGNsZWFyOiBib3RoO1xufVxuXG4ucGFnZXIgbGkge1xuICBkaXNwbGF5OiBpbmxpbmU7XG59XG5cbi5wYWdlciBsaSA+IGEsXG4ucGFnZXIgbGkgPiBzcGFuIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiA1cHggMTRweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLXJhZGl1czogMTVweDtcbn1cblxuLnBhZ2VyIGxpID4gYTpob3Zlcixcbi5wYWdlciBsaSA+IGE6Zm9jdXMge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cbi5wYWdlciAubmV4dCA+IGEsXG4ucGFnZXIgLm5leHQgPiBzcGFuIHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuXG4ucGFnZXIgLnByZXZpb3VzID4gYSxcbi5wYWdlciAucHJldmlvdXMgPiBzcGFuIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5cbi5wYWdlciAuZGlzYWJsZWQgPiBhLFxuLnBhZ2VyIC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4ucGFnZXIgLmRpc2FibGVkID4gYTpmb2N1cyxcbi5wYWdlciAuZGlzYWJsZWQgPiBzcGFuIHtcbiAgY29sb3I6ICM5OTk7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5sYWJlbCB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgcGFkZGluZzogMC4yZW0gMC42ZW0gMC4zZW07XG4gIGZvbnQtc2l6ZTogNzUlO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgYm9yZGVyLXJhZGl1czogLjI1ZW07XG59XG5cbi5sYWJlbDplbXB0eSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5idG4gLmxhYmVsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0xcHg7XG59XG5cbmEubGFiZWw6aG92ZXIsXG5hLmxhYmVsOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ubGFiZWwtZGVmYXVsdCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM5OTk7XG59XG5cbi5sYWJlbC1kZWZhdWx0W2hyZWZdOmhvdmVyLFxuLmxhYmVsLWRlZmF1bHRbaHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBncmF5O1xufVxuXG4ubGFiZWwtcHJpbWFyeSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzYTM5M2I7XG59XG5cbi5sYWJlbC1wcmltYXJ5W2hyZWZdOmhvdmVyLFxuLmxhYmVsLXByaW1hcnlbaHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjEyMDIxO1xufVxuXG4ubGFiZWwtc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1Y2I4NWM7XG59XG5cbi5sYWJlbC1zdWNjZXNzW2hyZWZdOmhvdmVyLFxuLmxhYmVsLXN1Y2Nlc3NbaHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ5ZDQ0O1xufVxuXG4ubGFiZWwtaW5mbyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1YmMwZGU7XG59XG5cbi5sYWJlbC1pbmZvW2hyZWZdOmhvdmVyLFxuLmxhYmVsLWluZm9baHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzFiMGQ1O1xufVxuXG4ubGFiZWwtd2FybmluZyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGFkNGU7XG59XG5cbi5sYWJlbC13YXJuaW5nW2hyZWZdOmhvdmVyLFxuLmxhYmVsLXdhcm5pbmdbaHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWM5NzFmO1xufVxuXG4ubGFiZWwtZGFuZ2VyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5NTM0Zjtcbn1cblxuLmxhYmVsLWRhbmdlcltocmVmXTpob3Zlcixcbi5sYWJlbC1kYW5nZXJbaHJlZl06Zm9jdXMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzkzMDJjO1xufVxuXG4uYmFkZ2Uge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1pbi13aWR0aDogMTBweDtcbiAgcGFkZGluZzogM3B4IDdweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICNmZmY7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICM5OTk7XG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XG59XG5cbi5iYWRnZTplbXB0eSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5idG4gLmJhZGdlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0xcHg7XG59XG5cbi5idG4teHMgLmJhZGdlLFxuLmJ0bi1ncm91cC14cyA+IC5idG4gLmJhZGdlLFxuLmJ0bi1ncm91cC14cyA+IC5idG4gLmJhZGdlIHtcbiAgdG9wOiAwO1xuICBwYWRkaW5nOiAxcHggNXB4O1xufVxuXG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSA+IC5iYWRnZSxcbi5uYXYtcGlsbHMgPiAuYWN0aXZlID4gYSA+IC5iYWRnZSB7XG4gIGNvbG9yOiAjM2EzOTNiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4ubGlzdC1ncm91cC1pdGVtID4gLmJhZGdlIHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuXG4ubGlzdC1ncm91cC1pdGVtID4gLmJhZGdlICsgLmJhZGdlIHtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG59XG5cbi5uYXYtcGlsbHMgPiBsaSA+IGEgPiAuYmFkZ2Uge1xuICBtYXJnaW4tbGVmdDogM3B4O1xufVxuXG5hLmJhZGdlOmhvdmVyLFxuYS5iYWRnZTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmp1bWJvdHJvbiB7XG4gIHBhZGRpbmctdG9wOiAzMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMzBweDtcbiAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cbi5qdW1ib3Ryb24gaDEsXG4uanVtYm90cm9uIC5oMSB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG4uanVtYm90cm9uIHAge1xuICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICBmb250LXNpemU6IDIxcHg7XG4gIGZvbnQtd2VpZ2h0OiAyMDA7XG59XG5cbi5qdW1ib3Ryb24gPiBociB7XG4gIGJvcmRlci10b3AtY29sb3I6ICNlNmU2ZTY7XG59XG5cbi5jb250YWluZXIgLmp1bWJvdHJvbixcbi5jb250YWluZXItZmx1aWQgLmp1bWJvdHJvbiB7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLmp1bWJvdHJvbiAuY29udGFpbmVyIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA5OTJweCkge1xuICAuanVtYm90cm9uIHtcbiAgICBwYWRkaW5nLXRvcDogNDhweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogNDhweDtcbiAgfVxuICAuY29udGFpbmVyIC5qdW1ib3Ryb24sXG4gIC5jb250YWluZXItZmx1aWQgLmp1bWJvdHJvbiB7XG4gICAgcGFkZGluZy1sZWZ0OiA2MHB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDYwcHg7XG4gIH1cbiAgLmp1bWJvdHJvbiBoMSxcbiAgLmp1bWJvdHJvbiAuaDEge1xuICAgIGZvbnQtc2l6ZTogNjNweDtcbiAgfVxufVxuXG4udGh1bWJuYWlsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDRweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDI5O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogYm9yZGVyIDAuMnMgZWFzZS1pbi1vdXQ7XG4gIC1vLXRyYW5zaXRpb246IGJvcmRlciAwLjJzIGVhc2UtaW4tb3V0O1xuICB0cmFuc2l0aW9uOiBib3JkZXIgMC4ycyBlYXNlLWluLW91dDtcbn1cblxuLnRodW1ibmFpbCA+IGltZyxcbi50aHVtYm5haWwgYSA+IGltZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbn1cblxuLnRodW1ibmFpbCAuY2FwdGlvbiB7XG4gIHBhZGRpbmc6IDlweDtcbiAgY29sb3I6ICMyMjI7XG59XG5cbmEudGh1bWJuYWlsOmhvdmVyLFxuYS50aHVtYm5haWw6Zm9jdXMsXG5hLnRodW1ibmFpbC5hY3RpdmUge1xuICBib3JkZXItY29sb3I6ICMzYTM5M2I7XG59XG5cbi5hbGVydCB7XG4gIHBhZGRpbmc6IDhweCAxNXB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLmFsZXJ0IGg0IHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbi5hbGVydCAuYWxlcnQtbGluayB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uYWxlcnQgPiBwLFxuLmFsZXJ0ID4gdWwge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4uYWxlcnQgPiBwICsgcCB7XG4gIG1hcmdpbi10b3A6IDVweDtcbn1cblxuLmFsZXJ0LWRpc21pc3NhYmxlLCAuYWxlcnQtZGlzbWlzc2libGUge1xuICBwYWRkaW5nLXJpZ2h0OiA4cHggMTVweDIwO1xufVxuXG4uYWxlcnQtZGlzbWlzc2FibGUgLmNsb3NlLCAuYWxlcnQtZGlzbWlzc2libGUgLmNsb3NlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IC0ycHg7XG4gIHJpZ2h0OiAtMjFweDtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbi5hbGVydC1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RhZTZjYjtcbiAgYm9yZGVyLWNvbG9yOiAjOGNjNjNmO1xuICBjb2xvcjogIzZjNmM2Yztcbn1cblxuLmFsZXJ0LXN1Y2Nlc3MgaHIge1xuICBib3JkZXItdG9wLWNvbG9yOiAjN2ZiNjM2O1xufVxuXG4uYWxlcnQtc3VjY2VzcyAuYWxlcnQtbGluayB7XG4gIGNvbG9yOiAjNTI1MjUyO1xufVxuXG4uYWxlcnQtaW5mbyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7XG4gIGJvcmRlci1jb2xvcjogIzAwOGFiZjtcbiAgY29sb3I6ICM2YzZjNmM7XG59XG5cbi5hbGVydC1pbmZvIGhyIHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzAwNzhhNjtcbn1cblxuLmFsZXJ0LWluZm8gLmFsZXJ0LWxpbmsge1xuICBjb2xvcjogIzUyNTI1Mjtcbn1cblxuLmFsZXJ0LXdhcm5pbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFlM2MyO1xuICBib3JkZXItY29sb3I6ICNmZGI4MTM7XG4gIGNvbG9yOiAjNmM2YzZjO1xufVxuXG4uYWxlcnQtd2FybmluZyBociB7XG4gIGJvcmRlci10b3AtY29sb3I6ICNmNGFkMDI7XG59XG5cbi5hbGVydC13YXJuaW5nIC5hbGVydC1saW5rIHtcbiAgY29sb3I6ICM1MjUyNTI7XG59XG5cbi5hbGVydC1kYW5nZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWFjM2M3O1xuICBib3JkZXItY29sb3I6ICNkOTE4MmQ7XG4gIGNvbG9yOiAjNmM2YzZjO1xufVxuXG4uYWxlcnQtZGFuZ2VyIGhyIHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2MyMTUyODtcbn1cblxuLmFsZXJ0LWRhbmdlciAuYWxlcnQtbGluayB7XG4gIGNvbG9yOiAjNTI1MjUyO1xufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXMge1xuICBmcm9tIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA0MHB4IDA7XG4gIH1cbiAgdG8ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHtcbiAgZnJvbSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNDBweCAwO1xuICB9XG4gIHRvIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XG4gIH1cbn1cblxuLnByb2dyZXNzIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgaGVpZ2h0OiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cblxuLnByb2dyZXNzLWJhciB7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNhMzkzYjtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICAtd2Via2l0LXRyYW5zaXRpb246IHdpZHRoIDAuNnMgZWFzZTtcbiAgLW8tdHJhbnNpdGlvbjogd2lkdGggMC42cyBlYXNlO1xuICB0cmFuc2l0aW9uOiB3aWR0aCAwLjZzIGVhc2U7XG59XG5cbi5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXIsXG4ucHJvZ3Jlc3MtYmFyLXN0cmlwZWQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtc2l6ZTogNDBweCA0MHB4O1xufVxuXG4ucHJvZ3Jlc3MuYWN0aXZlIC5wcm9ncmVzcy1iYXIsXG4ucHJvZ3Jlc3MtYmFyLmFjdGl2ZSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uOiBwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7XG4gIC1vLWFuaW1hdGlvbjogcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlO1xuICBhbmltYXRpb246IHByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTtcbn1cblxuLnByb2dyZXNzLWJhci1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVjYjg1Yztcbn1cblxuLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhci1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xufVxuXG4ucHJvZ3Jlc3MtYmFyLWluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWJjMGRlO1xufVxuXG4ucHJvZ3Jlc3Mtc3RyaXBlZCAucHJvZ3Jlc3MtYmFyLWluZm8ge1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG59XG5cbi5wcm9ncmVzcy1iYXItd2FybmluZyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGFkNGU7XG59XG5cbi5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXItd2FybmluZyB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbn1cblxuLnByb2dyZXNzLWJhci1kYW5nZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDk1MzRmO1xufVxuXG4ucHJvZ3Jlc3Mtc3RyaXBlZCAucHJvZ3Jlc3MtYmFyLWRhbmdlciB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbn1cblxuLm1lZGlhIHtcbiAgbWFyZ2luLXRvcDogMTVweDtcbn1cblxuLm1lZGlhOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cblxuLm1lZGlhLFxuLm1lZGlhLWJvZHkge1xuICB6b29tOiAxO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ubWVkaWEtYm9keSB7XG4gIHdpZHRoOiAxMDAwMHB4O1xufVxuXG4ubWVkaWEtb2JqZWN0IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5tZWRpYS1vYmplY3QuaW1nLXRodW1ibmFpbCB7XG4gIG1heC13aWR0aDogbm9uZTtcbn1cblxuLm1lZGlhLXJpZ2h0LFxuLm1lZGlhID4gLnB1bGwtcmlnaHQge1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG59XG5cbi5tZWRpYS1sZWZ0LFxuLm1lZGlhID4gLnB1bGwtbGVmdCB7XG4gIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG59XG5cbi5tZWRpYS1sZWZ0LFxuLm1lZGlhLXJpZ2h0LFxuLm1lZGlhLWJvZHkge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuXG4ubWVkaWEtbWlkZGxlIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLm1lZGlhLWJvdHRvbSB7XG4gIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG59XG5cbi5tZWRpYS1oZWFkaW5nIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xufVxuXG4ubWVkaWEtbGlzdCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxuLmxpc3QtZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBwYWRkaW5nLWxlZnQ6IDA7XG59XG5cbi5saXN0LWdyb3VwLWl0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAxMHB4IDE1cHg7XG4gIG1hcmdpbi1ib3R0b206IC0xcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG59XG5cbi5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG59XG5cbi5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDtcbn1cblxuYS5saXN0LWdyb3VwLWl0ZW0sXG5idXR0b24ubGlzdC1ncm91cC1pdGVtIHtcbiAgY29sb3I6ICM1NTU7XG59XG5cbmEubGlzdC1ncm91cC1pdGVtIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0gLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHtcbiAgY29sb3I6ICMzMzM7XG59XG5cbmEubGlzdC1ncm91cC1pdGVtOmhvdmVyLFxuYS5saXN0LWdyb3VwLWl0ZW06Zm9jdXMsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbTpmb2N1cyB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6ICM1NTU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG59XG5cbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0ge1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZCxcbi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6aG92ZXIsXG4ubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmZvY3VzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY29sb3I6ICM5OTk7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsXG4ubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG4ubGlzdC1ncm91cC1pdGVtLmRpc2FibGVkIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCxcbi5saXN0LWdyb3VwLWl0ZW0uZGlzYWJsZWQ6aG92ZXIgLmxpc3QtZ3JvdXAtaXRlbS10ZXh0LFxuLmxpc3QtZ3JvdXAtaXRlbS5kaXNhYmxlZDpmb2N1cyAubGlzdC1ncm91cC1pdGVtLXRleHQge1xuICBjb2xvcjogIzk5OTtcbn1cblxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUsXG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3Zlcixcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIHtcbiAgei1pbmRleDogMjtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzYTM5M2I7XG4gIGJvcmRlci1jb2xvcjogIzNhMzkzYjtcbn1cblxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nID4gc21hbGwsXG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiAuc21hbGwsXG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsXG4ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiBzbWFsbCxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmhvdmVyIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyA+IC5zbWFsbCxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyA+IHNtYWxsLFxuLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXMgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nID4gLnNtYWxsIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmhvdmVyIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCxcbi5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7XG4gIGNvbG9yOiAjYTA5ZWEyO1xufVxuXG4ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3Mge1xuICBjb2xvcjogIzZjNmM2YztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RhZTZjYjtcbn1cblxuYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyB7XG4gIGNvbG9yOiAjNmM2YzZjO1xufVxuXG5hLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2VzcyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cblxuYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzczpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3M6Zm9jdXMsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3M6aG92ZXIsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3M6Zm9jdXMge1xuICBjb2xvcjogIzZjNmM2YztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NlZGViYTtcbn1cblxuYS5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmUsXG5hLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZTpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlOmZvY3VzLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1zdWNjZXNzLmFjdGl2ZSxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tc3VjY2Vzcy5hY3RpdmU6aG92ZXIsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXN1Y2Nlc3MuYWN0aXZlOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2YzZjNmM7XG4gIGJvcmRlci1jb2xvcjogIzZjNmM2Yztcbn1cblxuLmxpc3QtZ3JvdXAtaXRlbS1pbmZvIHtcbiAgY29sb3I6ICM2YzZjNmM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7XG59XG5cbmEubGlzdC1ncm91cC1pdGVtLWluZm8sXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm8ge1xuICBjb2xvcjogIzZjNmM2Yztcbn1cblxuYS5saXN0LWdyb3VwLWl0ZW0taW5mbyAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm8gLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbmEubGlzdC1ncm91cC1pdGVtLWluZm86aG92ZXIsXG5hLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmZvY3VzLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvOmZvY3VzIHtcbiAgY29sb3I6ICM2YzZjNmM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjNGUzZjM7XG59XG5cbmEubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlLFxuYS5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmU6aG92ZXIsXG5hLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZTpmb2N1cyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0taW5mby5hY3RpdmUsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWluZm8uYWN0aXZlOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1pbmZvLmFjdGl2ZTpmb2N1cyB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM2YzZjO1xuICBib3JkZXItY29sb3I6ICM2YzZjNmM7XG59XG5cbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZyB7XG4gIGNvbG9yOiAjNmM2YzZjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFlM2MyO1xufVxuXG5hLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nIHtcbiAgY29sb3I6ICM2YzZjNmM7XG59XG5cbmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG5hLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nOmhvdmVyLFxuYS5saXN0LWdyb3VwLWl0ZW0td2FybmluZzpmb2N1cyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZzpob3ZlcixcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZzpmb2N1cyB7XG4gIGNvbG9yOiAjNmM2YzZjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNkOWFkO1xufVxuXG5hLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZSxcbmEubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlOmhvdmVyLFxuYS5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5hY3RpdmU6Zm9jdXMsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLXdhcm5pbmcuYWN0aXZlLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS13YXJuaW5nLmFjdGl2ZTpob3ZlcixcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0td2FybmluZy5hY3RpdmU6Zm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZjNmM2YztcbiAgYm9yZGVyLWNvbG9yOiAjNmM2YzZjO1xufVxuXG4ubGlzdC1ncm91cC1pdGVtLWRhbmdlciB7XG4gIGNvbG9yOiAjNmM2YzZjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWFjM2M3O1xufVxuXG5hLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIsXG5idXR0b24ubGlzdC1ncm91cC1pdGVtLWRhbmdlciB7XG4gIGNvbG9yOiAjNmM2YzZjO1xufVxuXG5hLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIgLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbmEubGlzdC1ncm91cC1pdGVtLWRhbmdlcjpob3ZlcixcbmEubGlzdC1ncm91cC1pdGVtLWRhbmdlcjpmb2N1cyxcbmJ1dHRvbi5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXI6Zm9jdXMge1xuICBjb2xvcjogIzZjNmM2YztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UzYjBiNTtcbn1cblxuYS5saXN0LWdyb3VwLWl0ZW0tZGFuZ2VyLmFjdGl2ZSxcbmEubGlzdC1ncm91cC1pdGVtLWRhbmdlci5hY3RpdmU6aG92ZXIsXG5hLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlOmZvY3VzLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlOmhvdmVyLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS1kYW5nZXIuYWN0aXZlOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2YzZjNmM7XG4gIGJvcmRlci1jb2xvcjogIzZjNmM2Yztcbn1cblxuLmxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xufVxuXG4ubGlzdC1ncm91cC1pdGVtLXRleHQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBsaW5lLWhlaWdodDogMS4zO1xufVxuXG4ucGFuZWwge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLnBhbmVsLWJvZHkge1xuICBwYWRkaW5nOiAxNXB4O1xufVxuXG4ucGFuZWwtYm9keTpiZWZvcmUsXG4ucGFuZWwtYm9keTphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLnBhbmVsLWJvZHk6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuLnBhbmVsLWhlYWRpbmcge1xuICBwYWRkaW5nOiAxMHB4IDE1cHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDJweDtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMnB4O1xufVxuXG4ucGFuZWwtaGVhZGluZyA+IC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbi5wYW5lbC10aXRsZSB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgY29sb3I6IGluaGVyaXQ7XG59XG5cbi5wYW5lbC10aXRsZSA+IGEsXG4ucGFuZWwtdGl0bGUgPiBzbWFsbCxcbi5wYW5lbC10aXRsZSA+IC5zbWFsbCxcbi5wYW5lbC10aXRsZSA+IHNtYWxsID4gYSxcbi5wYW5lbC10aXRsZSA+IC5zbWFsbCA+IGEge1xuICBjb2xvcjogaW5oZXJpdDtcbn1cblxuLnBhbmVsLWZvb3RlciB7XG4gIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDJweDtcbn1cblxuLnBhbmVsID4gLmxpc3QtZ3JvdXAsXG4ucGFuZWwgPiAucGFuZWwtY29sbGFwc2UgPiAubGlzdC1ncm91cCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5wYW5lbCA+IC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0sXG4ucGFuZWwgPiAucGFuZWwtY29sbGFwc2UgPiAubGlzdC1ncm91cCAubGlzdC1ncm91cC1pdGVtIHtcbiAgYm9yZGVyLXdpZHRoOiAxcHggMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLnBhbmVsID4gLmxpc3QtZ3JvdXA6Zmlyc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwOmZpcnN0LWNoaWxkIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wOiAwO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMnB4O1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAycHg7XG59XG5cbi5wYW5lbCA+IC5saXN0LWdyb3VwOmxhc3QtY2hpbGQgLmxpc3QtZ3JvdXAtaXRlbTpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnBhbmVsLWNvbGxhcHNlID4gLmxpc3QtZ3JvdXA6bGFzdC1jaGlsZCAubGlzdC1ncm91cC1pdGVtOmxhc3QtY2hpbGQge1xuICBib3JkZXItYm90dG9tOiAwO1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMnB4O1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAycHg7XG59XG5cbi5wYW5lbCA+IC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLmxpc3QtZ3JvdXAgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xufVxuXG4ucGFuZWwtaGVhZGluZyArIC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLXdpZHRoOiAwO1xufVxuXG4ubGlzdC1ncm91cCArIC5wYW5lbC1mb290ZXIge1xuICBib3JkZXItdG9wLXdpZHRoOiAwO1xufVxuXG4ucGFuZWwgPiAudGFibGUsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZSxcbi5wYW5lbCA+IC5wYW5lbC1jb2xsYXBzZSA+IC50YWJsZSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5wYW5lbCA+IC50YWJsZSBjYXB0aW9uLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUgY2FwdGlvbixcbi5wYW5lbCA+IC5wYW5lbC1jb2xsYXBzZSA+IC50YWJsZSBjYXB0aW9uIHtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xufVxuXG4ucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAycHg7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDJweDtcbn1cblxuLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAycHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAycHg7XG59XG5cbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAycHg7XG59XG5cbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRoZWFkOmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6Zmlyc3QtY2hpbGQgPiAudGFibGU6Zmlyc3QtY2hpbGQgPiB0aGVhZDpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmZpcnN0LWNoaWxkID4gLnRhYmxlOmZpcnN0LWNoaWxkID4gdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDJweDtcbn1cblxuLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMnB4O1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAycHg7XG59XG5cbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDJweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDJweDtcbn1cblxuLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMnB4O1xufVxuXG4ucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Ym9keTpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmU6bGFzdC1jaGlsZCA+IC50YWJsZTpsYXN0LWNoaWxkID4gdGJvZHk6bGFzdC1jaGlsZCA+IHRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlOmxhc3QtY2hpbGQgPiAudGFibGU6bGFzdC1jaGlsZCA+IHRmb290Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQgPiB0Zm9vdDpsYXN0LWNoaWxkID4gdHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDJweDtcbn1cblxuLnBhbmVsID4gLnBhbmVsLWJvZHkgKyAudGFibGUsXG4ucGFuZWwgPiAucGFuZWwtYm9keSArIC50YWJsZS1yZXNwb25zaXZlLFxuLnBhbmVsID4gLnRhYmxlICsgLnBhbmVsLWJvZHksXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSArIC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG59XG5cbi5wYW5lbCA+IC50YWJsZSA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGgsXG4ucGFuZWwgPiAudGFibGUgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRkIHtcbiAgYm9yZGVyLXRvcDogMDtcbn1cblxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQge1xuICBib3JkZXI6IDA7XG59XG5cbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQ6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0aDpmaXJzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGg6Zmlyc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0ZDpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci1sZWZ0OiAwO1xufVxuXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyID4gdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHIgPiB0aDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyID4gdGQ6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHIgPiB0ZDpsYXN0LWNoaWxkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Zm9vdCA+IHRyID4gdGg6bGFzdC1jaGlsZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0ciA+IHRkOmxhc3QtY2hpbGQge1xuICBib3JkZXItcmlnaHQ6IDA7XG59XG5cbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRoZWFkID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6Zmlyc3QtY2hpbGQgPiB0aCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGhlYWQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0aGVhZCA+IHRyOmZpcnN0LWNoaWxkID4gdGgsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpmaXJzdC1jaGlsZCA+IHRoIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cblxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGJvZHkgPiB0cjpsYXN0LWNoaWxkID4gdGQsXG4ucGFuZWwgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmxhc3QtY2hpbGQgPiB0aCxcbi5wYW5lbCA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHI6bGFzdC1jaGlsZCA+IHRkLFxuLnBhbmVsID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0cjpsYXN0LWNoaWxkID4gdGgsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRib2R5ID4gdHI6bGFzdC1jaGlsZCA+IHRkLFxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQgPiB0Ym9keSA+IHRyOmxhc3QtY2hpbGQgPiB0aCxcbi5wYW5lbCA+IC50YWJsZS1yZXNwb25zaXZlID4gLnRhYmxlLWJvcmRlcmVkID4gdGZvb3QgPiB0cjpsYXN0LWNoaWxkID4gdGQsXG4ucGFuZWwgPiAudGFibGUtcmVzcG9uc2l2ZSA+IC50YWJsZS1ib3JkZXJlZCA+IHRmb290ID4gdHI6bGFzdC1jaGlsZCA+IHRoIHtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cblxuLnBhbmVsID4gLnRhYmxlLXJlc3BvbnNpdmUge1xuICBib3JkZXI6IDA7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5wYW5lbC1ncm91cCB7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi5wYW5lbC1ncm91cCAucGFuZWwge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi5wYW5lbC1ncm91cCAucGFuZWwgKyAucGFuZWwge1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG5cbi5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZyB7XG4gIGJvcmRlci1ib3R0b206IDA7XG59XG5cbi5wYW5lbC1ncm91cCAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5LFxuLnBhbmVsLWdyb3VwIC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLmxpc3QtZ3JvdXAge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbn1cblxuLnBhbmVsLWdyb3VwIC5wYW5lbC1mb290ZXIge1xuICBib3JkZXItdG9wOiAwO1xufVxuXG4ucGFuZWwtZ3JvdXAgLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSAucGFuZWwtYm9keSB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xufVxuXG4ucGFuZWwtZGVmYXVsdCB7XG4gIGJvcmRlci1jb2xvcjogI2RkZDtcbn1cblxuLnBhbmVsLWRlZmF1bHQgPiAucGFuZWwtaGVhZGluZyB7XG4gIGNvbG9yOiAjMjIyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBib3JkZXItY29sb3I6ICNkZGQ7XG59XG5cbi5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWhlYWRpbmcgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci10b3AtY29sb3I6ICNkZGQ7XG59XG5cbi5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWhlYWRpbmcgLmJhZGdlIHtcbiAgY29sb3I6ICNmNWY1ZjU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyMjI7XG59XG5cbi5wYW5lbC1kZWZhdWx0ID4gLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2RkZDtcbn1cblxuLnBhbmVsLXByaW1hcnkge1xuICBib3JkZXItY29sb3I6ICMzYTM5M2I7XG59XG5cbi5wYW5lbC1wcmltYXJ5ID4gLnBhbmVsLWhlYWRpbmcge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNhMzkzYjtcbiAgYm9yZGVyLWNvbG9yOiAjM2EzOTNiO1xufVxuXG4ucGFuZWwtcHJpbWFyeSA+IC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkge1xuICBib3JkZXItdG9wLWNvbG9yOiAjM2EzOTNiO1xufVxuXG4ucGFuZWwtcHJpbWFyeSA+IC5wYW5lbC1oZWFkaW5nIC5iYWRnZSB7XG4gIGNvbG9yOiAjM2EzOTNiO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4ucGFuZWwtcHJpbWFyeSA+IC5wYW5lbC1mb290ZXIgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICMzYTM5M2I7XG59XG5cbi5wYW5lbC1zdWNjZXNzIHtcbiAgYm9yZGVyLWNvbG9yOiAjOGNjNjNmO1xufVxuXG4ucGFuZWwtc3VjY2VzcyA+IC5wYW5lbC1oZWFkaW5nIHtcbiAgY29sb3I6ICM2YzZjNmM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkYWU2Y2I7XG4gIGJvcmRlci1jb2xvcjogIzhjYzYzZjtcbn1cblxuLnBhbmVsLXN1Y2Nlc3MgPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzhjYzYzZjtcbn1cblxuLnBhbmVsLXN1Y2Nlc3MgPiAucGFuZWwtaGVhZGluZyAuYmFkZ2Uge1xuICBjb2xvcjogI2RhZTZjYjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzZjNmM2Yztcbn1cblxuLnBhbmVsLXN1Y2Nlc3MgPiAucGFuZWwtZm9vdGVyICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkge1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjOGNjNjNmO1xufVxuXG4ucGFuZWwtaW5mbyB7XG4gIGJvcmRlci1jb2xvcjogIzAwOGFiZjtcbn1cblxuLnBhbmVsLWluZm8gPiAucGFuZWwtaGVhZGluZyB7XG4gIGNvbG9yOiAjNmM2YzZjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDllZGY3O1xuICBib3JkZXItY29sb3I6ICMwMDhhYmY7XG59XG5cbi5wYW5lbC1pbmZvID4gLnBhbmVsLWhlYWRpbmcgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci10b3AtY29sb3I6ICMwMDhhYmY7XG59XG5cbi5wYW5lbC1pbmZvID4gLnBhbmVsLWhlYWRpbmcgLmJhZGdlIHtcbiAgY29sb3I6ICNkOWVkZjc7XG4gIGJhY2tncm91bmQtY29sb3I6ICM2YzZjNmM7XG59XG5cbi5wYW5lbC1pbmZvID4gLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwOGFiZjtcbn1cblxuLnBhbmVsLXdhcm5pbmcge1xuICBib3JkZXItY29sb3I6ICNmZGI4MTM7XG59XG5cbi5wYW5lbC13YXJuaW5nID4gLnBhbmVsLWhlYWRpbmcge1xuICBjb2xvcjogIzZjNmM2YztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YxZTNjMjtcbiAgYm9yZGVyLWNvbG9yOiAjZmRiODEzO1xufVxuXG4ucGFuZWwtd2FybmluZyA+IC5wYW5lbC1oZWFkaW5nICsgLnBhbmVsLWNvbGxhcHNlID4gLnBhbmVsLWJvZHkge1xuICBib3JkZXItdG9wLWNvbG9yOiAjZmRiODEzO1xufVxuXG4ucGFuZWwtd2FybmluZyA+IC5wYW5lbC1oZWFkaW5nIC5iYWRnZSB7XG4gIGNvbG9yOiAjZjFlM2MyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM2YzZjO1xufVxuXG4ucGFuZWwtd2FybmluZyA+IC5wYW5lbC1mb290ZXIgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZGI4MTM7XG59XG5cbi5wYW5lbC1kYW5nZXIge1xuICBib3JkZXItY29sb3I6ICNkOTE4MmQ7XG59XG5cbi5wYW5lbC1kYW5nZXIgPiAucGFuZWwtaGVhZGluZyB7XG4gIGNvbG9yOiAjNmM2YzZjO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWFjM2M3O1xuICBib3JkZXItY29sb3I6ICNkOTE4MmQ7XG59XG5cbi5wYW5lbC1kYW5nZXIgPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2Q5MTgyZDtcbn1cblxuLnBhbmVsLWRhbmdlciA+IC5wYW5lbC1oZWFkaW5nIC5iYWRnZSB7XG4gIGNvbG9yOiAjZWFjM2M3O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNmM2YzZjO1xufVxuXG4ucGFuZWwtZGFuZ2VyID4gLnBhbmVsLWZvb3RlciArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2Q5MTgyZDtcbn1cblxuLmVtYmVkLXJlc3BvbnNpdmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5lbWJlZC1yZXNwb25zaXZlIC5lbWJlZC1yZXNwb25zaXZlLWl0ZW0sXG4uZW1iZWQtcmVzcG9uc2l2ZSBpZnJhbWUsXG4uZW1iZWQtcmVzcG9uc2l2ZSBlbWJlZCxcbi5lbWJlZC1yZXNwb25zaXZlIG9iamVjdCxcbi5lbWJlZC1yZXNwb25zaXZlIHZpZGVvIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyOiAwO1xufVxuXG4uZW1iZWQtcmVzcG9uc2l2ZS0xNmJ5OSB7XG4gIHBhZGRpbmctYm90dG9tOiA1Ni4yNSU7XG59XG5cbi5lbWJlZC1yZXNwb25zaXZlLTRieTMge1xuICBwYWRkaW5nLWJvdHRvbTogNzUlO1xufVxuXG4ud2VsbCB7XG4gIG1pbi1oZWlnaHQ6IDIwcHg7XG4gIHBhZGRpbmc6IDE5cHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlM2UzZTM7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG5cbi53ZWxsIGJsb2NrcXVvdGUge1xuICBib3JkZXItY29sb3I6ICNkZGQ7XG4gIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cblxuLndlbGwtbGcge1xuICBwYWRkaW5nOiAyNHB4O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi53ZWxsLXNtIHtcbiAgcGFkZGluZzogOXB4O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi5jbG9zZSB7XG4gIGZsb2F0OiByaWdodDtcbiAgZm9udC1zaXplOiAyMXB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGNvbG9yOiAjMDAwO1xuICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjZmZmO1xuICBvcGFjaXR5OiAwLjI7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT0yMCk7XG59XG5cbi5jbG9zZTpob3Zlcixcbi5jbG9zZTpmb2N1cyB7XG4gIGNvbG9yOiAjMDAwO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgb3BhY2l0eTogMC41O1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApO1xufVxuXG5idXR0b24uY2xvc2Uge1xuICBwYWRkaW5nOiAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IDA7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuLm1vZGFsLW9wZW4ge1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4ubW9kYWwge1xuICBkaXNwbGF5OiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTA1MDtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICBvdXRsaW5lOiAwO1xufVxuXG4ubW9kYWwuZmFkZSAubW9kYWwtZGlhbG9nIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjUlKTtcbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjUlKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcyBlYXNlLW91dDtcbiAgLW1vei10cmFuc2l0aW9uOiAtbW96LXRyYW5zZm9ybSAwLjNzIGVhc2Utb3V0O1xuICAtby10cmFuc2l0aW9uOiAtby10cmFuc2Zvcm0gMC4zcyBlYXNlLW91dDtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XG59XG5cbi5tb2RhbC5pbiAubW9kYWwtZGlhbG9nIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG59XG5cbi5tb2RhbC1vcGVuIC5tb2RhbCB7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cblxuLm1vZGFsLWRpYWxvZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IGF1dG87XG4gIG1hcmdpbjogMTBweDtcbn1cblxuLm1vZGFsLWNvbnRlbnQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTcwLCAxNzAsIDE3MCwgMC4zKTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgM3B4IDlweCByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gIGJveC1zaGFkb3c6IDAgM3B4IDlweCByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIG91dGxpbmU6IDA7XG59XG5cbi5tb2RhbC1iYWNrZHJvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxMDQwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4ubW9kYWwtYmFja2Ryb3AuZmFkZSB7XG4gIG9wYWNpdHk6IDA7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT0wKTtcbn1cblxuLm1vZGFsLWJhY2tkcm9wLmluIHtcbiAgb3BhY2l0eTogMC41O1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApO1xufVxuXG4ubW9kYWwtaGVhZGVyIHtcbiAgcGFkZGluZzogMjdweCAxNHB4IDE0cHggMzBweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBtaW4taGVpZ2h0OiAyN3B4IDE0cHggMTRweCAzMHB4MjNweDtcbn1cblxuLm1vZGFsLWhlYWRlciAuY2xvc2Uge1xuICBtYXJnaW4tdG9wOiAtMnB4O1xufVxuXG4ubW9kYWwtdGl0bGUge1xuICBtYXJnaW46IDA7XG4gIGxpbmUtaGVpZ2h0OiAyM3B4O1xufVxuXG4ubW9kYWwtYm9keSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogMjBweCAzMHB4O1xufVxuXG4ubW9kYWwtZm9vdGVyIHtcbiAgcGFkZGluZzogMjBweCAzMHB4O1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xufVxuXG4ubW9kYWwtZm9vdGVyOmJlZm9yZSxcbi5tb2RhbC1mb290ZXI6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgZGlzcGxheTogdGFibGU7XG59XG5cbi5tb2RhbC1mb290ZXI6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuLm1vZGFsLWZvb3RlciAuYnRuICsgLmJ0biB7XG4gIG1hcmdpbi1sZWZ0OiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5tb2RhbC1mb290ZXIgLmJ0bi1ncm91cCAuYnRuICsgLmJ0biB7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuXG4ubW9kYWwtZm9vdGVyIC5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG5cbi5tb2RhbC1zY3JvbGxiYXItbWVhc3VyZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtOTk5OXB4O1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBvdmVyZmxvdzogc2Nyb2xsO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLm1vZGFsLWRpYWxvZyB7XG4gICAgd2lkdGg6IDgyNHB4O1xuICAgIG1hcmdpbjogMzBweCBhdXRvO1xuICB9XG4gIC5tb2RhbC1jb250ZW50IHtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjUpO1xuICAgIGJveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjUpO1xuICB9XG4gIC5tb2RhbC1zbSB7XG4gICAgd2lkdGg6IDUyNHB4O1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLm1vZGFsLWxnIHtcbiAgICB3aWR0aDogMTEyNHB4O1xuICB9XG59XG5cbi50b29sdGlwIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxMDcwO1xuICBkaXNwbGF5OiBibG9jaztcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhTmV1ZU1lZGl1bVwiLCBcIkhlbHZldGljYU5ldWUtTWVkaXVtXCIsIFwiSGVsdmV0aWNhIE5ldWUgTWVkaXVtXCIsIFwiSGVsdmV0aWNhTmV1ZVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIFwiTHVjaWRhIEdyYW5kZVwiLCBzYW5zLXNlcmlmO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XG4gIGxpbmUtYnJlYWs6IGF1dG87XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgdGV4dC1hbGlnbjogc3RhcnQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICB3b3JkLWJyZWFrOiBub3JtYWw7XG4gIHdvcmQtc3BhY2luZzogbm9ybWFsO1xuICB3b3JkLXdyYXA6IG5vcm1hbDtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBvcGFjaXR5OiAwO1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MCk7XG59XG5cbi50b29sdGlwLmluIHtcbiAgb3BhY2l0eTogMC45O1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9OTApO1xufVxuXG4udG9vbHRpcC50b3Age1xuICBtYXJnaW4tdG9wOiAtM3B4O1xuICBwYWRkaW5nOiA1cHggMDtcbn1cblxuLnRvb2x0aXAucmlnaHQge1xuICBtYXJnaW4tbGVmdDogM3B4O1xuICBwYWRkaW5nOiAwIDVweDtcbn1cblxuLnRvb2x0aXAuYm90dG9tIHtcbiAgbWFyZ2luLXRvcDogM3B4O1xuICBwYWRkaW5nOiA1cHggMDtcbn1cblxuLnRvb2x0aXAubGVmdCB7XG4gIG1hcmdpbi1sZWZ0OiAtM3B4O1xuICBwYWRkaW5nOiAwIDVweDtcbn1cblxuLnRvb2x0aXAtaW5uZXIge1xuICBtYXgtd2lkdGg6IDIwMHB4O1xuICBwYWRkaW5nOiAzcHggOHB4O1xuICBjb2xvcjogI2ZmZjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi50b29sdGlwLWFycm93IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xufVxuXG4udG9vbHRpcC50b3AgLnRvb2x0aXAtYXJyb3cge1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gIGJvcmRlci13aWR0aDogNXB4IDVweCAwO1xuICBib3JkZXItdG9wLWNvbG9yOiAjMDAwO1xufVxuXG4udG9vbHRpcC50b3AtbGVmdCAudG9vbHRpcC1hcnJvdyB7XG4gIGJvdHRvbTogMDtcbiAgcmlnaHQ6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDA7XG4gIGJvcmRlci10b3AtY29sb3I6ICMwMDA7XG59XG5cbi50b29sdGlwLnRvcC1yaWdodCAudG9vbHRpcC1hcnJvdyB7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogNXB4O1xuICBtYXJnaW4tYm90dG9tOiAtNXB4O1xuICBib3JkZXItd2lkdGg6IDVweCA1cHggMDtcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzAwMDtcbn1cblxuLnRvb2x0aXAucmlnaHQgLnRvb2x0aXAtYXJyb3cge1xuICB0b3A6IDUwJTtcbiAgbGVmdDogMDtcbiAgbWFyZ2luLXRvcDogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiA1cHggNXB4IDVweCAwO1xuICBib3JkZXItcmlnaHQtY29sb3I6ICMwMDA7XG59XG5cbi50b29sdGlwLmxlZnQgLnRvb2x0aXAtYXJyb3cge1xuICB0b3A6IDUwJTtcbiAgcmlnaHQ6IDA7XG4gIG1hcmdpbi10b3A6IC01cHg7XG4gIGJvcmRlci13aWR0aDogNXB4IDAgNXB4IDVweDtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMDA7XG59XG5cbi50b29sdGlwLmJvdHRvbSAudG9vbHRpcC1hcnJvdyB7XG4gIHRvcDogMDtcbiAgbGVmdDogNTAlO1xuICBtYXJnaW4tbGVmdDogLTVweDtcbiAgYm9yZGVyLXdpZHRoOiAwIDVweCA1cHg7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICMwMDA7XG59XG5cbi50b29sdGlwLmJvdHRvbS1sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgdG9wOiAwO1xuICByaWdodDogNXB4O1xuICBtYXJnaW4tdG9wOiAtNXB4O1xuICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDtcbn1cblxuLnRvb2x0aXAuYm90dG9tLXJpZ2h0IC50b29sdGlwLWFycm93IHtcbiAgdG9wOiAwO1xuICBsZWZ0OiA1cHg7XG4gIG1hcmdpbi10b3A6IC01cHg7XG4gIGJvcmRlci13aWR0aDogMCA1cHggNXB4O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjMDAwO1xufVxuXG4ucG9wb3ZlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxMDYwO1xuICBkaXNwbGF5OiBub25lO1xuICBtYXgtd2lkdGg6IDI3NnB4O1xuICBwYWRkaW5nOiAxcHg7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYU5ldWVNZWRpdW1cIiwgXCJIZWx2ZXRpY2FOZXVlLU1lZGl1bVwiLCBcIkhlbHZldGljYSBOZXVlIE1lZGl1bVwiLCBcIkhlbHZldGljYU5ldWVcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBcIkx1Y2lkYSBHcmFuZGVcIiwgc2Fucy1zZXJpZjtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICBsaW5lLWJyZWFrOiBhdXRvO1xuICBsaW5lLWhlaWdodDogMS40Mjg1NzE0Mjk7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHRleHQtYWxpZ246IHN0YXJ0O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIHRleHQtc2hhZG93OiBub25lO1xuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgd29yZC1icmVhazogbm9ybWFsO1xuICB3b3JkLXNwYWNpbmc6IG5vcm1hbDtcbiAgd29yZC13cmFwOiBub3JtYWw7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjIpO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIGJveC1zaGFkb3c6IDAgNXB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuXG4ucG9wb3Zlci50b3Age1xuICBtYXJnaW4tdG9wOiAtMTBweDtcbn1cblxuLnBvcG92ZXIucmlnaHQge1xuICBtYXJnaW4tbGVmdDogMTBweDtcbn1cblxuLnBvcG92ZXIuYm90dG9tIHtcbiAgbWFyZ2luLXRvcDogMTBweDtcbn1cblxuLnBvcG92ZXIubGVmdCB7XG4gIG1hcmdpbi1sZWZ0OiAtMTBweDtcbn1cblxuLnBvcG92ZXItdGl0bGUge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDhweCAxNHB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWJlYmViO1xuICBib3JkZXItcmFkaXVzOiAycHggMnB4IDAgMDtcbn1cblxuLnBvcG92ZXItY29udGVudCB7XG4gIHBhZGRpbmc6IDlweCAxNHB4O1xufVxuXG4ucG9wb3ZlciA+IC5hcnJvdyxcbi5wb3BvdmVyID4gLmFycm93OmFmdGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbn1cblxuLnBvcG92ZXIgPiAuYXJyb3cge1xuICBib3JkZXItd2lkdGg6IDExcHg7XG59XG5cbi5wb3BvdmVyID4gLmFycm93OmFmdGVyIHtcbiAgYm9yZGVyLXdpZHRoOiAxMHB4O1xuICBjb250ZW50OiBcIlwiO1xufVxuXG4ucG9wb3Zlci50b3AgPiAuYXJyb3cge1xuICBsZWZ0OiA1MCU7XG4gIG1hcmdpbi1sZWZ0OiAtMTFweDtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzk5OTk5OTtcbiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgYm90dG9tOiAtMTFweDtcbn1cblxuLnBvcG92ZXIudG9wID4gLmFycm93OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGJvdHRvbTogMXB4O1xuICBtYXJnaW4tbGVmdDogLTEwcHg7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG4gIGJvcmRlci10b3AtY29sb3I6ICNmZmY7XG59XG5cbi5wb3BvdmVyLnJpZ2h0ID4gLmFycm93IHtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IC0xMXB4O1xuICBtYXJnaW4tdG9wOiAtMTFweDtcbiAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogIzk5OTk5OTtcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xufVxuXG4ucG9wb3Zlci5yaWdodCA+IC5hcnJvdzphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBsZWZ0OiAxcHg7XG4gIGJvdHRvbTogLTEwcHg7XG4gIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICBib3JkZXItcmlnaHQtY29sb3I6ICNmZmY7XG59XG5cbi5wb3BvdmVyLmJvdHRvbSA+IC5hcnJvdyB7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC0xMXB4O1xuICBib3JkZXItdG9wLXdpZHRoOiAwO1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjOTk5OTk5O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICB0b3A6IC0xMXB4O1xufVxuXG4ucG9wb3Zlci5ib3R0b20gPiAuYXJyb3c6YWZ0ZXIge1xuICBjb250ZW50OiBcIiBcIjtcbiAgdG9wOiAxcHg7XG4gIG1hcmdpbi1sZWZ0OiAtMTBweDtcbiAgYm9yZGVyLXRvcC13aWR0aDogMDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjtcbn1cblxuLnBvcG92ZXIubGVmdCA+IC5hcnJvdyB7XG4gIHRvcDogNTAlO1xuICByaWdodDogLTExcHg7XG4gIG1hcmdpbi10b3A6IC0xMXB4O1xuICBib3JkZXItcmlnaHQtd2lkdGg6IDA7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjOTk5OTk5O1xuICBib3JkZXItbGVmdC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbn1cblxuLnBvcG92ZXIubGVmdCA+IC5hcnJvdzphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICByaWdodDogMXB4O1xuICBib3JkZXItcmlnaHQtd2lkdGg6IDA7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZmZmO1xuICBib3R0b206IC0xMHB4O1xufVxuXG4uY2Fyb3VzZWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5jYXJvdXNlbC1pbm5lciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5jYXJvdXNlbC1pbm5lciA+IC5pdGVtIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAtd2Via2l0LXRyYW5zaXRpb246IDAuNnMgZWFzZS1pbi1vdXQgbGVmdDtcbiAgLW8tdHJhbnNpdGlvbjogMC42cyBlYXNlLWluLW91dCBsZWZ0O1xuICB0cmFuc2l0aW9uOiAwLjZzIGVhc2UtaW4tb3V0IGxlZnQ7XG59XG5cbi5jYXJvdXNlbC1pbm5lciA+IC5pdGVtID4gaW1nLFxuLmNhcm91c2VsLWlubmVyID4gLml0ZW0gPiBhID4gaW1nIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBhdXRvO1xuICBsaW5lLWhlaWdodDogMTtcbn1cblxuQG1lZGlhIGFsbCBhbmQgKHRyYW5zZm9ybS0zZCksICgtd2Via2l0LXRyYW5zZm9ybS0zZCkge1xuICAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbSB7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjZzIGVhc2UtaW4tb3V0O1xuICAgIC1tb3otdHJhbnNpdGlvbjogLW1vei10cmFuc2Zvcm0gMC42cyBlYXNlLWluLW91dDtcbiAgICAtby10cmFuc2l0aW9uOiAtby10cmFuc2Zvcm0gMC42cyBlYXNlLWluLW91dDtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC42cyBlYXNlLWluLW91dDtcbiAgICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAtbW96LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgLXdlYmtpdC1wZXJzcGVjdGl2ZTogMTAwMHB4O1xuICAgIC1tb3otcGVyc3BlY3RpdmU6IDEwMDBweDtcbiAgICBwZXJzcGVjdGl2ZTogMTAwMHB4O1xuICB9XG4gIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLm5leHQsXG4gIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLmFjdGl2ZS5yaWdodCB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMTAwJSwgMCwgMCk7XG4gICAgbGVmdDogMDtcbiAgfVxuICAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbS5wcmV2LFxuICAuY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbS5hY3RpdmUubGVmdCB7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKTtcbiAgICBsZWZ0OiAwO1xuICB9XG4gIC5jYXJvdXNlbC1pbm5lciA+IC5pdGVtLm5leHQubGVmdCxcbiAgLmNhcm91c2VsLWlubmVyID4gLml0ZW0ucHJldi5yaWdodCxcbiAgLmNhcm91c2VsLWlubmVyID4gLml0ZW0uYWN0aXZlIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgICBsZWZ0OiAwO1xuICB9XG59XG5cbi5jYXJvdXNlbC1pbm5lciA+IC5hY3RpdmUsXG4uY2Fyb3VzZWwtaW5uZXIgPiAubmV4dCxcbi5jYXJvdXNlbC1pbm5lciA+IC5wcmV2IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5jYXJvdXNlbC1pbm5lciA+IC5hY3RpdmUge1xuICBsZWZ0OiAwO1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIgPiAubmV4dCxcbi5jYXJvdXNlbC1pbm5lciA+IC5wcmV2IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIgPiAubmV4dCB7XG4gIGxlZnQ6IDEwMCU7XG59XG5cbi5jYXJvdXNlbC1pbm5lciA+IC5wcmV2IHtcbiAgbGVmdDogLTEwMCU7XG59XG5cbi5jYXJvdXNlbC1pbm5lciA+IC5uZXh0LmxlZnQsXG4uY2Fyb3VzZWwtaW5uZXIgPiAucHJldi5yaWdodCB7XG4gIGxlZnQ6IDA7XG59XG5cbi5jYXJvdXNlbC1pbm5lciA+IC5hY3RpdmUubGVmdCB7XG4gIGxlZnQ6IC0xMDAlO1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIgPiAuYWN0aXZlLnJpZ2h0IHtcbiAgbGVmdDogMTAwJTtcbn1cblxuLmNhcm91c2VsLWNvbnRyb2wge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMTUlO1xuICBvcGFjaXR5OiAwLjU7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT01MCk7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuNik7XG59XG5cbi5jYXJvdXNlbC1jb250cm9sLmxlZnQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChsZWZ0LCByZ2JhKDAsIDAsIDAsIDAuNSkgMCUsIHJnYmEoMCwgMCwgMCwgMC4wMDAxKSAxMDAlKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMCwgMCwgMCwgMC41KSAwJSwgcmdiYSgwLCAwLCAwLCAwLjAwMDEpIDEwMCUpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC41KSAwJSwgcmdiYSgwLCAwLCAwLCAwLjAwMDEpIDEwMCUpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyM4MDAwMDAwMCcsIGVuZENvbG9yc3RyPScjMDAwMDAwMDAnLCBHcmFkaWVudFR5cGU9MSk7XG59XG5cbi5jYXJvdXNlbC1jb250cm9sLnJpZ2h0IHtcbiAgbGVmdDogYXV0bztcbiAgcmlnaHQ6IDA7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGxlZnQsIHJnYmEoMCwgMCwgMCwgMC4wMDAxKSAwJSwgcmdiYSgwLCAwLCAwLCAwLjUpIDEwMCUpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQobGVmdCwgcmdiYSgwLCAwLCAwLCAwLjAwMDEpIDAlLCByZ2JhKDAsIDAsIDAsIDAuNSkgMTAwJSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjAwMDEpIDAlLCByZ2JhKDAsIDAsIDAsIDAuNSkgMTAwJSk7XG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nIzAwMDAwMDAwJywgZW5kQ29sb3JzdHI9JyM4MDAwMDAwMCcsIEdyYWRpZW50VHlwZT0xKTtcbn1cblxuLmNhcm91c2VsLWNvbnRyb2w6aG92ZXIsXG4uY2Fyb3VzZWwtY29udHJvbDpmb2N1cyB7XG4gIG91dGxpbmU6IDA7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIG9wYWNpdHk6IDAuOTtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTkwKTtcbn1cblxuLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldixcbi5jYXJvdXNlbC1jb250cm9sIC5pY29uLW5leHQsXG4uY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCxcbi5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiA1MCU7XG4gIG1hcmdpbi10b3A6IC0xMHB4O1xuICB6LWluZGV4OiA1O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi5jYXJvdXNlbC1jb250cm9sIC5pY29uLXByZXYsXG4uY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCB7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xufVxuXG4uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0LFxuLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0IHtcbiAgcmlnaHQ6IDUwJTtcbiAgbWFyZ2luLXJpZ2h0OiAtMTBweDtcbn1cblxuLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldixcbi5jYXJvdXNlbC1jb250cm9sIC5pY29uLW5leHQge1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICBsaW5lLWhlaWdodDogMTtcbiAgZm9udC1mYW1pbHk6IHNlcmlmO1xufVxuXG4uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1wcmV2OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXDIwMzknO1xufVxuXG4uY2Fyb3VzZWwtY29udHJvbCAuaWNvbi1uZXh0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXDIwM2EnO1xufVxuXG4uY2Fyb3VzZWwtaW5kaWNhdG9ycyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAxMHB4O1xuICBsZWZ0OiA1MCU7XG4gIHotaW5kZXg6IDE1O1xuICB3aWR0aDogNjAlO1xuICBtYXJnaW4tbGVmdDogLTMwJTtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5jYXJvdXNlbC1pbmRpY2F0b3JzIGxpIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMTBweDtcbiAgaGVpZ2h0OiAxMHB4O1xuICBtYXJnaW46IDFweDtcbiAgdGV4dC1pbmRlbnQ6IC05OTlweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2ZmZjtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwIFxcOTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi5jYXJvdXNlbC1pbmRpY2F0b3JzIC5hY3RpdmUge1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMnB4O1xuICBoZWlnaHQ6IDEycHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cbi5jYXJvdXNlbC1jYXB0aW9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAxNSU7XG4gIHJpZ2h0OiAxNSU7XG4gIGJvdHRvbTogMjBweDtcbiAgei1pbmRleDogMTA7XG4gIHBhZGRpbmctdG9wOiAyMHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuNik7XG59XG5cbi5jYXJvdXNlbC1jYXB0aW9uIC5idG4ge1xuICB0ZXh0LXNoYWRvdzogbm9uZTtcbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQsXG4gIC5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCxcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldixcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCB7XG4gICAgd2lkdGg6IDMwcHg7XG4gICAgaGVpZ2h0OiAzMHB4O1xuICAgIG1hcmdpbi10b3A6IC0xNXB4O1xuICAgIGZvbnQtc2l6ZTogMzBweDtcbiAgfVxuICAuY2Fyb3VzZWwtY29udHJvbCAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCxcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tcHJldiB7XG4gICAgbWFyZ2luLWxlZnQ6IC0xNXB4O1xuICB9XG4gIC5jYXJvdXNlbC1jb250cm9sIC5nbHlwaGljb24tY2hldnJvbi1yaWdodCxcbiAgLmNhcm91c2VsLWNvbnRyb2wgLmljb24tbmV4dCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcbiAgfVxuICAuY2Fyb3VzZWwtY2FwdGlvbiB7XG4gICAgbGVmdDogMjAlO1xuICAgIHJpZ2h0OiAyMCU7XG4gICAgcGFkZGluZy1ib3R0b206IDMwcHg7XG4gIH1cbiAgLmNhcm91c2VsLWluZGljYXRvcnMge1xuICAgIGJvdHRvbTogMjBweDtcbiAgfVxufVxuXG4uY2xlYXJmaXg6YmVmb3JlLFxuLmNsZWFyZml4OmFmdGVyIHtcbiAgY29udGVudDogXCIgXCI7XG4gIGRpc3BsYXk6IHRhYmxlO1xufVxuXG4uY2xlYXJmaXg6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuLmNlbnRlci1ibG9jayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xufVxuXG4ucHVsbC1yaWdodCB7XG4gIGZsb2F0OiByaWdodCAhaW1wb3J0YW50O1xufVxuXG4ucHVsbC1sZWZ0IHtcbiAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcbn1cblxuLmhpZGUge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi5zaG93IHtcbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbn1cblxuLmludmlzaWJsZSB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cblxuLnRleHQtaGlkZSB7XG4gIGZvbnQ6IDAvMCBhO1xuICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gIHRleHQtc2hhZG93OiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiAwO1xufVxuXG4uaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4uYWZmaXgge1xuICBwb3NpdGlvbjogZml4ZWQ7XG59XG5cbkAtbXMtdmlld3BvcnQge1xuICB3aWR0aDogZGV2aWNlLXdpZHRoO1xufVxuXG4udmlzaWJsZS14cyB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLnZpc2libGUtc20ge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi52aXNpYmxlLW1kIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4udmlzaWJsZS1sZyB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLnZpc2libGUteHMtYmxvY2ssXG4udmlzaWJsZS14cy1pbmxpbmUsXG4udmlzaWJsZS14cy1pbmxpbmUtYmxvY2ssXG4udmlzaWJsZS1zbS1ibG9jayxcbi52aXNpYmxlLXNtLWlubGluZSxcbi52aXNpYmxlLXNtLWlubGluZS1ibG9jayxcbi52aXNpYmxlLW1kLWJsb2NrLFxuLnZpc2libGUtbWQtaW5saW5lLFxuLnZpc2libGUtbWQtaW5saW5lLWJsb2NrLFxuLnZpc2libGUtbGctYmxvY2ssXG4udmlzaWJsZS1sZy1pbmxpbmUsXG4udmlzaWJsZS1sZy1pbmxpbmUtYmxvY2sge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAudmlzaWJsZS14cyB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxuICB0YWJsZS52aXNpYmxlLXhzIHtcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xuICB9XG4gIHRyLnZpc2libGUteHMge1xuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xuICB9XG4gIHRoLnZpc2libGUteHMsXG4gIHRkLnZpc2libGUteHMge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkxcHgpIHtcbiAgLnZpc2libGUteHMtYmxvY2sge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC52aXNpYmxlLXhzLWlubGluZSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XG4gIC52aXNpYmxlLXhzLWlubGluZS1ibG9jayB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTE5OXB4KSB7XG4gIC52aXNpYmxlLXNtIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG4gIHRhYmxlLnZpc2libGUtc20ge1xuICAgIGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7XG4gIH1cbiAgdHIudmlzaWJsZS1zbSB7XG4gICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7XG4gIH1cbiAgdGgudmlzaWJsZS1zbSxcbiAgdGQudmlzaWJsZS1zbSB7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweCkge1xuICAudmlzaWJsZS1zbS1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIGFuZCAobWF4LXdpZHRoOiAxMTk5cHgpIHtcbiAgLnZpc2libGUtc20taW5saW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIGFuZCAobWF4LXdpZHRoOiAxMTk5cHgpIHtcbiAgLnZpc2libGUtc20taW5saW5lLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSBhbmQgKG1heC13aWR0aDogMTY3OSkge1xuICAudmlzaWJsZS1tZCB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxuICB0YWJsZS52aXNpYmxlLW1kIHtcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xuICB9XG4gIHRyLnZpc2libGUtbWQge1xuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xuICB9XG4gIHRoLnZpc2libGUtbWQsXG4gIHRkLnZpc2libGUtbWQge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSBhbmQgKG1heC13aWR0aDogMTY3OSkge1xuICAudmlzaWJsZS1tZC1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSBhbmQgKG1heC13aWR0aDogMTY3OSkge1xuICAudmlzaWJsZS1tZC1pbmxpbmUge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIGFuZCAobWF4LXdpZHRoOiAxNjc5KSB7XG4gIC52aXNpYmxlLW1kLWlubGluZS1ibG9jayB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDE2ODApIHtcbiAgLnZpc2libGUtbGcge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbiAgdGFibGUudmlzaWJsZS1sZyB7XG4gICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDtcbiAgfVxuICB0ci52aXNpYmxlLWxnIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDtcbiAgfVxuICB0aC52aXNpYmxlLWxnLFxuICB0ZC52aXNpYmxlLWxnIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDE2ODApIHtcbiAgLnZpc2libGUtbGctYmxvY2sge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDE2ODApIHtcbiAgLnZpc2libGUtbGctaW5saW5lIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTY4MCkge1xuICAudmlzaWJsZS1sZy1pbmxpbmUtYmxvY2sge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTFweCkge1xuICAuaGlkZGVuLXhzIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSBhbmQgKG1heC13aWR0aDogMTE5OXB4KSB7XG4gIC5oaWRkZW4tc20ge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSBhbmQgKG1heC13aWR0aDogMTY3OSkge1xuICAuaGlkZGVuLW1kIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDE2ODApIHtcbiAgLmhpZGRlbi1sZyB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICB9XG59XG5cbi52aXNpYmxlLXByaW50IHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG5AbWVkaWEgcHJpbnQge1xuICAudmlzaWJsZS1wcmludCB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxuICB0YWJsZS52aXNpYmxlLXByaW50IHtcbiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50O1xuICB9XG4gIHRyLnZpc2libGUtcHJpbnQge1xuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xuICB9XG4gIHRoLnZpc2libGUtcHJpbnQsXG4gIHRkLnZpc2libGUtcHJpbnQge1xuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcbiAgfVxufVxuXG4udmlzaWJsZS1wcmludC1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuQG1lZGlhIHByaW50IHtcbiAgLnZpc2libGUtcHJpbnQtYmxvY2sge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLnZpc2libGUtcHJpbnQtaW5saW5lIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG5AbWVkaWEgcHJpbnQge1xuICAudmlzaWJsZS1wcmludC1pbmxpbmUge1xuICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50O1xuICB9XG59XG5cbi52aXNpYmxlLXByaW50LWlubGluZS1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuQG1lZGlhIHByaW50IHtcbiAgLnZpc2libGUtcHJpbnQtaW5saW5lLWJsb2NrIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgcHJpbnQge1xuICAuaGlkZGVuLXByaW50IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLyogXG5UaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuQ29weXJpZ2h0IChjKSAyMDEzLTIwMTUgYm9vdHN0cmFwLXNlbGVjdFxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuICovXG4uYm9vdHN0cmFwLXNlbGVjdCB7XG4gIC8qd2lkdGg6IDIyMHB4XFw5OyBJRTggYW5kIGJlbG93Ki9cbiAgd2lkdGg6IDIyMHB4IFxcMDtcbiAgLypJRTkgYW5kIGJlbG93Ki9cbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QgPiAuYnRuIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogNDBweDtcbiAgcGFkZGluZy1yaWdodDogMjVweDtcbn1cblxuLmVycm9yIC5ib290c3RyYXAtc2VsZWN0IC5idG4ge1xuICBib3JkZXI6IDFweCBzb2xpZCAjYjk0YTQ4O1xufVxuXG4uY29udHJvbC1ncm91cC5lcnJvciAuYm9vdHN0cmFwLXNlbGVjdCAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgYm9yZGVyLWNvbG9yOiAjYjk0YTQ4O1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5maXQtd2lkdGgge1xuICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdDpub3QoW2NsYXNzKj1cImNvbC1cIl0pOm5vdChbY2xhc3MqPVwiZm9ybS1jb250cm9sXCJdKTpub3QoLmlucHV0LWdyb3VwLWJ0bikge1xuICB3aWR0aDogMjIwcHg7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0IC5idG46Zm9jdXMge1xuICBvdXRsaW5lOiB0aGluIGRvdHRlZCAjMzMzMzMzICFpbXBvcnRhbnQ7XG4gIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvciAhaW1wb3J0YW50O1xuICBvdXRsaW5lLW9mZnNldDogLTJweDtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuZm9ybS1jb250cm9sIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiBub25lO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5mb3JtLWNvbnRyb2w6bm90KFtjbGFzcyo9XCJjb2wtXCJdKSB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXA6bm90KC5pbnB1dC1ncm91cC1idG4pLFxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwW2NsYXNzKj1cImNvbC1cIl0ge1xuICBmbG9hdDogbm9uZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwLmRyb3Bkb3duLW1lbnUtcmlnaHQsXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXBbY2xhc3MqPVwiY29sLVwiXS5kcm9wZG93bi1tZW51LXJpZ2h0LFxuLnJvdy1mbHVpZCAuYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXBbY2xhc3MqPVwiY29sLVwiXS5kcm9wZG93bi1tZW51LXJpZ2h0IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuXG4uZm9ybS1zZWFyY2ggLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwLFxuLmZvcm0taW5saW5lIC5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cCxcbi5mb3JtLWhvcml6b250YWwgLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwLFxuLmZvcm0tZ3JvdXAgLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLmZvcm0tZ3JvdXAtbGcgLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwLmZvcm0tY29udHJvbCxcbi5mb3JtLWdyb3VwLXNtIC5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cC5mb3JtLWNvbnRyb2wge1xuICBwYWRkaW5nOiAwO1xufVxuXG4uZm9ybS1pbmxpbmUgLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5mb3JtLWNvbnRyb2wge1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmlucHV0LWFwcGVuZCAuYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAge1xuICBtYXJnaW4tbGVmdDogLTFweDtcbn1cblxuLmlucHV0LXByZXBlbmQgLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIHtcbiAgbWFyZ2luLXJpZ2h0OiAtMXB4O1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgPiAuZGlzYWJsZWQge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgPiAuZGlzYWJsZWQ6Zm9jdXMge1xuICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cCAuYnRuIC5maWx0ZXItb3B0aW9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5idG4gLmNhcmV0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiA0MHB4O1xuICBtYXJnaW4tdG9wOiAwO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2NjYztcbiAgaGVpZ2h0OiAzOHB4O1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmJ0biAuY2FyZXQ6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcZTg2MSc7XG4gIGZvbnQtZmFtaWx5OiBcImZvbnRlbGxvXCI7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgY29sb3I6ICM2NjY2NjY7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMTJweDtcbiAgdG9wOiA5cHg7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmJ0bjpob3ZlciAuY2FyZXQge1xuICBib3JkZXItY29sb3I6ICNhZGFkYWQ7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cCAuYnRuOmZvY3VzIC5jYXJldCB7XG4gIGJvcmRlci1jb2xvcjogIzhjOGM4Yztcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwW2NsYXNzKj1cImNvbC1cIl0gLmJ0biB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUge1xuICBtaW4td2lkdGg6IDEwMCU7XG4gIHotaW5kZXg6IDEwMzU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudS5pbm5lciB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7XG4gIGJvcmRlcjogMDtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3gtc2hhZG93OiBub25lO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgbGkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSBsaTpub3QoLmRpc2FibGVkKSBhOmhvdmVyIHNtYWxsLFxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IGxpOm5vdCguZGlzYWJsZWQpIGE6Zm9jdXMgc21hbGwsXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgbGkuYWN0aXZlOm5vdCguZGlzYWJsZWQpIGEgc21hbGwge1xuICBjb2xvcjogIzY0YjFkODtcbiAgY29sb3I6IGZhZGUoIzY0YjFkOCwgNDAlKTtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IGxpLmRpc2FibGVkIGEge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgbGkgYSB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IGxpIGEub3B0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nLWxlZnQ6IDIuMjVlbTtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IGxpIGEgc3Bhbi5jaGVjay1tYXJrIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IGxpIGEgc3Bhbi50ZXh0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgbGkgc21hbGwge1xuICBwYWRkaW5nLWxlZnQ6IDAuNWVtO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgLm5vdGlmeSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiA1cHg7XG4gIHdpZHRoOiA5NiU7XG4gIG1hcmdpbjogMCAyJTtcbiAgbWluLWhlaWdodDogMjZweDtcbiAgcGFkZGluZzogM3B4IDVweDtcbiAgYmFja2dyb3VuZDogd2hpdGVzbW9rZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2UzZTNlMztcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IGZhZGUoYmxhY2ssIDUlKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIG9wYWNpdHk6IDAuOTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5uby1yZXN1bHRzIHtcbiAgcGFkZGluZzogM3B4O1xuICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xuICBtYXJnaW46IDAgNXB4O1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAuZml0LXdpZHRoIC5idG4gLmZpbHRlci1vcHRpb24ge1xuICBwb3NpdGlvbjogc3RhdGljO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAuZml0LXdpZHRoIC5idG4gLmNhcmV0IHtcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgdG9wOiBhdXRvO1xuICBtYXJnaW4tdG9wOiAtMXB4O1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAuc2hvdy10aWNrIC5kcm9wZG93bi1tZW51IGxpLnNlbGVjdGVkIGEgc3Bhbi5jaGVjay1tYXJrIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHJpZ2h0OiAxNXB4O1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cC5zaG93LXRpY2sgLmRyb3Bkb3duLW1lbnUgbGkgYSBzcGFuLnRleHQge1xuICBtYXJnaW4tcmlnaHQ6IDM0cHg7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LnNob3ctbWVudS1hcnJvdy5vcGVuID4gLmJ0biB7XG4gIHotaW5kZXg6IDEwMzY7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LnNob3ctbWVudS1hcnJvdyAuZHJvcGRvd24tdG9nZ2xlOmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICcnO1xuICBib3JkZXItbGVmdDogN3B4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmlnaHQ6IDdweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogN3B4O1xuICBib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2NjY2NjYztcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogZmFkZSgjY2NjY2NjLCAyMCUpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogLTRweDtcbiAgbGVmdDogOXB4O1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5zaG93LW1lbnUtYXJyb3cgLmRyb3Bkb3duLXRvZ2dsZTphZnRlciB7XG4gIGNvbnRlbnQ6ICcnO1xuICBib3JkZXItbGVmdDogNnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmlnaHQ6IDZweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkIHdoaXRlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogLTRweDtcbiAgbGVmdDogMTBweDtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3Quc2hvdy1tZW51LWFycm93LmRyb3B1cCAuZHJvcGRvd24tdG9nZ2xlOmJlZm9yZSB7XG4gIGJvdHRvbTogYXV0bztcbiAgdG9wOiAtM3B4O1xuICBib3JkZXItYm90dG9tOiAwO1xuICBib3JkZXItdG9wLXdpZHRoOiA3cHg7XG4gIGJvcmRlci10b3Atc3R5bGU6IHNvbGlkO1xuICBib3JkZXItdG9wLWNvbG9yOiAjY2NjY2NjO1xuICBib3JkZXItdG9wLWNvbG9yOiBmYWRlKCNjY2NjY2MsIDIwJSk7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LnNob3ctbWVudS1hcnJvdy5kcm9wdXAgLmRyb3Bkb3duLXRvZ2dsZTphZnRlciB7XG4gIGJvdHRvbTogYXV0bztcbiAgdG9wOiAtM3B4O1xuICBib3JkZXItdG9wOiA2cHggc29saWQgd2hpdGU7XG4gIGJvcmRlci1ib3R0b206IDA7XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LnNob3ctbWVudS1hcnJvdy5wdWxsLXJpZ2h0IC5kcm9wZG93bi10b2dnbGU6YmVmb3JlIHtcbiAgcmlnaHQ6IDEycHg7XG4gIGxlZnQ6IGF1dG87XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LnNob3ctbWVudS1hcnJvdy5wdWxsLXJpZ2h0IC5kcm9wZG93bi10b2dnbGU6YWZ0ZXIge1xuICByaWdodDogMTNweDtcbiAgbGVmdDogYXV0bztcbn1cblxuLmJvb3RzdHJhcC1zZWxlY3Quc2hvdy1tZW51LWFycm93Lm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlOmJlZm9yZSxcbi5ib290c3RyYXAtc2VsZWN0LnNob3ctbWVudS1hcnJvdy5vcGVuID4gLmRyb3Bkb3duLXRvZ2dsZTphZnRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAub3BlbiAuYnRuIC5jYXJldCB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjYWRhZGFkO1xufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAub3BlbiAuYnRuOmhvdmVyIC5jYXJldCB7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjOGM4YzhjO1xufVxuXG4uYnMtc2VhcmNoYm94LFxuLmJzLWFjdGlvbnNib3gge1xuICBwYWRkaW5nOiA0cHggOHB4O1xufVxuXG4uYnMtYWN0aW9uc2JveCB7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLmJzLWFjdGlvbnNib3ggLmJ0bi1ncm91cCBidXR0b24ge1xuICB3aWR0aDogNTAlO1xufVxuXG4uYnMtc2VhcmNoYm94ICsgLmJzLWFjdGlvbnNib3gge1xuICBwYWRkaW5nOiAwIDhweCA0cHg7XG59XG5cbi5icy1zZWFyY2hib3ggaW5wdXQuZm9ybS1jb250cm9sIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5tb2JpbGUtZGV2aWNlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgb3BhY2l0eTogMDtcbn1cblxuLmNvbnRhaW5lciB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIHBhZGRpbmctbGVmdDogODBweCAhaW1wb3J0YW50O1xuICBwYWRkaW5nLXJpZ2h0OiA2MHB4ICFpbXBvcnRhbnQ7XG59XG5cbi5hbGVydCB7XG4gIGJvcmRlci13aWR0aDogMCAwIDAgNXB4O1xufVxuXG4vKiBCb2R5IHNwZWNzICovXG5ib2R5IHtcbiAgY29sb3I6ICMyMjI7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG59XG5cbi8qIE1lc3NhZ2Ugd2FybmluZyB1c2VycyB0aGF0IHNvbWUgZmVhdHVyZXMgbWlnaHQgbm90IGJlIHN1cHBvcnRlZCBpbiBvbGQgYnJvd3NlcnMgKi9cbi5icm93c2VydXBncmFkZSB7XG4gIG1hcmdpbjogMC4yZW0gMDtcbiAgYmFja2dyb3VuZDogI2NjYztcbiAgY29sb3I6ICMwMDA7XG4gIHBhZGRpbmc6IDAuMmVtIDA7XG59XG5cbi8qIFRvcGJhciAqL1xuLnRvcGJhciB7XG4gIHBhZGRpbmc6IDA7XG4gIGJhY2tncm91bmQ6ICMyMjI7XG59XG5cbi50b3BiYXIgLmJhbm5lci1hcmVhIHtcbiAgYmFja2dyb3VuZDogIzIyMjtcbn1cblxuLnRvcGJhciAuYmFubmVyLWFyZWEgaDEge1xuICBtYXJnaW46IDAgMCAwIC04MHB4O1xuICBwYWRkaW5nOiAwIDAgMCA4MHB4O1xuICBoZWlnaHQ6IDU1cHg7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybChcIi4uL2ltYWdlcy9sb2dvLXdoaXRlLnBuZ1wiKSBuby1yZXBlYXQgMjRweCAzcHg7XG4gIGNvbG9yOiAjZmZmO1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2FOZXVlQm9sZFwiLCBcIkhlbHZldGljYU5ldWUtQm9sZFwiLCBcIkhlbHZldGljYU5ldWUgQm9sZFwiLCBcIkhlbHZldGljYSBOZXVlIEJvbGRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYU5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgXCJMdWNpZGEgR3JhbmRlXCIsIHNhbnMtc2VyaWY7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGZvbnQtc2l6ZTogMS41NzFlbTtcbiAgbGluZS1oZWlnaHQ6IDU1cHg7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi50b3BiYXIgLnRhYi1hcmVhIHtcbiAgYmFja2dyb3VuZDogIzNhMzkzYjtcbiAgaGVpZ2h0OiA0MHB4O1xufVxuXG4udG9wYmFyIC50YWItYXJlYSBzcGFuLmhvc3RuYW1lIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2EgTmV1ZSBMVCBXMUcgNTUgUm9tYW5cIiwgXCJIZWx2ZXRpY2EgTmV1ZSBMVCBXMUdcIiwgXCJIZWx2ZXRpY2FOZXVlIFJvbWFuXCIsIFwiSGVsdmV0aWNhTmV1ZS1Sb21hblwiLCBcIkhlbHZldGljYSBOZXVlIFJvbWFuXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgXCJIZWx2ZXRpY2FOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIFwiTHVjaWRhIEdyYW5kZVwiLCBzYW5zLXNlcmlmO1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1zaXplOiAxM3B0O1xuICBmb250LXdlaWdodDogNDAwO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDhweCAwO1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLnRvcGJhciAudGFiLWFyZWEgdWwubmF2LW1lbnUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGxpc3Qtc3R5bGUtcG9zaXRpb246IGluc2lkZTtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwIDAgMCAyNHB4O1xufVxuXG4udG9wYmFyIC50YWItYXJlYSB1bC5uYXYtbWVudSBsaSB7XG4gIGZsb2F0OiBsZWZ0O1xuICBkaXNwbGF5OiBibG9jaztcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi50b3BiYXIgLnRhYi1hcmVhIHVsLm5hdi1tZW51IGxpIGEsIC50b3BiYXIgLnRhYi1hcmVhIHVsLm5hdi1tZW51IGxpIC5kaXNhYmxlZCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LWZhbWlseTogXCJIZWx2ZXRpY2FOZXVlQm9sZFwiLCBcIkhlbHZldGljYU5ldWUtQm9sZFwiLCBcIkhlbHZldGljYU5ldWUgQm9sZFwiLCBcIkhlbHZldGljYSBOZXVlIEJvbGRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYU5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgXCJMdWNpZGEgR3JhbmRlXCIsIHNhbnMtc2VyaWY7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGZvbnQtc2l6ZTogMTNwdDtcbiAgcGFkZGluZzogOHB4IDQwcHg7XG4gIG1pbi13aWR0aDogMTkwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3V0bGluZTogbm9uZTtcbn1cblxuLnRvcGJhciAudGFiLWFyZWEgdWwubmF2LW1lbnUgbGkgLmRpc2FibGVkIHtcbiAgY29sb3I6ICM5OTk7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLnRvcGJhciAudGFiLWFyZWEgdWwubmF2LW1lbnUgbGkgLmRpc2FibGVkIC5kaWdpdC1jb250YWluZXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4udG9wYmFyIC50YWItYXJlYSB1bC5uYXYtbWVudSBsaSAuZGlnaXQtY29udGFpbmVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tbGVmdDogMTBweDtcbiAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgaGVpZ2h0OiAyMnB4O1xuICBiYWNrZ3JvdW5kOiAjNTU1O1xuICBib3JkZXI6IDJweCBzb2xpZCAjNTU1O1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhTmV1ZU1lZGl1bVwiLCBcIkhlbHZldGljYU5ldWUtTWVkaXVtXCIsIFwiSGVsdmV0aWNhIE5ldWUgTWVkaXVtXCIsIFwiSGVsdmV0aWNhTmV1ZVwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIFwiTHVjaWRhIEdyYW5kZVwiLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDE0cHg7XG4gIHBhZGRpbmc6IDAgOHB4O1xufVxuXG4udG9wYmFyIC50YWItYXJlYSB1bC5uYXYtbWVudSBsaS5jdXJyZW50IC5kaWdpdC1jb250YWluZXIge1xuICBib3JkZXItY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xufVxuXG4udG9wYmFyIC50YWItYXJlYSB1bC5uYXYtbWVudSBsaS5jdXJyZW50Lmhvc3RzIHtcbiAgYmFja2dyb3VuZDogIzAwOGFiZjtcbn1cblxuLnRvcGJhciAudGFiLWFyZWEgdWwubmF2LW1lbnUgbGkuY3VycmVudC5ndWVzdHMge1xuICBiYWNrZ3JvdW5kOiAjOGNjNjNmO1xufVxuXG4udG9wYmFyIC50YWItYXJlYSB1bC5uYXYtbWVudSBsaS5jdXJyZW50LnRlbXBsYXRlcyB7XG4gIGJhY2tncm91bmQ6ICMwMGE2YTA7XG59XG5cbi50b3BiYXIgLnRhYi1hcmVhIHVsLm5hdi1tZW51IGxpLmN1cnJlbnQuc3RvcmFnZSB7XG4gIGJhY2tncm91bmQ6ICNmZWI4MTM7XG59XG5cbi50b3BiYXIgLnRhYi1hcmVhIHVsLm5hdi1tZW51IGxpLmN1cnJlbnQubmV0d29ya3Mge1xuICBiYWNrZ3JvdW5kOiAjN2YxYzdkO1xufVxuXG4udG9wYmFyIC50YWItYXJlYSB1bC5uYXYtbWVudSBsaS5jdXJyZW50LmFkbWluaXN0cmF0aW9uIHtcbiAgYmFja2dyb3VuZDogI2Q5MTgyZDtcbn1cblxuLnRvcGJhciAucGFuZWwtYWN0aW9ucy1hcmVhIHtcbiAgbWluLWhlaWdodDogNDBweDtcbn1cblxuLmxvZ2luLWFyZWEge1xuICBtYXJnaW46IDkwcHggYXV0byAwO1xuICB3aWR0aDogMzAwcHg7XG59XG5cbi5sb2dpbi1hcmVhIC5idG4tbG9naW4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgZmxvYXQ6IG5vbmU7XG4gIG1hcmdpbi1ib3R0b206IDUwcHg7XG59XG5cbi5sb2dpbi1hcmVhIC5jb2wtbWQtMTIsIC5sb2dpbi1hcmVhIC5jb2wtbGctMTIge1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmxvZ2luLWFyZWEgLmJvb3RzdHJhcC1zZWxlY3QsXG4ubG9naW4tYXJlYSAuc2VsZWN0cGlja2VyIHtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhTmV1ZUxpZ2h0XCIsIFwiSGVsdmV0aWNhTmV1ZS1MaWdodFwiLCBcIkhlbHZldGljYU5ldWUgTGlnaHRcIiwgXCJIZWx2ZXRpY2FOZXVlXCIsIFwiSGVsdmV0aWNhTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBcIkx1Y2lkYSBHcmFuZGVcIiwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxM3B0O1xufVxuXG4ubG9naW4tYXJlYSAuZHJvcGRvd24tdG9nZ2xlLnNlbGVjdHBpY2tlciB7XG4gIGhlaWdodDogNDBweDtcbn1cblxuLmxvZ2luLWFyZWEgLmZvcm0tZ3JvdXAge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4ubG9naW4tYXJlYSAuZm9ybS1ncm91cDpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLmJ0biB7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYU5ldWVNZWRpdW1cIiwgXCJIZWx2ZXRpY2FOZXVlLU1lZGl1bVwiLCBcIkhlbHZldGljYSBOZXVlIE1lZGl1bVwiLCBcIkhlbHZldGljYU5ldWVcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBcIkx1Y2lkYSBHcmFuZGVcIiwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxM3B0O1xufVxuXG4uYnRuLWxvZ2luIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDhhYmY7XG4gIGJvcmRlci1jb2xvcjogIzAwOGFiZjtcbn1cblxuLmJ0bi1sb2dpbjpmb2N1cyxcbi5idG4tbG9naW4uZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNjU4YztcbiAgYm9yZGVyLWNvbG9yOiAjMDAyZTQwO1xufVxuXG4uYnRuLWxvZ2luOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDY1OGM7XG4gIGJvcmRlci1jb2xvcjogIzAwNWU4Mjtcbn1cblxuLmJ0bi1sb2dpbjphY3RpdmUsXG4uYnRuLWxvZ2luLmFjdGl2ZSxcbi5vcGVuID4gLmJ0bi1sb2dpbi5kcm9wZG93bi10b2dnbGUge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNjU4YztcbiAgYm9yZGVyLWNvbG9yOiAjMDA1ZTgyO1xufVxuXG4uYnRuLWxvZ2luOmFjdGl2ZTpob3Zlcixcbi5idG4tbG9naW46YWN0aXZlOmZvY3VzLFxuLmJ0bi1sb2dpbjphY3RpdmUuZm9jdXMsXG4uYnRuLWxvZ2luLmFjdGl2ZTpob3Zlcixcbi5idG4tbG9naW4uYWN0aXZlOmZvY3VzLFxuLmJ0bi1sb2dpbi5hY3RpdmUuZm9jdXMsXG4ub3BlbiA+IC5idG4tbG9naW4uZHJvcGRvd24tdG9nZ2xlOmhvdmVyLFxuLm9wZW4gPiAuYnRuLWxvZ2luLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyxcbi5vcGVuID4gLmJ0bi1sb2dpbi5kcm9wZG93bi10b2dnbGUuZm9jdXMge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwNGI2ODtcbiAgYm9yZGVyLWNvbG9yOiAjMDAyZTQwO1xufVxuXG4uYnRuLWxvZ2luOmFjdGl2ZSxcbi5idG4tbG9naW4uYWN0aXZlLFxuLm9wZW4gPiAuYnRuLWxvZ2luLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG59XG5cbi5idG4tbG9naW4uZGlzYWJsZWQsXG4uYnRuLWxvZ2luLmRpc2FibGVkOmhvdmVyLFxuLmJ0bi1sb2dpbi5kaXNhYmxlZDpmb2N1cyxcbi5idG4tbG9naW4uZGlzYWJsZWQuZm9jdXMsXG4uYnRuLWxvZ2luLmRpc2FibGVkOmFjdGl2ZSxcbi5idG4tbG9naW4uZGlzYWJsZWQuYWN0aXZlLFxuLmJ0bi1sb2dpbltkaXNhYmxlZF0sXG4uYnRuLWxvZ2luW2Rpc2FibGVkXTpob3Zlcixcbi5idG4tbG9naW5bZGlzYWJsZWRdOmZvY3VzLFxuLmJ0bi1sb2dpbltkaXNhYmxlZF0uZm9jdXMsXG4uYnRuLWxvZ2luW2Rpc2FibGVkXTphY3RpdmUsXG4uYnRuLWxvZ2luW2Rpc2FibGVkXS5hY3RpdmUsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1sb2dpbixcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxvZ2luOmhvdmVyLFxuZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tbG9naW46Zm9jdXMsXG5maWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1sb2dpbi5mb2N1cyxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxvZ2luOmFjdGl2ZSxcbmZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWxvZ2luLmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDhhYmY7XG4gIGJvcmRlci1jb2xvcjogIzAwOGFiZjtcbn1cblxuLmJ0bi1sb2dpbiAuYmFkZ2Uge1xuICBjb2xvcjogIzAwOGFiZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cblxuLypcbiogUHJvamVjdCBLaW1jaGlcbipcbiogQ29weXJpZ2h0IElCTSwgQ29ycC4gMjAxNVxuKlxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTtcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuKlxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsXG4qIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi5kaWFsb2ctYm9yZGVyLWdyZXkge1xuICBiYWNrZ3JvdW5kLWNsaXA6IGJvcmRlci1ib3g7XG4gIGJvcmRlcjogNnB4IHNvbGlkIHJnYmEoMTcwLCAxNzAsIDE3MCwgMC4zKTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIG1hcmdpbjogYXV0bztcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xufVxuXG4uZGlhbG9nLWNvbnRhaW5lciB7XG4gIGJvcmRlcjogM3B4IHNvbGlkICM5OTk5OTk7XG4gIGJhY2tncm91bmQ6IHdoaXRlO1xufVxuXG4uZGlhbG9nLWNvbnRhaW5lciAuZGlhbG9nLXRpdGxlIHtcbiAgaGVpZ2h0OiA2MHB4O1xuICBwYWRkaW5nOiAyMHB4IDAgMjBweCAyMHB4O1xuICBtYXJnaW46IDA7XG4gIGZsb2F0OiBsZWZ0O1xuICBmb250LXNpemU6IDI3cHg7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYU5ldWVMaWdodFwiLCBcIkhlbHZldGljYU5ldWUtTGlnaHRcIiwgXCJIZWx2ZXRpY2FOZXVlIExpZ2h0XCIsIFwiSGVsdmV0aWNhTmV1ZVwiLCBcIkhlbHZldGljYU5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgXCJMdWNpZGEgR3JhbmRlXCIsIHNhbnMtc2VyaWY7XG4gIGZvbnQtd2VpZ2h0OiAzMDAgIWltcG9ydGFudDtcbn1cblxuLmRpYWxvZy1jb250YWluZXIgLmRpYWxvZy1ib2R5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uZGlhbG9nLWNvbnRhaW5lciAuZGlhbG9nLWZvb3RlciB7XG4gIGhlaWdodDogNTBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwOEFCRjtcbn1cblxuLmRpYWxvZy1jb250YWluZXIgLmRpYWxvZy1mb290ZXIgLmRpYWxvZy1idXR0b24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICB3aWR0aDogNzVweDtcbiAgaGVpZ2h0OiAzMHB4O1xuICBsaW5lLWhlaWdodDogMzBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tbGVmdDogMTBweDtcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uZGlhbG9nLWNvbnRhaW5lciAuZGlhbG9nLWZvb3RlciAuZGlhbG9nLWJ1dHRvbjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNFRUVFRUU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLypcbiogUHJvamVjdCBLaW1jaGlcbipcbiogQ29weXJpZ2h0IElCTSwgQ29ycC4gMjAxNVxuKlxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTtcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuKlxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsXG4qIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi5tb2RhbC1vcGVuIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLm1vZGFsIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDEwNTA7XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcbiAgb3V0bGluZTogMDtcbn1cblxuLm1vZGFsLmZhZGUgLm1vZGFsLWRpYWxvZyB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7XG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMjUlKTtcbiAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTI1JSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XG4gIC1tb3otdHJhbnNpdGlvbjogLW1vei10cmFuc2Zvcm0gMC4zcyBlYXNlLW91dDtcbiAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtIDAuM3MgZWFzZS1vdXQ7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2Utb3V0O1xufVxuXG4ubW9kYWwuaW4gLm1vZGFsLWRpYWxvZyB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTtcbiAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xufVxuXG4ubW9kYWwtb3BlbiAubW9kYWwge1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi5tb2RhbC1kaWFsb2cge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiBhdXRvO1xuICBtYXJnaW46IDEwcHg7XG4gIGJvcmRlcjogNnB4IHNvbGlkICNhYWE7XG4gIGJvcmRlcjogNnB4IHNvbGlkIHJnYmEoMTcwLCAxNzAsIDE3MCwgMC4zKTtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xufVxuXG4ubW9kYWwtY29udGVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm9yZGVyOiAzcHggc29saWQgIzk5OTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgb3V0bGluZTogMDtcbn1cblxuLm1vZGFsLWJhY2tkcm9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDEwNDA7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG59XG5cbi5tb2RhbC1iYWNrZHJvcC5mYWRlIHtcbiAgb3BhY2l0eTogMDtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApO1xufVxuXG4ubW9kYWwtYmFja2Ryb3AuaW4ge1xuICBvcGFjaXR5OiAwLjU7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT01MCk7XG59XG5cbi5tb2RhbC1oZWFkZXIge1xuICBwYWRkaW5nOiAyN3B4IDE0cHggMTRweCAzMHB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIG1pbi1oZWlnaHQ6IDI3cHggMTRweCAxNHB4IDMwcHgyM3B4O1xufVxuXG4ubW9kYWwtaGVhZGVyIC5jbG9zZSB7XG4gIG1hcmdpbi10b3A6IC0ycHg7XG59XG5cbi5tb2RhbC10aXRsZSB7XG4gIG1hcmdpbjogMDtcbiAgbGluZS1oZWlnaHQ6IDIzcHg7XG4gIGZvbnQtc2l6ZTogMjdweDtcbiAgZm9udC1mYW1pbHk6IFwiSGVsdmV0aWNhTmV1ZUxpZ2h0XCIsIFwiSGVsdmV0aWNhTmV1ZS1MaWdodFwiLCBcIkhlbHZldGljYU5ldWUgTGlnaHRcIiwgXCJIZWx2ZXRpY2FOZXVlXCIsIFwiSGVsdmV0aWNhTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBcIkx1Y2lkYSBHcmFuZGVcIiwgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDMwMCAhaW1wb3J0YW50O1xufVxuXG4ubW9kYWwtYm9keSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogMjBweCAzMHB4O1xufVxuXG4ubW9kYWwtZm9vdGVyIHtcbiAgcGFkZGluZzogMjBweCAzMHB4O1xuICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XG4gIGJvcmRlci10b3A6IDA7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG59XG5cbi5tb2RhbC1mb290ZXI6YmVmb3JlLFxuLm1vZGFsLWZvb3RlcjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICBkaXNwbGF5OiB0YWJsZTtcbn1cblxuLm1vZGFsLWZvb3RlcjphZnRlciB7XG4gIGNsZWFyOiBib3RoO1xufVxuXG4ubW9kYWwtZm9vdGVyIC5idG4ge1xuICBwYWRkaW5nOiA2cHggMTJweDtcbiAgbWluLXdpZHRoOiA3NXB4O1xufVxuXG4ubW9kYWwtZm9vdGVyIC5idG4gKyAuYnRuIHtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLm1vZGFsLWZvb3RlciAuYnRuLWdyb3VwIC5idG4gKyAuYnRuIHtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG59XG5cbi5tb2RhbC1mb290ZXIgLmJ0bi1ibG9jayArIC5idG4tYmxvY2sge1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLm1vZGFsLXNjcm9sbGJhci1tZWFzdXJlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC05OTk5cHg7XG4gIHdpZHRoOiA1MHB4O1xuICBoZWlnaHQ6IDUwcHg7XG4gIG92ZXJmbG93OiBzY3JvbGw7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAubW9kYWwtZGlhbG9nIHtcbiAgICB3aWR0aDogODI0cHg7XG4gICAgbWFyZ2luOiAzMHB4IGF1dG87XG4gIH1cbiAgLm1vZGFsLWNvbnRlbnQge1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gICAgYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gIH1cbiAgLm1vZGFsLXNtIHtcbiAgICB3aWR0aDogNTI0cHg7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAubW9kYWwtbGcge1xuICAgIHdpZHRoOiAxMTI0cHg7XG4gIH1cbn1cblxuLm1vZGFsIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAubW9kYWw6YmVmb3JlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBjb250ZW50OiBcIiBcIjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbn1cblxuLm1vZGFsLWRpYWxvZyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLypcbiogUHJvamVjdCBLaW1jaGlcbipcbiogQ29weXJpZ2h0IElCTSwgQ29ycC4gMjAxNVxuKlxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTtcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuKlxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsXG4qIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cbi5tZW51LWZsYXQgLmJ0biB7XG4gIGJhY2tncm91bmQ6ICM0ZDRjNGUgIWltcG9ydGFudDtcbiAgbWluLXdpZHRoOiAxNjBweDtcbiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XG4gIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYU5ldWVCb2xkXCIsIFwiSGVsdmV0aWNhTmV1ZS1Cb2xkXCIsIFwiSGVsdmV0aWNhTmV1ZSBCb2xkXCIsIFwiSGVsdmV0aWNhIE5ldWUgQm9sZFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIFwiSGVsdmV0aWNhTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBcIkx1Y2lkYSBHcmFuZGVcIiwgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgZm9udC1zaXplOiAxMy41cHQ7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiA0MHB4O1xuICBwYWRkaW5nOiA0cHggNDVweCA1cHggMzhweDtcbn1cblxuLm1lbnUtZmxhdCAuYnRuID4gaSB7XG4gIGZvbnQtc2l6ZTogMjJweDtcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgd2lkdGg6IDI2cHg7XG4gIGhlaWdodDogNDBweDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiA2cHg7XG59XG5cbi5tZW51LWZsYXQgLmJ0biA+IGk6YmVmb3JlIHtcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XG59XG5cbi5tZW51LWZsYXQgLmNhcmV0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgbWFyZ2luLWxlZnQ6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGJvcmRlci10b3A6IDA7XG4gIGJvcmRlci10b3A6IDAgXFw5O1xuICBib3JkZXItcmlnaHQ6IDA7XG4gIGJvcmRlci1sZWZ0OiAwO1xufVxuXG4ubWVudS1mbGF0IC5jYXJldDpiZWZvcmUge1xuICBmb250LWZhbWlseTogXCJmb250ZWxsb1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgc3BlYWs6IG5vbmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdGV4dC1kZWNvcmF0aW9uOiBpbmhlcml0O1xuICB3aWR0aDogMS4yZW07XG4gIGhlaWdodDogMS4yZW07XG4gIG1hcmdpbjogLjVlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXZhcmlhbnQ6IG5vcm1hbDtcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gIGxpbmUtaGVpZ2h0OiAyZW07XG4gIGNvbnRlbnQ6ICdcXGU4NjEnO1xufVxuXG4ubWVudS1mbGF0LmRyb3B1cCxcbi5tZW51LWZsYXQuZHJvcGRvd24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5tZW51LWZsYXQgLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cyB7XG4gIG91dGxpbmU6IDA7XG59XG5cbi5tZW51LWZsYXQgLmRyb3Bkb3duLW1lbnUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMTAwJTtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTAwMDtcbiAgZGlzcGxheTogbm9uZTtcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1pbi13aWR0aDogMTYwcHg7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgZm9udC1zaXplOiAxMy41cHQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzYTM5M2I7XG4gIGJvcmRlcjogMDtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbn1cblxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0IHtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IGF1dG87XG59XG5cbi5tZW51LWZsYXQgLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXIge1xuICBoZWlnaHQ6IDFweDtcbiAgbWFyZ2luOiA5cHggMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQwNDA0Mjtcbn1cblxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudSA+IGxpID4gYSB7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjMmUyZTJlO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDBweCAxcHggMHB4IDBweCAjNDA0MDQyO1xuICBib3gtc2hhZG93OiBpbnNldCAwcHggMXB4IDBweCAwcHggIzQwNDA0Mjtcbn1cblxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudSA+IGxpOmZpcnN0LWNoaWxkID4gYSB7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjM2EzOTNiO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG59XG5cbi5tZW51LWZsYXQgLmRyb3Bkb3duLW1lbnUgPiBsaS5jcml0aWNhbDpsYXN0LWNoaWxkID4gYSB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cblxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudSA+IGxpID4gYSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiA0cHggNnB4O1xuICBjbGVhcjogYm90aDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDMxcHg7XG4gIGNvbG9yOiAjZmZmO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4ubWVudS1mbGF0IC5kcm9wZG93bi1tZW51ID4gbGkgPiBhID4gaSB7XG4gIGZvbnQtc2l6ZTogMjJweDtcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICB3aWR0aDogMjZweDtcbiAgaGVpZ2h0OiAyNnB4O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi5tZW51LWZsYXQgLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIsXG4ubWVudS1mbGF0IC5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNhMzkzYjtcbn1cblxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhLFxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgb3V0bGluZTogMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNhMzkzYjtcbn1cblxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudSA+IGxpLmNyaXRpY2FsID4gYSB7XG4gIGJhY2tncm91bmQ6ICNkOTE4MmQ7XG59XG5cbi5tZW51LWZsYXQgLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhLFxuLm1lbnUtZmxhdCAuZHJvcGRvd24tbWVudSA+IC5kaXNhYmxlZCA+IGE6aG92ZXIsXG4ubWVudS1mbGF0IC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gIGNvbG9yOiAjOTk5O1xufVxuXG4ubWVudS1mbGF0IC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYTpob3Zlcixcbi5tZW51LWZsYXQgLmRyb3Bkb3duLW1lbnUgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZCA9IGZhbHNlKTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLm1lbnUtZmxhdC5vcGVuIC5idG4ge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG59XG5cbi5tZW51LWZsYXQub3BlbiA+IC5kcm9wZG93bi1tZW51IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5tZW51LWZsYXQub3BlbiAuY2FyZXQge1xuICBiYWNrZ3JvdW5kOiAjM2EzOTNiO1xufVxuXG4ubWVudS1mbGF0Lm9wZW4gLmNhcmV0OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICdcXGU4NjQnO1xufVxuXG4ubWVudS1mbGF0Lm9wZW4gPiBhIHtcbiAgb3V0bGluZTogMDtcbn1cblxuLmRyb3Bkb3duLW1lbnUtcmlnaHQge1xuICBsZWZ0OiBhdXRvO1xuICByaWdodDogMDtcbn1cblxuLmRyb3Bkb3duLW1lbnUtbGVmdCB7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiBhdXRvO1xufVxuXG4uZHJvcGRvd24taGVhZGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDNweCAyMHB4O1xuICBmb250LXNpemU6IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQyOTtcbiAgY29sb3I6ICM5OTk7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5kcm9wZG93bi1iYWNrZHJvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgdG9wOiAwO1xuICB6LWluZGV4OiA5OTA7XG59XG5cbi5wdWxsLXJpZ2h0ID4gLmRyb3Bkb3duLW1lbnUge1xuICByaWdodDogMDtcbiAgbGVmdDogYXV0bztcbn1cblxuLmRyb3B1cCAuY2FyZXQsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmNhcmV0IHtcbiAgYm9yZGVyLXRvcDogMDtcbiAgYm9yZGVyLWJvdHRvbTogNHB4IGRhc2hlZDtcbiAgYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkIFxcOTtcbiAgY29udGVudDogXCJcIjtcbn1cblxuLmRyb3B1cCAuZHJvcGRvd24tbWVudSxcbi5uYXZiYXItZml4ZWQtYm90dG9tIC5kcm9wZG93biAuZHJvcGRvd24tbWVudSB7XG4gIHRvcDogYXV0bztcbiAgYm90dG9tOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiAycHg7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAubmF2YmFyLXJpZ2h0IC5kcm9wZG93bi1tZW51IHtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiBhdXRvO1xuICB9XG4gIC5uYXZiYXItcmlnaHQgLmRyb3Bkb3duLW1lbnUtbGVmdCB7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogYXV0bztcbiAgfVxufVxuXG4uaG9zdHMge1xuICAvKiBCb290c3RyYXAgTW9kYWwqL1xufVxuXG4uaG9zdHMgLm1vZGFsLWZvb3RlciB7XG4gIGJhY2tncm91bmQ6ICMwMDhhYmY7XG59XG5cbnByZSB7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb250YWluZXIge1xuICAgIHdpZHRoOiAxNTQwcHg7XG4gIH1cbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTY4MHB4KSB7XG4gIC5jb250YWluZXIge1xuICAgIHdpZHRoOiAxNTQwcHg7XG4gIH1cbn1cbiIsIi8qISBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9oNWJwL2h0bWw1LWJvaWxlcnBsYXRlL2Jsb2IvbWFzdGVyL3NyYy9jc3MvbWFpbi5jc3MgKi9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFByaW50IHN0eWxlcy5cbi8vIElubGluZWQgdG8gYXZvaWQgdGhlIGFkZGl0aW9uYWwgSFRUUCByZXF1ZXN0OiBoNWJwLmNvbS9yXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5AbWVkaWEgcHJpbnQge1xuICAgICosXG4gICAgKjpiZWZvcmUsXG4gICAgKjphZnRlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICAgIGNvbG9yOiAjMDAwICFpbXBvcnRhbnQ7IC8vIEJsYWNrIHByaW50cyBmYXN0ZXI6IGg1YnAuY29tL3NcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIGEsXG4gICAgYTp2aXNpdGVkIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgfVxuXG4gICAgYVtocmVmXTphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IFwiIChcIiBhdHRyKGhyZWYpIFwiKVwiO1xuICAgIH1cblxuICAgIGFiYnJbdGl0bGVdOmFmdGVyIHtcbiAgICAgICAgY29udGVudDogXCIgKFwiIGF0dHIodGl0bGUpIFwiKVwiO1xuICAgIH1cblxuICAgIC8vIERvbid0IHNob3cgbGlua3MgdGhhdCBhcmUgZnJhZ21lbnQgaWRlbnRpZmllcnMsXG4gICAgLy8gb3IgdXNlIHRoZSBgamF2YXNjcmlwdDpgIHBzZXVkbyBwcm90b2NvbFxuICAgIGFbaHJlZl49XCIjXCJdOmFmdGVyLFxuICAgIGFbaHJlZl49XCJqYXZhc2NyaXB0OlwiXTphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgfVxuXG4gICAgcHJlLFxuICAgIGJsb2NrcXVvdGUge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5O1xuICAgICAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XG4gICAgfVxuXG4gICAgdGhlYWQge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7IC8vIGg1YnAuY29tL3RcbiAgICB9XG5cbiAgICB0cixcbiAgICBpbWcge1xuICAgICAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XG4gICAgfVxuXG4gICAgaW1nIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgcCxcbiAgICBoMixcbiAgICBoMyB7XG4gICAgICAgIG9ycGhhbnM6IDM7XG4gICAgICAgIHdpZG93czogMztcbiAgICB9XG5cbiAgICBoMixcbiAgICBoMyB7XG4gICAgICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkO1xuICAgIH1cblxuICAgIC8vIEJvb3RzdHJhcCBzcGVjaWZpYyBjaGFuZ2VzIHN0YXJ0XG5cbiAgICAvLyBCb290c3RyYXAgY29tcG9uZW50c1xuICAgIC5uYXZiYXIge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgICAuYnRuLFxuICAgIC5kcm9wdXAgPiAuYnRuIHtcbiAgICAgICAgPiAuY2FyZXQge1xuICAgICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogIzAwMCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIC5sYWJlbCB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG4gICAgfVxuXG4gICAgLnRhYmxlIHtcbiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSAhaW1wb3J0YW50O1xuXG4gICAgICAgIHRkLFxuICAgICAgICB0aCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnRhYmxlLWJvcmRlcmVkIHtcbiAgICAgICAgdGgsXG4gICAgICAgIHRkIHtcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJvb3RzdHJhcCBzcGVjaWZpYyBjaGFuZ2VzIGVuZFxufVxuIiwiLy9cbi8vIEdseXBoaWNvbnMgZm9yIEJvb3RzdHJhcFxuLy9cbi8vIFNpbmNlIGljb25zIGFyZSBmb250cywgdGhleSBjYW4gYmUgcGxhY2VkIGFueXdoZXJlIHRleHQgaXMgcGxhY2VkIGFuZCBhcmVcbi8vIHRodXMgYXV0b21hdGljYWxseSBzaXplZCB0byBtYXRjaCB0aGUgc3Vycm91bmRpbmcgY2hpbGQuIFRvIHVzZSwgY3JlYXRlIGFuXG4vLyBpbmxpbmUgZWxlbWVudCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBjbGFzc2VzLCBsaWtlIHNvOlxuLy9cbi8vIDxhIGhyZWY9XCIjXCI+PHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLXN0YXJcIj48L3NwYW4+IFN0YXI8L2E+XG5cbkBhdC1yb290IHtcbiAgLy8gSW1wb3J0IHRoZSBmb250c1xuICBAZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0dseXBoaWNvbnMgSGFsZmxpbmdzJztcbiAgICBzcmM6IHVybChpZigkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyLCB0d2JzLWZvbnQtcGF0aCgnI3skaWNvbi1mb250LXBhdGh9I3skaWNvbi1mb250LW5hbWV9LmVvdCcpLCAnI3skaWNvbi1mb250LXBhdGh9I3skaWNvbi1mb250LW5hbWV9LmVvdCcpKTtcbiAgICBzcmM6IHVybChpZigkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyLCB0d2JzLWZvbnQtcGF0aCgnI3skaWNvbi1mb250LXBhdGh9I3skaWNvbi1mb250LW5hbWV9LmVvdD8jaWVmaXgnKSwgJyN7JGljb24tZm9udC1wYXRofSN7JGljb24tZm9udC1uYW1lfS5lb3Q/I2llZml4JykpIGZvcm1hdCgnZW1iZWRkZWQtb3BlbnR5cGUnKSxcbiAgICAgICAgIHVybChpZigkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyLCB0d2JzLWZvbnQtcGF0aCgnI3skaWNvbi1mb250LXBhdGh9I3skaWNvbi1mb250LW5hbWV9LndvZmYyJyksICcjeyRpY29uLWZvbnQtcGF0aH0jeyRpY29uLWZvbnQtbmFtZX0ud29mZjInKSkgZm9ybWF0KCd3b2ZmMicpLFxuICAgICAgICAgdXJsKGlmKCRib290c3RyYXAtc2Fzcy1hc3NldC1oZWxwZXIsIHR3YnMtZm9udC1wYXRoKCcjeyRpY29uLWZvbnQtcGF0aH0jeyRpY29uLWZvbnQtbmFtZX0ud29mZicpLCAnI3skaWNvbi1mb250LXBhdGh9I3skaWNvbi1mb250LW5hbWV9LndvZmYnKSkgZm9ybWF0KCd3b2ZmJyksXG4gICAgICAgICB1cmwoaWYoJGJvb3RzdHJhcC1zYXNzLWFzc2V0LWhlbHBlciwgdHdicy1mb250LXBhdGgoJyN7JGljb24tZm9udC1wYXRofSN7JGljb24tZm9udC1uYW1lfS50dGYnKSwgJyN7JGljb24tZm9udC1wYXRofSN7JGljb24tZm9udC1uYW1lfS50dGYnKSkgZm9ybWF0KCd0cnVldHlwZScpLFxuICAgICAgICAgdXJsKGlmKCRib290c3RyYXAtc2Fzcy1hc3NldC1oZWxwZXIsIHR3YnMtZm9udC1wYXRoKCcjeyRpY29uLWZvbnQtcGF0aH0jeyRpY29uLWZvbnQtbmFtZX0uc3ZnIyN7JGljb24tZm9udC1zdmctaWR9JyksICcjeyRpY29uLWZvbnQtcGF0aH0jeyRpY29uLWZvbnQtbmFtZX0uc3ZnIyN7JGljb24tZm9udC1zdmctaWR9JykpIGZvcm1hdCgnc3ZnJyk7XG4gIH1cbn1cblxuLy8gQ2F0Y2hhbGwgYmFzZWNsYXNzXG4uZ2x5cGhpY29uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0b3A6IDFweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LWZhbWlseTogJ0dseXBoaWNvbnMgSGFsZmxpbmdzJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMTtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG5cbi8vIEluZGl2aWR1YWwgaWNvbnNcbi5nbHlwaGljb24tYXN0ZXJpc2sgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDJhXCI7IH0gfVxuLmdseXBoaWNvbi1wbHVzICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMmJcIjsgfSB9XG4uZ2x5cGhpY29uLWV1cm8sXG4uZ2x5cGhpY29uLWV1ciAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyMGFjXCI7IH0gfVxuLmdseXBoaWNvbi1taW51cyAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjIxMlwiOyB9IH1cbi5nbHlwaGljb24tY2xvdWQgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDI2MDFcIjsgfSB9XG4uZ2x5cGhpY29uLWVudmVsb3BlICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyNzA5XCI7IH0gfVxuLmdseXBoaWNvbi1wZW5jaWwgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjcwZlwiOyB9IH1cbi5nbHlwaGljb24tZ2xhc3MgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMDFcIjsgfSB9XG4uZ2x5cGhpY29uLW11c2ljICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDAyXCI7IH0gfVxuLmdseXBoaWNvbi1zZWFyY2ggICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwM1wiOyB9IH1cbi5nbHlwaGljb24taGVhcnQgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMDVcIjsgfSB9XG4uZ2x5cGhpY29uLXN0YXIgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDA2XCI7IH0gfVxuLmdseXBoaWNvbi1zdGFyLWVtcHR5ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAwN1wiOyB9IH1cbi5nbHlwaGljb24tdXNlciAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMDhcIjsgfSB9XG4uZ2x5cGhpY29uLWZpbG0gICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDA5XCI7IH0gfVxuLmdseXBoaWNvbi10aC1sYXJnZSAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxMFwiOyB9IH1cbi5nbHlwaGljb24tdGggICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTFcIjsgfSB9XG4uZ2x5cGhpY29uLXRoLWxpc3QgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDEyXCI7IH0gfVxuLmdseXBoaWNvbi1vayAgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxM1wiOyB9IH1cbi5nbHlwaGljb24tcmVtb3ZlICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTRcIjsgfSB9XG4uZ2x5cGhpY29uLXpvb20taW4gICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDE1XCI7IH0gfVxuLmdseXBoaWNvbi16b29tLW91dCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxNlwiOyB9IH1cbi5nbHlwaGljb24tb2ZmICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMTdcIjsgfSB9XG4uZ2x5cGhpY29uLXNpZ25hbCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDE4XCI7IH0gfVxuLmdseXBoaWNvbi1jb2cgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAxOVwiOyB9IH1cbi5nbHlwaGljb24tdHJhc2ggICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjBcIjsgfSB9XG4uZ2x5cGhpY29uLWhvbWUgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDIxXCI7IH0gfVxuLmdseXBoaWNvbi1maWxlICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyMlwiOyB9IH1cbi5nbHlwaGljb24tdGltZSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjNcIjsgfSB9XG4uZ2x5cGhpY29uLXJvYWQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDI0XCI7IH0gfVxuLmdseXBoaWNvbi1kb3dubG9hZC1hbHQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyNVwiOyB9IH1cbi5nbHlwaGljb24tZG93bmxvYWQgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjZcIjsgfSB9XG4uZ2x5cGhpY29uLXVwbG9hZCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDI3XCI7IH0gfVxuLmdseXBoaWNvbi1pbmJveCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAyOFwiOyB9IH1cbi5nbHlwaGljb24tcGxheS1jaXJjbGUgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMjlcIjsgfSB9XG4uZ2x5cGhpY29uLXJlcGVhdCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDMwXCI7IH0gfVxuLmdseXBoaWNvbi1yZWZyZXNoICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzMVwiOyB9IH1cbi5nbHlwaGljb24tbGlzdC1hbHQgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzJcIjsgfSB9XG4uZ2x5cGhpY29uLWxvY2sgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDMzXCI7IH0gfVxuLmdseXBoaWNvbi1mbGFnICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzNFwiOyB9IH1cbi5nbHlwaGljb24taGVhZHBob25lcyAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzVcIjsgfSB9XG4uZ2x5cGhpY29uLXZvbHVtZS1vZmYgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDM2XCI7IH0gfVxuLmdseXBoaWNvbi12b2x1bWUtZG93biAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTAzN1wiOyB9IH1cbi5nbHlwaGljb24tdm9sdW1lLXVwICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwMzhcIjsgfSB9XG4uZ2x5cGhpY29uLXFyY29kZSAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDM5XCI7IH0gfVxuLmdseXBoaWNvbi1iYXJjb2RlICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0MFwiOyB9IH1cbi5nbHlwaGljb24tdGFnICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDFcIjsgfSB9XG4uZ2x5cGhpY29uLXRhZ3MgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQyXCI7IH0gfVxuLmdseXBoaWNvbi1ib29rICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0M1wiOyB9IH1cbi5nbHlwaGljb24tYm9va21hcmsgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDRcIjsgfSB9XG4uZ2x5cGhpY29uLXByaW50ICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQ1XCI7IH0gfVxuLmdseXBoaWNvbi1jYW1lcmEgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0NlwiOyB9IH1cbi5nbHlwaGljb24tZm9udCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNDdcIjsgfSB9XG4uZ2x5cGhpY29uLWJvbGQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDQ4XCI7IH0gfVxuLmdseXBoaWNvbi1pdGFsaWMgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA0OVwiOyB9IH1cbi5nbHlwaGljb24tdGV4dC1oZWlnaHQgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTBcIjsgfSB9XG4uZ2x5cGhpY29uLXRleHQtd2lkdGggICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDUxXCI7IH0gfVxuLmdseXBoaWNvbi1hbGlnbi1sZWZ0ICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1MlwiOyB9IH1cbi5nbHlwaGljb24tYWxpZ24tY2VudGVyICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTNcIjsgfSB9XG4uZ2x5cGhpY29uLWFsaWduLXJpZ2h0ICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDU0XCI7IH0gfVxuLmdseXBoaWNvbi1hbGlnbi1qdXN0aWZ5ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1NVwiOyB9IH1cbi5nbHlwaGljb24tbGlzdCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTZcIjsgfSB9XG4uZ2x5cGhpY29uLWluZGVudC1sZWZ0ICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDU3XCI7IH0gfVxuLmdseXBoaWNvbi1pbmRlbnQtcmlnaHQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA1OFwiOyB9IH1cbi5nbHlwaGljb24tZmFjZXRpbWUtdmlkZW8gICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNTlcIjsgfSB9XG4uZ2x5cGhpY29uLXBpY3R1cmUgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDYwXCI7IH0gfVxuLmdseXBoaWNvbi1tYXAtbWFya2VyICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2MlwiOyB9IH1cbi5nbHlwaGljb24tYWRqdXN0ICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjNcIjsgfSB9XG4uZ2x5cGhpY29uLXRpbnQgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDY0XCI7IH0gfVxuLmdseXBoaWNvbi1lZGl0ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2NVwiOyB9IH1cbi5nbHlwaGljb24tc2hhcmUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjZcIjsgfSB9XG4uZ2x5cGhpY29uLWNoZWNrICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDY3XCI7IH0gfVxuLmdseXBoaWNvbi1tb3ZlICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA2OFwiOyB9IH1cbi5nbHlwaGljb24tc3RlcC1iYWNrd2FyZCAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNjlcIjsgfSB9XG4uZ2x5cGhpY29uLWZhc3QtYmFja3dhcmQgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDcwXCI7IH0gfVxuLmdseXBoaWNvbi1iYWNrd2FyZCAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3MVwiOyB9IH1cbi5nbHlwaGljb24tcGxheSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzJcIjsgfSB9XG4uZ2x5cGhpY29uLXBhdXNlICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDczXCI7IH0gfVxuLmdseXBoaWNvbi1zdG9wICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3NFwiOyB9IH1cbi5nbHlwaGljb24tZm9yd2FyZCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzVcIjsgfSB9XG4uZ2x5cGhpY29uLWZhc3QtZm9yd2FyZCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDc2XCI7IH0gfVxuLmdseXBoaWNvbi1zdGVwLWZvcndhcmQgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA3N1wiOyB9IH1cbi5nbHlwaGljb24tZWplY3QgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwNzhcIjsgfSB9XG4uZ2x5cGhpY29uLWNoZXZyb24tbGVmdCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDc5XCI7IH0gfVxuLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4MFwiOyB9IH1cbi5nbHlwaGljb24tcGx1cy1zaWduICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODFcIjsgfSB9XG4uZ2x5cGhpY29uLW1pbnVzLXNpZ24gICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDgyXCI7IH0gfVxuLmdseXBoaWNvbi1yZW1vdmUtc2lnbiAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4M1wiOyB9IH1cbi5nbHlwaGljb24tb2stc2lnbiAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODRcIjsgfSB9XG4uZ2x5cGhpY29uLXF1ZXN0aW9uLXNpZ24gICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDg1XCI7IH0gfVxuLmdseXBoaWNvbi1pbmZvLXNpZ24gICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4NlwiOyB9IH1cbi5nbHlwaGljb24tc2NyZWVuc2hvdCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwODdcIjsgfSB9XG4uZ2x5cGhpY29uLXJlbW92ZS1jaXJjbGUgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDg4XCI7IH0gfVxuLmdseXBoaWNvbi1vay1jaXJjbGUgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA4OVwiOyB9IH1cbi5nbHlwaGljb24tYmFuLWNpcmNsZSAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwOTBcIjsgfSB9XG4uZ2x5cGhpY29uLWFycm93LWxlZnQgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDkxXCI7IH0gfVxuLmdseXBoaWNvbi1hcnJvdy1yaWdodCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5MlwiOyB9IH1cbi5nbHlwaGljb24tYXJyb3ctdXAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwOTNcIjsgfSB9XG4uZ2x5cGhpY29uLWFycm93LWRvd24gICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDk0XCI7IH0gfVxuLmdseXBoaWNvbi1zaGFyZS1hbHQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTA5NVwiOyB9IH1cbi5nbHlwaGljb24tcmVzaXplLWZ1bGwgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUwOTZcIjsgfSB9XG4uZ2x5cGhpY29uLXJlc2l6ZS1zbWFsbCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMDk3XCI7IH0gfVxuLmdseXBoaWNvbi1leGNsYW1hdGlvbi1zaWduICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwMVwiOyB9IH1cbi5nbHlwaGljb24tZ2lmdCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDJcIjsgfSB9XG4uZ2x5cGhpY29uLWxlYWYgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTAzXCI7IH0gfVxuLmdseXBoaWNvbi1maXJlICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwNFwiOyB9IH1cbi5nbHlwaGljb24tZXllLW9wZW4gICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDVcIjsgfSB9XG4uZ2x5cGhpY29uLWV5ZS1jbG9zZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTA2XCI7IH0gfVxuLmdseXBoaWNvbi13YXJuaW5nLXNpZ24gICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEwN1wiOyB9IH1cbi5nbHlwaGljb24tcGxhbmUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMDhcIjsgfSB9XG4uZ2x5cGhpY29uLWNhbGVuZGFyICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTA5XCI7IH0gfVxuLmdseXBoaWNvbi1yYW5kb20gICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExMFwiOyB9IH1cbi5nbHlwaGljb24tY29tbWVudCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTFcIjsgfSB9XG4uZ2x5cGhpY29uLW1hZ25ldCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTEyXCI7IH0gfVxuLmdseXBoaWNvbi1jaGV2cm9uLXVwICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExM1wiOyB9IH1cbi5nbHlwaGljb24tY2hldnJvbi1kb3duICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTRcIjsgfSB9XG4uZ2x5cGhpY29uLXJldHdlZXQgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTE1XCI7IH0gfVxuLmdseXBoaWNvbi1zaG9wcGluZy1jYXJ0ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExNlwiOyB9IH1cbi5nbHlwaGljb24tZm9sZGVyLWNsb3NlICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMTdcIjsgfSB9XG4uZ2x5cGhpY29uLWZvbGRlci1vcGVuICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTE4XCI7IH0gfVxuLmdseXBoaWNvbi1yZXNpemUtdmVydGljYWwgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTExOVwiOyB9IH1cbi5nbHlwaGljb24tcmVzaXplLWhvcml6b250YWwgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjBcIjsgfSB9XG4uZ2x5cGhpY29uLWhkZCAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTIxXCI7IH0gfVxuLmdseXBoaWNvbi1idWxsaG9ybiAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyMlwiOyB9IH1cbi5nbHlwaGljb24tYmVsbCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjNcIjsgfSB9XG4uZ2x5cGhpY29uLWNlcnRpZmljYXRlICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTI0XCI7IH0gfVxuLmdseXBoaWNvbi10aHVtYnMtdXAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyNVwiOyB9IH1cbi5nbHlwaGljb24tdGh1bWJzLWRvd24gICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjZcIjsgfSB9XG4uZ2x5cGhpY29uLWhhbmQtcmlnaHQgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTI3XCI7IH0gfVxuLmdseXBoaWNvbi1oYW5kLWxlZnQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEyOFwiOyB9IH1cbi5nbHlwaGljb24taGFuZC11cCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMjlcIjsgfSB9XG4uZ2x5cGhpY29uLWhhbmQtZG93biAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTMwXCI7IH0gfVxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctcmlnaHQgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzMVwiOyB9IH1cbi5nbHlwaGljb24tY2lyY2xlLWFycm93LWxlZnQgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzJcIjsgfSB9XG4uZ2x5cGhpY29uLWNpcmNsZS1hcnJvdy11cCAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTMzXCI7IH0gfVxuLmdseXBoaWNvbi1jaXJjbGUtYXJyb3ctZG93biAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzNFwiOyB9IH1cbi5nbHlwaGljb24tZ2xvYmUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzVcIjsgfSB9XG4uZ2x5cGhpY29uLXdyZW5jaCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTM2XCI7IH0gfVxuLmdseXBoaWNvbi10YXNrcyAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTEzN1wiOyB9IH1cbi5nbHlwaGljb24tZmlsdGVyICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxMzhcIjsgfSB9XG4uZ2x5cGhpY29uLWJyaWVmY2FzZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTM5XCI7IH0gfVxuLmdseXBoaWNvbi1mdWxsc2NyZWVuICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0MFwiOyB9IH1cbi5nbHlwaGljb24tZGFzaGJvYXJkICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDFcIjsgfSB9XG4uZ2x5cGhpY29uLXBhcGVyY2xpcCAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQyXCI7IH0gfVxuLmdseXBoaWNvbi1oZWFydC1lbXB0eSAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0M1wiOyB9IH1cbi5nbHlwaGljb24tbGluayAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDRcIjsgfSB9XG4uZ2x5cGhpY29uLXBob25lICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQ1XCI7IH0gfVxuLmdseXBoaWNvbi1wdXNocGluICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE0NlwiOyB9IH1cbi5nbHlwaGljb24tdXNkICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNDhcIjsgfSB9XG4uZ2x5cGhpY29uLWdicCAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTQ5XCI7IH0gfVxuLmdseXBoaWNvbi1zb3J0ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1MFwiOyB9IH1cbi5nbHlwaGljb24tc29ydC1ieS1hbHBoYWJldCAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTFcIjsgfSB9XG4uZ2x5cGhpY29uLXNvcnQtYnktYWxwaGFiZXQtYWx0ICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTUyXCI7IH0gfVxuLmdseXBoaWNvbi1zb3J0LWJ5LW9yZGVyICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1M1wiOyB9IH1cbi5nbHlwaGljb24tc29ydC1ieS1vcmRlci1hbHQgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTRcIjsgfSB9XG4uZ2x5cGhpY29uLXNvcnQtYnktYXR0cmlidXRlcyAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTU1XCI7IH0gfVxuLmdseXBoaWNvbi1zb3J0LWJ5LWF0dHJpYnV0ZXMtYWx0IHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1NlwiOyB9IH1cbi5nbHlwaGljb24tdW5jaGVja2VkICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNTdcIjsgfSB9XG4uZ2x5cGhpY29uLWV4cGFuZCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTU4XCI7IH0gfVxuLmdseXBoaWNvbi1jb2xsYXBzZS1kb3duICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE1OVwiOyB9IH1cbi5nbHlwaGljb24tY29sbGFwc2UtdXAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjBcIjsgfSB9XG4uZ2x5cGhpY29uLWxvZy1pbiAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTYxXCI7IH0gfVxuLmdseXBoaWNvbi1mbGFzaCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2MlwiOyB9IH1cbi5nbHlwaGljb24tbG9nLW91dCAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjNcIjsgfSB9XG4uZ2x5cGhpY29uLW5ldy13aW5kb3cgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTY0XCI7IH0gfVxuLmdseXBoaWNvbi1yZWNvcmQgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2NVwiOyB9IH1cbi5nbHlwaGljb24tc2F2ZSAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjZcIjsgfSB9XG4uZ2x5cGhpY29uLW9wZW4gICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTY3XCI7IH0gfVxuLmdseXBoaWNvbi1zYXZlZCAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE2OFwiOyB9IH1cbi5nbHlwaGljb24taW1wb3J0ICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNjlcIjsgfSB9XG4uZ2x5cGhpY29uLWV4cG9ydCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTcwXCI7IH0gfVxuLmdseXBoaWNvbi1zZW5kICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3MVwiOyB9IH1cbi5nbHlwaGljb24tZmxvcHB5LWRpc2sgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzJcIjsgfSB9XG4uZ2x5cGhpY29uLWZsb3BweS1zYXZlZCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTczXCI7IH0gfVxuLmdseXBoaWNvbi1mbG9wcHktcmVtb3ZlICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3NFwiOyB9IH1cbi5nbHlwaGljb24tZmxvcHB5LXNhdmUgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzVcIjsgfSB9XG4uZ2x5cGhpY29uLWZsb3BweS1vcGVuICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTc2XCI7IH0gfVxuLmdseXBoaWNvbi1jcmVkaXQtY2FyZCAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE3N1wiOyB9IH1cbi5nbHlwaGljb24tdHJhbnNmZXIgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxNzhcIjsgfSB9XG4uZ2x5cGhpY29uLWN1dGxlcnkgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTc5XCI7IH0gfVxuLmdseXBoaWNvbi1oZWFkZXIgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4MFwiOyB9IH1cbi5nbHlwaGljb24tY29tcHJlc3NlZCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODFcIjsgfSB9XG4uZ2x5cGhpY29uLWVhcnBob25lICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTgyXCI7IH0gfVxuLmdseXBoaWNvbi1waG9uZS1hbHQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4M1wiOyB9IH1cbi5nbHlwaGljb24tdG93ZXIgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODRcIjsgfSB9XG4uZ2x5cGhpY29uLXN0YXRzICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTg1XCI7IH0gfVxuLmdseXBoaWNvbi1zZC12aWRlbyAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4NlwiOyB9IH1cbi5nbHlwaGljb24taGQtdmlkZW8gICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxODdcIjsgfSB9XG4uZ2x5cGhpY29uLXN1YnRpdGxlcyAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTg4XCI7IH0gfVxuLmdseXBoaWNvbi1zb3VuZC1zdGVyZW8gICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE4OVwiOyB9IH1cbi5nbHlwaGljb24tc291bmQtZG9sYnkgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOTBcIjsgfSB9XG4uZ2x5cGhpY29uLXNvdW5kLTUtMSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTkxXCI7IH0gfVxuLmdseXBoaWNvbi1zb3VuZC02LTEgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5MlwiOyB9IH1cbi5nbHlwaGljb24tc291bmQtNy0xICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOTNcIjsgfSB9XG4uZ2x5cGhpY29uLWNvcHlyaWdodC1tYXJrICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTk0XCI7IH0gfVxuLmdseXBoaWNvbi1yZWdpc3RyYXRpb24tbWFyayAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5NVwiOyB9IH1cbi5nbHlwaGljb24tY2xvdWQtZG93bmxvYWQgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUxOTdcIjsgfSB9XG4uZ2x5cGhpY29uLWNsb3VkLXVwbG9hZCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMTk4XCI7IH0gfVxuLmdseXBoaWNvbi10cmVlLWNvbmlmZXIgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTE5OVwiOyB9IH1cbi5nbHlwaGljb24tdHJlZS1kZWNpZHVvdXMgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDBcIjsgfSB9XG4uZ2x5cGhpY29uLWNkICAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjAxXCI7IH0gfVxuLmdseXBoaWNvbi1zYXZlLWZpbGUgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwMlwiOyB9IH1cbi5nbHlwaGljb24tb3Blbi1maWxlICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDNcIjsgfSB9XG4uZ2x5cGhpY29uLWxldmVsLXVwICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjA0XCI7IH0gfVxuLmdseXBoaWNvbi1jb3B5ICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIwNVwiOyB9IH1cbi5nbHlwaGljb24tcGFzdGUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMDZcIjsgfSB9XG4vLyBUaGUgZm9sbG93aW5nIDIgR2x5cGhpY29ucyBhcmUgb21pdHRlZCBmb3IgdGhlIHRpbWUgYmVpbmcgYmVjYXVzZVxuLy8gdGhleSBjdXJyZW50bHkgdXNlIFVuaWNvZGUgY29kZXBvaW50cyB0aGF0IGFyZSBvdXRzaWRlIHRoZVxuLy8gQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIChCTVApLiBPbGRlciBidWdneSB2ZXJzaW9ucyBvZiBXZWJLaXQgY2FuJ3QgaGFuZGxlXG4vLyBub24tQk1QIGNvZGVwb2ludHMgaW4gQ1NTIHN0cmluZyBlc2NhcGVzLCBhbmQgdGh1cyBjYW4ndCBkaXNwbGF5IHRoZXNlIHR3byBpY29ucy5cbi8vIE5vdGFibHksIHRoZSBidWcgYWZmZWN0cyBzb21lIG9sZGVyIHZlcnNpb25zIG9mIHRoZSBBbmRyb2lkIEJyb3dzZXIuXG4vLyBNb3JlIGluZm86IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTAxMDZcbi8vIC5nbHlwaGljb24tZG9vciAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDFmNmFhXCI7IH0gfVxuLy8gLmdseXBoaWNvbi1rZXkgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMWY1MTFcIjsgfSB9XG4uZ2x5cGhpY29uLWFsZXJ0ICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjA5XCI7IH0gfVxuLmdseXBoaWNvbi1lcXVhbGl6ZXIgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxMFwiOyB9IH1cbi5nbHlwaGljb24ta2luZyAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTFcIjsgfSB9XG4uZ2x5cGhpY29uLXF1ZWVuICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjEyXCI7IH0gfVxuLmdseXBoaWNvbi1wYXduICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxM1wiOyB9IH1cbi5nbHlwaGljb24tYmlzaG9wICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMTRcIjsgfSB9XG4uZ2x5cGhpY29uLWtuaWdodCAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjE1XCI7IH0gfVxuLmdseXBoaWNvbi1iYWJ5LWZvcm11bGEgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxNlwiOyB9IH1cbi5nbHlwaGljb24tdGVudCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDI2ZmFcIjsgfSB9XG4uZ2x5cGhpY29uLWJsYWNrYm9hcmQgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjE4XCI7IH0gfVxuLmdseXBoaWNvbi1iZWQgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIxOVwiOyB9IH1cbi5nbHlwaGljb24tYXBwbGUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGY4ZmZcIjsgfSB9XG4uZ2x5cGhpY29uLWVyYXNlICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjIxXCI7IH0gfVxuLmdseXBoaWNvbi1ob3VyZ2xhc3MgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMjMxYlwiOyB9IH1cbi5nbHlwaGljb24tbGFtcCAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjNcIjsgfSB9XG4uZ2x5cGhpY29uLWR1cGxpY2F0ZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjI0XCI7IH0gfVxuLmdseXBoaWNvbi1waWdneS1iYW5rICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIyNVwiOyB9IH1cbi5nbHlwaGljb24tc2Npc3NvcnMgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjZcIjsgfSB9XG4uZ2x5cGhpY29uLWJpdGNvaW4gICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjI3XCI7IH0gfVxuLmdseXBoaWNvbi1idGMgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIyN1wiOyB9IH1cbi5nbHlwaGljb24teGJ0ICAgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMjdcIjsgfSB9XG4uZ2x5cGhpY29uLXllbiAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwwMGE1XCI7IH0gfVxuLmdseXBoaWNvbi1qcHkgICAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcMDBhNVwiOyB9IH1cbi5nbHlwaGljb24tcnVibGUgICAgICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXDIwYmRcIjsgfSB9XG4uZ2x5cGhpY29uLXJ1YiAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFwyMGJkXCI7IH0gfVxuLmdseXBoaWNvbi1zY2FsZSAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzMFwiOyB9IH1cbi5nbHlwaGljb24taWNlLWxvbGx5ICAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzFcIjsgfSB9XG4uZ2x5cGhpY29uLWljZS1sb2xseS10YXN0ZWQgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjMyXCI7IH0gfVxuLmdseXBoaWNvbi1lZHVjYXRpb24gICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzM1wiOyB9IH1cbi5nbHlwaGljb24tb3B0aW9uLWhvcml6b250YWwgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzRcIjsgfSB9XG4uZ2x5cGhpY29uLW9wdGlvbi12ZXJ0aWNhbCAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjM1XCI7IH0gfVxuLmdseXBoaWNvbi1tZW51LWhhbWJ1cmdlciAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzNlwiOyB9IH1cbi5nbHlwaGljb24tbW9kYWwtd2luZG93ICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyMzdcIjsgfSB9XG4uZ2x5cGhpY29uLW9pbCAgICAgICAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjM4XCI7IH0gfVxuLmdseXBoaWNvbi1ncmFpbiAgICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTIzOVwiOyB9IH1cbi5nbHlwaGljb24tc3VuZ2xhc3NlcyAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDBcIjsgfSB9XG4uZ2x5cGhpY29uLXRleHQtc2l6ZSAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQxXCI7IH0gfVxuLmdseXBoaWNvbi10ZXh0LWNvbG9yICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0MlwiOyB9IH1cbi5nbHlwaGljb24tdGV4dC1iYWNrZ3JvdW5kICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDNcIjsgfSB9XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi10b3AgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQ0XCI7IH0gfVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tYm90dG9tICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0NVwiOyB9IH1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLWhvcml6b250YWx7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDZcIjsgfSB9XG4uZ2x5cGhpY29uLW9iamVjdC1hbGlnbi1sZWZ0ICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjQ3XCI7IH0gfVxuLmdseXBoaWNvbi1vYmplY3QtYWxpZ24tdmVydGljYWwgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI0OFwiOyB9IH1cbi5nbHlwaGljb24tb2JqZWN0LWFsaWduLXJpZ2h0ICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNDlcIjsgfSB9XG4uZ2x5cGhpY29uLXRyaWFuZ2xlLXJpZ2h0ICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjUwXCI7IH0gfVxuLmdseXBoaWNvbi10cmlhbmdsZS1sZWZ0ICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1MVwiOyB9IH1cbi5nbHlwaGljb24tdHJpYW5nbGUtYm90dG9tICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTJcIjsgfSB9XG4uZ2x5cGhpY29uLXRyaWFuZ2xlLXRvcCAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjUzXCI7IH0gfVxuLmdseXBoaWNvbi1jb25zb2xlICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1NFwiOyB9IH1cbi5nbHlwaGljb24tc3VwZXJzY3JpcHQgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNTVcIjsgfSB9XG4uZ2x5cGhpY29uLXN1YnNjcmlwdCAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjU2XCI7IH0gfVxuLmdseXBoaWNvbi1tZW51LWxlZnQgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI1N1wiOyB9IH1cbi5nbHlwaGljb24tbWVudS1yaWdodCAgICAgICAgICAgICB7ICY6YmVmb3JlIHsgY29udGVudDogXCJcXGUyNThcIjsgfSB9XG4uZ2x5cGhpY29uLW1lbnUtZG93biAgICAgICAgICAgICAgeyAmOmJlZm9yZSB7IGNvbnRlbnQ6IFwiXFxlMjU5XCI7IH0gfVxuLmdseXBoaWNvbi1tZW51LXVwICAgICAgICAgICAgICAgIHsgJjpiZWZvcmUgeyBjb250ZW50OiBcIlxcZTI2MFwiOyB9IH1cbiIsIi8vXG4vLyBTY2FmZm9sZGluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBSZXNldCB0aGUgYm94LXNpemluZ1xuLy9cbi8vIEhlYWRzIHVwISBUaGlzIHJlc2V0IG1heSBjYXVzZSBjb25mbGljdHMgd2l0aCBzb21lIHRoaXJkLXBhcnR5IHdpZGdldHMuXG4vLyBGb3IgcmVjb21tZW5kYXRpb25zIG9uIHJlc29sdmluZyBzdWNoIGNvbmZsaWN0cywgc2VlXG4vLyBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9nZXR0aW5nLXN0YXJ0ZWQvI3RoaXJkLWJveC1zaXppbmdcbioge1xuICBAaW5jbHVkZSBib3gtc2l6aW5nKGJvcmRlci1ib3gpO1xufVxuKjpiZWZvcmUsXG4qOmFmdGVyIHtcbiAgQGluY2x1ZGUgYm94LXNpemluZyhib3JkZXItYm94KTtcbn1cblxuXG4vLyBCb2R5IHJlc2V0XG5cbmh0bWwge1xuICBmb250LXNpemU6IDEwcHg7XG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLDAsMCwwKTtcbn1cblxuYm9keSB7XG4gIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktYmFzZTtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLWJhc2U7XG4gIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgY29sb3I6ICR0ZXh0LWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYm9keS1iZztcbn1cblxuLy8gUmVzZXQgZm9udHMgZm9yIHJlbGV2YW50IGVsZW1lbnRzXG5pbnB1dCxcbmJ1dHRvbixcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG59XG5cblxuLy8gTGlua3NcblxuYSB7XG4gIGNvbG9yOiAkbGluay1jb2xvcjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiAkbGluay1ob3Zlci1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246ICRsaW5rLWhvdmVyLWRlY29yYXRpb247XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBAaW5jbHVkZSB0YWItZm9jdXM7XG4gIH1cbn1cblxuXG4vLyBGaWd1cmVzXG4vL1xuLy8gV2UgcmVzZXQgdGhpcyBoZXJlIGJlY2F1c2UgcHJldmlvdXNseSBOb3JtYWxpemUgaGFkIG5vIGBmaWd1cmVgIG1hcmdpbnMuIFRoaXNcbi8vIGVuc3VyZXMgd2UgZG9uJ3QgYnJlYWsgYW55b25lJ3MgdXNlIG9mIHRoZSBlbGVtZW50LlxuXG5maWd1cmUge1xuICBtYXJnaW46IDA7XG59XG5cblxuLy8gSW1hZ2VzXG5cbmltZyB7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi8vIFJlc3BvbnNpdmUgaW1hZ2VzIChlbnN1cmUgaW1hZ2VzIGRvbid0IHNjYWxlIGJleW9uZCB0aGVpciBwYXJlbnRzKVxuLmltZy1yZXNwb25zaXZlIHtcbiAgQGluY2x1ZGUgaW1nLXJlc3BvbnNpdmU7XG59XG5cbi8vIFJvdW5kZWQgY29ybmVyc1xuLmltZy1yb3VuZGVkIHtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtbGFyZ2U7XG59XG5cbi8vIEltYWdlIHRodW1ibmFpbHNcbi8vXG4vLyBIZWFkcyB1cCEgVGhpcyBpcyBtaXhpbi1lZCBpbnRvIHRodW1ibmFpbHMubGVzcyBmb3IgYC50aHVtYm5haWxgLlxuLmltZy10aHVtYm5haWwge1xuICBwYWRkaW5nOiAkdGh1bWJuYWlsLXBhZGRpbmc7XG4gIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHRodW1ibmFpbC1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgJHRodW1ibmFpbC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICR0aHVtYm5haWwtYm9yZGVyLXJhZGl1cztcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbihhbGwgLjJzIGVhc2UtaW4tb3V0KTtcblxuICAvLyBLZWVwIHRoZW0gYXQgbW9zdCAxMDAlIHdpZGVcbiAgQGluY2x1ZGUgaW1nLXJlc3BvbnNpdmUoaW5saW5lLWJsb2NrKTtcbn1cblxuLy8gUGVyZmVjdCBjaXJjbGVcbi5pbWctY2lyY2xlIHtcbiAgYm9yZGVyLXJhZGl1czogNTAlOyAvLyBzZXQgcmFkaXVzIGluIHBlcmNlbnRzXG59XG5cblxuLy8gSG9yaXpvbnRhbCBydWxlc1xuXG5ociB7XG4gIG1hcmdpbi10b3A6ICAgICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgbWFyZ2luLWJvdHRvbTogJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAkaHItYm9yZGVyO1xufVxuXG5cbi8vIE9ubHkgZGlzcGxheSBjb250ZW50IHRvIHNjcmVlbiByZWFkZXJzXG4vL1xuLy8gU2VlOiBodHRwOi8vYTExeXByb2plY3QuY29tL3Bvc3RzL2hvdy10by1oaWRlLWNvbnRlbnQvXG5cbi5zci1vbmx5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMXB4O1xuICBoZWlnaHQ6IDFweDtcbiAgbWFyZ2luOiAtMXB4O1xuICBwYWRkaW5nOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjbGlwOiByZWN0KDAsMCwwLDApO1xuICBib3JkZXI6IDA7XG59XG5cbi8vIFVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIC5zci1vbmx5IHRvIG9ubHkgZGlzcGxheSBjb250ZW50IHdoZW4gaXQncyBmb2N1c2VkLlxuLy8gVXNlZnVsIGZvciBcIlNraXAgdG8gbWFpbiBjb250ZW50XCIgbGlua3M7IHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL05PVEUtV0NBRzIwLVRFQ0hTLTIwMTMwOTA1L0cxXG4vLyBDcmVkaXQ6IEhUTUw1IEJvaWxlcnBsYXRlXG5cbi5zci1vbmx5LWZvY3VzYWJsZSB7XG4gICY6YWN0aXZlLFxuICAmOmZvY3VzIHtcbiAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGhlaWdodDogYXV0bztcbiAgICBtYXJnaW46IDA7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgY2xpcDogYXV0bztcbiAgfVxufVxuXG5cbi8vIGlPUyBcImNsaWNrYWJsZSBlbGVtZW50c1wiIGZpeCBmb3Igcm9sZT1cImJ1dHRvblwiXG4vL1xuLy8gRml4ZXMgXCJjbGlja2FiaWxpdHlcIiBpc3N1ZSAoYW5kIG1vcmUgZ2VuZXJhbGx5LCB0aGUgZmlyaW5nIG9mIGV2ZW50cyBzdWNoIGFzIGZvY3VzIGFzIHdlbGwpXG4vLyBmb3IgdHJhZGl0aW9uYWxseSBub24tZm9jdXNhYmxlIGVsZW1lbnRzIHdpdGggcm9sZT1cImJ1dHRvblwiXG4vLyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL2NsaWNrI1NhZmFyaV9Nb2JpbGVcblxuW3JvbGU9XCJidXR0b25cIl0ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG4iLCIvLyBWZW5kb3IgUHJlZml4ZXNcbi8vXG4vLyBBbGwgdmVuZG9yIG1peGlucyBhcmUgZGVwcmVjYXRlZCBhcyBvZiB2My4yLjAgZHVlIHRvIHRoZSBpbnRyb2R1Y3Rpb24gb2Zcbi8vIEF1dG9wcmVmaXhlciBpbiBvdXIgR3J1bnRmaWxlLiBUaGV5IHdpbGwgYmUgcmVtb3ZlZCBpbiB2NC5cblxuLy8gLSBBbmltYXRpb25zXG4vLyAtIEJhY2tmYWNlIHZpc2liaWxpdHlcbi8vIC0gQm94IHNoYWRvd1xuLy8gLSBCb3ggc2l6aW5nXG4vLyAtIENvbnRlbnQgY29sdW1uc1xuLy8gLSBIeXBoZW5zXG4vLyAtIFBsYWNlaG9sZGVyIHRleHRcbi8vIC0gVHJhbnNmb3JtYXRpb25zXG4vLyAtIFRyYW5zaXRpb25zXG4vLyAtIFVzZXIgU2VsZWN0XG5cblxuLy8gQW5pbWF0aW9uc1xuQG1peGluIGFuaW1hdGlvbigkYW5pbWF0aW9uKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uOiAkYW5pbWF0aW9uO1xuICAgICAgIC1vLWFuaW1hdGlvbjogJGFuaW1hdGlvbjtcbiAgICAgICAgICBhbmltYXRpb246ICRhbmltYXRpb247XG59XG5AbWl4aW4gYW5pbWF0aW9uLW5hbWUoJG5hbWUpIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogJG5hbWU7XG4gICAgICAgICAgYW5pbWF0aW9uLW5hbWU6ICRuYW1lO1xufVxuQG1peGluIGFuaW1hdGlvbi1kdXJhdGlvbigkZHVyYXRpb24pIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246ICRkdXJhdGlvbjtcbiAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246ICRkdXJhdGlvbjtcbn1cbkBtaXhpbiBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uKCR0aW1pbmctZnVuY3Rpb24pIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkdGltaW5nLWZ1bmN0aW9uO1xuICAgICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR0aW1pbmctZnVuY3Rpb247XG59XG5AbWl4aW4gYW5pbWF0aW9uLWRlbGF5KCRkZWxheSkge1xuICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogJGRlbGF5O1xuICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogJGRlbGF5O1xufVxuQG1peGluIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQoJGl0ZXJhdGlvbi1jb3VudCkge1xuICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6ICRpdGVyYXRpb24tY291bnQ7XG4gICAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogJGl0ZXJhdGlvbi1jb3VudDtcbn1cbkBtaXhpbiBhbmltYXRpb24tZGlyZWN0aW9uKCRkaXJlY3Rpb24pIHtcbiAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiAkZGlyZWN0aW9uO1xuICAgICAgICAgIGFuaW1hdGlvbi1kaXJlY3Rpb246ICRkaXJlY3Rpb247XG59XG5AbWl4aW4gYW5pbWF0aW9uLWZpbGwtbW9kZSgkZmlsbC1tb2RlKSB7XG4gIC13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTogJGZpbGwtbW9kZTtcbiAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiAkZmlsbC1tb2RlO1xufVxuXG4vLyBCYWNrZmFjZSB2aXNpYmlsaXR5XG4vLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gZmxpY2tlcmluZyB3aGVuIHVzaW5nIENTUyAzRCB0cmFuc2Zvcm1zLlxuLy8gRGVmYXVsdCB2YWx1ZSBpcyBgdmlzaWJsZWAsIGJ1dCBjYW4gYmUgY2hhbmdlZCB0byBgaGlkZGVuYFxuXG5AbWl4aW4gYmFja2ZhY2UtdmlzaWJpbGl0eSgkdmlzaWJpbGl0eSl7XG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogJHZpc2liaWxpdHk7XG4gICAgIC1tb3otYmFja2ZhY2UtdmlzaWJpbGl0eTogJHZpc2liaWxpdHk7XG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogJHZpc2liaWxpdHk7XG59XG5cbi8vIERyb3Agc2hhZG93c1xuLy9cbi8vIE5vdGU6IERlcHJlY2F0ZWQgYC5ib3gtc2hhZG93KClgIGFzIG9mIHYzLjEuMCBzaW5jZSBhbGwgb2YgQm9vdHN0cmFwJ3Ncbi8vIHN1cHBvcnRlZCBicm93c2VycyB0aGF0IGhhdmUgYm94IHNoYWRvdyBjYXBhYmlsaXRpZXMgbm93IHN1cHBvcnQgaXQuXG5cbkBtaXhpbiBib3gtc2hhZG93KCRzaGFkb3cuLi4pIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAkc2hhZG93OyAvLyBpT1MgPDQuMyAmIEFuZHJvaWQgPDQuMVxuICAgICAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3c7XG59XG5cbi8vIEJveCBzaXppbmdcbkBtaXhpbiBib3gtc2l6aW5nKCRib3htb2RlbCkge1xuICAtd2Via2l0LWJveC1zaXppbmc6ICRib3htb2RlbDtcbiAgICAgLW1vei1ib3gtc2l6aW5nOiAkYm94bW9kZWw7XG4gICAgICAgICAgYm94LXNpemluZzogJGJveG1vZGVsO1xufVxuXG4vLyBDU1MzIENvbnRlbnQgQ29sdW1uc1xuQG1peGluIGNvbnRlbnQtY29sdW1ucygkY29sdW1uLWNvdW50LCAkY29sdW1uLWdhcDogJGdyaWQtZ3V0dGVyLXdpZHRoKSB7XG4gIC13ZWJraXQtY29sdW1uLWNvdW50OiAkY29sdW1uLWNvdW50O1xuICAgICAtbW96LWNvbHVtbi1jb3VudDogJGNvbHVtbi1jb3VudDtcbiAgICAgICAgICBjb2x1bW4tY291bnQ6ICRjb2x1bW4tY291bnQ7XG4gIC13ZWJraXQtY29sdW1uLWdhcDogJGNvbHVtbi1nYXA7XG4gICAgIC1tb3otY29sdW1uLWdhcDogJGNvbHVtbi1nYXA7XG4gICAgICAgICAgY29sdW1uLWdhcDogJGNvbHVtbi1nYXA7XG59XG5cbi8vIE9wdGlvbmFsIGh5cGhlbmF0aW9uXG5AbWl4aW4gaHlwaGVucygkbW9kZTogYXV0bykge1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIC13ZWJraXQtaHlwaGVuczogJG1vZGU7XG4gICAgIC1tb3otaHlwaGVuczogJG1vZGU7XG4gICAgICAtbXMtaHlwaGVuczogJG1vZGU7IC8vIElFMTArXG4gICAgICAgLW8taHlwaGVuczogJG1vZGU7XG4gICAgICAgICAgaHlwaGVuczogJG1vZGU7XG59XG5cbi8vIFBsYWNlaG9sZGVyIHRleHRcbkBtaXhpbiBwbGFjZWhvbGRlcigkY29sb3I6ICRpbnB1dC1jb2xvci1wbGFjZWhvbGRlcikge1xuICAvLyBGaXJlZm94XG4gICY6Oi1tb3otcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkY29sb3I7XG4gICAgb3BhY2l0eTogMTsgLy8gT3ZlcnJpZGUgRmlyZWZveCdzIHVudXN1YWwgZGVmYXVsdCBvcGFjaXR5OyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL3B1bGwvMTE1MjZcbiAgfVxuICAmOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7IGNvbG9yOiAkY29sb3I7IH0gLy8gSW50ZXJuZXQgRXhwbG9yZXIgMTArXG4gICY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgIHsgY29sb3I6ICRjb2xvcjsgfSAvLyBTYWZhcmkgYW5kIENocm9tZVxufVxuXG4vLyBUcmFuc2Zvcm1hdGlvbnNcbkBtaXhpbiBzY2FsZSgkcmF0aW8uLi4pIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKCRyYXRpbyk7XG4gICAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgkcmF0aW8pOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogc2NhbGUoJHJhdGlvKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKCRyYXRpbyk7XG59XG5cbkBtaXhpbiBzY2FsZVgoJHJhdGlvKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoJHJhdGlvKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlWCgkcmF0aW8pOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogc2NhbGVYKCRyYXRpbyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoJHJhdGlvKTtcbn1cbkBtaXhpbiBzY2FsZVkoJHJhdGlvKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVkoJHJhdGlvKTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHNjYWxlWSgkcmF0aW8pOyAvLyBJRTkgb25seVxuICAgICAgIC1vLXRyYW5zZm9ybTogc2NhbGVZKCRyYXRpbyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVkoJHJhdGlvKTtcbn1cbkBtaXhpbiBza2V3KCR4LCAkeSkge1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2tld1goJHgpIHNrZXdZKCR5KTtcbiAgICAgIC1tcy10cmFuc2Zvcm06IHNrZXdYKCR4KSBza2V3WSgkeSk7IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzQ4ODU7IElFOStcbiAgICAgICAtby10cmFuc2Zvcm06IHNrZXdYKCR4KSBza2V3WSgkeSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiBza2V3WCgkeCkgc2tld1koJHkpO1xufVxuQG1peGluIHRyYW5zbGF0ZSgkeCwgJHkpIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgkeCwgJHkpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKCR4LCAkeSk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUoJHgsICR5KTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgkeCwgJHkpO1xufVxuQG1peGluIHRyYW5zbGF0ZTNkKCR4LCAkeSwgJHopIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKCR4LCAkeSwgJHopO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoJHgsICR5LCAkeik7XG59XG5AbWl4aW4gcm90YXRlKCRkZWdyZWVzKSB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoJGRlZ3JlZXMpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlKCRkZWdyZWVzKTsgLy8gSUU5IG9ubHlcbiAgICAgICAtby10cmFuc2Zvcm06IHJvdGF0ZSgkZGVncmVlcyk7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJGRlZ3JlZXMpO1xufVxuQG1peGluIHJvdGF0ZVgoJGRlZ3JlZXMpIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZVgoJGRlZ3JlZXMpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlWCgkZGVncmVlcyk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiByb3RhdGVYKCRkZWdyZWVzKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoJGRlZ3JlZXMpO1xufVxuQG1peGluIHJvdGF0ZVkoJGRlZ3JlZXMpIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZVkoJGRlZ3JlZXMpO1xuICAgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlWSgkZGVncmVlcyk7IC8vIElFOSBvbmx5XG4gICAgICAgLW8tdHJhbnNmb3JtOiByb3RhdGVZKCRkZWdyZWVzKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVkoJGRlZ3JlZXMpO1xufVxuQG1peGluIHBlcnNwZWN0aXZlKCRwZXJzcGVjdGl2ZSkge1xuICAtd2Via2l0LXBlcnNwZWN0aXZlOiAkcGVyc3BlY3RpdmU7XG4gICAgIC1tb3otcGVyc3BlY3RpdmU6ICRwZXJzcGVjdGl2ZTtcbiAgICAgICAgICBwZXJzcGVjdGl2ZTogJHBlcnNwZWN0aXZlO1xufVxuQG1peGluIHBlcnNwZWN0aXZlLW9yaWdpbigkcGVyc3BlY3RpdmUpIHtcbiAgLXdlYmtpdC1wZXJzcGVjdGl2ZS1vcmlnaW46ICRwZXJzcGVjdGl2ZTtcbiAgICAgLW1vei1wZXJzcGVjdGl2ZS1vcmlnaW46ICRwZXJzcGVjdGl2ZTtcbiAgICAgICAgICBwZXJzcGVjdGl2ZS1vcmlnaW46ICRwZXJzcGVjdGl2ZTtcbn1cbkBtaXhpbiB0cmFuc2Zvcm0tb3JpZ2luKCRvcmlnaW4pIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiAkb3JpZ2luO1xuICAgICAtbW96LXRyYW5zZm9ybS1vcmlnaW46ICRvcmlnaW47XG4gICAgICAtbXMtdHJhbnNmb3JtLW9yaWdpbjogJG9yaWdpbjsgLy8gSUU5IG9ubHlcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAkb3JpZ2luO1xufVxuXG5cbi8vIFRyYW5zaXRpb25zXG5cbkBtaXhpbiB0cmFuc2l0aW9uKCR0cmFuc2l0aW9uLi4uKSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogJHRyYW5zaXRpb247XG4gICAgICAgLW8tdHJhbnNpdGlvbjogJHRyYW5zaXRpb247XG4gICAgICAgICAgdHJhbnNpdGlvbjogJHRyYW5zaXRpb247XG59XG5AbWl4aW4gdHJhbnNpdGlvbi1wcm9wZXJ0eSgkdHJhbnNpdGlvbi1wcm9wZXJ0eS4uLikge1xuICAtd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6ICR0cmFuc2l0aW9uLXByb3BlcnR5O1xuICAgICAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6ICR0cmFuc2l0aW9uLXByb3BlcnR5O1xufVxuQG1peGluIHRyYW5zaXRpb24tZGVsYXkoJHRyYW5zaXRpb24tZGVsYXkpIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiAkdHJhbnNpdGlvbi1kZWxheTtcbiAgICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAkdHJhbnNpdGlvbi1kZWxheTtcbn1cbkBtaXhpbiB0cmFuc2l0aW9uLWR1cmF0aW9uKCR0cmFuc2l0aW9uLWR1cmF0aW9uLi4uKSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogJHRyYW5zaXRpb24tZHVyYXRpb247XG4gICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogJHRyYW5zaXRpb24tZHVyYXRpb247XG59XG5AbWl4aW4gdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24oJHRpbWluZy1mdW5jdGlvbikge1xuICAtd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkdGltaW5nLWZ1bmN0aW9uO1xuICAgICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkdGltaW5nLWZ1bmN0aW9uO1xufVxuQG1peGluIHRyYW5zaXRpb24tdHJhbnNmb3JtKCR0cmFuc2l0aW9uLi4uKSB7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gJHRyYW5zaXRpb247XG4gICAgIC1tb3otdHJhbnNpdGlvbjogLW1vei10cmFuc2Zvcm0gJHRyYW5zaXRpb247XG4gICAgICAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtICR0cmFuc2l0aW9uO1xuICAgICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAkdHJhbnNpdGlvbjtcbn1cblxuXG4vLyBVc2VyIHNlbGVjdFxuLy8gRm9yIHNlbGVjdGluZyB0ZXh0IG9uIHRoZSBwYWdlXG5cbkBtaXhpbiB1c2VyLXNlbGVjdCgkc2VsZWN0KSB7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6ICRzZWxlY3Q7XG4gICAgIC1tb3otdXNlci1zZWxlY3Q6ICRzZWxlY3Q7XG4gICAgICAtbXMtdXNlci1zZWxlY3Q6ICRzZWxlY3Q7IC8vIElFMTArXG4gICAgICAgICAgdXNlci1zZWxlY3Q6ICRzZWxlY3Q7XG59XG4iLCIkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyOiBmYWxzZSAhZGVmYXVsdDtcbi8vXG4vLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRraW1jaGktbG9nbzogXCIuLi9pbWFnZXMvbG9nby13aGl0ZS5wbmdcIjtcbiRpY29uLWZvbnQtcGF0aDogJy4uL2ZvbnRzLyc7XG5cbi8vPT0gQ29sb3JzXG4vL1xuLy8jIyBHcmF5IGFuZCBicmFuZCBjb2xvcnMgZm9yIHVzZSBhY3Jvc3MgQm9vdHN0cmFwLlxuXG4kZ3JheS1iYXNlOiAgICAgICAgICAgICAgIzAwMCAhZGVmYXVsdDtcbiRncmF5LWRhcmtlcjogICAgICAgICAgICAjMjIyICFkZWZhdWx0O1xuJGdyYXktZGFyazogICAgICAgICAgICAgICAkZ3JheS1kYXJrZXIgIWRlZmF1bHQ7XG4kZ3JheTogICAgICAgICAgICAgICAgICAgICAgIzQ0NCAhZGVmYXVsdDtcbiRncmF5LWxpZ2h0OiAgICAgICAgICAgICAgICM5OTkgIWRlZmF1bHQ7XG4kZ3JheS1saWdodGVyOiAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG5cbiRicmFuZC1wcmltYXJ5OiAgICAgICAgICMzYTM5M2IgIWRlZmF1bHQ7IC8vICMzYTM5M2JcbiRicmFuZC1zdWNjZXNzOiAgICAgICAgICM1Y2I4NWMgIWRlZmF1bHQ7XG4kYnJhbmQtaW5mbzogICAgICAgICAgICAjNWJjMGRlICFkZWZhdWx0O1xuJGJyYW5kLXdhcm5pbmc6ICAgICAgICAgI2YwYWQ0ZSAhZGVmYXVsdDtcbiRicmFuZC1kYW5nZXI6ICAgICAgICAgICNkOTUzNGYgIWRlZmF1bHQ7XG4ka2ltY2hpLWRyb3Bkb3duOiAgICAgICM0ZDRjNGUgIWRlZmF1bHQ7XG5cblxuLy8jIyBLaW1jaGkgZGVmYXVsdCBjb2xvcnNcblxuJGhvc3RzLWNvbG9yOiAgICAgICAgICAgICAgICAjMDA4YWJmICFkZWZhdWx0O1xuJGd1ZXN0cy1jb2xvcjogICAgICAgICAgICAgICM4Y2M2M2YgIWRlZmF1bHQ7XG4kdGVtcGxhdGVzLWNvbG9yOiAgICAgICAgICMwMGE2YTAgIWRlZmF1bHQ7XG4kc3RvcmFnZS1jb2xvcjogICAgICAgICAgICAgI2ZlYjgxMyAhZGVmYXVsdDtcbiRuZXR3b3Jrcy1jb2xvcjogICAgICAgICAgICM3ZjFjN2QgIWRlZmF1bHQ7XG4kYWRtaW5pc3RyYXRpb24tY29sb3I6ICAgICNkOTE4MmQgIWRlZmF1bHQ7XG5cbi8vPT0gU2NhZmZvbGRpbmdcbi8vXG4vLyMjIFNldHRpbmdzIGZvciBzb21lIG9mIHRoZSBtb3N0IGdsb2JhbCBzdHlsZXMuXG5cbi8vKiogQmFja2dyb3VuZCBjb2xvciBmb3IgYDxib2R5PmAuXG4kYm9keS1iZzogICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuLy8qKiBHbG9iYWwgdGV4dCBjb2xvciBvbiBgPGJvZHk+YC5cbiR0ZXh0LWNvbG9yOiAgICAgICAgICAgICRncmF5LWRhcmtlciAhZGVmYXVsdDtcbiRoaWdobGlnaHRzLWNvbG9yOiAgICAgI2ZmZiAhZGVmYXVsdDtcbiRkaXNhYmxlZC1jb2xvcjogICAgICAgIzk5OSAhZGVmYXVsdDtcblxuLy8qKiBHbG9iYWwgdGV4dHVhbCBsaW5rIGNvbG9yLlxuJGxpbmstY29sb3I6ICAgICAgICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG4vLyoqIExpbmsgaG92ZXIgY29sb3Igc2V0IHZpYSBgZGFya2VuKClgIGZ1bmN0aW9uLlxuJGxpbmstaG92ZXItY29sb3I6ICAgICAgZGFya2VuKCRsaW5rLWNvbG9yLCAxNSUpICFkZWZhdWx0O1xuLy8qKiBMaW5rIGhvdmVyIGRlY29yYXRpb24uXG4kbGluay1ob3Zlci1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgIWRlZmF1bHQ7XG5cblxuLy89PSBUeXBvZ3JhcGh5XG4vL1xuLy8jIyBGb250LCBsaW5lLWhlaWdodCwgYW5kIGNvbG9yIGZvciBib2R5IHRleHQsIGhlYWRpbmdzLCBhbmQgbW9yZS5cblxuJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWY6ICBcIkhlbHZldGljYU5ldWVNZWRpdW1cIiwgXCJIZWx2ZXRpY2FOZXVlLU1lZGl1bVwiLCBcIkhlbHZldGljYSBOZXVlIE1lZGl1bVwiLCBcIkhlbHZldGljYU5ldWVcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBcIkx1Y2lkYSBHcmFuZGVcIiwgc2Fucy1zZXJpZiAhZGVmYXVsdDtcbiRmb250LWZhbWlseS1zZXJpZjogICAgICAgR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiwgVGltZXMsIHNlcmlmICFkZWZhdWx0O1xuLy8qKiBEZWZhdWx0IG1vbm9zcGFjZSBmb250cyBmb3IgYDxjb2RlPmAsIGA8a2JkPmAsIGFuZCBgPHByZT5gLlxuJGZvbnQtZmFtaWx5LW1vbm9zcGFjZTogICBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2UgIWRlZmF1bHQ7XG4kZm9udC1mYW1pbHktYmFzZTogICAgICAgICRmb250LWZhbWlseS1zYW5zLXNlcmlmICFkZWZhdWx0O1xuJGZvbnQtZmFtaWx5LWxpZ2h0OiAgICBcIkhlbHZldGljYU5ldWVMaWdodFwiLCBcIkhlbHZldGljYU5ldWUtTGlnaHRcIiwgXCJIZWx2ZXRpY2FOZXVlIExpZ2h0XCIsIFwiSGVsdmV0aWNhTmV1ZVwiLCBcIkhlbHZldGljYU5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgXCJMdWNpZGEgR3JhbmRlXCIsIHNhbnMtc2VyaWYgIWRlZmF1bHQ7XG4kZm9udC1mYW1pbHktYm9sZDogICAgXCJIZWx2ZXRpY2FOZXVlQm9sZFwiLCBcIkhlbHZldGljYU5ldWUtQm9sZFwiLCBcIkhlbHZldGljYU5ldWUgQm9sZFwiLCBcIkhlbHZldGljYSBOZXVlIEJvbGRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBcIkhlbHZldGljYU5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgXCJMdWNpZGEgR3JhbmRlXCIsIHNhbnMtc2VyaWYgIWRlZmF1bHQ7XG4kZm9udC1mYW1pbHktYWx0ZXJuYXRlOiAgXCJIZWx2ZXRpY2EgTmV1ZSBMVCBXMUcgNTUgUm9tYW5cIiwgXCJIZWx2ZXRpY2EgTmV1ZSBMVCBXMUdcIiwgXCJIZWx2ZXRpY2FOZXVlIFJvbWFuXCIsIFwiSGVsdmV0aWNhTmV1ZS1Sb21hblwiLCBcIkhlbHZldGljYSBOZXVlIFJvbWFuXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgXCJIZWx2ZXRpY2FOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIFwiTHVjaWRhIEdyYW5kZVwiLCBzYW5zLXNlcmlmICFkZWZhdWx0O1xuXG5cbiRmb250LXNpemUtYmFzZTogICAgICAgICAgMTRweCAhZGVmYXVsdDtcbiRmb250LXNpemUtbGFyZ2U6ICAgICAgICAgY2VpbCgoJGZvbnQtc2l6ZS1iYXNlICogMS4yNSkpICFkZWZhdWx0OyAvLyB+MThweFxuJGZvbnQtc2l6ZS1zbWFsbDogICAgICAgICBjZWlsKCgkZm9udC1zaXplLWJhc2UgKiAwLjg1KSkgIWRlZmF1bHQ7IC8vIH4xMnB4XG4kZm9udC1zaXplLWJ0bjogICAgICAgICAgICAgMTMuNXB0O1xuXG4kZm9udC1zaXplLWgxOiAgICAgICAgICAgIDEuNTcxZW0gIWRlZmF1bHQ7XG4kZm9udC1zaXplLWgyOiAgICAgICAgICAgIDIycHggIWRlZmF1bHQ7XG4kZm9udC1zaXplLWgzOiAgICAgICAgICAgIDE3cHggIWRlZmF1bHQ7XG4kZm9udC1zaXplLWg0OiAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAhZGVmYXVsdDtcbiRmb250LXNpemUtaDU6ICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICFkZWZhdWx0O1xuJGZvbnQtc2l6ZS1oNjogICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgIWRlZmF1bHQ7XG5cbi8vKiogVW5pdC1sZXNzIGBsaW5lLWhlaWdodGAgZm9yIHVzZSBpbiBjb21wb25lbnRzIGxpa2UgYnV0dG9ucy5cbiRsaW5lLWhlaWdodC1iYXNlOiAgICAgICAgMS40Mjg1NzE0MjkgIWRlZmF1bHQ7IC8vIDIwLzE0XG4vLyoqIENvbXB1dGVkIFwibGluZS1oZWlnaHRcIiAoYGZvbnQtc2l6ZWAgKiBgbGluZS1oZWlnaHRgKSBmb3IgdXNlIHdpdGggYG1hcmdpbmAsIGBwYWRkaW5nYCwgZXRjLlxuJGxpbmUtaGVpZ2h0LWNvbXB1dGVkOiAgICBmbG9vcigoJGZvbnQtc2l6ZS1iYXNlICogJGxpbmUtaGVpZ2h0LWJhc2UpKSAhZGVmYXVsdDsgLy8gfjIwcHhcblxuLy8qKiBCeSBkZWZhdWx0LCB0aGlzIGluaGVyaXRzIGZyb20gdGhlIGA8Ym9keT5gLlxuJGhlYWRpbmdzLWZvbnQtZmFtaWx5OiAgICBpbmhlcml0ICFkZWZhdWx0O1xuJGhlYWRpbmdzLWZvbnQtd2VpZ2h0OiAgICA1MDAgIWRlZmF1bHQ7XG4kaGVhZGluZ3MtbGluZS1oZWlnaHQ6ICAgIDEuMSAhZGVmYXVsdDtcbiRoZWFkaW5ncy1jb2xvcjogICAgICAgICAgaW5oZXJpdCAhZGVmYXVsdDtcblxuXG4vLz09IEljb25vZ3JhcGh5XG4vL1xuLy8jIyBTcGVjaWZ5IGN1c3RvbSBsb2NhdGlvbiBhbmQgZmlsZW5hbWUgb2YgdGhlIGluY2x1ZGVkIEdseXBoaWNvbnMgaWNvbiBmb250LiBVc2VmdWwgZm9yIHRob3NlIGluY2x1ZGluZyBCb290c3RyYXAgdmlhIEJvd2VyLlxuXG4vLyoqIExvYWQgZm9udHMgZnJvbSB0aGlzIGRpcmVjdG9yeS5cblxuLy8gW2NvbnZlcnRlcl0gSWYgJGJvb3RzdHJhcC1zYXNzLWFzc2V0LWhlbHBlciBpZiB1c2VkLCBwcm92aWRlIHBhdGggcmVsYXRpdmUgdG8gdGhlIGFzc2V0cyBsb2FkIHBhdGguXG4vLyBbY29udmVydGVyXSBUaGlzIGlzIGJlY2F1c2Ugc29tZSBhc3NldCBoZWxwZXJzLCBzdWNoIGFzIFNwcm9ja2V0cywgZG8gbm90IHdvcmsgd2l0aCBmaWxlLXJlbGF0aXZlIHBhdGhzLlxuJGljb24tZm9udC1wYXRoOiBpZigkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyLCBcImJvb3RzdHJhcC9cIiwgXCIuLi9mb250cy9ib290c3RyYXAvXCIpICFkZWZhdWx0O1xuXG4vLyoqIEZpbGUgbmFtZSBmb3IgYWxsIGZvbnQgZmlsZXMuXG4kaWNvbi1mb250LW5hbWU6ICAgICAgICAgIFwiZ2x5cGhpY29ucy1oYWxmbGluZ3MtcmVndWxhclwiICFkZWZhdWx0O1xuLy8qKiBFbGVtZW50IElEIHdpdGhpbiBTVkcgaWNvbiBmaWxlLlxuJGljb24tZm9udC1zdmctaWQ6ICAgICAgICBcImdseXBoaWNvbnNfaGFsZmxpbmdzcmVndWxhclwiICFkZWZhdWx0O1xuXG5cbi8vPT0gQ29tcG9uZW50c1xuLy9cbi8vIyMgRGVmaW5lIGNvbW1vbiBwYWRkaW5nIGFuZCBib3JkZXIgcmFkaXVzIHNpemVzIGFuZCBtb3JlLiBWYWx1ZXMgYmFzZWQgb24gMTRweCB0ZXh0IGFuZCAxLjQyOCBsaW5lLWhlaWdodCAofjIwcHggdG8gc3RhcnQpLlxuXG4kcGFkZGluZy1iYXNlLXZlcnRpY2FsOiAgICAgNnB4ICFkZWZhdWx0O1xuJHBhZGRpbmctYmFzZS1ob3Jpem9udGFsOiAgIDEycHggIWRlZmF1bHQ7XG5cbiRwYWRkaW5nLWxhcmdlLXZlcnRpY2FsOiAgICAxMHB4ICFkZWZhdWx0O1xuJHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbDogIDE2cHggIWRlZmF1bHQ7XG5cbiRwYWRkaW5nLXNtYWxsLXZlcnRpY2FsOiAgICA1cHggIWRlZmF1bHQ7XG4kcGFkZGluZy1zbWFsbC1ob3Jpem9udGFsOiAgMTBweCAhZGVmYXVsdDtcblxuJHBhZGRpbmcteHMtdmVydGljYWw6ICAgICAgIDFweCAhZGVmYXVsdDtcbiRwYWRkaW5nLXhzLWhvcml6b250YWw6ICAgICA1cHggIWRlZmF1bHQ7XG5cbiRsaW5lLWhlaWdodC1sYXJnZTogICAgICAgICAxLjMzMzMzMzMgIWRlZmF1bHQ7IC8vIGV4dHJhIGRlY2ltYWxzIGZvciBXaW4gOC4xIENocm9tZVxuJGxpbmUtaGVpZ2h0LXNtYWxsOiAgICAgICAgIDEuNSAhZGVmYXVsdDtcblxuJGJvcmRlci1yYWRpdXMtYmFzZTogICAgICAgIDNweCAhZGVmYXVsdDtcbiRib3JkZXItcmFkaXVzLWxhcmdlOiAgICAgICAzcHggIWRlZmF1bHQ7XG4kYm9yZGVyLXJhZGl1cy1zbWFsbDogICAgICAgM3B4ICFkZWZhdWx0O1xuXG4vLyoqIEdsb2JhbCBjb2xvciBmb3IgYWN0aXZlIGl0ZW1zIChlLmcuLCBuYXZzIG9yIGRyb3Bkb3ducykuXG4kY29tcG9uZW50LWFjdGl2ZS1jb2xvcjogICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogR2xvYmFsIGJhY2tncm91bmQgY29sb3IgZm9yIGFjdGl2ZSBpdGVtcyAoZS5nLiwgbmF2cyBvciBkcm9wZG93bnMpLlxuJGNvbXBvbmVudC1hY3RpdmUtYmc6ICAgICAgICRicmFuZC1wcmltYXJ5ICFkZWZhdWx0O1xuXG4vLyoqIFdpZHRoIG9mIHRoZSBgYm9yZGVyYCBmb3IgZ2VuZXJhdGluZyBjYXJldHMgdGhhdCBpbmRpY2F0b3IgZHJvcGRvd25zLlxuJGNhcmV0LXdpZHRoLWJhc2U6ICAgICAgICAgIDRweCAhZGVmYXVsdDtcbi8vKiogQ2FyZXRzIGluY3JlYXNlIHNsaWdodGx5IGluIHNpemUgZm9yIGxhcmdlciBjb21wb25lbnRzLlxuJGNhcmV0LXdpZHRoLWxhcmdlOiAgICAgICAgIDVweCAhZGVmYXVsdDtcblxuXG4vLz09IFRhYmxlc1xuLy9cbi8vIyMgQ3VzdG9taXplcyB0aGUgYC50YWJsZWAgY29tcG9uZW50IHdpdGggYmFzaWMgdmFsdWVzLCBlYWNoIHVzZWQgYWNyb3NzIGFsbCB0YWJsZSB2YXJpYXRpb25zLlxuXG4vLyoqIFBhZGRpbmcgZm9yIGA8dGg+YHMgYW5kIGA8dGQ+YHMuXG4kdGFibGUtY2VsbC1wYWRkaW5nOiAgICAgICAgICAgIDhweCAhZGVmYXVsdDtcbi8vKiogUGFkZGluZyBmb3IgY2VsbHMgaW4gYC50YWJsZS1jb25kZW5zZWRgLlxuJHRhYmxlLWNvbmRlbnNlZC1jZWxsLXBhZGRpbmc6ICA1cHggIWRlZmF1bHQ7XG5cbi8vKiogRGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yIHVzZWQgZm9yIGFsbCB0YWJsZXMuXG4kdGFibGUtYmc6ICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIHVzZWQgZm9yIGAudGFibGUtc3RyaXBlZGAuXG4kdGFibGUtYmctYWNjZW50OiAgICAgICAgICAgICAgICNmOWY5ZjkgIWRlZmF1bHQ7XG4vLyoqIEJhY2tncm91bmQgY29sb3IgdXNlZCBmb3IgYC50YWJsZS1ob3ZlcmAuXG4kdGFibGUtYmctaG92ZXI6ICAgICAgICAgICAgICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG4kdGFibGUtYmctYWN0aXZlOiAgICAgICAgICAgICAgICR0YWJsZS1iZy1ob3ZlciAhZGVmYXVsdDtcblxuLy8qKiBCb3JkZXIgY29sb3IgZm9yIHRhYmxlIGFuZCBjZWxsIGJvcmRlcnMuXG4kdGFibGUtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICNkZGQgIWRlZmF1bHQ7XG5cblxuLy89PSBCdXR0b25zXG4vL1xuLy8jIyBGb3IgZWFjaCBvZiBCb290c3RyYXAncyBidXR0b25zLCBkZWZpbmUgdGV4dCwgYmFja2dyb3VuZCBhbmQgYm9yZGVyIGNvbG9yLlxuXG4kYnRuLWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgICBub3JtYWwgIWRlZmF1bHQ7XG5cbiRidG4tZGVmYXVsdC1jb2xvcjogICAgICAgICAgICAgICM0NDQgIWRlZmF1bHQ7XG4kYnRuLWRlZmF1bHQtYmc6ICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGJ0bi1kZWZhdWx0LWJvcmRlcjogICAgICAgICAgICAgI2NjYyAhZGVmYXVsdDtcblxuJGJ0bi1wcmltYXJ5LWNvbG9yOiAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRidG4tcHJpbWFyeS1iZzogICAgICAgICAgICAgICAgICRicmFuZC1wcmltYXJ5ICFkZWZhdWx0O1xuJGJ0bi1wcmltYXJ5LWJvcmRlcjogICAgICAgICAgICRidG4tcHJpbWFyeS1iZyAhZGVmYXVsdDtcblxuJGJ0bi1sb2dpbi1jb2xvcjogICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kYnRuLWxvZ2luLWJnOiAgICAgICAgICAgICAgICAgIzAwOGFiZiAhZGVmYXVsdDtcbiRidG4tbG9naW4tYm9yZGVyOiAgICAgICAgICAgICAkYnRuLWxvZ2luLWJnICFkZWZhdWx0O1xuXG4kYnRuLXN1Y2Nlc3MtY29sb3I6ICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGJ0bi1zdWNjZXNzLWJnOiAgICAgICAgICAgICAgICAgJGJyYW5kLXN1Y2Nlc3MgIWRlZmF1bHQ7XG4kYnRuLXN1Y2Nlc3MtYm9yZGVyOiAgICAgICAgICAgJGJ0bi1zdWNjZXNzLWJnICFkZWZhdWx0O1xuXG4kYnRuLWluZm8tY29sb3I6ICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGJ0bi1pbmZvLWJnOiAgICAgICAgICAgICAgICAgICAgJGJyYW5kLWluZm8gIWRlZmF1bHQ7XG4kYnRuLWluZm8tYm9yZGVyOiAgICAgICAgICAgICAgJGJyYW5kLWluZm8gIWRlZmF1bHQ7XG5cbiRidG4td2FybmluZy1jb2xvcjogICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kYnRuLXdhcm5pbmctYmc6ICAgICAgICAgICAgICAgICAkYnJhbmQtd2FybmluZyAhZGVmYXVsdDtcbiRidG4td2FybmluZy1ib3JkZXI6ICAgICAgICAgICAkYnJhbmQtd2FybmluZyAhZGVmYXVsdDtcblxuJGJ0bi1kYW5nZXItY29sb3I6ICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbiRidG4tZGFuZ2VyLWJnOiAgICAgICAgICAgICAgICAgICRicmFuZC1kYW5nZXIgIWRlZmF1bHQ7XG4kYnRuLWRhbmdlci1ib3JkZXI6ICAgICAgICAgICAgJGJyYW5kLWRhbmdlciAhZGVmYXVsdDtcblxuJGJ0bi1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG5cbi8vIEFsbG93cyBmb3IgY3VzdG9taXppbmcgYnV0dG9uIHJhZGl1cyBpbmRlcGVuZGVudGx5IGZyb20gZ2xvYmFsIGJvcmRlciByYWRpdXNcbiRidG4tYm9yZGVyLXJhZGl1cy1iYXNlOiAgICAgICAgICRib3JkZXItcmFkaXVzLWJhc2UgIWRlZmF1bHQ7XG4kYnRuLWJvcmRlci1yYWRpdXMtbGFyZ2U6ICAgICAgICAkYm9yZGVyLXJhZGl1cy1sYXJnZSAhZGVmYXVsdDtcbiRidG4tYm9yZGVyLXJhZGl1cy1zbWFsbDogICAgICAgICRib3JkZXItcmFkaXVzLXNtYWxsICFkZWZhdWx0O1xuXG5cbi8vPT0gRm9ybXNcbi8vXG4vLyMjXG5cbi8vKiogYDxpbnB1dD5gIGJhY2tncm91bmQgY29sb3JcbiRpbnB1dC1iZzogICAgICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIGA8aW5wdXQgZGlzYWJsZWQ+YCBiYWNrZ3JvdW5kIGNvbG9yXG4kaW5wdXQtYmctZGlzYWJsZWQ6ICAgICAgICAgICAgICAkZ3JheS1saWdodGVyICFkZWZhdWx0O1xuXG4vLyoqIFRleHQgY29sb3IgZm9yIGA8aW5wdXQ+YHNcbiRpbnB1dC1jb2xvcjogICAgICAgICAgICAgICAgICAgICRncmF5ICFkZWZhdWx0O1xuLy8qKiBgPGlucHV0PmAgYm9yZGVyIGNvbG9yXG4kaW5wdXQtYm9yZGVyOiAgICAgICAgICAgICAgICAgICAjY2NjICFkZWZhdWx0O1xuXG4vLyBUT0RPOiBSZW5hbWUgYCRpbnB1dC1ib3JkZXItcmFkaXVzYCB0byBgJGlucHV0LWJvcmRlci1yYWRpdXMtYmFzZWAgaW4gdjRcbi8vKiogRGVmYXVsdCBgLmZvcm0tY29udHJvbGAgYm9yZGVyIHJhZGl1c1xuLy8gVGhpcyBoYXMgbm8gZWZmZWN0IG9uIGA8c2VsZWN0PmBzIGluIHNvbWUgYnJvd3NlcnMsIGR1ZSB0byB0aGUgbGltaXRlZCBzdHlsYWJpbGl0eSBvZiBgPHNlbGVjdD5gcyBpbiBDU1MuXG4kaW5wdXQtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1iYXNlICFkZWZhdWx0O1xuLy8qKiBMYXJnZSBgLmZvcm0tY29udHJvbGAgYm9yZGVyIHJhZGl1c1xuJGlucHV0LWJvcmRlci1yYWRpdXMtbGFyZ2U6ICAgICAgJGJvcmRlci1yYWRpdXMtbGFyZ2UgIWRlZmF1bHQ7XG4vLyoqIFNtYWxsIGAuZm9ybS1jb250cm9sYCBib3JkZXIgcmFkaXVzXG4kaW5wdXQtYm9yZGVyLXJhZGl1cy1zbWFsbDogICAgICAkYm9yZGVyLXJhZGl1cy1zbWFsbCAhZGVmYXVsdDtcblxuLy8qKiBCb3JkZXIgY29sb3IgZm9yIGlucHV0cyBvbiBmb2N1c1xuJGlucHV0LWJvcmRlci1mb2N1czogICAgICAgICAgICAgIzY2YWZlOSAhZGVmYXVsdDtcblxuLy8qKiBQbGFjZWhvbGRlciB0ZXh0IGNvbG9yXG4kaW5wdXQtY29sb3ItcGxhY2Vob2xkZXI6ICAgICAgICAjOTk5ICFkZWZhdWx0O1xuXG4vLyoqIERlZmF1bHQgYC5mb3JtLWNvbnRyb2xgIGhlaWdodFxuJGlucHV0LWhlaWdodC1iYXNlOiAgICAgICAgICAgICAgKCRsaW5lLWhlaWdodC1jb21wdXRlZCArICgkcGFkZGluZy1iYXNlLXZlcnRpY2FsICogMikgKyAyKSAhZGVmYXVsdDtcbi8vKiogTGFyZ2UgYC5mb3JtLWNvbnRyb2xgIGhlaWdodFxuJGlucHV0LWhlaWdodC1sYXJnZTogICAgICAgICAgICAgKGNlaWwoJGZvbnQtc2l6ZS1sYXJnZSAqICRsaW5lLWhlaWdodC1sYXJnZSkgKyAoJHBhZGRpbmctbGFyZ2UtdmVydGljYWwgKiAyKSArIDIpICFkZWZhdWx0O1xuLy8qKiBTbWFsbCBgLmZvcm0tY29udHJvbGAgaGVpZ2h0XG4kaW5wdXQtaGVpZ2h0LXNtYWxsOiAgICAgICAgICAgICAoZmxvb3IoJGZvbnQtc2l6ZS1zbWFsbCAqICRsaW5lLWhlaWdodC1zbWFsbCkgKyAoJHBhZGRpbmctc21hbGwtdmVydGljYWwgKiAyKSArIDIpICFkZWZhdWx0O1xuXG4vLyoqIGAuZm9ybS1ncm91cGAgbWFyZ2luXG4kZm9ybS1ncm91cC1tYXJnaW4tYm90dG9tOiAgICAgICAxNXB4ICFkZWZhdWx0O1xuXG4kbGVnZW5kLWNvbG9yOiAgICAgICAgICAgICAgICAgICAkZ3JheS1kYXJrICFkZWZhdWx0O1xuJGxlZ2VuZC1ib3JkZXItY29sb3I6ICAgICAgICAgICAgI2U1ZTVlNSAhZGVmYXVsdDtcblxuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIGZvciB0ZXh0dWFsIGlucHV0IGFkZG9uc1xuJGlucHV0LWdyb3VwLWFkZG9uLWJnOiAgICAgICAgICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcbi8vKiogQm9yZGVyIGNvbG9yIGZvciB0ZXh0dWFsIGlucHV0IGFkZG9uc1xuJGlucHV0LWdyb3VwLWFkZG9uLWJvcmRlci1jb2xvcjogJGlucHV0LWJvcmRlciAhZGVmYXVsdDtcblxuLy8qKiBEaXNhYmxlZCBjdXJzb3IgZm9yIGZvcm0gY29udHJvbHMgYW5kIGJ1dHRvbnMuXG4kY3Vyc29yLWRpc2FibGVkOiAgICAgICAgICAgICAgICBub3QtYWxsb3dlZCAhZGVmYXVsdDtcblxuXG4vLz09IERyb3Bkb3duc1xuLy9cbi8vIyMgRHJvcGRvd24gbWVudSBjb250YWluZXIgYW5kIGNvbnRlbnRzLlxuXG4vLyoqIEJhY2tncm91bmQgZm9yIHRoZSBkcm9wZG93biBtZW51LlxuJGRyb3Bkb3duLWJnOiAgICAgICAgICAgICAgICAgICAgI2ZjZmNmYyAhZGVmYXVsdDtcbi8vKiogRHJvcGRvd24gbWVudSBgYm9yZGVyLWNvbG9yYC5cbiRkcm9wZG93bi1ib3JkZXI6ICAgICAgICAgICAgICAgICNjY2MgIWRlZmF1bHQ7XG4vLyoqIERyb3Bkb3duIG1lbnUgYGJvcmRlci1jb2xvcmAgKipmb3IgSUU4KiouXG4kZHJvcGRvd24tZmFsbGJhY2stYm9yZGVyOiAgICAgICAjY2NjICFkZWZhdWx0O1xuLy8qKiBEaXZpZGVyIGNvbG9yIGZvciBiZXR3ZWVuIGRyb3Bkb3duIGl0ZW1zLlxuJGRyb3Bkb3duLWRpdmlkZXItYmc6ICAgICAgICAgICAgI2VlZSAhZGVmYXVsdDtcblxuLy8qKiBEcm9wZG93biBsaW5rIHRleHQgY29sb3IuXG4kZHJvcGRvd24tbGluay1jb2xvcjogICAgICAgICAgICAkZ3JheS1kYXJrICFkZWZhdWx0O1xuLy8qKiBIb3ZlciBjb2xvciBmb3IgZHJvcGRvd24gbGlua3MuXG4kZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjogICAgICBkYXJrZW4oJGdyYXktZGFyaywgNSUpICFkZWZhdWx0O1xuLy8qKiBIb3ZlciBiYWNrZ3JvdW5kIGZvciBkcm9wZG93biBsaW5rcy5cbiRkcm9wZG93bi1saW5rLWhvdmVyLWJnOiAgICAgICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG5cbi8vKiogQWN0aXZlIGRyb3Bkb3duIG1lbnUgaXRlbSB0ZXh0IGNvbG9yLlxuJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG4vLyoqIEFjdGl2ZSBkcm9wZG93biBtZW51IGl0ZW0gYmFja2dyb3VuZCBjb2xvci5cbiRkcm9wZG93bi1saW5rLWFjdGl2ZS1iZzogICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xuXG4vLyoqIERpc2FibGVkIGRyb3Bkb3duIG1lbnUgaXRlbSBiYWNrZ3JvdW5kIGNvbG9yLlxuJGRyb3Bkb3duLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG5cbi8vKiogVGV4dCBjb2xvciBmb3IgaGVhZGVycyB3aXRoaW4gZHJvcGRvd24gbWVudXMuXG4kZHJvcGRvd24taGVhZGVyLWNvbG9yOiAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcblxuLy8qKiBEZXByZWNhdGVkIGAkZHJvcGRvd24tY2FyZXQtY29sb3JgIGFzIG9mIHYzLjEuMFxuJGRyb3Bkb3duLWNhcmV0LWNvbG9yOiAgICAgICAgICAgIzAwMCAhZGVmYXVsdDtcblxuXG4vLz09IE1lbnUtRmxhdCBEcm9wZG93bnNcbi8vXG4vLyMjIE1lbnUtRmxhdCBEcm9wZG93biBtZW51IGNvbnRhaW5lciBhbmQgY29udGVudHMuXG5cbiRtZW51LWZsYXQtdGV4dDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJG1lbnUtZmxhdC1kcm9wZG93bi1iZzogICAgICAgICAgICAgICAgICAgICAgICMzYTM5M2IgIWRlZmF1bHQ7XG4kbGluZS1oZWlnaHQtbWVudS1mbGF0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzFweDtcbi8vKiogTWVudS1GbGF0IERyb3Bkb3duIG1lbnUgYGJvcmRlci1jb2xvcmAuXG4kbWVudS1mbGF0LWRyb3Bkb3duLWJvcmRlcjogICAgICAgICAgICAgICAgICMyZTJlMmUgIWRlZmF1bHQ7XG4kbWVudS1mbGF0LWRyb3Bkb3duLWRpdmlkZXItYmc6ICAgICAgICAgICAgICM0MDQwNDIgIWRlZmF1bHQ7XG4kbWVudS1mbGF0LWRyb3Bkb3duLWNyaXRpY2FsLWJnOiAgICAgICAgICAgICAjZDkxODJkICFkZWZhdWx0O1xuLy8qKiBEcm9wZG93biBsaW5rIHRleHQgY29sb3IuXG4kbWVudS1mbGF0LWRyb3Bkb3duLWxpbmstY29sb3I6ICAgICAgICAgICAgICAkbWVudS1mbGF0LXRleHQgIWRlZmF1bHQ7XG4vLyoqIEhvdmVyIGNvbG9yIGZvciBkcm9wZG93biBsaW5rcy5cbiRtZW51LWZsYXQtZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjogICAgICRtZW51LWZsYXQtdGV4dCAhZGVmYXVsdDtcbi8vKiogSG92ZXIgYmFja2dyb3VuZCBmb3IgZHJvcGRvd24gbGlua3MuXG4kbWVudS1mbGF0LWRyb3Bkb3duLWxpbmstaG92ZXItYmc6ICAgICAgICAgJG1lbnUtZmxhdC1kcm9wZG93bi1iZyAhZGVmYXVsdDtcbi8vKiogQWN0aXZlIGRyb3Bkb3duIG1lbnUgaXRlbSB0ZXh0IGNvbG9yLlxuJG1lbnUtZmxhdC1kcm9wZG93bi1saW5rLWFjdGl2ZS1jb2xvcjogICAgICRtZW51LWZsYXQtdGV4dCAhZGVmYXVsdDtcbi8vKiogQWN0aXZlIGRyb3Bkb3duIG1lbnUgaXRlbSBiYWNrZ3JvdW5kIGNvbG9yLlxuJG1lbnUtZmxhdC1kcm9wZG93bi1saW5rLWFjdGl2ZS1iZzogICAgICAgICRtZW51LWZsYXQtZHJvcGRvd24tYmcgIWRlZmF1bHQ7XG5cblxuLy8tLSBaLWluZGV4IG1hc3RlciBsaXN0XG4vL1xuLy8gV2FybmluZzogQXZvaWQgY3VzdG9taXppbmcgdGhlc2UgdmFsdWVzLiBUaGV5J3JlIHVzZWQgZm9yIGEgYmlyZCdzIGV5ZSB2aWV3XG4vLyBvZiBjb21wb25lbnRzIGRlcGVuZGVudCBvbiB0aGUgei1heGlzIGFuZCBhcmUgZGVzaWduZWQgdG8gYWxsIHdvcmsgdG9nZXRoZXIuXG4vL1xuLy8gTm90ZTogVGhlc2UgdmFyaWFibGVzIGFyZSBub3QgZ2VuZXJhdGVkIGludG8gdGhlIEN1c3RvbWl6ZXIuXG5cbiR6aW5kZXgtbmF2YmFyOiAgICAgICAgICAgIDEwMDAgIWRlZmF1bHQ7XG4kemluZGV4LWRyb3Bkb3duOiAgICAgICAgICAxMDAwICFkZWZhdWx0O1xuJHppbmRleC1wb3BvdmVyOiAgICAgICAgICAgMTA2MCAhZGVmYXVsdDtcbiR6aW5kZXgtdG9vbHRpcDogICAgICAgICAgIDEwNzAgIWRlZmF1bHQ7XG4kemluZGV4LW5hdmJhci1maXhlZDogICAgICAxMDMwICFkZWZhdWx0O1xuJHppbmRleC1tb2RhbC1iYWNrZ3JvdW5kOiAgMTA0MCAhZGVmYXVsdDtcbiR6aW5kZXgtbW9kYWw6ICAgICAgICAgICAgIDEwNTAgIWRlZmF1bHQ7XG5cbi8vPT0gTWVkaWEgcXVlcmllcyBicmVha3BvaW50c1xuLy9cbi8vIyMgRGVmaW5lIHRoZSBicmVha3BvaW50cyBhdCB3aGljaCB5b3VyIGxheW91dCB3aWxsIGNoYW5nZSwgYWRhcHRpbmcgdG8gZGlmZmVyZW50IHNjcmVlbiBzaXplcy5cblxuLy8gRXh0cmEgc21hbGwgc2NyZWVuIC8gcGhvbmVcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi14c2AgYXMgb2YgdjMuMC4xXG4kc2NyZWVuLXhzOiAgICAgICAgICAgICAgICAgIDQ4MHB4ICFkZWZhdWx0O1xuLy8qKiBEZXByZWNhdGVkIGAkc2NyZWVuLXhzLW1pbmAgYXMgb2YgdjMuMi4wXG4kc2NyZWVuLXhzLW1pbjogICAgICAgICAgICAgICRzY3JlZW4teHMgIWRlZmF1bHQ7XG4vLyoqIERlcHJlY2F0ZWQgYCRzY3JlZW4tcGhvbmVgIGFzIG9mIHYzLjAuMVxuJHNjcmVlbi1waG9uZTogICAgICAgICAgICAgICAkc2NyZWVuLXhzLW1pbiAhZGVmYXVsdDtcblxuLy8gU21hbGwgc2NyZWVuIC8gdGFibGV0XG4vLyoqIERlcHJlY2F0ZWQgYCRzY3JlZW4tc21gIGFzIG9mIHYzLjAuMVxuJHNjcmVlbi1zbTogICAgICAgICAgICAgICAgICA5OTJweCAhZGVmYXVsdDtcbiRzY3JlZW4tc20tbWluOiAgICAgICAgICAgICAgJHNjcmVlbi1zbSAhZGVmYXVsdDtcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi10YWJsZXRgIGFzIG9mIHYzLjAuMVxuJHNjcmVlbi10YWJsZXQ6ICAgICAgICAgICAgICAkc2NyZWVuLXNtLW1pbiAhZGVmYXVsdDtcblxuLy8gTWVkaXVtIHNjcmVlbiAvIGRlc2t0b3Bcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi1tZGAgYXMgb2YgdjMuMC4xXG4kc2NyZWVuLW1kOiAgICAgICAgICAgICAgICAgIDEyMDBweCAhZGVmYXVsdDtcbiRzY3JlZW4tbWQtbWluOiAgICAgICAgICAgICAgJHNjcmVlbi1tZCAhZGVmYXVsdDtcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi1kZXNrdG9wYCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tZGVza3RvcDogICAgICAgICAgICAgJHNjcmVlbi1tZC1taW4gIWRlZmF1bHQ7XG5cbi8vIExhcmdlIHNjcmVlbiAvIHdpZGUgZGVza3RvcFxuLy8qKiBEZXByZWNhdGVkIGAkc2NyZWVuLWxnYCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tbGc6ICAgICAgICAgICAgICAgICAgMTY4MCAhZGVmYXVsdDtcbiRzY3JlZW4tbGctbWluOiAgICAgICAgICAgICAgJHNjcmVlbi1sZyAhZGVmYXVsdDtcbi8vKiogRGVwcmVjYXRlZCBgJHNjcmVlbi1sZy1kZXNrdG9wYCBhcyBvZiB2My4wLjFcbiRzY3JlZW4tbGctZGVza3RvcDogICAgICAgICAgJHNjcmVlbi1sZy1taW4gIWRlZmF1bHQ7XG5cbi8vIFNvIG1lZGlhIHF1ZXJpZXMgZG9uJ3Qgb3ZlcmxhcCB3aGVuIHJlcXVpcmVkLCBwcm92aWRlIGEgbWF4aW11bVxuJHNjcmVlbi14cy1tYXg6ICAgICAgICAgICAgICAoJHNjcmVlbi1zbS1taW4gLSAxKSAhZGVmYXVsdDtcbiRzY3JlZW4tc20tbWF4OiAgICAgICAgICAgICAgKCRzY3JlZW4tbWQtbWluIC0gMSkgIWRlZmF1bHQ7XG4kc2NyZWVuLW1kLW1heDogICAgICAgICAgICAgICgkc2NyZWVuLWxnLW1pbiAtIDEpICFkZWZhdWx0O1xuXG5cbi8vPT0gR3JpZCBzeXN0ZW1cbi8vXG4vLyMjIERlZmluZSB5b3VyIGN1c3RvbSByZXNwb25zaXZlIGdyaWQuXG5cbi8vKiogTnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGdyaWQuXG4kZ3JpZC1jb2x1bW5zOiAgICAgICAgICAgICAgMTIgIWRlZmF1bHQ7XG4vLyoqIFBhZGRpbmcgYmV0d2VlbiBjb2x1bW5zLiBHZXRzIGRpdmlkZWQgaW4gaGFsZiBmb3IgdGhlIGxlZnQgYW5kIHJpZ2h0LlxuJGdyaWQtZ3V0dGVyLXdpZHRoOiAgICAgICAgIDAgIWRlZmF1bHQ7XG4vLyBOYXZiYXIgY29sbGFwc2Vcbi8vKiogUG9pbnQgYXQgd2hpY2ggdGhlIG5hdmJhciBiZWNvbWVzIHVuY29sbGFwc2VkLlxuJGdyaWQtZmxvYXQtYnJlYWtwb2ludDogICAgICRzY3JlZW4tc20tbWluICFkZWZhdWx0O1xuLy8qKiBQb2ludCBhdCB3aGljaCB0aGUgbmF2YmFyIGJlZ2lucyBjb2xsYXBzaW5nLlxuJGdyaWQtZmxvYXQtYnJlYWtwb2ludC1tYXg6ICgkZ3JpZC1mbG9hdC1icmVha3BvaW50IC0gMSkgIWRlZmF1bHQ7XG5cblxuLy89PSBDb250YWluZXIgc2l6ZXNcbi8vXG4vLyMjIERlZmluZSB0aGUgbWF4aW11bSB3aWR0aCBvZiBgLmNvbnRhaW5lcmAgZm9yIGRpZmZlcmVudCBzY3JlZW4gc2l6ZXMuXG5cbi8vIFNtYWxsIHNjcmVlbiAvIHRhYmxldFxuJGNvbnRhaW5lci10YWJsZXQ6ICAgICAgICAgICAgICg5NDBweCArICRncmlkLWd1dHRlci13aWR0aCkgIWRlZmF1bHQ7XG4vLyoqIEZvciBgJHNjcmVlbi1zbS1taW5gIGFuZCB1cC5cbiRjb250YWluZXItc206ICAgICAgICAgICAgICAgICAkY29udGFpbmVyLXRhYmxldCAhZGVmYXVsdDtcblxuLy8gTWVkaXVtIHNjcmVlbiAvIGRlc2t0b3BcbiRjb250YWluZXItZGVza3RvcDogICAgICAgICAgICAoMTE0MHB4ICsgJGdyaWQtZ3V0dGVyLXdpZHRoKSAhZGVmYXVsdDtcbi8vKiogRm9yIGAkc2NyZWVuLW1kLW1pbmAgYW5kIHVwLlxuJGNvbnRhaW5lci1tZDogICAgICAgICAgICAgICAgICRjb250YWluZXItZGVza3RvcCAhZGVmYXVsdDtcblxuLy8gTGFyZ2Ugc2NyZWVuIC8gd2lkZSBkZXNrdG9wXG4kY29udGFpbmVyLWxhcmdlLWRlc2t0b3A6ICAgICAgKDE1NDBweCArICRncmlkLWd1dHRlci13aWR0aCkgIWRlZmF1bHQ7XG4vLyoqIEZvciBgJHNjcmVlbi1sZy1taW5gIGFuZCB1cC5cbiRjb250YWluZXItbGc6ICAgICAgICAgICAgICAgICAkY29udGFpbmVyLWxhcmdlLWRlc2t0b3AgIWRlZmF1bHQ7XG5cblxuLy89PSBOYXZiYXJcbi8vXG4vLyMjXG5cbi8vIEJhc2ljcyBvZiBhIG5hdmJhclxuJG5hdmJhci1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgICA1MHB4ICFkZWZhdWx0O1xuJG5hdmJhci1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgICAkbGluZS1oZWlnaHQtY29tcHV0ZWQgIWRlZmF1bHQ7XG4kbmF2YmFyLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgICRib3JkZXItcmFkaXVzLWJhc2UgIWRlZmF1bHQ7XG4kbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDogICAgICAgIGZsb29yKCgkZ3JpZC1ndXR0ZXItd2lkdGggLyAyKSkgIWRlZmF1bHQ7XG4kbmF2YmFyLXBhZGRpbmctdmVydGljYWw6ICAgICAgICAgICgoJG5hdmJhci1oZWlnaHQgLSAkbGluZS1oZWlnaHQtY29tcHV0ZWQpIC8gMikgIWRlZmF1bHQ7XG4kbmF2YmFyLWNvbGxhcHNlLW1heC1oZWlnaHQ6ICAgICAgIDM0MHB4ICFkZWZhdWx0O1xuXG4kbmF2YmFyLWRlZmF1bHQtY29sb3I6ICAgICAgICAgICAgICM3NzcgIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtYmc6ICAgICAgICAgICAgICAgICNmOGY4ZjggIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtYm9yZGVyOiAgICAgICAgICAgIGRhcmtlbigkbmF2YmFyLWRlZmF1bHQtYmcsIDYuNSUpICFkZWZhdWx0O1xuXG4vLyBOYXZiYXIgbGlua3NcbiRuYXZiYXItZGVmYXVsdC1saW5rLWNvbG9yOiAgICAgICAgICAgICAgICAjNzc3ICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItY29sb3I6ICAgICAgICAgICMzMzMgIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtbGluay1ob3Zlci1iZzogICAgICAgICAgICAgdHJhbnNwYXJlbnQgIWRlZmF1bHQ7XG4kbmF2YmFyLWRlZmF1bHQtbGluay1hY3RpdmUtY29sb3I6ICAgICAgICAgIzU1NSAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1iZzogICAgICAgICAgICBkYXJrZW4oJG5hdmJhci1kZWZhdWx0LWJnLCA2LjUlKSAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC1saW5rLWRpc2FibGVkLWNvbG9yOiAgICAgICAjY2NjICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LWxpbmstZGlzYWJsZWQtYmc6ICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuXG4vLyBOYXZiYXIgYnJhbmQgbGFiZWxcbiRuYXZiYXItZGVmYXVsdC1icmFuZC1jb2xvcjogICAgICAgICAgICAgICAkbmF2YmFyLWRlZmF1bHQtbGluay1jb2xvciAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC1icmFuZC1ob3Zlci1jb2xvcjogICAgICAgICBkYXJrZW4oJG5hdmJhci1kZWZhdWx0LWJyYW5kLWNvbG9yLCAxMCUpICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LWJyYW5kLWhvdmVyLWJnOiAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuXG4vLyBOYXZiYXIgdG9nZ2xlXG4kbmF2YmFyLWRlZmF1bHQtdG9nZ2xlLWhvdmVyLWJnOiAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcbiRuYXZiYXItZGVmYXVsdC10b2dnbGUtaWNvbi1iYXItYmc6ICAgICAgICAjODg4ICFkZWZhdWx0O1xuJG5hdmJhci1kZWZhdWx0LXRvZ2dsZS1ib3JkZXItY29sb3I6ICAgICAgICNkZGQgIWRlZmF1bHQ7XG5cblxuLy89PT0gSW52ZXJ0ZWQgbmF2YmFyXG4vLyBSZXNldCBpbnZlcnRlZCBuYXZiYXIgYmFzaWNzXG4kbmF2YmFyLWludmVyc2UtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgIGxpZ2h0ZW4oJGdyYXktbGlnaHQsIDE1JSkgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICMyMjIgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtYm9yZGVyOiAgICAgICAgICAgICAgICAgICAgIGRhcmtlbigkbmF2YmFyLWludmVyc2UtYmcsIDEwJSkgIWRlZmF1bHQ7XG5cbi8vIEludmVydGVkIG5hdmJhciBsaW5rc1xuJG5hdmJhci1pbnZlcnNlLWxpbmstY29sb3I6ICAgICAgICAgICAgICAgICBsaWdodGVuKCRncmF5LWxpZ2h0LCAxNSUpICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItY29sb3I6ICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItYmc6ICAgICAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcbiRuYXZiYXItaW52ZXJzZS1saW5rLWFjdGl2ZS1jb2xvcjogICAgICAgICAgJG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItY29sb3IgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtYmc6ICAgICAgICAgICAgIGRhcmtlbigkbmF2YmFyLWludmVyc2UtYmcsIDEwJSkgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtbGluay1kaXNhYmxlZC1jb2xvcjogICAgICAgICM0NDQgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtbGluay1kaXNhYmxlZC1iZzogICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuXG4vLyBJbnZlcnRlZCBuYXZiYXIgYnJhbmQgbGFiZWxcbiRuYXZiYXItaW52ZXJzZS1icmFuZC1jb2xvcjogICAgICAgICAgICAgICAgJG5hdmJhci1pbnZlcnNlLWxpbmstY29sb3IgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtYnJhbmQtaG92ZXItY29sb3I6ICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtYnJhbmQtaG92ZXItYmc6ICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuXG4vLyBJbnZlcnRlZCBuYXZiYXIgdG9nZ2xlXG4kbmF2YmFyLWludmVyc2UtdG9nZ2xlLWhvdmVyLWJnOiAgICAgICAgICAgICMzMzMgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtdG9nZ2xlLWljb24tYmFyLWJnOiAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kbmF2YmFyLWludmVyc2UtdG9nZ2xlLWJvcmRlci1jb2xvcjogICAgICAgICMzMzMgIWRlZmF1bHQ7XG5cblxuLy89PSBOYXZzXG4vL1xuLy8jI1xuXG4vLz09PSBTaGFyZWQgbmF2IHN0eWxlc1xuJG5hdi1saW5rLXBhZGRpbmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAxMHB4IDE1cHggIWRlZmF1bHQ7XG4kbmF2LWxpbmstaG92ZXItYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICRncmF5LWxpZ2h0ZXIgIWRlZmF1bHQ7XG5cbiRuYXYtZGlzYWJsZWQtbGluay1jb2xvcjogICAgICAgICAgICAgICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG4kbmF2LWRpc2FibGVkLWxpbmstaG92ZXItY29sb3I6ICAgICAgICAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuXG4vLz09IFRhYnNcbiRuYXYtdGFicy1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcblxuJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiAgICAgICAgICAkZ3JheS1saWdodGVyICFkZWZhdWx0O1xuXG4kbmF2LXRhYnMtYWN0aXZlLWxpbmstaG92ZXItYmc6ICAgICAgICAgICAgICRib2R5LWJnICFkZWZhdWx0O1xuJG5hdi10YWJzLWFjdGl2ZS1saW5rLWhvdmVyLWNvbG9yOiAgICAgICAgICAkZ3JheSAhZGVmYXVsdDtcbiRuYXYtdGFicy1hY3RpdmUtbGluay1ob3Zlci1ib3JkZXItY29sb3I6ICAgI2RkZCAhZGVmYXVsdDtcblxuJG5hdi10YWJzLWp1c3RpZmllZC1saW5rLWJvcmRlci1jb2xvcjogICAgICAgICAgICAjZGRkICFkZWZhdWx0O1xuJG5hdi10YWJzLWp1c3RpZmllZC1hY3RpdmUtbGluay1ib3JkZXItY29sb3I6ICAgICAkYm9keS1iZyAhZGVmYXVsdDtcblxuLy89PSBQaWxsc1xuJG5hdi1waWxscy1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1iYXNlICFkZWZhdWx0O1xuJG5hdi1waWxscy1hY3RpdmUtbGluay1ob3Zlci1iZzogICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcbiRuYXYtcGlsbHMtYWN0aXZlLWxpbmstaG92ZXItY29sb3I6ICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG5cblxuLy89PSBQYWdpbmF0aW9uXG4vL1xuLy8jI1xuXG4kcGFnaW5hdGlvbi1jb2xvcjogICAgICAgICAgICAgICAgICAgICAkbGluay1jb2xvciAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1ib3JkZXI6ICAgICAgICAgICAgICAgICAgICAjZGRkICFkZWZhdWx0O1xuXG4kcGFnaW5hdGlvbi1ob3Zlci1jb2xvcjogICAgICAgICAgICAgICAkbGluay1ob3Zlci1jb2xvciAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWhvdmVyLWJnOiAgICAgICAgICAgICAgICAgICRncmF5LWxpZ2h0ZXIgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1ob3Zlci1ib3JkZXI6ICAgICAgICAgICAgICAjZGRkICFkZWZhdWx0O1xuXG4kcGFnaW5hdGlvbi1hY3RpdmUtY29sb3I6ICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tYWN0aXZlLWJnOiAgICAgICAgICAgICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1hY3RpdmUtYm9yZGVyOiAgICAgICAgICAgICAkYnJhbmQtcHJpbWFyeSAhZGVmYXVsdDtcblxuJHBhZ2luYXRpb24tZGlzYWJsZWQtY29sb3I6ICAgICAgICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1kaXNhYmxlZC1iZzogICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tZGlzYWJsZWQtYm9yZGVyOiAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcblxuXG4vLz09IFBhZ2VyXG4vL1xuLy8jI1xuXG4kcGFnZXItYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFnaW5hdGlvbi1iZyAhZGVmYXVsdDtcbiRwYWdlci1ib3JkZXI6ICAgICAgICAgICAgICAgICAgICAgICAgICRwYWdpbmF0aW9uLWJvcmRlciAhZGVmYXVsdDtcbiRwYWdlci1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICAgIDE1cHggIWRlZmF1bHQ7XG5cbiRwYWdlci1ob3Zlci1iZzogICAgICAgICAgICAgICAgICAgICAgICRwYWdpbmF0aW9uLWhvdmVyLWJnICFkZWZhdWx0O1xuXG4kcGFnZXItYWN0aXZlLWJnOiAgICAgICAgICAgICAgICAgICAgICAkcGFnaW5hdGlvbi1hY3RpdmUtYmcgIWRlZmF1bHQ7XG4kcGFnZXItYWN0aXZlLWNvbG9yOiAgICAgICAgICAgICAgICAgICAkcGFnaW5hdGlvbi1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG5cbiRwYWdlci1kaXNhYmxlZC1jb2xvcjogICAgICAgICAgICAgICAgICRwYWdpbmF0aW9uLWRpc2FibGVkLWNvbG9yICFkZWZhdWx0O1xuXG5cbi8vPT0gSnVtYm90cm9uXG4vL1xuLy8jI1xuXG4kanVtYm90cm9uLXBhZGRpbmc6ICAgICAgICAgICAgICAzMHB4ICFkZWZhdWx0O1xuJGp1bWJvdHJvbi1jb2xvcjogICAgICAgICAgICAgICAgaW5oZXJpdCAhZGVmYXVsdDtcbiRqdW1ib3Ryb24tYmc6ICAgICAgICAgICAgICAgICAgICRncmF5LWxpZ2h0ZXIgIWRlZmF1bHQ7XG4kanVtYm90cm9uLWhlYWRpbmctY29sb3I6ICAgICAgICBpbmhlcml0ICFkZWZhdWx0O1xuJGp1bWJvdHJvbi1mb250LXNpemU6ICAgICAgICAgICAgY2VpbCgoJGZvbnQtc2l6ZS1iYXNlICogMS41KSkgIWRlZmF1bHQ7XG4kanVtYm90cm9uLWhlYWRpbmctZm9udC1zaXplOiAgICBjZWlsKCgkZm9udC1zaXplLWJhc2UgKiA0LjUpKSAhZGVmYXVsdDtcblxuXG4vLz09IEZvcm0gc3RhdGVzIGFuZCBhbGVydHNcbi8vXG4vLyMjIERlZmluZSBjb2xvcnMgZm9yIGZvcm0gZmVlZGJhY2sgc3RhdGVzIGFuZCwgYnkgZGVmYXVsdCwgYWxlcnRzLlxuXG4kc3RhdGUtc3VjY2Vzcy10ZXh0OiAgICAgICAgICAgICAjNmM2YzZjICFkZWZhdWx0O1xuJHN0YXRlLXN1Y2Nlc3MtYmc6ICAgICAgICAgICAgICAgI2RhZTZjYiAhZGVmYXVsdDtcbiRzdGF0ZS1zdWNjZXNzLWJvcmRlcjogICAgICAgICAgICM4Y2M2M2YgIWRlZmF1bHQ7XG5cbiRzdGF0ZS1pbmZvLXRleHQ6ICAgICAgICAgICAgICAgICM2YzZjNmMgIWRlZmF1bHQ7XG4kc3RhdGUtaW5mby1iZzogICAgICAgICAgICAgICAgICAjZDllZGY3ICFkZWZhdWx0O1xuJHN0YXRlLWluZm8tYm9yZGVyOiAgICAgICAgICAgICAgIzAwOGFiZiAhZGVmYXVsdDtcblxuJHN0YXRlLXdhcm5pbmctdGV4dDogICAgICAgICAgICAgIzZjNmM2YyAhZGVmYXVsdDtcbiRzdGF0ZS13YXJuaW5nLWJnOiAgICAgICAgICAgICAgICNmMWUzYzIgIWRlZmF1bHQ7XG4kc3RhdGUtd2FybmluZy1ib3JkZXI6ICAgICAgICAgICAjZmRiODEzICFkZWZhdWx0O1xuXG4kc3RhdGUtZGFuZ2VyLXRleHQ6ICAgICAgICAgICAgICAjNmM2YzZjICFkZWZhdWx0O1xuJHN0YXRlLWRhbmdlci1iZzogICAgICAgICAgICAgICAgICNlYWMzYzcgIWRlZmF1bHQ7XG4kc3RhdGUtZGFuZ2VyLWJvcmRlcjogICAgICAgICAgICNkOTE4MmQgIWRlZmF1bHQ7XG5cblxuLy89PSBUb29sdGlwc1xuLy9cbi8vIyNcblxuLy8qKiBUb29sdGlwIG1heCB3aWR0aFxuJHRvb2x0aXAtbWF4LXdpZHRoOiAgICAgICAgICAgMjAwcHggIWRlZmF1bHQ7XG4vLyoqIFRvb2x0aXAgdGV4dCBjb2xvclxuJHRvb2x0aXAtY29sb3I6ICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogVG9vbHRpcCBiYWNrZ3JvdW5kIGNvbG9yXG4kdG9vbHRpcC1iZzogICAgICAgICAgICAgICAgICAjMDAwICFkZWZhdWx0O1xuJHRvb2x0aXAtb3BhY2l0eTogICAgICAgICAgICAgLjkgIWRlZmF1bHQ7XG5cbi8vKiogVG9vbHRpcCBhcnJvdyB3aWR0aFxuJHRvb2x0aXAtYXJyb3ctd2lkdGg6ICAgICAgICAgNXB4ICFkZWZhdWx0O1xuLy8qKiBUb29sdGlwIGFycm93IGNvbG9yXG4kdG9vbHRpcC1hcnJvdy1jb2xvcjogICAgICAgICAkdG9vbHRpcC1iZyAhZGVmYXVsdDtcblxuXG4vLz09IFBvcG92ZXJzXG4vL1xuLy8jI1xuXG4vLyoqIFBvcG92ZXIgYm9keSBiYWNrZ3JvdW5kIGNvbG9yXG4kcG9wb3Zlci1iZzogICAgICAgICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIFBvcG92ZXIgbWF4aW11bSB3aWR0aFxuJHBvcG92ZXItbWF4LXdpZHRoOiAgICAgICAgICAgICAgICAgICAyNzZweCAhZGVmYXVsdDtcbi8vKiogUG9wb3ZlciBib3JkZXIgY29sb3JcbiRwb3BvdmVyLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgICAgcmdiYSgwLDAsMCwuMikgIWRlZmF1bHQ7XG4vLyoqIFBvcG92ZXIgZmFsbGJhY2sgYm9yZGVyIGNvbG9yXG4kcG9wb3Zlci1mYWxsYmFjay1ib3JkZXItY29sb3I6ICAgICAgICNjY2MgIWRlZmF1bHQ7XG5cbi8vKiogUG9wb3ZlciB0aXRsZSBiYWNrZ3JvdW5kIGNvbG9yXG4kcG9wb3Zlci10aXRsZS1iZzogICAgICAgICAgICAgICAgICAgIGRhcmtlbigkcG9wb3Zlci1iZywgMyUpICFkZWZhdWx0O1xuXG4vLyoqIFBvcG92ZXIgYXJyb3cgd2lkdGhcbiRwb3BvdmVyLWFycm93LXdpZHRoOiAgICAgICAgICAgICAgICAgMTBweCAhZGVmYXVsdDtcbi8vKiogUG9wb3ZlciBhcnJvdyBjb2xvclxuJHBvcG92ZXItYXJyb3ctY29sb3I6ICAgICAgICAgICAgICAgICAkcG9wb3Zlci1iZyAhZGVmYXVsdDtcblxuLy8qKiBQb3BvdmVyIG91dGVyIGFycm93IHdpZHRoXG4kcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDogICAgICAgICAgICgkcG9wb3Zlci1hcnJvdy13aWR0aCArIDEpICFkZWZhdWx0O1xuLy8qKiBQb3BvdmVyIG91dGVyIGFycm93IGNvbG9yXG4kcG9wb3Zlci1hcnJvdy1vdXRlci1jb2xvcjogICAgICAgICAgIGZhZGVfaW4oJHBvcG92ZXItYm9yZGVyLWNvbG9yLCAwLjA1KSAhZGVmYXVsdDtcbi8vKiogUG9wb3ZlciBvdXRlciBhcnJvdyBmYWxsYmFjayBjb2xvclxuJHBvcG92ZXItYXJyb3ctb3V0ZXItZmFsbGJhY2stY29sb3I6ICBkYXJrZW4oJHBvcG92ZXItZmFsbGJhY2stYm9yZGVyLWNvbG9yLCAyMCUpICFkZWZhdWx0O1xuXG5cbi8vPT0gTGFiZWxzXG4vL1xuLy8jI1xuXG4vLyoqIERlZmF1bHQgbGFiZWwgYmFja2dyb3VuZCBjb2xvclxuJGxhYmVsLWRlZmF1bHQtYmc6ICAgICAgICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG4vLyoqIFByaW1hcnkgbGFiZWwgYmFja2dyb3VuZCBjb2xvclxuJGxhYmVsLXByaW1hcnktYmc6ICAgICAgICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG4vLyoqIFN1Y2Nlc3MgbGFiZWwgYmFja2dyb3VuZCBjb2xvclxuJGxhYmVsLXN1Y2Nlc3MtYmc6ICAgICAgICAgICAgJGJyYW5kLXN1Y2Nlc3MgIWRlZmF1bHQ7XG4vLyoqIEluZm8gbGFiZWwgYmFja2dyb3VuZCBjb2xvclxuJGxhYmVsLWluZm8tYmc6ICAgICAgICAgICAgICAgJGJyYW5kLWluZm8gIWRlZmF1bHQ7XG4vLyoqIFdhcm5pbmcgbGFiZWwgYmFja2dyb3VuZCBjb2xvclxuJGxhYmVsLXdhcm5pbmctYmc6ICAgICAgICAgICAgJGJyYW5kLXdhcm5pbmcgIWRlZmF1bHQ7XG4vLyoqIERhbmdlciBsYWJlbCBiYWNrZ3JvdW5kIGNvbG9yXG4kbGFiZWwtZGFuZ2VyLWJnOiAgICAgICAgICAgICAkYnJhbmQtZGFuZ2VyICFkZWZhdWx0O1xuXG4vLyoqIERlZmF1bHQgbGFiZWwgdGV4dCBjb2xvclxuJGxhYmVsLWNvbG9yOiAgICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogRGVmYXVsdCB0ZXh0IGNvbG9yIG9mIGEgbGlua2VkIGxhYmVsXG4kbGFiZWwtbGluay1ob3Zlci1jb2xvcjogICAgICAjZmZmICFkZWZhdWx0O1xuXG5cbi8vPT0gTW9kYWxzXG4vL1xuLy8jI1xuXG4vLyoqIFBhZGRpbmcgYXBwbGllZCB0byB0aGUgbW9kYWwgYm9keVxuJG1vZGFsLWlubmVyLXBhZGRpbmc6ICAgICAgICAgMjBweCAzMHB4ICFkZWZhdWx0O1xuXG4vLyoqIFBhZGRpbmcgYXBwbGllZCB0byB0aGUgbW9kYWwgdGl0bGVcbiRtb2RhbC10aXRsZS1wYWRkaW5nOiAgICAgICAgIDI3cHggMTRweCAxNHB4IDMwcHggIWRlZmF1bHQ7XG4vLyoqIE1vZGFsIHRpdGxlIGxpbmUtaGVpZ2h0XG4kbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ6ICAgICAyM3B4ICFkZWZhdWx0O1xuXG4vLyoqIEJhY2tncm91bmQgY29sb3Igb2YgbW9kYWwgY29udGVudCBhcmVhXG4kbW9kYWwtY29udGVudC1iZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIE1vZGFsIGNvbnRlbnQgYm9yZGVyIGNvbG9yXG4kbW9kYWwtY29udGVudC1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICAgICAgIHJnYmEoMTcwLDE3MCwxNzAsLjMpICFkZWZhdWx0O1xuLy8qKiBNb2RhbCBjb250ZW50IGJvcmRlciBjb2xvciAqKmZvciBJRTgqKlxuJG1vZGFsLWNvbnRlbnQtZmFsbGJhY2stYm9yZGVyLWNvbG9yOiAgICAgICAgICAjYWFhICFkZWZhdWx0O1xuXG4vLyoqIE1vZGFsIGJhY2tkcm9wIGJhY2tncm91bmQgY29sb3JcbiRtb2RhbC1iYWNrZHJvcC1iZzogICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIE1vZGFsIGJhY2tkcm9wIG9wYWNpdHlcbiRtb2RhbC1iYWNrZHJvcC1vcGFjaXR5OiAgICAgIC41ICFkZWZhdWx0O1xuLy8qKiBNb2RhbCBoZWFkZXIgYm9yZGVyIGNvbG9yXG4kbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjogICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcbi8vKiogTW9kYWwgZm9vdGVyIGJvcmRlciBjb2xvclxuJG1vZGFsLWZvb3Rlci1ib3JkZXItY29sb3I6ICAgJG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XG5cbiRtb2RhbC1sZzogICAgICAgICAgICAgICAgICAgIDExMjRweCAhZGVmYXVsdDtcbiRtb2RhbC1tZDogICAgICAgICAgICAgICAgICAgIDgyNHB4ICFkZWZhdWx0O1xuJG1vZGFsLXNtOiAgICAgICAgICAgICAgICAgICAgNTI0cHggIWRlZmF1bHQ7XG5cblxuLy89PSBBbGVydHNcbi8vXG4vLyMjIERlZmluZSBhbGVydCBjb2xvcnMsIGJvcmRlciByYWRpdXMsIGFuZCBwYWRkaW5nLlxuXG4kYWxlcnQtcGFkZGluZzogICAgICAgICAgICAgICA4cHggMTVweCAhZGVmYXVsdDtcbiRhbGVydC1ib3JkZXItcmFkaXVzOiAgICAgICAgIDAgIWRlZmF1bHQ7XG4kYWxlcnQtbGluay1mb250LXdlaWdodDogICAgICBib2xkICFkZWZhdWx0O1xuJGFsZXJ0LWJvcmRlci13aWR0aDogICAgICAgICAgMCAwIDAgNXB4ICFkZWZhdWx0O1xuJGFsZXJ0LWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgMTAuNXB0ICFkZWZhdWx0OyBcblxuJGFsZXJ0LXN1Y2Nlc3MtYmc6ICAgICAgICAgICAgJHN0YXRlLXN1Y2Nlc3MtYmcgIWRlZmF1bHQ7XG4kYWxlcnQtc3VjY2Vzcy10ZXh0OiAgICAgICAgICAkc3RhdGUtc3VjY2Vzcy10ZXh0ICFkZWZhdWx0O1xuJGFsZXJ0LXN1Y2Nlc3MtYm9yZGVyOiAgICAgICAgJHN0YXRlLXN1Y2Nlc3MtYm9yZGVyICFkZWZhdWx0O1xuXG4kYWxlcnQtaW5mby1iZzogICAgICAgICAgICAgICAkc3RhdGUtaW5mby1iZyAhZGVmYXVsdDtcbiRhbGVydC1pbmZvLXRleHQ6ICAgICAgICAgICAgICRzdGF0ZS1pbmZvLXRleHQgIWRlZmF1bHQ7XG4kYWxlcnQtaW5mby1ib3JkZXI6ICAgICAgICAgICAkc3RhdGUtaW5mby1ib3JkZXIgIWRlZmF1bHQ7XG5cbiRhbGVydC13YXJuaW5nLWJnOiAgICAgICAgICAgICRzdGF0ZS13YXJuaW5nLWJnICFkZWZhdWx0O1xuJGFsZXJ0LXdhcm5pbmctdGV4dDogICAgICAgICAgJHN0YXRlLXdhcm5pbmctdGV4dCAhZGVmYXVsdDtcbiRhbGVydC13YXJuaW5nLWJvcmRlcjogICAgICAgICRzdGF0ZS13YXJuaW5nLWJvcmRlciAhZGVmYXVsdDtcblxuJGFsZXJ0LWRhbmdlci1iZzogICAgICAgICAgICAgJHN0YXRlLWRhbmdlci1iZyAhZGVmYXVsdDtcbiRhbGVydC1kYW5nZXItdGV4dDogICAgICAgICAgICRzdGF0ZS1kYW5nZXItdGV4dCAhZGVmYXVsdDtcbiRhbGVydC1kYW5nZXItYm9yZGVyOiAgICAgICAgICRzdGF0ZS1kYW5nZXItYm9yZGVyICFkZWZhdWx0O1xuXG5cbi8vPT0gUHJvZ3Jlc3MgYmFyc1xuLy9cbi8vIyNcblxuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSB3aG9sZSBwcm9ncmVzcyBjb21wb25lbnRcbiRwcm9ncmVzcy1iZzogICAgICAgICAgICAgICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG4vLyoqIFByb2dyZXNzIGJhciB0ZXh0IGNvbG9yXG4kcHJvZ3Jlc3MtYmFyLWNvbG9yOiAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuLy8qKiBWYXJpYWJsZSBmb3Igc2V0dGluZyByb3VuZGVkIGNvcm5lcnMgb24gcHJvZ3Jlc3MgYmFyLlxuJHByb2dyZXNzLWJvcmRlci1yYWRpdXM6ICAgICAgJGJvcmRlci1yYWRpdXMtYmFzZSAhZGVmYXVsdDtcblxuLy8qKiBEZWZhdWx0IHByb2dyZXNzIGJhciBjb2xvclxuJHByb2dyZXNzLWJhci1iZzogICAgICAgICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG4vLyoqIFN1Y2Nlc3MgcHJvZ3Jlc3MgYmFyIGNvbG9yXG4kcHJvZ3Jlc3MtYmFyLXN1Y2Nlc3MtYmc6ICAgICAkYnJhbmQtc3VjY2VzcyAhZGVmYXVsdDtcbi8vKiogV2FybmluZyBwcm9ncmVzcyBiYXIgY29sb3JcbiRwcm9ncmVzcy1iYXItd2FybmluZy1iZzogICAgICRicmFuZC13YXJuaW5nICFkZWZhdWx0O1xuLy8qKiBEYW5nZXIgcHJvZ3Jlc3MgYmFyIGNvbG9yXG4kcHJvZ3Jlc3MtYmFyLWRhbmdlci1iZzogICAgICAkYnJhbmQtZGFuZ2VyICFkZWZhdWx0O1xuLy8qKiBJbmZvIHByb2dyZXNzIGJhciBjb2xvclxuJHByb2dyZXNzLWJhci1pbmZvLWJnOiAgICAgICAgJGJyYW5kLWluZm8gIWRlZmF1bHQ7XG5cblxuLy89PSBMaXN0IGdyb3VwXG4vL1xuLy8jI1xuXG4vLyoqIEJhY2tncm91bmQgY29sb3Igb24gYC5saXN0LWdyb3VwLWl0ZW1gXG4kbGlzdC1ncm91cC1iZzogICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4vLyoqIGAubGlzdC1ncm91cC1pdGVtYCBib3JkZXIgY29sb3JcbiRsaXN0LWdyb3VwLWJvcmRlcjogICAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcbi8vKiogTGlzdCBncm91cCBib3JkZXIgcmFkaXVzXG4kbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzOiAgICAgICRib3JkZXItcmFkaXVzLWJhc2UgIWRlZmF1bHQ7XG5cbi8vKiogQmFja2dyb3VuZCBjb2xvciBvZiBzaW5nbGUgbGlzdCBpdGVtcyBvbiBob3ZlclxuJGxpc3QtZ3JvdXAtaG92ZXItYmc6ICAgICAgICAgICAjZjVmNWY1ICFkZWZhdWx0O1xuLy8qKiBUZXh0IGNvbG9yIG9mIGFjdGl2ZSBsaXN0IGl0ZW1zXG4kbGlzdC1ncm91cC1hY3RpdmUtY29sb3I6ICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIGFjdGl2ZSBsaXN0IGl0ZW1zXG4kbGlzdC1ncm91cC1hY3RpdmUtYmc6ICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xuLy8qKiBCb3JkZXIgY29sb3Igb2YgYWN0aXZlIGxpc3QgZWxlbWVudHNcbiRsaXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXI6ICAgICAgJGxpc3QtZ3JvdXAtYWN0aXZlLWJnICFkZWZhdWx0O1xuLy8qKiBUZXh0IGNvbG9yIGZvciBjb250ZW50IHdpdGhpbiBhY3RpdmUgbGlzdCBpdGVtc1xuJGxpc3QtZ3JvdXAtYWN0aXZlLXRleHQtY29sb3I6ICBsaWdodGVuKCRsaXN0LWdyb3VwLWFjdGl2ZS1iZywgNDAlKSAhZGVmYXVsdDtcblxuLy8qKiBUZXh0IGNvbG9yIG9mIGRpc2FibGVkIGxpc3QgaXRlbXNcbiRsaXN0LWdyb3VwLWRpc2FibGVkLWNvbG9yOiAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuLy8qKiBCYWNrZ3JvdW5kIGNvbG9yIG9mIGRpc2FibGVkIGxpc3QgaXRlbXNcbiRsaXN0LWdyb3VwLWRpc2FibGVkLWJnOiAgICAgICAgICRncmF5LWxpZ2h0ZXIgIWRlZmF1bHQ7XG4vLyoqIFRleHQgY29sb3IgZm9yIGNvbnRlbnQgd2l0aGluIGRpc2FibGVkIGxpc3QgaXRlbXNcbiRsaXN0LWdyb3VwLWRpc2FibGVkLXRleHQtY29sb3I6ICRsaXN0LWdyb3VwLWRpc2FibGVkLWNvbG9yICFkZWZhdWx0O1xuXG4kbGlzdC1ncm91cC1saW5rLWNvbG9yOiAgICAgICAgICM1NTUgIWRlZmF1bHQ7XG4kbGlzdC1ncm91cC1saW5rLWhvdmVyLWNvbG9yOiAgICRsaXN0LWdyb3VwLWxpbmstY29sb3IgIWRlZmF1bHQ7XG4kbGlzdC1ncm91cC1saW5rLWhlYWRpbmctY29sb3I6ICMzMzMgIWRlZmF1bHQ7XG5cblxuLy89PSBQYW5lbHNcbi8vXG4vLyMjXG5cbiRwYW5lbC1iZzogICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kcGFuZWwtYm9keS1wYWRkaW5nOiAgICAgICAgICAxNXB4ICFkZWZhdWx0O1xuJHBhbmVsLWhlYWRpbmctcGFkZGluZzogICAgICAgMTBweCAxNXB4ICFkZWZhdWx0O1xuJHBhbmVsLWZvb3Rlci1wYWRkaW5nOiAgICAgICAgJHBhbmVsLWhlYWRpbmctcGFkZGluZyAhZGVmYXVsdDtcbiRwYW5lbC1ib3JkZXItcmFkaXVzOiAgICAgICAgICRib3JkZXItcmFkaXVzLWJhc2UgIWRlZmF1bHQ7XG5cbi8vKiogQm9yZGVyIGNvbG9yIGZvciBlbGVtZW50cyB3aXRoaW4gcGFuZWxzXG4kcGFuZWwtaW5uZXItYm9yZGVyOiAgICAgICAgICAjZGRkICFkZWZhdWx0O1xuJHBhbmVsLWZvb3Rlci1iZzogICAgICAgICAgICAgI2Y1ZjVmNSAhZGVmYXVsdDtcblxuJHBhbmVsLWRlZmF1bHQtdGV4dDogICAgICAgICAgJGdyYXktZGFyayAhZGVmYXVsdDtcbiRwYW5lbC1kZWZhdWx0LWJvcmRlcjogICAgICAgICNkZGQgIWRlZmF1bHQ7XG4kcGFuZWwtZGVmYXVsdC1oZWFkaW5nLWJnOiAgICAjZjVmNWY1ICFkZWZhdWx0O1xuXG4kcGFuZWwtcHJpbWFyeS10ZXh0OiAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJHBhbmVsLXByaW1hcnktYm9yZGVyOiAgICAgICAgJGJyYW5kLXByaW1hcnkgIWRlZmF1bHQ7XG4kcGFuZWwtcHJpbWFyeS1oZWFkaW5nLWJnOiAgICAkYnJhbmQtcHJpbWFyeSAhZGVmYXVsdDtcblxuJHBhbmVsLXN1Y2Nlc3MtdGV4dDogICAgICAgICAgJHN0YXRlLXN1Y2Nlc3MtdGV4dCAhZGVmYXVsdDtcbiRwYW5lbC1zdWNjZXNzLWJvcmRlcjogICAgICAgICRzdGF0ZS1zdWNjZXNzLWJvcmRlciAhZGVmYXVsdDtcbiRwYW5lbC1zdWNjZXNzLWhlYWRpbmctYmc6ICAgICRzdGF0ZS1zdWNjZXNzLWJnICFkZWZhdWx0O1xuXG4kcGFuZWwtaW5mby10ZXh0OiAgICAgICAgICAgICAkc3RhdGUtaW5mby10ZXh0ICFkZWZhdWx0O1xuJHBhbmVsLWluZm8tYm9yZGVyOiAgICAgICAgICAgJHN0YXRlLWluZm8tYm9yZGVyICFkZWZhdWx0O1xuJHBhbmVsLWluZm8taGVhZGluZy1iZzogICAgICAgJHN0YXRlLWluZm8tYmcgIWRlZmF1bHQ7XG5cbiRwYW5lbC13YXJuaW5nLXRleHQ6ICAgICAgICAgICRzdGF0ZS13YXJuaW5nLXRleHQgIWRlZmF1bHQ7XG4kcGFuZWwtd2FybmluZy1ib3JkZXI6ICAgICAgICAkc3RhdGUtd2FybmluZy1ib3JkZXIgIWRlZmF1bHQ7XG4kcGFuZWwtd2FybmluZy1oZWFkaW5nLWJnOiAgICAkc3RhdGUtd2FybmluZy1iZyAhZGVmYXVsdDtcblxuJHBhbmVsLWRhbmdlci10ZXh0OiAgICAgICAgICAgJHN0YXRlLWRhbmdlci10ZXh0ICFkZWZhdWx0O1xuJHBhbmVsLWRhbmdlci1ib3JkZXI6ICAgICAgICAgJHN0YXRlLWRhbmdlci1ib3JkZXIgIWRlZmF1bHQ7XG4kcGFuZWwtZGFuZ2VyLWhlYWRpbmctYmc6ICAgICAkc3RhdGUtZGFuZ2VyLWJnICFkZWZhdWx0O1xuXG5cbi8vPT0gVGh1bWJuYWlsc1xuLy9cbi8vIyNcblxuLy8qKiBQYWRkaW5nIGFyb3VuZCB0aGUgdGh1bWJuYWlsIGltYWdlXG4kdGh1bWJuYWlsLXBhZGRpbmc6ICAgICAgICAgICA0cHggIWRlZmF1bHQ7XG4vLyoqIFRodW1ibmFpbCBiYWNrZ3JvdW5kIGNvbG9yXG4kdGh1bWJuYWlsLWJnOiAgICAgICAgICAgICAgICAkYm9keS1iZyAhZGVmYXVsdDtcbi8vKiogVGh1bWJuYWlsIGJvcmRlciBjb2xvclxuJHRodW1ibmFpbC1ib3JkZXI6ICAgICAgICAgICAgI2RkZCAhZGVmYXVsdDtcbi8vKiogVGh1bWJuYWlsIGJvcmRlciByYWRpdXNcbiR0aHVtYm5haWwtYm9yZGVyLXJhZGl1czogICAgICRib3JkZXItcmFkaXVzLWJhc2UgIWRlZmF1bHQ7XG5cbi8vKiogQ3VzdG9tIHRleHQgY29sb3IgZm9yIHRodW1ibmFpbCBjYXB0aW9uc1xuJHRodW1ibmFpbC1jYXB0aW9uLWNvbG9yOiAgICAgJHRleHQtY29sb3IgIWRlZmF1bHQ7XG4vLyoqIFBhZGRpbmcgYXJvdW5kIHRoZSB0aHVtYm5haWwgY2FwdGlvblxuJHRodW1ibmFpbC1jYXB0aW9uLXBhZGRpbmc6ICAgOXB4ICFkZWZhdWx0O1xuXG5cbi8vPT0gV2VsbHNcbi8vXG4vLyMjXG5cbiR3ZWxsLWJnOiAgICAgICAgICAgICAgICAgICAgICNmNWY1ZjUgIWRlZmF1bHQ7XG4kd2VsbC1ib3JkZXI6ICAgICAgICAgICAgICAgICBkYXJrZW4oJHdlbGwtYmcsIDclKSAhZGVmYXVsdDtcblxuXG4vLz09IEJhZGdlc1xuLy9cbi8vIyNcblxuJGJhZGdlLWNvbG9yOiAgICAgICAgICAgICAgICAgI2ZmZiAhZGVmYXVsdDtcbi8vKiogTGlua2VkIGJhZGdlIHRleHQgY29sb3Igb24gaG92ZXJcbiRiYWRnZS1saW5rLWhvdmVyLWNvbG9yOiAgICAgICNmZmYgIWRlZmF1bHQ7XG4kYmFkZ2UtYmc6ICAgICAgICAgICAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcblxuLy8qKiBCYWRnZSB0ZXh0IGNvbG9yIGluIGFjdGl2ZSBuYXYgbGlua1xuJGJhZGdlLWFjdGl2ZS1jb2xvcjogICAgICAgICAgJGxpbmstY29sb3IgIWRlZmF1bHQ7XG4vLyoqIEJhZGdlIGJhY2tncm91bmQgY29sb3IgaW4gYWN0aXZlIG5hdiBsaW5rXG4kYmFkZ2UtYWN0aXZlLWJnOiAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuXG4kYmFkZ2UtZm9udC13ZWlnaHQ6ICAgICAgICAgICBib2xkICFkZWZhdWx0O1xuJGJhZGdlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgMSAhZGVmYXVsdDtcbiRiYWRnZS1ib3JkZXItcmFkaXVzOiAgICAgICAgIDEwcHggIWRlZmF1bHQ7XG5cblxuLy89PSBCcmVhZGNydW1ic1xuLy9cbi8vIyNcblxuJGJyZWFkY3J1bWItcGFkZGluZy12ZXJ0aWNhbDogICA4cHggIWRlZmF1bHQ7XG4kYnJlYWRjcnVtYi1wYWRkaW5nLWhvcml6b250YWw6IDE1cHggIWRlZmF1bHQ7XG4vLyoqIEJyZWFkY3J1bWIgYmFja2dyb3VuZCBjb2xvclxuJGJyZWFkY3J1bWItYmc6ICAgICAgICAgICAgICAgICAjZjVmNWY1ICFkZWZhdWx0O1xuLy8qKiBCcmVhZGNydW1iIHRleHQgY29sb3JcbiRicmVhZGNydW1iLWNvbG9yOiAgICAgICAgICAgICAgI2NjYyAhZGVmYXVsdDtcbi8vKiogVGV4dCBjb2xvciBvZiBjdXJyZW50IHBhZ2UgaW4gdGhlIGJyZWFkY3J1bWJcbiRicmVhZGNydW1iLWFjdGl2ZS1jb2xvcjogICAgICAgJGdyYXktbGlnaHQgIWRlZmF1bHQ7XG4vLyoqIFRleHR1YWwgc2VwYXJhdG9yIGZvciBiZXR3ZWVuIGJyZWFkY3J1bWIgZWxlbWVudHNcbiRicmVhZGNydW1iLXNlcGFyYXRvcjogICAgICAgICAgXCIvXCIgIWRlZmF1bHQ7XG5cblxuLy89PSBDYXJvdXNlbFxuLy9cbi8vIyNcblxuJGNhcm91c2VsLXRleHQtc2hhZG93OiAgICAgICAgICAgICAgICAgICAgICAgIDAgMXB4IDJweCByZ2JhKDAsMCwwLC42KSAhZGVmYXVsdDtcblxuJGNhcm91c2VsLWNvbnRyb2wtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtY29udHJvbC13aWR0aDogICAgICAgICAgICAgICAgICAgICAgMTUlICFkZWZhdWx0O1xuJGNhcm91c2VsLWNvbnRyb2wtb3BhY2l0eTogICAgICAgICAgICAgICAgICAgIC41ICFkZWZhdWx0O1xuJGNhcm91c2VsLWNvbnRyb2wtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgIDIwcHggIWRlZmF1bHQ7XG5cbiRjYXJvdXNlbC1pbmRpY2F0b3ItYWN0aXZlLWJnOiAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuJGNhcm91c2VsLWluZGljYXRvci1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG5cbiRjYXJvdXNlbC1jYXB0aW9uLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAjZmZmICFkZWZhdWx0O1xuXG5cbi8vPT0gQ2xvc2Vcbi8vXG4vLyMjXG5cbiRjbG9zZS1mb250LXdlaWdodDogICAgICAgICAgIGJvbGQgIWRlZmF1bHQ7XG4kY2xvc2UtY29sb3I6ICAgICAgICAgICAgICAgICAjMDAwICFkZWZhdWx0O1xuJGNsb3NlLXRleHQtc2hhZG93OiAgICAgICAgICAgMCAxcHggMCAjZmZmICFkZWZhdWx0O1xuXG5cbi8vPT0gQ29kZVxuLy9cbi8vIyNcblxuJGNvZGUtY29sb3I6ICAgICAgICAgICAgICAgICAgI2M3MjU0ZSAhZGVmYXVsdDtcbiRjb2RlLWJnOiAgICAgICAgICAgICAgICAgICAgICNmOWYyZjQgIWRlZmF1bHQ7XG5cbiRrYmQtY29sb3I6ICAgICAgICAgICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4ka2JkLWJnOiAgICAgICAgICAgICAgICAgICAgICAjMzMzICFkZWZhdWx0O1xuXG4kcHJlLWJnOiAgICAgICAgICAgICAgICAgICAgICAjZjVmNWY1ICFkZWZhdWx0O1xuJHByZS1jb2xvcjogICAgICAgICAgICAgICAgICAgJGdyYXktZGFyayAhZGVmYXVsdDtcbiRwcmUtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICNjY2MgIWRlZmF1bHQ7XG4kcHJlLXNjcm9sbGFibGUtbWF4LWhlaWdodDogICAzNDBweCAhZGVmYXVsdDtcblxuXG4vLz09IFR5cGVcbi8vXG4vLyMjXG5cbi8vKiogSG9yaXpvbnRhbCBvZmZzZXQgZm9yIGZvcm1zIGFuZCBsaXN0cy5cbiRjb21wb25lbnQtb2Zmc2V0LWhvcml6b250YWw6IDE4MHB4ICFkZWZhdWx0O1xuLy8qKiBUZXh0IG11dGVkIGNvbG9yXG4kdGV4dC1tdXRlZDogICAgICAgICAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcbi8vKiogQWJicmV2aWF0aW9ucyBhbmQgYWNyb255bXMgYm9yZGVyIGNvbG9yXG4kYWJici1ib3JkZXItY29sb3I6ICAgICAgICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcbi8vKiogSGVhZGluZ3Mgc21hbGwgY29sb3JcbiRoZWFkaW5ncy1zbWFsbC1jb2xvcjogICAgICAgICRncmF5LWxpZ2h0ICFkZWZhdWx0O1xuLy8qKiBCbG9ja3F1b3RlIHNtYWxsIGNvbG9yXG4kYmxvY2txdW90ZS1zbWFsbC1jb2xvcjogICAgICAkZ3JheS1saWdodCAhZGVmYXVsdDtcbi8vKiogQmxvY2txdW90ZSBmb250IHNpemVcbiRibG9ja3F1b3RlLWZvbnQtc2l6ZTogICAgICAgICgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSAhZGVmYXVsdDtcbi8vKiogQmxvY2txdW90ZSBib3JkZXIgY29sb3JcbiRibG9ja3F1b3RlLWJvcmRlci1jb2xvcjogICAgICRncmF5LWxpZ2h0ZXIgIWRlZmF1bHQ7XG4vLyoqIFBhZ2UgaGVhZGVyIGJvcmRlciBjb2xvclxuJHBhZ2UtaGVhZGVyLWJvcmRlci1jb2xvcjogICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcbi8vKiogV2lkdGggb2YgaG9yaXpvbnRhbCBkZXNjcmlwdGlvbiBsaXN0IHRpdGxlc1xuJGRsLWhvcml6b250YWwtb2Zmc2V0OiAgICAgICAgJGNvbXBvbmVudC1vZmZzZXQtaG9yaXpvbnRhbCAhZGVmYXVsdDtcbi8vKiogSG9yaXpvbnRhbCBsaW5lIGNvbG9yLlxuJGhyLWJvcmRlcjogICAgICAgICAgICAgICAgICAgJGdyYXktbGlnaHRlciAhZGVmYXVsdDtcblxuLy8qIFxuLy8gVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbi8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE1IGJvb3RzdHJhcC1zZWxlY3RcblxuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbi8vIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbi8vIFNPRlRXQVJFLiAqL1xuXG4kY29sb3ItcmVkLWVycm9yOiByZ2IoMTg1LCA3NCwgNzIpO1xuJGNvbG9yLWJsdWUtaG92ZXI6IHJnYigxMDAsIDE3NywgMjE2KTtcbiRjb2xvci1ncmV5LWFycm93OiByZ2IoMjA0LCAyMDQsIDIwNCk7XG5cbiR3aWR0aC1kZWZhdWx0OiAyMjBweDtcblxuJHppbmRleC1zZWxlY3QtZHJvcGRvd246IDEwMzUgIWRlZmF1bHQ7ICIsIi8vIFdlYktpdC1zdHlsZSBmb2N1c1xuXG5AbWl4aW4gdGFiLWZvY3VzKCkge1xuICAvLyBEZWZhdWx0XG4gIG91dGxpbmU6IHRoaW4gZG90dGVkO1xuICAvLyBXZWJLaXRcbiAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xuICBvdXRsaW5lLW9mZnNldDogLTJweDtcbn1cbiIsIi8vIEltYWdlIE1peGluc1xuLy8gLSBSZXNwb25zaXZlIGltYWdlXG4vLyAtIFJldGluYSBpbWFnZVxuXG5cbi8vIFJlc3BvbnNpdmUgaW1hZ2Vcbi8vXG4vLyBLZWVwIGltYWdlcyBmcm9tIHNjYWxpbmcgYmV5b25kIHRoZSB3aWR0aCBvZiB0aGVpciBwYXJlbnRzLlxuQG1peGluIGltZy1yZXNwb25zaXZlKCRkaXNwbGF5OiBibG9jaykge1xuICBkaXNwbGF5OiAkZGlzcGxheTtcbiAgbWF4LXdpZHRoOiAxMDAlOyAvLyBQYXJ0IDE6IFNldCBhIG1heGltdW0gcmVsYXRpdmUgdG8gdGhlIHBhcmVudFxuICBoZWlnaHQ6IGF1dG87IC8vIFBhcnQgMjogU2NhbGUgdGhlIGhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIHdpZHRoLCBvdGhlcndpc2UgeW91IGdldCBzdHJldGNoaW5nXG59XG5cblxuLy8gUmV0aW5hIGltYWdlXG4vL1xuLy8gU2hvcnQgcmV0aW5hIG1peGluIGZvciBzZXR0aW5nIGJhY2tncm91bmQtaW1hZ2UgYW5kIC1zaXplLiBOb3RlIHRoYXQgdGhlXG4vLyBzcGVsbGluZyBvZiBgbWluLS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvYCBpcyBpbnRlbnRpb25hbC5cbkBtaXhpbiBpbWctcmV0aW5hKCRmaWxlLTF4LCAkZmlsZS0yeCwgJHdpZHRoLTF4LCAkaGVpZ2h0LTF4KSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChpZigkYm9vdHN0cmFwLXNhc3MtYXNzZXQtaGVscGVyLCB0d2JzLWltYWdlLXBhdGgoXCIjeyRmaWxlLTF4fVwiKSwgXCIjeyRmaWxlLTF4fVwiKSk7XG5cbiAgQG1lZGlhXG4gIG9ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKSxcbiAgb25seSBzY3JlZW4gYW5kICggICBtaW4tLW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLFxuICBvbmx5IHNjcmVlbiBhbmQgKCAgICAgLW8tbWluLWRldmljZS1waXhlbC1yYXRpbzogMi8xKSxcbiAgb25seSBzY3JlZW4gYW5kICggICAgICAgIG1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLFxuICBvbmx5IHNjcmVlbiBhbmQgKCAgICAgICAgICAgICAgICBtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSxcbiAgb25seSBzY3JlZW4gYW5kICggICAgICAgICAgICAgICAgbWluLXJlc29sdXRpb246IDJkcHB4KSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGlmKCRib290c3RyYXAtc2Fzcy1hc3NldC1oZWxwZXIsIHR3YnMtaW1hZ2UtcGF0aChcIiN7JGZpbGUtMnh9XCIpLCBcIiN7JGZpbGUtMnh9XCIpKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6ICR3aWR0aC0xeCAkaGVpZ2h0LTF4O1xuICB9XG59XG4iLCIvL1xuLy8gVHlwb2dyYXBoeVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBIZWFkaW5nc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2LFxuLmgxLCAuaDIsIC5oMywgLmg0LCAuaDUsIC5oNiB7XG4gIGZvbnQtZmFtaWx5OiAkaGVhZGluZ3MtZm9udC1mYW1pbHk7XG4gIGZvbnQtd2VpZ2h0OiAkaGVhZGluZ3MtZm9udC13ZWlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiAkaGVhZGluZ3MtbGluZS1oZWlnaHQ7XG4gIGNvbG9yOiAkaGVhZGluZ3MtY29sb3I7XG5cbiAgc21hbGwsXG4gIC5zbWFsbCB7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBjb2xvcjogJGhlYWRpbmdzLXNtYWxsLWNvbG9yO1xuICB9XG59XG5cbmgxLCAuaDEsXG5oMiwgLmgyLFxuaDMsIC5oMyB7XG4gIG1hcmdpbi10b3A6ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgbWFyZ2luLWJvdHRvbTogKCRsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpO1xuXG4gIHNtYWxsLFxuICAuc21hbGwge1xuICAgIGZvbnQtc2l6ZTogNjUlO1xuICB9XG59XG5oNCwgLmg0LFxuaDUsIC5oNSxcbmg2LCAuaDYge1xuICBtYXJnaW4tdG9wOiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG4gIG1hcmdpbi1ib3R0b206ICgkbGluZS1oZWlnaHQtY29tcHV0ZWQgLyAyKTtcblxuICBzbWFsbCxcbiAgLnNtYWxsIHtcbiAgICBmb250LXNpemU6IDc1JTtcbiAgfVxufVxuXG5oMSwgLmgxIHsgZm9udC1zaXplOiAkZm9udC1zaXplLWgxOyB9XG5oMiwgLmgyIHsgZm9udC1zaXplOiAkZm9udC1zaXplLWgyOyB9XG5oMywgLmgzIHsgZm9udC1zaXplOiAkZm9udC1zaXplLWgzOyB9XG5oNCwgLmg0IHsgZm9udC1zaXplOiAkZm9udC1zaXplLWg0OyB9XG5oNSwgLmg1IHsgZm9udC1zaXplOiAkZm9udC1zaXplLWg1OyB9XG5oNiwgLmg2IHsgZm9udC1zaXplOiAkZm9udC1zaXplLWg2OyB9XG5cblxuLy8gQm9keSB0ZXh0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnAge1xuICBtYXJnaW46IDAgMCAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG59XG5cbi5sZWFkIHtcbiAgbWFyZ2luLWJvdHRvbTogJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBmb250LXNpemU6IGZsb29yKCgkZm9udC1zaXplLWJhc2UgKiAxLjE1KSk7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgZm9udC1zaXplOiAoJGZvbnQtc2l6ZS1iYXNlICogMS41KTtcbiAgfVxufVxuXG5cbi8vIEVtcGhhc2lzICYgbWlzY1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBFeDogKDEycHggc21hbGwgZm9udCAvIDE0cHggYmFzZSBmb250KSAqIDEwMCUgPSBhYm91dCA4NSVcbnNtYWxsLFxuLnNtYWxsIHtcbiAgZm9udC1zaXplOiBmbG9vcigoMTAwJSAqICRmb250LXNpemUtc21hbGwgLyAkZm9udC1zaXplLWJhc2UpKTtcbn1cblxubWFyayxcbi5tYXJrIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHN0YXRlLXdhcm5pbmctYmc7XG4gIHBhZGRpbmc6IC4yZW07XG59XG5cbi8vIEFsaWdubWVudFxuLnRleHQtbGVmdCAgICAgICAgICAgeyB0ZXh0LWFsaWduOiBsZWZ0OyB9XG4udGV4dC1yaWdodCAgICAgICAgICB7IHRleHQtYWxpZ246IHJpZ2h0OyB9XG4udGV4dC1jZW50ZXIgICAgICAgICB7IHRleHQtYWxpZ246IGNlbnRlcjsgfVxuLnRleHQtanVzdGlmeSAgICAgICAgeyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyB9XG4udGV4dC1ub3dyYXAgICAgICAgICB7IHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cblxuLy8gVHJhbnNmb3JtYXRpb25cbi50ZXh0LWxvd2VyY2FzZSAgICAgIHsgdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZTsgfVxuLnRleHQtdXBwZXJjYXNlICAgICAgeyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9XG4udGV4dC1jYXBpdGFsaXplICAgICB7IHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOyB9XG5cbi8vIENvbnRleHR1YWwgY29sb3JzXG4udGV4dC1tdXRlZCB7XG4gIGNvbG9yOiAkdGV4dC1tdXRlZDtcbn1cblxuQGluY2x1ZGUgdGV4dC1lbXBoYXNpcy12YXJpYW50KCcudGV4dC1wcmltYXJ5JywgJGJyYW5kLXByaW1hcnkpO1xuXG5AaW5jbHVkZSB0ZXh0LWVtcGhhc2lzLXZhcmlhbnQoJy50ZXh0LXN1Y2Nlc3MnLCAkc3RhdGUtc3VjY2Vzcy10ZXh0KTtcblxuQGluY2x1ZGUgdGV4dC1lbXBoYXNpcy12YXJpYW50KCcudGV4dC1pbmZvJywgJHN0YXRlLWluZm8tdGV4dCk7XG5cbkBpbmNsdWRlIHRleHQtZW1waGFzaXMtdmFyaWFudCgnLnRleHQtd2FybmluZycsICRzdGF0ZS13YXJuaW5nLXRleHQpO1xuXG5AaW5jbHVkZSB0ZXh0LWVtcGhhc2lzLXZhcmlhbnQoJy50ZXh0LWRhbmdlcicsICRzdGF0ZS1kYW5nZXItdGV4dCk7XG5cbi8vIENvbnRleHR1YWwgYmFja2dyb3VuZHNcbi8vIEZvciBub3cgd2UnbGwgbGVhdmUgdGhlc2UgYWxvbmdzaWRlIHRoZSB0ZXh0IGNsYXNzZXMgdW50aWwgdjQgd2hlbiB3ZSBjYW5cbi8vIHNhZmVseSBzaGlmdCB0aGluZ3MgYXJvdW5kIChwZXIgU2VtVmVyIHJ1bGVzKS5cbi5iZy1wcmltYXJ5IHtcbiAgLy8gR2l2ZW4gdGhlIGNvbnRyYXN0IGhlcmUsIHRoaXMgaXMgdGhlIG9ubHkgY2xhc3MgdG8gaGF2ZSBpdHMgY29sb3IgaW52ZXJ0ZWRcbiAgLy8gYXV0b21hdGljYWxseS5cbiAgY29sb3I6ICNmZmY7XG59XG5AaW5jbHVkZSBiZy12YXJpYW50KCcuYmctcHJpbWFyeScsICRicmFuZC1wcmltYXJ5KTtcblxuQGluY2x1ZGUgYmctdmFyaWFudCgnLmJnLXN1Y2Nlc3MnLCAkc3RhdGUtc3VjY2Vzcy1iZyk7XG5cbkBpbmNsdWRlIGJnLXZhcmlhbnQoJy5iZy1pbmZvJywgJHN0YXRlLWluZm8tYmcpO1xuXG5AaW5jbHVkZSBiZy12YXJpYW50KCcuYmctd2FybmluZycsICRzdGF0ZS13YXJuaW5nLWJnKTtcblxuQGluY2x1ZGUgYmctdmFyaWFudCgnLmJnLWRhbmdlcicsICRzdGF0ZS1kYW5nZXItYmcpO1xuXG5cbi8vIFBhZ2UgaGVhZGVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5wYWdlLWhlYWRlciB7XG4gIHBhZGRpbmctYm90dG9tOiAoKCRsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpIC0gMSk7XG4gIG1hcmdpbjogKCRsaW5lLWhlaWdodC1jb21wdXRlZCAqIDIpIDAgJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHBhZ2UtaGVhZGVyLWJvcmRlci1jb2xvcjtcbn1cblxuXG4vLyBMaXN0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBVbm9yZGVyZWQgYW5kIE9yZGVyZWQgbGlzdHNcbnVsLFxub2wge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG4gIHVsLFxuICBvbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4vLyBMaXN0IG9wdGlvbnNcblxuLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIGZyb20gYC5saXN0LXVuc3R5bGVkYCBmb3IgbGlic2FzcyBjb21wYXRpYmlsaXR5XG5AbWl4aW4gbGlzdC11bnN0eWxlZCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cbi8vIFtjb252ZXJ0ZXJdIGV4dHJhY3RlZCBhcyBgQG1peGluIGxpc3QtdW5zdHlsZWRgIGZvciBsaWJzYXNzIGNvbXBhdGliaWxpdHlcbi5saXN0LXVuc3R5bGVkIHtcbiAgQGluY2x1ZGUgbGlzdC11bnN0eWxlZDtcbn1cblxuXG4vLyBJbmxpbmUgdHVybnMgbGlzdCBpdGVtcyBpbnRvIGlubGluZS1ibG9ja1xuLmxpc3QtaW5saW5lIHtcbiAgQGluY2x1ZGUgbGlzdC11bnN0eWxlZDtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7XG5cbiAgPiBsaSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmctbGVmdDogNXB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDVweDtcbiAgfVxufVxuXG4vLyBEZXNjcmlwdGlvbiBMaXN0c1xuZGwge1xuICBtYXJnaW4tdG9wOiAwOyAvLyBSZW1vdmUgYnJvd3NlciBkZWZhdWx0XG4gIG1hcmdpbi1ib3R0b206ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbn1cbmR0LFxuZGQge1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG59XG5kdCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuZGQge1xuICBtYXJnaW4tbGVmdDogMDsgLy8gVW5kbyBicm93c2VyIGRlZmF1bHRcbn1cblxuLy8gSG9yaXpvbnRhbCBkZXNjcmlwdGlvbiBsaXN0c1xuLy9cbi8vIERlZmF1bHRzIHRvIGJlaW5nIHN0YWNrZWQgd2l0aG91dCBhbnkgb2YgdGhlIGJlbG93IHN0eWxlcyBhcHBsaWVkLCB1bnRpbCB0aGVcbi8vIGdyaWQgYnJlYWtwb2ludCBpcyByZWFjaGVkIChkZWZhdWx0IG9mIH43NjhweCkuXG5cbi5kbC1ob3Jpem9udGFsIHtcbiAgZGQge1xuICAgIEBpbmNsdWRlIGNsZWFyZml4OyAvLyBDbGVhciB0aGUgZmxvYXRlZCBgZHRgIGlmIGFuIGVtcHR5IGBkZGAgaXMgcHJlc2VudFxuICB9XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBkdCB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICAgIHdpZHRoOiAoJGRsLWhvcml6b250YWwtb2Zmc2V0IC0gMjApO1xuICAgICAgY2xlYXI6IGxlZnQ7XG4gICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgIEBpbmNsdWRlIHRleHQtb3ZlcmZsb3c7XG4gICAgfVxuICAgIGRkIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZGwtaG9yaXpvbnRhbC1vZmZzZXQ7XG4gICAgfVxuICB9XG59XG5cblxuLy8gTWlzY1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBBYmJyZXZpYXRpb25zIGFuZCBhY3Jvbnltc1xuYWJiclt0aXRsZV0sXG4vLyBBZGQgZGF0YS0qIGF0dHJpYnV0ZSB0byBoZWxwIG91dCBvdXIgdG9vbHRpcCBwbHVnaW4sIHBlciBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzUyNTdcbmFiYnJbZGF0YS1vcmlnaW5hbC10aXRsZV0ge1xuICBjdXJzb3I6IGhlbHA7XG4gIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgJGFiYnItYm9yZGVyLWNvbG9yO1xufVxuLmluaXRpYWxpc20ge1xuICBmb250LXNpemU6IDkwJTtcbiAgQGV4dGVuZCAudGV4dC11cHBlcmNhc2U7XG59XG5cbi8vIEJsb2NrcXVvdGVzXG5ibG9ja3F1b3RlIHtcbiAgcGFkZGluZzogKCRsaW5lLWhlaWdodC1jb21wdXRlZCAvIDIpICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgbWFyZ2luOiAwIDAgJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBmb250LXNpemU6ICRibG9ja3F1b3RlLWZvbnQtc2l6ZTtcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAkYmxvY2txdW90ZS1ib3JkZXItY29sb3I7XG5cbiAgcCxcbiAgdWwsXG4gIG9sIHtcbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICAvLyBOb3RlOiBEZXByZWNhdGVkIHNtYWxsIGFuZCAuc21hbGwgYXMgb2YgdjMuMS4wXG4gIC8vIENvbnRleHQ6IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTE2NjBcbiAgZm9vdGVyLFxuICBzbWFsbCxcbiAgLnNtYWxsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LXNpemU6IDgwJTsgLy8gYmFjayB0byBkZWZhdWx0IGZvbnQtc2l6ZVxuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgICBjb2xvcjogJGJsb2NrcXVvdGUtc21hbGwtY29sb3I7XG5cbiAgICAmOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAnXFwyMDE0IFxcMDBBMCc7IC8vIGVtIGRhc2gsIG5ic3BcbiAgICB9XG4gIH1cbn1cblxuLy8gT3Bwb3NpdGUgYWxpZ25tZW50IG9mIGJsb2NrcXVvdGVcbi8vXG4vLyBIZWFkcyB1cDogYGJsb2NrcXVvdGUucHVsbC1yaWdodGAgaGFzIGJlZW4gZGVwcmVjYXRlZCBhcyBvZiB2My4xLjAuXG4uYmxvY2txdW90ZS1yZXZlcnNlLFxuYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHtcbiAgcGFkZGluZy1yaWdodDogMTVweDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCAkYmxvY2txdW90ZS1ib3JkZXItY29sb3I7XG4gIGJvcmRlci1sZWZ0OiAwO1xuICB0ZXh0LWFsaWduOiByaWdodDtcblxuICAvLyBBY2NvdW50IGZvciBjaXRhdGlvblxuICBmb290ZXIsXG4gIHNtYWxsLFxuICAuc21hbGwge1xuICAgICY6YmVmb3JlIHsgY29udGVudDogJyc7IH1cbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICdcXDAwQTAgXFwyMDE0JzsgLy8gbmJzcCwgZW0gZGFzaFxuICAgIH1cbiAgfVxufVxuXG4vLyBBZGRyZXNzZXNcbmFkZHJlc3Mge1xuICBtYXJnaW4tYm90dG9tOiAkbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xufVxuIiwiLy8gVHlwb2dyYXBoeVxuXG4vLyBbY29udmVydGVyXSAkcGFyZW50IGhhY2tcbkBtaXhpbiB0ZXh0LWVtcGhhc2lzLXZhcmlhbnQoJHBhcmVudCwgJGNvbG9yKSB7XG4gICN7JHBhcmVudH0ge1xuICAgIGNvbG9yOiAkY29sb3I7XG4gIH1cbiAgYSN7JHBhcmVudH06aG92ZXIsXG4gIGEjeyRwYXJlbnR9OmZvY3VzIHtcbiAgICBjb2xvcjogZGFya2VuKCRjb2xvciwgMTAlKTtcbiAgfVxufVxuIiwiLy8gQ29udGV4dHVhbCBiYWNrZ3JvdW5kc1xuXG4vLyBbY29udmVydGVyXSAkcGFyZW50IGhhY2tcbkBtaXhpbiBiZy12YXJpYW50KCRwYXJlbnQsICRjb2xvcikge1xuICAjeyRwYXJlbnR9IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG4gIH1cbiAgYSN7JHBhcmVudH06aG92ZXIsXG4gIGEjeyRwYXJlbnR9OmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAxMCUpO1xuICB9XG59XG4iLCIvLyBDbGVhcmZpeFxuLy9cbi8vIEZvciBtb2Rlcm4gYnJvd3NlcnNcbi8vIDEuIFRoZSBzcGFjZSBjb250ZW50IGlzIG9uZSB3YXkgdG8gYXZvaWQgYW4gT3BlcmEgYnVnIHdoZW4gdGhlXG4vLyAgICBjb250ZW50ZWRpdGFibGUgYXR0cmlidXRlIGlzIGluY2x1ZGVkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGRvY3VtZW50LlxuLy8gICAgT3RoZXJ3aXNlIGl0IGNhdXNlcyBzcGFjZSB0byBhcHBlYXIgYXQgdGhlIHRvcCBhbmQgYm90dG9tIG9mIGVsZW1lbnRzXG4vLyAgICB0aGF0IGFyZSBjbGVhcmZpeGVkLlxuLy8gMi4gVGhlIHVzZSBvZiBgdGFibGVgIHJhdGhlciB0aGFuIGBibG9ja2AgaXMgb25seSBuZWNlc3NhcnkgaWYgdXNpbmdcbi8vICAgIGA6YmVmb3JlYCB0byBjb250YWluIHRoZSB0b3AtbWFyZ2lucyBvZiBjaGlsZCBlbGVtZW50cy5cbi8vXG4vLyBTb3VyY2U6IGh0dHA6Ly9uaWNvbGFzZ2FsbGFnaGVyLmNvbS9taWNyby1jbGVhcmZpeC1oYWNrL1xuXG5AbWl4aW4gY2xlYXJmaXgoKSB7XG4gICY6YmVmb3JlLFxuICAmOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIiBcIjsgLy8gMVxuICAgIGRpc3BsYXk6IHRhYmxlOyAvLyAyXG4gIH1cbiAgJjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7XG4gIH1cbn1cbiIsIi8vIFRleHQgb3ZlcmZsb3dcbi8vIFJlcXVpcmVzIGlubGluZS1ibG9jayBvciBibG9jayBmb3IgcHJvcGVyIHN0eWxpbmdcblxuQG1peGluIHRleHQtb3ZlcmZsb3coKSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuIiwiLy9cbi8vIENvZGUgKGlubGluZSBhbmQgYmxvY2spXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIElubGluZSBhbmQgYmxvY2sgY29kZSBzdHlsZXNcbmNvZGUsXG5rYmQsXG5wcmUsXG5zYW1wIHtcbiAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vc3BhY2U7XG59XG5cbi8vIElubGluZSBjb2RlXG5jb2RlIHtcbiAgcGFkZGluZzogMnB4IDRweDtcbiAgZm9udC1zaXplOiA5MCU7XG4gIGNvbG9yOiAkY29kZS1jb2xvcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGNvZGUtYmc7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWJhc2U7XG59XG5cbi8vIFVzZXIgaW5wdXQgdHlwaWNhbGx5IGVudGVyZWQgdmlhIGtleWJvYXJkXG5rYmQge1xuICBwYWRkaW5nOiAycHggNHB4O1xuICBmb250LXNpemU6IDkwJTtcbiAgY29sb3I6ICRrYmQtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6ICRrYmQtYmc7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLXNtYWxsO1xuICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLC4yNSk7XG5cbiAga2JkIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQtc2l6ZTogMTAwJTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG59XG5cbi8vIEJsb2NrcyBvZiBjb2RlXG5wcmUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogKCgkbGluZS1oZWlnaHQtY29tcHV0ZWQgLSAxKSAvIDIpO1xuICBtYXJnaW46IDAgMCAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMik7XG4gIGZvbnQtc2l6ZTogKCRmb250LXNpemUtYmFzZSAtIDEpOyAvLyAxNHB4IHRvIDEzcHhcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgY29sb3I6ICRwcmUtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6ICRwcmUtYmc7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRwcmUtYm9yZGVyLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuXG4gIC8vIEFjY291bnQgZm9yIHNvbWUgY29kZSBvdXRwdXRzIHRoYXQgcGxhY2UgY29kZSB0YWdzIGluIHByZSB0YWdzXG4gIGNvZGUge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG59XG5cbi8vIEVuYWJsZSBzY3JvbGxhYmxlIGJsb2NrcyBvZiBjb2RlXG4ucHJlLXNjcm9sbGFibGUge1xuICBtYXgtaGVpZ2h0OiAkcHJlLXNjcm9sbGFibGUtbWF4LWhlaWdodDtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xufVxuIiwiLy9cbi8vIEdyaWQgc3lzdGVtXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIENvbnRhaW5lciB3aWR0aHNcbi8vXG4vLyBTZXQgdGhlIGNvbnRhaW5lciB3aWR0aCwgYW5kIG92ZXJyaWRlIGl0IGZvciBmaXhlZCBuYXZiYXJzIGluIG1lZGlhIHF1ZXJpZXMuXG5cbi5jb250YWluZXIge1xuICBAaW5jbHVkZSBjb250YWluZXItZml4ZWQ7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgd2lkdGg6ICRjb250YWluZXItc207XG4gIH1cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSB7XG4gICAgd2lkdGg6ICRjb250YWluZXItbWQ7XG4gIH1cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGctbWluKSB7XG4gICAgd2lkdGg6ICRjb250YWluZXItbGc7XG4gIH1cbn1cblxuXG4vLyBGbHVpZCBjb250YWluZXJcbi8vXG4vLyBVdGlsaXplcyB0aGUgbWl4aW4gbWVhbnQgZm9yIGZpeGVkIHdpZHRoIGNvbnRhaW5lcnMsIGJ1dCB3aXRob3V0IGFueSBkZWZpbmVkXG4vLyB3aWR0aCBmb3IgZmx1aWQsIGZ1bGwgd2lkdGggbGF5b3V0cy5cblxuLmNvbnRhaW5lci1mbHVpZCB7XG4gIEBpbmNsdWRlIGNvbnRhaW5lci1maXhlZDtcbn1cblxuXG4vLyBSb3dcbi8vXG4vLyBSb3dzIGNvbnRhaW4gYW5kIGNsZWFyIHRoZSBmbG9hdHMgb2YgeW91ciBjb2x1bW5zLlxuXG4ucm93IHtcbiAgQGluY2x1ZGUgbWFrZS1yb3c7XG59XG5cblxuLy8gQ29sdW1uc1xuLy9cbi8vIENvbW1vbiBzdHlsZXMgZm9yIHNtYWxsIGFuZCBsYXJnZSBncmlkIGNvbHVtbnNcblxuQGluY2x1ZGUgbWFrZS1ncmlkLWNvbHVtbnM7XG5cblxuLy8gRXh0cmEgc21hbGwgZ3JpZFxuLy9cbi8vIENvbHVtbnMsIG9mZnNldHMsIHB1c2hlcywgYW5kIHB1bGxzIGZvciBleHRyYSBzbWFsbCBkZXZpY2VzIGxpa2Vcbi8vIHNtYXJ0cGhvbmVzLlxuXG5AaW5jbHVkZSBtYWtlLWdyaWQoeHMpO1xuXG5cbi8vIFNtYWxsIGdyaWRcbi8vXG4vLyBDb2x1bW5zLCBvZmZzZXRzLCBwdXNoZXMsIGFuZCBwdWxscyBmb3IgdGhlIHNtYWxsIGRldmljZSByYW5nZSwgZnJvbSBwaG9uZXNcbi8vIHRvIHRhYmxldHMuXG5cbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICBAaW5jbHVkZSBtYWtlLWdyaWQoc20pO1xufVxuXG5cbi8vIE1lZGl1bSBncmlkXG4vL1xuLy8gQ29sdW1ucywgb2Zmc2V0cywgcHVzaGVzLCBhbmQgcHVsbHMgZm9yIHRoZSBkZXNrdG9wIGRldmljZSByYW5nZS5cblxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSB7XG4gIEBpbmNsdWRlIG1ha2UtZ3JpZChtZCk7XG59XG5cblxuLy8gTGFyZ2UgZ3JpZFxuLy9cbi8vIENvbHVtbnMsIG9mZnNldHMsIHB1c2hlcywgYW5kIHB1bGxzIGZvciB0aGUgbGFyZ2UgZGVza3RvcCBkZXZpY2UgcmFuZ2UuXG5cbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICBAaW5jbHVkZSBtYWtlLWdyaWQobGcpO1xufVxuIiwiLy8gR3JpZCBzeXN0ZW1cbi8vXG4vLyBHZW5lcmF0ZSBzZW1hbnRpYyBncmlkIGNvbHVtbnMgd2l0aCB0aGVzZSBtaXhpbnMuXG5cbi8vIENlbnRlcmVkIGNvbnRhaW5lciBlbGVtZW50XG5AbWl4aW4gY29udGFpbmVyLWZpeGVkKCRndXR0ZXI6ICRncmlkLWd1dHRlci13aWR0aCkge1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICBwYWRkaW5nLWxlZnQ6ICAoJGd1dHRlciAvIDIpO1xuICBwYWRkaW5nLXJpZ2h0OiAoJGd1dHRlciAvIDIpO1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbn1cblxuLy8gQ3JlYXRlcyBhIHdyYXBwZXIgZm9yIGEgc2VyaWVzIG9mIGNvbHVtbnNcbkBtaXhpbiBtYWtlLXJvdygkZ3V0dGVyOiAkZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgbWFyZ2luLWxlZnQ6ICBjZWlsKCgkZ3V0dGVyIC8gLTIpKTtcbiAgbWFyZ2luLXJpZ2h0OiBmbG9vcigoJGd1dHRlciAvIC0yKSk7XG4gIEBpbmNsdWRlIGNsZWFyZml4O1xufVxuXG4vLyBHZW5lcmF0ZSB0aGUgZXh0cmEgc21hbGwgY29sdW1uc1xuQG1peGluIG1ha2UteHMtY29sdW1uKCRjb2x1bW5zLCAkZ3V0dGVyOiAkZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xuICBtaW4taGVpZ2h0OiAxcHg7XG4gIHBhZGRpbmctbGVmdDogICgkZ3V0dGVyIC8gMik7XG4gIHBhZGRpbmctcmlnaHQ6ICgkZ3V0dGVyIC8gMik7XG59XG5AbWl4aW4gbWFrZS14cy1jb2x1bW4tb2Zmc2V0KCRjb2x1bW5zKSB7XG4gIG1hcmdpbi1sZWZ0OiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbn1cbkBtaXhpbiBtYWtlLXhzLWNvbHVtbi1wdXNoKCRjb2x1bW5zKSB7XG4gIGxlZnQ6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xufVxuQG1peGluIG1ha2UteHMtY29sdW1uLXB1bGwoJGNvbHVtbnMpIHtcbiAgcmlnaHQ6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xufVxuXG4vLyBHZW5lcmF0ZSB0aGUgc21hbGwgY29sdW1uc1xuQG1peGluIG1ha2Utc20tY29sdW1uKCRjb2x1bW5zLCAkZ3V0dGVyOiAkZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAxcHg7XG4gIHBhZGRpbmctbGVmdDogICgkZ3V0dGVyIC8gMik7XG4gIHBhZGRpbmctcmlnaHQ6ICgkZ3V0dGVyIC8gMik7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgd2lkdGg6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xuICB9XG59XG5AbWl4aW4gbWFrZS1zbS1jb2x1bW4tb2Zmc2V0KCRjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgIG1hcmdpbi1sZWZ0OiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuQG1peGluIG1ha2Utc20tY29sdW1uLXB1c2goJGNvbHVtbnMpIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgbGVmdDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbkBtaXhpbiBtYWtlLXNtLWNvbHVtbi1wdWxsKCRjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgIHJpZ2h0OiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuXG4vLyBHZW5lcmF0ZSB0aGUgbWVkaXVtIGNvbHVtbnNcbkBtaXhpbiBtYWtlLW1kLWNvbHVtbigkY29sdW1ucywgJGd1dHRlcjogJGdyaWQtZ3V0dGVyLXdpZHRoKSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLWhlaWdodDogMXB4O1xuICBwYWRkaW5nLWxlZnQ6ICAoJGd1dHRlciAvIDIpO1xuICBwYWRkaW5nLXJpZ2h0OiAoJGd1dHRlciAvIDIpO1xuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHdpZHRoOiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuQG1peGluIG1ha2UtbWQtY29sdW1uLW9mZnNldCgkY29sdW1ucykge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1tZC1taW4pIHtcbiAgICBtYXJnaW4tbGVmdDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbkBtaXhpbiBtYWtlLW1kLWNvbHVtbi1wdXNoKCRjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICAgIGxlZnQ6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xuICB9XG59XG5AbWl4aW4gbWFrZS1tZC1jb2x1bW4tcHVsbCgkY29sdW1ucykge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1tZC1taW4pIHtcbiAgICByaWdodDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cblxuLy8gR2VuZXJhdGUgdGhlIGxhcmdlIGNvbHVtbnNcbkBtaXhpbiBtYWtlLWxnLWNvbHVtbigkY29sdW1ucywgJGd1dHRlcjogJGdyaWQtZ3V0dGVyLXdpZHRoKSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWluLWhlaWdodDogMXB4O1xuICBwYWRkaW5nLWxlZnQ6ICAoJGd1dHRlciAvIDIpO1xuICBwYWRkaW5nLXJpZ2h0OiAoJGd1dHRlciAvIDIpO1xuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHdpZHRoOiBwZXJjZW50YWdlKCgkY29sdW1ucyAvICRncmlkLWNvbHVtbnMpKTtcbiAgfVxufVxuQG1peGluIG1ha2UtbGctY29sdW1uLW9mZnNldCgkY29sdW1ucykge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1sZy1taW4pIHtcbiAgICBtYXJnaW4tbGVmdDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbkBtaXhpbiBtYWtlLWxnLWNvbHVtbi1wdXNoKCRjb2x1bW5zKSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICAgIGxlZnQ6IHBlcmNlbnRhZ2UoKCRjb2x1bW5zIC8gJGdyaWQtY29sdW1ucykpO1xuICB9XG59XG5AbWl4aW4gbWFrZS1sZy1jb2x1bW4tcHVsbCgkY29sdW1ucykge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1sZy1taW4pIHtcbiAgICByaWdodDogcGVyY2VudGFnZSgoJGNvbHVtbnMgLyAkZ3JpZC1jb2x1bW5zKSk7XG4gIH1cbn1cbiIsIi8vIEZyYW1ld29yayBncmlkIGdlbmVyYXRpb25cbi8vXG4vLyBVc2VkIG9ubHkgYnkgQm9vdHN0cmFwIHRvIGdlbmVyYXRlIHRoZSBjb3JyZWN0IG51bWJlciBvZiBncmlkIGNsYXNzZXMgZ2l2ZW5cbi8vIGFueSB2YWx1ZSBvZiBgJGdyaWQtY29sdW1uc2AuXG5cbi8vIFtjb252ZXJ0ZXJdIFRoaXMgaXMgZGVmaW5lZCByZWN1cnNpdmVseSBpbiBMRVNTLCBidXQgU2FzcyBzdXBwb3J0cyByZWFsIGxvb3BzXG5AbWl4aW4gbWFrZS1ncmlkLWNvbHVtbnMoJGk6IDEsICRsaXN0OiBcIi5jb2wteHMtI3skaX0sIC5jb2wtc20tI3skaX0sIC5jb2wtbWQtI3skaX0sIC5jb2wtbGctI3skaX1cIikge1xuICBAZm9yICRpIGZyb20gKDEgKyAxKSB0aHJvdWdoICRncmlkLWNvbHVtbnMge1xuICAgICRsaXN0OiBcIiN7JGxpc3R9LCAuY29sLXhzLSN7JGl9LCAuY29sLXNtLSN7JGl9LCAuY29sLW1kLSN7JGl9LCAuY29sLWxnLSN7JGl9XCI7XG4gIH1cbiAgI3skbGlzdH0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAvLyBQcmV2ZW50IGNvbHVtbnMgZnJvbSBjb2xsYXBzaW5nIHdoZW4gZW1wdHlcbiAgICBtaW4taGVpZ2h0OiAxcHg7XG4gICAgLy8gSW5uZXIgZ3V0dGVyIHZpYSBwYWRkaW5nXG4gICAgcGFkZGluZy1sZWZ0OiAgY2VpbCgoJGdyaWQtZ3V0dGVyLXdpZHRoIC8gMikpO1xuICAgIHBhZGRpbmctcmlnaHQ6IGZsb29yKCgkZ3JpZC1ndXR0ZXItd2lkdGggLyAyKSk7XG4gIH1cbn1cblxuXG4vLyBbY29udmVydGVyXSBUaGlzIGlzIGRlZmluZWQgcmVjdXJzaXZlbHkgaW4gTEVTUywgYnV0IFNhc3Mgc3VwcG9ydHMgcmVhbCBsb29wc1xuQG1peGluIGZsb2F0LWdyaWQtY29sdW1ucygkY2xhc3MsICRpOiAxLCAkbGlzdDogXCIuY29sLSN7JGNsYXNzfS0jeyRpfVwiKSB7XG4gIEBmb3IgJGkgZnJvbSAoMSArIDEpIHRocm91Z2ggJGdyaWQtY29sdW1ucyB7XG4gICAgJGxpc3Q6IFwiI3skbGlzdH0sIC5jb2wtI3skY2xhc3N9LSN7JGl9XCI7XG4gIH1cbiAgI3skbGlzdH0ge1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG59XG5cblxuQG1peGluIGNhbGMtZ3JpZC1jb2x1bW4oJGluZGV4LCAkY2xhc3MsICR0eXBlKSB7XG4gIEBpZiAoJHR5cGUgPT0gd2lkdGgpIGFuZCAoJGluZGV4ID4gMCkge1xuICAgIC5jb2wtI3skY2xhc3N9LSN7JGluZGV4fSB7XG4gICAgICB3aWR0aDogcGVyY2VudGFnZSgoJGluZGV4IC8gJGdyaWQtY29sdW1ucykpO1xuICAgIH1cbiAgfVxuICBAaWYgKCR0eXBlID09IHB1c2gpIGFuZCAoJGluZGV4ID4gMCkge1xuICAgIC5jb2wtI3skY2xhc3N9LXB1c2gtI3skaW5kZXh9IHtcbiAgICAgIGxlZnQ6IHBlcmNlbnRhZ2UoKCRpbmRleCAvICRncmlkLWNvbHVtbnMpKTtcbiAgICB9XG4gIH1cbiAgQGlmICgkdHlwZSA9PSBwdXNoKSBhbmQgKCRpbmRleCA9PSAwKSB7XG4gICAgLmNvbC0jeyRjbGFzc30tcHVzaC0wIHtcbiAgICAgIGxlZnQ6IGF1dG87XG4gICAgfVxuICB9XG4gIEBpZiAoJHR5cGUgPT0gcHVsbCkgYW5kICgkaW5kZXggPiAwKSB7XG4gICAgLmNvbC0jeyRjbGFzc30tcHVsbC0jeyRpbmRleH0ge1xuICAgICAgcmlnaHQ6IHBlcmNlbnRhZ2UoKCRpbmRleCAvICRncmlkLWNvbHVtbnMpKTtcbiAgICB9XG4gIH1cbiAgQGlmICgkdHlwZSA9PSBwdWxsKSBhbmQgKCRpbmRleCA9PSAwKSB7XG4gICAgLmNvbC0jeyRjbGFzc30tcHVsbC0wIHtcbiAgICAgIHJpZ2h0OiBhdXRvO1xuICAgIH1cbiAgfVxuICBAaWYgKCR0eXBlID09IG9mZnNldCkge1xuICAgIC5jb2wtI3skY2xhc3N9LW9mZnNldC0jeyRpbmRleH0ge1xuICAgICAgbWFyZ2luLWxlZnQ6IHBlcmNlbnRhZ2UoKCRpbmRleCAvICRncmlkLWNvbHVtbnMpKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gW2NvbnZlcnRlcl0gVGhpcyBpcyBkZWZpbmVkIHJlY3Vyc2l2ZWx5IGluIExFU1MsIGJ1dCBTYXNzIHN1cHBvcnRzIHJlYWwgbG9vcHNcbkBtaXhpbiBsb29wLWdyaWQtY29sdW1ucygkY29sdW1ucywgJGNsYXNzLCAkdHlwZSkge1xuICBAZm9yICRpIGZyb20gMCB0aHJvdWdoICRjb2x1bW5zIHtcbiAgICBAaW5jbHVkZSBjYWxjLWdyaWQtY29sdW1uKCRpLCAkY2xhc3MsICR0eXBlKTtcbiAgfVxufVxuXG5cbi8vIENyZWF0ZSBncmlkIGZvciBzcGVjaWZpYyBjbGFzc1xuQG1peGluIG1ha2UtZ3JpZCgkY2xhc3MpIHtcbiAgQGluY2x1ZGUgZmxvYXQtZ3JpZC1jb2x1bW5zKCRjbGFzcyk7XG4gIEBpbmNsdWRlIGxvb3AtZ3JpZC1jb2x1bW5zKCRncmlkLWNvbHVtbnMsICRjbGFzcywgd2lkdGgpO1xuICBAaW5jbHVkZSBsb29wLWdyaWQtY29sdW1ucygkZ3JpZC1jb2x1bW5zLCAkY2xhc3MsIHB1bGwpO1xuICBAaW5jbHVkZSBsb29wLWdyaWQtY29sdW1ucygkZ3JpZC1jb2x1bW5zLCAkY2xhc3MsIHB1c2gpO1xuICBAaW5jbHVkZSBsb29wLWdyaWQtY29sdW1ucygkZ3JpZC1jb2x1bW5zLCAkY2xhc3MsIG9mZnNldCk7XG59XG4iLCIvL1xuLy8gVGFibGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbnRhYmxlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHRhYmxlLWJnO1xufVxuY2FwdGlvbiB7XG4gIHBhZGRpbmctdG9wOiAkdGFibGUtY2VsbC1wYWRkaW5nO1xuICBwYWRkaW5nLWJvdHRvbTogJHRhYmxlLWNlbGwtcGFkZGluZztcbiAgY29sb3I6ICR0ZXh0LW11dGVkO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxudGgge1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG5cbi8vIEJhc2VsaW5lIHN0eWxlc1xuXG4udGFibGUge1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiAkbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIC8vIENlbGxzXG4gID4gdGhlYWQsXG4gID4gdGJvZHksXG4gID4gdGZvb3Qge1xuICAgID4gdHIge1xuICAgICAgPiB0aCxcbiAgICAgID4gdGQge1xuICAgICAgICBwYWRkaW5nOiAkdGFibGUtY2VsbC1wYWRkaW5nO1xuICAgICAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAkdGFibGUtYm9yZGVyLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBCb3R0b20gYWxpZ24gZm9yIGNvbHVtbiBoZWFkaW5nc1xuICA+IHRoZWFkID4gdHIgPiB0aCB7XG4gICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgJHRhYmxlLWJvcmRlci1jb2xvcjtcbiAgfVxuICAvLyBSZW1vdmUgdG9wIGJvcmRlciBmcm9tIHRoZWFkIGJ5IGRlZmF1bHRcbiAgPiBjYXB0aW9uICsgdGhlYWQsXG4gID4gY29sZ3JvdXAgKyB0aGVhZCxcbiAgPiB0aGVhZDpmaXJzdC1jaGlsZCB7XG4gICAgPiB0cjpmaXJzdC1jaGlsZCB7XG4gICAgICA+IHRoLFxuICAgICAgPiB0ZCB7XG4gICAgICAgIGJvcmRlci10b3A6IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEFjY291bnQgZm9yIG11bHRpcGxlIHRib2R5IGluc3RhbmNlc1xuICA+IHRib2R5ICsgdGJvZHkge1xuICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCAkdGFibGUtYm9yZGVyLWNvbG9yO1xuICB9XG5cbiAgLy8gTmVzdGluZ1xuICAudGFibGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRib2R5LWJnO1xuICB9XG59XG5cblxuLy8gQ29uZGVuc2VkIHRhYmxlIHcvIGhhbGYgcGFkZGluZ1xuXG4udGFibGUtY29uZGVuc2VkIHtcbiAgPiB0aGVhZCxcbiAgPiB0Ym9keSxcbiAgPiB0Zm9vdCB7XG4gICAgPiB0ciB7XG4gICAgICA+IHRoLFxuICAgICAgPiB0ZCB7XG4gICAgICAgIHBhZGRpbmc6ICR0YWJsZS1jb25kZW5zZWQtY2VsbC1wYWRkaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi8vIEJvcmRlcmVkIHZlcnNpb25cbi8vXG4vLyBBZGQgYm9yZGVycyBhbGwgYXJvdW5kIHRoZSB0YWJsZSBhbmQgYmV0d2VlbiBhbGwgdGhlIGNvbHVtbnMuXG5cbi50YWJsZS1ib3JkZXJlZCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICR0YWJsZS1ib3JkZXItY29sb3I7XG4gID4gdGhlYWQsXG4gID4gdGJvZHksXG4gID4gdGZvb3Qge1xuICAgID4gdHIge1xuICAgICAgPiB0aCxcbiAgICAgID4gdGQge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkdGFibGUtYm9yZGVyLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICA+IHRoZWFkID4gdHIge1xuICAgID4gdGgsXG4gICAgPiB0ZCB7XG4gICAgICBib3JkZXItYm90dG9tLXdpZHRoOiAycHg7XG4gICAgfVxuICB9XG59XG5cblxuLy8gWmVicmEtc3RyaXBpbmdcbi8vXG4vLyBEZWZhdWx0IHplYnJhLXN0cmlwZSBzdHlsZXMgKGFsdGVybmF0aW5nIGdyYXkgYW5kIHRyYW5zcGFyZW50IGJhY2tncm91bmRzKVxuXG4udGFibGUtc3RyaXBlZCB7XG4gID4gdGJvZHkgPiB0cjpudGgtb2YtdHlwZShvZGQpIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGUtYmctYWNjZW50O1xuICB9XG59XG5cblxuLy8gSG92ZXIgZWZmZWN0XG4vL1xuLy8gUGxhY2VkIGhlcmUgc2luY2UgaXQgaGFzIHRvIGNvbWUgYWZ0ZXIgdGhlIHBvdGVudGlhbCB6ZWJyYSBzdHJpcGluZ1xuXG4udGFibGUtaG92ZXIge1xuICA+IHRib2R5ID4gdHI6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR0YWJsZS1iZy1ob3ZlcjtcbiAgfVxufVxuXG5cbi8vIFRhYmxlIGNlbGwgc2l6aW5nXG4vL1xuLy8gUmVzZXQgZGVmYXVsdCB0YWJsZSBiZWhhdmlvclxuXG50YWJsZSBjb2xbY2xhc3MqPVwiY29sLVwiXSB7XG4gIHBvc2l0aW9uOiBzdGF0aWM7IC8vIFByZXZlbnQgYm9yZGVyIGhpZGluZyBpbiBGaXJlZm94IGFuZCBJRTktMTEgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExNjIzKVxuICBmbG9hdDogbm9uZTtcbiAgZGlzcGxheTogdGFibGUtY29sdW1uO1xufVxudGFibGUge1xuICB0ZCxcbiAgdGgge1xuICAgICZbY2xhc3MqPVwiY29sLVwiXSB7XG4gICAgICBwb3NpdGlvbjogc3RhdGljOyAvLyBQcmV2ZW50IGJvcmRlciBoaWRpbmcgaW4gRmlyZWZveCBhbmQgSUU5LTExIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMTYyMylcbiAgICAgIGZsb2F0OiBub25lO1xuICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBUYWJsZSBiYWNrZ3JvdW5kc1xuLy9cbi8vIEV4YWN0IHNlbGVjdG9ycyBiZWxvdyByZXF1aXJlZCB0byBvdmVycmlkZSBgLnRhYmxlLXN0cmlwZWRgIGFuZCBwcmV2ZW50XG4vLyBpbmhlcml0YW5jZSB0byBuZXN0ZWQgdGFibGVzLlxuXG4vLyBHZW5lcmF0ZSB0aGUgY29udGV4dHVhbCB2YXJpYW50c1xuQGluY2x1ZGUgdGFibGUtcm93LXZhcmlhbnQoJ2FjdGl2ZScsICR0YWJsZS1iZy1hY3RpdmUpO1xuQGluY2x1ZGUgdGFibGUtcm93LXZhcmlhbnQoJ3N1Y2Nlc3MnLCAkc3RhdGUtc3VjY2Vzcy1iZyk7XG5AaW5jbHVkZSB0YWJsZS1yb3ctdmFyaWFudCgnaW5mbycsICRzdGF0ZS1pbmZvLWJnKTtcbkBpbmNsdWRlIHRhYmxlLXJvdy12YXJpYW50KCd3YXJuaW5nJywgJHN0YXRlLXdhcm5pbmctYmcpO1xuQGluY2x1ZGUgdGFibGUtcm93LXZhcmlhbnQoJ2RhbmdlcicsICRzdGF0ZS1kYW5nZXItYmcpO1xuXG5cbi8vIFJlc3BvbnNpdmUgdGFibGVzXG4vL1xuLy8gV3JhcCB5b3VyIHRhYmxlcyBpbiBgLnRhYmxlLXJlc3BvbnNpdmVgIGFuZCB3ZSdsbCBtYWtlIHRoZW0gbW9iaWxlIGZyaWVuZGx5XG4vLyBieSBlbmFibGluZyBob3Jpem9udGFsIHNjcm9sbGluZy4gT25seSBhcHBsaWVzIDw3NjhweC4gRXZlcnl0aGluZyBhYm92ZSB0aGF0XG4vLyB3aWxsIGRpc3BsYXkgbm9ybWFsbHkuXG5cbi50YWJsZS1yZXNwb25zaXZlIHtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgbWluLWhlaWdodDogMC4wMSU7IC8vIFdvcmthcm91bmQgZm9yIElFOSBidWcgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzE0ODM3KVxuXG4gIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogKCRsaW5lLWhlaWdodC1jb21wdXRlZCAqIDAuNzUpO1xuICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IC1tcy1hdXRvaGlkaW5nLXNjcm9sbGJhcjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkdGFibGUtYm9yZGVyLWNvbG9yO1xuXG4gICAgLy8gVGlnaHRlbiB1cCBzcGFjaW5nXG4gICAgPiAudGFibGUge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcblxuICAgICAgLy8gRW5zdXJlIHRoZSBjb250ZW50IGRvZXNuJ3Qgd3JhcFxuICAgICAgPiB0aGVhZCxcbiAgICAgID4gdGJvZHksXG4gICAgICA+IHRmb290IHtcbiAgICAgICAgPiB0ciB7XG4gICAgICAgICAgPiB0aCxcbiAgICAgICAgICA+IHRkIHtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBvdmVycmlkZXMgZm9yIHRoZSBib3JkZXJlZCB0YWJsZXNcbiAgICA+IC50YWJsZS1ib3JkZXJlZCB7XG4gICAgICBib3JkZXI6IDA7XG5cbiAgICAgIC8vIE51a2UgdGhlIGFwcHJvcHJpYXRlIGJvcmRlcnMgc28gdGhhdCB0aGUgcGFyZW50IGNhbiBoYW5kbGUgdGhlbVxuICAgICAgPiB0aGVhZCxcbiAgICAgID4gdGJvZHksXG4gICAgICA+IHRmb290IHtcbiAgICAgICAgPiB0ciB7XG4gICAgICAgICAgPiB0aDpmaXJzdC1jaGlsZCxcbiAgICAgICAgICA+IHRkOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICA+IHRoOmxhc3QtY2hpbGQsXG4gICAgICAgICAgPiB0ZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgIGJvcmRlci1yaWdodDogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT25seSBudWtlIHRoZSBsYXN0IHJvdydzIGJvdHRvbS1ib3JkZXIgaW4gYHRib2R5YCBhbmQgYHRmb290YCBzaW5jZVxuICAgICAgLy8gY2hhbmNlcyBhcmUgdGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBgdHJgIGluIGEgYHRoZWFkYCBhbmQgdGhhdCB3b3VsZFxuICAgICAgLy8gcmVtb3ZlIHRoZSBib3JkZXIgYWx0b2dldGhlci5cbiAgICAgID4gdGJvZHksXG4gICAgICA+IHRmb290IHtcbiAgICAgICAgPiB0cjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICA+IHRoLFxuICAgICAgICAgID4gdGQge1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cbiAgfVxufVxuIiwiLy8gVGFibGVzXG5cbkBtaXhpbiB0YWJsZS1yb3ctdmFyaWFudCgkc3RhdGUsICRiYWNrZ3JvdW5kKSB7XG4gIC8vIEV4YWN0IHNlbGVjdG9ycyBiZWxvdyByZXF1aXJlZCB0byBvdmVycmlkZSBgLnRhYmxlLXN0cmlwZWRgIGFuZCBwcmV2ZW50XG4gIC8vIGluaGVyaXRhbmNlIHRvIG5lc3RlZCB0YWJsZXMuXG4gIC50YWJsZSA+IHRoZWFkID4gdHIsXG4gIC50YWJsZSA+IHRib2R5ID4gdHIsXG4gIC50YWJsZSA+IHRmb290ID4gdHIge1xuICAgID4gdGQuI3skc3RhdGV9LFxuICAgID4gdGguI3skc3RhdGV9LFxuICAgICYuI3skc3RhdGV9ID4gdGQsXG4gICAgJi4jeyRzdGF0ZX0gPiB0aCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcbiAgICB9XG4gIH1cblxuICAvLyBIb3ZlciBzdGF0ZXMgZm9yIGAudGFibGUtaG92ZXJgXG4gIC8vIE5vdGU6IHRoaXMgaXMgbm90IGF2YWlsYWJsZSBmb3IgY2VsbHMgb3Igcm93cyB3aXRoaW4gYHRoZWFkYCBvciBgdGZvb3RgLlxuICAudGFibGUtaG92ZXIgPiB0Ym9keSA+IHRyIHtcbiAgICA+IHRkLiN7JHN0YXRlfTpob3ZlcixcbiAgICA+IHRoLiN7JHN0YXRlfTpob3ZlcixcbiAgICAmLiN7JHN0YXRlfTpob3ZlciA+IHRkLFxuICAgICY6aG92ZXIgPiAuI3skc3RhdGV9LFxuICAgICYuI3skc3RhdGV9OmhvdmVyID4gdGgge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKCRiYWNrZ3JvdW5kLCA1JSk7XG4gICAgfVxuICB9XG59XG4iLCIvL1xuLy8gRm9ybXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gTm9ybWFsaXplIG5vbi1jb250cm9sc1xuLy9cbi8vIFJlc3R5bGUgYW5kIGJhc2VsaW5lIG5vbi1jb250cm9sIGZvcm0gZWxlbWVudHMuXG5cbmZpZWxkc2V0IHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBib3JkZXI6IDA7XG4gIC8vIENocm9tZSBhbmQgRmlyZWZveCBzZXQgYSBgbWluLXdpZHRoOiBtaW4tY29udGVudDtgIG9uIGZpZWxkc2V0cyxcbiAgLy8gc28gd2UgcmVzZXQgdGhhdCB0byBlbnN1cmUgaXQgYmVoYXZlcyBtb3JlIGxpa2UgYSBzdGFuZGFyZCBibG9jayBlbGVtZW50LlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMjM1OS5cbiAgbWluLXdpZHRoOiAwO1xufVxuXG5sZWdlbmQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbi1ib3R0b206ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgZm9udC1zaXplOiAoJGZvbnQtc2l6ZS1iYXNlICogMS41KTtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gIGNvbG9yOiAkbGVnZW5kLWNvbG9yO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkbGVnZW5kLWJvcmRlci1jb2xvcjtcbn1cblxubGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogMTAwJTsgLy8gRm9yY2UgSUU4IHRvIHdyYXAgbG9uZyBjb250ZW50IChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMzE0MSlcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuXG4vLyBOb3JtYWxpemUgZm9ybSBjb250cm9sc1xuLy9cbi8vIFdoaWxlIG1vc3Qgb2Ygb3VyIGZvcm0gc3R5bGVzIHJlcXVpcmUgZXh0cmEgY2xhc3Nlcywgc29tZSBiYXNpYyBub3JtYWxpemF0aW9uXG4vLyBpcyByZXF1aXJlZCB0byBlbnN1cmUgb3B0aW11bSBkaXNwbGF5IHdpdGggb3Igd2l0aG91dCB0aG9zZSBjbGFzc2VzIHRvIGJldHRlclxuLy8gYWRkcmVzcyBicm93c2VyIGluY29uc2lzdGVuY2llcy5cblxuLy8gT3ZlcnJpZGUgY29udGVudC1ib3ggaW4gTm9ybWFsaXplICgqIGlzbid0IHNwZWNpZmljIGVub3VnaClcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICBAaW5jbHVkZSBib3gtc2l6aW5nKGJvcmRlci1ib3gpO1xufVxuXG4vLyBQb3NpdGlvbiByYWRpb3MgYW5kIGNoZWNrYm94ZXMgYmV0dGVyXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0sXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBtYXJnaW46IDRweCAwIDA7XG4gIG1hcmdpbi10b3A6IDFweCBcXDk7IC8vIElFOC05XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG59XG5cbmlucHV0W3R5cGU9XCJmaWxlXCJdIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8vIE1ha2UgcmFuZ2UgaW5wdXRzIGJlaGF2ZSBsaWtlIHRleHR1YWwgZm9ybSBjb250cm9sc1xuaW5wdXRbdHlwZT1cInJhbmdlXCJdIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4vLyBNYWtlIG11bHRpcGxlIHNlbGVjdCBlbGVtZW50cyBoZWlnaHQgbm90IGZpeGVkXG5zZWxlY3RbbXVsdGlwbGVdLFxuc2VsZWN0W3NpemVdIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuXG4vLyBGb2N1cyBmb3IgZmlsZSwgcmFkaW8sIGFuZCBjaGVja2JveFxuaW5wdXRbdHlwZT1cImZpbGVcIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwicmFkaW9cIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Zm9jdXMge1xuICBAaW5jbHVkZSB0YWItZm9jdXM7XG59XG5cbi8vIEFkanVzdCBvdXRwdXQgZWxlbWVudFxub3V0cHV0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmctdG9wOiAoJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCArIDEpO1xuICBmb250LXNpemU6ICRmb250LXNpemUtYmFzZTtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xuICBjb2xvcjogJGlucHV0LWNvbG9yO1xufVxuXG5cbi8vIENvbW1vbiBmb3JtIGNvbnRyb2xzXG4vL1xuLy8gU2hhcmVkIHNpemUgYW5kIHR5cGUgcmVzZXRzIGZvciBmb3JtIGNvbnRyb2xzLiBBcHBseSBgLmZvcm0tY29udHJvbGAgdG8gYW55XG4vLyBvZiB0aGUgZm9sbG93aW5nIGZvcm0gY29udHJvbHM6XG4vL1xuLy8gc2VsZWN0XG4vLyB0ZXh0YXJlYVxuLy8gaW5wdXRbdHlwZT1cInRleHRcIl1cbi8vIGlucHV0W3R5cGU9XCJwYXNzd29yZFwiXVxuLy8gaW5wdXRbdHlwZT1cImRhdGV0aW1lXCJdXG4vLyBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl1cbi8vIGlucHV0W3R5cGU9XCJkYXRlXCJdXG4vLyBpbnB1dFt0eXBlPVwibW9udGhcIl1cbi8vIGlucHV0W3R5cGU9XCJ0aW1lXCJdXG4vLyBpbnB1dFt0eXBlPVwid2Vla1wiXVxuLy8gaW5wdXRbdHlwZT1cIm51bWJlclwiXVxuLy8gaW5wdXRbdHlwZT1cImVtYWlsXCJdXG4vLyBpbnB1dFt0eXBlPVwidXJsXCJdXG4vLyBpbnB1dFt0eXBlPVwic2VhcmNoXCJdXG4vLyBpbnB1dFt0eXBlPVwidGVsXCJdXG4vLyBpbnB1dFt0eXBlPVwiY29sb3JcIl1cblxuLmZvcm0tY29udHJvbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0LWJhc2U7IC8vIE1ha2UgaW5wdXRzIGF0IGxlYXN0IHRoZSBoZWlnaHQgb2YgdGhlaXIgYnV0dG9uIGNvdW50ZXJwYXJ0IChiYXNlIGxpbmUtaGVpZ2h0ICsgcGFkZGluZyArIGJvcmRlcilcbiAgcGFkZGluZzogJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCAkcGFkZGluZy1iYXNlLWhvcml6b250YWw7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1iYXNlO1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG4gIGNvbG9yOiAkaW5wdXQtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6ICRpbnB1dC1iZztcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgLy8gUmVzZXQgdW51c3VhbCBGaXJlZm94LW9uLUFuZHJvaWQgZGVmYXVsdCBzdHlsZTsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MvaXNzdWVzLzIxNFxuICBib3JkZXI6IDFweCBzb2xpZCAkaW5wdXQtYm9yZGVyO1xuICBib3JkZXItcmFkaXVzOiAkaW5wdXQtYm9yZGVyLXJhZGl1czsgLy8gTm90ZTogVGhpcyBoYXMgbm8gZWZmZWN0IG9uIDxzZWxlY3Q+cyBpbiBzb21lIGJyb3dzZXJzLCBkdWUgdG8gdGhlIGxpbWl0ZWQgc3R5bGFiaWxpdHkgb2YgPHNlbGVjdD5zIGluIENTUy5cbiAgQGluY2x1ZGUgYm94LXNoYWRvdyhpbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KSk7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24oYm9yZGVyLWNvbG9yIGVhc2UtaW4tb3V0IC4xNXMsIGJveC1zaGFkb3cgZWFzZS1pbi1vdXQgLjE1cyk7XG5cbiAgLy8gQ3VzdG9taXplIHRoZSBgOmZvY3VzYCBzdGF0ZSB0byBpbWl0YXRlIG5hdGl2ZSBXZWJLaXQgc3R5bGVzLlxuICBAaW5jbHVkZSBmb3JtLWNvbnRyb2wtZm9jdXM7XG5cbiAgLy8gUGxhY2Vob2xkZXJcbiAgQGluY2x1ZGUgcGxhY2Vob2xkZXI7XG5cbiAgLy8gRGlzYWJsZWQgYW5kIHJlYWQtb25seSBpbnB1dHNcbiAgLy9cbiAgLy8gSFRNTDUgc2F5cyB0aGF0IGNvbnRyb2xzIHVuZGVyIGEgZmllbGRzZXQgPiBsZWdlbmQ6Zmlyc3QtY2hpbGQgd29uJ3QgYmVcbiAgLy8gZGlzYWJsZWQgaWYgdGhlIGZpZWxkc2V0IGlzIGRpc2FibGVkLiBEdWUgdG8gaW1wbGVtZW50YXRpb24gZGlmZmljdWx0eSwgd2VcbiAgLy8gZG9uJ3QgaG9ub3IgdGhhdCBlZGdlIGNhc2U7IHdlIHN0eWxlIHRoZW0gYXMgZGlzYWJsZWQgYW55d2F5LlxuICAmW2Rpc2FibGVkXSxcbiAgJltyZWFkb25seV0sXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXQtYmctZGlzYWJsZWQ7XG4gICAgb3BhY2l0eTogMTsgLy8gaU9TIGZpeCBmb3IgdW5yZWFkYWJsZSBkaXNhYmxlZCBjb250ZW50OyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMTY1NVxuICB9XG5cbiAgJltkaXNhYmxlZF0sXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICBjdXJzb3I6ICRjdXJzb3ItZGlzYWJsZWQ7XG4gIH1cblxuICAvLyBbY29udmVydGVyXSBleHRyYWN0ZWQgdGV4dGFyZWEmIHRvIHRleHRhcmVhLmZvcm0tY29udHJvbFxufVxuXG4vLyBSZXNldCBoZWlnaHQgZm9yIGB0ZXh0YXJlYWBzXG50ZXh0YXJlYS5mb3JtLWNvbnRyb2wge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cblxuLy8gU2VhcmNoIGlucHV0cyBpbiBpT1Ncbi8vXG4vLyBUaGlzIG92ZXJyaWRlcyB0aGUgZXh0cmEgcm91bmRlZCBjb3JuZXJzIG9uIHNlYXJjaCBpbnB1dHMgaW4gaU9TIHNvIHRoYXQgb3VyXG4vLyBgLmZvcm0tY29udHJvbGAgY2xhc3MgY2FuIHByb3Blcmx5IHN0eWxlIHRoZW0uIE5vdGUgdGhhdCB0aGlzIGNhbm5vdCBzaW1wbHlcbi8vIGJlIGFkZGVkIHRvIGAuZm9ybS1jb250cm9sYCBhcyBpdCdzIG5vdCBzcGVjaWZpYyBlbm91Z2guIEZvciBkZXRhaWxzLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTE1ODYuXG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5cblxuLy8gU3BlY2lhbCBzdHlsZXMgZm9yIGlPUyB0ZW1wb3JhbCBpbnB1dHNcbi8vXG4vLyBJbiBNb2JpbGUgU2FmYXJpLCBzZXR0aW5nIGBkaXNwbGF5OiBibG9ja2Agb24gdGVtcG9yYWwgaW5wdXRzIGNhdXNlcyB0aGVcbi8vIHRleHQgd2l0aGluIHRoZSBpbnB1dCB0byBiZWNvbWUgdmVydGljYWxseSBtaXNhbGlnbmVkLiBBcyBhIHdvcmthcm91bmQsIHdlXG4vLyBzZXQgYSBwaXhlbCBsaW5lLWhlaWdodCB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIGhlaWdodCBvZiB0aGUgaW5wdXQsIGJ1dCBvbmx5XG4vLyBmb3IgU2FmYXJpLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTg0OFxuLy9cbi8vIE5vdGUgdGhhdCBhcyBvZiA4LjMsIGlPUyBkb2Vzbid0IHN1cHBvcnQgYGRhdGV0aW1lYCBvciBgd2Vla2AuXG5cbkBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDApIHtcbiAgaW5wdXRbdHlwZT1cImRhdGVcIl0sXG4gIGlucHV0W3R5cGU9XCJ0aW1lXCJdLFxuICBpbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG4gIGlucHV0W3R5cGU9XCJtb250aFwiXSB7XG4gICAgJi5mb3JtLWNvbnRyb2wge1xuICAgICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQtYmFzZTtcbiAgICB9XG5cbiAgICAmLmlucHV0LXNtLFxuICAgIC5pbnB1dC1ncm91cC1zbSAmIHtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0LXNtYWxsO1xuICAgIH1cblxuICAgICYuaW5wdXQtbGcsXG4gICAgLmlucHV0LWdyb3VwLWxnICYge1xuICAgICAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQtbGFyZ2U7XG4gICAgfVxuICB9XG59XG5cblxuLy8gRm9ybSBncm91cHNcbi8vXG4vLyBEZXNpZ25lZCB0byBoZWxwIHdpdGggdGhlIG9yZ2FuaXphdGlvbiBhbmQgc3BhY2luZyBvZiB2ZXJ0aWNhbCBmb3Jtcy4gRm9yXG4vLyBob3Jpem9udGFsIGZvcm1zLCB1c2UgdGhlIHByZWRlZmluZWQgZ3JpZCBjbGFzc2VzLlxuXG4uZm9ybS1ncm91cCB7XG4gIG1hcmdpbi1ib3R0b206ICRmb3JtLWdyb3VwLW1hcmdpbi1ib3R0b207XG59XG5cblxuLy8gQ2hlY2tib3hlcyBhbmQgcmFkaW9zXG4vL1xuLy8gSW5kZW50IHRoZSBsYWJlbHMgdG8gcG9zaXRpb24gcmFkaW9zL2NoZWNrYm94ZXMgYXMgaGFuZ2luZyBjb250cm9scy5cblxuLnJhZGlvLFxuLmNoZWNrYm94IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcblxuICBsYWJlbCB7XG4gICAgbWluLWhlaWdodDogJGxpbmUtaGVpZ2h0LWNvbXB1dGVkOyAvLyBFbnN1cmUgdGhlIGlucHV0IGRvZXNuJ3QganVtcCB3aGVuIHRoZXJlIGlzIG5vIHRleHRcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxufVxuLnJhZGlvIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbi5yYWRpby1pbmxpbmUgaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5jaGVja2JveC1pbmxpbmUgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBtYXJnaW4tbGVmdDogLTIwcHg7XG4gIG1hcmdpbi10b3A6IDRweCBcXDk7XG59XG5cbi5yYWRpbyArIC5yYWRpbyxcbi5jaGVja2JveCArIC5jaGVja2JveCB7XG4gIG1hcmdpbi10b3A6IC01cHg7IC8vIE1vdmUgdXAgc2libGluZyByYWRpb3Mgb3IgY2hlY2tib3hlcyBmb3IgdGlnaHRlciBzcGFjaW5nXG59XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBvbiBzYW1lIGxpbmVcbi5yYWRpby1pbmxpbmUsXG4uY2hlY2tib3gtaW5saW5lIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmctbGVmdDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuLnJhZGlvLWlubGluZSArIC5yYWRpby1pbmxpbmUsXG4uY2hlY2tib3gtaW5saW5lICsgLmNoZWNrYm94LWlubGluZSB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4OyAvLyBzcGFjZSBvdXQgY29uc2VjdXRpdmUgaW5saW5lIGNvbnRyb2xzXG59XG5cbi8vIEFwcGx5IHNhbWUgZGlzYWJsZWQgY3Vyc29yIHR3ZWFrIGFzIGZvciBpbnB1dHNcbi8vIFNvbWUgc3BlY2lhbCBjYXJlIGlzIG5lZWRlZCBiZWNhdXNlIDxsYWJlbD5zIGRvbid0IGluaGVyaXQgdGhlaXIgcGFyZW50J3MgYGN1cnNvcmAuXG4vL1xuLy8gTm90ZTogTmVpdGhlciByYWRpb3Mgbm9yIGNoZWNrYm94ZXMgY2FuIGJlIHJlYWRvbmx5LlxuaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgJltkaXNhYmxlZF0sXG4gICYuZGlzYWJsZWQsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICBjdXJzb3I6ICRjdXJzb3ItZGlzYWJsZWQ7XG4gIH1cbn1cbi8vIFRoZXNlIGNsYXNzZXMgYXJlIHVzZWQgZGlyZWN0bHkgb24gPGxhYmVsPnNcbi5yYWRpby1pbmxpbmUsXG4uY2hlY2tib3gtaW5saW5lIHtcbiAgJi5kaXNhYmxlZCxcbiAgZmllbGRzZXRbZGlzYWJsZWRdICYge1xuICAgIGN1cnNvcjogJGN1cnNvci1kaXNhYmxlZDtcbiAgfVxufVxuLy8gVGhlc2UgY2xhc3NlcyBhcmUgdXNlZCBvbiBlbGVtZW50cyB3aXRoIDxsYWJlbD4gZGVzY2VuZGFudHNcbi5yYWRpbyxcbi5jaGVja2JveCB7XG4gICYuZGlzYWJsZWQsXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICBsYWJlbCB7XG4gICAgICBjdXJzb3I6ICRjdXJzb3ItZGlzYWJsZWQ7XG4gICAgfVxuICB9XG59XG5cblxuLy8gU3RhdGljIGZvcm0gY29udHJvbCB0ZXh0XG4vL1xuLy8gQXBwbHkgY2xhc3MgdG8gYSBgcGAgZWxlbWVudCB0byBtYWtlIGFueSBzdHJpbmcgb2YgdGV4dCBhbGlnbiB3aXRoIGxhYmVscyBpblxuLy8gYSBob3Jpem9udGFsIGZvcm0gbGF5b3V0LlxuXG4uZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gIC8vIFNpemUgaXQgYXBwcm9wcmlhdGVseSBuZXh0IHRvIHJlYWwgZm9ybSBjb250cm9sc1xuICBwYWRkaW5nLXRvcDogKCRwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKTtcbiAgcGFkZGluZy1ib3R0b206ICgkcGFkZGluZy1iYXNlLXZlcnRpY2FsICsgMSk7XG4gIC8vIFJlbW92ZSBkZWZhdWx0IG1hcmdpbiBmcm9tIGBwYFxuICBtYXJnaW4tYm90dG9tOiAwO1xuICBtaW4taGVpZ2h0OiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgJGZvbnQtc2l6ZS1iYXNlKTtcblxuICAmLmlucHV0LWxnLFxuICAmLmlucHV0LXNtIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgfVxufVxuXG5cbi8vIEZvcm0gY29udHJvbCBzaXppbmdcbi8vXG4vLyBCdWlsZCBvbiBgLmZvcm0tY29udHJvbGAgd2l0aCBtb2RpZmllciBjbGFzc2VzIHRvIGRlY3JlYXNlIG9yIGluY3JlYXNlIHRoZVxuLy8gaGVpZ2h0IGFuZCBmb250LXNpemUgb2YgZm9ybSBjb250cm9scy5cbi8vXG4vLyBUaGUgYC5mb3JtLWdyb3VwLSogZm9ybS1jb250cm9sYCB2YXJpYXRpb25zIGFyZSBzYWRseSBkdXBsaWNhdGVkIHRvIGF2b2lkIHRoZVxuLy8gaXNzdWUgZG9jdW1lbnRlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzE1MDc0LlxuXG5AaW5jbHVkZSBpbnB1dC1zaXplKCcuaW5wdXQtc20nLCAkaW5wdXQtaGVpZ2h0LXNtYWxsLCAkcGFkZGluZy1zbWFsbC12ZXJ0aWNhbCwgJHBhZGRpbmctc21hbGwtaG9yaXpvbnRhbCwgJGZvbnQtc2l6ZS1zbWFsbCwgJGxpbmUtaGVpZ2h0LXNtYWxsLCAkaW5wdXQtYm9yZGVyLXJhZGl1cy1zbWFsbCk7XG4uZm9ybS1ncm91cC1zbSB7XG4gIC5mb3JtLWNvbnRyb2wge1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodC1zbWFsbDtcbiAgICBwYWRkaW5nOiAkcGFkZGluZy1zbWFsbC12ZXJ0aWNhbCAkcGFkZGluZy1zbWFsbC1ob3Jpem9udGFsO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LXNtYWxsO1xuICAgIGJvcmRlci1yYWRpdXM6ICRpbnB1dC1ib3JkZXItcmFkaXVzLXNtYWxsO1xuICB9XG4gIHNlbGVjdC5mb3JtLWNvbnRyb2wge1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodC1zbWFsbDtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodC1zbWFsbDtcbiAgfVxuICB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wsXG4gIHNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gIH1cbiAgLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodC1zbWFsbDtcbiAgICBtaW4taGVpZ2h0OiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgJGZvbnQtc2l6ZS1zbWFsbCk7XG4gICAgcGFkZGluZzogKCRwYWRkaW5nLXNtYWxsLXZlcnRpY2FsICsgMSkgJHBhZGRpbmctc21hbGwtaG9yaXpvbnRhbDtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1zbWFsbDtcbiAgfVxufVxuXG5AaW5jbHVkZSBpbnB1dC1zaXplKCcuaW5wdXQtbGcnLCAkaW5wdXQtaGVpZ2h0LWxhcmdlLCAkcGFkZGluZy1sYXJnZS12ZXJ0aWNhbCwgJHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbCwgJGZvbnQtc2l6ZS1sYXJnZSwgJGxpbmUtaGVpZ2h0LWxhcmdlLCAkaW5wdXQtYm9yZGVyLXJhZGl1cy1sYXJnZSk7XG4uZm9ybS1ncm91cC1sZyB7XG4gIC5mb3JtLWNvbnRyb2wge1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodC1sYXJnZTtcbiAgICBwYWRkaW5nOiAkcGFkZGluZy1sYXJnZS12ZXJ0aWNhbCAkcGFkZGluZy1sYXJnZS1ob3Jpem9udGFsO1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1sYXJnZTtcbiAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWxhcmdlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRpbnB1dC1ib3JkZXItcmFkaXVzLWxhcmdlO1xuICB9XG4gIHNlbGVjdC5mb3JtLWNvbnRyb2wge1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodC1sYXJnZTtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodC1sYXJnZTtcbiAgfVxuICB0ZXh0YXJlYS5mb3JtLWNvbnRyb2wsXG4gIHNlbGVjdFttdWx0aXBsZV0uZm9ybS1jb250cm9sIHtcbiAgICBoZWlnaHQ6IGF1dG87XG4gIH1cbiAgLmZvcm0tY29udHJvbC1zdGF0aWMge1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodC1sYXJnZTtcbiAgICBtaW4taGVpZ2h0OiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgJGZvbnQtc2l6ZS1sYXJnZSk7XG4gICAgcGFkZGluZzogKCRwYWRkaW5nLWxhcmdlLXZlcnRpY2FsICsgMSkgJHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbDtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtbGFyZ2U7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1sYXJnZTtcbiAgfVxufVxuXG5cbi8vIEZvcm0gY29udHJvbCBmZWVkYmFjayBzdGF0ZXNcbi8vXG4vLyBBcHBseSBjb250ZXh0dWFsIGFuZCBzZW1hbnRpYyBzdGF0ZXMgdG8gaW5kaXZpZHVhbCBmb3JtIGNvbnRyb2xzLlxuXG4uaGFzLWZlZWRiYWNrIHtcbiAgLy8gRW5hYmxlIGFic29sdXRlIHBvc2l0aW9uaW5nXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAvLyBFbnN1cmUgaWNvbnMgZG9uJ3Qgb3ZlcmxhcCB0ZXh0XG4gIC5mb3JtLWNvbnRyb2wge1xuICAgIHBhZGRpbmctcmlnaHQ6ICgkaW5wdXQtaGVpZ2h0LWJhc2UgKiAxLjI1KTtcbiAgfVxufVxuLy8gRmVlZGJhY2sgaWNvbiAocmVxdWlyZXMgLmdseXBoaWNvbiBjbGFzc2VzKVxuLmZvcm0tY29udHJvbC1mZWVkYmFjayB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgei1pbmRleDogMjsgLy8gRW5zdXJlIGljb24gaXMgYWJvdmUgaW5wdXQgZ3JvdXBzXG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogJGlucHV0LWhlaWdodC1iYXNlO1xuICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQtYmFzZTtcbiAgbGluZS1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQtYmFzZTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cbi5pbnB1dC1sZyArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uaW5wdXQtZ3JvdXAtbGcgKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLFxuLmZvcm0tZ3JvdXAtbGcgLmZvcm0tY29udHJvbCArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB3aWR0aDogJGlucHV0LWhlaWdodC1sYXJnZTtcbiAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0LWxhcmdlO1xuICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodC1sYXJnZTtcbn1cbi5pbnB1dC1zbSArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2ssXG4uaW5wdXQtZ3JvdXAtc20gKyAuZm9ybS1jb250cm9sLWZlZWRiYWNrLFxuLmZvcm0tZ3JvdXAtc20gLmZvcm0tY29udHJvbCArIC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICB3aWR0aDogJGlucHV0LWhlaWdodC1zbWFsbDtcbiAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0LXNtYWxsO1xuICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodC1zbWFsbDtcbn1cblxuLy8gRmVlZGJhY2sgc3RhdGVzXG4uaGFzLXN1Y2Nlc3Mge1xuICBAaW5jbHVkZSBmb3JtLWNvbnRyb2wtdmFsaWRhdGlvbigkc3RhdGUtc3VjY2Vzcy10ZXh0LCAkc3RhdGUtc3VjY2Vzcy10ZXh0LCAkc3RhdGUtc3VjY2Vzcy1iZyk7XG59XG4uaGFzLXdhcm5pbmcge1xuICBAaW5jbHVkZSBmb3JtLWNvbnRyb2wtdmFsaWRhdGlvbigkc3RhdGUtd2FybmluZy10ZXh0LCAkc3RhdGUtd2FybmluZy10ZXh0LCAkc3RhdGUtd2FybmluZy1iZyk7XG59XG4uaGFzLWVycm9yIHtcbiAgQGluY2x1ZGUgZm9ybS1jb250cm9sLXZhbGlkYXRpb24oJHN0YXRlLWRhbmdlci10ZXh0LCAkc3RhdGUtZGFuZ2VyLXRleHQsICRzdGF0ZS1kYW5nZXItYmcpO1xufVxuXG4vLyBSZXBvc2l0aW9uIGZlZWRiYWNrIGljb24gaWYgaW5wdXQgaGFzIHZpc2libGUgbGFiZWwgYWJvdmVcbi5oYXMtZmVlZGJhY2sgbGFiZWwge1xuXG4gICYgfiAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgICAgdG9wOiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgNSk7IC8vIEhlaWdodCBvZiB0aGUgYGxhYmVsYCBhbmQgaXRzIG1hcmdpblxuICB9XG4gICYuc3Itb25seSB+IC5mb3JtLWNvbnRyb2wtZmVlZGJhY2sge1xuICAgICB0b3A6IDA7XG4gIH1cbn1cblxuXG4vLyBIZWxwIHRleHRcbi8vXG4vLyBBcHBseSB0byBhbnkgZWxlbWVudCB5b3Ugd2lzaCB0byBjcmVhdGUgbGlnaHQgdGV4dCBmb3IgcGxhY2VtZW50IGltbWVkaWF0ZWx5XG4vLyBiZWxvdyBhIGZvcm0gY29udHJvbC4gVXNlIGZvciBnZW5lcmFsIGhlbHAsIGZvcm1hdHRpbmcsIG9yIGluc3RydWN0aW9uYWwgdGV4dC5cblxuLmhlbHAtYmxvY2sge1xuICBkaXNwbGF5OiBibG9jazsgLy8gYWNjb3VudCBmb3IgYW55IGVsZW1lbnQgdXNpbmcgaGVscC1ibG9ja1xuICBtYXJnaW4tdG9wOiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gIGNvbG9yOiBsaWdodGVuKCR0ZXh0LWNvbG9yLCAyNSUpOyAvLyBsaWdodGVuIHRoZSB0ZXh0IHNvbWUgZm9yIGNvbnRyYXN0XG59XG5cblxuLy8gSW5saW5lIGZvcm1zXG4vL1xuLy8gTWFrZSBmb3JtcyBhcHBlYXIgaW5saW5lKC1ibG9jaykgYnkgYWRkaW5nIHRoZSBgLmZvcm0taW5saW5lYCBjbGFzcy4gSW5saW5lXG4vLyBmb3JtcyBiZWdpbiBzdGFja2VkIG9uIGV4dHJhIHNtYWxsIChtb2JpbGUpIGRldmljZXMgYW5kIHRoZW4gZ28gaW5saW5lIHdoZW5cbi8vIHZpZXdwb3J0cyByZWFjaCA8NzY4cHguXG4vL1xuLy8gUmVxdWlyZXMgd3JhcHBpbmcgaW5wdXRzIGFuZCBsYWJlbHMgd2l0aCBgLmZvcm0tZ3JvdXBgIGZvciBwcm9wZXIgZGlzcGxheSBvZlxuLy8gZGVmYXVsdCBIVE1MIGZvcm0gY29udHJvbHMgYW5kIG91ciBjdXN0b20gZm9ybSBjb250cm9scyAoZS5nLiwgaW5wdXQgZ3JvdXBzKS5cbi8vXG4vLyBIZWFkcyB1cCEgVGhpcyBpcyBtaXhpbi1lZCBpbnRvIGAubmF2YmFyLWZvcm1gIGluIG5hdmJhcnMubGVzcy5cblxuLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIGZyb20gYC5mb3JtLWlubGluZWAgZm9yIGxpYnNhc3MgY29tcGF0aWJpbGl0eVxuQG1peGluIGZvcm0taW5saW5lIHtcblxuICAvLyBLaWNrIGluIHRoZSBpbmxpbmVcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgLy8gSW5saW5lLWJsb2NrIGFsbCB0aGUgdGhpbmdzIGZvciBcImlubGluZVwiXG4gICAgLmZvcm0tZ3JvdXAge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuXG4gICAgLy8gSW4gbmF2YmFyLWZvcm0sIGFsbG93IGZvbGtzIHRvICpub3QqIHVzZSBgLmZvcm0tZ3JvdXBgXG4gICAgLmZvcm0tY29udHJvbCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB3aWR0aDogYXV0bzsgLy8gUHJldmVudCBsYWJlbHMgZnJvbSBzdGFja2luZyBhYm92ZSBpbnB1dHMgaW4gYC5mb3JtLWdyb3VwYFxuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN0YXRpYyBjb250cm9scyBiZWhhdmUgbGlrZSByZWd1bGFyIG9uZXNcbiAgICAuZm9ybS1jb250cm9sLXN0YXRpYyB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxuXG4gICAgLmlucHV0LWdyb3VwIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS10YWJsZTtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cbiAgICAgIC5pbnB1dC1ncm91cC1hZGRvbixcbiAgICAgIC5pbnB1dC1ncm91cC1idG4sXG4gICAgICAuZm9ybS1jb250cm9sIHtcbiAgICAgICAgd2lkdGg6IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW5wdXQgZ3JvdXBzIG5lZWQgdGhhdCAxMDAlIHdpZHRoIHRob3VnaFxuICAgIC5pbnB1dC1ncm91cCA+IC5mb3JtLWNvbnRyb2wge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgLmNvbnRyb2wtbGFiZWwge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGRlZmF1bHQgbWFyZ2luIG9uIHJhZGlvcy9jaGVja2JveGVzIHRoYXQgd2VyZSB1c2VkIGZvciBzdGFja2luZywgYW5kXG4gICAgLy8gdGhlbiB1bmRvIHRoZSBmbG9hdGluZyBvZiByYWRpb3MgYW5kIGNoZWNrYm94ZXMgdG8gbWF0Y2guXG4gICAgLnJhZGlvLFxuICAgIC5jaGVja2JveCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cbiAgICAgIGxhYmVsIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgfVxuICAgIH1cbiAgICAucmFkaW8gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuICAgIC5jaGVja2JveCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgfVxuXG4gICAgLy8gUmUtb3ZlcnJpZGUgdGhlIGZlZWRiYWNrIGljb24uXG4gICAgLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgICAgIHRvcDogMDtcbiAgICB9XG4gIH1cbn1cbi8vIFtjb252ZXJ0ZXJdIGV4dHJhY3RlZCBhcyBgQG1peGluIGZvcm0taW5saW5lYCBmb3IgbGlic2FzcyBjb21wYXRpYmlsaXR5XG4uZm9ybS1pbmxpbmUge1xuICBAaW5jbHVkZSBmb3JtLWlubGluZTtcbn1cblxuXG5cbi8vIEhvcml6b250YWwgZm9ybXNcbi8vXG4vLyBIb3Jpem9udGFsIGZvcm1zIGFyZSBidWlsdCBvbiBncmlkIGNsYXNzZXMgYW5kIGFsbG93IHlvdSB0byBjcmVhdGUgZm9ybXMgd2l0aFxuLy8gbGFiZWxzIG9uIHRoZSBsZWZ0IGFuZCBpbnB1dHMgb24gdGhlIHJpZ2h0LlxuXG4uZm9ybS1ob3Jpem9udGFsIHtcblxuICAvLyBDb25zaXN0ZW50IHZlcnRpY2FsIGFsaWdubWVudCBvZiByYWRpb3MgYW5kIGNoZWNrYm94ZXNcbiAgLy9cbiAgLy8gTGFiZWxzIGFsc28gZ2V0IHNvbWUgcmVzZXQgc3R5bGVzLCBidXQgdGhhdCBpcyBzY29wZWQgdG8gYSBtZWRpYSBxdWVyeSBiZWxvdy5cbiAgLnJhZGlvLFxuICAuY2hlY2tib3gsXG4gIC5yYWRpby1pbmxpbmUsXG4gIC5jaGVja2JveC1pbmxpbmUge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBwYWRkaW5nLXRvcDogKCRwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKTsgLy8gRGVmYXVsdCBwYWRkaW5nIHBsdXMgYSBib3JkZXJcbiAgfVxuICAvLyBBY2NvdW50IGZvciBwYWRkaW5nIHdlJ3JlIGFkZGluZyB0byBlbnN1cmUgdGhlIGFsaWdubWVudCBhbmQgb2YgaGVscCB0ZXh0XG4gIC8vIGFuZCBvdGhlciBjb250ZW50IGJlbG93IGl0ZW1zXG4gIC5yYWRpbyxcbiAgLmNoZWNrYm94IHtcbiAgICBtaW4taGVpZ2h0OiAoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkICsgKCRwYWRkaW5nLWJhc2UtdmVydGljYWwgKyAxKSk7XG4gIH1cblxuICAvLyBNYWtlIGZvcm0gZ3JvdXBzIGJlaGF2ZSBsaWtlIHJvd3NcbiAgLmZvcm0tZ3JvdXAge1xuICAgIEBpbmNsdWRlIG1ha2Utcm93O1xuICB9XG5cbiAgLy8gUmVzZXQgc3BhY2luZyBhbmQgcmlnaHQgYWxpZ24gbGFiZWxzLCBidXQgc2NvcGUgdG8gbWVkaWEgcXVlcmllcyBzbyB0aGF0XG4gIC8vIGxhYmVscyBvbiBuYXJyb3cgdmlld3BvcnRzIHN0YWNrIHRoZSBzYW1lIGFzIGEgZGVmYXVsdCBmb3JtIGV4YW1wbGUuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgIC5jb250cm9sLWxhYmVsIHtcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIHBhZGRpbmctdG9wOiAoJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCArIDEpOyAvLyBEZWZhdWx0IHBhZGRpbmcgcGx1cyBhIGJvcmRlclxuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRpb24gc3RhdGVzXG4gIC8vXG4gIC8vIFJlcG9zaXRpb24gdGhlIGljb24gYmVjYXVzZSBpdCdzIG5vdyB3aXRoaW4gYSBncmlkIGNvbHVtbiBhbmQgY29sdW1ucyBoYXZlXG4gIC8vIGBwb3NpdGlvbjogcmVsYXRpdmU7YCBvbiB0aGVtLiBBbHNvIGFjY291bnRzIGZvciB0aGUgZ3JpZCBndXR0ZXIgcGFkZGluZy5cbiAgLmhhcy1mZWVkYmFjayAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgICByaWdodDogZmxvb3IoKCRncmlkLWd1dHRlci13aWR0aCAvIDIpKTtcbiAgfVxuXG4gIC8vIEZvcm0gZ3JvdXAgc2l6ZXNcbiAgLy9cbiAgLy8gUXVpY2sgdXRpbGl0eSBjbGFzcyBmb3IgYXBwbHlpbmcgYC5pbnB1dC1sZ2AgYW5kIGAuaW5wdXQtc21gIHN0eWxlcyB0byB0aGVcbiAgLy8gaW5wdXRzIGFuZCBsYWJlbHMgd2l0aGluIGEgYC5mb3JtLWdyb3VwYC5cbiAgLmZvcm0tZ3JvdXAtbGcge1xuICAgIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgICAgLmNvbnRyb2wtbGFiZWwge1xuICAgICAgICBwYWRkaW5nLXRvcDogKCgkcGFkZGluZy1sYXJnZS12ZXJ0aWNhbCAqICRsaW5lLWhlaWdodC1sYXJnZSkgKyAxKTtcbiAgICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLWxhcmdlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAuZm9ybS1ncm91cC1zbSB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSB7XG4gICAgICAuY29udHJvbC1sYWJlbCB7XG4gICAgICAgIHBhZGRpbmctdG9wOiAoJHBhZGRpbmctc21hbGwtdmVydGljYWwgKyAxKTtcbiAgICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gRm9ybSB2YWxpZGF0aW9uIHN0YXRlc1xuLy9cbi8vIFVzZWQgaW4gZm9ybXMubGVzcyB0byBnZW5lcmF0ZSB0aGUgZm9ybSB2YWxpZGF0aW9uIENTUyBmb3Igd2FybmluZ3MsIGVycm9ycyxcbi8vIGFuZCBzdWNjZXNzZXMuXG5cbkBtaXhpbiBmb3JtLWNvbnRyb2wtdmFsaWRhdGlvbigkdGV4dC1jb2xvcjogIzU1NSwgJGJvcmRlci1jb2xvcjogI2NjYywgJGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjUpIHtcbiAgLy8gQ29sb3IgdGhlIGxhYmVsIGFuZCBoZWxwIHRleHRcbiAgLmhlbHAtYmxvY2ssXG4gIC5jb250cm9sLWxhYmVsLFxuICAucmFkaW8sXG4gIC5jaGVja2JveCxcbiAgLnJhZGlvLWlubGluZSxcbiAgLmNoZWNrYm94LWlubGluZSxcbiAgJi5yYWRpbyBsYWJlbCxcbiAgJi5jaGVja2JveCBsYWJlbCxcbiAgJi5yYWRpby1pbmxpbmUgbGFiZWwsXG4gICYuY2hlY2tib3gtaW5saW5lIGxhYmVsICB7XG4gICAgY29sb3I6ICR0ZXh0LWNvbG9yO1xuICB9XG4gIC8vIFNldCB0aGUgYm9yZGVyIGFuZCBib3ggc2hhZG93IG9uIHNwZWNpZmljIGlucHV0cyB0byBtYXRjaFxuICAuZm9ybS1jb250cm9sIHtcbiAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgQGluY2x1ZGUgYm94LXNoYWRvdyhpbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KSk7IC8vIFJlZGVjbGFyZSBzbyB0cmFuc2l0aW9ucyB3b3JrXG4gICAgJjpmb2N1cyB7XG4gICAgICBib3JkZXItY29sb3I6IGRhcmtlbigkYm9yZGVyLWNvbG9yLCAxMCUpO1xuICAgICAgJHNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSksIDAgMCA2cHggbGlnaHRlbigkYm9yZGVyLWNvbG9yLCAyMCUpO1xuICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdygkc2hhZG93KTtcbiAgICB9XG4gIH1cbiAgLy8gU2V0IHZhbGlkYXRpb24gc3RhdGVzIGFsc28gZm9yIGFkZG9uc1xuICAuaW5wdXQtZ3JvdXAtYWRkb24ge1xuICAgIGNvbG9yOiAkdGV4dC1jb2xvcjtcbiAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtY29sb3I7XG4gIH1cbiAgLy8gT3B0aW9uYWwgZmVlZGJhY2sgaWNvblxuICAuZm9ybS1jb250cm9sLWZlZWRiYWNrIHtcbiAgICBjb2xvcjogJHRleHQtY29sb3I7XG4gIH1cbn1cblxuXG4vLyBGb3JtIGNvbnRyb2wgZm9jdXMgc3RhdGVcbi8vXG4vLyBHZW5lcmF0ZSBhIGN1c3RvbWl6ZWQgZm9jdXMgc3RhdGUgYW5kIGZvciBhbnkgaW5wdXQgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbG9yLFxuLy8gd2hpY2ggZGVmYXVsdHMgdG8gdGhlIGAkaW5wdXQtYm9yZGVyLWZvY3VzYCB2YXJpYWJsZS5cbi8vXG4vLyBXZSBoaWdobHkgZW5jb3VyYWdlIHlvdSB0byBub3QgY3VzdG9taXplIHRoZSBkZWZhdWx0IHZhbHVlLCBidXQgaW5zdGVhZCB1c2Vcbi8vIHRoaXMgdG8gdHdlYWsgY29sb3JzIG9uIGFuIGFzLW5lZWRlZCBiYXNpcy4gVGhpcyBhZXN0aGV0aWMgY2hhbmdlIGlzIGJhc2VkIG9uXG4vLyBXZWJLaXQncyBkZWZhdWx0IHN0eWxlcywgYnV0IGFwcGxpY2FibGUgdG8gYSB3aWRlciByYW5nZSBvZiBicm93c2Vycy4gSXRzXG4vLyB1c2FiaWxpdHkgYW5kIGFjY2Vzc2liaWxpdHkgc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudCB3aXRoIGFueSBjaGFuZ2UuXG4vL1xuLy8gRXhhbXBsZSB1c2FnZTogY2hhbmdlIHRoZSBkZWZhdWx0IGJsdWUgYm9yZGVyIGFuZCBzaGFkb3cgdG8gd2hpdGUgZm9yIGJldHRlclxuLy8gY29udHJhc3QgYWdhaW5zdCBhIGRhcmsgZ3JheSBiYWNrZ3JvdW5kLlxuQG1peGluIGZvcm0tY29udHJvbC1mb2N1cygkY29sb3I6ICRpbnB1dC1ib3JkZXItZm9jdXMpIHtcbiAgJGNvbG9yLXJnYmE6IHJnYmEocmVkKCRjb2xvciksIGdyZWVuKCRjb2xvciksIGJsdWUoJGNvbG9yKSwgLjYpO1xuICAmOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6ICRjb2xvcjtcbiAgICBvdXRsaW5lOiAwO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSksIDAgMCA4cHggJGNvbG9yLXJnYmEpO1xuICB9XG59XG5cbi8vIEZvcm0gY29udHJvbCBzaXppbmdcbi8vXG4vLyBSZWxhdGl2ZSB0ZXh0IHNpemUsIHBhZGRpbmcsIGFuZCBib3JkZXItcmFkaWkgY2hhbmdlcyBmb3IgZm9ybSBjb250cm9scy4gRm9yXG4vLyBob3Jpem9udGFsIHNpemluZywgd3JhcCBjb250cm9scyBpbiB0aGUgcHJlZGVmaW5lZCBncmlkIGNsYXNzZXMuIGA8c2VsZWN0PmBcbi8vIGVsZW1lbnQgZ2V0cyBzcGVjaWFsIGxvdmUgYmVjYXVzZSBpdCdzIHNwZWNpYWwsIGFuZCB0aGF0J3MgYSBmYWN0IVxuLy8gW2NvbnZlcnRlcl0gJHBhcmVudCBoYWNrXG5AbWl4aW4gaW5wdXQtc2l6ZSgkcGFyZW50LCAkaW5wdXQtaGVpZ2h0LCAkcGFkZGluZy12ZXJ0aWNhbCwgJHBhZGRpbmctaG9yaXpvbnRhbCwgJGZvbnQtc2l6ZSwgJGxpbmUtaGVpZ2h0LCAkYm9yZGVyLXJhZGl1cykge1xuICAjeyRwYXJlbnR9IHtcbiAgICBoZWlnaHQ6ICRpbnB1dC1oZWlnaHQ7XG4gICAgcGFkZGluZzogJHBhZGRpbmctdmVydGljYWwgJHBhZGRpbmctaG9yaXpvbnRhbDtcbiAgICBmb250LXNpemU6ICRmb250LXNpemU7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgfVxuXG4gIHNlbGVjdCN7JHBhcmVudH0ge1xuICAgIGhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gIHRleHRhcmVhI3skcGFyZW50fSxcbiAgc2VsZWN0W211bHRpcGxlXSN7JHBhcmVudH0ge1xuICAgIGhlaWdodDogYXV0bztcbiAgfVxufVxuIiwiLy9cbi8vIEJ1dHRvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBzdHlsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5idG4ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDA7IC8vIEZvciBpbnB1dC5idG5cbiAgZm9udC13ZWlnaHQ6ICRidG4tZm9udC13ZWlnaHQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgLy8gUmVzZXQgdW51c3VhbCBGaXJlZm94LW9uLUFuZHJvaWQgZGVmYXVsdCBzdHlsZTsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MvaXNzdWVzLzIxNFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgQGluY2x1ZGUgYnV0dG9uLXNpemUoJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCwgJHBhZGRpbmctYmFzZS1ob3Jpem9udGFsLCAkZm9udC1zaXplLWJhc2UsICRsaW5lLWhlaWdodC1iYXNlLCAkYnRuLWJvcmRlci1yYWRpdXMtYmFzZSk7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICYsXG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSB7XG4gICAgJjpmb2N1cyxcbiAgICAmLmZvY3VzIHtcbiAgICAgIEBpbmNsdWRlIHRhYi1mb2N1cztcbiAgICB9XG4gIH1cblxuICAmOmhvdmVyLFxuICAmOmZvY3VzLFxuICAmLmZvY3VzIHtcbiAgICBjb2xvcjogJGJ0bi1kZWZhdWx0LWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuXG4gICY6YWN0aXZlLFxuICAmLmFjdGl2ZSB7XG4gICAgb3V0bGluZTogMDtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coaW5zZXQgMCAzcHggNXB4IHJnYmEoMCwwLDAsLjEyNSkpO1xuICB9XG5cbiAgJi5kaXNhYmxlZCxcbiAgJltkaXNhYmxlZF0sXG4gIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICBjdXJzb3I6ICRjdXJzb3ItZGlzYWJsZWQ7XG4gICAgQGluY2x1ZGUgb3BhY2l0eSguNjUpO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3cobm9uZSk7XG4gIH1cblxuICAvLyBbY29udmVydGVyXSBleHRyYWN0ZWQgYSYgdG8gYS5idG5cbn1cblxuYS5idG4ge1xuICAmLmRpc2FibGVkLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7IC8vIEZ1dHVyZS1wcm9vZiBkaXNhYmxpbmcgb2YgY2xpY2tzIG9uIGA8YT5gIGVsZW1lbnRzXG4gIH1cbn1cblxuXG4vLyBBbHRlcm5hdGUgYnV0dG9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmJ0bi1kZWZhdWx0IHtcbiAgQGluY2x1ZGUgYnV0dG9uLXZhcmlhbnQoJGJ0bi1kZWZhdWx0LWNvbG9yLCAkYnRuLWRlZmF1bHQtYmcsICRidG4tZGVmYXVsdC1ib3JkZXIpO1xufVxuLmJ0bi1wcmltYXJ5IHtcbiAgQGluY2x1ZGUgYnV0dG9uLXZhcmlhbnQoJGJ0bi1wcmltYXJ5LWNvbG9yLCAkYnRuLXByaW1hcnktYmcsICRidG4tcHJpbWFyeS1ib3JkZXIpO1xufVxuLy8gU3VjY2VzcyBhcHBlYXJzIGFzIGdyZWVuXG4uYnRuLXN1Y2Nlc3Mge1xuICBAaW5jbHVkZSBidXR0b24tdmFyaWFudCgkYnRuLXN1Y2Nlc3MtY29sb3IsICRidG4tc3VjY2Vzcy1iZywgJGJ0bi1zdWNjZXNzLWJvcmRlcik7XG59XG4vLyBJbmZvIGFwcGVhcnMgYXMgYmx1ZS1ncmVlblxuLmJ0bi1pbmZvIHtcbiAgQGluY2x1ZGUgYnV0dG9uLXZhcmlhbnQoJGJ0bi1pbmZvLWNvbG9yLCAkYnRuLWluZm8tYmcsICRidG4taW5mby1ib3JkZXIpO1xufVxuLy8gV2FybmluZyBhcHBlYXJzIGFzIG9yYW5nZVxuLmJ0bi13YXJuaW5nIHtcbiAgQGluY2x1ZGUgYnV0dG9uLXZhcmlhbnQoJGJ0bi13YXJuaW5nLWNvbG9yLCAkYnRuLXdhcm5pbmctYmcsICRidG4td2FybmluZy1ib3JkZXIpO1xufVxuLy8gRGFuZ2VyIGFuZCBlcnJvciBhcHBlYXIgYXMgcmVkXG4uYnRuLWRhbmdlciB7XG4gIEBpbmNsdWRlIGJ1dHRvbi12YXJpYW50KCRidG4tZGFuZ2VyLWNvbG9yLCAkYnRuLWRhbmdlci1iZywgJGJ0bi1kYW5nZXItYm9yZGVyKTtcbn1cblxuXG4vLyBMaW5rIGJ1dHRvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTWFrZSBhIGJ1dHRvbiBsb29rIGFuZCBiZWhhdmUgbGlrZSBhIGxpbmtcbi5idG4tbGluayB7XG4gIGNvbG9yOiAkbGluay1jb2xvcjtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgYm9yZGVyLXJhZGl1czogMDtcblxuICAmLFxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUsXG4gICZbZGlzYWJsZWRdLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgQGluY2x1ZGUgYm94LXNoYWRvdyhub25lKTtcbiAgfVxuICAmLFxuICAmOmhvdmVyLFxuICAmOmZvY3VzLFxuICAmOmFjdGl2ZSB7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICBjb2xvcjogJGxpbmstaG92ZXItY29sb3I7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiAkbGluay1ob3Zlci1kZWNvcmF0aW9uO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG4gICZbZGlzYWJsZWRdLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAkYnRuLWxpbmstZGlzYWJsZWQtY29sb3I7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgfVxuICB9XG59XG5cblxuLy8gQnV0dG9uIFNpemVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uYnRuLWxnIHtcbiAgLy8gbGluZS1oZWlnaHQ6IGVuc3VyZSBldmVuLW51bWJlcmVkIGhlaWdodCBvZiBidXR0b24gbmV4dCB0byBsYXJnZSBpbnB1dFxuICBAaW5jbHVkZSBidXR0b24tc2l6ZSgkcGFkZGluZy1sYXJnZS12ZXJ0aWNhbCwgJHBhZGRpbmctbGFyZ2UtaG9yaXpvbnRhbCwgJGZvbnQtc2l6ZS1sYXJnZSwgJGxpbmUtaGVpZ2h0LWxhcmdlLCAkYnRuLWJvcmRlci1yYWRpdXMtbGFyZ2UpO1xufVxuLmJ0bi1zbSB7XG4gIC8vIGxpbmUtaGVpZ2h0OiBlbnN1cmUgcHJvcGVyIGhlaWdodCBvZiBidXR0b24gbmV4dCB0byBzbWFsbCBpbnB1dFxuICBAaW5jbHVkZSBidXR0b24tc2l6ZSgkcGFkZGluZy1zbWFsbC12ZXJ0aWNhbCwgJHBhZGRpbmctc21hbGwtaG9yaXpvbnRhbCwgJGZvbnQtc2l6ZS1zbWFsbCwgJGxpbmUtaGVpZ2h0LXNtYWxsLCAkYnRuLWJvcmRlci1yYWRpdXMtc21hbGwpO1xufVxuLmJ0bi14cyB7XG4gIEBpbmNsdWRlIGJ1dHRvbi1zaXplKCRwYWRkaW5nLXhzLXZlcnRpY2FsLCAkcGFkZGluZy14cy1ob3Jpem9udGFsLCAkZm9udC1zaXplLXNtYWxsLCAkbGluZS1oZWlnaHQtc21hbGwsICRidG4tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XG59XG5cblxuLy8gQmxvY2sgYnV0dG9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uYnRuLWJsb2NrIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4vLyBWZXJ0aWNhbGx5IHNwYWNlIG91dCBtdWx0aXBsZSBibG9jayBidXR0b25zXG4uYnRuLWJsb2NrICsgLmJ0bi1ibG9jayB7XG4gIG1hcmdpbi10b3A6IDVweDtcbn1cblxuLy8gU3BlY2lmaWNpdHkgb3ZlcnJpZGVzXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdLFxuaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuaW5wdXRbdHlwZT1cImJ1dHRvblwiXSB7XG4gICYuYnRuLWJsb2NrIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxufVxuIiwiLy8gQnV0dG9uIHZhcmlhbnRzXG4vL1xuLy8gRWFzaWx5IHB1bXAgb3V0IGRlZmF1bHQgc3R5bGVzLCBhcyB3ZWxsIGFzIDpob3ZlciwgOmZvY3VzLCA6YWN0aXZlLFxuLy8gYW5kIGRpc2FibGVkIG9wdGlvbnMgZm9yIGFsbCBidXR0b25zXG5cbkBtaXhpbiBidXR0b24tdmFyaWFudCgkY29sb3IsICRiYWNrZ3JvdW5kLCAkYm9yZGVyKSB7XG4gIGNvbG9yOiAkY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kO1xuICBib3JkZXItY29sb3I6ICRib3JkZXI7XG5cbiAgJjpmb2N1cyxcbiAgJi5mb2N1cyB7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGJhY2tncm91bmQsIDEwJSk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRib3JkZXIsIDI1JSk7XG4gIH1cbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGJhY2tncm91bmQsIDEwJSk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRib3JkZXIsIDEyJSk7XG4gIH1cbiAgJjphY3RpdmUsXG4gICYuYWN0aXZlLFxuICAub3BlbiA+ICYuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBjb2xvcjogJGNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkYmFja2dyb3VuZCwgMTAlKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGJvcmRlciwgMTIlKTtcblxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyxcbiAgICAmLmZvY3VzIHtcbiAgICAgIGNvbG9yOiAkY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGJhY2tncm91bmQsIDE3JSk7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGJvcmRlciwgMjUlKTtcbiAgICB9XG4gIH1cbiAgJjphY3RpdmUsXG4gICYuYWN0aXZlLFxuICAub3BlbiA+ICYuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICB9XG4gICYuZGlzYWJsZWQsXG4gICZbZGlzYWJsZWRdLFxuICBmaWVsZHNldFtkaXNhYmxlZF0gJiB7XG4gICAgJixcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMsXG4gICAgJi5mb2N1cyxcbiAgICAmOmFjdGl2ZSxcbiAgICAmLmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZDtcbiAgICAgICAgICBib3JkZXItY29sb3I6ICRib3JkZXI7XG4gICAgfVxuICB9XG5cbiAgLmJhZGdlIHtcbiAgICBjb2xvcjogJGJhY2tncm91bmQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yO1xuICB9XG59XG5cbi8vIEJ1dHRvbiBzaXplc1xuQG1peGluIGJ1dHRvbi1zaXplKCRwYWRkaW5nLXZlcnRpY2FsLCAkcGFkZGluZy1ob3Jpem9udGFsLCAkZm9udC1zaXplLCAkbGluZS1oZWlnaHQsICRib3JkZXItcmFkaXVzKSB7XG4gIHBhZGRpbmc6ICRwYWRkaW5nLXZlcnRpY2FsICRwYWRkaW5nLWhvcml6b250YWw7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodDtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG59XG4iLCIvLyBPcGFjaXR5XG5cbkBtaXhpbiBvcGFjaXR5KCRvcGFjaXR5KSB7XG4gIG9wYWNpdHk6ICRvcGFjaXR5O1xuICAvLyBJRTggZmlsdGVyXG4gICRvcGFjaXR5LWllOiAoJG9wYWNpdHkgKiAxMDApO1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9JG9wYWNpdHktaWUpO1xufVxuIiwiLy9cbi8vIENvbXBvbmVudCBhbmltYXRpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBIZWFkcyB1cCFcbi8vXG4vLyBXZSBkb24ndCB1c2UgdGhlIGAub3BhY2l0eSgpYCBtaXhpbiBoZXJlIHNpbmNlIGl0IGNhdXNlcyBhIGJ1ZyB3aXRoIHRleHRcbi8vIGZpZWxkcyBpbiBJRTctOC4gU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8zNTUyLlxuXG4uZmFkZSB7XG4gIG9wYWNpdHk6IDA7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24ob3BhY2l0eSAuMTVzIGxpbmVhcik7XG4gICYuaW4ge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cblxuLmNvbGxhcHNlIHtcbiAgZGlzcGxheTogbm9uZTtcblxuICAmLmluICAgICAgeyBkaXNwbGF5OiBibG9jazsgfVxuICAvLyBbY29udmVydGVyXSBleHRyYWN0ZWQgdHImLmluIHRvIHRyLmNvbGxhcHNlLmluXG4gIC8vIFtjb252ZXJ0ZXJdIGV4dHJhY3RlZCB0Ym9keSYuaW4gdG8gdGJvZHkuY29sbGFwc2UuaW5cbn1cblxudHIuY29sbGFwc2UuaW4gICAgeyBkaXNwbGF5OiB0YWJsZS1yb3c7IH1cblxudGJvZHkuY29sbGFwc2UuaW4geyBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXA7IH1cblxuLmNvbGxhcHNpbmcge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbi1wcm9wZXJ0eShoZWlnaHQsIHZpc2liaWxpdHkpO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uLWR1cmF0aW9uKC4zNXMpO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbihlYXNlKTtcbn1cbiIsIi8vXG4vLyBEcm9wZG93biBtZW51c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBEcm9wZG93biBhcnJvdy9jYXJldFxuLmNhcmV0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW4tbGVmdDogMnB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBib3JkZXItdG9wOiAgICRjYXJldC13aWR0aC1iYXNlIGRhc2hlZDtcbiAgYm9yZGVyLXRvcDogICAkY2FyZXQtd2lkdGgtYmFzZSBzb2xpZCBcXDk7IC8vIElFOFxuICBib3JkZXItcmlnaHQ6ICRjYXJldC13aWR0aC1iYXNlIHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItbGVmdDogICRjYXJldC13aWR0aC1iYXNlIHNvbGlkIHRyYW5zcGFyZW50O1xufVxuXG4vLyBUaGUgZHJvcGRvd24gd3JhcHBlciAoZGl2KVxuLmRyb3B1cCxcbi5kcm9wZG93biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLy8gUHJldmVudCB0aGUgZm9jdXMgb24gdGhlIGRyb3Bkb3duIHRvZ2dsZSB3aGVuIGNsb3NpbmcgZHJvcGRvd25zXG4uZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcbiAgb3V0bGluZTogMDtcbn1cblxuLy8gVGhlIGRyb3Bkb3duIG1lbnUgKHVsKVxuLmRyb3Bkb3duLW1lbnUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMTAwJTtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogJHppbmRleC1kcm9wZG93bjtcbiAgZGlzcGxheTogbm9uZTsgLy8gbm9uZSBieSBkZWZhdWx0LCBidXQgYmxvY2sgb24gXCJvcGVuXCIgb2YgdGhlIG1lbnVcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1pbi13aWR0aDogMTYwcHg7XG4gIHBhZGRpbmc6IDVweCAwO1xuICBtYXJnaW46IDJweCAwIDA7IC8vIG92ZXJyaWRlIGRlZmF1bHQgdWxcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLWJhc2U7XG4gIHRleHQtYWxpZ246IGxlZnQ7IC8vIEVuc3VyZXMgcHJvcGVyIGFsaWdubWVudCBpZiBwYXJlbnQgaGFzIGl0IGNoYW5nZWQgKGUuZy4sIG1vZGFsIGZvb3RlcilcbiAgYmFja2dyb3VuZC1jb2xvcjogJGRyb3Bkb3duLWJnO1xuICBib3JkZXI6IDFweCBzb2xpZCAkZHJvcGRvd24tZmFsbGJhY2stYm9yZGVyOyAvLyBJRTggZmFsbGJhY2tcbiAgYm9yZGVyOiAxcHggc29saWQgJGRyb3Bkb3duLWJvcmRlcjtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtYmFzZTtcbiAgQGluY2x1ZGUgYm94LXNoYWRvdygwIDZweCAxMnB4IHJnYmEoMCwwLDAsLjE3NSkpO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuXG4gIC8vIEFsaWducyB0aGUgZHJvcGRvd24gbWVudSB0byByaWdodFxuICAvL1xuICAvLyBEZXByZWNhdGVkIGFzIG9mIDMuMS4wIGluIGZhdm9yIG9mIGAuZHJvcGRvd24tbWVudS1bZGlyXWBcbiAgJi5wdWxsLXJpZ2h0IHtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiBhdXRvO1xuICB9XG5cbiAgLy8gRGl2aWRlcnMgKGJhc2ljYWxseSBhbiBocikgd2l0aGluIHRoZSBkcm9wZG93blxuICAuZGl2aWRlciB7XG4gICAgQGluY2x1ZGUgbmF2LWRpdmlkZXIoJGRyb3Bkb3duLWRpdmlkZXItYmcpO1xuICB9XG5cbiAgLy8gTGlua3Mgd2l0aGluIHRoZSBkcm9wZG93biBtZW51XG4gID4gbGkgPiBhIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAzcHggMjBweDtcbiAgICBjbGVhcjogYm90aDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgICBjb2xvcjogJGRyb3Bkb3duLWxpbmstY29sb3I7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgLy8gcHJldmVudCBsaW5rcyBmcm9tIHJhbmRvbWx5IGJyZWFraW5nIG9udG8gbmV3IGxpbmVzXG4gIH1cbn1cblxuLy8gSG92ZXIvRm9jdXMgc3RhdGVcbi5kcm9wZG93bi1tZW51ID4gbGkgPiBhIHtcbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGNvbG9yOiAkZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJvcGRvd24tbGluay1ob3Zlci1iZztcbiAgfVxufVxuXG4vLyBBY3RpdmUgc3RhdGVcbi5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGEge1xuICAmLFxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICBjb2xvcjogJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRkcm9wZG93bi1saW5rLWFjdGl2ZS1iZztcbiAgfVxufVxuXG4vLyBEaXNhYmxlZCBzdGF0ZVxuLy9cbi8vIEdyYXkgb3V0IHRleHQgYW5kIGVuc3VyZSB0aGUgaG92ZXIvZm9jdXMgc3RhdGUgcmVtYWlucyBncmF5XG5cbi5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYSB7XG4gICYsXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiAkZHJvcGRvd24tbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgfVxuXG4gIC8vIE51a2UgaG92ZXIvZm9jdXMgZWZmZWN0c1xuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgLy8gUmVtb3ZlIENTUyBncmFkaWVudFxuICAgIEBpbmNsdWRlIHJlc2V0LWZpbHRlcjtcbiAgICBjdXJzb3I6ICRjdXJzb3ItZGlzYWJsZWQ7XG4gIH1cbn1cblxuLy8gT3BlbiBzdGF0ZSBmb3IgdGhlIGRyb3Bkb3duXG4ub3BlbiB7XG4gIC8vIFNob3cgdGhlIG1lbnVcbiAgPiAuZHJvcGRvd24tbWVudSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICAvLyBSZW1vdmUgdGhlIG91dGxpbmUgd2hlbiA6Zm9jdXMgaXMgdHJpZ2dlcmVkXG4gID4gYSB7XG4gICAgb3V0bGluZTogMDtcbiAgfVxufVxuXG4vLyBNZW51IHBvc2l0aW9uaW5nXG4vL1xuLy8gQWRkIGV4dHJhIGNsYXNzIHRvIGAuZHJvcGRvd24tbWVudWAgdG8gZmxpcCB0aGUgYWxpZ25tZW50IG9mIHRoZSBkcm9wZG93blxuLy8gbWVudSB3aXRoIHRoZSBwYXJlbnQuXG4uZHJvcGRvd24tbWVudS1yaWdodCB7XG4gIGxlZnQ6IGF1dG87IC8vIFJlc2V0IHRoZSBkZWZhdWx0IGZyb20gYC5kcm9wZG93bi1tZW51YFxuICByaWdodDogMDtcbn1cbi8vIFdpdGggdjMsIHdlIGVuYWJsZWQgYXV0by1mbGlwcGluZyBpZiB5b3UgaGF2ZSBhIGRyb3Bkb3duIHdpdGhpbiBhIHJpZ2h0XG4vLyBhbGlnbmVkIG5hdiBjb21wb25lbnQuIFRvIGVuYWJsZSB0aGUgdW5kb2luZyBvZiB0aGF0LCB3ZSBwcm92aWRlIGFuIG92ZXJyaWRlXG4vLyB0byByZXN0b3JlIHRoZSBkZWZhdWx0IGRyb3Bkb3duIG1lbnUgYWxpZ25tZW50LlxuLy9cbi8vIFRoaXMgaXMgb25seSBmb3IgbGVmdC1hbGlnbmluZyBhIGRyb3Bkb3duIG1lbnUgd2l0aGluIGEgYC5uYXZiYXItcmlnaHRgIG9yXG4vLyBgLnB1bGwtcmlnaHRgIG5hdiBjb21wb25lbnQuXG4uZHJvcGRvd24tbWVudS1sZWZ0IHtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IGF1dG87XG59XG5cbi8vIERyb3Bkb3duIHNlY3Rpb24gaGVhZGVyc1xuLmRyb3Bkb3duLWhlYWRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAzcHggMjBweDtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG4gIGNvbG9yOiAkZHJvcGRvd24taGVhZGVyLWNvbG9yO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwOyAvLyBhcyB3aXRoID4gbGkgPiBhXG59XG5cbi8vIEJhY2tkcm9wIHRvIGNhdGNoIGJvZHkgY2xpY2tzIG9uIG1vYmlsZSwgZXRjLlxuLmRyb3Bkb3duLWJhY2tkcm9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICB0b3A6IDA7XG4gIHotaW5kZXg6ICgkemluZGV4LWRyb3Bkb3duIC0gMTApO1xufVxuXG4vLyBSaWdodCBhbGlnbmVkIGRyb3Bkb3duc1xuLnB1bGwtcmlnaHQgPiAuZHJvcGRvd24tbWVudSB7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiBhdXRvO1xufVxuXG4vLyBBbGxvdyBmb3IgZHJvcGRvd25zIHRvIGdvIGJvdHRvbSB1cCAoYWthLCBkcm9wdXAtbWVudSlcbi8vXG4vLyBKdXN0IGFkZCAuZHJvcHVwIGFmdGVyIHRoZSBzdGFuZGFyZCAuZHJvcGRvd24gY2xhc3MgYW5kIHlvdSdyZSBzZXQsIGJyby5cbi8vIFRPRE86IGFic3RyYWN0IHRoaXMgc28gdGhhdCB0aGUgbmF2YmFyIGZpeGVkIHN0eWxlcyBhcmUgbm90IHBsYWNlZCBoZXJlP1xuXG4uZHJvcHVwLFxuLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIHtcbiAgLy8gUmV2ZXJzZSB0aGUgY2FyZXRcbiAgLmNhcmV0IHtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1ib3R0b206ICRjYXJldC13aWR0aC1iYXNlIGRhc2hlZDtcbiAgICBib3JkZXItYm90dG9tOiAkY2FyZXQtd2lkdGgtYmFzZSBzb2xpZCBcXDk7IC8vIElFOFxuICAgIGNvbnRlbnQ6IFwiXCI7XG4gIH1cbiAgLy8gRGlmZmVyZW50IHBvc2l0aW9uaW5nIGZvciBib3R0b20gdXAgbWVudVxuICAuZHJvcGRvd24tbWVudSB7XG4gICAgdG9wOiBhdXRvO1xuICAgIGJvdHRvbTogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiAycHg7XG4gIH1cbn1cblxuXG4vLyBDb21wb25lbnQgYWxpZ25tZW50XG4vL1xuLy8gUmVpdGVyYXRlIHBlciBuYXZiYXIubGVzcyBhbmQgdGhlIG1vZGlmaWVkIGNvbXBvbmVudCBhbGlnbm1lbnQgdGhlcmUuXG5cbkBtZWRpYSAobWluLXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gIC5uYXZiYXItcmlnaHQge1xuICAgIC5kcm9wZG93bi1tZW51IHtcbiAgICAgIHJpZ2h0OiAwOyBsZWZ0OiBhdXRvO1xuICAgIH1cbiAgICAvLyBOZWNlc3NhcnkgZm9yIG92ZXJyaWRlcyBvZiB0aGUgZGVmYXVsdCByaWdodCBhbGlnbmVkIG1lbnUuXG4gICAgLy8gV2lsbCByZW1vdmUgY29tZSB2NCBpbiBhbGwgbGlrZWxpaG9vZC5cbiAgICAuZHJvcGRvd24tbWVudS1sZWZ0IHtcbiAgICAgIGxlZnQ6IDA7IHJpZ2h0OiBhdXRvO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gSG9yaXpvbnRhbCBkaXZpZGVyc1xuLy9cbi8vIERpdmlkZXJzIChiYXNpY2FsbHkgYW4gaHIpIHdpdGhpbiBkcm9wZG93bnMgYW5kIG5hdiBsaXN0c1xuXG5AbWl4aW4gbmF2LWRpdmlkZXIoJGNvbG9yOiAjZTVlNWU1KSB7XG4gIGhlaWdodDogMXB4O1xuICBtYXJnaW46ICgoJGxpbmUtaGVpZ2h0LWNvbXB1dGVkIC8gMikgLSAxKSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG59XG4iLCIvLyBSZXNldCBmaWx0ZXJzIGZvciBJRVxuLy9cbi8vIFdoZW4geW91IG5lZWQgdG8gcmVtb3ZlIGEgZ3JhZGllbnQgYmFja2dyb3VuZCwgZG8gbm90IGZvcmdldCB0byB1c2UgdGhpcyB0byByZXNldFxuLy8gdGhlIElFIGZpbHRlciBmb3IgSUU5IGFuZCBiZWxvdy5cblxuQG1peGluIHJlc2V0LWZpbHRlcigpIHtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZCA9IGZhbHNlKTtcbn1cbiIsIi8vXG4vLyBCdXR0b24gZ3JvdXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBNYWtlIHRoZSBkaXYgYmVoYXZlIGxpa2UgYSBidXR0b25cbi5idG4tZ3JvdXAsXG4uYnRuLWdyb3VwLXZlcnRpY2FsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IC8vIG1hdGNoIC5idG4gYWxpZ25tZW50IGdpdmVuIGZvbnQtc2l6ZSBoYWNrIGFib3ZlXG4gID4gLmJ0biB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIC8vIEJyaW5nIHRoZSBcImFjdGl2ZVwiIGJ1dHRvbiB0byB0aGUgZnJvbnRcbiAgICAmOmhvdmVyLFxuICAgICY6Zm9jdXMsXG4gICAgJjphY3RpdmUsXG4gICAgJi5hY3RpdmUge1xuICAgICAgei1pbmRleDogMjtcbiAgICB9XG4gIH1cbn1cblxuLy8gUHJldmVudCBkb3VibGUgYm9yZGVycyB3aGVuIGJ1dHRvbnMgYXJlIG5leHQgdG8gZWFjaCBvdGhlclxuLmJ0bi1ncm91cCB7XG4gIC5idG4gKyAuYnRuLFxuICAuYnRuICsgLmJ0bi1ncm91cCxcbiAgLmJ0bi1ncm91cCArIC5idG4sXG4gIC5idG4tZ3JvdXAgKyAuYnRuLWdyb3VwIHtcbiAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgfVxufVxuXG4vLyBPcHRpb25hbDogR3JvdXAgbXVsdGlwbGUgYnV0dG9uIGdyb3VwcyB0b2dldGhlciBmb3IgYSB0b29sYmFyXG4uYnRuLXRvb2xiYXIge1xuICBtYXJnaW4tbGVmdDogLTVweDsgLy8gT2Zmc2V0IHRoZSBmaXJzdCBjaGlsZCdzIG1hcmdpblxuICBAaW5jbHVkZSBjbGVhcmZpeDtcblxuICAuYnRuLFxuICAuYnRuLWdyb3VwLFxuICAuaW5wdXQtZ3JvdXAge1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG4gID4gLmJ0bixcbiAgPiAuYnRuLWdyb3VwLFxuICA+IC5pbnB1dC1ncm91cCB7XG4gICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgfVxufVxuXG4uYnRuLWdyb3VwID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbi8vIFNldCBjb3JuZXJzIGluZGl2aWR1YWwgYmVjYXVzZSBzb21ldGltZXMgYSBzaW5nbGUgYnV0dG9uIGNhbiBiZSBpbiBhIC5idG4tZ3JvdXAgYW5kIHdlIG5lZWQgOmZpcnN0LWNoaWxkIGFuZCA6bGFzdC1jaGlsZCB0byBib3RoIG1hdGNoXG4uYnRuLWdyb3VwID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xuICAmOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpIHtcbiAgICBAaW5jbHVkZSBib3JkZXItcmlnaHQtcmFkaXVzKDApO1xuICB9XG59XG4vLyBOZWVkIC5kcm9wZG93bi10b2dnbGUgc2luY2UgOmxhc3QtY2hpbGQgZG9lc24ndCBhcHBseSBnaXZlbiBhIC5kcm9wZG93bi1tZW51IGltbWVkaWF0ZWx5IGFmdGVyIGl0XG4uYnRuLWdyb3VwID4gLmJ0bjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpLFxuLmJ0bi1ncm91cCA+IC5kcm9wZG93bi10b2dnbGU6bm90KDpmaXJzdC1jaGlsZCkge1xuICBAaW5jbHVkZSBib3JkZXItbGVmdC1yYWRpdXMoMCk7XG59XG5cbi8vIEN1c3RvbSBlZGl0cyBmb3IgaW5jbHVkaW5nIGJ0bi1ncm91cHMgd2l0aGluIGJ0bi1ncm91cHMgKHVzZWZ1bCBmb3IgaW5jbHVkaW5nIGRyb3Bkb3duIGJ1dHRvbnMgd2l0aGluIGEgYnRuLWdyb3VwKVxuLmJ0bi1ncm91cCA+IC5idG4tZ3JvdXAge1xuICBmbG9hdDogbGVmdDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cbi5idG4tZ3JvdXAgPiAuYnRuLWdyb3VwOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkge1xuICA+IC5idG46bGFzdC1jaGlsZCxcbiAgPiAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBAaW5jbHVkZSBib3JkZXItcmlnaHQtcmFkaXVzKDApO1xuICB9XG59XG4uYnRuLWdyb3VwID4gLmJ0bi1ncm91cDpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0bjpmaXJzdC1jaGlsZCB7XG4gIEBpbmNsdWRlIGJvcmRlci1sZWZ0LXJhZGl1cygwKTtcbn1cblxuLy8gT24gYWN0aXZlIGFuZCBvcGVuLCBkb24ndCBzaG93IG91dGxpbmVcbi5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUsXG4uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIG91dGxpbmU6IDA7XG59XG5cblxuLy8gU2l6aW5nXG4vL1xuLy8gUmVtaXggdGhlIGRlZmF1bHQgYnV0dG9uIHNpemluZyBjbGFzc2VzIGludG8gbmV3IG9uZXMgZm9yIGVhc2llciBtYW5pcHVsYXRpb24uXG5cbi5idG4tZ3JvdXAteHMgPiAuYnRuIHsgQGV4dGVuZCAuYnRuLXhzOyB9XG4uYnRuLWdyb3VwLXNtID4gLmJ0biB7IEBleHRlbmQgLmJ0bi1zbTsgfVxuLmJ0bi1ncm91cC1sZyA+IC5idG4geyBAZXh0ZW5kIC5idG4tbGc7IH1cblxuXG4vLyBTcGxpdCBidXR0b24gZHJvcGRvd25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEdpdmUgdGhlIGxpbmUgYmV0d2VlbiBidXR0b25zIHNvbWUgZGVwdGhcbi5idG4tZ3JvdXAgPiAuYnRuICsgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIHBhZGRpbmctbGVmdDogOHB4O1xuICBwYWRkaW5nLXJpZ2h0OiA4cHg7XG59XG4uYnRuLWdyb3VwID4gLmJ0bi1sZyArIC5kcm9wZG93bi10b2dnbGUge1xuICBwYWRkaW5nLWxlZnQ6IDEycHg7XG4gIHBhZGRpbmctcmlnaHQ6IDEycHg7XG59XG5cbi8vIFRoZSBjbGlja2FibGUgYnV0dG9uIGZvciB0b2dnbGluZyB0aGUgbWVudVxuLy8gUmVtb3ZlIHRoZSBncmFkaWVudCBhbmQgc2V0IHRoZSBzYW1lIGluc2V0IHNoYWRvdyBhcyB0aGUgOmFjdGl2ZSBzdGF0ZVxuLmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGUge1xuICBAaW5jbHVkZSBib3gtc2hhZG93KGluc2V0IDAgM3B4IDVweCByZ2JhKDAsMCwwLC4xMjUpKTtcblxuICAvLyBTaG93IG5vIHNoYWRvdyBmb3IgYC5idG4tbGlua2Agc2luY2UgaXQgaGFzIG5vIG90aGVyIGJ1dHRvbiBzdHlsZXMuXG4gICYuYnRuLWxpbmsge1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3cobm9uZSk7XG4gIH1cbn1cblxuXG4vLyBSZXBvc2l0aW9uIHRoZSBjYXJldFxuLmJ0biAuY2FyZXQge1xuICBtYXJnaW4tbGVmdDogMDtcbn1cbi8vIENhcmV0cyBpbiBvdGhlciBidXR0b24gc2l6ZXNcbi5idG4tbGcgLmNhcmV0IHtcbiAgYm9yZGVyLXdpZHRoOiAkY2FyZXQtd2lkdGgtbGFyZ2UgJGNhcmV0LXdpZHRoLWxhcmdlIDA7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG59XG4vLyBVcHNpZGUgZG93biBjYXJldHMgZm9yIC5kcm9wdXBcbi5kcm9wdXAgLmJ0bi1sZyAuY2FyZXQge1xuICBib3JkZXItd2lkdGg6IDAgJGNhcmV0LXdpZHRoLWxhcmdlICRjYXJldC13aWR0aC1sYXJnZTtcbn1cblxuXG4vLyBWZXJ0aWNhbCBidXR0b24gZ3JvdXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5idG4tZ3JvdXAtdmVydGljYWwge1xuICA+IC5idG4sXG4gID4gLmJ0bi1ncm91cCxcbiAgPiAuYnRuLWdyb3VwID4gLmJ0biB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxvYXQ6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLy8gQ2xlYXIgZmxvYXRzIHNvIGRyb3Bkb3duIG1lbnVzIGNhbiBiZSBwcm9wZXJseSBwbGFjZWRcbiAgPiAuYnRuLWdyb3VwIHtcbiAgICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgICA+IC5idG4ge1xuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgPiAuYnRuICsgLmJ0bixcbiAgPiAuYnRuICsgLmJ0bi1ncm91cCxcbiAgPiAuYnRuLWdyb3VwICsgLmJ0bixcbiAgPiAuYnRuLWdyb3VwICsgLmJ0bi1ncm91cCB7XG4gICAgbWFyZ2luLXRvcDogLTFweDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxufVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0biB7XG4gICY6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxuICAmOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYnRuLWJvcmRlci1yYWRpdXMtYmFzZTtcbiAgICBAaW5jbHVkZSBib3JkZXItYm90dG9tLXJhZGl1cygwKTtcbiAgfVxuICAmOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkge1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRidG4tYm9yZGVyLXJhZGl1cy1iYXNlO1xuICAgIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKDApO1xuICB9XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG4uYnRuLWdyb3VwLXZlcnRpY2FsID4gLmJ0bi1ncm91cDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpIHtcbiAgPiAuYnRuOmxhc3QtY2hpbGQsXG4gID4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXMoMCk7XG4gIH1cbn1cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWdyb3VwOmxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCkgPiAuYnRuOmZpcnN0LWNoaWxkIHtcbiAgQGluY2x1ZGUgYm9yZGVyLXRvcC1yYWRpdXMoMCk7XG59XG5cblxuLy8gSnVzdGlmaWVkIGJ1dHRvbiBncm91cHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmJ0bi1ncm91cC1qdXN0aWZpZWQge1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgd2lkdGg6IDEwMCU7XG4gIHRhYmxlLWxheW91dDogZml4ZWQ7XG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XG4gID4gLmJ0bixcbiAgPiAuYnRuLWdyb3VwIHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgIHdpZHRoOiAxJTtcbiAgfVxuICA+IC5idG4tZ3JvdXAgLmJ0biB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICA+IC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUge1xuICAgIGxlZnQ6IGF1dG87XG4gIH1cbn1cblxuXG4vLyBDaGVja2JveCBhbmQgcmFkaW8gb3B0aW9uc1xuLy9cbi8vIEluIG9yZGVyIHRvIHN1cHBvcnQgdGhlIGJyb3dzZXIncyBmb3JtIHZhbGlkYXRpb24gZmVlZGJhY2ssIHBvd2VyZWQgYnkgdGhlXG4vLyBgcmVxdWlyZWRgIGF0dHJpYnV0ZSwgd2UgaGF2ZSB0byBcImhpZGVcIiB0aGUgaW5wdXRzIHZpYSBgY2xpcGAuIFdlIGNhbm5vdCB1c2Vcbi8vIGBkaXNwbGF5OiBub25lO2Agb3IgYHZpc2liaWxpdHk6IGhpZGRlbjtgIGFzIHRoYXQgYWxzbyBoaWRlcyB0aGUgcG9wb3Zlci5cbi8vIFNpbXBseSB2aXN1YWxseSBoaWRpbmcgdGhlIGlucHV0cyB2aWEgYG9wYWNpdHlgIHdvdWxkIGxlYXZlIHRoZW0gY2xpY2thYmxlIGluXG4vLyBjZXJ0YWluIGNhc2VzIHdoaWNoIGlzIHByZXZlbnRlZCBieSB1c2luZyBgY2xpcGAgYW5kIGBwb2ludGVyLWV2ZW50c2AuXG4vLyBUaGlzIHdheSwgd2UgZW5zdXJlIGEgRE9NIGVsZW1lbnQgaXMgdmlzaWJsZSB0byBwb3NpdGlvbiB0aGUgcG9wb3ZlciBmcm9tLlxuLy9cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8xMjc5NCBhbmRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9wdWxsLzE0NTU5IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG5bZGF0YS10b2dnbGU9XCJidXR0b25zXCJdIHtcbiAgPiAuYnRuLFxuICA+IC5idG4tZ3JvdXAgPiAuYnRuIHtcbiAgICBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gICAgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGNsaXA6IHJlY3QoMCwwLDAsMCk7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIFNpbmdsZSBzaWRlIGJvcmRlci1yYWRpdXNcblxuQG1peGluIGJvcmRlci10b3AtcmFkaXVzKCRyYWRpdXMpIHtcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRyYWRpdXM7XG4gICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkcmFkaXVzO1xufVxuQG1peGluIGJvcmRlci1yaWdodC1yYWRpdXMoJHJhZGl1cykge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJHJhZGl1cztcbiAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRyYWRpdXM7XG59XG5AbWl4aW4gYm9yZGVyLWJvdHRvbS1yYWRpdXMoJHJhZGl1cykge1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJHJhZGl1cztcbiAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRyYWRpdXM7XG59XG5AbWl4aW4gYm9yZGVyLWxlZnQtcmFkaXVzKCRyYWRpdXMpIHtcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJHJhZGl1cztcbiAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHJhZGl1cztcbn1cbiIsIi8vXG4vLyBJbnB1dCBncm91cHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEJhc2Ugc3R5bGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4uaW5wdXQtZ3JvdXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7IC8vIEZvciBkcm9wZG93bnNcbiAgZGlzcGxheTogdGFibGU7XG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7IC8vIHByZXZlbnQgaW5wdXQgZ3JvdXBzIGZyb20gaW5oZXJpdGluZyBib3JkZXIgc3R5bGVzIGZyb20gdGFibGUgY2VsbHMgd2hlbiBwbGFjZWQgd2l0aGluIGEgdGFibGVcblxuICAvLyBVbmRvIHBhZGRpbmcgYW5kIGZsb2F0IG9mIGdyaWQgY2xhc3Nlc1xuICAmW2NsYXNzKj1cImNvbC1cIl0ge1xuICAgIGZsb2F0OiBub25lO1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG5cbiAgLmZvcm0tY29udHJvbCB7XG4gICAgLy8gRW5zdXJlIHRoYXQgdGhlIGlucHV0IGlzIGFsd2F5cyBhYm92ZSB0aGUgKmFwcGVuZGVkKiBhZGRvbiBidXR0b24gZm9yXG4gICAgLy8gcHJvcGVyIGJvcmRlciBjb2xvcnMuXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDI7XG5cbiAgICAvLyBJRTkgZnViYXJzIHRoZSBwbGFjZWhvbGRlciBhdHRyaWJ1dGUgaW4gdGV4dCBpbnB1dHMgYW5kIHRoZSBhcnJvd3Mgb25cbiAgICAvLyBzZWxlY3QgZWxlbWVudHMgaW4gaW5wdXQgZ3JvdXBzLiBUbyBmaXggaXQsIHdlIGZsb2F0IHRoZSBpbnB1dC4gRGV0YWlsczpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzExNTYxI2lzc3VlY29tbWVudC0yODkzNjg1NVxuICAgIGZsb2F0OiBsZWZ0O1xuXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4vLyBTaXppbmcgb3B0aW9uc1xuLy9cbi8vIFJlbWl4IHRoZSBkZWZhdWx0IGZvcm0gY29udHJvbCBzaXppbmcgY2xhc3NlcyBpbnRvIG5ldyBvbmVzIGZvciBlYXNpZXJcbi8vIG1hbmlwdWxhdGlvbi5cblxuLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tY29udHJvbCxcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1sZyA+IC5pbnB1dC1ncm91cC1idG4gPiAuYnRuIHtcbiAgQGV4dGVuZCAuaW5wdXQtbGc7XG59XG4uaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLWJ0biA+IC5idG4ge1xuICBAZXh0ZW5kIC5pbnB1dC1zbTtcbn1cblxuXG4vLyBEaXNwbGF5IGFzIHRhYmxlLWNlbGxcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi5pbnB1dC1ncm91cC1hZGRvbixcbi5pbnB1dC1ncm91cC1idG4sXG4uaW5wdXQtZ3JvdXAgLmZvcm0tY29udHJvbCB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG5cbiAgJjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG59XG4vLyBBZGRvbiBhbmQgYWRkb24gd3JhcHBlciBmb3IgYnV0dG9uc1xuLmlucHV0LWdyb3VwLWFkZG9uLFxuLmlucHV0LWdyb3VwLWJ0biB7XG4gIHdpZHRoOiAxJTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgLy8gTWF0Y2ggdGhlIGlucHV0c1xufVxuXG4vLyBUZXh0IGlucHV0IGdyb3Vwc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLmlucHV0LWdyb3VwLWFkZG9uIHtcbiAgcGFkZGluZzogJHBhZGRpbmctYmFzZS12ZXJ0aWNhbCAkcGFkZGluZy1iYXNlLWhvcml6b250YWw7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1iYXNlO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICRpbnB1dC1jb2xvcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXQtZ3JvdXAtYWRkb24tYmc7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRpbnB1dC1ncm91cC1hZGRvbi1ib3JkZXItY29sb3I7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWJhc2U7XG5cbiAgLy8gU2l6aW5nXG4gICYuaW5wdXQtc20ge1xuICAgIHBhZGRpbmc6ICRwYWRkaW5nLXNtYWxsLXZlcnRpY2FsICRwYWRkaW5nLXNtYWxsLWhvcml6b250YWw7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLXNtYWxsO1xuICB9XG4gICYuaW5wdXQtbGcge1xuICAgIHBhZGRpbmc6ICRwYWRkaW5nLWxhcmdlLXZlcnRpY2FsICRwYWRkaW5nLWxhcmdlLWhvcml6b250YWw7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLWxhcmdlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWxhcmdlO1xuICB9XG5cbiAgLy8gTnVrZSBkZWZhdWx0IG1hcmdpbnMgZnJvbSBjaGVja2JveGVzIGFuZCByYWRpb3MgdG8gdmVydGljYWxseSBjZW50ZXIgd2l0aGluLlxuICBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4gIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxufVxuXG4vLyBSZXNldCByb3VuZGVkIGNvcm5lcnNcbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmZpcnN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWFkZG9uOmZpcnN0LWNoaWxkLFxuLmlucHV0LWdyb3VwLWJ0bjpmaXJzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bi1ncm91cCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmRyb3Bkb3duLXRvZ2dsZSxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgQGluY2x1ZGUgYm9yZGVyLXJpZ2h0LXJhZGl1cygwKTtcbn1cbi5pbnB1dC1ncm91cC1hZGRvbjpmaXJzdC1jaGlsZCB7XG4gIGJvcmRlci1yaWdodDogMDtcbn1cbi5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sOmxhc3QtY2hpbGQsXG4uaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZCxcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5idG4sXG4uaW5wdXQtZ3JvdXAtYnRuOmxhc3QtY2hpbGQgPiAuYnRuLWdyb3VwID4gLmJ0bixcbi5pbnB1dC1ncm91cC1idG46bGFzdC1jaGlsZCA+IC5kcm9wZG93bi10b2dnbGUsXG4uaW5wdXQtZ3JvdXAtYnRuOmZpcnN0LWNoaWxkID4gLmJ0bjpub3QoOmZpcnN0LWNoaWxkKSxcbi5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQgPiAuYnRuLWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpID4gLmJ0biB7XG4gIEBpbmNsdWRlIGJvcmRlci1sZWZ0LXJhZGl1cygwKTtcbn1cbi5pbnB1dC1ncm91cC1hZGRvbjpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLWxlZnQ6IDA7XG59XG5cbi8vIEJ1dHRvbiBpbnB1dCBncm91cHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi5pbnB1dC1ncm91cC1idG4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC8vIEphbmtpbHkgcHJldmVudCBpbnB1dCBidXR0b24gZ3JvdXBzIGZyb20gd3JhcHBpbmcgd2l0aCBgd2hpdGUtc3BhY2VgIGFuZFxuICAvLyBgZm9udC1zaXplYCBpbiBjb21iaW5hdGlvbiB3aXRoIGBpbmxpbmUtYmxvY2tgIG9uIGJ1dHRvbnMuXG4gIGZvbnQtc2l6ZTogMDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAvLyBOZWdhdGl2ZSBtYXJnaW4gZm9yIHNwYWNpbmcsIHBvc2l0aW9uIGZvciBicmluZ2luZyBob3ZlcmVkL2ZvY3VzZWQvYWN0aXZlZFxuICAvLyBlbGVtZW50IGFib3ZlIHRoZSBzaWJsaW5ncy5cbiAgPiAuYnRuIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgKyAuYnRuIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAgIH1cbiAgICAvLyBCcmluZyB0aGUgXCJhY3RpdmVcIiBidXR0b24gdG8gdGhlIGZyb250XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzLFxuICAgICY6YWN0aXZlIHtcbiAgICAgIHotaW5kZXg6IDI7XG4gICAgfVxuICB9XG5cbiAgLy8gTmVnYXRpdmUgbWFyZ2luIHRvIG9ubHkgaGF2ZSBhIDFweCBib3JkZXIgYmV0d2VlbiB0aGUgdHdvXG4gICY6Zmlyc3QtY2hpbGQge1xuICAgID4gLmJ0bixcbiAgICA+IC5idG4tZ3JvdXAge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAtMXB4O1xuICAgIH1cbiAgfVxuICAmOmxhc3QtY2hpbGQge1xuICAgID4gLmJ0bixcbiAgICA+IC5idG4tZ3JvdXAge1xuICAgICAgei1pbmRleDogMjtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIE5hdnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBjbGFzc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLm5hdiB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHBhZGRpbmctbGVmdDogMDsgLy8gT3ZlcnJpZGUgZGVmYXVsdCB1bC9vbFxuICBsaXN0LXN0eWxlOiBub25lO1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcblxuICA+IGxpIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICA+IGEge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwYWRkaW5nOiAkbmF2LWxpbmstcGFkZGluZztcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2LWxpbmstaG92ZXItYmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZWQgc3RhdGUgc2V0cyB0ZXh0IHRvIGdyYXkgYW5kIG51a2VzIGhvdmVyL3RhYiBlZmZlY3RzXG4gICAgJi5kaXNhYmxlZCA+IGEge1xuICAgICAgY29sb3I6ICRuYXYtZGlzYWJsZWQtbGluay1jb2xvcjtcblxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdi1kaXNhYmxlZC1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBjdXJzb3I6ICRjdXJzb3ItZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gT3BlbiBkcm9wZG93bnNcbiAgLm9wZW4gPiBhIHtcbiAgICAmLFxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2LWxpbmstaG92ZXItYmc7XG4gICAgICBib3JkZXItY29sb3I6ICRsaW5rLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5hdiBkaXZpZGVycyAoZGVwcmVjYXRlZCB3aXRoIHYzLjAuMSlcbiAgLy9cbiAgLy8gVGhpcyBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgaW4gdjMgd2l0aCB0aGUgZHJvcHBpbmcgb2YgYC5uYXYtbGlzdGAsIGJ1dFxuICAvLyB3ZSBtaXNzZWQgaXQuIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHRoaXMgYW55d2hlcmUsIGJ1dCBpbiB0aGUgaW50ZXJlc3RcbiAgLy8gb2YgbWFpbnRhaW5pbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpbiBjYXNlIHlvdSB1c2UgaXQsIGl0J3MgZGVwcmVjYXRlZC5cbiAgLm5hdi1kaXZpZGVyIHtcbiAgICBAaW5jbHVkZSBuYXYtZGl2aWRlcjtcbiAgfVxuXG4gIC8vIFByZXZlbnQgSUU4IGZyb20gbWlzcGxhY2luZyBpbWdzXG4gIC8vXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vaDVicC9odG1sNS1ib2lsZXJwbGF0ZS9pc3N1ZXMvOTg0I2lzc3VlY29tbWVudC0zOTg1OTg5XG4gID4gbGkgPiBhID4gaW1nIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gIH1cbn1cblxuXG4vLyBUYWJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEdpdmUgdGhlIHRhYnMgc29tZXRoaW5nIHRvIHNpdCBvblxuLm5hdi10YWJzIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRuYXYtdGFicy1ib3JkZXItY29sb3I7XG4gID4gbGkge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIC8vIE1ha2UgdGhlIGxpc3QtaXRlbXMgb3ZlcmxheSB0aGUgYm90dG9tIGJvcmRlclxuICAgIG1hcmdpbi1ib3R0b206IC0xcHg7XG5cbiAgICAvLyBBY3R1YWwgdGFicyAoYXMgbGlua3MpXG4gICAgPiBhIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMnB4O1xuICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlICRib3JkZXItcmFkaXVzLWJhc2UgMCAwO1xuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yICRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvciAkbmF2LXRhYnMtYm9yZGVyLWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFjdGl2ZSBzdGF0ZSwgYW5kIGl0cyA6aG92ZXIgdG8gb3ZlcnJpZGUgbm9ybWFsIDpob3ZlclxuICAgICYuYWN0aXZlID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdi10YWJzLWFjdGl2ZS1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2LXRhYnMtYWN0aXZlLWxpbmstaG92ZXItYmc7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRuYXYtdGFicy1hY3RpdmUtbGluay1ob3Zlci1ib3JkZXItY29sb3I7XG4gICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIHB1bGxpbmcgdGhpcyBpbiBtYWlubHkgZm9yIGxlc3Mgc2hvcnRoYW5kXG4gICYubmF2LWp1c3RpZmllZCB7XG4gICAgQGV4dGVuZCAubmF2LWp1c3RpZmllZDtcbiAgICBAZXh0ZW5kIC5uYXYtdGFicy1qdXN0aWZpZWQ7XG4gIH1cbn1cblxuXG4vLyBQaWxsc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLm5hdi1waWxscyB7XG4gID4gbGkge1xuICAgIGZsb2F0OiBsZWZ0O1xuXG4gICAgLy8gTGlua3MgcmVuZGVyZWQgYXMgcGlsbHNcbiAgICA+IGEge1xuICAgICAgYm9yZGVyLXJhZGl1czogJG5hdi1waWxscy1ib3JkZXItcmFkaXVzO1xuICAgIH1cbiAgICArIGxpIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAycHg7XG4gICAgfVxuXG4gICAgLy8gQWN0aXZlIHN0YXRlXG4gICAgJi5hY3RpdmUgPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkbmF2LXBpbGxzLWFjdGl2ZS1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2LXBpbGxzLWFjdGl2ZS1saW5rLWhvdmVyLWJnO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi8vIFN0YWNrZWQgcGlsbHNcbi5uYXYtc3RhY2tlZCB7XG4gID4gbGkge1xuICAgIGZsb2F0OiBub25lO1xuICAgICsgbGkge1xuICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgbWFyZ2luLWxlZnQ6IDA7IC8vIG5vIG5lZWQgZm9yIHRoaXMgZ2FwIGJldHdlZW4gbmF2IGl0ZW1zXG4gICAgfVxuICB9XG59XG5cblxuLy8gTmF2IHZhcmlhdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIEp1c3RpZmllZCBuYXYgbGlua3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLm5hdi1qdXN0aWZpZWQge1xuICB3aWR0aDogMTAwJTtcblxuICA+IGxpIHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICA+IGEge1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICAgIH1cbiAgfVxuXG4gID4gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IHtcbiAgICB0b3A6IGF1dG87XG4gICAgbGVmdDogYXV0bztcbiAgfVxuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgID4gbGkge1xuICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICAgIHdpZHRoOiAxJTtcbiAgICAgID4gYSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIE1vdmUgYm9yZGVycyB0byBhbmNob3JzIGluc3RlYWQgb2YgYm90dG9tIG9mIGxpc3Rcbi8vXG4vLyBNaXhpbiBmb3IgYWRkaW5nIG9uIHRvcCB0aGUgc2hhcmVkIGAubmF2LWp1c3RpZmllZGAgc3R5bGVzIGZvciBvdXIgdGFic1xuLm5hdi10YWJzLWp1c3RpZmllZCB7XG4gIGJvcmRlci1ib3R0b206IDA7XG5cbiAgPiBsaSA+IGEge1xuICAgIC8vIE92ZXJyaWRlIG1hcmdpbiBmcm9tIC5uYXYtdGFic1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuICB9XG5cbiAgPiAuYWN0aXZlID4gYSxcbiAgPiAuYWN0aXZlID4gYTpob3ZlcixcbiAgPiAuYWN0aXZlID4gYTpmb2N1cyB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJG5hdi10YWJzLWp1c3RpZmllZC1saW5rLWJvcmRlci1jb2xvcjtcbiAgfVxuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAgID4gbGkgPiBhIHtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkbmF2LXRhYnMtanVzdGlmaWVkLWxpbmstYm9yZGVyLWNvbG9yO1xuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtYmFzZSAkYm9yZGVyLXJhZGl1cy1iYXNlIDAgMDtcbiAgICB9XG4gICAgPiAuYWN0aXZlID4gYSxcbiAgICA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuICAgID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJG5hdi10YWJzLWp1c3RpZmllZC1hY3RpdmUtbGluay1ib3JkZXItY29sb3I7XG4gICAgfVxuICB9XG59XG5cblxuLy8gVGFiYmFibGUgdGFic1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBIaWRlIHRhYmJhYmxlIHBhbmVzIHRvIHN0YXJ0LCBzaG93IHRoZW0gd2hlbiBgLmFjdGl2ZWBcbi50YWItY29udGVudCB7XG4gID4gLnRhYi1wYW5lIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gID4gLmFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cblxuXG4vLyBEcm9wZG93bnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gU3BlY2lmaWMgZHJvcGRvd25zXG4ubmF2LXRhYnMgLmRyb3Bkb3duLW1lbnUge1xuICAvLyBtYWtlIGRyb3Bkb3duIGJvcmRlciBvdmVybGFwIHRhYiBib3JkZXJcbiAgbWFyZ2luLXRvcDogLTFweDtcbiAgLy8gUmVtb3ZlIHRoZSB0b3Agcm91bmRlZCBjb3JuZXJzIGhlcmUgc2luY2UgdGhlcmUgaXMgYSBoYXJkIGVkZ2UgYWJvdmUgdGhlIG1lbnVcbiAgQGluY2x1ZGUgYm9yZGVyLXRvcC1yYWRpdXMoMCk7XG59XG4iLCIvL1xuLy8gTmF2YmFyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBXcmFwcGVyIGFuZCBiYXNlIGNsYXNzXG4vL1xuLy8gUHJvdmlkZSBhIHN0YXRpYyBuYXZiYXIgZnJvbSB3aGljaCB3ZSBleHBhbmQgdG8gY3JlYXRlIGZ1bGwtd2lkdGgsIGZpeGVkLCBhbmRcbi8vIG90aGVyIG5hdmJhciB2YXJpYXRpb25zLlxuXG4ubmF2YmFyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiAkbmF2YmFyLWhlaWdodDsgLy8gRW5zdXJlIGEgbmF2YmFyIGFsd2F5cyBzaG93cyAoZS5nLiwgd2l0aG91dCBhIC5uYXZiYXItYnJhbmQgaW4gY29sbGFwc2VkIG1vZGUpXG4gIG1hcmdpbi1ib3R0b206ICRuYXZiYXItbWFyZ2luLWJvdHRvbTtcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG5cbiAgLy8gUHJldmVudCBmbG9hdHMgZnJvbSBicmVha2luZyB0aGUgbmF2YmFyXG4gIEBpbmNsdWRlIGNsZWFyZml4O1xuXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgYm9yZGVyLXJhZGl1czogJG5hdmJhci1ib3JkZXItcmFkaXVzO1xuICB9XG59XG5cblxuLy8gTmF2YmFyIGhlYWRpbmdcbi8vXG4vLyBHcm91cHMgYC5uYXZiYXItYnJhbmRgIGFuZCBgLm5hdmJhci10b2dnbGVgIGludG8gYSBzaW5nbGUgY29tcG9uZW50IGZvciBlYXN5XG4vLyBzdHlsaW5nIG9mIHJlc3BvbnNpdmUgYXNwZWN0cy5cblxuLm5hdmJhci1oZWFkZXIge1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcblxuICBAbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIGZsb2F0OiBsZWZ0O1xuICB9XG59XG5cblxuLy8gTmF2YmFyIGNvbGxhcHNlIChib2R5KVxuLy9cbi8vIEdyb3VwIHlvdXIgbmF2YmFyIGNvbnRlbnQgaW50byB0aGlzIGZvciBlYXN5IGNvbGxhcHNpbmcgYW5kIGV4cGFuZGluZyBhY3Jvc3Ncbi8vIHZhcmlvdXMgZGV2aWNlIHNpemVzLiBCeSBkZWZhdWx0LCB0aGlzIGNvbnRlbnQgaXMgY29sbGFwc2VkIHdoZW4gPDc2OHB4LCBidXRcbi8vIHdpbGwgZXhwYW5kIHBhc3QgdGhhdCBmb3IgYSBob3Jpem9udGFsIGRpc3BsYXkuXG4vL1xuLy8gVG8gc3RhcnQgKG9uIG1vYmlsZSBkZXZpY2VzKSB0aGUgbmF2YmFyIGxpbmtzLCBmb3JtcywgYW5kIGJ1dHRvbnMgYXJlIHN0YWNrZWRcbi8vIHZlcnRpY2FsbHkgYW5kIGluY2x1ZGUgYSBgbWF4LWhlaWdodGAgdG8gb3ZlcmZsb3cgaW4gY2FzZSB5b3UgaGF2ZSB0b28gbXVjaFxuLy8gY29udGVudCBmb3IgdGhlIHVzZXIncyB2aWV3cG9ydC5cblxuLm5hdmJhci1jb2xsYXBzZSB7XG4gIG92ZXJmbG93LXg6IHZpc2libGU7XG4gIHBhZGRpbmctcmlnaHQ6ICRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICBwYWRkaW5nLWxlZnQ6ICAkbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsLjEpO1xuICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuXG4gICYuaW4ge1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gIH1cblxuICBAbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcblxuICAgICYuY29sbGFwc2Uge1xuICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xuICAgICAgcGFkZGluZy1ib3R0b206IDA7IC8vIE92ZXJyaWRlIGRlZmF1bHQgc2V0dGluZ1xuICAgICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAmLmluIHtcbiAgICAgIG92ZXJmbG93LXk6IHZpc2libGU7XG4gICAgfVxuXG4gICAgLy8gVW5kbyB0aGUgY29sbGFwc2Ugc2lkZSBwYWRkaW5nIGZvciBuYXZiYXJzIHdpdGggY29udGFpbmVycyB0byBlbnN1cmVcbiAgICAvLyBhbGlnbm1lbnQgb2YgcmlnaHQtYWxpZ25lZCBjb250ZW50cy5cbiAgICAubmF2YmFyLWZpeGVkLXRvcCAmLFxuICAgIC5uYXZiYXItc3RhdGljLXRvcCAmLFxuICAgIC5uYXZiYXItZml4ZWQtYm90dG9tICYge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICB9XG4gIH1cbn1cblxuLm5hdmJhci1maXhlZC10b3AsXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSB7XG4gIC5uYXZiYXItY29sbGFwc2Uge1xuICAgIG1heC1oZWlnaHQ6ICRuYXZiYXItY29sbGFwc2UtbWF4LWhlaWdodDtcblxuICAgIEBtZWRpYSAobWF4LWRldmljZS13aWR0aDogJHNjcmVlbi14cy1taW4pIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgICAgbWF4LWhlaWdodDogMjAwcHg7XG4gICAgfVxuICB9XG59XG5cblxuLy8gQm90aCBuYXZiYXIgaGVhZGVyIGFuZCBjb2xsYXBzZVxuLy9cbi8vIFdoZW4gYSBjb250YWluZXIgaXMgcHJlc2VudCwgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgaGVhZGVyIGFuZCBjb2xsYXBzZS5cblxuLmNvbnRhaW5lcixcbi5jb250YWluZXItZmx1aWQge1xuICA+IC5uYXZiYXItaGVhZGVyLFxuICA+IC5uYXZiYXItY29sbGFwc2Uge1xuICAgIG1hcmdpbi1yaWdodDogLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICAgIG1hcmdpbi1sZWZ0OiAgLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuXG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAgMDtcbiAgICB9XG4gIH1cbn1cblxuXG4vL1xuLy8gTmF2YmFyIGFsaWdubWVudCBvcHRpb25zXG4vL1xuLy8gRGlzcGxheSB0aGUgbmF2YmFyIGFjcm9zcyB0aGUgZW50aXJldHkgb2YgdGhlIHBhZ2Ugb3IgZml4ZWQgaXQgdG8gdGhlIHRvcCBvclxuLy8gYm90dG9tIG9mIHRoZSBwYWdlLlxuXG4vLyBTdGF0aWMgdG9wICh1bmZpeGVkLCBidXQgMTAwJSB3aWRlKSBuYXZiYXJcbi5uYXZiYXItc3RhdGljLXRvcCB7XG4gIHotaW5kZXg6ICR6aW5kZXgtbmF2YmFyO1xuICBib3JkZXItd2lkdGg6IDAgMCAxcHg7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG59XG5cbi8vIEZpeCB0aGUgdG9wL2JvdHRvbSBuYXZiYXJzIHdoZW4gc2NyZWVuIHJlYWwgZXN0YXRlIHN1cHBvcnRzIGl0XG4ubmF2YmFyLWZpeGVkLXRvcCxcbi5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICByaWdodDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogJHppbmRleC1uYXZiYXItZml4ZWQ7XG5cbiAgLy8gVW5kbyB0aGUgcm91bmRlZCBjb3JuZXJzXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgfVxufVxuLm5hdmJhci1maXhlZC10b3Age1xuICB0b3A6IDA7XG4gIGJvcmRlci13aWR0aDogMCAwIDFweDtcbn1cbi5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgYm90dG9tOiAwO1xuICBtYXJnaW4tYm90dG9tOiAwOyAvLyBvdmVycmlkZSAubmF2YmFyIGRlZmF1bHRzXG4gIGJvcmRlci13aWR0aDogMXB4IDAgMDtcbn1cblxuXG4vLyBCcmFuZC9wcm9qZWN0IG5hbWVcblxuLm5hdmJhci1icmFuZCB7XG4gIGZsb2F0OiBsZWZ0O1xuICBwYWRkaW5nOiAkbmF2YmFyLXBhZGRpbmctdmVydGljYWwgJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1sYXJnZTtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgaGVpZ2h0OiAkbmF2YmFyLWhlaWdodDtcblxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cblxuICA+IGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuICBAbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIC5uYXZiYXIgPiAuY29udGFpbmVyICYsXG4gICAgLm5hdmJhciA+IC5jb250YWluZXItZmx1aWQgJiB7XG4gICAgICBtYXJnaW4tbGVmdDogLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIE5hdmJhciB0b2dnbGVcbi8vXG4vLyBDdXN0b20gYnV0dG9uIGZvciB0b2dnbGluZyB0aGUgYC5uYXZiYXItY29sbGFwc2VgLCBwb3dlcmVkIGJ5IHRoZSBjb2xsYXBzZVxuLy8gSmF2YVNjcmlwdCBwbHVnaW4uXG5cbi5uYXZiYXItdG9nZ2xlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbG9hdDogcmlnaHQ7XG4gIG1hcmdpbi1yaWdodDogJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gIHBhZGRpbmc6IDlweCAxMHB4O1xuICBAaW5jbHVkZSBuYXZiYXItdmVydGljYWwtYWxpZ24oMzRweCk7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOyAvLyBSZXNldCB1bnVzdWFsIEZpcmVmb3gtb24tQW5kcm9pZCBkZWZhdWx0IHN0eWxlOyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcy9pc3N1ZXMvMjE0XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuXG4gIC8vIFdlIHJlbW92ZSB0aGUgYG91dGxpbmVgIGhlcmUsIGJ1dCBsYXRlciBjb21wZW5zYXRlIGJ5IGF0dGFjaGluZyBgOmhvdmVyYFxuICAvLyBzdHlsZXMgdG8gYDpmb2N1c2AuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IDA7XG4gIH1cblxuICAvLyBCYXJzXG4gIC5pY29uLWJhciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDIycHg7XG4gICAgaGVpZ2h0OiAycHg7XG4gICAgYm9yZGVyLXJhZGl1czogMXB4O1xuICB9XG4gIC5pY29uLWJhciArIC5pY29uLWJhciB7XG4gICAgbWFyZ2luLXRvcDogNHB4O1xuICB9XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cblxuLy8gTmF2YmFyIG5hdiBsaW5rc1xuLy9cbi8vIEJ1aWxkcyBvbiB0b3Agb2YgdGhlIGAubmF2YCBjb21wb25lbnRzIHdpdGggaXRzIG93biBtb2RpZmllciBjbGFzcyB0byBtYWtlXG4vLyB0aGUgbmF2IHRoZSBmdWxsIGhlaWdodCBvZiB0aGUgaG9yaXpvbnRhbCBuYXYgKGFib3ZlIDc2OHB4KS5cblxuLm5hdmJhci1uYXYge1xuICBtYXJnaW46ICgkbmF2YmFyLXBhZGRpbmctdmVydGljYWwgLyAyKSAoLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsKTtcblxuICA+IGxpID4gYSB7XG4gICAgcGFkZGluZy10b3A6ICAgIDEwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDEwcHg7XG4gICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50LW1heCkge1xuICAgIC8vIERyb3Bkb3ducyBnZXQgY3VzdG9tIGRpc3BsYXkgd2hlbiBjb2xsYXBzZWRcbiAgICAub3BlbiAuZHJvcGRvd24tbWVudSB7XG4gICAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICA+IGxpID4gYSxcbiAgICAgIC5kcm9wZG93bi1oZWFkZXIge1xuICAgICAgICBwYWRkaW5nOiA1cHggMTVweCA1cHggMjVweDtcbiAgICAgIH1cbiAgICAgID4gbGkgPiBhIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgICAgICAgJjpob3ZlcixcbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFVuY29sbGFwc2UgdGhlIG5hdlxuICBAbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbjogMDtcblxuICAgID4gbGkge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICA+IGEge1xuICAgICAgICBwYWRkaW5nLXRvcDogICAgJG5hdmJhci1wYWRkaW5nLXZlcnRpY2FsO1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogJG5hdmJhci1wYWRkaW5nLXZlcnRpY2FsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi8vIE5hdmJhciBmb3JtXG4vL1xuLy8gRXh0ZW5zaW9uIG9mIHRoZSBgLmZvcm0taW5saW5lYCB3aXRoIHNvbWUgZXh0cmEgZmxhdm9yIGZvciBvcHRpbXVtIGRpc3BsYXkgaW5cbi8vIG91ciBuYXZiYXJzLlxuXG4ubmF2YmFyLWZvcm0ge1xuICBtYXJnaW4tbGVmdDogLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuICBtYXJnaW4tcmlnaHQ6IC0kbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgcGFkZGluZzogMTBweCAkbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICRzaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuMSksIDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwuMSk7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3coJHNoYWRvdyk7XG5cbiAgLy8gTWl4aW4gYmVoYXZpb3IgZm9yIG9wdGltdW0gZGlzcGxheVxuICBAaW5jbHVkZSBmb3JtLWlubGluZTtcblxuICAuZm9ybS1ncm91cCB7XG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQtbWF4KSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVmVydGljYWxseSBjZW50ZXIgaW4gZXhwYW5kZWQsIGhvcml6b250YWwgbmF2YmFyXG4gIEBpbmNsdWRlIG5hdmJhci12ZXJ0aWNhbC1hbGlnbigkaW5wdXQtaGVpZ2h0LWJhc2UpO1xuXG4gIC8vIFVuZG8gMTAwJSB3aWR0aCBmb3IgcHVsbCBjbGFzc2VzXG4gIEBtZWRpYSAobWluLXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50KSB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgYm9yZGVyOiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93KG5vbmUpO1xuICB9XG59XG5cblxuLy8gRHJvcGRvd24gbWVudXNcblxuLy8gTWVudSBwb3NpdGlvbiBhbmQgbWVudSBjYXJldHNcbi5uYXZiYXItbmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudSB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKDApO1xufVxuLy8gTWVudSBwb3NpdGlvbiBhbmQgbWVudSBjYXJldCBzdXBwb3J0IGZvciBkcm9wdXBzIHZpYSBleHRyYSBkcm9wdXAgY2xhc3Ncbi5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItbmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKCRuYXZiYXItYm9yZGVyLXJhZGl1cyk7XG4gIEBpbmNsdWRlIGJvcmRlci1ib3R0b20tcmFkaXVzKDApO1xufVxuXG5cbi8vIEJ1dHRvbnMgaW4gbmF2YmFyc1xuLy9cbi8vIFZlcnRpY2FsbHkgY2VudGVyIGEgYnV0dG9uIHdpdGhpbiBhIG5hdmJhciAod2hlbiAqbm90KiBpbiBhIGZvcm0pLlxuXG4ubmF2YmFyLWJ0biB7XG4gIEBpbmNsdWRlIG5hdmJhci12ZXJ0aWNhbC1hbGlnbigkaW5wdXQtaGVpZ2h0LWJhc2UpO1xuXG4gICYuYnRuLXNtIHtcbiAgICBAaW5jbHVkZSBuYXZiYXItdmVydGljYWwtYWxpZ24oJGlucHV0LWhlaWdodC1zbWFsbCk7XG4gIH1cbiAgJi5idG4teHMge1xuICAgIEBpbmNsdWRlIG5hdmJhci12ZXJ0aWNhbC1hbGlnbigyMik7XG4gIH1cbn1cblxuXG4vLyBUZXh0IGluIG5hdmJhcnNcbi8vXG4vLyBBZGQgYSBjbGFzcyB0byBtYWtlIGFueSBlbGVtZW50IHByb3Blcmx5IGFsaWduIGl0c2VsZiB2ZXJ0aWNhbGx5IHdpdGhpbiB0aGUgbmF2YmFycy5cblxuLm5hdmJhci10ZXh0IHtcbiAgQGluY2x1ZGUgbmF2YmFyLXZlcnRpY2FsLWFsaWduKCRsaW5lLWhlaWdodC1jb21wdXRlZCk7XG5cbiAgQG1lZGlhIChtaW4td2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQpIHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tbGVmdDogJG5hdmJhci1wYWRkaW5nLWhvcml6b250YWw7XG4gICAgbWFyZ2luLXJpZ2h0OiAkbmF2YmFyLXBhZGRpbmctaG9yaXpvbnRhbDtcbiAgfVxufVxuXG5cbi8vIENvbXBvbmVudCBhbGlnbm1lbnRcbi8vXG4vLyBSZXB1cnBvc2UgdGhlIHB1bGwgdXRpbGl0aWVzIGFzIHRoZWlyIG93biBuYXZiYXIgdXRpbGl0aWVzIHRvIGF2b2lkIHNwZWNpZmljaXR5XG4vLyBpc3N1ZXMgd2l0aCBwYXJlbnRzIGFuZCBjaGFpbmluZy4gT25seSBkbyB0aGlzIHdoZW4gdGhlIG5hdmJhciBpcyB1bmNvbGxhcHNlZFxuLy8gdGhvdWdoIHNvIHRoYXQgbmF2YmFyIGNvbnRlbnRzIHByb3Blcmx5IHN0YWNrIGFuZCBhbGlnbiBpbiBtb2JpbGUuXG4vL1xuLy8gRGVjbGFyZWQgYWZ0ZXIgdGhlIG5hdmJhciBjb21wb25lbnRzIHRvIGVuc3VyZSBtb3JlIHNwZWNpZmljaXR5IG9uIHRoZSBtYXJnaW5zLlxuXG5AbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAubmF2YmFyLWxlZnQge1xuICAgIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm5hdmJhci1yaWdodCB7XG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XG4gIG1hcmdpbi1yaWdodDogLSRuYXZiYXItcGFkZGluZy1ob3Jpem9udGFsO1xuXG4gICAgfiAubmF2YmFyLXJpZ2h0IHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBBbHRlcm5hdGUgbmF2YmFyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gRGVmYXVsdCBuYXZiYXJcbi5uYXZiYXItZGVmYXVsdCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC1iZztcbiAgYm9yZGVyLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtYm9yZGVyO1xuXG4gIC5uYXZiYXItYnJhbmQge1xuICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtYnJhbmQtY29sb3I7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtYnJhbmQtaG92ZXItY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtYnJhbmQtaG92ZXItYmc7XG4gICAgfVxuICB9XG5cbiAgLm5hdmJhci10ZXh0IHtcbiAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWNvbG9yO1xuICB9XG5cbiAgLm5hdmJhci1uYXYge1xuICAgID4gbGkgPiBhIHtcbiAgICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1jb2xvcjtcblxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWhvdmVyLWJnO1xuICAgICAgfVxuICAgIH1cbiAgICA+IC5hY3RpdmUgPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1hY3RpdmUtY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1iZztcbiAgICAgIH1cbiAgICB9XG4gICAgPiAuZGlzYWJsZWQgPiBhIHtcbiAgICAgICYsXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstZGlzYWJsZWQtYmc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm5hdmJhci10b2dnbGUge1xuICAgIGJvcmRlci1jb2xvcjogJG5hdmJhci1kZWZhdWx0LXRvZ2dsZS1ib3JkZXItY29sb3I7XG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC10b2dnbGUtaG92ZXItYmc7XG4gICAgfVxuICAgIC5pY29uLWJhciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtdG9nZ2xlLWljb24tYmFyLWJnO1xuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItY29sbGFwc2UsXG4gIC5uYXZiYXItZm9ybSB7XG4gICAgYm9yZGVyLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtYm9yZGVyO1xuICB9XG5cbiAgLy8gRHJvcGRvd24gbWVudSBpdGVtc1xuICAubmF2YmFyLW5hdiB7XG4gICAgLy8gUmVtb3ZlIGJhY2tncm91bmQgY29sb3IgZnJvbSBvcGVuIGRyb3Bkb3duXG4gICAgPiAub3BlbiA+IGEge1xuICAgICAgJixcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWJnO1xuICAgICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstYWN0aXZlLWNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAkZ3JpZC1mbG9hdC1icmVha3BvaW50LW1heCkge1xuICAgICAgLy8gRHJvcGRvd25zIGdldCBjdXN0b20gZGlzcGxheSB3aGVuIGNvbGxhcHNlZFxuICAgICAgLm9wZW4gLmRyb3Bkb3duLW1lbnUge1xuICAgICAgICA+IGxpID4gYSB7XG4gICAgICAgICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWNvbG9yO1xuICAgICAgICAgICY6aG92ZXIsXG4gICAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItY29sb3I7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1ob3Zlci1iZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPiAuYWN0aXZlID4gYSB7XG4gICAgICAgICAgJixcbiAgICAgICAgICAmOmhvdmVyLFxuICAgICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1jb2xvcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWFjdGl2ZS1iZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPiAuZGlzYWJsZWQgPiBhIHtcbiAgICAgICAgICAmLFxuICAgICAgICAgICY6aG92ZXIsXG4gICAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstZGlzYWJsZWQtY29sb3I7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWRlZmF1bHQtbGluay1kaXNhYmxlZC1iZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8vIExpbmtzIGluIG5hdmJhcnNcbiAgLy9cbiAgLy8gQWRkIGEgY2xhc3MgdG8gZW5zdXJlIGxpbmtzIG91dHNpZGUgdGhlIG5hdmJhciBuYXYgYXJlIGNvbG9yZWQgY29ycmVjdGx5LlxuXG4gIC5uYXZiYXItbGluayB7XG4gICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWNvbG9yO1xuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWhvdmVyLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5idG4tbGluayB7XG4gICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWNvbG9yO1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogJG5hdmJhci1kZWZhdWx0LWxpbmstaG92ZXItY29sb3I7XG4gICAgfVxuICAgICZbZGlzYWJsZWRdLFxuICAgIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRuYXZiYXItZGVmYXVsdC1saW5rLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBJbnZlcnNlIG5hdmJhclxuXG4ubmF2YmFyLWludmVyc2Uge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtYmc7XG4gIGJvcmRlci1jb2xvcjogJG5hdmJhci1pbnZlcnNlLWJvcmRlcjtcblxuICAubmF2YmFyLWJyYW5kIHtcbiAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWJyYW5kLWNvbG9yO1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWJyYW5kLWhvdmVyLWNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1pbnZlcnNlLWJyYW5kLWhvdmVyLWJnO1xuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItdGV4dCB7XG4gICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1jb2xvcjtcbiAgfVxuXG4gIC5uYXZiYXItbmF2IHtcbiAgICA+IGxpID4gYSB7XG4gICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstY29sb3I7XG5cbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1iZztcbiAgICAgIH1cbiAgICB9XG4gICAgPiAuYWN0aXZlID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstYWN0aXZlLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtYmc7XG4gICAgICB9XG4gICAgfVxuICAgID4gLmRpc2FibGVkID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstZGlzYWJsZWQtY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWRpc2FibGVkLWJnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIERhcmtlbiB0aGUgcmVzcG9uc2l2ZSBuYXYgdG9nZ2xlXG4gIC5uYXZiYXItdG9nZ2xlIHtcbiAgICBib3JkZXItY29sb3I6ICRuYXZiYXItaW52ZXJzZS10b2dnbGUtYm9yZGVyLWNvbG9yO1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtdG9nZ2xlLWhvdmVyLWJnO1xuICAgIH1cbiAgICAuaWNvbi1iYXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1pbnZlcnNlLXRvZ2dsZS1pY29uLWJhci1iZztcbiAgICB9XG4gIH1cblxuICAubmF2YmFyLWNvbGxhcHNlLFxuICAubmF2YmFyLWZvcm0ge1xuICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRuYXZiYXItaW52ZXJzZS1iZywgNyUpO1xuICB9XG5cbiAgLy8gRHJvcGRvd25zXG4gIC5uYXZiYXItbmF2IHtcbiAgICA+IC5vcGVuID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtYmc7XG4gICAgICAgIGNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1hY3RpdmUtY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6ICRncmlkLWZsb2F0LWJyZWFrcG9pbnQtbWF4KSB7XG4gICAgICAvLyBEcm9wZG93bnMgZ2V0IGN1c3RvbSBkaXNwbGF5XG4gICAgICAub3BlbiAuZHJvcGRvd24tbWVudSB7XG4gICAgICAgID4gLmRyb3Bkb3duLWhlYWRlciB7XG4gICAgICAgICAgYm9yZGVyLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtYm9yZGVyO1xuICAgICAgICB9XG4gICAgICAgIC5kaXZpZGVyIHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2YmFyLWludmVyc2UtYm9yZGVyO1xuICAgICAgICB9XG4gICAgICAgID4gbGkgPiBhIHtcbiAgICAgICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstY29sb3I7XG4gICAgICAgICAgJjpob3ZlcixcbiAgICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIGNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1ob3Zlci1jb2xvcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWJnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA+IC5hY3RpdmUgPiBhIHtcbiAgICAgICAgICAmLFxuICAgICAgICAgICY6aG92ZXIsXG4gICAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstYWN0aXZlLWNvbG9yO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstYWN0aXZlLWJnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA+IC5kaXNhYmxlZCA+IGEge1xuICAgICAgICAgICYsXG4gICAgICAgICAgJjpob3ZlcixcbiAgICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIGNvbG9yOiAkbmF2YmFyLWludmVyc2UtbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWRpc2FibGVkLWJnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItbGluayB7XG4gICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWNvbG9yO1xuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWhvdmVyLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5idG4tbGluayB7XG4gICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWNvbG9yO1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogJG5hdmJhci1pbnZlcnNlLWxpbmstaG92ZXItY29sb3I7XG4gICAgfVxuICAgICZbZGlzYWJsZWRdLFxuICAgIGZpZWxkc2V0W2Rpc2FibGVkXSAmIHtcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRuYXZiYXItaW52ZXJzZS1saW5rLWRpc2FibGVkLWNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gTmF2YmFyIHZlcnRpY2FsIGFsaWduXG4vL1xuLy8gVmVydGljYWxseSBjZW50ZXIgZWxlbWVudHMgaW4gdGhlIG5hdmJhci5cbi8vIEV4YW1wbGU6IGFuIGVsZW1lbnQgaGFzIGEgaGVpZ2h0IG9mIDMwcHgsIHNvIHdyaXRlIG91dCBgLm5hdmJhci12ZXJ0aWNhbC1hbGlnbigzMHB4KTtgIHRvIGNhbGN1bGF0ZSB0aGUgYXBwcm9wcmlhdGUgdG9wIG1hcmdpbi5cblxuQG1peGluIG5hdmJhci12ZXJ0aWNhbC1hbGlnbigkZWxlbWVudC1oZWlnaHQpIHtcbiAgbWFyZ2luLXRvcDogKCgkbmF2YmFyLWhlaWdodCAtICRlbGVtZW50LWhlaWdodCkgLyAyKTtcbiAgbWFyZ2luLWJvdHRvbTogKCgkbmF2YmFyLWhlaWdodCAtICRlbGVtZW50LWhlaWdodCkgLyAyKTtcbn1cbiIsIi8vXG4vLyBCcmVhZGNydW1ic1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4uYnJlYWRjcnVtYiB7XG4gIHBhZGRpbmc6ICRicmVhZGNydW1iLXBhZGRpbmctdmVydGljYWwgJGJyZWFkY3J1bWItcGFkZGluZy1ob3Jpem9udGFsO1xuICBtYXJnaW4tYm90dG9tOiAkbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRicmVhZGNydW1iLWJnO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuXG4gID4gbGkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICAgICsgbGk6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiI3skYnJlYWRjcnVtYi1zZXBhcmF0b3J9XFwwMGEwXCI7IC8vIFVuaWNvZGUgc3BhY2UgYWRkZWQgc2luY2UgaW5saW5lLWJsb2NrIG1lYW5zIG5vbi1jb2xsYXBzaW5nIHdoaXRlLXNwYWNlXG4gICAgICBwYWRkaW5nOiAwIDVweDtcbiAgICAgIGNvbG9yOiAkYnJlYWRjcnVtYi1jb2xvcjtcbiAgICB9XG4gIH1cblxuICA+IC5hY3RpdmUge1xuICAgIGNvbG9yOiAkYnJlYWRjcnVtYi1hY3RpdmUtY29sb3I7XG4gIH1cbn1cbiIsIi8vXG4vLyBQYWdpbmF0aW9uIChtdWx0aXBsZSBwYWdlcylcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4ucGFnaW5hdGlvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBtYXJnaW46ICRsaW5lLWhlaWdodC1jb21wdXRlZCAwO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuXG4gID4gbGkge1xuICAgIGRpc3BsYXk6IGlubGluZTsgLy8gUmVtb3ZlIGxpc3Qtc3R5bGUgYW5kIGJsb2NrLWxldmVsIGRlZmF1bHRzXG4gICAgPiBhLFxuICAgID4gc3BhbiB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBmbG9hdDogbGVmdDsgLy8gQ29sbGFwc2Ugd2hpdGUtc3BhY2VcbiAgICAgIHBhZGRpbmc6ICRwYWRkaW5nLWJhc2UtdmVydGljYWwgJHBhZGRpbmctYmFzZS1ob3Jpem9udGFsO1xuICAgICAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgY29sb3I6ICRwYWdpbmF0aW9uLWNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHBhZ2luYXRpb24tYmc7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAkcGFnaW5hdGlvbi1ib3JkZXI7XG4gICAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgICB9XG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICA+IGEsXG4gICAgICA+IHNwYW4ge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgQGluY2x1ZGUgYm9yZGVyLWxlZnQtcmFkaXVzKCRib3JkZXItcmFkaXVzLWJhc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgPiBhLFxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgQGluY2x1ZGUgYm9yZGVyLXJpZ2h0LXJhZGl1cygkYm9yZGVyLXJhZGl1cy1iYXNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICA+IGxpID4gYSxcbiAgPiBsaSA+IHNwYW4ge1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICB6LWluZGV4OiAzO1xuICAgICAgY29sb3I6ICRwYWdpbmF0aW9uLWhvdmVyLWNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHBhZ2luYXRpb24taG92ZXItYmc7XG4gICAgICBib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWhvdmVyLWJvcmRlcjtcbiAgICB9XG4gIH1cblxuICA+IC5hY3RpdmUgPiBhLFxuICA+IC5hY3RpdmUgPiBzcGFuIHtcbiAgICAmLFxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICB6LWluZGV4OiAyO1xuICAgICAgY29sb3I6ICRwYWdpbmF0aW9uLWFjdGl2ZS1jb2xvcjtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwYWdpbmF0aW9uLWFjdGl2ZS1iZztcbiAgICAgIGJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYWN0aXZlLWJvcmRlcjtcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICB9XG4gIH1cblxuICA+IC5kaXNhYmxlZCB7XG4gICAgPiBzcGFuLFxuICAgID4gc3Bhbjpob3ZlcixcbiAgICA+IHNwYW46Zm9jdXMsXG4gICAgPiBhLFxuICAgID4gYTpob3ZlcixcbiAgICA+IGE6Zm9jdXMge1xuICAgICAgY29sb3I6ICRwYWdpbmF0aW9uLWRpc2FibGVkLWNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHBhZ2luYXRpb24tZGlzYWJsZWQtYmc7XG4gICAgICBib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWRpc2FibGVkLWJvcmRlcjtcbiAgICAgIGN1cnNvcjogJGN1cnNvci1kaXNhYmxlZDtcbiAgICB9XG4gIH1cbn1cblxuLy8gU2l6aW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBMYXJnZVxuLnBhZ2luYXRpb24tbGcge1xuICBAaW5jbHVkZSBwYWdpbmF0aW9uLXNpemUoJHBhZGRpbmctbGFyZ2UtdmVydGljYWwsICRwYWRkaW5nLWxhcmdlLWhvcml6b250YWwsICRmb250LXNpemUtbGFyZ2UsICRsaW5lLWhlaWdodC1sYXJnZSwgJGJvcmRlci1yYWRpdXMtbGFyZ2UpO1xufVxuXG4vLyBTbWFsbFxuLnBhZ2luYXRpb24tc20ge1xuICBAaW5jbHVkZSBwYWdpbmF0aW9uLXNpemUoJHBhZGRpbmctc21hbGwtdmVydGljYWwsICRwYWRkaW5nLXNtYWxsLWhvcml6b250YWwsICRmb250LXNpemUtc21hbGwsICRsaW5lLWhlaWdodC1zbWFsbCwgJGJvcmRlci1yYWRpdXMtc21hbGwpO1xufVxuIiwiLy8gUGFnaW5hdGlvblxuXG5AbWl4aW4gcGFnaW5hdGlvbi1zaXplKCRwYWRkaW5nLXZlcnRpY2FsLCAkcGFkZGluZy1ob3Jpem9udGFsLCAkZm9udC1zaXplLCAkbGluZS1oZWlnaHQsICRib3JkZXItcmFkaXVzKSB7XG4gID4gbGkge1xuICAgID4gYSxcbiAgICA+IHNwYW4ge1xuICAgICAgcGFkZGluZzogJHBhZGRpbmctdmVydGljYWwgJHBhZGRpbmctaG9yaXpvbnRhbDtcbiAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgfVxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgPiBhLFxuICAgICAgPiBzcGFuIHtcbiAgICAgICAgQGluY2x1ZGUgYm9yZGVyLWxlZnQtcmFkaXVzKCRib3JkZXItcmFkaXVzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgID4gYSxcbiAgICAgID4gc3BhbiB7XG4gICAgICAgIEBpbmNsdWRlIGJvcmRlci1yaWdodC1yYWRpdXMoJGJvcmRlci1yYWRpdXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIFBhZ2VyIHBhZ2luYXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLnBhZ2VyIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBtYXJnaW46ICRsaW5lLWhlaWdodC1jb21wdXRlZCAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIEBpbmNsdWRlIGNsZWFyZml4O1xuICBsaSB7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgID4gYSxcbiAgICA+IHNwYW4ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgcGFkZGluZzogNXB4IDE0cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcGFnZXItYmc7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAkcGFnZXItYm9yZGVyO1xuICAgICAgYm9yZGVyLXJhZGl1czogJHBhZ2VyLWJvcmRlci1yYWRpdXM7XG4gICAgfVxuXG4gICAgPiBhOmhvdmVyLFxuICAgID4gYTpmb2N1cyB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcGFnZXItaG92ZXItYmc7XG4gICAgfVxuICB9XG5cbiAgLm5leHQge1xuICAgID4gYSxcbiAgICA+IHNwYW4ge1xuICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC5wcmV2aW91cyB7XG4gICAgPiBhLFxuICAgID4gc3BhbiB7XG4gICAgICBmbG9hdDogbGVmdDtcbiAgICB9XG4gIH1cblxuICAuZGlzYWJsZWQge1xuICAgID4gYSxcbiAgICA+IGE6aG92ZXIsXG4gICAgPiBhOmZvY3VzLFxuICAgID4gc3BhbiB7XG4gICAgICBjb2xvcjogJHBhZ2VyLWRpc2FibGVkLWNvbG9yO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHBhZ2VyLWJnO1xuICAgICAgY3Vyc29yOiAkY3Vyc29yLWRpc2FibGVkO1xuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIExhYmVsc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lO1xuICBwYWRkaW5nOiAuMmVtIC42ZW0gLjNlbTtcbiAgZm9udC1zaXplOiA3NSU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICRsYWJlbC1jb2xvcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIGJvcmRlci1yYWRpdXM6IC4yNWVtO1xuXG4gIC8vIFtjb252ZXJ0ZXJdIGV4dHJhY3RlZCBhJiB0byBhLmxhYmVsXG5cbiAgLy8gRW1wdHkgbGFiZWxzIGNvbGxhcHNlIGF1dG9tYXRpY2FsbHkgKG5vdCBhdmFpbGFibGUgaW4gSUU4KVxuICAmOmVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gUXVpY2sgZml4IGZvciBsYWJlbHMgaW4gYnV0dG9uc1xuICAuYnRuICYge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC0xcHg7XG4gIH1cbn1cblxuLy8gQWRkIGhvdmVyIGVmZmVjdHMsIGJ1dCBvbmx5IGZvciBsaW5rc1xuYS5sYWJlbCB7XG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiAkbGFiZWwtbGluay1ob3Zlci1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG59XG5cbi8vIENvbG9yc1xuLy8gQ29udGV4dHVhbCB2YXJpYXRpb25zIChsaW5rZWQgbGFiZWxzIGdldCBkYXJrZXIgb24gOmhvdmVyKVxuXG4ubGFiZWwtZGVmYXVsdCB7XG4gIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQoJGxhYmVsLWRlZmF1bHQtYmcpO1xufVxuXG4ubGFiZWwtcHJpbWFyeSB7XG4gIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQoJGxhYmVsLXByaW1hcnktYmcpO1xufVxuXG4ubGFiZWwtc3VjY2VzcyB7XG4gIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQoJGxhYmVsLXN1Y2Nlc3MtYmcpO1xufVxuXG4ubGFiZWwtaW5mbyB7XG4gIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQoJGxhYmVsLWluZm8tYmcpO1xufVxuXG4ubGFiZWwtd2FybmluZyB7XG4gIEBpbmNsdWRlIGxhYmVsLXZhcmlhbnQoJGxhYmVsLXdhcm5pbmctYmcpO1xufVxuXG4ubGFiZWwtZGFuZ2VyIHtcbiAgQGluY2x1ZGUgbGFiZWwtdmFyaWFudCgkbGFiZWwtZGFuZ2VyLWJnKTtcbn1cbiIsIi8vIExhYmVsc1xuXG5AbWl4aW4gbGFiZWwtdmFyaWFudCgkY29sb3IpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yO1xuXG4gICZbaHJlZl0ge1xuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNvbG9yLCAxMCUpO1xuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIEJhZGdlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBCYXNlIGNsYXNzXG4uYmFkZ2Uge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1pbi13aWR0aDogMTBweDtcbiAgcGFkZGluZzogM3B4IDdweDtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICBmb250LXdlaWdodDogJGJhZGdlLWZvbnQtd2VpZ2h0O1xuICBjb2xvcjogJGJhZGdlLWNvbG9yO1xuICBsaW5lLWhlaWdodDogJGJhZGdlLWxpbmUtaGVpZ2h0O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICRiYWRnZS1iZztcbiAgYm9yZGVyLXJhZGl1czogJGJhZGdlLWJvcmRlci1yYWRpdXM7XG5cbiAgLy8gRW1wdHkgYmFkZ2VzIGNvbGxhcHNlIGF1dG9tYXRpY2FsbHkgKG5vdCBhdmFpbGFibGUgaW4gSUU4KVxuICAmOmVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLy8gUXVpY2sgZml4IGZvciBiYWRnZXMgaW4gYnV0dG9uc1xuICAuYnRuICYge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC0xcHg7XG4gIH1cblxuICAuYnRuLXhzICYsXG4gIC5idG4tZ3JvdXAteHMgPiAuYnRuICYge1xuICAgIHRvcDogMDtcbiAgICBwYWRkaW5nOiAxcHggNXB4O1xuICB9XG5cbiAgLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIGEmIHRvIGEuYmFkZ2VcblxuICAvLyBBY2NvdW50IGZvciBiYWRnZXMgaW4gbmF2c1xuICAubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSA+ICYsXG4gIC5uYXYtcGlsbHMgPiAuYWN0aXZlID4gYSA+ICYge1xuICAgIGNvbG9yOiAkYmFkZ2UtYWN0aXZlLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWRnZS1hY3RpdmUtYmc7XG4gIH1cblxuICAubGlzdC1ncm91cC1pdGVtID4gJiB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICB9XG5cbiAgLmxpc3QtZ3JvdXAtaXRlbSA+ICYgKyAmIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgfVxuXG4gIC5uYXYtcGlsbHMgPiBsaSA+IGEgPiAmIHtcbiAgICBtYXJnaW4tbGVmdDogM3B4O1xuICB9XG59XG5cbi8vIEhvdmVyIHN0YXRlLCBidXQgb25seSBmb3IgbGlua3NcbmEuYmFkZ2Uge1xuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICBjb2xvcjogJGJhZGdlLWxpbmstaG92ZXItY29sb3I7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxufVxuIiwiLy9cbi8vIEp1bWJvdHJvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4uanVtYm90cm9uIHtcbiAgcGFkZGluZy10b3A6ICAgICRqdW1ib3Ryb24tcGFkZGluZztcbiAgcGFkZGluZy1ib3R0b206ICRqdW1ib3Ryb24tcGFkZGluZztcbiAgbWFyZ2luLWJvdHRvbTogJGp1bWJvdHJvbi1wYWRkaW5nO1xuICBjb2xvcjogJGp1bWJvdHJvbi1jb2xvcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGp1bWJvdHJvbi1iZztcblxuICBoMSxcbiAgLmgxIHtcbiAgICBjb2xvcjogJGp1bWJvdHJvbi1oZWFkaW5nLWNvbG9yO1xuICB9XG5cbiAgcCB7XG4gICAgbWFyZ2luLWJvdHRvbTogKCRqdW1ib3Ryb24tcGFkZGluZyAvIDIpO1xuICAgIGZvbnQtc2l6ZTogJGp1bWJvdHJvbi1mb250LXNpemU7XG4gICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgfVxuXG4gID4gaHIge1xuICAgIGJvcmRlci10b3AtY29sb3I6IGRhcmtlbigkanVtYm90cm9uLWJnLCAxMCUpO1xuICB9XG5cbiAgLmNvbnRhaW5lciAmLFxuICAuY29udGFpbmVyLWZsdWlkICYge1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWxhcmdlOyAvLyBPbmx5IHJvdW5kIGNvcm5lcnMgYXQgaGlnaGVyIHJlc29sdXRpb25zIGlmIGNvbnRhaW5lZCBpbiBhIGNvbnRhaW5lclxuICB9XG5cbiAgLmNvbnRhaW5lciB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICB9XG5cbiAgQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIHtcbiAgICBwYWRkaW5nLXRvcDogICAgKCRqdW1ib3Ryb24tcGFkZGluZyAqIDEuNik7XG4gICAgcGFkZGluZy1ib3R0b206ICgkanVtYm90cm9uLXBhZGRpbmcgKiAxLjYpO1xuXG4gICAgLmNvbnRhaW5lciAmLFxuICAgIC5jb250YWluZXItZmx1aWQgJiB7XG4gICAgICBwYWRkaW5nLWxlZnQ6ICAoJGp1bWJvdHJvbi1wYWRkaW5nICogMik7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAoJGp1bWJvdHJvbi1wYWRkaW5nICogMik7XG4gICAgfVxuXG4gICAgaDEsXG4gICAgLmgxIHtcbiAgICAgIGZvbnQtc2l6ZTogJGp1bWJvdHJvbi1oZWFkaW5nLWZvbnQtc2l6ZTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vXG4vLyBUaHVtYm5haWxzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIE1peGluIGFuZCBhZGp1c3QgdGhlIHJlZ3VsYXIgaW1hZ2UgY2xhc3Ncbi50aHVtYm5haWwge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogJHRodW1ibmFpbC1wYWRkaW5nO1xuICBtYXJnaW4tYm90dG9tOiAkbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtYmFzZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHRodW1ibmFpbC1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgJHRodW1ibmFpbC1ib3JkZXI7XG4gIGJvcmRlci1yYWRpdXM6ICR0aHVtYm5haWwtYm9yZGVyLXJhZGl1cztcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbihib3JkZXIgLjJzIGVhc2UtaW4tb3V0KTtcblxuICA+IGltZyxcbiAgYSA+IGltZyB7XG4gICAgQGluY2x1ZGUgaW1nLXJlc3BvbnNpdmU7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICB9XG5cbiAgLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIGEmOmhvdmVyLCBhJjpmb2N1cywgYSYuYWN0aXZlIHRvIGEudGh1bWJuYWlsOmhvdmVyLCBhLnRodW1ibmFpbDpmb2N1cywgYS50aHVtYm5haWwuYWN0aXZlXG5cbiAgLy8gSW1hZ2UgY2FwdGlvbnNcbiAgLmNhcHRpb24ge1xuICAgIHBhZGRpbmc6ICR0aHVtYm5haWwtY2FwdGlvbi1wYWRkaW5nO1xuICAgIGNvbG9yOiAkdGh1bWJuYWlsLWNhcHRpb24tY29sb3I7XG4gIH1cbn1cblxuLy8gQWRkIGEgaG92ZXIgc3RhdGUgZm9yIGxpbmtlZCB2ZXJzaW9ucyBvbmx5XG5hLnRodW1ibmFpbDpob3ZlcixcbmEudGh1bWJuYWlsOmZvY3VzLFxuYS50aHVtYm5haWwuYWN0aXZlIHtcbiAgYm9yZGVyLWNvbG9yOiAkbGluay1jb2xvcjtcbn1cbiIsIi8vXG4vLyBBbGVydHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBzdHlsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLmFsZXJ0IHtcbiAgcGFkZGluZzogJGFsZXJ0LXBhZGRpbmc7XG4gIG1hcmdpbi1ib3R0b206ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yYWRpdXM6ICRhbGVydC1ib3JkZXItcmFkaXVzO1xuXG4gIC8vIEhlYWRpbmdzIGZvciBsYXJnZXIgYWxlcnRzXG4gIGg0IHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIC8vIFNwZWNpZmllZCBmb3IgdGhlIGg0IHRvIHByZXZlbnQgY29uZmxpY3RzIG9mIGNoYW5naW5nICRoZWFkaW5ncy1jb2xvclxuICAgIGNvbG9yOiBpbmhlcml0O1xuICB9XG5cbiAgLy8gUHJvdmlkZSBjbGFzcyBmb3IgbGlua3MgdGhhdCBtYXRjaCBhbGVydHNcbiAgLmFsZXJ0LWxpbmsge1xuICAgIGZvbnQtd2VpZ2h0OiAkYWxlcnQtbGluay1mb250LXdlaWdodDtcbiAgfVxuXG4gIC8vIEltcHJvdmUgYWxpZ25tZW50IGFuZCBzcGFjaW5nIG9mIGlubmVyIGNvbnRlbnRcbiAgPiBwLFxuICA+IHVsIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICB9XG5cbiAgPiBwICsgcCB7XG4gICAgbWFyZ2luLXRvcDogNXB4O1xuICB9XG59XG5cbi8vIERpc21pc3NpYmxlIGFsZXJ0c1xuLy9cbi8vIEV4cGFuZCB0aGUgcmlnaHQgcGFkZGluZyBhbmQgYWNjb3VudCBmb3IgdGhlIGNsb3NlIGJ1dHRvbidzIHBvc2l0aW9uaW5nLlxuXG4uYWxlcnQtZGlzbWlzc2FibGUsIC8vIFRoZSBtaXNzcGVsbGVkIC5hbGVydC1kaXNtaXNzYWJsZSB3YXMgZGVwcmVjYXRlZCBpbiAzLjIuMC5cbi5hbGVydC1kaXNtaXNzaWJsZSB7XG4gIHBhZGRpbmctcmlnaHQ6ICgkYWxlcnQtcGFkZGluZyArIDIwKTtcblxuICAvLyBBZGp1c3QgY2xvc2UgbGluayBwb3NpdGlvblxuICAuY2xvc2Uge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC0ycHg7XG4gICAgcmlnaHQ6IC0yMXB4O1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICB9XG59XG5cbi8vIEFsdGVybmF0ZSBzdHlsZXNcbi8vXG4vLyBHZW5lcmF0ZSBjb250ZXh0dWFsIG1vZGlmaWVyIGNsYXNzZXMgZm9yIGNvbG9yaXppbmcgdGhlIGFsZXJ0LlxuXG4uYWxlcnQtc3VjY2VzcyB7XG4gIEBpbmNsdWRlIGFsZXJ0LXZhcmlhbnQoJGFsZXJ0LXN1Y2Nlc3MtYmcsICRhbGVydC1zdWNjZXNzLWJvcmRlciwgJGFsZXJ0LXN1Y2Nlc3MtdGV4dCk7XG59XG5cbi5hbGVydC1pbmZvIHtcbiAgQGluY2x1ZGUgYWxlcnQtdmFyaWFudCgkYWxlcnQtaW5mby1iZywgJGFsZXJ0LWluZm8tYm9yZGVyLCAkYWxlcnQtaW5mby10ZXh0KTtcbn1cblxuLmFsZXJ0LXdhcm5pbmcge1xuICBAaW5jbHVkZSBhbGVydC12YXJpYW50KCRhbGVydC13YXJuaW5nLWJnLCAkYWxlcnQtd2FybmluZy1ib3JkZXIsICRhbGVydC13YXJuaW5nLXRleHQpO1xufVxuXG4uYWxlcnQtZGFuZ2VyIHtcbiAgQGluY2x1ZGUgYWxlcnQtdmFyaWFudCgkYWxlcnQtZGFuZ2VyLWJnLCAkYWxlcnQtZGFuZ2VyLWJvcmRlciwgJGFsZXJ0LWRhbmdlci10ZXh0KTtcbn1cbiIsIi8vIEFsZXJ0c1xuXG5AbWl4aW4gYWxlcnQtdmFyaWFudCgkYmFja2dyb3VuZCwgJGJvcmRlciwgJHRleHQtY29sb3IpIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG4gIGJvcmRlci1jb2xvcjogJGJvcmRlcjtcbiAgY29sb3I6ICR0ZXh0LWNvbG9yO1xuXG4gIGhyIHtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBkYXJrZW4oJGJvcmRlciwgNSUpO1xuICB9XG4gIC5hbGVydC1saW5rIHtcbiAgICBjb2xvcjogZGFya2VuKCR0ZXh0LWNvbG9yLCAxMCUpO1xuICB9XG59XG4iLCIvL1xuLy8gUHJvZ3Jlc3MgYmFyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4vLyBCYXIgYW5pbWF0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBXZWJLaXRcbkAtd2Via2l0LWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlcyB7XG4gIGZyb20gIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogNDBweCAwOyB9XG4gIHRvICAgIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9XG59XG5cbi8vIFNwZWMgYW5kIElFMTArXG5Aa2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHtcbiAgZnJvbSAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA0MHB4IDA7IH1cbiAgdG8gICAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH1cbn1cblxuXG4vLyBCYXIgaXRzZWxmXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE91dGVyIGNvbnRhaW5lclxuLnByb2dyZXNzIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgaGVpZ2h0OiAkbGluZS1oZWlnaHQtY29tcHV0ZWQ7XG4gIG1hcmdpbi1ib3R0b206ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHByb2dyZXNzLWJnO1xuICBib3JkZXItcmFkaXVzOiAkcHJvZ3Jlc3MtYm9yZGVyLXJhZGl1cztcbiAgQGluY2x1ZGUgYm94LXNoYWRvdyhpbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwuMSkpO1xufVxuXG4vLyBCYXIgb2YgcHJvZ3Jlc3Ncbi5wcm9ncmVzcy1iYXIge1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcbiAgY29sb3I6ICRwcm9ncmVzcy1iYXItY29sb3I7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHByb2dyZXNzLWJhci1iZztcbiAgQGluY2x1ZGUgYm94LXNoYWRvdyhpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLC4xNSkpO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKHdpZHRoIC42cyBlYXNlKTtcbn1cblxuLy8gU3RyaXBlZCBiYXJzXG4vL1xuLy8gYC5wcm9ncmVzcy1zdHJpcGVkIC5wcm9ncmVzcy1iYXJgIGlzIGRlcHJlY2F0ZWQgYXMgb2YgdjMuMi4wIGluIGZhdm9yIG9mIHRoZVxuLy8gYC5wcm9ncmVzcy1iYXItc3RyaXBlZGAgY2xhc3MsIHdoaWNoIHlvdSBqdXN0IGFkZCB0byBhbiBleGlzdGluZ1xuLy8gYC5wcm9ncmVzcy1iYXJgLlxuLnByb2dyZXNzLXN0cmlwZWQgLnByb2dyZXNzLWJhcixcbi5wcm9ncmVzcy1iYXItc3RyaXBlZCB7XG4gIEBpbmNsdWRlIGdyYWRpZW50LXN0cmlwZWQ7XG4gIGJhY2tncm91bmQtc2l6ZTogNDBweCA0MHB4O1xufVxuXG4vLyBDYWxsIGFuaW1hdGlvbiBmb3IgdGhlIGFjdGl2ZSBvbmVcbi8vXG4vLyBgLnByb2dyZXNzLmFjdGl2ZSAucHJvZ3Jlc3MtYmFyYCBpcyBkZXByZWNhdGVkIGFzIG9mIHYzLjIuMCBpbiBmYXZvciBvZiB0aGVcbi8vIGAucHJvZ3Jlc3MtYmFyLmFjdGl2ZWAgYXBwcm9hY2guXG4ucHJvZ3Jlc3MuYWN0aXZlIC5wcm9ncmVzcy1iYXIsXG4ucHJvZ3Jlc3MtYmFyLmFjdGl2ZSB7XG4gIEBpbmNsdWRlIGFuaW1hdGlvbihwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGUpO1xufVxuXG5cbi8vIFZhcmlhdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLnByb2dyZXNzLWJhci1zdWNjZXNzIHtcbiAgQGluY2x1ZGUgcHJvZ3Jlc3MtYmFyLXZhcmlhbnQoJHByb2dyZXNzLWJhci1zdWNjZXNzLWJnKTtcbn1cblxuLnByb2dyZXNzLWJhci1pbmZvIHtcbiAgQGluY2x1ZGUgcHJvZ3Jlc3MtYmFyLXZhcmlhbnQoJHByb2dyZXNzLWJhci1pbmZvLWJnKTtcbn1cblxuLnByb2dyZXNzLWJhci13YXJuaW5nIHtcbiAgQGluY2x1ZGUgcHJvZ3Jlc3MtYmFyLXZhcmlhbnQoJHByb2dyZXNzLWJhci13YXJuaW5nLWJnKTtcbn1cblxuLnByb2dyZXNzLWJhci1kYW5nZXIge1xuICBAaW5jbHVkZSBwcm9ncmVzcy1iYXItdmFyaWFudCgkcHJvZ3Jlc3MtYmFyLWRhbmdlci1iZyk7XG59XG4iLCIvLyBHcmFkaWVudHNcblxuXG5cbi8vIEhvcml6b250YWwgZ3JhZGllbnQsIGZyb20gbGVmdCB0byByaWdodFxuLy9cbi8vIENyZWF0ZXMgdHdvIGNvbG9yIHN0b3BzLCBzdGFydCBhbmQgZW5kLCBieSBzcGVjaWZ5aW5nIGEgY29sb3IgYW5kIHBvc2l0aW9uIGZvciBlYWNoIGNvbG9yIHN0b3AuXG4vLyBDb2xvciBzdG9wcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBJRTkgYW5kIGJlbG93LlxuQG1peGluIGdyYWRpZW50LWhvcml6b250YWwoJHN0YXJ0LWNvbG9yOiAjNTU1LCAkZW5kLWNvbG9yOiAjMzMzLCAkc3RhcnQtcGVyY2VudDogMCUsICRlbmQtcGVyY2VudDogMTAwJSkge1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChsZWZ0LCAkc3RhcnQtY29sb3IgJHN0YXJ0LXBlcmNlbnQsICRlbmQtY29sb3IgJGVuZC1wZXJjZW50KTsgLy8gU2FmYXJpIDUuMS02LCBDaHJvbWUgMTArXG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChsZWZ0LCAkc3RhcnQtY29sb3IgJHN0YXJ0LXBlcmNlbnQsICRlbmQtY29sb3IgJGVuZC1wZXJjZW50KTsgLy8gT3BlcmEgMTJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAkc3RhcnQtY29sb3IgJHN0YXJ0LXBlcmNlbnQsICRlbmQtY29sb3IgJGVuZC1wZXJjZW50KTsgLy8gU3RhbmRhcmQsIElFMTAsIEZpcmVmb3ggMTYrLCBPcGVyYSAxMi4xMCssIFNhZmFyaSA3KywgQ2hyb21lIDI2K1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyN7aWUtaGV4LXN0cigkc3RhcnQtY29sb3IpfScsIGVuZENvbG9yc3RyPScje2llLWhleC1zdHIoJGVuZC1jb2xvcil9JywgR3JhZGllbnRUeXBlPTEpOyAvLyBJRTkgYW5kIGRvd25cbn1cblxuLy8gVmVydGljYWwgZ3JhZGllbnQsIGZyb20gdG9wIHRvIGJvdHRvbVxuLy9cbi8vIENyZWF0ZXMgdHdvIGNvbG9yIHN0b3BzLCBzdGFydCBhbmQgZW5kLCBieSBzcGVjaWZ5aW5nIGEgY29sb3IgYW5kIHBvc2l0aW9uIGZvciBlYWNoIGNvbG9yIHN0b3AuXG4vLyBDb2xvciBzdG9wcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBJRTkgYW5kIGJlbG93LlxuQG1peGluIGdyYWRpZW50LXZlcnRpY2FsKCRzdGFydC1jb2xvcjogIzU1NSwgJGVuZC1jb2xvcjogIzMzMywgJHN0YXJ0LXBlcmNlbnQ6IDAlLCAkZW5kLXBlcmNlbnQ6IDEwMCUpIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAkc3RhcnQtY29sb3IgJHN0YXJ0LXBlcmNlbnQsICRlbmQtY29sb3IgJGVuZC1wZXJjZW50KTsgIC8vIFNhZmFyaSA1LjEtNiwgQ2hyb21lIDEwK1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAkc3RhcnQtY29sb3IgJHN0YXJ0LXBlcmNlbnQsICRlbmQtY29sb3IgJGVuZC1wZXJjZW50KTsgIC8vIE9wZXJhIDEyXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICRzdGFydC1jb2xvciAkc3RhcnQtcGVyY2VudCwgJGVuZC1jb2xvciAkZW5kLXBlcmNlbnQpOyAvLyBTdGFuZGFyZCwgSUUxMCwgRmlyZWZveCAxNissIE9wZXJhIDEyLjEwKywgU2FmYXJpIDcrLCBDaHJvbWUgMjYrXG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI3tpZS1oZXgtc3RyKCRzdGFydC1jb2xvcil9JywgZW5kQ29sb3JzdHI9JyN7aWUtaGV4LXN0cigkZW5kLWNvbG9yKX0nLCBHcmFkaWVudFR5cGU9MCk7IC8vIElFOSBhbmQgZG93blxufVxuXG5AbWl4aW4gZ3JhZGllbnQtZGlyZWN0aW9uYWwoJHN0YXJ0LWNvbG9yOiAjNTU1LCAkZW5kLWNvbG9yOiAjMzMzLCAkZGVnOiA0NWRlZykge1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KCRkZWcsICRzdGFydC1jb2xvciwgJGVuZC1jb2xvcik7IC8vIFNhZmFyaSA1LjEtNiwgQ2hyb21lIDEwK1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoJGRlZywgJHN0YXJ0LWNvbG9yLCAkZW5kLWNvbG9yKTsgLy8gT3BlcmEgMTJcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KCRkZWcsICRzdGFydC1jb2xvciwgJGVuZC1jb2xvcik7IC8vIFN0YW5kYXJkLCBJRTEwLCBGaXJlZm94IDE2KywgT3BlcmEgMTIuMTArLCBTYWZhcmkgNyssIENocm9tZSAyNitcbn1cbkBtaXhpbiBncmFkaWVudC1ob3Jpem9udGFsLXRocmVlLWNvbG9ycygkc3RhcnQtY29sb3I6ICMwMGIzZWUsICRtaWQtY29sb3I6ICM3YTQzYjYsICRjb2xvci1zdG9wOiA1MCUsICRlbmQtY29sb3I6ICNjMzMyNWYpIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCwgJHN0YXJ0LWNvbG9yLCAkbWlkLWNvbG9yICRjb2xvci1zdG9wLCAkZW5kLWNvbG9yKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KGxlZnQsICRzdGFydC1jb2xvciwgJG1pZC1jb2xvciAkY29sb3Itc3RvcCwgJGVuZC1jb2xvcik7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgJHN0YXJ0LWNvbG9yLCAkbWlkLWNvbG9yICRjb2xvci1zdG9wLCAkZW5kLWNvbG9yKTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI3tpZS1oZXgtc3RyKCRzdGFydC1jb2xvcil9JywgZW5kQ29sb3JzdHI9JyN7aWUtaGV4LXN0cigkZW5kLWNvbG9yKX0nLCBHcmFkaWVudFR5cGU9MSk7IC8vIElFOSBhbmQgZG93biwgZ2V0cyBubyBjb2xvci1zdG9wIGF0IGFsbCBmb3IgcHJvcGVyIGZhbGxiYWNrXG59XG5AbWl4aW4gZ3JhZGllbnQtdmVydGljYWwtdGhyZWUtY29sb3JzKCRzdGFydC1jb2xvcjogIzAwYjNlZSwgJG1pZC1jb2xvcjogIzdhNDNiNiwgJGNvbG9yLXN0b3A6IDUwJSwgJGVuZC1jb2xvcjogI2MzMzI1Zikge1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCgkc3RhcnQtY29sb3IsICRtaWQtY29sb3IgJGNvbG9yLXN0b3AsICRlbmQtY29sb3IpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoJHN0YXJ0LWNvbG9yLCAkbWlkLWNvbG9yICRjb2xvci1zdG9wLCAkZW5kLWNvbG9yKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KCRzdGFydC1jb2xvciwgJG1pZC1jb2xvciAkY29sb3Itc3RvcCwgJGVuZC1jb2xvcik7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyN7aWUtaGV4LXN0cigkc3RhcnQtY29sb3IpfScsIGVuZENvbG9yc3RyPScje2llLWhleC1zdHIoJGVuZC1jb2xvcil9JywgR3JhZGllbnRUeXBlPTApOyAvLyBJRTkgYW5kIGRvd24sIGdldHMgbm8gY29sb3Itc3RvcCBhdCBhbGwgZm9yIHByb3BlciBmYWxsYmFja1xufVxuQG1peGluIGdyYWRpZW50LXJhZGlhbCgkaW5uZXItY29sb3I6ICM1NTUsICRvdXRlci1jb2xvcjogIzMzMykge1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LXJhZGlhbC1ncmFkaWVudChjaXJjbGUsICRpbm5lci1jb2xvciwgJG91dGVyLWNvbG9yKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSwgJGlubmVyLWNvbG9yLCAkb3V0ZXItY29sb3IpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xufVxuQG1peGluIGdyYWRpZW50LXN0cmlwZWQoJGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC4xNSksICRhbmdsZTogNDVkZWcpIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoJGFuZ2xlLCAkY29sb3IgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgJGNvbG9yIDUwJSwgJGNvbG9yIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCgkYW5nbGUsICRjb2xvciAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCAkY29sb3IgNTAlLCAkY29sb3IgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KCRhbmdsZSwgJGNvbG9yIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsICRjb2xvciA1MCUsICRjb2xvciA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xufVxuIiwiLy8gUHJvZ3Jlc3MgYmFyc1xuXG5AbWl4aW4gcHJvZ3Jlc3MtYmFyLXZhcmlhbnQoJGNvbG9yKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICRjb2xvcjtcblxuICAvLyBEZXByZWNhdGVkIHBhcmVudCBjbGFzcyByZXF1aXJlbWVudCBhcyBvZiB2My4yLjBcbiAgLnByb2dyZXNzLXN0cmlwZWQgJiB7XG4gICAgQGluY2x1ZGUgZ3JhZGllbnQtc3RyaXBlZDtcbiAgfVxufVxuIiwiLm1lZGlhIHtcbiAgLy8gUHJvcGVyIHNwYWNpbmcgYmV0d2VlbiBpbnN0YW5jZXMgb2YgLm1lZGlhXG4gIG1hcmdpbi10b3A6IDE1cHg7XG5cbiAgJjpmaXJzdC1jaGlsZCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxufVxuXG4ubWVkaWEsXG4ubWVkaWEtYm9keSB7XG4gIHpvb206IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5tZWRpYS1ib2R5IHtcbiAgd2lkdGg6IDEwMDAwcHg7XG59XG5cbi5tZWRpYS1vYmplY3Qge1xuICBkaXNwbGF5OiBibG9jaztcblxuICAvLyBGaXggY29sbGFwc2UgaW4gd2Via2l0IGZyb20gbWF4LXdpZHRoOiAxMDAlIGFuZCBkaXNwbGF5OiB0YWJsZS1jZWxsLlxuICAmLmltZy10aHVtYm5haWwge1xuICAgIG1heC13aWR0aDogbm9uZTtcbiAgfVxufVxuXG4ubWVkaWEtcmlnaHQsXG4ubWVkaWEgPiAucHVsbC1yaWdodCB7XG4gIHBhZGRpbmctbGVmdDogMTBweDtcbn1cblxuLm1lZGlhLWxlZnQsXG4ubWVkaWEgPiAucHVsbC1sZWZ0IHtcbiAgcGFkZGluZy1yaWdodDogMTBweDtcbn1cblxuLm1lZGlhLWxlZnQsXG4ubWVkaWEtcmlnaHQsXG4ubWVkaWEtYm9keSB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG5cbi5tZWRpYS1taWRkbGUge1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4ubWVkaWEtYm90dG9tIHtcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbn1cblxuLy8gUmVzZXQgbWFyZ2lucyBvbiBoZWFkaW5ncyBmb3IgdGlnaHRlciBkZWZhdWx0IHNwYWNpbmdcbi5tZWRpYS1oZWFkaW5nIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xufVxuXG4vLyBNZWRpYSBsaXN0IHZhcmlhdGlvblxuLy9cbi8vIFVuZG8gZGVmYXVsdCB1bC9vbCBzdHlsZXNcbi5tZWRpYS1saXN0IHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuIiwiLy9cbi8vIExpc3QgZ3JvdXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbi8vIEJhc2UgY2xhc3Ncbi8vXG4vLyBFYXNpbHkgdXNhYmxlIG9uIDx1bD4sIDxvbD4sIG9yIDxkaXY+LlxuXG4ubGlzdC1ncm91cCB7XG4gIC8vIE5vIG5lZWQgdG8gc2V0IGxpc3Qtc3R5bGU6IG5vbmU7IHNpbmNlIC5saXN0LWdyb3VwLWl0ZW0gaXMgYmxvY2sgbGV2ZWxcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgcGFkZGluZy1sZWZ0OiAwOyAvLyByZXNldCBwYWRkaW5nIGJlY2F1c2UgdWwgYW5kIG9sXG59XG5cblxuLy8gSW5kaXZpZHVhbCBsaXN0IGl0ZW1zXG4vL1xuLy8gVXNlIG9uIGBsaWBzIG9yIGBkaXZgcyB3aXRoaW4gdGhlIGAubGlzdC1ncm91cGAgcGFyZW50LlxuXG4ubGlzdC1ncm91cC1pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMTBweCAxNXB4O1xuICAvLyBQbGFjZSB0aGUgYm9yZGVyIG9uIHRoZSBsaXN0IGl0ZW1zIGFuZCBuZWdhdGl2ZSBtYXJnaW4gdXAgZm9yIGJldHRlciBzdHlsaW5nXG4gIG1hcmdpbi1ib3R0b206IC0xcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICRsaXN0LWdyb3VwLWJnO1xuICBib3JkZXI6IDFweCBzb2xpZCAkbGlzdC1ncm91cC1ib3JkZXI7XG5cbiAgLy8gUm91bmQgdGhlIGZpcnN0IGFuZCBsYXN0IGl0ZW1zXG4gICY6Zmlyc3QtY2hpbGQge1xuICAgIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKCRsaXN0LWdyb3VwLWJvcmRlci1yYWRpdXMpO1xuICB9XG4gICY6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBAaW5jbHVkZSBib3JkZXItYm90dG9tLXJhZGl1cygkbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzKTtcbiAgfVxufVxuXG5cbi8vIEludGVyYWN0aXZlIGxpc3QgaXRlbXNcbi8vXG4vLyBVc2UgYW5jaG9yIG9yIGJ1dHRvbiBlbGVtZW50cyBpbnN0ZWFkIG9mIGBsaWBzIG9yIGBkaXZgcyB0byBjcmVhdGUgaW50ZXJhY3RpdmUgaXRlbXMuXG4vLyBJbmNsdWRlcyBhbiBleHRyYSBgLmFjdGl2ZWAgbW9kaWZpZXIgY2xhc3MgZm9yIHNob3dpbmcgc2VsZWN0ZWQgaXRlbXMuXG5cbmEubGlzdC1ncm91cC1pdGVtLFxuYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbSB7XG4gIGNvbG9yOiAkbGlzdC1ncm91cC1saW5rLWNvbG9yO1xuXG4gIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gICAgY29sb3I6ICRsaXN0LWdyb3VwLWxpbmstaGVhZGluZy1jb2xvcjtcbiAgfVxuXG4gIC8vIEhvdmVyIHN0YXRlXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogJGxpc3QtZ3JvdXAtbGluay1ob3Zlci1jb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbGlzdC1ncm91cC1ob3Zlci1iZztcbiAgfVxufVxuXG5idXR0b24ubGlzdC1ncm91cC1pdGVtIHtcbiAgd2lkdGg6IDEwMCU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi5saXN0LWdyb3VwLWl0ZW0ge1xuICAvLyBEaXNhYmxlZCBzdGF0ZVxuICAmLmRpc2FibGVkLFxuICAmLmRpc2FibGVkOmhvdmVyLFxuICAmLmRpc2FibGVkOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbGlzdC1ncm91cC1kaXNhYmxlZC1iZztcbiAgICBjb2xvcjogJGxpc3QtZ3JvdXAtZGlzYWJsZWQtY29sb3I7XG4gICAgY3Vyc29yOiAkY3Vyc29yLWRpc2FibGVkO1xuXG4gICAgLy8gRm9yY2UgY29sb3IgdG8gaW5oZXJpdCBmb3IgY3VzdG9tIGNvbnRlbnRcbiAgICAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuICAgIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7XG4gICAgICBjb2xvcjogJGxpc3QtZ3JvdXAtZGlzYWJsZWQtdGV4dC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAvLyBBY3RpdmUgY2xhc3Mgb24gaXRlbSBpdHNlbGYsIG5vdCBwYXJlbnRcbiAgJi5hY3RpdmUsXG4gICYuYWN0aXZlOmhvdmVyLFxuICAmLmFjdGl2ZTpmb2N1cyB7XG4gICAgei1pbmRleDogMjsgLy8gUGxhY2UgYWN0aXZlIGl0ZW1zIGFib3ZlIHRoZWlyIHNpYmxpbmdzIGZvciBwcm9wZXIgYm9yZGVyIHN0eWxpbmdcbiAgICBjb2xvcjogJGxpc3QtZ3JvdXAtYWN0aXZlLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRsaXN0LWdyb3VwLWFjdGl2ZS1iZztcbiAgICBib3JkZXItY29sb3I6ICRsaXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXI7XG5cbiAgICAvLyBGb3JjZSBjb2xvciB0byBpbmhlcml0IGZvciBjdXN0b20gY29udGVudFxuICAgIC5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyxcbiAgICAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiBzbWFsbCxcbiAgICAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcgPiAuc21hbGwge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuICAgIC5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7XG4gICAgICBjb2xvcjogJGxpc3QtZ3JvdXAtYWN0aXZlLXRleHQtY29sb3I7XG4gICAgfVxuICB9XG59XG5cblxuLy8gQ29udGV4dHVhbCB2YXJpYW50c1xuLy9cbi8vIEFkZCBtb2RpZmllciBjbGFzc2VzIHRvIGNoYW5nZSB0ZXh0IGFuZCBiYWNrZ3JvdW5kIGNvbG9yIG9uIGluZGl2aWR1YWwgaXRlbXMuXG4vLyBPcmdhbml6YXRpb25hbGx5LCB0aGlzIG11c3QgY29tZSBhZnRlciB0aGUgYDpob3ZlcmAgc3RhdGVzLlxuXG5AaW5jbHVkZSBsaXN0LWdyb3VwLWl0ZW0tdmFyaWFudChzdWNjZXNzLCAkc3RhdGUtc3VjY2Vzcy1iZywgJHN0YXRlLXN1Y2Nlc3MtdGV4dCk7XG5AaW5jbHVkZSBsaXN0LWdyb3VwLWl0ZW0tdmFyaWFudChpbmZvLCAkc3RhdGUtaW5mby1iZywgJHN0YXRlLWluZm8tdGV4dCk7XG5AaW5jbHVkZSBsaXN0LWdyb3VwLWl0ZW0tdmFyaWFudCh3YXJuaW5nLCAkc3RhdGUtd2FybmluZy1iZywgJHN0YXRlLXdhcm5pbmctdGV4dCk7XG5AaW5jbHVkZSBsaXN0LWdyb3VwLWl0ZW0tdmFyaWFudChkYW5nZXIsICRzdGF0ZS1kYW5nZXItYmcsICRzdGF0ZS1kYW5nZXItdGV4dCk7XG5cblxuLy8gQ3VzdG9tIGNvbnRlbnQgb3B0aW9uc1xuLy9cbi8vIEV4dHJhIGNsYXNzZXMgZm9yIGNyZWF0aW5nIHdlbGwtZm9ybWF0dGVkIGNvbnRlbnQgd2l0aGluIGAubGlzdC1ncm91cC1pdGVtYHMuXG5cbi5saXN0LWdyb3VwLWl0ZW0taGVhZGluZyB7XG4gIG1hcmdpbi10b3A6IDA7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbn1cbi5saXN0LWdyb3VwLWl0ZW0tdGV4dCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjM7XG59XG4iLCIvLyBMaXN0IEdyb3Vwc1xuXG5AbWl4aW4gbGlzdC1ncm91cC1pdGVtLXZhcmlhbnQoJHN0YXRlLCAkYmFja2dyb3VuZCwgJGNvbG9yKSB7XG4gIC5saXN0LWdyb3VwLWl0ZW0tI3skc3RhdGV9IHtcbiAgICBjb2xvcjogJGNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kO1xuXG4gICAgLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIGEmLCBidXR0b24mIHRvIGEubGlzdC1ncm91cC1pdGVtLSN7JHN0YXRlfSwgYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS0jeyRzdGF0ZX1cbiAgfVxuXG4gIGEubGlzdC1ncm91cC1pdGVtLSN7JHN0YXRlfSxcbiAgYnV0dG9uLmxpc3QtZ3JvdXAtaXRlbS0jeyRzdGF0ZX0ge1xuICAgIGNvbG9yOiAkY29sb3I7XG5cbiAgICAubGlzdC1ncm91cC1pdGVtLWhlYWRpbmcge1xuICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgfVxuXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAkY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGJhY2tncm91bmQsIDUlKTtcbiAgICB9XG4gICAgJi5hY3RpdmUsXG4gICAgJi5hY3RpdmU6aG92ZXIsXG4gICAgJi5hY3RpdmU6Zm9jdXMge1xuICAgICAgY29sb3I6ICNmZmY7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG4gICAgICBib3JkZXItY29sb3I6ICRjb2xvcjtcbiAgICB9XG4gIH1cbn1cbiIsIi8vXG4vLyBQYW5lbHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBjbGFzc1xuLnBhbmVsIHtcbiAgbWFyZ2luLWJvdHRvbTogJGxpbmUtaGVpZ2h0LWNvbXB1dGVkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkcGFuZWwtYmc7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmFkaXVzOiAkcGFuZWwtYm9yZGVyLXJhZGl1cztcbiAgQGluY2x1ZGUgYm94LXNoYWRvdygwIDFweCAxcHggcmdiYSgwLDAsMCwuMDUpKTtcbn1cblxuLy8gUGFuZWwgY29udGVudHNcbi5wYW5lbC1ib2R5IHtcbiAgcGFkZGluZzogJHBhbmVsLWJvZHktcGFkZGluZztcbiAgQGluY2x1ZGUgY2xlYXJmaXg7XG59XG5cbi8vIE9wdGlvbmFsIGhlYWRpbmdcbi5wYW5lbC1oZWFkaW5nIHtcbiAgcGFkZGluZzogJHBhbmVsLWhlYWRpbmctcGFkZGluZztcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBAaW5jbHVkZSBib3JkZXItdG9wLXJhZGl1cygoJHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKSk7XG5cbiAgPiAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gIH1cbn1cblxuLy8gV2l0aGluIGhlYWRpbmcsIHN0cmlwIGFueSBgaCpgIHRhZyBvZiBpdHMgZGVmYXVsdCBtYXJnaW5zIGZvciBzcGFjaW5nLlxuLnBhbmVsLXRpdGxlIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgZm9udC1zaXplOiBjZWlsKCgkZm9udC1zaXplLWJhc2UgKiAxLjEyNSkpO1xuICBjb2xvcjogaW5oZXJpdDtcblxuICA+IGEsXG4gID4gc21hbGwsXG4gID4gLnNtYWxsLFxuICA+IHNtYWxsID4gYSxcbiAgPiAuc21hbGwgPiBhIHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgfVxufVxuXG4vLyBPcHRpb25hbCBmb290ZXIgKHN0YXlzIGdyYXkgaW4gZXZlcnkgbW9kaWZpZXIgY2xhc3MpXG4ucGFuZWwtZm9vdGVyIHtcbiAgcGFkZGluZzogJHBhbmVsLWZvb3Rlci1wYWRkaW5nO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkcGFuZWwtZm9vdGVyLWJnO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgJHBhbmVsLWlubmVyLWJvcmRlcjtcbiAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXMoKCRwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSkpO1xufVxuXG5cbi8vIExpc3QgZ3JvdXBzIGluIHBhbmVsc1xuLy9cbi8vIEJ5IGRlZmF1bHQsIHNwYWNlIG91dCBsaXN0IGdyb3VwIGNvbnRlbnQgZnJvbSBwYW5lbCBoZWFkaW5ncyB0byBhY2NvdW50IGZvclxuLy8gYW55IGtpbmQgb2YgY3VzdG9tIGNvbnRlbnQgYmV0d2VlbiB0aGUgdHdvLlxuXG4ucGFuZWwge1xuICA+IC5saXN0LWdyb3VwLFxuICA+IC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgLmxpc3QtZ3JvdXAtaXRlbSB7XG4gICAgICBib3JkZXItd2lkdGg6IDFweCAwO1xuICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICB9XG5cbiAgICAvLyBBZGQgYm9yZGVyIHRvcCByYWRpdXMgZm9yIGZpcnN0IG9uZVxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgLmxpc3QtZ3JvdXAtaXRlbTpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3A6IDA7XG4gICAgICAgIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKCgkcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgYm9yZGVyIGJvdHRvbSByYWRpdXMgZm9yIGxhc3Qgb25lXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIC5saXN0LWdyb3VwLWl0ZW06bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgIEBpbmNsdWRlIGJvcmRlci1ib3R0b20tcmFkaXVzKCgkcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgPiAucGFuZWwtaGVhZGluZyArIC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwIHtcbiAgICAubGlzdC1ncm91cC1pdGVtOmZpcnN0LWNoaWxkIHtcbiAgICAgIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKDApO1xuICAgIH1cbiAgfVxufVxuLy8gQ29sbGFwc2Ugc3BhY2UgYmV0d2VlbiB3aGVuIHRoZXJlJ3Mgbm8gYWRkaXRpb25hbCBjb250ZW50LlxuLnBhbmVsLWhlYWRpbmcgKyAubGlzdC1ncm91cCB7XG4gIC5saXN0LWdyb3VwLWl0ZW06Zmlyc3QtY2hpbGQge1xuICAgIGJvcmRlci10b3Atd2lkdGg6IDA7XG4gIH1cbn1cbi5saXN0LWdyb3VwICsgLnBhbmVsLWZvb3RlciB7XG4gIGJvcmRlci10b3Atd2lkdGg6IDA7XG59XG5cbi8vIFRhYmxlcyBpbiBwYW5lbHNcbi8vXG4vLyBQbGFjZSBhIG5vbi1ib3JkZXJlZCBgLnRhYmxlYCB3aXRoaW4gYSBwYW5lbCAobm90IHdpdGhpbiBhIGAucGFuZWwtYm9keWApIGFuZFxuLy8gd2F0Y2ggaXQgZ28gZnVsbCB3aWR0aC5cblxuLnBhbmVsIHtcbiAgPiAudGFibGUsXG4gID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUsXG4gID4gLnBhbmVsLWNvbGxhcHNlID4gLnRhYmxlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gICAgY2FwdGlvbiB7XG4gICAgICBwYWRkaW5nLWxlZnQ6ICRwYW5lbC1ib2R5LXBhZGRpbmc7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkcGFuZWwtYm9keS1wYWRkaW5nO1xuICAgIH1cbiAgfVxuICAvLyBBZGQgYm9yZGVyIHRvcCByYWRpdXMgZm9yIGZpcnN0IG9uZVxuICA+IC50YWJsZTpmaXJzdC1jaGlsZCxcbiAgPiAudGFibGUtcmVzcG9uc2l2ZTpmaXJzdC1jaGlsZCA+IC50YWJsZTpmaXJzdC1jaGlsZCB7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXRvcC1yYWRpdXMoKCRwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSkpO1xuXG4gICAgPiB0aGVhZDpmaXJzdC1jaGlsZCxcbiAgICA+IHRib2R5OmZpcnN0LWNoaWxkIHtcbiAgICAgID4gdHI6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAoJHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKTtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICgkcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpO1xuXG4gICAgICAgIHRkOmZpcnN0LWNoaWxkLFxuICAgICAgICB0aDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogKCRwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGQ6bGFzdC1jaGlsZCxcbiAgICAgICAgdGg6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICgkcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIEFkZCBib3JkZXIgYm90dG9tIHJhZGl1cyBmb3IgbGFzdCBvbmVcbiAgPiAudGFibGU6bGFzdC1jaGlsZCxcbiAgPiAudGFibGUtcmVzcG9uc2l2ZTpsYXN0LWNoaWxkID4gLnRhYmxlOmxhc3QtY2hpbGQge1xuICAgIEBpbmNsdWRlIGJvcmRlci1ib3R0b20tcmFkaXVzKCgkcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpKTtcblxuICAgID4gdGJvZHk6bGFzdC1jaGlsZCxcbiAgICA+IHRmb290Omxhc3QtY2hpbGQge1xuICAgICAgPiB0cjpsYXN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogKCRwYW5lbC1ib3JkZXItcmFkaXVzIC0gMSk7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAoJHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKTtcblxuICAgICAgICB0ZDpmaXJzdC1jaGlsZCxcbiAgICAgICAgdGg6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICgkcGFuZWwtYm9yZGVyLXJhZGl1cyAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRkOmxhc3QtY2hpbGQsXG4gICAgICAgIHRoOmxhc3QtY2hpbGQge1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAoJHBhbmVsLWJvcmRlci1yYWRpdXMgLSAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICA+IC5wYW5lbC1ib2R5ICsgLnRhYmxlLFxuICA+IC5wYW5lbC1ib2R5ICsgLnRhYmxlLXJlc3BvbnNpdmUsXG4gID4gLnRhYmxlICsgLnBhbmVsLWJvZHksXG4gID4gLnRhYmxlLXJlc3BvbnNpdmUgKyAucGFuZWwtYm9keSB7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR0YWJsZS1ib3JkZXItY29sb3I7XG4gIH1cbiAgPiAudGFibGUgPiB0Ym9keTpmaXJzdC1jaGlsZCA+IHRyOmZpcnN0LWNoaWxkIHRoLFxuICA+IC50YWJsZSA+IHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgdGQge1xuICAgIGJvcmRlci10b3A6IDA7XG4gIH1cbiAgPiAudGFibGUtYm9yZGVyZWQsXG4gID4gLnRhYmxlLXJlc3BvbnNpdmUgPiAudGFibGUtYm9yZGVyZWQge1xuICAgIGJvcmRlcjogMDtcbiAgICA+IHRoZWFkLFxuICAgID4gdGJvZHksXG4gICAgPiB0Zm9vdCB7XG4gICAgICA+IHRyIHtcbiAgICAgICAgPiB0aDpmaXJzdC1jaGlsZCxcbiAgICAgICAgPiB0ZDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgICAgIH1cbiAgICAgICAgPiB0aDpsYXN0LWNoaWxkLFxuICAgICAgICA+IHRkOmxhc3QtY2hpbGQge1xuICAgICAgICAgIGJvcmRlci1yaWdodDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICA+IHRoZWFkLFxuICAgID4gdGJvZHkge1xuICAgICAgPiB0cjpmaXJzdC1jaGlsZCB7XG4gICAgICAgID4gdGQsXG4gICAgICAgID4gdGgge1xuICAgICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgPiB0Ym9keSxcbiAgICA+IHRmb290IHtcbiAgICAgID4gdHI6bGFzdC1jaGlsZCB7XG4gICAgICAgID4gdGQsXG4gICAgICAgID4gdGgge1xuICAgICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgPiAudGFibGUtcmVzcG9uc2l2ZSB7XG4gICAgYm9yZGVyOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cbn1cblxuXG4vLyBDb2xsYXBzYWJsZSBwYW5lbHMgKGFrYSwgYWNjb3JkaW9uKVxuLy9cbi8vIFdyYXAgYSBzZXJpZXMgb2YgcGFuZWxzIGluIGAucGFuZWwtZ3JvdXBgIHRvIHR1cm4gdGhlbSBpbnRvIGFuIGFjY29yZGlvbiB3aXRoXG4vLyB0aGUgaGVscCBvZiBvdXIgY29sbGFwc2UgSmF2YVNjcmlwdCBwbHVnaW4uXG5cbi5wYW5lbC1ncm91cCB7XG4gIG1hcmdpbi1ib3R0b206ICRsaW5lLWhlaWdodC1jb21wdXRlZDtcblxuICAvLyBUaWdodGVuIHVwIG1hcmdpbiBzbyBpdCdzIG9ubHkgYmV0d2VlbiBwYW5lbHNcbiAgLnBhbmVsIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIGJvcmRlci1yYWRpdXM6ICRwYW5lbC1ib3JkZXItcmFkaXVzO1xuXG4gICAgKyAucGFuZWwge1xuICAgICAgbWFyZ2luLXRvcDogNXB4O1xuICAgIH1cbiAgfVxuXG4gIC5wYW5lbC1oZWFkaW5nIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuXG4gICAgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSxcbiAgICArIC5wYW5lbC1jb2xsYXBzZSA+IC5saXN0LWdyb3VwIHtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAkcGFuZWwtaW5uZXItYm9yZGVyO1xuICAgIH1cbiAgfVxuXG4gIC5wYW5lbC1mb290ZXIge1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgKyAucGFuZWwtY29sbGFwc2UgLnBhbmVsLWJvZHkge1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRwYW5lbC1pbm5lci1ib3JkZXI7XG4gICAgfVxuICB9XG59XG5cblxuLy8gQ29udGV4dHVhbCB2YXJpYXRpb25zXG4ucGFuZWwtZGVmYXVsdCB7XG4gIEBpbmNsdWRlIHBhbmVsLXZhcmlhbnQoJHBhbmVsLWRlZmF1bHQtYm9yZGVyLCAkcGFuZWwtZGVmYXVsdC10ZXh0LCAkcGFuZWwtZGVmYXVsdC1oZWFkaW5nLWJnLCAkcGFuZWwtZGVmYXVsdC1ib3JkZXIpO1xufVxuLnBhbmVsLXByaW1hcnkge1xuICBAaW5jbHVkZSBwYW5lbC12YXJpYW50KCRwYW5lbC1wcmltYXJ5LWJvcmRlciwgJHBhbmVsLXByaW1hcnktdGV4dCwgJHBhbmVsLXByaW1hcnktaGVhZGluZy1iZywgJHBhbmVsLXByaW1hcnktYm9yZGVyKTtcbn1cbi5wYW5lbC1zdWNjZXNzIHtcbiAgQGluY2x1ZGUgcGFuZWwtdmFyaWFudCgkcGFuZWwtc3VjY2Vzcy1ib3JkZXIsICRwYW5lbC1zdWNjZXNzLXRleHQsICRwYW5lbC1zdWNjZXNzLWhlYWRpbmctYmcsICRwYW5lbC1zdWNjZXNzLWJvcmRlcik7XG59XG4ucGFuZWwtaW5mbyB7XG4gIEBpbmNsdWRlIHBhbmVsLXZhcmlhbnQoJHBhbmVsLWluZm8tYm9yZGVyLCAkcGFuZWwtaW5mby10ZXh0LCAkcGFuZWwtaW5mby1oZWFkaW5nLWJnLCAkcGFuZWwtaW5mby1ib3JkZXIpO1xufVxuLnBhbmVsLXdhcm5pbmcge1xuICBAaW5jbHVkZSBwYW5lbC12YXJpYW50KCRwYW5lbC13YXJuaW5nLWJvcmRlciwgJHBhbmVsLXdhcm5pbmctdGV4dCwgJHBhbmVsLXdhcm5pbmctaGVhZGluZy1iZywgJHBhbmVsLXdhcm5pbmctYm9yZGVyKTtcbn1cbi5wYW5lbC1kYW5nZXIge1xuICBAaW5jbHVkZSBwYW5lbC12YXJpYW50KCRwYW5lbC1kYW5nZXItYm9yZGVyLCAkcGFuZWwtZGFuZ2VyLXRleHQsICRwYW5lbC1kYW5nZXItaGVhZGluZy1iZywgJHBhbmVsLWRhbmdlci1ib3JkZXIpO1xufVxuIiwiLy8gUGFuZWxzXG5cbkBtaXhpbiBwYW5lbC12YXJpYW50KCRib3JkZXIsICRoZWFkaW5nLXRleHQtY29sb3IsICRoZWFkaW5nLWJnLWNvbG9yLCAkaGVhZGluZy1ib3JkZXIpIHtcbiAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyO1xuXG4gICYgPiAucGFuZWwtaGVhZGluZyB7XG4gICAgY29sb3I6ICRoZWFkaW5nLXRleHQtY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGhlYWRpbmctYmctY29sb3I7XG4gICAgYm9yZGVyLWNvbG9yOiAkaGVhZGluZy1ib3JkZXI7XG5cbiAgICArIC5wYW5lbC1jb2xsYXBzZSA+IC5wYW5lbC1ib2R5IHtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6ICRib3JkZXI7XG4gICAgfVxuICAgIC5iYWRnZSB7XG4gICAgICBjb2xvcjogJGhlYWRpbmctYmctY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGluZy10ZXh0LWNvbG9yO1xuICAgIH1cbiAgfVxuICAmID4gLnBhbmVsLWZvb3RlciB7XG4gICAgKyAucGFuZWwtY29sbGFwc2UgPiAucGFuZWwtYm9keSB7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYm9yZGVyO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRW1iZWRzIHJlc3BvbnNpdmVcbi8vXG4vLyBDcmVkaXQ6IE5pY29sYXMgR2FsbGFnaGVyIGFuZCBTVUlUIENTUy5cblxuLmVtYmVkLXJlc3BvbnNpdmUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBoZWlnaHQ6IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgLmVtYmVkLXJlc3BvbnNpdmUtaXRlbSxcbiAgaWZyYW1lLFxuICBlbWJlZCxcbiAgb2JqZWN0LFxuICB2aWRlbyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyOiAwO1xuICB9XG59XG5cbi8vIE1vZGlmaWVyIGNsYXNzIGZvciAxNjo5IGFzcGVjdCByYXRpb1xuLmVtYmVkLXJlc3BvbnNpdmUtMTZieTkge1xuICBwYWRkaW5nLWJvdHRvbTogNTYuMjUlO1xufVxuXG4vLyBNb2RpZmllciBjbGFzcyBmb3IgNDozIGFzcGVjdCByYXRpb1xuLmVtYmVkLXJlc3BvbnNpdmUtNGJ5MyB7XG4gIHBhZGRpbmctYm90dG9tOiA3NSU7XG59XG4iLCIvL1xuLy8gV2VsbHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBjbGFzc1xuLndlbGwge1xuICBtaW4taGVpZ2h0OiAyMHB4O1xuICBwYWRkaW5nOiAxOXB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkd2VsbC1iZztcbiAgYm9yZGVyOiAxcHggc29saWQgJHdlbGwtYm9yZGVyO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xuICBAaW5jbHVkZSBib3gtc2hhZG93KGluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNSkpO1xuICBibG9ja3F1b3RlIHtcbiAgICBib3JkZXItY29sb3I6ICNkZGQ7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsMCwwLC4xNSk7XG4gIH1cbn1cblxuLy8gU2l6ZXNcbi53ZWxsLWxnIHtcbiAgcGFkZGluZzogMjRweDtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtbGFyZ2U7XG59XG4ud2VsbC1zbSB7XG4gIHBhZGRpbmc6IDlweDtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtc21hbGw7XG59XG4iLCIvL1xuLy8gQ2xvc2UgaWNvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLmNsb3NlIHtcbiAgZmxvYXQ6IHJpZ2h0O1xuICBmb250LXNpemU6ICgkZm9udC1zaXplLWJhc2UgKiAxLjUpO1xuICBmb250LXdlaWdodDogJGNsb3NlLWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICRjbG9zZS1jb2xvcjtcbiAgdGV4dC1zaGFkb3c6ICRjbG9zZS10ZXh0LXNoYWRvdztcbiAgQGluY2x1ZGUgb3BhY2l0eSguMik7XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6ICRjbG9zZS1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIEBpbmNsdWRlIG9wYWNpdHkoLjUpO1xuICB9XG5cbiAgLy8gW2NvbnZlcnRlcl0gZXh0cmFjdGVkIGJ1dHRvbiYgdG8gYnV0dG9uLmNsb3NlXG59XG5cbi8vIEFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgYnV0dG9uIHZlcnNpb25cbi8vIGlPUyByZXF1aXJlcyB0aGUgYnV0dG9uIGVsZW1lbnQgaW5zdGVhZCBvZiBhbiBhbmNob3IgdGFnLlxuLy8gSWYgeW91IHdhbnQgdGhlIGFuY2hvciB2ZXJzaW9uLCBpdCByZXF1aXJlcyBgaHJlZj1cIiNcImAuXG4vLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL2NsaWNrI1NhZmFyaV9Nb2JpbGVcbmJ1dHRvbi5jbG9zZSB7XG4gIHBhZGRpbmc6IDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogMDtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuIiwiLy9cbi8vIE1vZGFsc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gLm1vZGFsLW9wZW4gICAgICAtIGJvZHkgY2xhc3MgZm9yIGtpbGxpbmcgdGhlIHNjcm9sbFxuLy8gLm1vZGFsICAgICAgICAgICAtIGNvbnRhaW5lciB0byBzY3JvbGwgd2l0aGluXG4vLyAubW9kYWwtZGlhbG9nICAgIC0gcG9zaXRpb25pbmcgc2hlbGwgZm9yIHRoZSBhY3R1YWwgbW9kYWxcbi8vIC5tb2RhbC1jb250ZW50ICAgLSBhY3R1YWwgbW9kYWwgdy8gYmcgYW5kIGNvcm5lcnMgYW5kIHNoaXRcblxuLy8gS2lsbCB0aGUgc2Nyb2xsIG9uIHRoZSBib2R5XG4ubW9kYWwtb3BlbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8vIENvbnRhaW5lciB0aGF0IHRoZSBtb2RhbCBzY3JvbGxzIHdpdGhpblxuLm1vZGFsIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR6aW5kZXgtbW9kYWw7XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcblxuICAvLyBQcmV2ZW50IENocm9tZSBvbiBXaW5kb3dzIGZyb20gYWRkaW5nIGEgZm9jdXMgb3V0bGluZS4gRm9yIGRldGFpbHMsIHNlZVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8xMDk1MS5cbiAgb3V0bGluZTogMDtcblxuICAvLyBXaGVuIGZhZGluZyBpbiB0aGUgbW9kYWwsIGFuaW1hdGUgaXQgdG8gc2xpZGUgZG93blxuICAmLmZhZGUgLm1vZGFsLWRpYWxvZyB7XG4gICAgQGluY2x1ZGUgdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24tdHJhbnNmb3JtKDAuM3MgZWFzZS1vdXQpO1xuICB9XG4gICYuaW4gLm1vZGFsLWRpYWxvZyB7IEBpbmNsdWRlIHRyYW5zbGF0ZSgwLCAwKSB9XG59XG4ubW9kYWwtb3BlbiAubW9kYWwge1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi8vIFNoZWxsIGRpdiB0byBwb3NpdGlvbiB0aGUgbW9kYWwgd2l0aCBib3R0b20gcGFkZGluZ1xuLm1vZGFsLWRpYWxvZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IGF1dG87XG4gIG1hcmdpbjogMTBweDtcbn1cblxuLy8gQWN0dWFsIG1vZGFsXG4ubW9kYWwtY29udGVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJG1vZGFsLWNvbnRlbnQtYmc7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRtb2RhbC1jb250ZW50LWZhbGxiYWNrLWJvcmRlci1jb2xvcjsgLy9vbGQgYnJvd3NlcnMgZmFsbGJhY2sgKGllOCBldGMpXG4gIGJvcmRlcjogMXB4IHNvbGlkICRtb2RhbC1jb250ZW50LWJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtbGFyZ2U7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3coMCAzcHggOXB4IHJnYmEoMCwwLDAsLjUpKTtcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgLy8gUmVtb3ZlIGZvY3VzIG91dGxpbmUgZnJvbSBvcGVuZWQgbW9kYWxcbiAgb3V0bGluZTogMDtcbn1cblxuLy8gTW9kYWwgYmFja2dyb3VuZFxuLm1vZGFsLWJhY2tkcm9wIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR6aW5kZXgtbW9kYWwtYmFja2dyb3VuZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJG1vZGFsLWJhY2tkcm9wLWJnO1xuICAvLyBGYWRlIGZvciBiYWNrZHJvcFxuICAmLmZhZGUgeyBAaW5jbHVkZSBvcGFjaXR5KDApOyB9XG4gICYuaW4geyBAaW5jbHVkZSBvcGFjaXR5KCRtb2RhbC1iYWNrZHJvcC1vcGFjaXR5KTsgfVxufVxuXG4vLyBNb2RhbCBoZWFkZXJcbi8vIFRvcCBzZWN0aW9uIG9mIHRoZSBtb2RhbCB3LyB0aXRsZSBhbmQgZGlzbWlzc1xuLm1vZGFsLWhlYWRlciB7XG4gIHBhZGRpbmc6ICRtb2RhbC10aXRsZS1wYWRkaW5nO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3I7XG4gIG1pbi1oZWlnaHQ6ICgkbW9kYWwtdGl0bGUtcGFkZGluZyArICRtb2RhbC10aXRsZS1saW5lLWhlaWdodCk7XG59XG4vLyBDbG9zZSBpY29uXG4ubW9kYWwtaGVhZGVyIC5jbG9zZSB7XG4gIG1hcmdpbi10b3A6IC0ycHg7XG59XG5cbi8vIFRpdGxlIHRleHQgd2l0aGluIGhlYWRlclxuLm1vZGFsLXRpdGxlIHtcbiAgbWFyZ2luOiAwO1xuICBsaW5lLWhlaWdodDogJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0O1xufVxuXG4vLyBNb2RhbCBib2R5XG4vLyBXaGVyZSBhbGwgbW9kYWwgY29udGVudCByZXNpZGVzIChzaWJsaW5nIG9mIC5tb2RhbC1oZWFkZXIgYW5kIC5tb2RhbC1mb290ZXIpXG4ubW9kYWwtYm9keSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogJG1vZGFsLWlubmVyLXBhZGRpbmc7XG59XG5cbi8vIEZvb3RlciAoZm9yIGFjdGlvbnMpXG4ubW9kYWwtZm9vdGVyIHtcbiAgcGFkZGluZzogJG1vZGFsLWlubmVyLXBhZGRpbmc7XG4gIHRleHQtYWxpZ246IHJpZ2h0OyAvLyByaWdodCBhbGlnbiBidXR0b25zXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAkbW9kYWwtZm9vdGVyLWJvcmRlci1jb2xvcjtcbiAgQGluY2x1ZGUgY2xlYXJmaXg7IC8vIGNsZWFyIGl0IGluIGNhc2UgZm9sa3MgdXNlIC5wdWxsLSogY2xhc3NlcyBvbiBidXR0b25zXG5cbiAgLy8gUHJvcGVybHkgc3BhY2Ugb3V0IGJ1dHRvbnNcbiAgLmJ0biArIC5idG4ge1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgLy8gYWNjb3VudCBmb3IgaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB3aGljaCBnZXRzIHRoZSBib3R0b20gbWFyZ2luIGxpa2UgYWxsIG90aGVyIGlucHV0c1xuICB9XG4gIC8vIGJ1dCBvdmVycmlkZSB0aGF0IGZvciBidXR0b24gZ3JvdXBzXG4gIC5idG4tZ3JvdXAgLmJ0biArIC5idG4ge1xuICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICB9XG4gIC8vIGFuZCBvdmVycmlkZSBpdCBmb3IgYmxvY2sgYnV0dG9ucyBhcyB3ZWxsXG4gIC5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxufVxuXG4vLyBNZWFzdXJlIHNjcm9sbGJhciB3aWR0aCBmb3IgcGFkZGluZyBib2R5IGR1cmluZyBtb2RhbCBzaG93L2hpZGVcbi5tb2RhbC1zY3JvbGxiYXItbWVhc3VyZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtOTk5OXB4O1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBvdmVyZmxvdzogc2Nyb2xsO1xufVxuXG4vLyBTY2FsZSB1cCB0aGUgbW9kYWxcbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAvLyBBdXRvbWF0aWNhbGx5IHNldCBtb2RhbCdzIHdpZHRoIGZvciBsYXJnZXIgdmlld3BvcnRzXG4gIC5tb2RhbC1kaWFsb2cge1xuICAgIHdpZHRoOiAkbW9kYWwtbWQ7XG4gICAgbWFyZ2luOiAzMHB4IGF1dG87XG4gIH1cbiAgLm1vZGFsLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coMCA1cHggMTVweCByZ2JhKDAsMCwwLC41KSk7XG4gIH1cblxuICAvLyBNb2RhbCBzaXplc1xuICAubW9kYWwtc20geyB3aWR0aDogJG1vZGFsLXNtOyB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICAubW9kYWwtbGcgeyB3aWR0aDogJG1vZGFsLWxnOyB9XG59XG4iLCIvL1xuLy8gVG9vbHRpcHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gQmFzZSBjbGFzc1xuLnRvb2x0aXAge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6ICR6aW5kZXgtdG9vbHRpcDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIC8vIE91ciBwYXJlbnQgZWxlbWVudCBjYW4gYmUgYXJiaXRyYXJ5IHNpbmNlIHRvb2x0aXBzIGFyZSBieSBkZWZhdWx0IGluc2VydGVkIGFzIGEgc2libGluZyBvZiB0aGVpciB0YXJnZXQgZWxlbWVudC5cbiAgLy8gU28gcmVzZXQgb3VyIGZvbnQgYW5kIHRleHQgcHJvcGVydGllcyB0byBhdm9pZCBpbmhlcml0aW5nIHdlaXJkIHZhbHVlcy5cbiAgQGluY2x1ZGUgcmVzZXQtdGV4dDtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuXG4gIEBpbmNsdWRlIG9wYWNpdHkoMCk7XG5cbiAgJi5pbiAgICAgeyBAaW5jbHVkZSBvcGFjaXR5KCR0b29sdGlwLW9wYWNpdHkpOyB9XG4gICYudG9wICAgIHsgbWFyZ2luLXRvcDogIC0zcHg7IHBhZGRpbmc6ICR0b29sdGlwLWFycm93LXdpZHRoIDA7IH1cbiAgJi5yaWdodCAgeyBtYXJnaW4tbGVmdDogIDNweDsgcGFkZGluZzogMCAkdG9vbHRpcC1hcnJvdy13aWR0aDsgfVxuICAmLmJvdHRvbSB7IG1hcmdpbi10b3A6ICAgM3B4OyBwYWRkaW5nOiAkdG9vbHRpcC1hcnJvdy13aWR0aCAwOyB9XG4gICYubGVmdCAgIHsgbWFyZ2luLWxlZnQ6IC0zcHg7IHBhZGRpbmc6IDAgJHRvb2x0aXAtYXJyb3ctd2lkdGg7IH1cbn1cblxuLy8gV3JhcHBlciBmb3IgdGhlIHRvb2x0aXAgY29udGVudFxuLnRvb2x0aXAtaW5uZXIge1xuICBtYXgtd2lkdGg6ICR0b29sdGlwLW1heC13aWR0aDtcbiAgcGFkZGluZzogM3B4IDhweDtcbiAgY29sb3I6ICR0b29sdGlwLWNvbG9yO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICR0b29sdGlwLWJnO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1iYXNlO1xufVxuXG4vLyBBcnJvd3Ncbi50b29sdGlwLWFycm93IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xufVxuLy8gTm90ZTogRGVwcmVjYXRlZCAudG9wLWxlZnQsIC50b3AtcmlnaHQsIC5ib3R0b20tbGVmdCwgYW5kIC5ib3R0b20tcmlnaHQgYXMgb2YgdjMuMy4xXG4udG9vbHRpcCB7XG4gICYudG9wIC50b29sdGlwLWFycm93IHtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogNTAlO1xuICAgIG1hcmdpbi1sZWZ0OiAtJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiAkdG9vbHRpcC1hcnJvdy13aWR0aCAkdG9vbHRpcC1hcnJvdy13aWR0aCAwO1xuICAgIGJvcmRlci10b3AtY29sb3I6ICR0b29sdGlwLWFycm93LWNvbG9yO1xuICB9XG4gICYudG9wLWxlZnQgLnRvb2x0aXAtYXJyb3cge1xuICAgIGJvdHRvbTogMDtcbiAgICByaWdodDogJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgbWFyZ2luLWJvdHRvbTogLSR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci13aWR0aDogJHRvb2x0aXAtYXJyb3ctd2lkdGggJHRvb2x0aXAtYXJyb3ctd2lkdGggMDtcbiAgICBib3JkZXItdG9wLWNvbG9yOiAkdG9vbHRpcC1hcnJvdy1jb2xvcjtcbiAgfVxuICAmLnRvcC1yaWdodCAudG9vbHRpcC1hcnJvdyB7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6ICR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIG1hcmdpbi1ib3R0b206IC0kdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItd2lkdGg6ICR0b29sdGlwLWFycm93LXdpZHRoICR0b29sdGlwLWFycm93LXdpZHRoIDA7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogJHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gIH1cbiAgJi5yaWdodCAudG9vbHRpcC1hcnJvdyB7XG4gICAgdG9wOiA1MCU7XG4gICAgbGVmdDogMDtcbiAgICBtYXJnaW4tdG9wOiAtJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiAkdG9vbHRpcC1hcnJvdy13aWR0aCAkdG9vbHRpcC1hcnJvdy13aWR0aCAkdG9vbHRpcC1hcnJvdy13aWR0aCAwO1xuICAgIGJvcmRlci1yaWdodC1jb2xvcjogJHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gIH1cbiAgJi5sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgICB0b3A6IDUwJTtcbiAgICByaWdodDogMDtcbiAgICBtYXJnaW4tdG9wOiAtJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiAkdG9vbHRpcC1hcnJvdy13aWR0aCAwICR0b29sdGlwLWFycm93LXdpZHRoICR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAkdG9vbHRpcC1hcnJvdy1jb2xvcjtcbiAgfVxuICAmLmJvdHRvbSAudG9vbHRpcC1hcnJvdyB7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogLSR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci13aWR0aDogMCAkdG9vbHRpcC1hcnJvdy13aWR0aCAkdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkdG9vbHRpcC1hcnJvdy1jb2xvcjtcbiAgfVxuICAmLmJvdHRvbS1sZWZ0IC50b29sdGlwLWFycm93IHtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6ICR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIG1hcmdpbi10b3A6IC0kdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBib3JkZXItd2lkdGg6IDAgJHRvb2x0aXAtYXJyb3ctd2lkdGggJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gIH1cbiAgJi5ib3R0b20tcmlnaHQgLnRvb2x0aXAtYXJyb3cge1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAkdG9vbHRpcC1hcnJvdy13aWR0aDtcbiAgICBtYXJnaW4tdG9wOiAtJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG4gICAgYm9yZGVyLXdpZHRoOiAwICR0b29sdGlwLWFycm93LXdpZHRoICR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICR0b29sdGlwLWFycm93LWNvbG9yO1xuICB9XG59XG4iLCJAbWl4aW4gcmVzZXQtdGV4dCgpIHtcbiAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1iYXNlO1xuICAvLyBXZSBkZWxpYmVyYXRlbHkgZG8gTk9UIHJlc2V0IGZvbnQtc2l6ZS5cbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICBsaW5lLWJyZWFrOiBhdXRvO1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG4gIHRleHQtYWxpZ246IGxlZnQ7IC8vIEZhbGxiYWNrIGZvciB3aGVyZSBgc3RhcnRgIGlzIG5vdCBzdXBwb3J0ZWRcbiAgdGV4dC1hbGlnbjogc3RhcnQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICB3b3JkLWJyZWFrOiBub3JtYWw7XG4gIHdvcmQtc3BhY2luZzogbm9ybWFsO1xuICB3b3JkLXdyYXA6IG5vcm1hbDtcbn1cbiIsIi8vXG4vLyBQb3BvdmVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4ucG9wb3ZlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAkemluZGV4LXBvcG92ZXI7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIG1heC13aWR0aDogJHBvcG92ZXItbWF4LXdpZHRoO1xuICBwYWRkaW5nOiAxcHg7XG4gIC8vIE91ciBwYXJlbnQgZWxlbWVudCBjYW4gYmUgYXJiaXRyYXJ5IHNpbmNlIHBvcG92ZXJzIGFyZSBieSBkZWZhdWx0IGluc2VydGVkIGFzIGEgc2libGluZyBvZiB0aGVpciB0YXJnZXQgZWxlbWVudC5cbiAgLy8gU28gcmVzZXQgb3VyIGZvbnQgYW5kIHRleHQgcHJvcGVydGllcyB0byBhdm9pZCBpbmhlcml0aW5nIHdlaXJkIHZhbHVlcy5cbiAgQGluY2x1ZGUgcmVzZXQtdGV4dDtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLWJhc2U7XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogJHBvcG92ZXItYmc7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIGJvcmRlcjogMXB4IHNvbGlkICRwb3BvdmVyLWZhbGxiYWNrLWJvcmRlci1jb2xvcjtcbiAgYm9yZGVyOiAxcHggc29saWQgJHBvcG92ZXItYm9yZGVyLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cy1sYXJnZTtcbiAgQGluY2x1ZGUgYm94LXNoYWRvdygwIDVweCAxMHB4IHJnYmEoMCwwLDAsLjIpKTtcblxuICAvLyBPZmZzZXQgdGhlIHBvcG92ZXIgdG8gYWNjb3VudCBmb3IgdGhlIHBvcG92ZXIgYXJyb3dcbiAgJi50b3AgICAgIHsgbWFyZ2luLXRvcDogLSRwb3BvdmVyLWFycm93LXdpZHRoOyB9XG4gICYucmlnaHQgICB7IG1hcmdpbi1sZWZ0OiAkcG9wb3Zlci1hcnJvdy13aWR0aDsgfVxuICAmLmJvdHRvbSAgeyBtYXJnaW4tdG9wOiAkcG9wb3Zlci1hcnJvdy13aWR0aDsgfVxuICAmLmxlZnQgICAgeyBtYXJnaW4tbGVmdDogLSRwb3BvdmVyLWFycm93LXdpZHRoOyB9XG59XG5cbi5wb3BvdmVyLXRpdGxlIHtcbiAgbWFyZ2luOiAwOyAvLyByZXNldCBoZWFkaW5nIG1hcmdpblxuICBwYWRkaW5nOiA4cHggMTRweDtcbiAgZm9udC1zaXplOiAkZm9udC1zaXplLWJhc2U7XG4gIGJhY2tncm91bmQtY29sb3I6ICRwb3BvdmVyLXRpdGxlLWJnO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgZGFya2VuKCRwb3BvdmVyLXRpdGxlLWJnLCA1JSk7XG4gIGJvcmRlci1yYWRpdXM6ICgkYm9yZGVyLXJhZGl1cy1sYXJnZSAtIDEpICgkYm9yZGVyLXJhZGl1cy1sYXJnZSAtIDEpIDAgMDtcbn1cblxuLnBvcG92ZXItY29udGVudCB7XG4gIHBhZGRpbmc6IDlweCAxNHB4O1xufVxuXG4vLyBBcnJvd3Ncbi8vXG4vLyAuYXJyb3cgaXMgb3V0ZXIsIC5hcnJvdzphZnRlciBpcyBpbm5lclxuXG4ucG9wb3ZlciA+IC5hcnJvdyB7XG4gICYsXG4gICY6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMDtcbiAgICBoZWlnaHQ6IDA7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICB9XG59XG4ucG9wb3ZlciA+IC5hcnJvdyB7XG4gIGJvcmRlci13aWR0aDogJHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XG59XG4ucG9wb3ZlciA+IC5hcnJvdzphZnRlciB7XG4gIGJvcmRlci13aWR0aDogJHBvcG92ZXItYXJyb3ctd2lkdGg7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG5cbi5wb3BvdmVyIHtcbiAgJi50b3AgPiAuYXJyb3cge1xuICAgIGxlZnQ6IDUwJTtcbiAgICBtYXJnaW4tbGVmdDogLSRwb3BvdmVyLWFycm93LW91dGVyLXdpZHRoO1xuICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG4gICAgYm9yZGVyLXRvcC1jb2xvcjogJHBvcG92ZXItYXJyb3ctb3V0ZXItZmFsbGJhY2stY29sb3I7IC8vIElFOCBmYWxsYmFja1xuICAgIGJvcmRlci10b3AtY29sb3I6ICRwb3BvdmVyLWFycm93LW91dGVyLWNvbG9yO1xuICAgIGJvdHRvbTogLSRwb3BvdmVyLWFycm93LW91dGVyLXdpZHRoO1xuICAgICY6YWZ0ZXIge1xuICAgICAgY29udGVudDogXCIgXCI7XG4gICAgICBib3R0b206IDFweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtJHBvcG92ZXItYXJyb3ctd2lkdGg7XG4gICAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHBvcG92ZXItYXJyb3ctY29sb3I7XG4gICAgfVxuICB9XG4gICYucmlnaHQgPiAuYXJyb3cge1xuICAgIHRvcDogNTAlO1xuICAgIGxlZnQ6IC0kcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDtcbiAgICBtYXJnaW4tdG9wOiAtJHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XG4gICAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7XG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAkcG9wb3Zlci1hcnJvdy1vdXRlci1mYWxsYmFjay1jb2xvcjsgLy8gSUU4IGZhbGxiYWNrXG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAkcG9wb3Zlci1hcnJvdy1vdXRlci1jb2xvcjtcbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgbGVmdDogMXB4O1xuICAgICAgYm90dG9tOiAtJHBvcG92ZXItYXJyb3ctd2lkdGg7XG4gICAgICBib3JkZXItbGVmdC13aWR0aDogMDtcbiAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogJHBvcG92ZXItYXJyb3ctY29sb3I7XG4gICAgfVxuICB9XG4gICYuYm90dG9tID4gLmFycm93IHtcbiAgICBsZWZ0OiA1MCU7XG4gICAgbWFyZ2luLWxlZnQ6IC0kcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDtcbiAgICBib3JkZXItdG9wLXdpZHRoOiAwO1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRwb3BvdmVyLWFycm93LW91dGVyLWZhbGxiYWNrLWNvbG9yOyAvLyBJRTggZmFsbGJhY2tcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkcG9wb3Zlci1hcnJvdy1vdXRlci1jb2xvcjtcbiAgICB0b3A6IC0kcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDtcbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgdG9wOiAxcHg7XG4gICAgICBtYXJnaW4tbGVmdDogLSRwb3BvdmVyLWFycm93LXdpZHRoO1xuICAgICAgYm9yZGVyLXRvcC13aWR0aDogMDtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRwb3BvdmVyLWFycm93LWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gICYubGVmdCA+IC5hcnJvdyB7XG4gICAgdG9wOiA1MCU7XG4gICAgcmlnaHQ6IC0kcG9wb3Zlci1hcnJvdy1vdXRlci13aWR0aDtcbiAgICBtYXJnaW4tdG9wOiAtJHBvcG92ZXItYXJyb3ctb3V0ZXItd2lkdGg7XG4gICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAkcG9wb3Zlci1hcnJvdy1vdXRlci1mYWxsYmFjay1jb2xvcjsgLy8gSUU4IGZhbGxiYWNrXG4gICAgYm9yZGVyLWxlZnQtY29sb3I6ICRwb3BvdmVyLWFycm93LW91dGVyLWNvbG9yO1xuICAgICY6YWZ0ZXIge1xuICAgICAgY29udGVudDogXCIgXCI7XG4gICAgICByaWdodDogMXB4O1xuICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICRwb3BvdmVyLWFycm93LWNvbG9yO1xuICAgICAgYm90dG9tOiAtJHBvcG92ZXItYXJyb3ctd2lkdGg7XG4gICAgfVxuICB9XG59XG4iLCIvL1xuLy8gQ2Fyb3VzZWxcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gV3JhcHBlciBmb3IgdGhlIHNsaWRlIGNvbnRhaW5lciBhbmQgaW5kaWNhdG9yc1xuLmNhcm91c2VsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHdpZHRoOiAxMDAlO1xuXG4gID4gLml0ZW0ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oLjZzIGVhc2UtaW4tb3V0IGxlZnQpO1xuXG4gICAgLy8gQWNjb3VudCBmb3IgamFua2l0dWRlIG9uIGltYWdlc1xuICAgID4gaW1nLFxuICAgID4gYSA+IGltZyB7XG4gICAgICBAaW5jbHVkZSBpbWctcmVzcG9uc2l2ZTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIH1cblxuICAgIC8vIFdlYktpdCBDU1MzIHRyYW5zZm9ybXMgZm9yIHN1cHBvcnRlZCBkZXZpY2VzXG4gICAgQG1lZGlhIGFsbCBhbmQgKHRyYW5zZm9ybS0zZCksICgtd2Via2l0LXRyYW5zZm9ybS0zZCkge1xuICAgICAgQGluY2x1ZGUgdHJhbnNpdGlvbi10cmFuc2Zvcm0oMC42cyBlYXNlLWluLW91dCk7XG4gICAgICBAaW5jbHVkZSBiYWNrZmFjZS12aXNpYmlsaXR5KGhpZGRlbik7XG4gICAgICBAaW5jbHVkZSBwZXJzcGVjdGl2ZSgxMDAwcHgpO1xuXG4gICAgICAmLm5leHQsXG4gICAgICAmLmFjdGl2ZS5yaWdodCB7XG4gICAgICAgIEBpbmNsdWRlIHRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgfVxuICAgICAgJi5wcmV2LFxuICAgICAgJi5hY3RpdmUubGVmdCB7XG4gICAgICAgIEBpbmNsdWRlIHRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKTtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgIH1cbiAgICAgICYubmV4dC5sZWZ0LFxuICAgICAgJi5wcmV2LnJpZ2h0LFxuICAgICAgJi5hY3RpdmUge1xuICAgICAgICBAaW5jbHVkZSB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICA+IC5hY3RpdmUsXG4gID4gLm5leHQsXG4gID4gLnByZXYge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgPiAuYWN0aXZlIHtcbiAgICBsZWZ0OiAwO1xuICB9XG5cbiAgPiAubmV4dCxcbiAgPiAucHJldiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gID4gLm5leHQge1xuICAgIGxlZnQ6IDEwMCU7XG4gIH1cbiAgPiAucHJldiB7XG4gICAgbGVmdDogLTEwMCU7XG4gIH1cbiAgPiAubmV4dC5sZWZ0LFxuICA+IC5wcmV2LnJpZ2h0IHtcbiAgICBsZWZ0OiAwO1xuICB9XG5cbiAgPiAuYWN0aXZlLmxlZnQge1xuICAgIGxlZnQ6IC0xMDAlO1xuICB9XG4gID4gLmFjdGl2ZS5yaWdodCB7XG4gICAgbGVmdDogMTAwJTtcbiAgfVxuXG59XG5cbi8vIExlZnQvcmlnaHQgY29udHJvbHMgZm9yIG5hdlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5jYXJvdXNlbC1jb250cm9sIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6ICRjYXJvdXNlbC1jb250cm9sLXdpZHRoO1xuICBAaW5jbHVkZSBvcGFjaXR5KCRjYXJvdXNlbC1jb250cm9sLW9wYWNpdHkpO1xuICBmb250LXNpemU6ICRjYXJvdXNlbC1jb250cm9sLWZvbnQtc2l6ZTtcbiAgY29sb3I6ICRjYXJvdXNlbC1jb250cm9sLWNvbG9yO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRleHQtc2hhZG93OiAkY2Fyb3VzZWwtdGV4dC1zaGFkb3c7XG4gIC8vIFdlIGNhbid0IGhhdmUgdGhpcyB0cmFuc2l0aW9uIGhlcmUgYmVjYXVzZSBXZWJLaXQgY2FuY2VscyB0aGUgY2Fyb3VzZWxcbiAgLy8gYW5pbWF0aW9uIGlmIHlvdSB0cmlwIHRoaXMgd2hpbGUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIGFuaW1hdGlvbi5cblxuICAvLyBTZXQgZ3JhZGllbnRzIGZvciBiYWNrZ3JvdW5kc1xuICAmLmxlZnQge1xuICAgIEBpbmNsdWRlIGdyYWRpZW50LWhvcml6b250YWwoJHN0YXJ0LWNvbG9yOiByZ2JhKDAsMCwwLC41KSwgJGVuZC1jb2xvcjogcmdiYSgwLDAsMCwuMDAwMSkpO1xuICB9XG4gICYucmlnaHQge1xuICAgIGxlZnQ6IGF1dG87XG4gICAgcmlnaHQ6IDA7XG4gICAgQGluY2x1ZGUgZ3JhZGllbnQtaG9yaXpvbnRhbCgkc3RhcnQtY29sb3I6IHJnYmEoMCwwLDAsLjAwMDEpLCAkZW5kLWNvbG9yOiByZ2JhKDAsMCwwLC41KSk7XG4gIH1cblxuICAvLyBIb3Zlci9mb2N1cyBzdGF0ZVxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGNvbG9yOiAkY2Fyb3VzZWwtY29udHJvbC1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgQGluY2x1ZGUgb3BhY2l0eSguOSk7XG4gIH1cblxuICAvLyBUb2dnbGVzXG4gIC5pY29uLXByZXYsXG4gIC5pY29uLW5leHQsXG4gIC5nbHlwaGljb24tY2hldnJvbi1sZWZ0LFxuICAuZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDUwJTtcbiAgICBtYXJnaW4tdG9wOiAtMTBweDtcbiAgICB6LWluZGV4OiA1O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgfVxuICAuaWNvbi1wcmV2LFxuICAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCB7XG4gICAgbGVmdDogNTAlO1xuICAgIG1hcmdpbi1sZWZ0OiAtMTBweDtcbiAgfVxuICAuaWNvbi1uZXh0LFxuICAuZ2x5cGhpY29uLWNoZXZyb24tcmlnaHQge1xuICAgIHJpZ2h0OiA1MCU7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMTBweDtcbiAgfVxuICAuaWNvbi1wcmV2LFxuICAuaWNvbi1uZXh0IHtcbiAgICB3aWR0aDogIDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIGZvbnQtZmFtaWx5OiBzZXJpZjtcbiAgfVxuXG5cbiAgLmljb24tcHJldiB7XG4gICAgJjpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1xcMjAzOSc7Ly8gU0lOR0xFIExFRlQtUE9JTlRJTkcgQU5HTEUgUVVPVEFUSU9OIE1BUksgKFUrMjAzOSlcbiAgICB9XG4gIH1cbiAgLmljb24tbmV4dCB7XG4gICAgJjpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1xcMjAzYSc7Ly8gU0lOR0xFIFJJR0hULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLIChVKzIwM0EpXG4gICAgfVxuICB9XG59XG5cbi8vIE9wdGlvbmFsIGluZGljYXRvciBwaXBzXG4vL1xuLy8gQWRkIGFuIHVub3JkZXJlZCBsaXN0IHdpdGggdGhlIGZvbGxvd2luZyBjbGFzcyBhbmQgYWRkIGEgbGlzdCBpdGVtIGZvciBlYWNoXG4vLyBzbGlkZSB5b3VyIGNhcm91c2VsIGhvbGRzLlxuXG4uY2Fyb3VzZWwtaW5kaWNhdG9ycyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAxMHB4O1xuICBsZWZ0OiA1MCU7XG4gIHotaW5kZXg6IDE1O1xuICB3aWR0aDogNjAlO1xuICBtYXJnaW4tbGVmdDogLTMwJTtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgbGkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogIDEwcHg7XG4gICAgaGVpZ2h0OiAxMHB4O1xuICAgIG1hcmdpbjogMXB4O1xuICAgIHRleHQtaW5kZW50OiAtOTk5cHg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGNhcm91c2VsLWluZGljYXRvci1ib3JkZXItY29sb3I7XG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAvLyBJRTgtOSBoYWNrIGZvciBldmVudCBoYW5kbGluZ1xuICAgIC8vXG4gICAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgOC05IGRvZXMgbm90IHN1cHBvcnQgY2xpY2tzIG9uIGVsZW1lbnRzIHdpdGhvdXQgYSBzZXRcbiAgICAvLyBgYmFja2dyb3VuZC1jb2xvcmAuIFdlIGNhbm5vdCB1c2UgYGZpbHRlcmAgc2luY2UgdGhhdCdzIG5vdCB2aWV3ZWQgYXMgYVxuICAgIC8vIGJhY2tncm91bmQgY29sb3IgYnkgdGhlIGJyb3dzZXIuIFRodXMsIGEgaGFjayBpcyBuZWVkZWQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy9jbGljayNJbnRlcm5ldF9FeHBsb3JlclxuICAgIC8vXG4gICAgLy8gRm9yIElFOCwgd2Ugc2V0IHNvbGlkIGJsYWNrIGFzIGl0IGRvZXNuJ3Qgc3VwcG9ydCBgcmdiYSgpYC4gRm9yIElFOSwgd2VcbiAgICAvLyBzZXQgYWxwaGEgdHJhbnNwYXJlbmN5IGZvciB0aGUgYmVzdCByZXN1bHRzIHBvc3NpYmxlLlxuICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDAgXFw5OyAvLyBJRThcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLDApOyAvLyBJRTlcbiAgfVxuICAuYWN0aXZlIHtcbiAgICBtYXJnaW46IDA7XG4gICAgd2lkdGg6ICAxMnB4O1xuICAgIGhlaWdodDogMTJweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2Fyb3VzZWwtaW5kaWNhdG9yLWFjdGl2ZS1iZztcbiAgfVxufVxuXG4vLyBPcHRpb25hbCBjYXB0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEhpZGRlbiBieSBkZWZhdWx0IGZvciBzbWFsbGVyIHZpZXdwb3J0c1xuLmNhcm91c2VsLWNhcHRpb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDE1JTtcbiAgcmlnaHQ6IDE1JTtcbiAgYm90dG9tOiAyMHB4O1xuICB6LWluZGV4OiAxMDtcbiAgcGFkZGluZy10b3A6IDIwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAyMHB4O1xuICBjb2xvcjogJGNhcm91c2VsLWNhcHRpb24tY29sb3I7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC1zaGFkb3c6ICRjYXJvdXNlbC10ZXh0LXNoYWRvdztcbiAgJiAuYnRuIHtcbiAgICB0ZXh0LXNoYWRvdzogbm9uZTsgLy8gTm8gc2hhZG93IGZvciBidXR0b24gZWxlbWVudHMgaW4gY2Fyb3VzZWwtY2FwdGlvblxuICB9XG59XG5cblxuLy8gU2NhbGUgdXAgY29udHJvbHMgZm9yIHRhYmxldHMgYW5kIHVwXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuXG4gIC8vIFNjYWxlIHVwIHRoZSBjb250cm9scyBhIHNtaWRnZVxuICAuY2Fyb3VzZWwtY29udHJvbCB7XG4gICAgLmdseXBoaWNvbi1jaGV2cm9uLWxlZnQsXG4gICAgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0LFxuICAgIC5pY29uLXByZXYsXG4gICAgLmljb24tbmV4dCB7XG4gICAgICB3aWR0aDogMzBweDtcbiAgICAgIGhlaWdodDogMzBweDtcbiAgICAgIG1hcmdpbi10b3A6IC0xNXB4O1xuICAgICAgZm9udC1zaXplOiAzMHB4O1xuICAgIH1cbiAgICAuZ2x5cGhpY29uLWNoZXZyb24tbGVmdCxcbiAgICAuaWNvbi1wcmV2IHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMTVweDtcbiAgICB9XG4gICAgLmdseXBoaWNvbi1jaGV2cm9uLXJpZ2h0LFxuICAgIC5pY29uLW5leHQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAtMTVweDtcbiAgICB9XG4gIH1cblxuICAvLyBTaG93IGFuZCBsZWZ0IGFsaWduIHRoZSBjYXB0aW9uc1xuICAuY2Fyb3VzZWwtY2FwdGlvbiB7XG4gICAgbGVmdDogMjAlO1xuICAgIHJpZ2h0OiAyMCU7XG4gICAgcGFkZGluZy1ib3R0b206IDMwcHg7XG4gIH1cblxuICAvLyBNb3ZlIHVwIHRoZSBpbmRpY2F0b3JzXG4gIC5jYXJvdXNlbC1pbmRpY2F0b3JzIHtcbiAgICBib3R0b206IDIwcHg7XG4gIH1cbn1cbiIsIi8vXG4vLyBVdGlsaXR5IGNsYXNzZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gRmxvYXRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5jbGVhcmZpeCB7XG4gIEBpbmNsdWRlIGNsZWFyZml4O1xufVxuLmNlbnRlci1ibG9jayB7XG4gIEBpbmNsdWRlIGNlbnRlci1ibG9jaztcbn1cbi5wdWxsLXJpZ2h0IHtcbiAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XG59XG4ucHVsbC1sZWZ0IHtcbiAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcbn1cblxuXG4vLyBUb2dnbGluZyBjb250ZW50XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE5vdGU6IERlcHJlY2F0ZWQgLmhpZGUgaW4gZmF2b3Igb2YgLmhpZGRlbiBvciAuc3Itb25seSAoYXMgYXBwcm9wcmlhdGUpIGluIHYzLjAuMVxuLmhpZGUge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG4uc2hvdyB7XG4gIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG59XG4uaW52aXNpYmxlIHtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuLnRleHQtaGlkZSB7XG4gIEBpbmNsdWRlIHRleHQtaGlkZTtcbn1cblxuXG4vLyBIaWRlIGZyb20gc2NyZWVucmVhZGVycyBhbmQgYnJvd3NlcnNcbi8vXG4vLyBDcmVkaXQ6IEhUTUw1IEJvaWxlcnBsYXRlXG5cbi5oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cblxuLy8gRm9yIEFmZml4IHBsdWdpblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uYWZmaXgge1xuICBwb3NpdGlvbjogZml4ZWQ7XG59XG4iLCIvLyBDZW50ZXItYWxpZ24gYSBibG9jayBsZXZlbCBlbGVtZW50XG5cbkBtaXhpbiBjZW50ZXItYmxvY2soKSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xufVxuIiwiLy8gQ1NTIGltYWdlIHJlcGxhY2VtZW50XG4vL1xuLy8gSGVhZHMgdXAhIHYzIGxhdW5jaGVkIHdpdGggb25seSBgLmhpZGUtdGV4dCgpYCwgYnV0IHBlciBvdXIgcGF0dGVybiBmb3Jcbi8vIG1peGlucyBiZWluZyByZXVzZWQgYXMgY2xhc3NlcyB3aXRoIHRoZSBzYW1lIG5hbWUsIHRoaXMgZG9lc24ndCBob2xkIHVwLiBBc1xuLy8gb2YgdjMuMC4xIHdlIGhhdmUgYWRkZWQgYC50ZXh0LWhpZGUoKWAgYW5kIGRlcHJlY2F0ZWQgYC5oaWRlLXRleHQoKWAuXG4vL1xuLy8gU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vaDVicC9odG1sNS1ib2lsZXJwbGF0ZS9jb21taXQvYWEwMzk2ZWFlNzU3XG5cbi8vIERlcHJlY2F0ZWQgYXMgb2YgdjMuMC4xICh3aWxsIGJlIHJlbW92ZWQgaW4gdjQpXG5AbWl4aW4gaGlkZS10ZXh0KCkge1xuICBmb250OiAwLzAgYTtcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuICB0ZXh0LXNoYWRvdzogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogMDtcbn1cblxuLy8gTmV3IG1peGluIHRvIHVzZSBhcyBvZiB2My4wLjFcbkBtaXhpbiB0ZXh0LWhpZGUoKSB7XG4gIEBpbmNsdWRlIGhpZGUtdGV4dDtcbn1cbiIsIi8vXG4vLyBSZXNwb25zaXZlOiBVdGlsaXR5IGNsYXNzZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuLy8gSUUxMCBpbiBXaW5kb3dzIChQaG9uZSkgOFxuLy9cbi8vIFN1cHBvcnQgZm9yIHJlc3BvbnNpdmUgdmlld3MgdmlhIG1lZGlhIHF1ZXJpZXMgaXMga2luZCBvZiBib3JrZWQgaW4gSUUxMCwgZm9yXG4vLyBTdXJmYWNlL2Rlc2t0b3AgaW4gc3BsaXQgdmlldyBhbmQgZm9yIFdpbmRvd3MgUGhvbmUgOC4gVGhpcyBwYXJ0aWN1bGFyIGZpeFxuLy8gbXVzdCBiZSBhY2NvbXBhbmllZCBieSBhIHNuaXBwZXQgb2YgSmF2YVNjcmlwdCB0byBzbmlmZiB0aGUgdXNlciBhZ2VudCBhbmRcbi8vIGFwcGx5IHNvbWUgY29uZGl0aW9uYWwgQ1NTIHRvICpvbmx5KiB0aGUgU3VyZmFjZS9kZXNrdG9wIFdpbmRvd3MgOC4gTG9vayBhdFxuLy8gb3VyIEdldHRpbmcgU3RhcnRlZCBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgYnVnLlxuLy9cbi8vIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGZvbGxvd2luZzpcbi8vXG4vLyBJc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMDQ5N1xuLy8gRG9jczogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vZ2V0dGluZy1zdGFydGVkLyNzdXBwb3J0LWllMTAtd2lkdGhcbi8vIFNvdXJjZTogaHR0cDovL3RpbWthZGxlYy5jb20vMjAxMy8wMS93aW5kb3dzLXBob25lLTgtYW5kLWRldmljZS13aWR0aC9cbi8vIFNvdXJjZTogaHR0cDovL3RpbWthZGxlYy5jb20vMjAxMi8xMC9pZTEwLXNuYXAtbW9kZS1hbmQtcmVzcG9uc2l2ZS1kZXNpZ24vXG5cbkBhdC1yb290IHtcbiAgQC1tcy12aWV3cG9ydCB7XG4gICAgd2lkdGg6IGRldmljZS13aWR0aDtcbiAgfVxufVxuXG5cbi8vIFZpc2liaWxpdHkgdXRpbGl0aWVzXG4vLyBOb3RlOiBEZXByZWNhdGVkIC52aXNpYmxlLXhzLCAudmlzaWJsZS1zbSwgLnZpc2libGUtbWQsIGFuZCAudmlzaWJsZS1sZyBhcyBvZiB2My4yLjBcblxuQGluY2x1ZGUgcmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoJy52aXNpYmxlLXhzJyk7XG5AaW5jbHVkZSByZXNwb25zaXZlLWludmlzaWJpbGl0eSgnLnZpc2libGUtc20nKTtcbkBpbmNsdWRlIHJlc3BvbnNpdmUtaW52aXNpYmlsaXR5KCcudmlzaWJsZS1tZCcpO1xuQGluY2x1ZGUgcmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoJy52aXNpYmxlLWxnJyk7XG5cbi52aXNpYmxlLXhzLWJsb2NrLFxuLnZpc2libGUteHMtaW5saW5lLFxuLnZpc2libGUteHMtaW5saW5lLWJsb2NrLFxuLnZpc2libGUtc20tYmxvY2ssXG4udmlzaWJsZS1zbS1pbmxpbmUsXG4udmlzaWJsZS1zbS1pbmxpbmUtYmxvY2ssXG4udmlzaWJsZS1tZC1ibG9jayxcbi52aXNpYmxlLW1kLWlubGluZSxcbi52aXNpYmxlLW1kLWlubGluZS1ibG9jayxcbi52aXNpYmxlLWxnLWJsb2NrLFxuLnZpc2libGUtbGctaW5saW5lLFxuLnZpc2libGUtbGctaW5saW5lLWJsb2NrIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgQGluY2x1ZGUgcmVzcG9uc2l2ZS12aXNpYmlsaXR5KCcudmlzaWJsZS14cycpO1xufVxuLnZpc2libGUteHMtYmxvY2sge1xuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG4udmlzaWJsZS14cy1pbmxpbmUge1xuICBAbWVkaWEgKG1heC13aWR0aDogJHNjcmVlbi14cy1tYXgpIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUteHMtaW5saW5lLWJsb2NrIHtcbiAgQG1lZGlhIChtYXgtd2lkdGg6ICRzY3JlZW4teHMtbWF4KSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tc20tbWluKSBhbmQgKG1heC13aWR0aDogJHNjcmVlbi1zbS1tYXgpIHtcbiAgQGluY2x1ZGUgcmVzcG9uc2l2ZS12aXNpYmlsaXR5KCcudmlzaWJsZS1zbScpO1xufVxuLnZpc2libGUtc20tYmxvY2sge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXNtLWlubGluZSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikgYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXNtLWlubGluZS1ibG9jayB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikgYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4tc20tbWF4KSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbWQtbWluKSBhbmQgKG1heC13aWR0aDogJHNjcmVlbi1tZC1tYXgpIHtcbiAgQGluY2x1ZGUgcmVzcG9uc2l2ZS12aXNpYmlsaXR5KCcudmlzaWJsZS1tZCcpO1xufVxuLnZpc2libGUtbWQtYmxvY2sge1xuICBAbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1tZC1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLW1kLWlubGluZSB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikgYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLW1kLWlubGluZS1ibG9jayB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikgYW5kIChtYXgtd2lkdGg6ICRzY3JlZW4tbWQtbWF4KSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGctbWluKSB7XG4gIEBpbmNsdWRlIHJlc3BvbnNpdmUtdmlzaWJpbGl0eSgnLnZpc2libGUtbGcnKTtcbn1cbi52aXNpYmxlLWxnLWJsb2NrIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGctbWluKSB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUtbGctaW5saW5lIHtcbiAgQG1lZGlhIChtaW4td2lkdGg6ICRzY3JlZW4tbGctbWluKSB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLWxnLWlubGluZS1ibG9jayB7XG4gIEBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLWxnLW1pbikge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAkc2NyZWVuLXhzLW1heCkge1xuICBAaW5jbHVkZSByZXNwb25zaXZlLWludmlzaWJpbGl0eSgnLmhpZGRlbi14cycpO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1zbS1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLXNtLW1heCkge1xuICBAaW5jbHVkZSByZXNwb25zaXZlLWludmlzaWJpbGl0eSgnLmhpZGRlbi1zbScpO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1tZC1taW4pIGFuZCAobWF4LXdpZHRoOiAkc2NyZWVuLW1kLW1heCkge1xuICBAaW5jbHVkZSByZXNwb25zaXZlLWludmlzaWJpbGl0eSgnLmhpZGRlbi1tZCcpO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogJHNjcmVlbi1sZy1taW4pIHtcbiAgQGluY2x1ZGUgcmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoJy5oaWRkZW4tbGcnKTtcbn1cblxuXG4vLyBQcmludCB1dGlsaXRpZXNcbi8vXG4vLyBNZWRpYSBxdWVyaWVzIGFyZSBwbGFjZWQgb24gdGhlIGluc2lkZSB0byBiZSBtaXhpbi1mcmllbmRseS5cblxuLy8gTm90ZTogRGVwcmVjYXRlZCAudmlzaWJsZS1wcmludCBhcyBvZiB2My4yLjBcblxuQGluY2x1ZGUgcmVzcG9uc2l2ZS1pbnZpc2liaWxpdHkoJy52aXNpYmxlLXByaW50Jyk7XG5cbkBtZWRpYSBwcmludCB7XG4gIEBpbmNsdWRlIHJlc3BvbnNpdmUtdmlzaWJpbGl0eSgnLnZpc2libGUtcHJpbnQnKTtcbn1cbi52aXNpYmxlLXByaW50LWJsb2NrIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuXG4gIEBtZWRpYSBwcmludCB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgfVxufVxuLnZpc2libGUtcHJpbnQtaW5saW5lIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuXG4gIEBtZWRpYSBwcmludCB7XG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XG4gIH1cbn1cbi52aXNpYmxlLXByaW50LWlubGluZS1ibG9jayB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblxuICBAbWVkaWEgcHJpbnQge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICB9XG59XG5cbkBtZWRpYSBwcmludCB7XG4gIEBpbmNsdWRlIHJlc3BvbnNpdmUtaW52aXNpYmlsaXR5KCcuaGlkZGVuLXByaW50Jyk7XG59XG4iLCIvLyBSZXNwb25zaXZlIHV0aWxpdGllc1xuXG4vL1xuLy8gTW9yZSBlYXNpbHkgaW5jbHVkZSBhbGwgdGhlIHN0YXRlcyBmb3IgcmVzcG9uc2l2ZS11dGlsaXRpZXMubGVzcy5cbi8vIFtjb252ZXJ0ZXJdICRwYXJlbnQgaGFja1xuQG1peGluIHJlc3BvbnNpdmUtdmlzaWJpbGl0eSgkcGFyZW50KSB7XG4gICN7JHBhcmVudH0ge1xuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG4gIH1cbiAgdGFibGUjeyRwYXJlbnR9ICB7IGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7IH1cbiAgdHIjeyRwYXJlbnR9ICAgICB7IGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50OyB9XG4gIHRoI3skcGFyZW50fSxcbiAgdGQjeyRwYXJlbnR9ICAgICB7IGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsgfVxufVxuXG4vLyBbY29udmVydGVyXSAkcGFyZW50IGhhY2tcbkBtaXhpbiByZXNwb25zaXZlLWludmlzaWJpbGl0eSgkcGFyZW50KSB7XG4gICN7JHBhcmVudH0ge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuIiwiLyogXG5UaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuQ29weXJpZ2h0IChjKSAyMDEzLTIwMTUgYm9vdHN0cmFwLXNlbGVjdFxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuICovXG5cbi8vIE1peGluc1xuQG1peGluIGN1cnNvci1kaXNhYmxlZCgpIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLy8gUnVsZXNcbi5ib290c3RyYXAtc2VsZWN0IHtcbiAgLyp3aWR0aDogMjIwcHhcXDk7IElFOCBhbmQgYmVsb3cqL1xuICAvL25vaW5zcGVjdGlvbiBDc3NTaG9ydGhhbmRQcm9wZXJ0eVZhbHVlXG4gIHdpZHRoOiAyMjBweCBcXDA7IC8qSUU5IGFuZCBiZWxvdyovXG5cbiAgLy8gVGhlIHNlbGVjdHBpY2tlciBidXR0b25cbiAgPiAuYnRuIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gICAgcGFkZGluZy1yaWdodDogMjVweDtcbiAgfVxuXG4gIC8vIEVycm9yIGRpc3BsYXlcbiAgLmVycm9yICYgLmJ0biB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGNvbG9yLXJlZC1lcnJvcjtcbiAgfVxuXG4gIC8vIEVycm9yIGRpc3BsYXlcbiAgLmNvbnRyb2wtZ3JvdXAuZXJyb3IgJiAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBib3JkZXItY29sb3I6ICRjb2xvci1yZWQtZXJyb3I7XG4gIH1cblxuICAmLmZpdC13aWR0aCB7XG4gICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgfVxuXG4gICY6bm90KFtjbGFzcyo9XCJjb2wtXCJdKTpub3QoW2NsYXNzKj1cImZvcm0tY29udHJvbFwiXSk6bm90KC5pbnB1dC1ncm91cC1idG4pIHtcbiAgICB3aWR0aDogJHdpZHRoLWRlZmF1bHQ7XG4gIH1cblxuICAuYnRuOmZvY3VzIHtcbiAgICBvdXRsaW5lOiB0aGluIGRvdHRlZCAjMzMzMzMzICFpbXBvcnRhbnQ7XG4gICAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yICFpbXBvcnRhbnQ7XG4gICAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XG4gIH1cbn1cblxuLmJvb3RzdHJhcC1zZWxlY3QuZm9ybS1jb250cm9sIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiBub25lO1xuXG4gICY6bm90KFtjbGFzcyo9XCJjb2wtXCJdKSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLy8gVGhlIHNlbGVjdHBpY2tlciBjb21wb25lbnRzXG4uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAge1xuICAmOm5vdCguaW5wdXQtZ3JvdXAtYnRuKSxcbiAgJltjbGFzcyo9XCJjb2wtXCJdIHtcbiAgICBmbG9hdDogbm9uZTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cblxuICAvLyBGb3JjZXMgdGhlIHB1bGwgdG8gdGhlIHJpZ2h0LCBpZiBuZWNlc3NhcnlcbiAgJixcbiAgJltjbGFzcyo9XCJjb2wtXCJdLFxuICAucm93LWZsdWlkICZbY2xhc3MqPVwiY29sLVwiXSB7XG4gICAgJi5kcm9wZG93bi1tZW51LXJpZ2h0IHtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICB9XG4gIH1cblxuICAuZm9ybS1zZWFyY2ggJixcbiAgLmZvcm0taW5saW5lICYsXG4gIC5mb3JtLWhvcml6b250YWwgJixcbiAgLmZvcm0tZ3JvdXAgJiB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG4gIC5mb3JtLWdyb3VwLWxnICAmLmZvcm0tY29udHJvbCxcbiAgLmZvcm0tZ3JvdXAtc20gICYuZm9ybS1jb250cm9sIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLy8gU2V0IHRoZSB3aWR0aCBvZiB0aGUgbGl2ZSBzZWFyY2ggKGFuZCBhbnkgb3RoZXIgZm9ybSBjb250cm9sIHdpdGhpbiBhbiBpbmxpbmUgZm9ybSlcbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zaWx2aW9tb3JldG8vYm9vdHN0cmFwLXNlbGVjdC9pc3N1ZXMvNjg1XG4gIC5mb3JtLWlubGluZSAmIC5mb3JtLWNvbnRyb2wge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLmlucHV0LWFwcGVuZCAmIHtcbiAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgfVxuXG4gIC5pbnB1dC1wcmVwZW5kICYge1xuICAgIG1hcmdpbi1yaWdodDogLTFweDtcbiAgfVxuXG4gID4gLmRpc2FibGVkIHtcbiAgICBAaW5jbHVkZSBjdXJzb3ItZGlzYWJsZWQ7XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgc2VsZWN0cGlja2VyIGJ1dHRvblxuICAuYnRuIHtcbiAgICAuZmlsdGVyLW9wdGlvbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIH1cblxuICAgIC5jYXJldCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogNDBweDtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgYm9yZGVyOiAwO1xuICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAkYnRuLWRlZmF1bHQtYm9yZGVyO1xuICAgICAgaGVpZ2h0OiAzOHB4O1xuICAgIH1cblxuICAgIC5jYXJldDpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1xcZTg2MSc7XG4gICAgICBmb250LWZhbWlseTogXCJmb250ZWxsb1wiO1xuICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgY29sb3I6ICM2NjY2NjY7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBsZWZ0OiAxMnB4O1xuICAgICAgdG9wOiA5cHg7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG5cbiAgICAmOmhvdmVyIC5jYXJldCB7XG4gICAgICBib3JkZXItY29sb3I6IGRhcmtlbigkYnRuLWRlZmF1bHQtYm9yZGVyLCAxMiUpO1xuICAgIH1cblxuICAgICY6Zm9jdXMgLmNhcmV0IHtcbiAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRidG4tZGVmYXVsdC1ib3JkZXIsIDI1JSk7XG4gICAgfVxuXG4gIH1cblxuICAmW2NsYXNzKj1cImNvbC1cIl0gLmJ0biB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAvLyBUaGUgc2VsZWN0cGlja2VyIGRyb3Bkb3duXG4gIC5kcm9wZG93bi1tZW51IHtcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgei1pbmRleDogJHppbmRleC1zZWxlY3QtZHJvcGRvd247XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcblxuICAgICYuaW5uZXIge1xuICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICB9XG5cbiAgICBsaSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICY6bm90KC5kaXNhYmxlZCkgYTpob3ZlciBzbWFsbCxcbiAgICAgICY6bm90KC5kaXNhYmxlZCkgYTpmb2N1cyBzbWFsbCxcbiAgICAgICYuYWN0aXZlOm5vdCguZGlzYWJsZWQpIGEgc21hbGwge1xuICAgICAgICBjb2xvcjogJGNvbG9yLWJsdWUtaG92ZXI7XG4gICAgICAgIGNvbG9yOiBmYWRlKCRjb2xvci1ibHVlLWhvdmVyLCA0MCUpO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkIGEge1xuICAgICAgICBAaW5jbHVkZSBjdXJzb3ItZGlzYWJsZWQ7XG4gICAgICB9XG5cbiAgICAgIGEge1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgICAgJi5vcHQge1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDIuMjVlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNwYW4uY2hlY2stbWFyayB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLnRleHQge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzbWFsbCB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMC41ZW07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm5vdGlmeSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBib3R0b206IDVweDtcbiAgICAgIHdpZHRoOiA5NiU7XG4gICAgICBtYXJnaW46IDAgMiU7XG4gICAgICBtaW4taGVpZ2h0OiAyNnB4O1xuICAgICAgcGFkZGluZzogM3B4IDVweDtcbiAgICAgIGJhY2tncm91bmQ6IHJnYigyNDUsIDI0NSwgMjQ1KTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigyMjcsIDIyNywgMjI3KTtcbiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCBmYWRlKHJnYigwLCAwLCAwKSwgNSUpO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICBvcGFjaXR5OiAwLjk7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgfVxuXG4gIC5uby1yZXN1bHRzIHtcbiAgICBwYWRkaW5nOiAzcHg7XG4gICAgYmFja2dyb3VuZDogI2Y1ZjVmNTtcbiAgICBtYXJnaW46IDAgNXB4O1xuICB9XG5cbiAgJi5maXQtd2lkdGggLmJ0biB7XG4gICAgLmZpbHRlci1vcHRpb24ge1xuICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICB9XG5cbiAgICAuY2FyZXQge1xuICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgIHRvcDogYXV0bztcbiAgICAgIG1hcmdpbi10b3A6IC0xcHg7XG4gICAgfVxuICB9XG5cbiAgJi5zaG93LXRpY2sgLmRyb3Bkb3duLW1lbnUgbGkge1xuICAgICYuc2VsZWN0ZWQgYSBzcGFuLmNoZWNrLW1hcmsge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgcmlnaHQ6IDE1cHg7XG4gICAgICBtYXJnaW4tdG9wOiA1cHg7XG4gICAgfVxuXG4gICAgYSBzcGFuLnRleHQge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAzNHB4O1xuICAgIH1cbiAgfVxufVxuXG4uYm9vdHN0cmFwLXNlbGVjdC5zaG93LW1lbnUtYXJyb3cge1xuICAmLm9wZW4gPiAuYnRuIHtcbiAgICB6LWluZGV4OiAkemluZGV4LXNlbGVjdC1kcm9wZG93biArIDE7XG4gIH1cblxuICAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICAmOmJlZm9yZSB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIGJvcmRlci1sZWZ0OiA3cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItcmlnaHQ6IDdweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDdweDtcbiAgICAgIGJvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkO1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGNvbG9yLWdyZXktYXJyb3c7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiBmYWRlKCRjb2xvci1ncmV5LWFycm93LCAyMCUpO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAtNHB4O1xuICAgICAgbGVmdDogOXB4O1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgYm9yZGVyLWxlZnQ6IDZweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1yaWdodDogNnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkIHdoaXRlO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAtNHB4O1xuICAgICAgbGVmdDogMTBweDtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgJi5kcm9wdXAgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgJjpiZWZvcmUge1xuICAgICAgYm90dG9tOiBhdXRvO1xuICAgICAgdG9wOiAtM3B4O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICAgIGJvcmRlci10b3Atd2lkdGg6IDdweDtcbiAgICAgIGJvcmRlci10b3Atc3R5bGU6IHNvbGlkO1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGNvbG9yLWdyZXktYXJyb3c7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiBmYWRlKCRjb2xvci1ncmV5LWFycm93LCAyMCUpO1xuICAgIH1cblxuICAgICY6YWZ0ZXIge1xuICAgICAgYm90dG9tOiBhdXRvO1xuICAgICAgdG9wOiAtM3B4O1xuICAgICAgYm9yZGVyLXRvcDogNnB4IHNvbGlkIHdoaXRlO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICAmLnB1bGwtcmlnaHQgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgJjpiZWZvcmUge1xuICAgICAgcmlnaHQ6IDEycHg7XG4gICAgICBsZWZ0OiBhdXRvO1xuICAgIH1cblxuICAgICY6YWZ0ZXIge1xuICAgICAgcmlnaHQ6IDEzcHg7XG4gICAgICBsZWZ0OiBhdXRvO1xuICAgIH1cbiAgfVxuXG4gICYub3BlbiA+IC5kcm9wZG93bi10b2dnbGUge1xuICAgICY6YmVmb3JlLFxuICAgICY6YWZ0ZXIge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICB9XG59XG5cbi5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cC5vcGVuIHtcblxuICAgIC5idG4gLmNhcmV0IHtcbiAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiBkYXJrZW4oJGJ0bi1kZWZhdWx0LWJvcmRlciwgMTIlKTtcbiAgICB9XG5cbiAgICAuYnRuOmhvdmVyIC5jYXJldCB7XG4gICAgICBib3JkZXItbGVmdC1jb2xvcjogZGFya2VuKCRidG4tZGVmYXVsdC1ib3JkZXIsIDI1JSk7XG4gICAgfVxuXG59XG5cbi5icy1zZWFyY2hib3gsXG4uYnMtYWN0aW9uc2JveCB7XG4gIHBhZGRpbmc6IDRweCA4cHg7XG59XG5cbi5icy1hY3Rpb25zYm94IHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gICYgLmJ0bi1ncm91cCBidXR0b24ge1xuICAgIHdpZHRoOiA1MCU7XG4gIH1cbn1cblxuLmJzLXNlYXJjaGJveCB7XG4gICYgKyAuYnMtYWN0aW9uc2JveCB7XG4gICAgcGFkZGluZzogMCA4cHggNHB4O1xuICB9XG5cbiAgJiBpbnB1dC5mb3JtLWNvbnRyb2wge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLm1vYmlsZS1kZXZpY2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuICBvcGFjaXR5OiAwO1xufVxuIiwiLyogQm9keSBzcGVjcyAqL1xuXG5ib2R5IHtcbiAgICBjb2xvcjogJHRleHQtY29sb3I7XG4gICAgYmFja2dyb3VuZDogJGJvZHktYmc7XG59XG5cblxuLyogTWVzc2FnZSB3YXJuaW5nIHVzZXJzIHRoYXQgc29tZSBmZWF0dXJlcyBtaWdodCBub3QgYmUgc3VwcG9ydGVkIGluIG9sZCBicm93c2VycyAqL1xuLmJyb3dzZXJ1cGdyYWRlIHtcbiAgbWFyZ2luOiAwLjJlbSAwO1xuICBiYWNrZ3JvdW5kOiAjY2NjO1xuICBjb2xvcjogIzAwMDtcbiAgcGFkZGluZzogMC4yZW0gMDtcbn1cbiIsIi8vIGJvd2VyOnNjc3NcbkBpbXBvcnQgXCJib3dlcl9jb21wb25lbnRzL2NvbXBhc3MtbWl4aW5zL2xpYi9jb21wYXNzL2NzczMvX3VzZXItaW50ZXJmYWNlLnNjc3NcIjtcbi8vIGVuZGJvd2VyXG5cbiAvKiBUb3BiYXIgKi9cblxuLnRvcGJhciB7XG4gIHBhZGRpbmc6IDA7XG4gIGJhY2tncm91bmQ6ICMyMjI7XG4gXG4gIC5iYW5uZXItYXJlYSB7XG4gICAgYmFja2dyb3VuZDogIzIyMjtcblxuICAgIGgxIHtcbiAgICAgIG1hcmdpbjogMCAwIDAgLTgwcHg7XG4gICAgICBwYWRkaW5nOiAwIDAgMCA4MHB4O1xuICAgICAgaGVpZ2h0OiA1NXB4O1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgdXJsKCRraW1jaGktbG9nbykgbm8tcmVwZWF0IDI0cHggM3B4O1xuICAgICAgY29sb3I6ICRoaWdobGlnaHRzLWNvbG9yO1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1ib2xkOyBcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBmb250LXNpemU6IDEuNTcxZW07XG4gICAgICBsaW5lLWhlaWdodDogNTVweDtcbiAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuICAgIH1cblxuICB9XG5cbiAgLnRhYi1hcmVhIHtcbiAgICBiYWNrZ3JvdW5kOiAkYnJhbmQtcHJpbWFyeTtcbiAgICBoZWlnaHQ6IDQwcHg7XG5cbiAgICBzcGFuLmhvc3RuYW1lIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktYWx0ZXJuYXRlO1xuICAgICAgY29sb3I6ICRoaWdobGlnaHRzLWNvbG9yO1xuICAgICAgZm9udC1zaXplOiAxM3B0O1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIHBhZGRpbmc6IDhweCAwO1xuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgIEBpbmNsdWRlIGJveC1zaXppbmcoYm9yZGVyLWJveCk7XG4gICAgfVxuXG4gICAgdWwubmF2LW1lbnUge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgIGxpc3Qtc3R5bGUtcG9zaXRpb246IGluc2lkZTtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDAgMCAwIDI0cHg7XG5cbiAgICAgIGxpIHtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICAgICBhLCAuZGlzYWJsZWQge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktYm9sZDtcbiAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICAgIGNvbG9yOiAkaGlnaGxpZ2h0cy1jb2xvcjtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgICAgZm9udC1zaXplOiAxM3B0O1xuICAgICAgICAgIHBhZGRpbmc6IDhweCA0MHB4O1xuICAgICAgICAgIG1pbi13aWR0aDogMTkwcHg7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAuZGlzYWJsZWQgeyBcbiAgICAgICAgICAgICAgY29sb3I6ICRkaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAuZGlnaXQtY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgICAuZGlnaXQtY29udGFpbmVyIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICAgICAgICAgIGhlaWdodDogMjJweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICM1NTU7XG4gICAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAjNTU1O1xuICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWJhc2U7XG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgICAgICBwYWRkaW5nOiAwIDhweDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmLmN1cnJlbnQge1xuXG4gICAgICAgICAgICAuZGlnaXQtY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH1cblxuICAgICAgICAgICYuY3VycmVudC5ob3N0cyB7IGJhY2tncm91bmQ6ICRob3N0cy1jb2xvcjsgfVxuICAgICAgICAgICYuY3VycmVudC5ndWVzdHMgeyBiYWNrZ3JvdW5kOiAkZ3Vlc3RzLWNvbG9yOyB9XG4gICAgICAgICAgJi5jdXJyZW50LnRlbXBsYXRlcyB7IGJhY2tncm91bmQ6ICR0ZW1wbGF0ZXMtY29sb3I7IH1cbiAgICAgICAgICAmLmN1cnJlbnQuc3RvcmFnZSB7IGJhY2tncm91bmQ6ICRzdG9yYWdlLWNvbG9yOyB9XG4gICAgICAgICAgJi5jdXJyZW50Lm5ldHdvcmtzIHsgYmFja2dyb3VuZDogJG5ldHdvcmtzLWNvbG9yOyB9XG4gICAgICAgICAgJi5jdXJyZW50LmFkbWluaXN0cmF0aW9uIHsgYmFja2dyb3VuZDogJGFkbWluaXN0cmF0aW9uLWNvbG9yOyB9XG5cbiAgICAgIH1cblxuICAgIH1cblxuXG4gIH1cblxuICAucGFuZWwtYWN0aW9ucy1hcmVhIHtcbiAgICBtaW4taGVpZ2h0OiA0MHB4O1xuICB9XG5cbn0iLCJAaW1wb3J0IFwiLi4vc3VwcG9ydFwiO1xuXG4vLyBUaGlzIG1peGluIHByb3ZpZGVzIGJhc2ljIHN1cHBvcnQgZm9yIENTUzMgcHJvcGVydGllcyBhbmRcbi8vIHRoZWlyIGNvcnJlc3BvbmRpbmcgZXhwZXJpbWVudGFsIENTUzIgcHJvcGVydGllcyB3aGVuXG4vLyB0aGUgaW1wbGVtZW50YXRpb25zIGFyZSBpZGVudGljYWwgZXhjZXB0IGZvciB0aGUgcHJvcGVydHlcbi8vIHByZWZpeC5cbkBtaXhpbiBleHBlcmltZW50YWwoJHByb3BlcnR5LCAkdmFsdWUsXG4gICRtb3ogICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYSxcbiAgJHdlYmtpdCAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQsXG4gICRvICAgICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itb3BlcmEsXG4gICRtcyAgICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbWljcm9zb2Z0LFxuICAka2h0bWwgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLWtodG1sLFxuICAkb2ZmaWNpYWwgOiB0cnVlXG4pIHtcbiAgQGlmICR3ZWJraXQgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLXdlYmtpdCAgICB7IC13ZWJraXQtI3skcHJvcGVydHl9IDogJHZhbHVlOyB9XG4gIEBpZiAka2h0bWwgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1raHRtbCAgICAgeyAgLWtodG1sLSN7JHByb3BlcnR5fSA6ICR2YWx1ZTsgfVxuICBAaWYgJG1veiAgICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYSAgIHsgICAgLW1vei0jeyRwcm9wZXJ0eX0gOiAkdmFsdWU7IH1cbiAgQGlmICRtcyAgICAgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1pY3Jvc29mdCB7ICAgICAtbXMtI3skcHJvcGVydHl9IDogJHZhbHVlOyB9XG4gIEBpZiAkbyAgICAgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1vcGVyYSAgICAgeyAgICAgIC1vLSN7JHByb3BlcnR5fSA6ICR2YWx1ZTsgfVxuICBAaWYgJG9mZmljaWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgICAgICAgICAjeyRwcm9wZXJ0eX0gOiAkdmFsdWU7IH1cbn1cblxuLy8gU2FtZSBhcyBleHBlcmltZW50YWwoKSwgYnV0IGZvciBjYXNlcyB3aGVuIHRoZSBwcm9wZXJ0eSBpcyB0aGUgc2FtZSBhbmQgdGhlIHZhbHVlIGlzIHZlbmRvcml6ZWRcbkBtaXhpbiBleHBlcmltZW50YWwtdmFsdWUoJHByb3BlcnR5LCAkdmFsdWUsXG4gICRtb3ogICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYSxcbiAgJHdlYmtpdCAgIDogJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci13ZWJraXQsXG4gICRvICAgICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3Itb3BlcmEsXG4gICRtcyAgICAgICA6ICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbWljcm9zb2Z0LFxuICAka2h0bWwgICAgOiAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLWtodG1sLFxuICAkb2ZmaWNpYWwgOiB0cnVlXG4pIHtcbiAgQGlmICR3ZWJraXQgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLXdlYmtpdCAgICB7ICN7JHByb3BlcnR5fSA6IC13ZWJraXQtI3skdmFsdWV9OyB9XG4gIEBpZiAka2h0bWwgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1raHRtbCAgICAgeyAjeyRwcm9wZXJ0eX0gOiAgLWtodG1sLSN7JHZhbHVlfTsgfVxuICBAaWYgJG1veiAgICAgYW5kICRleHBlcmltZW50YWwtc3VwcG9ydC1mb3ItbW96aWxsYSAgIHsgI3skcHJvcGVydHl9IDogICAgLW1vei0jeyR2YWx1ZX07IH1cbiAgQGlmICRtcyAgICAgIGFuZCAkZXhwZXJpbWVudGFsLXN1cHBvcnQtZm9yLW1pY3Jvc29mdCB7ICN7JHByb3BlcnR5fSA6ICAgICAtbXMtI3skdmFsdWV9OyB9XG4gIEBpZiAkbyAgICAgICBhbmQgJGV4cGVyaW1lbnRhbC1zdXBwb3J0LWZvci1vcGVyYSAgICAgeyAjeyRwcm9wZXJ0eX0gOiAgICAgIC1vLSN7JHZhbHVlfTsgfVxuICBAaWYgJG9mZmljaWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgI3skcHJvcGVydHl9IDogICAgICAgICAjeyR2YWx1ZX07IH1cbn1cbiIsIi8vIFVzZXIgSW50ZXJmYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhpcyBmaWxlIGNhbiBiZSBleHBhbmRlZCB0byBoYW5kbGUgYWxsIHRoZSB1c2VyIGludGVyZmFjZSBwcm9wZXJ0aWVzIGFzXG4vLyB0aGV5IGJlY29tZSBhdmFpbGFibGUgaW4gYnJvd3NlcnM6XG4vLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1dELWNzczMtdXNlcmludC0yMDAwMDIxNlxuQGltcG9ydCBcInNoYXJlZFwiO1xuXG5cbi8vIFRoaXMgcHJvcGVydHkgY29udHJvbHMgdGhlIHNlbGVjdGlvbiBtb2RlbCBhbmQgZ3JhbnVsYXJpdHkgb2YgYW4gZWxlbWVudC5cbi8vXG4vLyBAcGFyYW0gJHNlbGVjdFxuLy8gICBbIG5vbmUgfCB0ZXh0IHwgdG9nZ2xlIHwgZWxlbWVudCB8IGVsZW1lbnRzIHwgYWxsIHwgaW5oZXJpdCBdXG5AbWl4aW4gdXNlci1zZWxlY3QoJHNlbGVjdCkge1xuICAkc2VsZWN0OiB1bnF1b3RlKCRzZWxlY3QpO1xuICBAaW5jbHVkZSBleHBlcmltZW50YWwodXNlci1zZWxlY3QsICRzZWxlY3QsXG4gICAgLW1veiwgLXdlYmtpdCwgbm90KC1vKSwgbm90KC1tcyksIC1raHRtbCwgb2ZmaWNpYWxcbiAgKTtcbn1cbiIsIi5sb2dpbi1hcmVhIHtcbiAgICBtYXJnaW46IDkwcHggYXV0byAwO1xuICAgIHdpZHRoOiAzMDBweDtcblxuICAgIC5idG4tbG9naW4ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDUwcHg7IFxuICAgIH1cblxuICAgIC5jb2wtbWQtMTIsIC5jb2wtbGctMTIge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAuYm9vdHN0cmFwLXNlbGVjdCxcbiAgICAuc2VsZWN0cGlja2VyIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1saWdodDtcbiAgICAgICAgZm9udC1zaXplOiAxM3B0O1xuICAgIH1cblxuICAgIC5kcm9wZG93bi10b2dnbGUuc2VsZWN0cGlja2VyIHtcbiAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgIH1cblxuICAgIC5mb3JtLWdyb3VwIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICB9XG5cbiAgICAuZm9ybS1ncm91cDpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG5cbn1cbiIsIi5idG4ge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktYmFzZTtcbiAgICBmb250LXNpemU6IDEzcHQ7XG59XG5cbi5idG4tbG9naW4ge1xuICBAaW5jbHVkZSBidXR0b24tdmFyaWFudCgkYnRuLWxvZ2luLWNvbG9yLCAkYnRuLWxvZ2luLWJnLCAkYnRuLWxvZ2luLWJvcmRlcik7XG59IiwiLypcbiogUHJvamVjdCBLaW1jaGlcbipcbiogQ29weXJpZ2h0IElCTSwgQ29ycC4gMjAxNVxuKlxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTtcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuKlxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsXG4qIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuLmRpYWxvZy1ib3JkZXItZ3JleSB7XG4gICAgYmFja2dyb3VuZC1jbGlwOiBib3JkZXItYm94O1xuICAgIGJvcmRlcjogNnB4IHNvbGlkIHJnYmEoMTcwLDE3MCwxNzAsMC4zKTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICB0b3A6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIG1hcmdpbjogYXV0bztcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG59XG5cbi5kaWFsb2ctY29udGFpbmVyIHtcbiAgICBib3JkZXI6IDNweCBzb2xpZCAjOTk5OTk5O1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xufVxuXG4uZGlhbG9nLWNvbnRhaW5lciAuZGlhbG9nLXRpdGxlIHtcbiAgICBoZWlnaHQ6IDYwcHg7XG4gICAgcGFkZGluZzogMjBweCAwIDIwcHggMjBweDtcbiAgICBtYXJnaW46IDA7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgZm9udC1zaXplOiAyN3B4O1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbGlnaHQ7XG4gICAgZm9udC13ZWlnaHQ6IDMwMCAhaW1wb3J0YW50O1xufVxuXG4uZGlhbG9nLWNvbnRhaW5lciAuZGlhbG9nLWJvZHkge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmRpYWxvZy1jb250YWluZXIgLmRpYWxvZy1mb290ZXIge1xuICAgIGhlaWdodDogNTBweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4QUJGO1xufVxuXG4uZGlhbG9nLWNvbnRhaW5lciAuZGlhbG9nLWZvb3RlciAuZGlhbG9nLWJ1dHRvbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIHdpZHRoOiA3NXB4O1xuICAgIGhlaWdodDogMzBweDtcbiAgICBsaW5lLWhlaWdodDogMzBweDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmRpYWxvZy1jb250YWluZXIgLmRpYWxvZy1mb290ZXIgLmRpYWxvZy1idXR0b246aG92ZXJ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0VFRUVFRTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59IiwiLypcbiogUHJvamVjdCBLaW1jaGlcbipcbiogQ29weXJpZ2h0IElCTSwgQ29ycC4gMjAxNVxuKlxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTtcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuKlxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsXG4qIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuLy9cbi8vIE1vZGFsc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gLm1vZGFsLW9wZW4gICAgICAtIGJvZHkgY2xhc3MgZm9yIGtpbGxpbmcgdGhlIHNjcm9sbFxuLy8gLm1vZGFsICAgICAgICAgICAtIGNvbnRhaW5lciB0byBzY3JvbGwgd2l0aGluXG4vLyAubW9kYWwtZGlhbG9nICAgIC0gcG9zaXRpb25pbmcgc2hlbGwgZm9yIHRoZSBhY3R1YWwgbW9kYWxcbi8vIC5tb2RhbC1jb250ZW50ICAgLSBhY3R1YWwgbW9kYWwgdy8gYmcgYW5kIGNvcm5lcnMgYW5kIHNoaXRcblxuLy8gS2lsbCB0aGUgc2Nyb2xsIG9uIHRoZSBib2R5XG4ubW9kYWwtb3BlbiB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8vIENvbnRhaW5lciB0aGF0IHRoZSBtb2RhbCBzY3JvbGxzIHdpdGhpblxuLm1vZGFsIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR6aW5kZXgtbW9kYWw7XG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcblxuICAvLyBQcmV2ZW50IENocm9tZSBvbiBXaW5kb3dzIGZyb20gYWRkaW5nIGEgZm9jdXMgb3V0bGluZS4gRm9yIGRldGFpbHMsIHNlZVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvcHVsbC8xMDk1MS5cbiAgb3V0bGluZTogMDtcblxuICAvLyBXaGVuIGZhZGluZyBpbiB0aGUgbW9kYWwsIGFuaW1hdGUgaXQgdG8gc2xpZGUgZG93blxuICAmLmZhZGUgLm1vZGFsLWRpYWxvZyB7XG4gICAgQGluY2x1ZGUgdHJhbnNsYXRlKDAsIC0yNSUpO1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24tdHJhbnNmb3JtKDAuM3MgZWFzZS1vdXQpO1xuICB9XG4gICYuaW4gLm1vZGFsLWRpYWxvZyB7IEBpbmNsdWRlIHRyYW5zbGF0ZSgwLCAwKSB9XG59XG4ubW9kYWwtb3BlbiAubW9kYWwge1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi8vIFNoZWxsIGRpdiB0byBwb3NpdGlvbiB0aGUgbW9kYWwgd2l0aCBib3R0b20gcGFkZGluZ1xuLm1vZGFsLWRpYWxvZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IGF1dG87XG4gIG1hcmdpbjogMTBweDtcbiAgYm9yZGVyOiA2cHggc29saWQgJG1vZGFsLWNvbnRlbnQtZmFsbGJhY2stYm9yZGVyLWNvbG9yOyAvL29sZCBicm93c2VycyBmYWxsYmFjayAoaWU4IGV0YylcbiAgYm9yZGVyOiA2cHggc29saWQgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7ICBcbn1cblxuLy8gQWN0dWFsIG1vZGFsXG4ubW9kYWwtY29udGVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJG1vZGFsLWNvbnRlbnQtYmc7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGJvcmRlcjogM3B4IHNvbGlkICM5OTk7ICAgXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3cobm9uZSAhaW1wb3J0YW50KTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgb3V0bGluZTogMDtcbn1cblxuXG4vLyBNb2RhbCBiYWNrZ3JvdW5kXG4ubW9kYWwtYmFja2Ryb3Age1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogJHppbmRleC1tb2RhbC1iYWNrZ3JvdW5kO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkbW9kYWwtYmFja2Ryb3AtYmc7XG4gIC8vIEZhZGUgZm9yIGJhY2tkcm9wXG4gICYuZmFkZSB7IEBpbmNsdWRlIG9wYWNpdHkoMCk7IH1cbiAgJi5pbiB7IEBpbmNsdWRlIG9wYWNpdHkoJG1vZGFsLWJhY2tkcm9wLW9wYWNpdHkpOyB9XG59XG5cbi8vIE1vZGFsIGhlYWRlclxuLy8gVG9wIHNlY3Rpb24gb2YgdGhlIG1vZGFsIHcvIHRpdGxlIGFuZCBkaXNtaXNzXG4ubW9kYWwtaGVhZGVyIHtcbiAgcGFkZGluZzogJG1vZGFsLXRpdGxlLXBhZGRpbmc7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvcjtcbiAgbWluLWhlaWdodDogKCRtb2RhbC10aXRsZS1wYWRkaW5nICsgJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0KTtcbn1cbi8vIENsb3NlIGljb25cbi5tb2RhbC1oZWFkZXIgLmNsb3NlIHtcbiAgbWFyZ2luLXRvcDogLTJweDtcbn1cblxuLy8gVGl0bGUgdGV4dCB3aXRoaW4gaGVhZGVyXG4ubW9kYWwtdGl0bGUge1xuICAgIG1hcmdpbjogMDtcbiAgICBsaW5lLWhlaWdodDogJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0O1xuICAgIGZvbnQtc2l6ZTogMjdweDtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LWxpZ2h0O1xuICAgIGZvbnQtd2VpZ2h0OiAzMDAgIWltcG9ydGFudDtcbn1cblxuLy8gTW9kYWwgYm9keVxuLy8gV2hlcmUgYWxsIG1vZGFsIGNvbnRlbnQgcmVzaWRlcyAoc2libGluZyBvZiAubW9kYWwtaGVhZGVyIGFuZCAubW9kYWwtZm9vdGVyKVxuLm1vZGFsLWJvZHkge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6ICRtb2RhbC1pbm5lci1wYWRkaW5nO1xufVxuXG4vLyBGb290ZXIgKGZvciBhY3Rpb25zKVxuLm1vZGFsLWZvb3RlciB7XG4gIHBhZGRpbmc6ICRtb2RhbC1pbm5lci1wYWRkaW5nO1xuICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XG4gIGJvcmRlci10b3A6IDA7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG4gIEBpbmNsdWRlIGNsZWFyZml4OyAvLyBjbGVhciBpdCBpbiBjYXNlIGZvbGtzIHVzZSAucHVsbC0qIGNsYXNzZXMgb24gYnV0dG9uc1xuXG4gIC5idG4ge1xuICAgIHBhZGRpbmc6IDZweCAxMnB4O1xuICAgIG1pbi13aWR0aDogNzVweDtcbiAgICB9XG5cbiAgLy8gUHJvcGVybHkgc3BhY2Ugb3V0IGJ1dHRvbnNcbiAgLmJ0biArIC5idG4ge1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMDsgLy8gYWNjb3VudCBmb3IgaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB3aGljaCBnZXRzIHRoZSBib3R0b20gbWFyZ2luIGxpa2UgYWxsIG90aGVyIGlucHV0c1xuICB9XG4gIC8vIGJ1dCBvdmVycmlkZSB0aGF0IGZvciBidXR0b24gZ3JvdXBzXG4gIC5idG4tZ3JvdXAgLmJ0biArIC5idG4ge1xuICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICB9XG4gIC8vIGFuZCBvdmVycmlkZSBpdCBmb3IgYmxvY2sgYnV0dG9ucyBhcyB3ZWxsXG4gIC5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxufVxuXG4vLyBNZWFzdXJlIHNjcm9sbGJhciB3aWR0aCBmb3IgcGFkZGluZyBib2R5IGR1cmluZyBtb2RhbCBzaG93L2hpZGVcbi5tb2RhbC1zY3JvbGxiYXItbWVhc3VyZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtOTk5OXB4O1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiA1MHB4O1xuICBvdmVyZmxvdzogc2Nyb2xsO1xufVxuXG4vLyBTY2FsZSB1cCB0aGUgbW9kYWxcbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLXNtLW1pbikge1xuICAvLyBBdXRvbWF0aWNhbGx5IHNldCBtb2RhbCdzIHdpZHRoIGZvciBsYXJnZXIgdmlld3BvcnRzXG4gIC5tb2RhbC1kaWFsb2cge1xuICAgIHdpZHRoOiAkbW9kYWwtbWQ7XG4gICAgbWFyZ2luOiAzMHB4IGF1dG87XG4gIH1cbiAgLm1vZGFsLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coMCA1cHggMTVweCByZ2JhKDAsMCwwLC41KSk7XG4gIH1cblxuICAvLyBNb2RhbCBzaXplc1xuICAubW9kYWwtc20geyB3aWR0aDogJG1vZGFsLXNtOyB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAkc2NyZWVuLW1kLW1pbikge1xuICAubW9kYWwtbGcgeyB3aWR0aDogJG1vZGFsLWxnOyB9XG59XG5cbi5tb2RhbCB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHsgXG4gIC5tb2RhbDpiZWZvcmUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxufVxuXG4ubW9kYWwtZGlhbG9nIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufSIsIi8qXG4qIFByb2plY3QgS2ltY2hpXG4qXG4qIENvcHlyaWdodCBJQk0sIENvcnAuIDIwMTVcbipcbiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICdMaWNlbnNlJyk7XG4qIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4qXG4qICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbipcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLFxuKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cblxuLy9cbi8vIE1lbnUtRmxhdCBEcm9wLURvd25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIERyb3Bkb3duIGFycm93L2NhcmV0XG5cbi5tZW51LWZsYXQge1xuXG4gICAgLmJ0biB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRraW1jaGktZHJvcGRvd24gIWltcG9ydGFudDtcbiAgICAgICAgbWluLXdpZHRoOiAxNjBweDtcbiAgICAgICAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktYm9sZDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLWJ0bjtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBoZWlnaHQ6IDQwcHg7XG4gICAgICAgIHBhZGRpbmc6IDRweCA0NXB4IDVweCAzOHB4O1xuXG4gICAgICAgICYgPiBpIHtcbiAgICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICAgICAgICB3aWR0aDogMjZweDtcbiAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDZweDtcbiAgICAgICAgfVxuXG4gICAgICAgICYgPiBpOmJlZm9yZSB7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNDBweDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgLmNhcmV0IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm9yZGVyLXRvcDogMCBcXDk7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgIGJvcmRlci1sZWZ0OiAwO1xuXG4gICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICBmb250LWZhbWlseTogXCJmb250ZWxsb1wiO1xuICAgICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgICAgIHNwZWFrOiBub25lO1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBpbmhlcml0O1xuICAgICAgICAgICAgd2lkdGg6IDEuMmVtO1xuICAgICAgICAgICAgaGVpZ2h0OiAxLjJlbTtcbiAgICAgICAgICAgIG1hcmdpbjogLjVlbTtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGZvbnQtdmFyaWFudDogbm9ybWFsO1xuICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMmVtO1xuICAgICAgICAgICAgY29udGVudDogJ1xcZTg2MSc7XG4gICAgICB9XG5cbiAgICB9XG5cblxuXG4gICAgLy8gVGhlIGRyb3Bkb3duIHdyYXBwZXIgKGRpdilcbiAgICAmLmRyb3B1cCxcbiAgICAmLmRyb3Bkb3duIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG5cbiAgICAvLyBQcmV2ZW50IHRoZSBmb2N1cyBvbiB0aGUgZHJvcGRvd24gdG9nZ2xlIHdoZW4gY2xvc2luZyBkcm9wZG93bnNcbiAgICAuZHJvcGRvd24tdG9nZ2xlOmZvY3VzIHtcbiAgICAgIG91dGxpbmU6IDA7XG4gICAgfVxuXG4gICAgLy8gVGhlIGRyb3Bkb3duIG1lbnUgKHVsKVxuICAgIC5kcm9wZG93bi1tZW51IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMTAwJTtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICB6LWluZGV4OiAkemluZGV4LWRyb3Bkb3duO1xuICAgICAgZGlzcGxheTogbm9uZTsgLy8gbm9uZSBieSBkZWZhdWx0LCBidXQgYmxvY2sgb24gXCJvcGVuXCIgb2YgdGhlIG1lbnVcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgbWluLXdpZHRoOiAxNjBweDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDA7IC8vIG92ZXJyaWRlIGRlZmF1bHQgdWxcbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtYnRuO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDsgLy8gRW5zdXJlcyBwcm9wZXIgYWxpZ25tZW50IGlmIHBhcmVudCBoYXMgaXQgY2hhbmdlZCAoZS5nLiwgbW9kYWwgZm9vdGVyKVxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1lbnUtZmxhdC1kcm9wZG93bi1iZztcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICBAaW5jbHVkZSBib3gtc2hhZG93KG5vbmUgIWltcG9ydGFudCk7XG4gICAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuXG4gICAgICAgICAgLy8gQWxpZ25zIHRoZSBkcm9wZG93biBtZW51IHRvIHJpZ2h0XG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBEZXByZWNhdGVkIGFzIG9mIDMuMS4wIGluIGZhdm9yIG9mIGAuZHJvcGRvd24tbWVudS1bZGlyXWBcbiAgICAgICAgICAmLnB1bGwtcmlnaHQge1xuICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERpdmlkZXJzIChiYXNpY2FsbHkgYW4gaHIpIHdpdGhpbiB0aGUgZHJvcGRvd25cbiAgICAgICAgICAuZGl2aWRlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBuYXYtZGl2aWRlcigkbWVudS1mbGF0LWRyb3Bkb3duLWRpdmlkZXItYmcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgID4gbGkgPiBhIHtcbiAgICAgICAgICAgICAgLy9ib3JkZXItdG9wOiAxcHggc29saWQgJG1lbnUtZmxhdC1kcm9wZG93bi1kaXZpZGVyLWJnO1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRtZW51LWZsYXQtZHJvcGRvd24tYm9yZGVyO1xuICAgICAgICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdyhpbnNldCAwcHggMXB4IDBweCAwcHggJG1lbnUtZmxhdC1kcm9wZG93bi1kaXZpZGVyLWJnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICA+IGxpOmZpcnN0LWNoaWxkID4gYSB7XG4gICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJG1lbnUtZmxhdC1kcm9wZG93bi1iZztcbiAgICAgICAgICAgIEBpbmNsdWRlIGJveC1zaGFkb3cobm9uZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPiBsaS5jcml0aWNhbDpsYXN0LWNoaWxkID4gYSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBib3gtc2hhZG93KG5vbmUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIExpbmtzIHdpdGhpbiB0aGUgZHJvcGRvd24gbWVudVxuICAgICAgICAgID4gbGkgPiBhIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgcGFkZGluZzogNHB4IDZweDtcbiAgICAgICAgICAgIGNsZWFyOiBib3RoO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQtbWVudS1mbGF0O1xuICAgICAgICAgICAgY29sb3I6ICRtZW51LWZsYXQtdGV4dDtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7IC8vIHByZXZlbnQgbGlua3MgZnJvbSByYW5kb21seSBicmVha2luZyBvbnRvIG5ldyBsaW5lc1xuXG4gICAgICAgICAgICAgICAgPiBpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAyMnB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyNnB4O1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gSG92ZXIvRm9jdXMgc3RhdGVcbiAgICAuZHJvcGRvd24tbWVudSA+IGxpID4gYSB7XG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgY29sb3I6ICRtZW51LWZsYXQtZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1lbnUtZmxhdC1kcm9wZG93bi1saW5rLWhvdmVyLWJnO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFjdGl2ZSBzdGF0ZVxuICAgIC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGEge1xuICAgICAgJixcbiAgICAgICY6aG92ZXIsXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRtZW51LWZsYXQtZHJvcGRvd24tbGluay1hY3RpdmUtY29sb3I7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgb3V0bGluZTogMDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJG1lbnUtZmxhdC1kcm9wZG93bi1saW5rLWFjdGl2ZS1iZztcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIC5kcm9wZG93bi1tZW51ID4gbGkuY3JpdGljYWwgPiBhIHtcbiAgICAgICAgYmFja2dyb3VuZDogJG1lbnUtZmxhdC1kcm9wZG93bi1jcml0aWNhbC1iZztcbiAgICB9XG5cbiAgICAvLyBEaXNhYmxlZCBzdGF0ZVxuICAgIC8vXG4gICAgLy8gR3JheSBvdXQgdGV4dCBhbmQgZW5zdXJlIHRoZSBob3Zlci9mb2N1cyBzdGF0ZSByZW1haW5zIGdyYXlcblxuICAgIC5kcm9wZG93bi1tZW51ID4gLmRpc2FibGVkID4gYSB7XG4gICAgICAmLFxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJGRyb3Bkb3duLWxpbmstZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG5cbiAgICAgIC8vIE51a2UgaG92ZXIvZm9jdXMgZWZmZWN0c1xuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOyAvLyBSZW1vdmUgQ1NTIGdyYWRpZW50XG4gICAgICAgIEBpbmNsdWRlIHJlc2V0LWZpbHRlcjtcbiAgICAgICAgY3Vyc29yOiAkY3Vyc29yLWRpc2FibGVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9wZW4gc3RhdGUgZm9yIHRoZSBkcm9wZG93blxuICAgICYub3BlbiB7XG5cbiAgICAgICAgLmJ0biB7XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgfVxuXG4gICAgICAvLyBTaG93IHRoZSBtZW51XG4gICAgICA+IC5kcm9wZG93bi1tZW51IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG5cbiAgICAgIC5jYXJldCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICMzYTM5M2I7XG4gICAgICB9XG5cbiAgICAgIC5jYXJldDpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnXFxlODY0JztcbiAgICAgIH1cblxuICAgICAgLy8gUmVtb3ZlIHRoZSBvdXRsaW5lIHdoZW4gOmZvY3VzIGlzIHRyaWdnZXJlZFxuICAgICAgPiBhIHtcbiAgICAgICAgb3V0bGluZTogMDtcbiAgICAgIH1cbiAgICB9XG5cbn1cblxuLy8gTWVudSBwb3NpdGlvbmluZ1xuLy9cbi8vIEFkZCBleHRyYSBjbGFzcyB0byBgLmRyb3Bkb3duLW1lbnVgIHRvIGZsaXAgdGhlIGFsaWdubWVudCBvZiB0aGUgZHJvcGRvd25cbi8vIG1lbnUgd2l0aCB0aGUgcGFyZW50LlxuLmRyb3Bkb3duLW1lbnUtcmlnaHQge1xuICBsZWZ0OiBhdXRvOyAvLyBSZXNldCB0aGUgZGVmYXVsdCBmcm9tIGAuZHJvcGRvd24tbWVudWBcbiAgcmlnaHQ6IDA7XG59XG4vLyBXaXRoIHYzLCB3ZSBlbmFibGVkIGF1dG8tZmxpcHBpbmcgaWYgeW91IGhhdmUgYSBkcm9wZG93biB3aXRoaW4gYSByaWdodFxuLy8gYWxpZ25lZCBuYXYgY29tcG9uZW50LiBUbyBlbmFibGUgdGhlIHVuZG9pbmcgb2YgdGhhdCwgd2UgcHJvdmlkZSBhbiBvdmVycmlkZVxuLy8gdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBkcm9wZG93biBtZW51IGFsaWdubWVudC5cbi8vXG4vLyBUaGlzIGlzIG9ubHkgZm9yIGxlZnQtYWxpZ25pbmcgYSBkcm9wZG93biBtZW51IHdpdGhpbiBhIGAubmF2YmFyLXJpZ2h0YCBvclxuLy8gYC5wdWxsLXJpZ2h0YCBuYXYgY29tcG9uZW50LlxuLmRyb3Bkb3duLW1lbnUtbGVmdCB7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiBhdXRvO1xufVxuXG4vLyBEcm9wZG93biBzZWN0aW9uIGhlYWRlcnNcbi5kcm9wZG93bi1oZWFkZXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogM3B4IDIwcHg7XG4gIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlO1xuICBjb2xvcjogJGRyb3Bkb3duLWhlYWRlci1jb2xvcjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgLy8gYXMgd2l0aCA+IGxpID4gYVxufVxuXG4vLyBCYWNrZHJvcCB0byBjYXRjaCBib2R5IGNsaWNrcyBvbiBtb2JpbGUsIGV0Yy5cbi5kcm9wZG93bi1iYWNrZHJvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgdG9wOiAwO1xuICB6LWluZGV4OiAoJHppbmRleC1kcm9wZG93biAtIDEwKTtcbn1cblxuLy8gUmlnaHQgYWxpZ25lZCBkcm9wZG93bnNcbi5wdWxsLXJpZ2h0ID4gLmRyb3Bkb3duLW1lbnUge1xuICByaWdodDogMDtcbiAgbGVmdDogYXV0bztcbn1cblxuLy8gQWxsb3cgZm9yIGRyb3Bkb3ducyB0byBnbyBib3R0b20gdXAgKGFrYSwgZHJvcHVwLW1lbnUpXG4vL1xuLy8gSnVzdCBhZGQgLmRyb3B1cCBhZnRlciB0aGUgc3RhbmRhcmQgLmRyb3Bkb3duIGNsYXNzIGFuZCB5b3UncmUgc2V0LCBicm8uXG4vLyBUT0RPOiBhYnN0cmFjdCB0aGlzIHNvIHRoYXQgdGhlIG5hdmJhciBmaXhlZCBzdHlsZXMgYXJlIG5vdCBwbGFjZWQgaGVyZT9cblxuLmRyb3B1cCxcbi5uYXZiYXItZml4ZWQtYm90dG9tIC5kcm9wZG93biB7XG4gIC8vIFJldmVyc2UgdGhlIGNhcmV0XG4gIC5jYXJldCB7XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgICBib3JkZXItYm90dG9tOiAkY2FyZXQtd2lkdGgtYmFzZSBkYXNoZWQ7XG4gICAgYm9yZGVyLWJvdHRvbTogJGNhcmV0LXdpZHRoLWJhc2Ugc29saWQgXFw5OyAvLyBJRThcbiAgICBjb250ZW50OiBcIlwiO1xuICB9XG4gIC8vIERpZmZlcmVudCBwb3NpdGlvbmluZyBmb3IgYm90dG9tIHVwIG1lbnVcbiAgLmRyb3Bkb3duLW1lbnUge1xuICAgIHRvcDogYXV0bztcbiAgICBib3R0b206IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICB9XG59XG5cblxuLy8gQ29tcG9uZW50IGFsaWdubWVudFxuLy9cbi8vIFJlaXRlcmF0ZSBwZXIgbmF2YmFyLmxlc3MgYW5kIHRoZSBtb2RpZmllZCBjb21wb25lbnQgYWxpZ25tZW50IHRoZXJlLlxuXG5AbWVkaWEgKG1pbi13aWR0aDogJGdyaWQtZmxvYXQtYnJlYWtwb2ludCkge1xuICAubmF2YmFyLXJpZ2h0IHtcbiAgICAuZHJvcGRvd24tbWVudSB7XG4gICAgICByaWdodDogMDsgbGVmdDogYXV0bztcbiAgICB9XG4gICAgLy8gTmVjZXNzYXJ5IGZvciBvdmVycmlkZXMgb2YgdGhlIGRlZmF1bHQgcmlnaHQgYWxpZ25lZCBtZW51LlxuICAgIC8vIFdpbGwgcmVtb3ZlIGNvbWUgdjQgaW4gYWxsIGxpa2VsaWhvb2QuXG4gICAgLmRyb3Bkb3duLW1lbnUtbGVmdCB7XG4gICAgICBsZWZ0OiAwOyByaWdodDogYXV0bztcbiAgICB9XG4gIH1cbn1cbiIsIi5ob3N0cyB7XG5cbiAgICAvKiBCb290c3RyYXAgTW9kYWwqL1xuXG4gICAgLm1vZGFsLWZvb3RlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRob3N0cy1jb2xvcjtcbiAgICB9XG5cbn0iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= */
\ No newline at end of file
diff --git a/ui/new-ui-samples/css/menu-flat.css b/ui/new-ui-samples/css/menu-flat.css
new file mode 100644
index 0000000..7621201
--- /dev/null
+++ b/ui/new-ui-samples/css/menu-flat.css
@@ -0,0 +1,179 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.menu-content {
+ position: relative;
+ height: 35px;
+ width: 170px;
+}
+
+.menu-box {
+ width: 100%;
+ height: 30px;
+ border-radius: 3px 3px 0 3px;
+ cursor: pointer;
+ vertical-align: middle;
+ background: #4E4D4F;
+ color: #EDEDED;
+ float: right;
+ position: relative;
+ padding-bottom: 5px;
+}
+
+.menu-label {
+ position: relative;
+}
+
+.menu-icon-front,
+.list-icon-front {
+ position: relative;
+ font-size: 17px;
+ line-height: 32px;
+ padding-right: 10px;
+ padding-left: 5px;
+ color: #EDEDED;
+}
+
+.menu-icon {
+ position: relative;
+ float: right;
+ line-height: 35px;
+ padding-right: 10px;
+ padding-left: 10px;
+ color: #CFCFCF;
+ font-size: 10px;
+ border-top-right-radius: 3px;
+}
+
+.menu-container {
+ border: 1px solid #999999;
+ width: 100px;
+}
+
+.menu-list {
+ position: absolute;
+ z-index: 3;
+ float: right;
+ width: 100%;
+ top: 35px;
+ padding-left: 0;
+ cursor: pointer;
+ background: #3A393B;
+ margin: 0;
+}
+
+.menu-list li {
+ list-style: none;
+ position: relative;
+ color: #EDEDED;
+ border-top: 1px groove black;
+}
+
+.menu-list li:first-child {
+ border: none;
+}
+
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.menu-content {
+ position: relative;
+ height: 35px;
+ width: 170px;
+}
+
+.menu-box {
+ width: 100%;
+ height: 30px;
+ border-radius: 3px 3px 0 3px;
+ cursor: pointer;
+ vertical-align: middle;
+ background: #4E4D4F;
+ color: #EDEDED;
+ float: right;
+ position: relative;
+ padding-bottom: 5px;
+}
+
+.menu-label {
+ position: relative;
+}
+
+.menu-icon-front,
+.list-icon-front {
+ position: relative;
+ font-size: 17px;
+ line-height: 32px;
+ padding-right: 10px;
+ padding-left: 5px;
+ color: #EDEDED;
+}
+
+.menu-icon {
+ position: relative;
+ float: right;
+ line-height: 35px;
+ padding-right: 10px;
+ padding-left: 10px;
+ color: #CFCFCF;
+ font-size: 10px;
+ border-top-right-radius: 3px;
+}
+
+.menu-container {
+ border: 1px solid #999999;
+ width: 100px;
+}
+
+.menu-list {
+ position: absolute;
+ z-index: 3;
+ float: right;
+ width: 100%;
+ top: 35px;
+ padding-left: 0;
+ cursor: pointer;
+ background: #3A393B;
+ margin: 0;
+}
+
+.menu-list li {
+ list-style: none;
+ position: relative;
+ color: #EDEDED;
+ border-top: 1px groove black;
+}
+
+.menu-list li:first-child {
+ border: none;
+}
diff --git a/ui/new-ui-samples/css/radio-flat.css b/ui/new-ui-samples/css/radio-flat.css
new file mode 100644
index 0000000..752db90
--- /dev/null
+++ b/ui/new-ui-samples/css/radio-flat.css
@@ -0,0 +1,60 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ .radio-label {
+ position: relative;
+ cursor: pointer;
+ }
+
+ .radio-content {
+ margin-right: 10px;
+ }
+
+ .inline-radio {
+ display: inline-block;
+ }
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ .radio-label {
+ position: relative;
+ cursor: pointer;
+ }
+
+ .radio-content {
+ margin-right: 10px;
+ }
+
+ .inline-radio {
+ display: inline-block;
+ }
\ No newline at end of file
diff --git a/ui/new-ui-samples/css/selectmenu-flat.css b/ui/new-ui-samples/css/selectmenu-flat.css
new file mode 100644
index 0000000..fd55b86
--- /dev/null
+++ b/ui/new-ui-samples/css/selectmenu-flat.css
@@ -0,0 +1,177 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT 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-content {
+ position: relative;
+ height: 30px;
+ width: 170px;
+}
+
+.selected-box {
+ width: 75%;
+ height: 30px;
+ border: 1px solid #d8d8d8;
+ border-radius: 3px;
+ cursor: pointer;
+ background: #FFFFFF;
+ float: right;
+}
+
+.select-val {
+ display: none;
+}
+
+.select-label {
+ line-height: 32px;
+ vertical-align: middle;
+ position: relative;
+ margin-left: 20px;
+}
+
+.select-icon {
+ position: relative;
+ float: right;
+ line-height: 30px;
+ vertical-align: middle;
+ padding-right: 10px;
+ padding-left: 10px;
+ color: #555555;
+ font-size: 10px;
+}
+
+.select-icon:hover {
+ background: #FCFCFC;
+}
+
+.selectmenu-opt {
+ background: #FFFFFF;
+}
+
+.selectmenu-list {
+ border: 1px solid #d8d8d8;
+ width: 99%;
+ position: absolute;
+ top: 31px;
+ cursor: pointer;
+ padding: 0;
+ margin: 0;
+}
+
+.selectmenu-list li {
+ list-style: none;
+ position: relative;
+ height: 20px;
+ padding: 5px 0 5px 20px;
+ line-height: 21px;
+ vertical-align: middle;
+ border-bottom: 1px solid #d8d8d8;
+ z-index: 3;
+}
+
+.selectmenu-opt:hover {
+ background: #FCFCFC;
+}
+
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT 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-content {
+ position: relative;
+ height: 30px;
+ width: 170px;
+}
+
+.selected-box {
+ width: 75%;
+ height: 30px;
+ border: 1px solid #d8d8d8;
+ border-radius: 3px;
+ cursor: pointer;
+ background: #FFFFFF;
+ float: right;
+}
+
+.select-val {
+ display: none;
+}
+
+.select-label {
+ line-height: 32px;
+ vertical-align: middle;
+ position: relative;
+ margin-left: 20px;
+}
+
+.select-icon {
+ position: relative;
+ float: right;
+ line-height: 30px;
+ vertical-align: middle;
+ padding-right: 10px;
+ padding-left: 10px;
+ color: #555555;
+ font-size: 10px;
+}
+
+.select-icon:hover {
+ background: #FCFCFC;
+}
+
+.selectmenu-opt {
+ background: #FFFFFF;
+}
+
+.selectmenu-list {
+ border: 1px solid #d8d8d8;
+ width: 99%;
+ position: absolute;
+ top: 31px;
+ cursor: pointer;
+ padding: 0;
+ margin: 0;
+}
+
+.selectmenu-list li {
+ list-style: none;
+ position: relative;
+ height: 20px;
+ padding: 5px 0 5px 20px;
+ line-height: 21px;
+ vertical-align: middle;
+ border-bottom: 1px solid #d8d8d8;
+ z-index: 3;
+}
+
+.selectmenu-opt:hover {
+ background: #FCFCFC;
+}
diff --git a/ui/new-ui-samples/css/textbox-flat.css b/ui/new-ui-samples/css/textbox-flat.css
new file mode 100644
index 0000000..ef13afd
--- /dev/null
+++ b/ui/new-ui-samples/css/textbox-flat.css
@@ -0,0 +1,44 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ .textbox-container {
+ border: 1px solid #CCC;
+ border-radius: 3px;
+ }
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ .textbox-container {
+ border: 1px solid #CCC;
+ border-radius: 3px;
+ }
\ No newline at end of file
diff --git a/ui/new-ui-samples/css/vendor.css b/ui/new-ui-samples/css/vendor.css
new file mode 100644
index 0000000..2dcdc22
--- /dev/null
+++ b/ui/new-ui-samples/css/vendor.css
@@ -0,0 +1,1801 @@
+/*!
+ * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+/* FONT PATH
+ * -------------------------- */
+@font-face {
+ font-family: 'FontAwesome';
+ src: url('../fonts/fontawesome-webfont.eot?v=4.3.0');
+ src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg');
+ font-weight: normal;
+ font-style: normal;
+}
+.fa {
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ transform: translate(0, 0);
+}
+/* makes the font 33% larger relative to the icon container */
+.fa-lg {
+ font-size: 1.33333333em;
+ line-height: 0.75em;
+ vertical-align: -15%;
+}
+.fa-2x {
+ font-size: 2em;
+}
+.fa-3x {
+ font-size: 3em;
+}
+.fa-4x {
+ font-size: 4em;
+}
+.fa-5x {
+ font-size: 5em;
+}
+.fa-fw {
+ width: 1.28571429em;
+ text-align: center;
+}
+.fa-ul {
+ padding-left: 0;
+ margin-left: 2.14285714em;
+ list-style-type: none;
+}
+.fa-ul > li {
+ position: relative;
+}
+.fa-li {
+ position: absolute;
+ left: -2.14285714em;
+ width: 2.14285714em;
+ top: 0.14285714em;
+ text-align: center;
+}
+.fa-li.fa-lg {
+ left: -1.85714286em;
+}
+.fa-border {
+ padding: .2em .25em .15em;
+ border: solid 0.08em #eeeeee;
+ border-radius: .1em;
+}
+.pull-right {
+ float: right;
+}
+.pull-left {
+ float: left;
+}
+.fa.pull-left {
+ margin-right: .3em;
+}
+.fa.pull-right {
+ margin-left: .3em;
+}
+.fa-spin {
+ -webkit-animation: fa-spin 2s infinite linear;
+ animation: fa-spin 2s infinite linear;
+}
+.fa-pulse {
+ -webkit-animation: fa-spin 1s infinite steps(8);
+ animation: fa-spin 1s infinite steps(8);
+}
+@-webkit-keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+@keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+.fa-rotate-90 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
+.fa-rotate-180 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg);
+}
+.fa-rotate-270 {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
+ -webkit-transform: rotate(270deg);
+ -ms-transform: rotate(270deg);
+ transform: rotate(270deg);
+}
+.fa-flip-horizontal {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
+ -webkit-transform: scale(-1, 1);
+ -ms-transform: scale(-1, 1);
+ transform: scale(-1, 1);
+}
+.fa-flip-vertical {
+ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
+ -webkit-transform: scale(1, -1);
+ -ms-transform: scale(1, -1);
+ transform: scale(1, -1);
+}
+:root .fa-rotate-90,
+:root .fa-rotate-180,
+:root .fa-rotate-270,
+:root .fa-flip-horizontal,
+:root .fa-flip-vertical {
+ filter: none;
+}
+.fa-stack {
+ position: relative;
+ display: inline-block;
+ width: 2em;
+ height: 2em;
+ line-height: 2em;
+ vertical-align: middle;
+}
+.fa-stack-1x,
+.fa-stack-2x {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ text-align: center;
+}
+.fa-stack-1x {
+ line-height: inherit;
+}
+.fa-stack-2x {
+ font-size: 2em;
+}
+.fa-inverse {
+ color: #ffffff;
+}
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+ readers do not read off random characters that represent icons */
+.fa-glass:before {
+ content: "\f000";
+}
+.fa-music:before {
+ content: "\f001";
+}
+.fa-search:before {
+ content: "\f002";
+}
+.fa-envelope-o:before {
+ content: "\f003";
+}
+.fa-heart:before {
+ content: "\f004";
+}
+.fa-star:before {
+ content: "\f005";
+}
+.fa-star-o:before {
+ content: "\f006";
+}
+.fa-user:before {
+ content: "\f007";
+}
+.fa-film:before {
+ content: "\f008";
+}
+.fa-th-large:before {
+ content: "\f009";
+}
+.fa-th:before {
+ content: "\f00a";
+}
+.fa-th-list:before {
+ content: "\f00b";
+}
+.fa-check:before {
+ content: "\f00c";
+}
+.fa-remove:before,
+.fa-close:before,
+.fa-times:before {
+ content: "\f00d";
+}
+.fa-search-plus:before {
+ content: "\f00e";
+}
+.fa-search-minus:before {
+ content: "\f010";
+}
+.fa-power-off:before {
+ content: "\f011";
+}
+.fa-signal:before {
+ content: "\f012";
+}
+.fa-gear:before,
+.fa-cog:before {
+ content: "\f013";
+}
+.fa-trash-o:before {
+ content: "\f014";
+}
+.fa-home:before {
+ content: "\f015";
+}
+.fa-file-o:before {
+ content: "\f016";
+}
+.fa-clock-o:before {
+ content: "\f017";
+}
+.fa-road:before {
+ content: "\f018";
+}
+.fa-download:before {
+ content: "\f019";
+}
+.fa-arrow-circle-o-down:before {
+ content: "\f01a";
+}
+.fa-arrow-circle-o-up:before {
+ content: "\f01b";
+}
+.fa-inbox:before {
+ content: "\f01c";
+}
+.fa-play-circle-o:before {
+ content: "\f01d";
+}
+.fa-rotate-right:before,
+.fa-repeat:before {
+ content: "\f01e";
+}
+.fa-refresh:before {
+ content: "\f021";
+}
+.fa-list-alt:before {
+ content: "\f022";
+}
+.fa-lock:before {
+ content: "\f023";
+}
+.fa-flag:before {
+ content: "\f024";
+}
+.fa-headphones:before {
+ content: "\f025";
+}
+.fa-volume-off:before {
+ content: "\f026";
+}
+.fa-volume-down:before {
+ content: "\f027";
+}
+.fa-volume-up:before {
+ content: "\f028";
+}
+.fa-qrcode:before {
+ content: "\f029";
+}
+.fa-barcode:before {
+ content: "\f02a";
+}
+.fa-tag:before {
+ content: "\f02b";
+}
+.fa-tags:before {
+ content: "\f02c";
+}
+.fa-book:before {
+ content: "\f02d";
+}
+.fa-bookmark:before {
+ content: "\f02e";
+}
+.fa-print:before {
+ content: "\f02f";
+}
+.fa-camera:before {
+ content: "\f030";
+}
+.fa-font:before {
+ content: "\f031";
+}
+.fa-bold:before {
+ content: "\f032";
+}
+.fa-italic:before {
+ content: "\f033";
+}
+.fa-text-height:before {
+ content: "\f034";
+}
+.fa-text-width:before {
+ content: "\f035";
+}
+.fa-align-left:before {
+ content: "\f036";
+}
+.fa-align-center:before {
+ content: "\f037";
+}
+.fa-align-right:before {
+ content: "\f038";
+}
+.fa-align-justify:before {
+ content: "\f039";
+}
+.fa-list:before {
+ content: "\f03a";
+}
+.fa-dedent:before,
+.fa-outdent:before {
+ content: "\f03b";
+}
+.fa-indent:before {
+ content: "\f03c";
+}
+.fa-video-camera:before {
+ content: "\f03d";
+}
+.fa-photo:before,
+.fa-image:before,
+.fa-picture-o:before {
+ content: "\f03e";
+}
+.fa-pencil:before {
+ content: "\f040";
+}
+.fa-map-marker:before {
+ content: "\f041";
+}
+.fa-adjust:before {
+ content: "\f042";
+}
+.fa-tint:before {
+ content: "\f043";
+}
+.fa-edit:before,
+.fa-pencil-square-o:before {
+ content: "\f044";
+}
+.fa-share-square-o:before {
+ content: "\f045";
+}
+.fa-check-square-o:before {
+ content: "\f046";
+}
+.fa-arrows:before {
+ content: "\f047";
+}
+.fa-step-backward:before {
+ content: "\f048";
+}
+.fa-fast-backward:before {
+ content: "\f049";
+}
+.fa-backward:before {
+ content: "\f04a";
+}
+.fa-play:before {
+ content: "\f04b";
+}
+.fa-pause:before {
+ content: "\f04c";
+}
+.fa-stop:before {
+ content: "\f04d";
+}
+.fa-forward:before {
+ content: "\f04e";
+}
+.fa-fast-forward:before {
+ content: "\f050";
+}
+.fa-step-forward:before {
+ content: "\f051";
+}
+.fa-eject:before {
+ content: "\f052";
+}
+.fa-chevron-left:before {
+ content: "\f053";
+}
+.fa-chevron-right:before {
+ content: "\f054";
+}
+.fa-plus-circle:before {
+ content: "\f055";
+}
+.fa-minus-circle:before {
+ content: "\f056";
+}
+.fa-times-circle:before {
+ content: "\f057";
+}
+.fa-check-circle:before {
+ content: "\f058";
+}
+.fa-question-circle:before {
+ content: "\f059";
+}
+.fa-info-circle:before {
+ content: "\f05a";
+}
+.fa-crosshairs:before {
+ content: "\f05b";
+}
+.fa-times-circle-o:before {
+ content: "\f05c";
+}
+.fa-check-circle-o:before {
+ content: "\f05d";
+}
+.fa-ban:before {
+ content: "\f05e";
+}
+.fa-arrow-left:before {
+ content: "\f060";
+}
+.fa-arrow-right:before {
+ content: "\f061";
+}
+.fa-arrow-up:before {
+ content: "\f062";
+}
+.fa-arrow-down:before {
+ content: "\f063";
+}
+.fa-mail-forward:before,
+.fa-share:before {
+ content: "\f064";
+}
+.fa-expand:before {
+ content: "\f065";
+}
+.fa-compress:before {
+ content: "\f066";
+}
+.fa-plus:before {
+ content: "\f067";
+}
+.fa-minus:before {
+ content: "\f068";
+}
+.fa-asterisk:before {
+ content: "\f069";
+}
+.fa-exclamation-circle:before {
+ content: "\f06a";
+}
+.fa-gift:before {
+ content: "\f06b";
+}
+.fa-leaf:before {
+ content: "\f06c";
+}
+.fa-fire:before {
+ content: "\f06d";
+}
+.fa-eye:before {
+ content: "\f06e";
+}
+.fa-eye-slash:before {
+ content: "\f070";
+}
+.fa-warning:before,
+.fa-exclamation-triangle:before {
+ content: "\f071";
+}
+.fa-plane:before {
+ content: "\f072";
+}
+.fa-calendar:before {
+ content: "\f073";
+}
+.fa-random:before {
+ content: "\f074";
+}
+.fa-comment:before {
+ content: "\f075";
+}
+.fa-magnet:before {
+ content: "\f076";
+}
+.fa-chevron-up:before {
+ content: "\f077";
+}
+.fa-chevron-down:before {
+ content: "\f078";
+}
+.fa-retweet:before {
+ content: "\f079";
+}
+.fa-shopping-cart:before {
+ content: "\f07a";
+}
+.fa-folder:before {
+ content: "\f07b";
+}
+.fa-folder-open:before {
+ content: "\f07c";
+}
+.fa-arrows-v:before {
+ content: "\f07d";
+}
+.fa-arrows-h:before {
+ content: "\f07e";
+}
+.fa-bar-chart-o:before,
+.fa-bar-chart:before {
+ content: "\f080";
+}
+.fa-twitter-square:before {
+ content: "\f081";
+}
+.fa-facebook-square:before {
+ content: "\f082";
+}
+.fa-camera-retro:before {
+ content: "\f083";
+}
+.fa-key:before {
+ content: "\f084";
+}
+.fa-gears:before,
+.fa-cogs:before {
+ content: "\f085";
+}
+.fa-comments:before {
+ content: "\f086";
+}
+.fa-thumbs-o-up:before {
+ content: "\f087";
+}
+.fa-thumbs-o-down:before {
+ content: "\f088";
+}
+.fa-star-half:before {
+ content: "\f089";
+}
+.fa-heart-o:before {
+ content: "\f08a";
+}
+.fa-sign-out:before {
+ content: "\f08b";
+}
+.fa-linkedin-square:before {
+ content: "\f08c";
+}
+.fa-thumb-tack:before {
+ content: "\f08d";
+}
+.fa-external-link:before {
+ content: "\f08e";
+}
+.fa-sign-in:before {
+ content: "\f090";
+}
+.fa-trophy:before {
+ content: "\f091";
+}
+.fa-github-square:before {
+ content: "\f092";
+}
+.fa-upload:before {
+ content: "\f093";
+}
+.fa-lemon-o:before {
+ content: "\f094";
+}
+.fa-phone:before {
+ content: "\f095";
+}
+.fa-square-o:before {
+ content: "\f096";
+}
+.fa-bookmark-o:before {
+ content: "\f097";
+}
+.fa-phone-square:before {
+ content: "\f098";
+}
+.fa-twitter:before {
+ content: "\f099";
+}
+.fa-facebook-f:before,
+.fa-facebook:before {
+ content: "\f09a";
+}
+.fa-github:before {
+ content: "\f09b";
+}
+.fa-unlock:before {
+ content: "\f09c";
+}
+.fa-credit-card:before {
+ content: "\f09d";
+}
+.fa-rss:before {
+ content: "\f09e";
+}
+.fa-hdd-o:before {
+ content: "\f0a0";
+}
+.fa-bullhorn:before {
+ content: "\f0a1";
+}
+.fa-bell:before {
+ content: "\f0f3";
+}
+.fa-certificate:before {
+ content: "\f0a3";
+}
+.fa-hand-o-right:before {
+ content: "\f0a4";
+}
+.fa-hand-o-left:before {
+ content: "\f0a5";
+}
+.fa-hand-o-up:before {
+ content: "\f0a6";
+}
+.fa-hand-o-down:before {
+ content: "\f0a7";
+}
+.fa-arrow-circle-left:before {
+ content: "\f0a8";
+}
+.fa-arrow-circle-right:before {
+ content: "\f0a9";
+}
+.fa-arrow-circle-up:before {
+ content: "\f0aa";
+}
+.fa-arrow-circle-down:before {
+ content: "\f0ab";
+}
+.fa-globe:before {
+ content: "\f0ac";
+}
+.fa-wrench:before {
+ content: "\f0ad";
+}
+.fa-tasks:before {
+ content: "\f0ae";
+}
+.fa-filter:before {
+ content: "\f0b0";
+}
+.fa-briefcase:before {
+ content: "\f0b1";
+}
+.fa-arrows-alt:before {
+ content: "\f0b2";
+}
+.fa-group:before,
+.fa-users:before {
+ content: "\f0c0";
+}
+.fa-chain:before,
+.fa-link:before {
+ content: "\f0c1";
+}
+.fa-cloud:before {
+ content: "\f0c2";
+}
+.fa-flask:before {
+ content: "\f0c3";
+}
+.fa-cut:before,
+.fa-scissors:before {
+ content: "\f0c4";
+}
+.fa-copy:before,
+.fa-files-o:before {
+ content: "\f0c5";
+}
+.fa-paperclip:before {
+ content: "\f0c6";
+}
+.fa-save:before,
+.fa-floppy-o:before {
+ content: "\f0c7";
+}
+.fa-square:before {
+ content: "\f0c8";
+}
+.fa-navicon:before,
+.fa-reorder:before,
+.fa-bars:before {
+ content: "\f0c9";
+}
+.fa-list-ul:before {
+ content: "\f0ca";
+}
+.fa-list-ol:before {
+ content: "\f0cb";
+}
+.fa-strikethrough:before {
+ content: "\f0cc";
+}
+.fa-underline:before {
+ content: "\f0cd";
+}
+.fa-table:before {
+ content: "\f0ce";
+}
+.fa-magic:before {
+ content: "\f0d0";
+}
+.fa-truck:before {
+ content: "\f0d1";
+}
+.fa-pinterest:before {
+ content: "\f0d2";
+}
+.fa-pinterest-square:before {
+ content: "\f0d3";
+}
+.fa-google-plus-square:before {
+ content: "\f0d4";
+}
+.fa-google-plus:before {
+ content: "\f0d5";
+}
+.fa-money:before {
+ content: "\f0d6";
+}
+.fa-caret-down:before {
+ content: "\f0d7";
+}
+.fa-caret-up:before {
+ content: "\f0d8";
+}
+.fa-caret-left:before {
+ content: "\f0d9";
+}
+.fa-caret-right:before {
+ content: "\f0da";
+}
+.fa-columns:before {
+ content: "\f0db";
+}
+.fa-unsorted:before,
+.fa-sort:before {
+ content: "\f0dc";
+}
+.fa-sort-down:before,
+.fa-sort-desc:before {
+ content: "\f0dd";
+}
+.fa-sort-up:before,
+.fa-sort-asc:before {
+ content: "\f0de";
+}
+.fa-envelope:before {
+ content: "\f0e0";
+}
+.fa-linkedin:before {
+ content: "\f0e1";
+}
+.fa-rotate-left:before,
+.fa-undo:before {
+ content: "\f0e2";
+}
+.fa-legal:before,
+.fa-gavel:before {
+ content: "\f0e3";
+}
+.fa-dashboard:before,
+.fa-tachometer:before {
+ content: "\f0e4";
+}
+.fa-comment-o:before {
+ content: "\f0e5";
+}
+.fa-comments-o:before {
+ content: "\f0e6";
+}
+.fa-flash:before,
+.fa-bolt:before {
+ content: "\f0e7";
+}
+.fa-sitemap:before {
+ content: "\f0e8";
+}
+.fa-umbrella:before {
+ content: "\f0e9";
+}
+.fa-paste:before,
+.fa-clipboard:before {
+ content: "\f0ea";
+}
+.fa-lightbulb-o:before {
+ content: "\f0eb";
+}
+.fa-exchange:before {
+ content: "\f0ec";
+}
+.fa-cloud-download:before {
+ content: "\f0ed";
+}
+.fa-cloud-upload:before {
+ content: "\f0ee";
+}
+.fa-user-md:before {
+ content: "\f0f0";
+}
+.fa-stethoscope:before {
+ content: "\f0f1";
+}
+.fa-suitcase:before {
+ content: "\f0f2";
+}
+.fa-bell-o:before {
+ content: "\f0a2";
+}
+.fa-coffee:before {
+ content: "\f0f4";
+}
+.fa-cutlery:before {
+ content: "\f0f5";
+}
+.fa-file-text-o:before {
+ content: "\f0f6";
+}
+.fa-building-o:before {
+ content: "\f0f7";
+}
+.fa-hospital-o:before {
+ content: "\f0f8";
+}
+.fa-ambulance:before {
+ content: "\f0f9";
+}
+.fa-medkit:before {
+ content: "\f0fa";
+}
+.fa-fighter-jet:before {
+ content: "\f0fb";
+}
+.fa-beer:before {
+ content: "\f0fc";
+}
+.fa-h-square:before {
+ content: "\f0fd";
+}
+.fa-plus-square:before {
+ content: "\f0fe";
+}
+.fa-angle-double-left:before {
+ content: "\f100";
+}
+.fa-angle-double-right:before {
+ content: "\f101";
+}
+.fa-angle-double-up:before {
+ content: "\f102";
+}
+.fa-angle-double-down:before {
+ content: "\f103";
+}
+.fa-angle-left:before {
+ content: "\f104";
+}
+.fa-angle-right:before {
+ content: "\f105";
+}
+.fa-angle-up:before {
+ content: "\f106";
+}
+.fa-angle-down:before {
+ content: "\f107";
+}
+.fa-desktop:before {
+ content: "\f108";
+}
+.fa-laptop:before {
+ content: "\f109";
+}
+.fa-tablet:before {
+ content: "\f10a";
+}
+.fa-mobile-phone:before,
+.fa-mobile:before {
+ content: "\f10b";
+}
+.fa-circle-o:before {
+ content: "\f10c";
+}
+.fa-quote-left:before {
+ content: "\f10d";
+}
+.fa-quote-right:before {
+ content: "\f10e";
+}
+.fa-spinner:before {
+ content: "\f110";
+}
+.fa-circle:before {
+ content: "\f111";
+}
+.fa-mail-reply:before,
+.fa-reply:before {
+ content: "\f112";
+}
+.fa-github-alt:before {
+ content: "\f113";
+}
+.fa-folder-o:before {
+ content: "\f114";
+}
+.fa-folder-open-o:before {
+ content: "\f115";
+}
+.fa-smile-o:before {
+ content: "\f118";
+}
+.fa-frown-o:before {
+ content: "\f119";
+}
+.fa-meh-o:before {
+ content: "\f11a";
+}
+.fa-gamepad:before {
+ content: "\f11b";
+}
+.fa-keyboard-o:before {
+ content: "\f11c";
+}
+.fa-flag-o:before {
+ content: "\f11d";
+}
+.fa-flag-checkered:before {
+ content: "\f11e";
+}
+.fa-terminal:before {
+ content: "\f120";
+}
+.fa-code:before {
+ content: "\f121";
+}
+.fa-mail-reply-all:before,
+.fa-reply-all:before {
+ content: "\f122";
+}
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+ content: "\f123";
+}
+.fa-location-arrow:before {
+ content: "\f124";
+}
+.fa-crop:before {
+ content: "\f125";
+}
+.fa-code-fork:before {
+ content: "\f126";
+}
+.fa-unlink:before,
+.fa-chain-broken:before {
+ content: "\f127";
+}
+.fa-question:before {
+ content: "\f128";
+}
+.fa-info:before {
+ content: "\f129";
+}
+.fa-exclamation:before {
+ content: "\f12a";
+}
+.fa-superscript:before {
+ content: "\f12b";
+}
+.fa-subscript:before {
+ content: "\f12c";
+}
+.fa-eraser:before {
+ content: "\f12d";
+}
+.fa-puzzle-piece:before {
+ content: "\f12e";
+}
+.fa-microphone:before {
+ content: "\f130";
+}
+.fa-microphone-slash:before {
+ content: "\f131";
+}
+.fa-shield:before {
+ content: "\f132";
+}
+.fa-calendar-o:before {
+ content: "\f133";
+}
+.fa-fire-extinguisher:before {
+ content: "\f134";
+}
+.fa-rocket:before {
+ content: "\f135";
+}
+.fa-maxcdn:before {
+ content: "\f136";
+}
+.fa-chevron-circle-left:before {
+ content: "\f137";
+}
+.fa-chevron-circle-right:before {
+ content: "\f138";
+}
+.fa-chevron-circle-up:before {
+ content: "\f139";
+}
+.fa-chevron-circle-down:before {
+ content: "\f13a";
+}
+.fa-html5:before {
+ content: "\f13b";
+}
+.fa-css3:before {
+ content: "\f13c";
+}
+.fa-anchor:before {
+ content: "\f13d";
+}
+.fa-unlock-alt:before {
+ content: "\f13e";
+}
+.fa-bullseye:before {
+ content: "\f140";
+}
+.fa-ellipsis-h:before {
+ content: "\f141";
+}
+.fa-ellipsis-v:before {
+ content: "\f142";
+}
+.fa-rss-square:before {
+ content: "\f143";
+}
+.fa-play-circle:before {
+ content: "\f144";
+}
+.fa-ticket:before {
+ content: "\f145";
+}
+.fa-minus-square:before {
+ content: "\f146";
+}
+.fa-minus-square-o:before {
+ content: "\f147";
+}
+.fa-level-up:before {
+ content: "\f148";
+}
+.fa-level-down:before {
+ content: "\f149";
+}
+.fa-check-square:before {
+ content: "\f14a";
+}
+.fa-pencil-square:before {
+ content: "\f14b";
+}
+.fa-external-link-square:before {
+ content: "\f14c";
+}
+.fa-share-square:before {
+ content: "\f14d";
+}
+.fa-compass:before {
+ content: "\f14e";
+}
+.fa-toggle-down:before,
+.fa-caret-square-o-down:before {
+ content: "\f150";
+}
+.fa-toggle-up:before,
+.fa-caret-square-o-up:before {
+ content: "\f151";
+}
+.fa-toggle-right:before,
+.fa-caret-square-o-right:before {
+ content: "\f152";
+}
+.fa-euro:before,
+.fa-eur:before {
+ content: "\f153";
+}
+.fa-gbp:before {
+ content: "\f154";
+}
+.fa-dollar:before,
+.fa-usd:before {
+ content: "\f155";
+}
+.fa-rupee:before,
+.fa-inr:before {
+ content: "\f156";
+}
+.fa-cny:before,
+.fa-rmb:before,
+.fa-yen:before,
+.fa-jpy:before {
+ content: "\f157";
+}
+.fa-ruble:before,
+.fa-rouble:before,
+.fa-rub:before {
+ content: "\f158";
+}
+.fa-won:before,
+.fa-krw:before {
+ content: "\f159";
+}
+.fa-bitcoin:before,
+.fa-btc:before {
+ content: "\f15a";
+}
+.fa-file:before {
+ content: "\f15b";
+}
+.fa-file-text:before {
+ content: "\f15c";
+}
+.fa-sort-alpha-asc:before {
+ content: "\f15d";
+}
+.fa-sort-alpha-desc:before {
+ content: "\f15e";
+}
+.fa-sort-amount-asc:before {
+ content: "\f160";
+}
+.fa-sort-amount-desc:before {
+ content: "\f161";
+}
+.fa-sort-numeric-asc:before {
+ content: "\f162";
+}
+.fa-sort-numeric-desc:before {
+ content: "\f163";
+}
+.fa-thumbs-up:before {
+ content: "\f164";
+}
+.fa-thumbs-down:before {
+ content: "\f165";
+}
+.fa-youtube-square:before {
+ content: "\f166";
+}
+.fa-youtube:before {
+ content: "\f167";
+}
+.fa-xing:before {
+ content: "\f168";
+}
+.fa-xing-square:before {
+ content: "\f169";
+}
+.fa-youtube-play:before {
+ content: "\f16a";
+}
+.fa-dropbox:before {
+ content: "\f16b";
+}
+.fa-stack-overflow:before {
+ content: "\f16c";
+}
+.fa-instagram:before {
+ content: "\f16d";
+}
+.fa-flickr:before {
+ content: "\f16e";
+}
+.fa-adn:before {
+ content: "\f170";
+}
+.fa-bitbucket:before {
+ content: "\f171";
+}
+.fa-bitbucket-square:before {
+ content: "\f172";
+}
+.fa-tumblr:before {
+ content: "\f173";
+}
+.fa-tumblr-square:before {
+ content: "\f174";
+}
+.fa-long-arrow-down:before {
+ content: "\f175";
+}
+.fa-long-arrow-up:before {
+ content: "\f176";
+}
+.fa-long-arrow-left:before {
+ content: "\f177";
+}
+.fa-long-arrow-right:before {
+ content: "\f178";
+}
+.fa-apple:before {
+ content: "\f179";
+}
+.fa-windows:before {
+ content: "\f17a";
+}
+.fa-android:before {
+ content: "\f17b";
+}
+.fa-linux:before {
+ content: "\f17c";
+}
+.fa-dribbble:before {
+ content: "\f17d";
+}
+.fa-skype:before {
+ content: "\f17e";
+}
+.fa-foursquare:before {
+ content: "\f180";
+}
+.fa-trello:before {
+ content: "\f181";
+}
+.fa-female:before {
+ content: "\f182";
+}
+.fa-male:before {
+ content: "\f183";
+}
+.fa-gittip:before,
+.fa-gratipay:before {
+ content: "\f184";
+}
+.fa-sun-o:before {
+ content: "\f185";
+}
+.fa-moon-o:before {
+ content: "\f186";
+}
+.fa-archive:before {
+ content: "\f187";
+}
+.fa-bug:before {
+ content: "\f188";
+}
+.fa-vk:before {
+ content: "\f189";
+}
+.fa-weibo:before {
+ content: "\f18a";
+}
+.fa-renren:before {
+ content: "\f18b";
+}
+.fa-pagelines:before {
+ content: "\f18c";
+}
+.fa-stack-exchange:before {
+ content: "\f18d";
+}
+.fa-arrow-circle-o-right:before {
+ content: "\f18e";
+}
+.fa-arrow-circle-o-left:before {
+ content: "\f190";
+}
+.fa-toggle-left:before,
+.fa-caret-square-o-left:before {
+ content: "\f191";
+}
+.fa-dot-circle-o:before {
+ content: "\f192";
+}
+.fa-wheelchair:before {
+ content: "\f193";
+}
+.fa-vimeo-square:before {
+ content: "\f194";
+}
+.fa-turkish-lira:before,
+.fa-try:before {
+ content: "\f195";
+}
+.fa-plus-square-o:before {
+ content: "\f196";
+}
+.fa-space-shuttle:before {
+ content: "\f197";
+}
+.fa-slack:before {
+ content: "\f198";
+}
+.fa-envelope-square:before {
+ content: "\f199";
+}
+.fa-wordpress:before {
+ content: "\f19a";
+}
+.fa-openid:before {
+ content: "\f19b";
+}
+.fa-institution:before,
+.fa-bank:before,
+.fa-university:before {
+ content: "\f19c";
+}
+.fa-mortar-board:before,
+.fa-graduation-cap:before {
+ content: "\f19d";
+}
+.fa-yahoo:before {
+ content: "\f19e";
+}
+.fa-google:before {
+ content: "\f1a0";
+}
+.fa-reddit:before {
+ content: "\f1a1";
+}
+.fa-reddit-square:before {
+ content: "\f1a2";
+}
+.fa-stumbleupon-circle:before {
+ content: "\f1a3";
+}
+.fa-stumbleupon:before {
+ content: "\f1a4";
+}
+.fa-delicious:before {
+ content: "\f1a5";
+}
+.fa-digg:before {
+ content: "\f1a6";
+}
+.fa-pied-piper:before {
+ content: "\f1a7";
+}
+.fa-pied-piper-alt:before {
+ content: "\f1a8";
+}
+.fa-drupal:before {
+ content: "\f1a9";
+}
+.fa-joomla:before {
+ content: "\f1aa";
+}
+.fa-language:before {
+ content: "\f1ab";
+}
+.fa-fax:before {
+ content: "\f1ac";
+}
+.fa-building:before {
+ content: "\f1ad";
+}
+.fa-child:before {
+ content: "\f1ae";
+}
+.fa-paw:before {
+ content: "\f1b0";
+}
+.fa-spoon:before {
+ content: "\f1b1";
+}
+.fa-cube:before {
+ content: "\f1b2";
+}
+.fa-cubes:before {
+ content: "\f1b3";
+}
+.fa-behance:before {
+ content: "\f1b4";
+}
+.fa-behance-square:before {
+ content: "\f1b5";
+}
+.fa-steam:before {
+ content: "\f1b6";
+}
+.fa-steam-square:before {
+ content: "\f1b7";
+}
+.fa-recycle:before {
+ content: "\f1b8";
+}
+.fa-automobile:before,
+.fa-car:before {
+ content: "\f1b9";
+}
+.fa-cab:before,
+.fa-taxi:before {
+ content: "\f1ba";
+}
+.fa-tree:before {
+ content: "\f1bb";
+}
+.fa-spotify:before {
+ content: "\f1bc";
+}
+.fa-deviantart:before {
+ content: "\f1bd";
+}
+.fa-soundcloud:before {
+ content: "\f1be";
+}
+.fa-database:before {
+ content: "\f1c0";
+}
+.fa-file-pdf-o:before {
+ content: "\f1c1";
+}
+.fa-file-word-o:before {
+ content: "\f1c2";
+}
+.fa-file-excel-o:before {
+ content: "\f1c3";
+}
+.fa-file-powerpoint-o:before {
+ content: "\f1c4";
+}
+.fa-file-photo-o:before,
+.fa-file-picture-o:before,
+.fa-file-image-o:before {
+ content: "\f1c5";
+}
+.fa-file-zip-o:before,
+.fa-file-archive-o:before {
+ content: "\f1c6";
+}
+.fa-file-sound-o:before,
+.fa-file-audio-o:before {
+ content: "\f1c7";
+}
+.fa-file-movie-o:before,
+.fa-file-video-o:before {
+ content: "\f1c8";
+}
+.fa-file-code-o:before {
+ content: "\f1c9";
+}
+.fa-vine:before {
+ content: "\f1ca";
+}
+.fa-codepen:before {
+ content: "\f1cb";
+}
+.fa-jsfiddle:before {
+ content: "\f1cc";
+}
+.fa-life-bouy:before,
+.fa-life-buoy:before,
+.fa-life-saver:before,
+.fa-support:before,
+.fa-life-ring:before {
+ content: "\f1cd";
+}
+.fa-circle-o-notch:before {
+ content: "\f1ce";
+}
+.fa-ra:before,
+.fa-rebel:before {
+ content: "\f1d0";
+}
+.fa-ge:before,
+.fa-empire:before {
+ content: "\f1d1";
+}
+.fa-git-square:before {
+ content: "\f1d2";
+}
+.fa-git:before {
+ content: "\f1d3";
+}
+.fa-hacker-news:before {
+ content: "\f1d4";
+}
+.fa-tencent-weibo:before {
+ content: "\f1d5";
+}
+.fa-qq:before {
+ content: "\f1d6";
+}
+.fa-wechat:before,
+.fa-weixin:before {
+ content: "\f1d7";
+}
+.fa-send:before,
+.fa-paper-plane:before {
+ content: "\f1d8";
+}
+.fa-send-o:before,
+.fa-paper-plane-o:before {
+ content: "\f1d9";
+}
+.fa-history:before {
+ content: "\f1da";
+}
+.fa-genderless:before,
+.fa-circle-thin:before {
+ content: "\f1db";
+}
+.fa-header:before {
+ content: "\f1dc";
+}
+.fa-paragraph:before {
+ content: "\f1dd";
+}
+.fa-sliders:before {
+ content: "\f1de";
+}
+.fa-share-alt:before {
+ content: "\f1e0";
+}
+.fa-share-alt-square:before {
+ content: "\f1e1";
+}
+.fa-bomb:before {
+ content: "\f1e2";
+}
+.fa-soccer-ball-o:before,
+.fa-futbol-o:before {
+ content: "\f1e3";
+}
+.fa-tty:before {
+ content: "\f1e4";
+}
+.fa-binoculars:before {
+ content: "\f1e5";
+}
+.fa-plug:before {
+ content: "\f1e6";
+}
+.fa-slideshare:before {
+ content: "\f1e7";
+}
+.fa-twitch:before {
+ content: "\f1e8";
+}
+.fa-yelp:before {
+ content: "\f1e9";
+}
+.fa-newspaper-o:before {
+ content: "\f1ea";
+}
+.fa-wifi:before {
+ content: "\f1eb";
+}
+.fa-calculator:before {
+ content: "\f1ec";
+}
+.fa-paypal:before {
+ content: "\f1ed";
+}
+.fa-google-wallet:before {
+ content: "\f1ee";
+}
+.fa-cc-visa:before {
+ content: "\f1f0";
+}
+.fa-cc-mastercard:before {
+ content: "\f1f1";
+}
+.fa-cc-discover:before {
+ content: "\f1f2";
+}
+.fa-cc-amex:before {
+ content: "\f1f3";
+}
+.fa-cc-paypal:before {
+ content: "\f1f4";
+}
+.fa-cc-stripe:before {
+ content: "\f1f5";
+}
+.fa-bell-slash:before {
+ content: "\f1f6";
+}
+.fa-bell-slash-o:before {
+ content: "\f1f7";
+}
+.fa-trash:before {
+ content: "\f1f8";
+}
+.fa-copyright:before {
+ content: "\f1f9";
+}
+.fa-at:before {
+ content: "\f1fa";
+}
+.fa-eyedropper:before {
+ content: "\f1fb";
+}
+.fa-paint-brush:before {
+ content: "\f1fc";
+}
+.fa-birthday-cake:before {
+ content: "\f1fd";
+}
+.fa-area-chart:before {
+ content: "\f1fe";
+}
+.fa-pie-chart:before {
+ content: "\f200";
+}
+.fa-line-chart:before {
+ content: "\f201";
+}
+.fa-lastfm:before {
+ content: "\f202";
+}
+.fa-lastfm-square:before {
+ content: "\f203";
+}
+.fa-toggle-off:before {
+ content: "\f204";
+}
+.fa-toggle-on:before {
+ content: "\f205";
+}
+.fa-bicycle:before {
+ content: "\f206";
+}
+.fa-bus:before {
+ content: "\f207";
+}
+.fa-ioxhost:before {
+ content: "\f208";
+}
+.fa-angellist:before {
+ content: "\f209";
+}
+.fa-cc:before {
+ content: "\f20a";
+}
+.fa-shekel:before,
+.fa-sheqel:before,
+.fa-ils:before {
+ content: "\f20b";
+}
+.fa-meanpath:before {
+ content: "\f20c";
+}
+.fa-buysellads:before {
+ content: "\f20d";
+}
+.fa-connectdevelop:before {
+ content: "\f20e";
+}
+.fa-dashcube:before {
+ content: "\f210";
+}
+.fa-forumbee:before {
+ content: "\f211";
+}
+.fa-leanpub:before {
+ content: "\f212";
+}
+.fa-sellsy:before {
+ content: "\f213";
+}
+.fa-shirtsinbulk:before {
+ content: "\f214";
+}
+.fa-simplybuilt:before {
+ content: "\f215";
+}
+.fa-skyatlas:before {
+ content: "\f216";
+}
+.fa-cart-plus:before {
+ content: "\f217";
+}
+.fa-cart-arrow-down:before {
+ content: "\f218";
+}
+.fa-diamond:before {
+ content: "\f219";
+}
+.fa-ship:before {
+ content: "\f21a";
+}
+.fa-user-secret:before {
+ content: "\f21b";
+}
+.fa-motorcycle:before {
+ content: "\f21c";
+}
+.fa-street-view:before {
+ content: "\f21d";
+}
+.fa-heartbeat:before {
+ content: "\f21e";
+}
+.fa-venus:before {
+ content: "\f221";
+}
+.fa-mars:before {
+ content: "\f222";
+}
+.fa-mercury:before {
+ content: "\f223";
+}
+.fa-transgender:before {
+ content: "\f224";
+}
+.fa-transgender-alt:before {
+ content: "\f225";
+}
+.fa-venus-double:before {
+ content: "\f226";
+}
+.fa-mars-double:before {
+ content: "\f227";
+}
+.fa-venus-mars:before {
+ content: "\f228";
+}
+.fa-mars-stroke:before {
+ content: "\f229";
+}
+.fa-mars-stroke-v:before {
+ content: "\f22a";
+}
+.fa-mars-stroke-h:before {
+ content: "\f22b";
+}
+.fa-neuter:before {
+ content: "\f22c";
+}
+.fa-facebook-official:before {
+ content: "\f230";
+}
+.fa-pinterest-p:before {
+ content: "\f231";
+}
+.fa-whatsapp:before {
+ content: "\f232";
+}
+.fa-server:before {
+ content: "\f233";
+}
+.fa-user-plus:before {
+ content: "\f234";
+}
+.fa-user-times:before {
+ content: "\f235";
+}
+.fa-hotel:before,
+.fa-bed:before {
+ content: "\f236";
+}
+.fa-viacoin:before {
+ content: "\f237";
+}
+.fa-train:before {
+ content: "\f238";
+}
+.fa-subway:before {
+ content: "\f239";
+}
+.fa-medium:before {
+ content: "\f23a";
+}
diff --git a/ui/new-ui-samples/favicon-16x16.png b/ui/new-ui-samples/favicon-16x16.png
new file mode 100644
index 0000000000000000000000000000000000000000..16085801d05bf8a5e7aeee24f6ed40f778352ff0
GIT binary patch
literal 1301
zcmb7CeN@tC6n-H~#X0q8nUR5l{b*?Z5D<l|6iE>=Gc&bxnxd_=+(O&>*wJijbEnl7
z_BB&$ZnZq()M^{9lYLlfsW}!V8cHA}5`G|Z0EzwlYk%#J-E-dioO{oG?s?C1pRbdX
z;@mN-FaQ8|ZhUMCf}V@dWeJi=As*Wia4L-EM+4Au#%&>YDN^I};#2ql99auM`AGn*
zNUQt}0HrVhx*PzQ7Xk1ssgZ2k0025MIWd)k49K^%tJ4QwP=1};A)HLxKTN-C%0Bu6
z7Ef#(nM*5uNx3y15NS*#j<{q+<T)Gwykh)mY#`YBxYF>3*_t4Sg9RNLc}o4xd?yGl
zmV+HT&-Ah#^~)W{9k_$7mxkFmK`*YT<tJU7pGp-eu?G(rT8-&Y_giFF+e{YJsc)J|
zYM#u5{?J0I`BSE{IyJja#jbnJmb2T{sRPO#-SvR=D(ZoD`=BbVzn|Ugz$IBoX=dgg
zV`9;4rch3ms5U-VZhfkOKb^<(%!F-LO7;T3)S7!@?!zOaj7}A+Z*)VaG(tRuW6$8?
z^!S+BzyuSVVM-`AW*$BVu&){23i|zC@|8JvFpgtsa4dBILrdJGA;hl{^edU2BjJ+S
zTEcuQ!Pd3TJ{V!`Nnb7Kh6IY>z2jm|tBiK-ZxCd<NwnO9>@OniLn;1(9+F^`wqF}o
zA~UxTY|rTSk(32l-b%s!Ai)rIpJsir%+!QzTmMeMv&*vy0vTnmj&@*-TGr#X?|ikK
zeXB3h_K3V7jarZ<d*uEeTBwUE(Napfutkjx6LB|ZxQ;fG<sLlWOb_bUuls8XQ8jd6
zI=I&WG999q3`Ej9mbBZ(Z0NBblFh8snyGIsRK*-!Jr9pru8py7OvScYw@R#8(8EdS
z`4m}iAsZ|qdJ9!+`B@*+Y>pRCZ-egZpl1e1Zd|K16O9WEI`(w~8_6|_nA+EiH>y>#
zC-}o8rK!=xb~qdbhGX@JpE`soNsHe6-+}UU0m+Z6mbrwdC-_j5j{?sd9JVI+N^^Y#
z=i`ja#ttt~e_<KGpj?@OPKBGDd7m@U#H&ZJ-oU$NB4f8r89<&GB7HDC9gZ8bW$o69
z@n|gZd`B3XS()vzrPSF2wTk3~as^J+Elxi7G$#{_q5?$o7kwVQGgNzurndxS6>fCR
z=_ztr;<coCXZ+&-QG0lCu@9^Eej9@n&O$Dq<2>q&@g^}`udcs_w5;6N=+u?cyc{HG
z6nfsC&7k0r8;`snyNh+yc}3b;@WYQ%RH5%q#$k`Gp=J2GO6l;E!TwEnm=r-2xsf{j
zSFG{!TkikR8|&Nu^hrlY9scY^qKn8gA&JZ9`4)6_J?rW7LSeqrXvTegswh6oFNmsm
z<xS^;$;~(NZ`>6BQvLn18A1M}4!g=vefjdP%wcr}8uQlwO4h6Qs-o^5w|k4q(LLS}
zzc#G8BAQbwpYz*CE$pqO9#$MHtv~tr#24SJ2+fcbS*ofVX}8PK^2Wi{yW0=gzdU^^
zyjV7{6!T`{;E<%)_I~A+_OdBT>}=bB;<)W}1q}cXuKKsY?CXdMK|)TtFh5r)VCH=y
zKmdfn6nY5E2%*5Klt?BGX42_oIE)Fy8tbJ+Yy3+nKA8Ve!Ds(XxNtpS3LyY4Cn;7O
HlXK!9%tbg#
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/favicon-194x194.png b/ui/new-ui-samples/favicon-194x194.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a53d0fd8f71375c866fcbfa1b8f1ae4c86f0bba
GIT binary patch
literal 21106
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/favicon-32x32.png b/ui/new-ui-samples/favicon-32x32.png
new file mode 100644
index 0000000000000000000000000000000000000000..c6e103f554d36acc5f1e1e217664b5b49ff0bff7
GIT binary patch
literal 2165
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/favicon-96x96.png b/ui/new-ui-samples/favicon-96x96.png
new file mode 100644
index 0000000000000000000000000000000000000000..f1c1f2c3f10bdbd7dfe0bd66396a06310997a3cd
GIT binary patch
literal 8147
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/favicon.ico b/ui/new-ui-samples/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..cb3a3dc2f9c9ce0e5d3e14f0adab89c28c729ce0
GIT binary patch
literal 15086
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¥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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/fontawesome-webfont.eot b/ui/new-ui-samples/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000000000000000000000000000000000000..33b2bb80055cc480e797de704925acaba4ba7d7d
GIT binary patch
literal 60767
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�ly@k*2(3WLEleNarQ}K
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%0DKehr}RFC`2XTB_<sB5
zf0g^s**z@wJIKCS<c|paIr2Z!zg&FZ^Rvv4G5Dj>?==0w^)u1m5PYii@6f)6_5Ydu
zv+NIZ_(Rt}Q++LT5!n8!J4x!>sE&v_3*cXat{Zq5;17w;B6$epw}$Rg`0nFJg5D-L
zYvw<P?hg2k;Jce{8#u+_%X1rq>@(goc5TeJjM($AJAZxZHZN}RzBc<i=I(j3_WGND
zY}aI)!r5;Ao8#<+-wSHK*6o|xy66e3)_}cPb?neVqF+JQnq4y5xN@Ck7|Fkp<05`j
zyqXy?a;0Sx%D<bxDn4sWggI5Rn$ESGt235&i9l3302K<BJuwV1Fx>P0=_>ZI6WVGU
zO#Nk-YqZTa3{!84P0K~GsI#32<+_AsXU43wILwZS(8n%S9)lP!Dg$$e2$$9$E?^Nj
zql4do#<itb;pZITQ?vU-Hk7{2#(q!JP)EC%!4yy*HfY2j*hQJDEnP205i$CT8yKnr
z&R|?b4Ju$VT#pVUE04I)G3kZCHzxHgK^rMf835sQD#SEl1wh{DcFD;!kJ+Tp0CB~x
zxe%Q`fRK~jADo1}$>+a8qEP(bD2)DpP|$dp<`TZ#bY6^~7Xv_Lle)77^OsVhMOm(@
z??8O8kA%}ZWpR&2v!7qFSw@TF6d*=9YT^Rtk(n8p=CQWvt1Om=n&5uP;Gi<FE_H<?
z&C$A?6ps6+s_UO{EDkXn{D_Ak1~u9YFheG%s=1s51P_}~9O%ke-#DHVJ4L~%?k>T6
zMRvbm39kbp*KB`qoVg12w52Z)T}`X41P>D|q_%K#zuhwb+BpEogY0E)KnSy#@+(m5
z20@LG@LUEvk`I|OIUV^^0_YtG9AElBS!Dsh%k^P9r0moJ25Lkm-gh#ig<tV7v`Iy3
zd3t5#XoACmt8255R4kxa9X7c*Yyxs%&d;f^>wBDhAOj0!EF&8MxV^-m1U1MEd?H7}
zL;r;tfFIT|ei3-Z@gyM=!%Ba7Pa626JRAA`V<2D<{RLRT@0o=bE)XF)nFtUL67`2L
z{?_Q<qIOyU1qoDWGBN{TMf}`X{{rBu(@o7pf>z_`Yy2t+I)?9&z#z__Q%L3pnhN}U
z_rN#WU)kD59D4whbSYERHY01jM7id50EuI1ctl?<_IT=Y5vP>(sNN<OW;PZ?!Nq6@
zvOa;RF_j-T8_?!VN7D)6C$HRYyy%MdoXQ-5GPHrjR&KE1*3wu?hPm|833)bez2l@5
zn#k&Ja#2PDT%IYU%XmZ^tc(1NraoDT$|lx-%3O7|2<xN|g9l}S@f4Tj#-G&n0xR@J
zDFPWb0VoDdx}Z}=_2FI}9?T-}I$M|lYDEp7004}1PGewDY0zW|0bPTcX4@j<r)zOB
zGhQRFDe>kB&U5&F&^kBhm5y{o!y!F+4wdxXoy;!4$W`?_nL(+bK_QDAMUV1O0AwZ|
z6j)s}9YEZbY-C^Y)9Ej`aS&~{sXCG2SS3ce$EY;Yv-c8TlrD$C85ATlLZpGP_YWfi
z`RQ?z1@zIfa{yqfsUDMEPpwuX%XHdO+ASb3EPi1fBPocvfgsC0xa^CG2SWBPWQ&GS
zpCXPti8b>WkYbf#Vg%A?&_UwUsUQE_t4GX?7QqUpKJ2Iw#%)Q4Ft(`9Ja&Yk{C@38
z@%T`)#wWy(kKfEH;ZBQ(m*Iq&L=<)4D7tNO{SsA4Fp4D?(Ex6nQS&f3TK|atgj`fE
z2|OX0(&(ZqxJd~IANX&dvX?U14_<~h2(lP6k^H8ep;2HW6<hT1imONo5oB|bMG@a`
z#Lgj^XVeQ4Za~Fx&wUn%^o(Y8F)`=C6v*v@(L?R;IJbtvVC>oPo?U%v{M>|{sU~;p
zLTv$OTx3H^4zNUn4wUfo>j{CEvTC@C+cw+cW*ABH6u@!M2EdBL?1GbL_#e;7YDBas
zic?MTazk(khXSyPeDom_I~wkLv?Wr8<%egEfM!*M9^kl$><s)t${rCVYPkMa4qe||
zaAZ;PGdOrl))@{&=KbYE^I_b&+v)sO*eakJEuTMFdpO<K3}0qTT$6pt=)oXQa7<`0
z3_qg{T_Koqnwja~buX?Qflt$5%BYN=^^C-mWBQo9UT&W#8;ZEqwbH1S6!8FNcIqK8
z*i?p1+RXp~v^+u8&?5jcT%(1Pg;y;gHk;}^NHf1<u9G+;RphtcS7_pek#oQ}0{{Zx
z7Ygy8>zsVzaP}S!gc<n-P#@Z2g|MGNh9)SgEqV&*jY&(jl)!io3?{XUWCF*zqR2#M
zwNJvP10mPwk#w|Zh_;<u1R_v-Ya<4zuI%S1-um1;5?J%v2Mb`Sk%ysYQ##5zjE<cO
z4dKs})hcFTZWs<zYmk&M?a<jUHD0x({2o#<c3HuZ=)?HCV}Zf6XA!arG9FXtQMn9g
zfCyh&yo=7IX5U@AwDJzSHiJa1%@u$hYyrYm@H_y6L2%G_&t4iufUzFVBYlxQD}Ykc
z!mp1gBy5IHfURLXDAgNIT6p!=47JD&W@rkWvM{Q-MRMxwAR2}N0xit7%lU$V%7a}Y
zwFM;t1gG5()^>D3;Czy#58RTm?`p)RTS8I<-sC3+*n{A)P*rU!@Npj`e{x9xsif2v
zTW`{q3p<R6f~aRR%^dc#!D3~xyW!cgN6^V&b~8CFKvj@q-ali}5n-{gT&CV4p2=D}
z9g^m_X6KZ*%p=CslDP})s;)w%aJMb8L^m*`a$#Z?Ki1>^?A!Mk60Q{(FLt(&TVe9z
z0-!PiOV02JcNeq?AbJaI+B9xC;LB=}Ho0vH(@;Qe0zq~-8ckOa!(u@Wou`p_TR|QT
z38H`lJE$G{q1egUX@&v$x7wNLWD#j*!D58GLv^bT+jpdKBrK#SsQsWK(+RO40VA^w
z0nA7MN1Y1Fc#5JkwD5TtHG1t;lo=i)U+kFG?1Jh11h9382!marrRE2eZh;JGh`wNO
zQA_~n?%97HOKLA^#oG(5*bgSllS%rOc(S%Yj00cYR;!D9G_90{pfq7D4I*$k?byOV
zR|epi%oIJ{ou`5zS!-_dnxOa{uNv)(luMo^5TCOItq}2}sxCztLEzBGS)Mf6dzaw<
z!GweAgvFYJu&mH(Vl9HJBV%=Jz~~i%nDGIF9ncTET-AQ=fv{L11&K_<cvtPj0KcSJ
zqHGrQcbxIF-!%7A9gu^H_1}qa$)EsV25=Zlwv;ml`17G-=5A8~V@Cyp78UF`SCFAx
z5v?-bmG+t539aexV#>;ei!iht(!De;ym|y7ksL|^5Ko~B-vSh80++s?unD}bZaYa@
zPH4M$&fw;xEGN3_H1vHW><%-+dg7dfW)F8$bB+h7sThoOtteO(v{&-+iK}r$%G))#
z*Nhx^!ZMj1VeG?EkWg+0CYQSX1t96fV9^3c+9C393LU&CHsFCa1q99$`zTMsEWwLc
zxsw1|A?k8-m8HCrk6;K7dhNDJN3R9iws%6vTq_}PtR2CZ8TG;ltZ4<jHrnMp8#XOc
zmJK*YX~mYy4EVnTS1tvpiqxTi4NA<Nfuts_IIP*;p$5w0Y{80vN-srDhr7*1GK?Wm
zpc7{Vxs4*qJPbv)k!=J@$XqyN2<nGsklwVJyGU<ZOx>I}sU+^s8`P3F5QxrypG1-{
zGlr^7$Wsy(lo=xfC~BpKfg<2z4OEeEF@~x{Pi7O#CvqMJy+f+}=CB_$&IuEslB@s#
J000000038FvZ??8
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/fontawesome-webfont.svg b/ui/new-ui-samples/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000..1ee89d4
--- /dev/null
+++ b/ui/new-ui-samples/fonts/fontawesome-webfont.svg
@@ -0,0 +1,565 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
+<metadata></metadata>
+<defs>
+<font id="fontawesomeregular" horiz-adv-x="1536" >
+<font-face units-per-em="1792" ascent="1536" descent="-256" />
+<missing-glyph horiz-adv-x="448" />
+<glyph unicode=" " horiz-adv-x="448" />
+<glyph unicode="	" horiz-adv-x="448" />
+<glyph unicode=" " horiz-adv-x="448" />
+<glyph unicode="¨" horiz-adv-x="1792" />
+<glyph unicode="©" horiz-adv-x="1792" />
+<glyph unicode="®" horiz-adv-x="1792" />
+<glyph unicode="´" horiz-adv-x="1792" />
+<glyph unicode="Æ" horiz-adv-x="1792" />
+<glyph unicode="Ø" horiz-adv-x="1792" />
+<glyph unicode=" " horiz-adv-x="768" />
+<glyph unicode=" " horiz-adv-x="1537" />
+<glyph unicode=" " horiz-adv-x="768" />
+<glyph unicode=" " horiz-adv-x="1537" />
+<glyph unicode=" " horiz-adv-x="512" />
+<glyph unicode=" " horiz-adv-x="384" />
+<glyph unicode=" " horiz-adv-x="256" />
+<glyph unicode=" " horiz-adv-x="256" />
+<glyph unicode=" " horiz-adv-x="192" />
+<glyph unicode=" " horiz-adv-x="307" />
+<glyph unicode=" " horiz-adv-x="85" />
+<glyph unicode=" " horiz-adv-x="307" />
+<glyph unicode=" " horiz-adv-x="384" />
+<glyph unicode="™" horiz-adv-x="1792" />
+<glyph unicode="∞" horiz-adv-x="1792" />
+<glyph unicode="≠" horiz-adv-x="1792" />
+<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
+<glyph unicode="" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+<glyph unicode="" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
+<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+<glyph unicode="" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z " />
+<glyph unicode="" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
+<glyph unicode="" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
+<glyph unicode="" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+<glyph unicode="" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
+<glyph unicode="" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+<glyph unicode="" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+<glyph unicode="" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+<glyph unicode="" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+<glyph unicode="" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
+<glyph unicode="" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57 q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -4 -0.5 -13t-0.5 -13q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5 q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
+<glyph unicode="" horiz-adv-x="1408" d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142 q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5 t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68.5 -0.5t67.5 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5 t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
+<glyph unicode="" horiz-adv-x="1024" d="M0 -126l17 85q6 2 81.5 21.5t111.5 37.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5 q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2 t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5 q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
+<glyph unicode="" d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1 t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5 t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49 t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
+<glyph unicode="" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
+<glyph unicode="" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+<glyph unicode="" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+<glyph unicode="" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
+<glyph unicode="" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
+<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
+<glyph unicode="" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+<glyph unicode="" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+<glyph unicode="" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
+<glyph unicode="" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+<glyph unicode="" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+<glyph unicode="" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+<glyph unicode="" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+<glyph unicode="" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
+<glyph unicode="" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+<glyph unicode="" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
+<glyph unicode="" horiz-adv-x="1664" d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45 t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+<glyph unicode="" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="" horiz-adv-x="2048" d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
+<glyph unicode="" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960z" />
+<glyph unicode="" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+<glyph unicode="" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+<glyph unicode="" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+<glyph unicode="" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
+<glyph unicode="" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
+<glyph unicode="" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+<glyph unicode="" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+<glyph unicode="" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
+<glyph unicode="" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+<glyph unicode="" horiz-adv-x="1024" d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
+<glyph unicode="" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
+<glyph unicode="" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+<glyph unicode="" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5 t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+<glyph unicode="" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+<glyph unicode="" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+<glyph unicode="" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
+<glyph unicode="" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
+<glyph unicode="" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
+<glyph unicode="" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " />
+<glyph unicode="" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " />
+<glyph unicode="" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
+<glyph unicode="" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" />
+<glyph unicode="" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
+<glyph unicode="" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
+<glyph unicode="" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
+<glyph unicode="" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+<glyph unicode="" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
+<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
+<glyph unicode="" d="M829 318q0 -76 -58.5 -112.5t-139.5 -36.5q-41 0 -80.5 9.5t-75.5 28.5t-58 53t-22 78q0 46 25 80t65.5 51.5t82 25t84.5 7.5q20 0 31 -2q2 -1 23 -16.5t26 -19t23 -18t24.5 -22t19 -22.5t17 -26t9 -26.5t4.5 -31.5zM755 863q0 -60 -33 -99.5t-92 -39.5q-53 0 -93 42.5 t-57.5 96.5t-17.5 106q0 61 32 104t92 43q53 0 93.5 -45t58 -101t17.5 -107zM861 1120l88 64h-265q-85 0 -161 -32t-127.5 -98t-51.5 -153q0 -93 64.5 -154.5t158.5 -61.5q22 0 43 3q-13 -29 -13 -54q0 -44 40 -94q-175 -12 -257 -63q-47 -29 -75.5 -73t-28.5 -95 q0 -43 18.5 -77.5t48.5 -56.5t69 -37t77.5 -21t76.5 -6q60 0 120.5 15.5t113.5 46t86 82.5t33 117q0 49 -20 89.5t-49 66.5t-58 47.5t-49 44t-20 44.5t15.5 42.5t37.5 39.5t44 42t37.5 59.5t15.5 82.5q0 60 -22.5 99.5t-72.5 90.5h83zM1152 672h128v64h-128v128h-64v-128 h-128v-64h128v-160h64v160zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M735 740q0 -36 32 -70.5t77.5 -68t90.5 -73.5t77 -104t32 -142q0 -90 -48 -173q-72 -122 -211 -179.5t-298 -57.5q-132 0 -246.5 41.5t-171.5 137.5q-37 60 -37 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 42 -47.5 74t-15.5 73q0 36 21 85q-46 -4 -68 -4 q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q77 66 182.5 98t217.5 32h418l-138 -88h-131q74 -63 112 -133t38 -160q0 -72 -24.5 -129.5t-59 -93t-69.5 -65t-59.5 -61.5t-24.5 -66zM589 836q38 0 78 16.5t66 43.5q53 57 53 159q0 58 -17 125t-48.5 129.5 t-84.5 103.5t-117 41q-42 0 -82.5 -19.5t-65.5 -52.5q-47 -59 -47 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26zM591 -37q58 0 111.5 13t99 39t73 73t27.5 109q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -48 2 q-53 0 -105 -7t-107.5 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -70 35 -123.5t91.5 -83t119 -44t127.5 -14.5zM1401 839h213v-108h-213v-219h-105v219h-212v108h212v217h105v-217z" />
+<glyph unicode="" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
+<glyph unicode="" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
+<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
+<glyph unicode="" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
+<glyph unicode="" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" />
+<glyph unicode="" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
+<glyph unicode="" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" />
+<glyph unicode="" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5 t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704 q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" />
+<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" />
+<glyph unicode="" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+<glyph unicode="" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
+<glyph unicode="" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
+<glyph unicode="" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
+<glyph unicode="" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
+<glyph unicode="" horiz-adv-x="1792" d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5 t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5 q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" />
+<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
+<glyph unicode="" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
+<glyph unicode="" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+<glyph unicode="" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+<glyph unicode="" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" />
+<glyph unicode="" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+<glyph unicode="" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
+<glyph unicode="" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
+<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" />
+<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" />
+<glyph unicode="" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
+<glyph unicode="" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
+<glyph unicode="" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
+<glyph unicode="" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
+<glyph unicode="" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
+<glyph unicode="" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" />
+<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
+<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
+<glyph unicode="" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
+<glyph unicode="" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
+<glyph unicode="" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" />
+<glyph unicode="" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
+<glyph unicode="" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
+<glyph unicode="" d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" />
+<glyph unicode="" d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" />
+<glyph unicode="" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
+<glyph unicode="" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
+<glyph unicode="" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
+<glyph unicode="" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
+<glyph unicode="" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
+<glyph unicode="" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" />
+<glyph unicode="" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
+<glyph unicode="" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
+<glyph unicode="" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" />
+<glyph unicode="" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" />
+<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
+<glyph unicode="" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
+<glyph unicode="" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1024" d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14 q78 2 134 29z" />
+<glyph unicode="" d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
+<glyph unicode="" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
+<glyph unicode="" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
+<glyph unicode="" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
+<glyph unicode="" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
+<glyph unicode="" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324 l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" />
+<glyph unicode="" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
+<glyph unicode="" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
+<glyph unicode="" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " />
+<glyph unicode="" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
+<glyph unicode="" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237 q104 139 172.5 292.5t82.5 226.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="2176" d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40 t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29 q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9 q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102 t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" />
+<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69 q-46 32 -141.5 92.5t-142.5 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13 t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5 t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21 t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286 t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273 t273 -182.5t331.5 -68z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" />
+<glyph unicode="" horiz-adv-x="2048" d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64 q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
+<glyph unicode="" horiz-adv-x="2304" d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433 q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
+<glyph unicode="" d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q43 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0 q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
+<glyph unicode="" horiz-adv-x="1280" d="M981 197q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -49 2q-53 0 -104.5 -7t-107 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -56 23.5 -102t61 -75.5t87 -50t100 -29t101.5 -8.5q58 0 111.5 13t99 39t73 73t27.5 109zM864 1055 q0 59 -17 125.5t-48 129t-84 103.5t-117 41q-42 0 -82.5 -19.5t-66.5 -52.5q-46 -59 -46 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26q37 0 77.5 16.5t65.5 43.5q53 56 53 159zM752 1536h417l-137 -88h-132q75 -63 113 -133t38 -160q0 -72 -24.5 -129.5 t-59.5 -93t-69.5 -65t-59 -61.5t-24.5 -66q0 -36 32 -70.5t77 -68t90.5 -73.5t77.5 -104t32 -142q0 -91 -49 -173q-71 -122 -209.5 -179.5t-298.5 -57.5q-132 0 -246.5 41.5t-172.5 137.5q-36 59 -36 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 41 -47.5 73.5 t-15.5 73.5q0 40 21 85q-46 -4 -68 -4q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q76 66 182 98t218 32z" />
+<glyph unicode="" horiz-adv-x="2304" d="M1509 107q0 -14 -12 -29q-52 -59 -147.5 -83t-196.5 -24q-252 0 -346 107q-12 15 -12 29q0 17 12 29.5t29 12.5q15 0 30 -12q58 -49 125.5 -66t159.5 -17t160 17t127 66q15 12 30 12q17 0 29 -12.5t12 -29.5zM978 498q0 -61 -43 -104t-104 -43q-60 0 -104.5 43.5 t-44.5 103.5q0 61 44 105t105 44t104 -44t43 -105zM1622 498q0 -61 -43 -104t-104 -43q-60 0 -104.5 43.5t-44.5 103.5q0 61 44 105t105 44t104 -44t43 -105zM415 793q-39 27 -88 27q-66 0 -113 -47t-47 -113q0 -72 54 -121q53 141 194 254zM2020 382q0 222 -249 387 q-128 85 -291.5 126.5t-331.5 41.5t-331.5 -41.5t-292.5 -126.5q-249 -165 -249 -387t249 -387q129 -85 292.5 -126.5t331.5 -41.5t331.5 41.5t291.5 126.5q249 165 249 387zM2137 660q0 66 -47 113t-113 47q-50 0 -93 -30q140 -114 192 -256q61 48 61 126zM1993 1335 q0 49 -34.5 83.5t-82.5 34.5q-49 0 -83.5 -34.5t-34.5 -83.5q0 -48 34.5 -82.5t83.5 -34.5q48 0 82.5 34.5t34.5 82.5zM2220 660q0 -65 -33 -122t-89 -90q5 -35 5 -66q0 -139 -79 -255.5t-208 -201.5q-140 -92 -313.5 -136.5t-354.5 -44.5t-355 44.5t-314 136.5 q-129 85 -208 201.5t-79 255.5q0 36 6 71q-53 33 -83.5 88.5t-30.5 118.5q0 100 71 171.5t172 71.5q91 0 159 -60q265 170 638 177l144 456q10 29 40 29q24 0 384 -90q24 55 74 88t110 33q82 0 141 -59t59 -142t-59 -141.5t-141 -58.5q-83 0 -141.5 58.5t-59.5 140.5 l-339 80l-125 -395q349 -15 603 -179q71 63 163 63q101 0 172 -71.5t71 -171.5z" />
+<glyph unicode="" d="M950 393q7 7 17.5 7t17.5 -7t7 -18t-7 -18q-65 -64 -208 -64h-1h-1q-143 0 -207 64q-8 7 -8 18t8 18q7 7 17.5 7t17.5 -7q49 -51 172 -51h1h1q122 0 173 51zM671 613q0 -37 -26 -64t-63 -27t-63 27t-26 64t26 63t63 26t63 -26t26 -63zM1214 1049q-29 0 -50 21t-21 50 q0 30 21 51t50 21q30 0 51 -21t21 -51q0 -29 -21 -50t-51 -21zM1216 1408q132 0 226 -94t94 -227v-894q0 -133 -94 -227t-226 -94h-896q-132 0 -226 94t-94 227v894q0 133 94 227t226 94h896zM1321 596q35 14 57 45.5t22 70.5q0 51 -36 87.5t-87 36.5q-60 0 -98 -48 q-151 107 -375 115l83 265l206 -49q1 -50 36.5 -85t84.5 -35q50 0 86 35.5t36 85.5t-36 86t-86 36q-36 0 -66 -20.5t-45 -53.5l-227 54q-9 2 -17.5 -2.5t-11.5 -14.5l-95 -302q-224 -4 -381 -113q-36 43 -93 43q-51 0 -87 -36.5t-36 -87.5q0 -37 19.5 -67.5t52.5 -45.5 q-7 -25 -7 -54q0 -98 74 -181.5t201.5 -132t278.5 -48.5q150 0 277.5 48.5t201.5 132t74 181.5q0 27 -6 54zM971 702q37 0 63 -26t26 -63t-26 -64t-63 -27t-63 27t-26 64t26 63t63 26z" />
+<glyph unicode="" d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150 v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103 t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328 v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" />
+<glyph unicode="" d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123 v-369h123z" />
+<glyph unicode="" d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101 v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="2038" d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14 q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24 q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33 q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5 t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43 q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5 t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13 t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" />
+<glyph unicode="" d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10 q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14 q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14 t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44 q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" />
+<glyph unicode="" d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5 t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5 q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126 t135.5 51q85 0 145 -60.5t60 -145.5z" />
+<glyph unicode="" d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5 q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28 q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11 q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q106 35 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5 q20 0 20 -21v-418z" />
+<glyph unicode="" horiz-adv-x="1792" d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48 l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23 t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128 q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128 q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" />
+<glyph unicode="" d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9 t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9 t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9 t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68t68 28t68 -28l228 -228h368l228 228q28 28 68 28t68 -28t28 -68t-28 -68zM864 1152q0 -93 -65.5 -158.5 t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="" horiz-adv-x="1664" d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5 q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819 q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5 t100.5 134t141.5 55.5z" />
+<glyph unicode="" horiz-adv-x="768" d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z " />
+<glyph unicode="" horiz-adv-x="2304" d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67 t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-5 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70 v-400l434 -186q36 -16 57 -48t21 -70z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658 q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204 q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" />
+<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5 t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217 t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5 q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89 q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" />
+<glyph unicode="" d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5 q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5 q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z " />
+<glyph unicode="" horiz-adv-x="1792" d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188 l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5 t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1 q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" />
+<glyph unicode="" horiz-adv-x="2048" d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384 q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5 l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5 t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" />
+<glyph unicode="" d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384 q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" />
+<glyph unicode="" d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64 q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37 q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1024" d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" />
+<glyph unicode="" horiz-adv-x="2304" d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11 q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245 q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785 l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242 q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236q0 -11 -8 -19 t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786q-13 2 -22 11t-9 22v899 q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" />
+<glyph unicode="" d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127 t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5 t-103 128v128q0 69 103 128t280 93.5t385 34.5z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197 q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8 q-1 1 -1 2t-0.5 1.5t-0.5 1.5q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4l-3 21q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5t-3.5 -21.5l-4 -21h-4l-2 21 q-2 26 -7 46l-99 438h90v107h-300z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107 h-290v-107h68l189 -272l-194 -283h-68z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" />
+<glyph unicode="" d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400 v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79 q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5 q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" />
+<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243 l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" />
+<glyph unicode="" d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406 q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" />
+<glyph unicode="" horiz-adv-x="1792" d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546 q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94 q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55 t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97q14 -16 29.5 -34t34.5 -40t29 -34q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5 t-85 -189.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194 q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5 t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348q0 222 101 414.5t276.5 317t390.5 155.5v-260q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 q0 230 -145.5 406t-366.5 221v260q215 -31 390.5 -155.5t276.5 -317t101 -414.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170 t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136 q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
+<glyph unicode="" horiz-adv-x="1792" d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251 l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162 q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33 q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5 t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="" d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85 q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392 q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072 q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58 q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47 q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171 v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" />
+<glyph unicode="" d="M825 547l343 588h-150q-21 -39 -63.5 -118.5t-68 -128.5t-59.5 -118.5t-60 -128.5h-3q-21 48 -44.5 97t-52 105.5t-46.5 92t-54 104.5t-49 95h-150l323 -589v-435h134v436zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5 t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153 t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5 q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20 t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5 t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" />
+<glyph unicode="" horiz-adv-x="2048" d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25 q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5 q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109 q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137 l863 639l-478 -797z" />
+<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23 t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" />
+<glyph unicode="" d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15 t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2 t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160 q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5 q0 -26 -12 -48t-36 -22z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179 q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" />
+<glyph unicode="" d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256 q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
+<glyph unicode="" d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5 t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" />
+<glyph unicode="" d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5 t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5 t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91 q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9 t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323 l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" />
+<glyph unicode="" horiz-adv-x="1792" d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23 zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5 t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" />
+<glyph unicode="" horiz-adv-x="1792" d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1755 1083q37 -37 37 -90t-37 -91l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234l401 400 q38 37 91 37t90 -37z" />
+<glyph unicode="" horiz-adv-x="1792" d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5 t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q3 -2 11 -7 t11 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" />
+<glyph unicode="" horiz-adv-x="1792" d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
+<glyph unicode="" d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36 q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q70 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5 t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87 q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19 t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121 q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
+<glyph unicode="" horiz-adv-x="1792" d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5 t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38 h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1112 1090q0 159 -237 159h-70q-32 0 -59.5 -21.5t-34.5 -52.5l-63 -276q-2 -5 -2 -16q0 -24 17 -39.5t41 -15.5h53q69 0 128.5 13t112.5 41t83.5 81.5t30.5 126.5zM1716 938q0 -265 -220 -428q-219 -161 -612 -161h-61q-32 0 -59 -21.5t-34 -52.5l-73 -316 q-8 -36 -40.5 -61.5t-69.5 -25.5h-213q-31 0 -53 20t-22 51q0 10 13 65h151q34 0 64 23.5t38 56.5l73 316q8 33 37.5 57t63.5 24h61q390 0 607 160t217 421q0 129 -51 207q183 -92 183 -335zM1533 1123q0 -264 -221 -428q-218 -161 -612 -161h-60q-32 0 -59.5 -22t-34.5 -53 l-73 -315q-8 -36 -40 -61.5t-69 -25.5h-214q-31 0 -52.5 19.5t-21.5 51.5q0 8 2 20l300 1301q8 36 40.5 61.5t69.5 25.5h444q68 0 125 -4t120.5 -15t113.5 -30t96.5 -50.5t77.5 -74t49.5 -103.5t18.5 -136z" />
+<glyph unicode="" horiz-adv-x="1792" d="M602 949q19 -61 31 -123.5t17 -141.5t-14 -159t-62 -145q-21 81 -67 157t-95.5 127t-99 90.5t-78.5 57.5t-33 19q-62 34 -81.5 100t14.5 128t101 81.5t129 -14.5q138 -83 238 -177zM927 1236q11 -25 20.5 -46t36.5 -100.5t42.5 -150.5t25.5 -179.5t0 -205.5t-47.5 -209.5 t-105.5 -208.5q-51 -72 -138 -72q-54 0 -98 31q-57 40 -69 109t28 127q60 85 81 195t13 199.5t-32 180.5t-39 128t-22 52q-31 63 -8.5 129.5t85.5 97.5q34 17 75 17q47 0 88.5 -25t63.5 -69zM1248 567q-17 -160 -72 -311q-17 131 -63 246q25 174 -5 361q-27 178 -94 342 q114 -90 212 -211q9 -37 15 -80q26 -179 7 -347zM1520 1440q9 -17 23.5 -49.5t43.5 -117.5t50.5 -178t34 -227.5t5 -269t-47 -300t-112.5 -323.5q-22 -48 -66 -75.5t-95 -27.5q-39 0 -74 16q-67 31 -92.5 100t4.5 136q58 126 90 257.5t37.5 239.5t-3.5 213.5t-26.5 180.5 t-38.5 138.5t-32.5 90t-15.5 32.5q-34 65 -11.5 135.5t87.5 104.5q37 20 81 20q49 0 91.5 -25.5t66.5 -70.5z" />
+<glyph unicode="" horiz-adv-x="2304" d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27 q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128 q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="2304" d="M671 603h-13q-47 0 -47 -32q0 -22 20 -22q17 0 28 15t12 39zM1066 639h62v3q1 4 0.5 6.5t-1 7t-2 8t-4.5 6.5t-7.5 5t-11.5 2q-28 0 -36 -38zM1606 603h-12q-48 0 -48 -32q0 -22 20 -22q17 0 28 15t12 39zM1925 629q0 41 -30 41q-19 0 -31 -20t-12 -51q0 -42 28 -42 q20 0 32.5 20t12.5 52zM480 770h87l-44 -262h-56l32 201l-71 -201h-39l-4 200l-34 -200h-53l44 262h81l2 -163zM733 663q0 -6 -4 -42q-16 -101 -17 -113h-47l1 22q-20 -26 -58 -26q-23 0 -37.5 16t-14.5 42q0 39 26 60.5t73 21.5q14 0 23 -1q0 3 0.5 5.5t1 4.5t0.5 3 q0 20 -36 20q-29 0 -59 -10q0 4 7 48q38 11 67 11q74 0 74 -62zM889 721l-8 -49q-22 3 -41 3q-27 0 -27 -17q0 -8 4.5 -12t21.5 -11q40 -19 40 -60q0 -72 -87 -71q-34 0 -58 6q0 2 7 49q29 -8 51 -8q32 0 32 19q0 7 -4.5 11.5t-21.5 12.5q-43 20 -43 59q0 72 84 72 q30 0 50 -4zM977 721h28l-7 -52h-29q-2 -17 -6.5 -40.5t-7 -38.5t-2.5 -18q0 -16 19 -16q8 0 16 2l-8 -47q-21 -7 -40 -7q-43 0 -45 47q0 12 8 56q3 20 25 146h55zM1180 648q0 -23 -7 -52h-111q-3 -22 10 -33t38 -11q30 0 58 14l-9 -54q-30 -8 -57 -8q-95 0 -95 95 q0 55 27.5 90.5t69.5 35.5q35 0 55.5 -21t20.5 -56zM1319 722q-13 -23 -22 -62q-22 2 -31 -24t-25 -128h-56l3 14q22 130 29 199h51l-3 -33q14 21 25.5 29.5t28.5 4.5zM1506 763l-9 -57q-28 14 -50 14q-31 0 -51 -27.5t-20 -70.5q0 -30 13.5 -47t38.5 -17q21 0 48 13 l-10 -59q-28 -8 -50 -8q-45 0 -71.5 30.5t-26.5 82.5q0 70 35.5 114.5t91.5 44.5q26 0 61 -13zM1668 663q0 -18 -4 -42q-13 -79 -17 -113h-46l1 22q-20 -26 -59 -26q-23 0 -37 16t-14 42q0 39 25.5 60.5t72.5 21.5q15 0 23 -1q2 7 2 13q0 20 -36 20q-29 0 -59 -10q0 4 8 48 q38 11 67 11q73 0 73 -62zM1809 722q-14 -24 -21 -62q-23 2 -31.5 -23t-25.5 -129h-56l3 14q19 104 29 199h52q0 -11 -4 -33q15 21 26.5 29.5t27.5 4.5zM1950 770h56l-43 -262h-53l3 19q-23 -23 -52 -23q-31 0 -49.5 24t-18.5 64q0 53 27.5 92t64.5 39q31 0 53 -29z M2061 640q0 148 -72.5 273t-198 198t-273.5 73q-181 0 -328 -110q127 -116 171 -284h-50q-44 150 -158 253q-114 -103 -158 -253h-50q44 168 171 284q-147 110 -328 110q-148 0 -273.5 -73t-198 -198t-72.5 -273t72.5 -273t198 -198t273.5 -73q181 0 328 110 q-120 111 -165 264h50q46 -138 152 -233q106 95 152 233h50q-45 -153 -165 -264q147 -110 328 -110q148 0 273.5 73t198 198t72.5 273zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="2304" d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42 q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604 v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569 q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73 t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
+<glyph unicode="" horiz-adv-x="2304" d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260 l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279 v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040 q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168 q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5 t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21 h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5 t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
+<glyph unicode="" horiz-adv-x="2304" d="M322 689h-15q-19 0 -19 18q0 28 19 85q5 15 15 19.5t28 4.5q77 0 77 -49q0 -41 -30.5 -59.5t-74.5 -18.5zM664 528q-47 0 -47 29q0 62 123 62l3 -3q-5 -88 -79 -88zM1438 687h-15q-19 0 -19 19q0 28 19 85q5 15 14.5 19t28.5 4q77 0 77 -49q0 -41 -30.5 -59.5 t-74.5 -18.5zM1780 527q-47 0 -47 30q0 62 123 62l3 -3q-5 -89 -79 -89zM373 894h-128q-8 0 -14.5 -4t-8.5 -7.5t-7 -12.5q-3 -7 -45 -190t-42 -192q0 -7 5.5 -12.5t13.5 -5.5h62q25 0 32.5 34.5l15 69t32.5 34.5q47 0 87.5 7.5t80.5 24.5t63.5 52.5t23.5 84.5 q0 36 -14.5 61t-41 36.5t-53.5 15.5t-62 4zM719 798q-38 0 -74 -6q-2 0 -8.5 -1t-9 -1.5l-7.5 -1.5t-7.5 -2t-6.5 -3t-6.5 -4t-5 -5t-4.5 -7t-4 -9q-9 -29 -9 -39t9 -10q5 0 21.5 5t19.5 6q30 8 58 8q74 0 74 -36q0 -11 -10 -14q-8 -2 -18 -3t-21.5 -1.5t-17.5 -1.5 q-38 -4 -64.5 -10t-56.5 -19.5t-45.5 -39t-15.5 -62.5q0 -38 26 -59.5t64 -21.5q24 0 45.5 6.5t33 13t38.5 23.5q-3 -7 -3 -15t5.5 -13.5t12.5 -5.5h56q1 1 7 3.5t7.5 3.5t5 3.5t5 5.5t2.5 8l45 194q4 13 4 30q0 81 -145 81zM1247 793h-74q-22 0 -39 -23q-5 -7 -29.5 -51 t-46.5 -81.5t-26 -38.5l-5 4q0 77 -27 166q-1 5 -3.5 8.5t-6 6.5t-6.5 5t-8.5 3t-8.5 1.5t-9.5 1t-9 0.5h-10h-8.5q-38 0 -38 -21l1 -5q5 -53 25 -151t25 -143q2 -16 2 -24q0 -19 -30.5 -61.5t-30.5 -58.5q0 -13 40 -13q61 0 76 25l245 415q10 20 10 26q0 9 -8 9zM1489 892 h-129q-18 0 -29 -23q-6 -13 -46.5 -191.5t-40.5 -190.5q0 -20 43 -20h7.5h9h9t9.5 1t8.5 2t8.5 3t6.5 4.5t5.5 6t3 8.5l21 91q2 10 10.5 17t19.5 7q47 0 87.5 7t80.5 24.5t63.5 52.5t23.5 84q0 36 -14.5 61t-41 36.5t-53.5 15.5t-62 4zM1835 798q-26 0 -74 -6 q-38 -6 -48 -16q-7 -8 -11 -19q-8 -24 -8 -39q0 -10 8 -10q1 0 41 12q30 8 58 8q74 0 74 -36q0 -12 -10 -14q-4 -1 -57 -7q-38 -4 -64.5 -10t-56.5 -19.5t-45.5 -39t-15.5 -62.5t26 -58.5t64 -21.5q24 0 45 6t34 13t38 24q-3 -15 -3 -16q0 -5 2 -8.5t6.5 -5.5t8 -3.5 t10.5 -2t9.5 -0.5h9.5h8q42 0 48 25l45 194q3 15 3 31q0 81 -145 81zM2157 889h-55q-25 0 -33 -40q-10 -44 -36.5 -167t-42.5 -190v-5q0 -16 16 -18h1h57q10 0 18.5 6.5t10.5 16.5l83 374h-1l1 5q0 7 -5.5 12.5t-13.5 5.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048 q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="2304" d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109 q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118 q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151 q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31 q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5 l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5 l418 363q10 8 23.5 7t21.5 -11z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128 q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161 q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" />
+<glyph unicode="" horiz-adv-x="1408" d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704 q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167 q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+<glyph unicode="" d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5 t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53 q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24 t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61 t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10 t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5 t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11t55.5 -11t52.5 -38q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5t47 37.5 q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-35 0 -55.5 11t-52.5 38q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38t-58 27 t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448h256v448 h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51 t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" />
+<glyph unicode="" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
+<glyph unicode="" horiz-adv-x="1792" d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9 t9 -23z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20 q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50 t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1 q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" />
+<glyph unicode="" d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73 q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110 q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5 t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5 t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5 t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
+<glyph unicode="" horiz-adv-x="2304" d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94 q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469 q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400 q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" />
+<glyph unicode="" d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5 h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327 q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5 q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" />
+<glyph unicode="" horiz-adv-x="1280" d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q18 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119 t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5 t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14 q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88 q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5 t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206 q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307 t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14 t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" />
+<glyph unicode="" d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5 t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+<glyph unicode="" d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55 q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410 q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" />
+<glyph unicode="" d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" />
+<glyph unicode="" horiz-adv-x="2048" d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335 q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5 q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360q2 0 4.5 -1t5.5 -2.5l5 -2.5l188 199v347l-187 194 q-13 -8 -29 -10zM986 1438h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13 zM552 226h402l64 66l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224 l213 -225zM1023 946l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196 l-48 -227l130 227h-82zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" />
+<glyph unicode="" d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" />
+<glyph unicode="" d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384 q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021 q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25 q209 0 374 -102q172 107 374 102z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101 q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284 q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" />
+<glyph unicode="" d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34 l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114 v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378 v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51 h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5 t-43 -34t-16.5 -53.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832 q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126.5t-103.5 132.5t-108.5 126t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5 t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113 t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5 q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" />
+<glyph unicode="" horiz-adv-x="1664" d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920 q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920 q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="" horiz-adv-x="2048" d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20 l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83 q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83 q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314 v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83 q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
+<glyph unicode="" d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14 t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5 q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31 t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" />
+<glyph unicode="" horiz-adv-x="2304" d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5 t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105 l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226 t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" />
+<glyph unicode="" d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12 q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384 q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5 t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221 q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124 t127 -344z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292 q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1280 1504q0 14 9 23t23 9h416q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-419 -420q87 -104 129.5 -236.5t30.5 -276.5q-22 -250 -200.5 -431t-428.5 -206q-163 -17 -314 39.5t-256.5 162t-162 256.5t-39.5 314q25 250 206 428.5 t431 200.5q144 12 276.5 -30.5t236.5 -129.5l419 419h-261q-14 0 -23 9t-9 23v64zM704 -128q117 0 223.5 45.5t184 123t123 184t45.5 223.5t-45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123 t223.5 -45.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5 t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="" d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64 q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64 q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9 t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5 t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23 t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391 q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391 q0 -226 -154 -391q103 -57 218 -57z" />
+<glyph unicode="" horiz-adv-x="1920" d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230 q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9 t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128 q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -29 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" />
+<glyph unicode="" horiz-adv-x="2048" d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23 t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9 t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5 t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1728 1536q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-229 -230l156 -156q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-156 157l-99 -100q87 -104 129.5 -236.5t30.5 -276.5q-22 -250 -200.5 -431t-428.5 -206q-163 -17 -314 39.5 t-256.5 162t-162 256.5t-39.5 314q25 250 206 428.5t431 200.5q144 12 276.5 -30.5t236.5 -129.5l99 99l-156 156q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l156 -156l229 229h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM1280 448q0 117 -45.5 223.5t-123 184t-184 123 t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22 t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5 t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="" horiz-adv-x="2048" d="M2029 685q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-131q-12 -119 -67 -226t-139 -183.5t-196.5 -121.5t-234.5 -45q-180 0 -330.5 91t-234.5 247 t-74 337q8 162 94 300t226.5 219.5t302.5 85.5q166 4 310.5 -71.5t235.5 -208.5t107 -296h131v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM640 128q104 0 198.5 40.5t163.5 109.5t109.5 163.5 t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
+<glyph unicode="" horiz-adv-x="1280" d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5 t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" />
+<glyph unicode="" horiz-adv-x="1280" d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5 l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5 q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" />
+<glyph unicode="" d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5 t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233 l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" />
+<glyph unicode="" horiz-adv-x="1792" d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216 q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
+<glyph unicode="" horiz-adv-x="2048" d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5 t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" />
+<glyph unicode="" horiz-adv-x="2048" d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136 q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69 t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" />
+<glyph unicode="" horiz-adv-x="2048" d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704 q-26 0 -45 -19t-19 -45v-384h1152z" />
+<glyph unicode="" d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
+<glyph unicode="" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56 t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
+<glyph unicode="" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47 t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
+<glyph unicode="" horiz-adv-x="1792" d="M1792 204v-209h-642v209h134v926h-6l-314 -1135h-243l-310 1135h-8v-926h135v-209h-538v209h69q21 0 43 19.5t22 37.5v881q0 18 -22 40t-43 22h-69v209h672l221 -821h6l223 821h670v-209h-71q-19 0 -41 -22t-22 -40v-881q0 -18 21.5 -37.5t41.5 -19.5h71z" />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" horiz-adv-x="1792" />
+<glyph unicode="" horiz-adv-x="1792" />
+</font>
+</defs></svg>
\ No newline at end of file
diff --git a/ui/new-ui-samples/fonts/fontawesome-webfont.ttf b/ui/new-ui-samples/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..ed9372f8ea0fbaa04f42630a48887e4b38945345
GIT binary patch
literal 122092
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 +|+&Vdls@0SAya!5R?!
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
W2%>->3J9Wr?l-V&_Su?ry8j2p&Q&b{
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/fontawesome-webfont.woff b/ui/new-ui-samples/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000000000000000000000000000000000000..8b280b98fa2fa261aa4b0f8fd061f772073ef83e
GIT binary patch
literal 71508
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
F003Px<E8)r
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/fontawesome-webfont.woff2 b/ui/new-ui-samples/fonts/fontawesome-webfont.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..3311d585145b1cc1b9581e914acbb32d8542b4f5
GIT binary patch
literal 56780
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/fontello.eot b/ui/new-ui-samples/fonts/fontello.eot
new file mode 100644
index 0000000000000000000000000000000000000000..4485477e781e2444c35c47b5b8944695fcb79af3
GIT binary patch
literal 42700
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
DzM+#I
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/fontello.svg b/ui/new-ui-samples/fonts/fontello.svg
new file mode 100644
index 0000000..7efcd70
--- /dev/null
+++ b/ui/new-ui-samples/fonts/fontello.svg
@@ -0,0 +1,220 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Copyright (C) 2014 by original authors @ fontello.com</metadata>
+<defs>
+<font id="fontello" horiz-adv-x="1000" >
+<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
+<missing-glyph horiz-adv-x="1000" />
+<glyph glyph-name="user" unicode="" d="m786 66q0-67-41-106t-108-39h-488q-67 0-108 39t-41 106q0 30 2 58t8 61 15 60 24 55 34 45 48 30 62 11q5 0 24-12t41-27 60-27 75-12 74 12 61 27 41 27 24 12q34 0 62-11t48-30 34-45 24-55 15-60 8-61 2-58z m-179 498q0-88-63-151t-151-63-152 63-62 151 62 152 152 63 151-63 63-152z" horiz-adv-x="785.7" />
+<glyph glyph-name="help-circled" unicode="" d="m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="search" unicode="" d="m643 386q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-22-50t-50-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
+<glyph glyph-name="tag" unicode="" d="m250 600q0 30-21 51t-50 20-51-20-21-51 21-50 51-21 50 21 21 50z m595-321q0-30-20-51l-274-274q-22-21-51-21-30 0-50 21l-399 399q-21 21-36 57t-15 65v232q0 29 21 50t50 22h233q29 0 65-15t57-36l399-399q20-21 20-50z" horiz-adv-x="857.1" />
+<glyph glyph-name="dot-2" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 32-32 78 32 78 78 32z m350 0q46 0 78-32t32-78q0-44-33-77t-77-33q-46 0-78 32t-32 78 32 78 78 32z" horiz-adv-x="570" />
+<glyph glyph-name="arrows-cw" unicode="" d="m843 261q0-3 0-4-36-150-150-243t-267-93q-81 0-157 31t-136 88l-72-72q-11-11-25-11t-25 11-11 25v250q0 14 11 25t25 11h250q14 0 25-11t10-25-10-25l-77-77q40-37 90-57t105-20q74 0 139 37t104 99q6 10 29 66 5 13 17 13h107q8 0 13-6t5-12z m14 446v-250q0-14-10-25t-26-11h-250q-14 0-25 11t-10 25 10 25l77 77q-82 77-194 77-75 0-140-37t-104-99q-6-10-29-66-5-13-17-13h-111q-7 0-13 6t-5 12v4q36 150 151 243t268 93q81 0 158-31t137-88l72 72q11 11 25 11t26-11 10-25z" horiz-adv-x="857.1" />
+<glyph glyph-name="print" unicode="" d="m214-7h500v143h-500v-143z m0 357h500v214h-89q-22 0-38 16t-16 38v89h-357v-357z m643-36q0 15-10 25t-26 11-25-11-10-25 10-25 25-10 26 10 10 25z m72 0v-232q0-7-6-12t-12-6h-125v-89q0-22-16-38t-38-16h-536q-22 0-37 16t-16 38v89h-125q-7 0-13 6t-5 12v232q0 44 32 76t75 31h36v304q0 22 16 38t37 16h375q23 0 50-12t42-26l85-85q15-16 27-43t11-49v-143h35q45 0 76-31t32-76z" horiz-adv-x="928.6" />
+<glyph glyph-name="cancel-circled" unicode="" d="m641 224q0 14-10 25l-101 101 101 101q10 11 10 25 0 15-10 26l-51 50q-10 11-25 11-15 0-25-11l-101-101-101 101q-11 11-26 11-15 0-25-11l-50-50q-11-11-11-26 0-14 11-25l101-101-101-101q-11-11-11-25 0-15 11-26l50-50q10-11 25-11 15 0 26 11l101 101 101-101q10-11 25-11 15 0 25 11l51 50q10 11 10 26z m216 126q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="edit-alt" unicode="" d="m0-150l0 1000 646 0-164-164-318 0 0-672 672 0 0 319 164 164 0-647-1000 0z m363 363l0 118 6 0q39 2 72-30 39-39 39-88l-117 0z m51 176l367 367 125-125-367-367z m397 397l64 64 125-125-64-64z" horiz-adv-x="1000" />
+<glyph glyph-name="login" unicode="" d="m661 350q0-14-11-25l-303-304q-11-10-26-10t-25 10-10 25v161h-250q-15 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 10 25t25 10 26-10l303-304q11-10 11-25z m196 196v-392q0-67-47-114t-114-47h-178q-7 0-13 5t-5 13q0 2-1 11t0 15 2 13 5 11 12 3h178q37 0 63 27t27 63v392q0 37-27 63t-63 27h-174t-6 0-6 2-5 3-4 5-1 8q0 2-1 11t0 15 2 13 5 11 12 3h178q67 0 114-47t47-114z" horiz-adv-x="857.1" />
+<glyph glyph-name="logout" unicode="" d="m357 46q0-2 1-11t0-14-2-14-5-11-12-3h-178q-67 0-114 47t-47 114v392q0 67 47 114t114 47h178q8 0 13-5t5-13q0-2 1-11t0-15-2-13-5-11-12-3h-178q-37 0-63-27t-27-63v-392q0-37 27-63t63-27h174t6 0 7-2 4-3 4-5 1-8z m518 304q0-14-11-25l-303-304q-11-10-25-10t-25 10-11 25v161h-250q-14 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 11 25t25 10 25-10l303-304q11-10 11-25z" horiz-adv-x="928.6" />
+<glyph glyph-name="download" unicode="" d="m0 84v73q0 33 24 56t57 24 56-24 24-56v-73q0-17 12-29t30-13h531q18 0 30 13t12 29v73q0 33 24 56t56 24 57-24 24-56v-73q0-84-59-143t-144-60h-531q-84 0-144 60t-59 143z m155 359q0 33 24 57 23 23 56 23t57-23l105-106v344q0 33 24 57t56 23 57-23 24-57v-344l110 110q24 24 57 24t56-24q24-23 24-56t-24-57l-247-247q-24-25-57-25-32 0-56 25l-242 242q-24 24-24 57z" horiz-adv-x="937.5" />
+<glyph glyph-name="th-large" unicode="" d="m429 279v-215q0-29-22-50t-50-21h-286q-29 0-50 21t-21 50v215q0 29 21 50t50 21h286q29 0 50-21t22-50z m0 428v-214q0-29-22-50t-50-22h-286q-29 0-50 22t-21 50v214q0 29 21 50t50 22h286q29 0 50-22t22-50z m500-428v-215q0-29-22-50t-50-21h-286q-29 0-50 21t-21 50v215q0 29 21 50t50 21h286q29 0 50-21t22-50z m0 428v-214q0-29-22-50t-50-22h-286q-29 0-50 22t-21 50v214q0 29 21 50t50 22h286q29 0 50-22t22-50z" horiz-adv-x="928.6" />
+<glyph glyph-name="th" unicode="" d="m286 154v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q22 0 38-15t16-38z m0 285v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q22 0 38-16t16-38z m357-285v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q23 0 38-15t16-38z m-357 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q22 0 38-16t16-38z m357-286v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q23 0 38-16t16-38z m357-285v-108q0-22-16-37t-38-16h-178q-22 0-38 16t-16 37v108q0 22 16 38t38 15h178q23 0 38-15t16-38z m-357 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q23 0 38-16t16-38z m357-286v-107q0-22-16-38t-38-15h-178q-22 0-38 15t-16 38v107q0 23 16 38t38 16h178q23 0 38-16t16-38z m0 286v-107q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v107q0 22 16 38t38 16h178q23 0 38-16t16-38z" horiz-adv-x="1000" />
+<glyph glyph-name="th-list" unicode="" d="m286 154v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q22 0 38-15t16-38z m0 285v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q22 0 38-16t16-38z m714-285v-108q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37v108q0 22 16 38t38 15h535q23 0 38-15t16-38z m-714 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q22 0 38-16t16-38z m714-286v-107q0-22-16-38t-38-15h-535q-23 0-38 15t-16 38v107q0 23 16 38t38 16h535q23 0 38-16t16-38z m0 286v-107q0-22-16-38t-38-16h-535q-23 0-38 16t-16 38v107q0 22 16 38t38 16h535q23 0 38-16t16-38z" horiz-adv-x="1000" />
+<glyph glyph-name="star" unicode="" d="m929 489q0-12-15-27l-203-197 48-279q1-4 1-12 0-11-6-19t-17-9q-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
+<glyph glyph-name="star-empty" unicode="" d="m634 290l171 165-235 35-106 213-105-213-236-35 171-165-41-235 211 111 211-111z m295 199q0-12-15-27l-203-197 48-279q1-4 1-12 0-28-23-28-10 0-22 7l-251 132-250-132q-13-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
+<glyph glyph-name="users" unicode="" d="m331 350q-90-3-148-71h-75q-45 0-77 22t-31 66q0 197 69 197 4 0 25-11t54-24 66-12q38 0 75 13-3-21-3-37 0-78 45-143z m598-356q0-66-41-105t-108-39h-488q-68 0-108 39t-41 105q0 30 2 58t8 61 14 61 24 54 35 45 48 30 62 11q6 0 24-12t41-26 59-27 76-12 75 12 60 27 41 26 23 12q35 0 63-11t47-30 35-45 24-54 15-61 8-61 2-58z m-572 713q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m393-214q0-89-63-152t-151-62-152 62-63 152 63 151 152 63 151-63 63-151z m321-126q0-43-31-66t-77-22h-75q-57 68-147 71 45 65 45 143 0 16-3 37 37-13 74-13 33 0 67 12t54 24 24 11q69 0 69-197z m-71 340q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z" horiz-adv-x="1071.4" />
+<glyph glyph-name="upload" unicode="" d="m0 84v73q0 33 24 56t57 24 56-24 24-56v-73q0-17 12-29t30-13h531q18 0 30 13t12 29v73q0 33 24 56t56 24 57-24 24-56v-73q0-84-59-143t-144-60h-531q-84 0-143 59t-60 144z m155 407q0 33 24 57l247 247q23 23 57 23 33 0 56-23l243-242q23-24 23-57t-23-57q-24-23-57-23t-57 23l-105 105v-344q0-33-24-57t-56-24q-33 0-57 24t-24 57v344l-110-110q-24-23-57-23t-56 23-24 57z" horiz-adv-x="937.5" />
+<glyph glyph-name="circle-thin" unicode="" d="m429 707q-73 0-139-28t-114-76-76-114-29-139 29-139 76-113 114-77 139-28 138 28 114 77 76 113 29 139-29 139-76 114-114 76-138 28z m428-357q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="dot-circled" unicode="" d="m571 350q0-59-41-101t-101-42-101 42-42 101 42 101 101 42 101-42 41-101z m-142 304q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="ok" unicode="" d="m932 534q0-22-15-38l-404-404-76-76q-16-15-38-15t-38 15l-76 76-202 202q-15 16-15 38t15 38l76 76q16 16 38 16t38-16l164-165 366 367q16 16 38 16t38-16l76-76q15-16 15-38z" horiz-adv-x="1000" />
+<glyph glyph-name="check-empty-1" unicode="" d="m625 707h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v464q0 37-26 63t-63 26z m161-89v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" />
+<glyph glyph-name="clock-2" unicode="" d="m0 349q0 188 134 322t322 134 321-134 133-322-133-321-321-133-322 133-134 321z m119 0q0-140 99-238t238-99 238 99 99 238-99 238-238 99-238-99-99-238z m172-69l0 117 117 0 0 213 117 0 0-330-234 0z" horiz-adv-x="910" />
+<glyph glyph-name="ok-squared" unicode="" d="m382 125l343 343q10 10 10 25t-10 25l-57 57q-11 10-25 10t-25-10l-261-261-118 118q-10 11-25 11t-25-11l-57-57q-10-11-10-25t10-25l200-200q11-11 25-11t25 11z m475 493v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
+<glyph glyph-name="pin" unicode="" d="m268 368v250q0 8-5 13t-13 5-13-5-5-13v-250q0-8 5-13t13-5 13 5 5 13z m375-197q0-14-11-25t-25-10h-239l-29-270q-1-7-6-11t-11-5h-1q-15 0-17 15l-43 271h-225q-15 0-25 10t-11 25q0 69 44 124t99 55v286q-29 0-50 21t-22 50 22 50 50 22h357q29 0 50-22t21-50-21-50-50-21v-286q55 0 99-55t44-124z" horiz-adv-x="642.9" />
+<glyph glyph-name="eye" unicode="" d="m929 314q-85 132-213 197 34-58 34-125 0-104-73-177t-177-73-177 73-73 177q0 67 34 125-128-65-213-197 75-114 187-182t242-68 242 68 187 182z m-402 215q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-12 8-19t19-8 19 8 8 19q0 48 34 82t82 34q11 0 19 8t8 19z m473-215q0-19-11-38-78-129-210-206t-279-77-279 77-210 206q-11 19-11 38t11 39q78 128 210 205t279 78 279-78 210-205q11-20 11-39z" horiz-adv-x="1000" />
+<glyph glyph-name="attach" unicode="" d="m783 77q0-65-44-109t-109-44q-75 0-131 55l-434 434q-63 64-63 151 0 88 62 150t150 62q88 0 152-63l338-338q5-5 5-12 0-9-17-26t-26-17q-7 0-13 5l-338 339q-44 43-101 43-59 0-100-42t-40-101q0-58 42-101l433-433q35-35 81-35 36 0 59 23t24 59q0 46-36 81l-324 324q-14 14-33 14-16 0-27-11t-11-27q0-18 14-33l229-228q6-6 6-13 0-9-18-26t-26-17q-7 0-12 5l-229 229q-35 34-35 83 0 46 32 78t77 32q49 0 83-36l325-324q55-54 55-131z" horiz-adv-x="785.7" />
+<glyph glyph-name="unlink" unicode="" d="m245 141l-143-143q-5-5-13-5-6 0-13 5-5 5-5 13t5 13l143 142q6 5 13 5t13-5q5-5 5-12t-5-13z m94-23v-179q0-8-5-13t-13-5-12 5-5 13v179q0 8 5 13t12 5 13-5 5-13z m-125 125q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13 5 13 13 5h178q8 0 13-5t5-13z m706-72q0-67-48-113l-82-81q-46-47-113-47-68 0-114 48l-186 187q-12 11-24 31l134 10 152-153q15-15 38-15t38 15l82 81q15 16 15 37 0 23-15 38l-153 154 10 133q20-12 31-23l188-188q47-48 47-114z m-345 404l-133-10-152 153q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l153-153-10-134q-20 12-32 24l-187 187q-47 48-47 114 0 67 47 113l82 82q47 46 114 46 67 0 114-47l186-187q12-12 23-32z m354-46q0-8-5-13t-13-5h-179q-8 0-13 5t-5 13 5 12 13 5h179q8 0 13-5t5-12z m-304 303v-178q0-8-5-13t-13-5-13 5-5 13v178q0 8 5 13t13 5 13-5 5-13z m227-84l-143-143q-6-5-13-5t-12 5q-5 6-5 13t5 13l142 142q6 5 13 5t13-5q5-5 5-12t-5-13z" horiz-adv-x="928.6" />
+<glyph glyph-name="link" unicode="" d="m812 171q0 23-15 38l-116 116q-16 16-38 16-24 0-40-18 1-1 10-10t12-12 9-11 7-14 2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7-11 9-12 12-10 10q-19-17-19-40 0-23 16-38l115-116q15-15 38-15 22 0 38 15l82 81q15 16 15 37z m-392 394q0 22-15 38l-115 115q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l116-116q15-15 38-15 23 0 40 17-2 2-11 11t-12 12-8 10-7 14-2 16q0 22 15 38t38 15q9 0 16-2t14-7 10-8 12-12 11-11q18 17 18 41z m500-394q0-67-48-113l-82-81q-46-47-113-47-68 0-114 48l-115 115q-46 47-46 114 0 68 49 116l-49 49q-48-49-116-49-67 0-114 47l-116 116q-47 47-47 114t47 113l82 82q47 46 114 46 67 0 114-47l114-116q47-46 47-113 0-69-49-117l49-49q48 49 116 49 67 0 114-47l116-116q47-47 47-114z" horiz-adv-x="928.6" />
+<glyph glyph-name="home" unicode="" d="m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z" horiz-adv-x="928.6" />
+<glyph glyph-name="info" unicode="" d="m357 100v-71q0-15-10-25t-26-11h-285q-15 0-25 11t-11 25v71q0 15 11 25t25 11h35v214h-35q-15 0-25 11t-11 25v71q0 15 11 25t25 11h214q15 0 25-11t11-25v-321h35q15 0 26-11t10-25z m-71 643v-107q0-15-11-25t-25-11h-143q-14 0-25 11t-11 25v107q0 14 11 25t25 11h143q15 0 25-11t11-25z" horiz-adv-x="357.1" />
+<glyph glyph-name="info-circled" unicode="" d="m571 82v89q0 8-5 13t-12 5h-54v286q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h53v-179h-53q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h250q7 0 12 5t5 13z m-71 500v89q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h107q8 0 13 5t5 13z m357-232q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="export" unicode="" d="m786 298v-144q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h142q7 0 13-6t5-12q0-15-15-18-43-15-74-34-5-2-9-2h-62q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v119q0 11 10 16 16 7 30 21 9 9 20 4 12-5 12-16z m132 277l-214-214q-10-11-25-11-7 0-14 3-22 9-22 33v107h-89q-181 0-245-73-66-77-41-264 2-13-11-19-5-1-7-1-9 0-14 7-6 8-12 17t-22 38-28 56-21 64-10 68q0 27 2 50t8 51 15 49 27 45 38 42 52 34 70 27 89 17 110 6h89v107q0 24 22 33 7 3 14 3 14 0 25-11l214-214q11-11 11-25t-11-25z" horiz-adv-x="928.6" />
+<glyph glyph-name="export-alt" unicode="" d="m561 236l196 196q11 11 11 25t-11 25l-196 197q-17 17-39 7-22-9-22-32v-90q-66 0-121-11t-90-28-64-44-42-53-25-61-12-62-3-62q0-101 93-226 6-6 14-6 4 0 7 1 13 5 11 19-25 197 34 264 26 29 73 42t125 13v-89q0-24 22-33 7-3 14-3 14 0 25 11z m296 382v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
+<glyph glyph-name="share" unicode="" d="m679 279q74 0 126-53t52-126-52-126-126-53-127 53-52 126q0 7 1 19l-201 100q-51-48-121-48-75 0-127 53t-52 126 52 126 127 53q70 0 121-48l201 100q-1 12-1 19 0 74 52 126t127 53 126-53 52-126-52-126-126-53q-71 0-122 48l-201-100q1-12 1-19t-1-19l201-100q51 48 122 48z" horiz-adv-x="857.1" />
+<glyph glyph-name="share-squared" unicode="" d="m714 183q0 49-35 84t-84 36q-46 0-80-33l-135 67q1 9 1 13t-1 13l135 67q34-33 80-33 50 0 84 36t35 84-35 84-84 35-84-35-35-84q0-4 1-13l-134-67q-35 32-81 32-49 0-84-35t-35-84 35-84 84-35q46 0 81 32l134-67q-1-9-1-13 0-49 35-84t84-35 84 35 35 84z m143 435v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
+<glyph glyph-name="retweet" unicode="" d="m714 11q0-8-5-13t-13-5h-535q-5 0-8 1t-5 4-3 4-2 7 0 6v335h-107q-15 0-25 11t-11 25q0 13 8 23l179 214q11 12 27 12t28-12l178-214q9-10 9-23 0-15-11-25t-25-11h-107v-214h321q9 0 14-6l89-108q4-6 4-11z m357 232q0-14-8-23l-179-214q-11-13-27-13t-27 13l-179 214q-8 9-8 23 0 14 10 25t26 11h107v214h-322q-9 0-14 7l-89 107q-4 5-4 11 0 7 5 12t13 6h536q4 0 7-1t5-4 3-5 2-6 1-7v-334h107q14 0 25-11t10-25z" horiz-adv-x="1071.4" />
+<glyph glyph-name="attention-alt" unicode="" d="m286 154v-125q0-15-11-25t-25-11h-143q-14 0-25 11t-11 25v125q0 14 11 25t25 10h143q15 0 25-10t11-25z m16 589l-15-429q-1-14-12-25t-25-10h-143q-14 0-25 10t-12 25l-15 429q-1 14 9 25t25 11h179q14 0 25-11t9-25z" horiz-adv-x="357.1" />
+<glyph glyph-name="attention" unicode="" d="m571 83v106q0 8-5 13t-12 5h-108q-7 0-12-5t-5-13v-106q0-8 5-13t12-6h108q7 0 12 6t5 13z m-1 208l10 257q0 6-5 10-7 6-14 6h-122q-7 0-14-6-5-4-5-12l9-255q0-5 6-9t13-3h103q8 0 13 3t6 9z m-7 522l428-786q20-35-1-70-10-17-26-26t-35-10h-858q-18 0-35 10t-26 26q-21 35-1 70l429 786q9 17 26 27t36 10 36-10 27-27z" horiz-adv-x="1000" />
+<glyph glyph-name="attention-circled" unicode="" d="m429 779q116 0 215-58t156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58z m71-696v106q0 8-5 13t-12 5h-107q-8 0-13-5t-6-13v-106q0-8 6-13t13-6h107q7 0 12 6t5 13z m-1 192l10 346q0 7-6 10-5 5-13 5h-123q-8 0-13-5-6-3-6-10l10-346q0-6 5-10t14-4h103q8 0 13 4t6 10z" horiz-adv-x="857.1" />
+<glyph glyph-name="location" unicode="" d="m429 493q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m142 0q0-61-18-100l-203-432q-9-18-27-29t-37-11-38 11-26 29l-204 432q-18 39-18 100 0 118 84 202t202 84 202-84 83-202z" horiz-adv-x="571.4" />
+<glyph glyph-name="trash" unicode="" d="m286 439v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m143 0v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m142 0v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q7 0 12-5t5-13z m72-404v529h-500v-529q0-12 4-22t8-15 6-5h464q2 0 6 5t8 15 4 22z m-375 601h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q22 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" />
+<glyph glyph-name="doc" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z" horiz-adv-x="857.1" />
+<glyph glyph-name="docs" unicode="" d="m946 636q23 0 38-16t16-38v-678q0-23-16-38t-38-16h-535q-23 0-38 16t-16 38v160h-303q-23 0-38 16t-16 38v375q0 22 11 49t27 42l228 228q15 16 42 27t49 11h232q23 0 38-16t16-38v-183q38 23 71 23h232z m-303-119l-167-167h167v167z m-357 214l-167-167h167v167z m109-361l176 176v233h-214v-233q0-22-15-38t-38-15h-233v-357h286v143q0 22 11 49t27 42z m534-449v643h-215v-232q0-22-15-38t-38-15h-232v-358h500z" horiz-adv-x="1000" />
+<glyph glyph-name="doc-text" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-572 483q0 7 5 12t13 5h393q8 0 13-5t5-12v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36z m411-125q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z m0-143q8 0 13-5t5-13v-36q0-8-5-13t-13-5h-393q-8 0-13 5t-5 13v36q0 8 5 13t13 5h393z" horiz-adv-x="857.1" />
+<glyph glyph-name="doc-inv" unicode="" d="m571 564v264q13-8 21-16l227-228q8-7 16-20h-264z m-71-18q0-22 16-38t38-15h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304z" horiz-adv-x="857.1" />
+<glyph glyph-name="doc-text-inv" unicode="" d="m819 584q8-7 16-20h-264v264q13-8 21-16z m-265-91h303v-589q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h446v-304q0-22 16-38t38-15z m89-411v36q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v36q0 7-5 12t-13 5h-393q-8 0-13-5t-5-12v-36q0-8 5-13t13-5h393q8 0 13 5t5 13z m0 143v35q0 8-5 13t-13 5h-393q-8 0-13-5t-5-13v-35q0-8 5-13t13-5h393q8 0 13 5t5 13z" horiz-adv-x="857.1" />
+<glyph glyph-name="file-pdf" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-287 331q18-14 47-31 33 4 65 4 82 0 99-27 9-13 1-29 0-1-1-1l-1-2v0q-3-21-39-21-27 0-65 11t-72 29q-123-13-219-46-85-146-135-146-8 0-15 4l-14 6q0 1-3 3-6 6-4 20 5 23 32 51t73 54q8 5 13-3 1-1 1-2 29 47 60 110 38 76 58 146-13 46-17 89t4 71q6 22 23 22h12q13 0 20-8 10-12 5-38-1-3-2-4 0-2 0-5v-17q-1-68-8-107 31-91 82-133z m-322-229q30 13 77 88-29-22-49-47t-28-41z m223 513q-9-23-2-73 1 4 4 24 0 2 4 24 1 3 3 5-1 0-1 1t0 1-1 1q0 12-7 20 0-1 0-1v-2z m-70-368q76 30 159 45-1 0-7 5t-9 8q-43 37-71 98-15-48-47-110-16-31-25-46z m361 8q-14 14-78 14 42-16 69-16 8 0 10 1 0 0-1 1z" horiz-adv-x="857.1" />
+<glyph glyph-name="file-word" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-656 500v-59h39l92-369h88l72 271q4 11 5 25 1 9 1 14h3l1-14q1-1 2-11t3-14l72-271h89l91 369h39v59h-167v-59h50l-55-245q-3-11-4-25l-1-12h-3l-1 12q-1 2-2 11t-3 14l-81 304h-63l-81-304q-1-5-2-13t-2-12l-2-12h-2l-2 12q-1 14-4 25l-55 245h50v59h-167z" horiz-adv-x="857.1" />
+<glyph glyph-name="file-excel" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-547 131v-59h157v59h-42l58 90q3 4 5 9t5 8 2 2h1q0-2 2-6 2-2 3-4t3-4 4-5l60-90h-43v-59h163v59h-38l-107 152 108 158h38v59h-156v-59h41l-57-89q-2-4-6-9t-5-8l-1-1h-1q-1 2-3 5-3 6-9 13l-59 89h42v59h-162v-59h38l106-152-109-158h-38z" horiz-adv-x="857.1" />
+<glyph glyph-name="file-powerpoint" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-554 131v-59h183v59h-52v93h76q43 0 66 9 37 12 59 48t23 82q0 45-21 78t-56 49q-27 10-72 10h-206v-59h52v-310h-52z m197 156h-66v150h67q29 0 46-10 31-19 31-64 0-50-34-67-18-9-44-9z" horiz-adv-x="857.1" />
+<glyph glyph-name="file-image" unicode="" d="m819 638q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 16-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 15t-16 38v233h-429v-858h715z m-72 250v-178h-571v107l107 107 71-71 215 214z m-464 108q-45 0-76 31t-31 76 31 76 76 31 76-31 31-76-31-76-76-31z" horiz-adv-x="857.1" />
+<glyph glyph-name="cog" unicode="" d="m571 350q0 59-41 101t-101 42-101-42-42-101 42-101 101-42 101 42 41 101z m286 61v-124q0-7-4-13t-11-7l-104-16q-10-30-21-51 19-27 59-77 6-6 6-13t-5-13q-15-21-55-61t-53-39q-7 0-14 5l-77 60q-25-13-51-21-9-76-16-104-4-16-20-16h-124q-8 0-14 5t-6 12l-16 103q-27 9-50 21l-79-60q-6-5-14-5-8 0-14 6-70 64-92 94-4 5-4 13 0 6 5 12 8 12 28 37t30 40q-15 28-23 55l-102 15q-7 1-11 7t-5 13v124q0 7 5 13t10 7l104 16q8 25 22 51-23 32-60 77-6 7-6 14 0 5 5 12 15 20 55 60t53 40q7 0 15-5l77-60q24 13 50 21 9 76 17 104 3 15 20 15h124q7 0 13-4t7-12l15-103q28-9 50-21l80 60q5 5 13 5 7 0 14-5 72-67 92-95 4-5 4-13 0-6-4-12-9-12-29-38t-30-39q14-28 23-55l102-15q7-1 12-7t4-13z" horiz-adv-x="857.1" />
+<glyph glyph-name="cog-alt" unicode="" d="m500 350q0 59-42 101t-101 42-101-42-42-101 42-101 101-42 101 42 42 101z m429-286q0 29-22 51t-50 21-50-21-21-51q0-29 21-50t50-21 51 21 21 50z m0 572q0 29-22 50t-50 21-50-21-21-50q0-30 21-51t50-21 51 21 21 51z m-215-235v-103q0-6-4-11t-9-6l-86-14q-6-19-18-42 19-27 50-64 4-6 4-11 0-7-4-11-13-17-46-50t-44-33q-6 0-11 4l-64 50q-21-11-43-17-6-60-13-87-4-13-17-13h-104q-6 0-11 4t-5 10l-13 85q-19 6-42 18l-66-50q-4-4-11-4-6 0-12 4-80 75-80 90 0 5 4 10 5 8 23 30t26 34q-13 24-20 46l-85 13q-5 1-9 5t-4 11v103q0 6 4 11t9 6l86 14q7 19 18 42-19 27-50 64-4 6-4 11 0 7 4 11 12 17 46 50t44 33q6 0 12-4l64-50q19 10 43 18 6 60 13 86 3 13 16 13h104q6 0 11-4t6-10l13-85q19-6 41-17l66 49q5 4 11 4 7 0 12-4 81-75 81-90 0-5-4-10-7-9-24-30t-25-34q13-27 19-46l85-12q5-2 9-6t4-11z m357-298v-78q0-9-83-17-6-15-16-29 28-63 28-77 0-2-2-4-68-40-69-40-5 0-26 27t-29 37q-11-1-17-1t-17 1q-7-11-29-37t-25-27q-1 0-69 40-3 2-3 4 0 14 29 77-10 14-17 29-83 8-83 17v78q0 9 83 18 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 1 17 1t17-1q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-9 83-18z m0 572v-78q0-9-83-18-6-15-16-29 28-63 28-77 0-2-2-4-68-39-69-39-5 0-26 26t-29 38q-11-1-17-1t-17 1q-7-12-29-38t-25-26q-1 0-69 39-3 2-3 4 0 14 29 77-10 14-17 29-83 9-83 18v78q0 9 83 17 7 16 17 29-29 63-29 77 0 2 3 4 2 1 19 11t33 19 17 9q4 0 25-26t29-38q12 2 17 2t17-2q28 40 51 63l4 1q2 0 69-39 2-2 2-4 0-14-28-77 9-13 16-29 83-8 83-17z" horiz-adv-x="1071.4" />
+<glyph glyph-name="wrench" unicode="" d="m214 29q0 14-10 25t-25 10-26-10-10-25 10-26 26-10 25 10 10 26z m360 234l-381-381q-21-20-50-20-29 0-51 20l-59 61q-21 20-21 50 0 29 21 51l380 380q22-55 64-97t97-64z m353 243q0-22-12-59-27-75-92-122t-144-46q-104 0-177 73t-73 177 73 176 177 74q32 0 67-10t60-26q9-6 9-15t-9-16l-163-94v-125l108-60q2 2 44 27t75 45 40 20q8 0 13-5t4-14z" horiz-adv-x="928.6" />
+<glyph glyph-name="calendar" unicode="" d="m71-79h161v161h-161v-161z m197 0h178v161h-178v-161z m-197 197h161v178h-161v-178z m197 0h178v178h-178v-178z m-197 214h161v161h-161v-161z m411-411h179v161h-179v-161z m-214 411h178v161h-178v-161z m428-411h161v161h-161v-161z m-214 197h179v178h-179v-178z m-196 482v161q0 7-6 12t-12 6h-36q-7 0-12-6t-6-12v-161q0-7 6-13t12-5h36q7 0 12 5t6 13z m410-482h161v178h-161v-178z m-214 214h179v161h-179v-161z m214 0h161v161h-161v-161z m18 268v161q0 7-5 12t-13 6h-35q-8 0-13-6t-5-12v-161q0-7 5-13t13-5h35q8 0 13 5t5 13z m215 36v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50v715q0 29 21 50t50 21h72v54q0 36 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 36 27 63t63 26h35q37 0 63-26t27-63v-54h71q29 0 50-21t22-50z" horiz-adv-x="928.6" />
+<glyph glyph-name="calendar-empty" unicode="" d="m71-79h786v572h-786v-572z m215 679v161q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h36q8 0 13 5t5 13z m428 0v161q0 8-5 13t-13 5h-35q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h35q8 0 13 5t5 13z m215 36v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50v715q0 29 21 50t50 21h72v54q0 36 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 36 27 63t63 26h35q37 0 63-26t27-63v-54h71q29 0 50-21t22-50z" horiz-adv-x="928.6" />
+<glyph glyph-name="clock" unicode="" d="m500 546v-250q0-7-5-12t-13-5h-178q-8 0-13 5t-5 12v36q0 8 5 13t13 5h125v196q0 8 5 13t12 5h36q8 0 13-5t5-13z m232-196q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="block" unicode="" d="m732 352q0 90-48 164l-421-420q76-50 166-50 62 0 118 25t96 65 65 97 24 119z m-557-167l421 421q-75 50-167 50-83 0-153-40t-110-112-41-152q0-91 50-167z m682 167q0-88-34-168t-91-137-137-92-166-34-167 34-137 92-91 137-34 168 34 167 91 137 137 91 167 34 166-34 137-91 91-137 34-167z" horiz-adv-x="857.1" />
+<glyph glyph-name="zoom-in" unicode="" d="m571 404v-36q0-7-5-13t-12-5h-125v-125q0-7-6-13t-12-5h-36q-7 0-13 5t-5 13v125h-125q-7 0-12 5t-6 13v36q0 7 6 12t12 5h125v125q0 8 5 13t13 5h36q7 0 12-5t6-13v-125h125q7 0 12-5t5-12z m72-18q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-21-50t-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
+<glyph glyph-name="zoom-out" unicode="" d="m571 404v-36q0-7-5-13t-12-5h-322q-7 0-12 5t-6 13v36q0 7 6 12t12 5h322q7 0 12-5t5-12z m72-18q0 103-74 176t-176 74-177-74-73-176 73-177 177-73 176 73 74 177z m286-465q0-29-21-50t-51-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 152-31 126-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
+<glyph glyph-name="down-circled2" unicode="" d="m625 332q0-7-6-13l-178-178q-6-5-12-5t-13 5l-179 178q-8 9-4 20 5 11 17 11h107v196q0 8 5 13t13 5h107q8 0 13-5t5-13v-196h107q8 0 13-5t5-13z m-196 322q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="up-circled2" unicode="" d="m624 361q-5-11-17-11h-107v-196q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v196h-107q-8 0-13 5t-5 13q0 7 6 13l178 178q6 5 13 5t12-5l179-178q8-9 4-20z m-195 293q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="left-circled2" unicode="" d="m643 404v-108q0-7-5-12t-13-5h-196v-108q0-7-5-12t-13-5q-7 0-14 5l-178 178q-5 5-5 13t5 13l179 178q5 5 13 5 7 0 12-5t6-12v-108h196q7 0 13-5t5-12z m89-54q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="right-circled2" unicode="" d="m643 350q0-8-5-13l-179-178q-5-5-13-5-7 0-12 5t-5 12v108h-197q-7 0-12 5t-6 12v108q0 7 6 12t12 5h197v108q0 7 5 12t12 5q7 0 14-5l178-178q5-5 5-13z m89 0q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="down-dir" unicode="" d="m571 457q0-14-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 11-11 25t11 25 25 11h500q14 0 25-11t10-25z" horiz-adv-x="571.4" />
+<glyph glyph-name="up-dir" unicode="" d="m571 171q0-14-10-25t-25-10h-500q-15 0-25 10t-11 25 11 26l250 250q10 10 25 10t25-10l250-250q10-11 10-26z" horiz-adv-x="571.4" />
+<glyph glyph-name="left-dir" unicode="" d="m357 600v-500q0-14-10-25t-26-11-25 11l-250 250q-10 11-10 25t10 25l250 250q11 11 25 11t26-11 10-25z" horiz-adv-x="357.1" />
+<glyph glyph-name="right-dir" unicode="" d="m321 350q0-14-10-25l-250-250q-11-11-25-11t-25 11-11 25v500q0 15 11 25t25 11 25-11l250-250q10-10 10-25z" horiz-adv-x="357.1" />
+<glyph glyph-name="down-open" unicode="" d="m939 399l-414-413q-10-11-25-11t-25 11l-414 413q-11 11-11 26t11 25l92 92q11 11 26 11t25-11l296-296 296 296q11 11 25 11t26-11l92-92q11-11 11-25t-11-26z" horiz-adv-x="1000" />
+<glyph glyph-name="left-open" unicode="" d="m653 682l-296-296 296-297q11-10 11-25t-11-25l-92-93q-11-10-25-10t-25 10l-414 415q-11 10-11 25t11 25l414 414q10 10 25 10t25-10l92-93q11-10 11-25t-11-25z" horiz-adv-x="714.3" />
+<glyph glyph-name="right-open" unicode="" d="m618 361l-414-415q-11-10-25-10t-26 10l-92 93q-11 11-11 25t11 25l296 297-296 296q-11 11-11 25t11 25l92 93q11 10 26 10t25-10l414-414q10-11 10-25t-10-25z" horiz-adv-x="714.3" />
+<glyph glyph-name="up-open" unicode="" d="m939 107l-92-92q-11-10-26-10t-25 10l-296 297-296-297q-11-10-25-10t-26 10l-92 92q-11 11-11 26t11 25l414 414q11 10 25 10t25-10l414-414q11-11 11-25t-11-26z" horiz-adv-x="1000" />
+<glyph glyph-name="angle-left" unicode="" d="m350 546q0-7-6-12l-219-220 219-219q6-6 6-13t-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="357.1" />
+<glyph glyph-name="angle-right" unicode="" d="m332 314q0-7-6-13l-260-260q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l260-260q6-5 6-13z" horiz-adv-x="357.1" />
+<glyph glyph-name="angle-up" unicode="" d="m600 189q0-7-6-13l-28-27q-5-6-12-6t-13 6l-220 219-219-219q-5-6-13-6t-13 6l-27 27q-6 6-6 13t6 13l260 260q5 6 12 6t13-6l260-260q6-5 6-13z" horiz-adv-x="642.9" />
+<glyph glyph-name="angle-down" unicode="" d="m600 439q0-7-6-13l-260-260q-5-5-13-5t-12 5l-260 260q-6 6-6 13t6 13l27 28q6 6 13 6t13-6l219-219 220 219q5 6 13 6t12-6l28-28q6-5 6-13z" horiz-adv-x="642.9" />
+<glyph glyph-name="angle-circled-left" unicode="" d="m507 72l57 56q11 11 11 26t-11 25l-171 171 171 171q11 11 11 25t-11 25l-57 57q-10 11-25 11t-25-11l-253-253q-11-11-11-25t11-25l253-254q11-10 25-10t25 10z m350 278q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="angle-circled-right" unicode="" d="m400 72l253 253q11 11 11 25t-11 25l-253 253q-10 11-25 11t-25-11l-57-56q-11-11-11-26t11-25l171-171-171-171q-11-11-11-25t11-26l57-57q11-10 25-10t25 10z m457 278q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="angle-circled-up" unicode="" d="m650 214l57 57q11 11 11 25t-11 26l-253 253q-11 10-25 10t-26-10l-253-254q-10-10-10-25t10-25l57-57q11-10 25-10t25 10l172 172 171-172q11-10 25-10t25 10z m207 136q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="angle-circled-down" unicode="" d="m454 125l253 253q11 11 11 26t-11 25l-57 57q-10 10-25 10t-25-10l-171-172-172 172q-10 10-25 10t-25-10l-57-57q-10-11-10-25t10-26l253-253q11-10 26-10t25 10z m403 225q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="angle-double-left" unicode="" d="m350 82q0-7-6-13l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220 219-219q6-6 6-13z m214 0q0-7-5-13l-28-28q-6-5-13-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q6 6 13 6t13-6l28-28q5-5 5-13t-5-12l-220-220 220-219q5-6 5-13z" horiz-adv-x="571.4" />
+<glyph glyph-name="angle-double-right" unicode="" d="m332 314q0-7-6-13l-260-260q-5-5-12-5t-13 5l-28 28q-6 6-6 13t6 13l219 219-219 220q-6 5-6 12t6 13l28 28q5 6 13 6t12-6l260-260q6-5 6-13z m214 0q0-7-5-13l-260-260q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13z" horiz-adv-x="571.4" />
+<glyph glyph-name="angle-double-up" unicode="" d="m600 118q0-7-6-13l-28-28q-5-5-12-5t-13 5l-220 219-219-219q-5-5-13-5t-13 5l-27 28q-6 6-6 13t6 13l260 260q5 5 12 5t13-5l260-260q6-6 6-13z m0 214q0-7-6-13l-28-28q-5-5-12-5t-13 5l-220 220-219-220q-5-5-13-5t-13 5l-27 28q-6 6-6 13t6 13l260 260q5 6 12 6t13-6l260-260q6-6 6-13z" horiz-adv-x="642.9" />
+<glyph glyph-name="angle-double-down" unicode="" d="m600 368q0-7-6-13l-260-260q-5-6-13-6t-12 6l-260 260q-6 6-6 13t6 13l27 28q6 5 13 5t13-5l219-220 220 220q5 5 13 5t12-5l28-28q6-6 6-13z m0 214q0-7-6-13l-260-260q-5-5-13-5t-12 5l-260 260q-6 6-6 13t6 13l27 28q6 5 13 5t13-5l219-220 220 220q5 5 13 5t12-5l28-28q6-6 6-13z" horiz-adv-x="642.9" />
+<glyph glyph-name="down-big" unicode="" d="m899 386q0-30-21-50l-363-364q-22-21-51-21-29 0-50 21l-363 364q-21 20-21 50 0 29 21 51l41 41q22 21 51 21 29 0 50-21l164-164v393q0 29 21 50t51 22h71q29 0 50-22t21-50v-393l164 164q21 21 51 21 29 0 50-21l42-42q21-21 21-50z" horiz-adv-x="928.6" />
+<glyph glyph-name="left-big" unicode="" d="m857 350v-71q0-30-18-51t-47-21h-393l164-164q21-20 21-50t-21-50l-42-43q-21-20-51-20-29 0-50 20l-364 364q-20 21-20 50 0 29 20 51l364 363q21 21 50 21 29 0 51-21l42-42q21-21 21-50t-21-51l-164-164h393q29 0 47-20t18-51z" horiz-adv-x="857.1" />
+<glyph glyph-name="right-big" unicode="" d="m821 314q0-30-20-50l-363-364q-22-20-51-20-29 0-50 20l-42 42q-22 21-22 51t22 51l163 163h-393q-29 0-47 21t-18 51v71q0 30 18 51t47 20h393l-163 164q-22 21-22 51t22 50l42 42q21 21 50 21 29 0 51-21l363-363q20-20 20-51z" horiz-adv-x="857.1" />
+<glyph glyph-name="up-big" unicode="" d="m899 308q0-28-21-50l-42-42q-21-21-50-21-30 0-51 21l-164 164v-393q0-29-20-47t-51-19h-71q-30 0-51 19t-21 47v393l-164-164q-20-21-50-21t-50 21l-42 42q-21 21-21 50 0 30 21 51l363 363q20 21 50 21 30 0 51-21l363-363q21-22 21-51z" horiz-adv-x="928.6" />
+<glyph glyph-name="left-circled" unicode="" d="m714 314v72q0 14-10 25t-25 10h-281l106 106q11 11 11 25t-11 25l-51 51q-10 10-25 10t-25-10l-202-202-51-51q-10-10-10-25t10-25l51-51 202-202q10-10 25-10t25 10l51 51q10 10 10 25t-10 25l-106 106h281q14 0 25 10t10 25z m143 36q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="right-circled" unicode="" d="m717 350q0 15-10 25l-51 51-202 202q-10 10-25 10t-25-10l-51-51q-10-10-10-25t10-25l106-106h-280q-15 0-26-10t-10-25v-72q0-14 10-25t26-10h280l-106-106q-10-10-10-25t10-25l51-51q10-10 25-10t25 10l202 202 51 51q10 10 10 25z m140 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="up-circled" unicode="" d="m717 351q0 15-11 25l-202 202-50 50q-10 11-25 11t-26-11l-50-50-202-202q-10-10-10-25t10-26l50-50q11-10 26-10t25 10l105 105v-280q0-14 11-25t25-11h71q15 0 25 11t11 25v280l105-105q11-11 26-11t25 11l50 50q11 11 11 26z m140-1q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="down-circled" unicode="" d="m717 349q0 16-11 26l-50 50q-10 10-25 10t-26-10l-105-105v280q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-280l-105 105q-11 11-25 11t-26-11l-50-50q-10-10-10-26t10-25l202-202 50-50q11-10 26-10t25 10l50 50 202 202q11 10 11 25z m140 1q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="cw" unicode="" d="m857 707v-250q0-14-10-25t-26-11h-250q-23 0-32 23-10 22 7 38l77 77q-82 77-194 77-58 0-111-23t-91-61-62-91-22-111 22-111 62-91 91-61 111-23q66 0 125 29t100 82q4 6 13 7 8 0 14-5l76-77q5-4 6-11t-5-13q-60-74-147-114t-182-41q-87 0-167 34t-136 92-92 137-34 166 34 166 92 137 136 92 167 34q82 0 158-31t137-88l72 72q16 18 39 8 22-9 22-33z" horiz-adv-x="857.1" />
+<glyph glyph-name="ccw" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z" horiz-adv-x="857.1" />
+<glyph glyph-name="level-up" unicode="" d="m568 514q-10-21-32-21h-107v-482q0-8-5-13t-13-5h-393q-12 0-16 10-5 11 2 19l89 108q5 6 14 6h179v357h-107q-23 0-33 21-9 20 5 37l179 215q10 12 27 12t28-12l178-215q15-17 5-37z" horiz-adv-x="571.4" />
+<glyph glyph-name="level-down" unicode="" d="m18 707h393q7 0 12-5t6-13v-482h107q22 0 32-20t-5-39l-178-214q-11-13-28-13t-27 13l-179 214q-14 17-5 39 10 20 33 20h107v357h-179q-8 0-14 6l-89 108q-7 7-2 19 5 10 16 10z" horiz-adv-x="571.4" />
+<glyph glyph-name="shuffle" unicode="" d="m372 582q-34-52-77-153-12 25-20 41t-23 35-28 32-36 19-45 8h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q139 0 229-125z m628-446q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107q-18 0-48 0t-45-1-41 1-39 3-36 6-35 10-32 16-33 22-31 30-31 39q33 52 76 152 12-25 20-40t23-36 28-31 35-20 46-8h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z m0 500q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-143q-27 0-49-8t-38-25-29-35-25-43q-18-34-43-95-16-37-28-62t-30-59-36-55-41-47-50-38-60-23-71-10h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q27 0 48 9t39 25 28 34 26 43q17 35 43 96 16 36 28 62t30 58 36 56 41 46 50 38 59 24 72 9h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
+<glyph glyph-name="exchange" unicode="" d="m1000 189v-107q0-7-5-12t-13-6h-768v-107q0-7-5-12t-13-6q-6 0-13 6l-178 178q-5 5-5 13 0 8 5 13l179 178q5 5 12 5 8 0 13-5t5-13v-107h768q7 0 13-5t5-13z m0 304q0-8-5-13l-179-179q-5-5-12-5-8 0-13 6t-5 12v107h-768q-7 0-13 6t-5 12v107q0 8 5 13t13 5h768v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" />
+<glyph glyph-name="history" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z m-357 161v-250q0-8-5-13t-13-5h-178q-8 0-13 5t-5 13v35q0 8 5 13t13 5h125v197q0 8 5 13t12 5h36q8 0 13-5t5-13z" horiz-adv-x="857.1" />
+<glyph glyph-name="expand" unicode="" d="m639 473q10-19-3-36l-178-250q-11-16-29-16t-29 16l-179 250q-13 17-3 36 10 20 32 20h357q22 0 32-20z m75-391v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
+<glyph glyph-name="collapse" unicode="" d="m639 227q-10-20-32-20h-357q-22 0-32 20-10 19 3 37l179 250q10 15 29 15t29-15l178-250q13-18 3-37z m75-145v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
+<glyph glyph-name="expand-right" unicode="" d="m607 350q0-18-15-29l-250-179q-17-12-37-2-19 9-19 31v358q0 22 19 31 20 10 37-2l250-179q15-11 15-29z m107-268v536q0 8-5 13t-13 5h-535q-8 0-13-5t-5-13v-536q0-8 5-13t13-5h535q8 0 13 5t5 13z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
+<glyph glyph-name="collapse-left" unicode="" d="m571 529v-358q0-14-10-25t-25-10q-11 0-21 6l-250 179q-15 11-15 29t15 29l250 179q10 6 21 6 14 0 25-10t10-25z m143-447v536q0 7-5 12t-13 6h-535q-7 0-13-6t-5-12v-536q0-7 5-12t13-6h535q8 0 13 6t5 12z m143 536v-536q0-66-47-113t-114-48h-535q-67 0-114 48t-47 113v536q0 66 47 113t114 48h535q67 0 114-48t47-113z" horiz-adv-x="857.1" />
+<glyph glyph-name="play" unicode="" d="m772 333l-741-412q-13-7-22-2t-9 20v822q0 14 9 20t22-2l741-412q13-7 13-17t-13-17z" horiz-adv-x="785.7" />
+<glyph glyph-name="play-circled2" unicode="" d="m661 350q0-21-18-31l-304-178q-8-5-18-5-8 0-17 4-18 11-18 31v358q0 20 18 31 18 10 35-1l304-178q18-10 18-31z m71 0q0 83-41 152t-110 111-152 41-153-41-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152z m125 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="play-circled" unicode="" d="m429 779q116 0 215-58t156-156 57-215-57-215-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58z m214-460q18 10 18 31t-18 31l-304 178q-17 11-35 1-18-11-18-31v-358q0-20 18-31 9-4 17-4 10 0 18 5z" horiz-adv-x="857.1" />
+<glyph glyph-name="stop" unicode="" d="m857 743v-786q0-14-10-25t-26-11h-785q-15 0-25 11t-11 25v786q0 14 11 25t25 11h785q15 0 26-11t10-25z" horiz-adv-x="857.1" />
+<glyph glyph-name="cloud" unicode="" d="m1071 207q0-89-62-151t-152-63h-607q-103 0-177 73t-73 177q0 74 40 135t104 91q-1 15-1 24 0 118 84 202t202 84q88 0 159-50t105-128q39 35 93 35 59 0 101-42t42-101q0-42-23-77 72-17 119-75t46-134z" horiz-adv-x="1071.4" />
+<glyph glyph-name="table" unicode="" d="m286 82v107q0 8-5 13t-13 5h-179q-7 0-13-5t-5-13v-107q0-8 5-13t13-5h179q8 0 13 5t5 13z m0 214v108q0 7-5 12t-13 5h-179q-7 0-13-5t-5-12v-108q0-7 5-12t13-5h179q8 0 13 5t5 12z m285-214v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m-285 429v107q0 8-5 13t-13 5h-179q-7 0-13-5t-5-13v-107q0-8 5-13t13-5h179q8 0 13 5t5 13z m285-215v108q0 7-5 12t-12 5h-179q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h179q7 0 12 5t5 12z m286-214v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m-286 429v107q0 8-5 13t-12 5h-179q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h179q7 0 12 5t5 13z m286-215v108q0 7-5 12t-13 5h-178q-8 0-13-5t-5-12v-108q0-7 5-12t13-5h178q8 0 13 5t5 12z m0 215v107q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h178q8 0 13 5t5 13z m72 178v-607q0-37-27-63t-63-26h-750q-36 0-63 26t-26 63v607q0 37 26 63t63 27h750q37 0 63-27t27-63z" horiz-adv-x="928.6" />
+<glyph glyph-name="off" unicode="" d="m857 350q0-87-34-166t-91-137-137-92-166-34-167 34-136 92-92 137-34 166q0 102 45 191t126 151q24 18 54 14t46-28q18-23 14-53t-28-47q-54-41-84-101t-30-127q0-58 22-111t62-91 91-61 111-23 110 23 92 61 61 91 22 111q0 68-30 127t-84 101q-24 18-28 47t14 53q17 24 47 28t53-14q81-61 126-151t45-191z m-357 429v-358q0-29-21-50t-50-21-51 21-21 50v358q0 29 21 50t51 21 50-21 21-50z" horiz-adv-x="857.1" />
+<glyph glyph-name="check" unicode="" d="m786 331v-177q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q35 0 65-14 9-4 10-13 2-10-5-16l-27-28q-6-5-13-5-2 0-5 1-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v141q0 8 5 13l36 35q6 6 13 6 3 0 7-2 11-4 11-16z m129 273l-455-454q-13-14-31-14t-32 14l-240 240q-14 13-14 31t14 32l61 62q14 13 32 13t32-13l147-147 361 361q13 13 31 13t32-13l62-61q13-14 13-32t-13-32z" horiz-adv-x="928.6" />
+<glyph glyph-name="asterisk" unicode="" d="m827 264q26-14 33-43t-7-55l-35-61q-15-26-44-33t-54 7l-149 85v-171q0-29-21-50t-50-22h-71q-29 0-51 22t-21 50v171l-148-85q-26-15-55-7t-43 33l-36 61q-14 26-7 55t34 43l148 86-148 86q-26 14-34 43t7 55l36 61q15 26 43 33t55-7l148-85v171q0 29 21 50t51 22h71q29 0 50-22t21-50v-171l149 85q26 15 54 7t44-33l35-62q15-25 7-54t-33-43l-148-86z" horiz-adv-x="928.6" />
+<glyph glyph-name="chart-bar" unicode="" d="m357 350v-286h-143v286h143z m214 286v-572h-142v572h142z m572-643v-72h-1143v858h71v-786h1072z m-357 500v-429h-143v429h143z m214 214v-643h-143v643h143z" horiz-adv-x="1142.9" />
+<glyph glyph-name="bug" unicode="" d="m911 314q0-14-11-25t-25-10h-125q0-96-37-162l116-117q10-11 10-25t-10-25q-10-11-25-11t-26 11l-110 110q-3-3-8-7t-24-16-36-21-46-16-54-7v500h-71v-500q-29 0-57 7t-49 19-36 22-25 18l-8 8-102-116q-11-12-27-12-13 0-24 9-11 10-11 25t8 26l113 127q-32 63-32 153h-125q-15 0-25 10t-11 25 11 25 25 11h125v164l-97 97q-11 10-11 25t11 25 25 10 25-10l97-97h471l96 97q11 10 25 10t26-10 10-25-10-25l-97-97v-164h125q15 0 25-11t11-25z m-268 322h-357q0 74 52 126t126 52 127-52 52-126z" horiz-adv-x="928.6" />
+<glyph glyph-name="certificate" unicode="" d="m768 350l77-75q17-16 11-39-7-23-29-29l-105-27 30-103q6-23-11-39-16-18-39-11l-104 30-27-105q-5-23-28-30-7-1-11-1-17 0-28 13l-75 77-76-77q-15-17-39-12-23 7-28 30l-27 105-104-30q-23-7-39 11-17 16-10 39l29 103-105 27q-22 6-29 29-6 23 11 39l77 75-77 75q-17 16-11 39 7 23 29 29l105 27-29 103q-7 23 10 39 16 18 39 11l104-29 27 104q5 23 28 29 23 7 39-11l76-77 75 77q16 17 39 11 23-6 28-29l27-104 104 29q23 7 39-11 17-16 11-39l-30-103 105-27q22-6 29-29 6-23-11-39z" horiz-adv-x="857.1" />
+<glyph glyph-name="tasks" unicode="" d="m571 64h358v72h-358v-72z m-214 286h572v71h-572v-71z m357 286h215v71h-215v-71z m286-465v-142q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v142q0 15 11 26t25 10h928q15 0 25-10t11-26z m0 286v-143q0-14-11-25t-25-10h-928q-15 0-25 10t-11 25v143q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 286v-143q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v143q0 14 11 25t25 11h928q15 0 25-11t11-25z" horiz-adv-x="1000" />
+<glyph glyph-name="sort-up" unicode="" d="m571 457q0-14-10-25t-25-11h-500q-15 0-25 11t-11 25 11 25l250 250q10 11 25 11t25-11l250-250q10-10 10-25z" horiz-adv-x="571.4" />
+<glyph glyph-name="sort-down" unicode="" d="m571 243q0-15-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 10-11 25t11 25 25 11h500q14 0 25-11t10-25z" horiz-adv-x="571.4" />
+<glyph glyph-name="sort" unicode="" d="m571 243q0-15-10-25l-250-250q-11-11-25-11t-25 11l-250 250q-11 10-11 25t11 25 25 11h500q14 0 25-11t10-25z m0 214q0-14-10-25t-25-11h-500q-15 0-25 11t-11 25 11 25l250 250q10 11 25 11t25-11l250-250q10-10 10-25z" horiz-adv-x="571.4" />
+<glyph glyph-name="gauge" unicode="" d="m214 207q0 30-21 51t-50 21-51-21-21-51 21-50 51-21 50 21 21 50z m107 250q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m239-268l57 213q3 14-5 27t-21 16-27-3-17-22l-56-213q-33-3-60-25t-35-55q-11-43 11-81t66-50 81 11 50 66q9 33-4 65t-40 51z m369 18q0 30-21 51t-51 21-50-21-21-51 21-50 50-21 51 21 21 50z m-358 357q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m250-107q0 30-20 51t-51 21-50-21-21-51 21-50 50-21 51 21 20 50z m179-250q0-145-79-269-10-17-30-17h-782q-20 0-30 17-79 123-79 269 0 102 40 194t106 160 160 107 194 39 194-39 160-107 106-160 40-194z" horiz-adv-x="1000" />
+<glyph glyph-name="spinner" unicode="" d="m277 100q0-33-24-57t-57-23q-33 0-56 23t-24 57 24 57 56 23q33 0 57-23t24-57z m241-107q0-30-21-51t-51-21-50 21-21 51 21 50 50 21 51-21 21-50z m-339 357q0-37-27-63t-63-26-63 26-26 63 26 63 63 26 63-26 27-63z m580-250q0-26-18-44t-45-18-44 18-18 44 18 44 44 19 45-19 18-44z m-464 500q0-41-29-69t-70-29-69 29-29 69 29 69 69 29 70-29 29-69z m259 107q0-45-32-76t-76-31-75 31-32 76 32 76 75 31 76-31 32-76z m303-357q0-22-15-38t-38-16-38 16-16 38 16 38 38 16 38-16 15-38z m-116 250q0-18-13-32t-32-13-31 13-13 32 13 31 31 14 32-14 13-31z" horiz-adv-x="875" />
+<glyph glyph-name="database" unicode="" d="m429 421q132 0 247 24t181 71v-95q0-38-57-71t-157-52-214-20-215 20-156 52-58 71v95q66-47 181-71t248-24z m0-428q132 0 247 24t181 71v-95q0-39-57-72t-157-52-214-19-215 19-156 52-58 72v95q66-47 181-71t248-24z m0 214q132 0 247 24t181 71v-95q0-38-57-71t-157-52-214-20-215 20-156 52-58 71v95q66-47 181-71t248-24z m0 643q116 0 214-19t157-52 57-72v-71q0-39-57-72t-157-52-214-19-215 19-156 52-58 72v71q0 39 58 72t156 52 215 19z" horiz-adv-x="857.1" />
+<glyph glyph-name="lifebuoy" unicode="" d="m500 850q102 0 194-40t160-106 106-160 40-194-40-194-106-160-160-106-194-40-194 40-160 106-106 160-40 194 40 194 106 160 160 106 194 40z m0-71q-106 0-201-51l108-108q46 16 93 16t93-16l108 108q-95 51-201 51z m-378-630l108 108q-16 46-16 93t16 93l-108 108q-51-95-51-201t51-201z m378-228q106 0 201 51l-108 108q-46-16-93-16t-93 16l-108-108q95-51 201-51z m0 215q89 0 152 63t62 151-62 152-152 62-151-62-63-152 63-151 151-63z m270 121l108-108q51 95 51 201t-51 201l-108-108q16-46 16-93t-16-93z" horiz-adv-x="1000" />
+<glyph glyph-name="cubes" unicode="" d="m357-61l214 107v176l-214-92v-191z m-36 254l226 96-226 97-225-97z m608-254l214 107v176l-214-92v-191z m-36 254l225 96-225 97-226-97z m-250 163l214 92v149l-214-92v-149z m-36 212l246 105-246 106-246-106z m607-289v-233q0-20-10-37t-29-26l-250-125q-14-8-32-8t-32 8l-250 125q-3 1-4 2-1-1-4-2l-250-125q-14-8-32-8t-31 8l-250 125q-19 9-29 26t-11 37v233q0 21 12 39t32 26l242 104v223q0 22 12 39t31 27l250 107q13 6 28 6t28-6l250-107q20-9 32-27t12-39v-223l242-104q20-9 32-26t11-40z" horiz-adv-x="1285.7" />
+<glyph glyph-name="cube" unicode="" d="m500-59l357 195v355l-357-130v-420z m-36 483l390 141-390 142-389-142z m465 140v-428q0-20-10-37t-28-26l-393-214q-15-9-34-9t-34 9l-393 214q-17 10-27 26t-10 37v428q0 23 13 41t34 26l393 143q12 5 24 5t25-5l393-143q21-8 34-26t13-41z" horiz-adv-x="1000" />
+<glyph glyph-name="bullseye" unicode="" d="m571 350q0-59-41-101t-101-42-101 42-42 101 42 101 101 42 101-42 41-101z m72 0q0 89-63 152t-151 62-152-62-63-152 63-151 152-63 151 63 63 151z m71 0q0-118-83-202t-202-84-202 84-84 202 84 202 202 84 202-84 83-202z m72 0q0 73-29 139t-76 114-114 76-138 28-139-28-114-76-76-114-29-139 29-139 76-113 114-77 139-28 138 28 114 77 76 113 29 139z m71 0q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="windows" unicode="" d="m381 289v-364l-381 53v311h381z m0 414v-367h-381v315z m548-414v-439l-507 70v369h507z m0 490v-443h-507v373z" horiz-adv-x="928.6" />
+<glyph glyph-name="cancel-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m86-420l154 154-86 86-154-152-152 152-88-86 154-154-154-152 88-86 152 152 154-152 86 86z" horiz-adv-x="840" />
+<glyph glyph-name="plus-1" unicode="" d="m550 400q30 0 30-50t-30-50l-210 0 0-210q0-30-50-30t-50 30l0 210-210 0q-30 0-30 50t30 50l210 0 0 210q0 30 50 30t50-30l0-210 210 0z" horiz-adv-x="580" />
+<glyph glyph-name="plus-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m52-470l200 0 0 102-200 0 0 202-102 0 0-202-202 0 0-102 202 0 0-202 102 0 0 202z" horiz-adv-x="840" />
+<glyph glyph-name="minus-1" unicode="" d="m550 400q30 0 30-50t-30-50l-520 0q-30 0-30 50t30 50l520 0z" horiz-adv-x="580" />
+<glyph glyph-name="minus-circled-1" unicode="" d="m420 770q174 0 297-123t123-297-123-297-297-123-297 123-123 297 123 297 297 123z m252-368l-504 0 0-102 504 0 0 102z" horiz-adv-x="840" />
+<glyph glyph-name="help-circled-1" unicode="" d="m454 810q190 2 326-130t140-322q2-190-131-327t-323-141q-190-2-327 131t-139 323q-4 190 130 327t324 139z m-2-740q30 0 49 19t19 47q2 30-17 49t-49 19l-2 0q-28 0-47-18t-21-46q0-30 19-49t47-21l2 0z m166 328q26 34 26 78 0 78-54 116-52 38-134 38-64 0-104-26-68-42-72-146l0-4 110 0 0 4q0 26 16 54 16 24 54 24 40 0 52-20 16-20 16-44 0-18-16-40-8-12-20-20l-6-4q-6-4-16-11t-20-15-21-17-17-17q-14-20-18-78l0-8 108 0 0 4q0 12 4 28 6 20 28 36l28 18q46 34 56 50z" horiz-adv-x="920" />
+<glyph glyph-name="heart-empty-1" unicode="" d="m790 642q70-64 70-156t-70-156l-360-330-360 330q-70 64-70 156t70 156q64 58 152 58t150-58l58-52 56 52q64 58 152 58t152-58z m-54-260q42 40 42 104 0 66-38 100-38 38-102 38-52 0-104-48l-104-92-106 92q-48 48-102 48-64 0-104-38-38-36-38-100 0-66 44-104l306-286z" horiz-adv-x="860" />
+<glyph glyph-name="mail-1" unicode="" d="m30 586q-32 18-28 40 2 14 26 14l846 0q38 0 20-32-8-14-24-22-14-6-192-102t-182-98q-16-10-46-10-28 0-46 10-4 2-182 98t-192 102z m850-100q20 10 20-10l0-368q0-16-17-32t-33-16l-800 0q-16 0-33 16t-17 32l0 368q0 20 20 10l384-200q18-10 46-10t46 10z" horiz-adv-x="900" />
+<glyph glyph-name="star-1" unicode="" d="m440 790l120-336 320 0-262-196 94-348-272 208-272-208 94 348-262 196 320 0z" horiz-adv-x="880" />
+<glyph glyph-name="star-empty-1" unicode="" d="m880 454l-262-196 94-348-272 208-272-208 94 348-262 196 320 0 120 336 120-336 320 0z m-440-238l150-124-62 178 144 114-176-4-56 202-54-202-176 4 142-114-62-178z" horiz-adv-x="880" />
+<glyph glyph-name="link-1" unicode="" d="m294 116q14 14 34 14t36-14q32-34 0-70l-42-40q-56-56-132-56-78 0-134 56t-56 132q0 78 56 134l148 148q70 68 144 77t128-43q16-16 16-36t-16-36q-36-32-70 0-50 48-132-34l-148-146q-26-26-26-64t26-62q26-26 63-26t63 26z m450 574q56-56 56-132 0-78-56-134l-158-158q-74-72-150-72-62 0-112 50-14 14-14 34t14 36q14 14 35 14t35-14q50-48 122 24l158 156q28 28 28 64 0 38-28 62-24 26-56 31t-60-21l-50-50q-16-14-36-14t-34 14q-34 34 0 70l50 50q54 54 127 51t129-61z" horiz-adv-x="800" />
+<glyph glyph-name="attach-1" unicode="" d="m244-140q-102 0-170 72-72 70-74 166t84 190l496 496q80 80 174 54 44-12 79-47t47-79q26-96-54-176l-474-474q-40-40-88-46-48-4-80 28-30 24-27 74t47 92l332 334q24 26 50 0t0-50l-332-332q-44-44-20-70 12-8 24-6 24 4 46 26l474 474q50 50 34 108-16 60-76 76-54 14-108-36l-494-494q-66-76-64-143t52-117q50-48 117-50t141 62l496 494q24 24 50 0 26-22 0-48l-496-496q-82-82-186-82z" horiz-adv-x="939" />
+<glyph glyph-name="eye-1" unicode="" d="m500 630q92 0 177-25t141-62 99-77 63-71 20-45-20-44-63-71-99-78-141-62-177-25-177 25-141 62-99 78-63 71-20 44 20 45 63 71 99 77 141 62 177 25z m0-494q92 0 157 63t65 151q0 90-65 153t-157 63-157-63-65-153q0-88 65-151t157-63z m0 214q8-8 37-2t50 11 25-9q0-44-33-75t-79-31-78 31-32 75q0 46 32 77t78 31q14 0 10-23t-12-47 2-38z" horiz-adv-x="1000" />
+<glyph glyph-name="attention-1" unicode="" d="m957-24q10-16 0-34-10-16-30-16l-892 0q-18 0-28 16-13 18-2 34l446 782q8 18 30 18t30-18z m-420 50l0 100-110 0 0-100 110 0z m0 174l0 300-110 0 0-300 110 0z" horiz-adv-x="962" />
+<glyph glyph-name="doc-text-1" unicode="" d="m212 308l0 90 280 0 0-90-280 0z m388 492q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-500 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l500 0z m0-800l0 700-500 0 0-700 500 0z m-110 592l0-88-280 0 0 88 280 0z m0-392l0-88-280 0 0 88 280 0z" horiz-adv-x="700" />
+<glyph glyph-name="doc-text-inv-1" unicode="" d="m600 800q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-500 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l500 0z m-460-208l0-88 420 0 0 88-420 0z m420-480l0 88-420 0 0-88 420 0z m0 196l0 90-418 0 0-90 418 0z" horiz-adv-x="700" />
+<glyph glyph-name="share-1" unicode="" d="m650 200q62 0 106-43t44-107q0-62-44-106t-106-44-106 44-44 106q0 6 1 14t1 12l-260 156q-42-32-92-32-62 0-106 44t-44 106 44 106 106 44q54 0 92-30l260 156q0 4-1 12t-1 12q0 62 44 106t106 44 106-43 44-107q0-62-44-106t-106-44q-52 0-90 32l-262-156q2-8 2-26 0-16-2-24l262-156q36 30 90 30z" horiz-adv-x="800" />
+<glyph glyph-name="shareable" unicode="" d="m340 350q0 68 47 114t113 46 113-46 47-114q0-66-47-113t-113-47-113 47-47 113z m-114 60q-14-60-66-60l-160 0 0 120 118 0q40 124 145 202t237 78q164 0 284-116 16-18 16-43t-16-43q-18-16-43-16t-43 16q-78 82-198 82-100 0-176-62t-98-158z m614-60l160 0 0-120-118 0q-40-124-144-202t-238-78q-164 0-282 118-18 18-18 43t18 41q16 18 41 18t43-18q82-82 198-82 100 0 176 63t98 157q12 60 66 60z" horiz-adv-x="1000" />
+<glyph glyph-name="ccw-1" unicode="" d="m532 736q170 0 289-120t119-290-119-290-289-120q-142 0-252 88l70 74q84-60 182-60 126 0 216 90t90 218-90 218-216 90q-124 0-214-87t-92-211l142 0-184-204-184 204 124 0q2 166 122 283t286 117z" horiz-adv-x="940" />
+<glyph glyph-name="cw-1" unicode="" d="m408 760q168 0 287-116t123-282l122 0-184-206-184 206 144 0q-4 124-94 210t-214 86q-126 0-216-90t-90-218q0-126 90-216t216-90q104 0 182 60l70-76q-110-88-252-88-168 0-288 120t-120 290 120 290 288 120z" horiz-adv-x="940" />
+<glyph glyph-name="arrows-ccw" unicode="" d="m186 140l116 116 0-292-276 16 88 86q-116 122-114 290t120 288q100 100 240 116l4-102q-100-16-172-88-88-88-90-213t84-217z m332 598l276-16-88-86q116-122 114-290t-120-288q-96-98-240-118l-2 104q98 16 170 88 88 88 90 213t-84 217l-114-116z" horiz-adv-x="820" />
+<glyph glyph-name="play-1" unicode="" d="m486 376q14-10 14-26 0-14-14-24l-428-266q-24-16-41-6t-17 40l0 514q0 30 17 40t41-6z" horiz-adv-x="500" />
+<glyph glyph-name="pause" unicode="" d="m440 700q90 0 90-64l0-570q0-66-90-66t-90 66l0 570q0 64 90 64z m-350 0q90 0 90-64l0-570q0-66-90-66t-90 66l0 570q0 64 90 64z" horiz-adv-x="530" />
+<glyph glyph-name="record" unicode="" d="m350 700q146 0 248-102t102-248q0-144-102-247t-248-103-248 103-102 247q0 146 102 248t248 102z" horiz-adv-x="700" />
+<glyph glyph-name="stop-1" unicode="" d="m526 650q74 0 74-64l0-470q0-66-74-66l-450 0q-76 0-76 66l0 470q0 36 18 50t58 14l450 0z" horiz-adv-x="600" />
+<glyph glyph-name="switch" unicode="" d="m700 592l0-140-500 0 0-90-200 160 200 170 0-100 500 0z m300-420l-200-160 0 90-500 0 0 140 500 0 0 100z" horiz-adv-x="1000" />
+<glyph glyph-name="loop" unicode="" d="m800 540q42 0 71-29t29-71l0-290q0-40-29-70t-71-30l-700 0q-40 0-70 30t-30 70l0 290q0 42 30 71t70 29l250 0 0 110 200-180-200-180 0 110-210 0 0-210 620 0 0 210-150 0 0 140 190 0z" horiz-adv-x="900" />
+<glyph glyph-name="cloud-1" unicode="" d="m760 494q100 0 170-68t70-166-70-166-170-68l-578 0q-74 0-128 52t-54 124q0 74 53 126t129 52q2 0 10-1t10-1q-2 12-2 38 0 108 78 184t188 76q90 0 160-52t94-134q28 4 40 4z" horiz-adv-x="1000" />
+<glyph glyph-name="certificate-outline" unicode="" d="m1019 395q22-15 22-44t-22-43l-96-64 51-104q14-26-3-49t-41-26l-115-7-7-117q-3-25-25-40t-50-2l-104 51-65-96q-16-24-43-24-27 0-43 24l-64 96-104-51q-26-14-49 2t-26 40l-7 117-117 7q-25 3-40 25t-2 50l51 104-96 64q-24 16-24 43t24 44l96 64-51 104q-14 27 2 50t40 25l117 7 7 115q3 25 26 41t49 3l104-51 64 96q13 21 43 21t43-21l65-96 104 51q26 14 50-3t25-41l7-115 115-7q25-3 41-25t3-50l-51-104z m-210-156q-9 17-4 36t21 30l70 46-70 47q-36 26-17 66l37 75-83 5q-20 1-34 15t-15 34l-5 83-75-37q-40-19-66 17l-47 70-46-70q-26-36-66-17l-75 37-5-83q-1-20-15-34t-34-15l-84-5 38-75q9-18 3-36t-22-30l-69-47 69-46q16-11 22-30t-3-36l-38-75 84-5q20-1 33-15t15-34l6-84 75 38q10 5 22 5 29 0 44-23l46-70 47 69q11 16 30 22t36-3l75-38 5 84q1 20 15 34t34 15l82 5z" horiz-adv-x="1041" />
+<glyph glyph-name="certificate-1" unicode="" d="m863 449l115-78q12-8 12-21t-12-21l-115-78 61-123q7-14-1-25t-20-13l-139-10-9-138q-1-12-12-20t-25-2l-124 62-78-116q-7-11-21-11t-21 11l-78 116-123-62q-14-6-25 2t-13 20l-10 139-137 9q-13 1-22 13t-1 25l63 123-117 78q-11 7-11 21t11 21l117 78-63 124q-7 12 1 24t22 13l137 9 10 139q1 12 13 20t25 1l123-61 78 116q7 11 21 11t21-11l78-116 124 61q13 7 25-1t12-20l9-139 139-9q12-1 20-12t1-25z" horiz-adv-x="990" />
+<glyph glyph-name="windows-1" unicode="" d="m0-43l105 371q35 20 86 31t83 13l34 1q50 0 104-10 101-20 144-61l-104-370q-36 28-79 45t-69 21l-26 4q-34 3-65 3-16 0-42-1t-84-14-87-33z m126 477l105 371q35 20 86 32t84 12l33 1q51 0 104-10 101-20 144-61l-104-371q-36 28-79 46t-69 20l-26 4q-35 3-64 3-16 0-42-1t-84-13-88-33z m431-513l104 371q37-28 81-45t68-21l25-4q34-3 65-3 16 0 43 2t84 13 86 32l-104-371q-35-20-86-31t-84-12l-33-2q-51 0-104 10-101 20-145 61z m120 475l104 370q37-28 81-45t68-21l25-4q34-3 65-3 16 0 43 2t83 13 87 32l-104-370q-35-20-86-31t-85-13l-33-2q-52 0-103 11-101 19-145 61z" horiz-adv-x="1233" />
+<glyph glyph-name="spin5" unicode="" d="m462 850c-6 0-11-5-11-11l0-183 0 0c0-6 5-11 11-11l69 0c1 0 1 0 1 0 7 0 12 5 12 11l0 183 0 0c0 6-5 11-12 11l-69 0c0 0 0 0-1 0z m250-47c-4 1-8-2-10-5l-91-158 0 0c-4-6-2-13 4-16l60-35c0 0 0 0 0 0 6-3 13-1 16 4l91 158c3 6 2 13-4 16l-61 35c-1 1-3 1-5 1z m-428-2c-2 0-4-1-6-2l-61-35c-5-3-7-10-4-16l91-157c0 0 0 0 0 0 3-6 10-8 16-5l61 35c5 4 7 11 4 16l-91 157c0 1 0 1 0 1-2 4-6 6-10 6z m620-163c-2 0-4 0-6-1l-157-91c0 0 0 0 0 0-6-3-8-10-5-16l35-61c4-5 11-7 16-4l157 91c1 0 1 0 1 0 6 3 7 10 4 16l-35 61c-2 3-6 5-10 5z m-810-4c-5 0-9-2-11-6l-35-61c-3-5-1-12 4-15l158-92 0 0c6-3 13-1 16 5l35 60c0 0 0 0 0 0 3 6 1 13-4 16l-158 91c-2 1-4 2-5 2z m712-235l0 0c-6 0-11-5-11-11l0-69c0-1 0-1 0-1 0-7 5-12 11-12l183 0 0 0c6 0 11 5 11 12l0 69c0 0 0 0 0 1 0 6-5 11-11 11l-183 0z m-794-5l0 0c-7 0-12-5-12-12l0-69c0 0 0 0 0-1 0-6 5-11 12-11l182 0 0 0c6 0 11 5 11 11l0 69c0 1 0 1 0 1 0 7-5 12-11 12l-182 0z m772-153c-4 0-8-2-10-6l-34-60c-1 0-1 0-1 0-3-6-1-13 4-16l158-91c6-3 13-2 16 4l35 61c3 5 1 12-4 15l-158 91 0 0c-2 1-4 2-6 2z m-566-5c-1 0-3 0-5-1l-157-91c0 0-1 0-1 0-5-3-7-11-4-16l35-61c3-5 10-7 16-4l157 91c0 0 0 0 0 0 6 3 8 10 5 16l-35 61c-3 3-7 5-11 5z m468-121c-2 0-4 0-6-1l-61-35c-5-4-7-11-4-16l91-157c0-1 0-1 0-1 3-6 11-7 16-4l61 35c5 3 7 10 4 16l-91 157c0 0 0 0 0 0-2 4-6 6-10 6z m-367-3c-4 1-8-2-10-5l-91-158c-3-6-1-13 4-16l61-35c5-3 12-1 15 4l92 158 0 0c3 6 1 13-5 16l-60 34c0 1 0 1 0 1-2 1-4 1-6 1z m149-57c-7 0-12-5-12-11l0-183 0 0c0-6 5-11 12-11l69 0c0 0 0 0 1 0 6 0 11 5 11 11l0 183 0 0c0 6-5 11-11 11l-69 0c-1 0-1 0-1 0z" horiz-adv-x="1000" />
+<glyph glyph-name="spin2" unicode="" d="m46 144l0 0c0 0-1 0-1 0-8 18-15 37-21 55-6 19-11 38-15 58-19 99-8 203 35 298 3 6 10 8 15 5 1 0 2 0 2-1l0 0 80-59c5-3 6-9 4-14-5-12-9-25-12-38-4-12-7-26-9-39-11-67-3-137 23-201 2-5 0-10-4-13l0 0-80-56c-5-4-12-3-16 3-1 0-1 1-1 2l0 0z m120 574l0 0c0 1 0 1 0 1 15 13 30 25 46 37 16 11 33 22 51 31 89 50 192 72 297 60 6-1 10-6 10-13 0-1-1-1-1-2l0 0-31-94c-2-5-8-8-13-7-13 0-27 0-40 0-14-1-27-2-40-4-68-11-133-40-186-84-4-3-10-3-14 0l0 0-79 58c-5 3-6 11-2 16 0 0 1 1 2 1l0 0z m588 65l0 0c0 0 1 0 1 0 17-10 34-21 50-32 16-12 31-25 46-38 74-69 127-160 148-262 2-6-2-12-9-13-1 0-1 0-2 0l0 0-100 1c-5 0-10 4-11 9-3 13-8 26-12 38-5 12-10 25-17 36-31 61-78 113-137 150-5 3-6 8-5 13l0 0 31 92c2 6 9 9 15 7 1 0 2-1 2-1l0 0z m244-535l0 0c0 0 0 0 0 0-4-20-9-39-15-57-7-19-14-37-22-55-44-92-114-170-205-221-6-3-13-1-16 4 0 1-1 2-1 2l0 0-30 94c-2 6 1 12 6 14 11 7 22 15 32 23 11 9 21 18 30 27 49 48 84 109 101 176 2 5 6 8 11 8l0 0 98-1c6 0 11-5 11-11 0-1 0-2 0-3l0 0z m-438-395l0 0c0 0 0 0 0 0-20-2-40-3-60-3-20 0-40 1-59 4-102 12-198 54-276 125-5 4-5 11 0 16 0 0 1 1 1 1l0 0 81 58c5 3 12 2 16-2 10-8 20-16 32-23 11-7 22-14 34-20 62-31 131-45 200-41 6 0 10-3 12-8l0 0 29-92c2-6-1-12-7-14-1-1-2-1-3-1l0 0z" horiz-adv-x="1000" />
+<glyph glyph-name="picture" unicode="" d="m357 529q0-45-31-76t-76-32-76 32-31 76 31 75 76 32 76-32 31-75z m572-215v-250h-786v107l178 179 90-89 285 285z m53 393h-893q-7 0-12-5t-6-13v-678q0-8 6-13t12-5h893q7 0 13 5t5 13v678q0 7-5 13t-13 5z m89-18v-678q0-37-26-63t-63-27h-893q-36 0-63 27t-26 63v678q0 37 26 63t63 27h893q37 0 63-27t26-63z" horiz-adv-x="1071.4" />
+<glyph glyph-name="menu" unicode="" d="m857 100v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 25t25 11h785q15 0 26-11t10-25z m0 286v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25v72q0 14 11 25t25 10h785q15 0 26-10t10-25z m0 285v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 26t25 10h785q15 0 26-10t10-26z" horiz-adv-x="857.1" />
+<glyph glyph-name="sliders" unicode="" d="m196 64v-71h-196v71h196z m197 72q14 0 25-11t11-25v-143q0-14-11-25t-25-11h-143q-14 0-25 11t-11 25v143q0 15 11 25t25 11h143z m89 214v-71h-482v71h482z m-357 286v-72h-125v72h125z m732-572v-71h-411v71h411z m-536 643q15 0 26-10t10-26v-142q0-15-10-26t-26-10h-142q-15 0-26 10t-10 26v142q0 15 10 26t26 10h142z m358-286q14 0 25-10t10-25v-143q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v143q0 14 11 25t25 10h143z m178-71v-71h-125v71h125z m0 286v-72h-482v72h482z" horiz-adv-x="857.1" />
+<glyph glyph-name="list-alt" unicode="" d="m214 189v-35q0-8-5-13t-13-5h-35q-7 0-13 5t-5 13v35q0 8 5 13t13 5h35q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-5h-35q-7 0-13 5t-5 12v36q0 7 5 13t13 5h35q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-6h-35q-7 0-13 6t-5 12v36q0 7 5 13t13 5h35q8 0 13-5t5-13z m643-286v-35q0-8-5-13t-13-5h-535q-8 0-13 5t-5 13v35q0 8 5 13t13 5h535q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-5h-535q-8 0-13 5t-5 12v36q0 7 5 13t13 5h535q8 0 13-5t5-13z m0 143v-36q0-7-5-12t-13-6h-535q-8 0-13 6t-5 12v36q0 7 5 13t13 5h535q8 0 13-5t5-13z m72-393v464q0 8-6 13t-12 5h-822q-7 0-12-5t-6-13v-464q0-7 6-12t12-6h822q7 0 12 6t6 12z m71 607v-607q0-37-26-63t-63-26h-822q-36 0-63 26t-26 63v607q0 37 26 63t63 27h822q37 0 63-27t26-63z" horiz-adv-x="1000" />
+<glyph glyph-name="ajust" unicode="" d="m429 46v608q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41z m428 304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="circle" unicode="" d="m857 350q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="circle-empty" unicode="" d="m429 654q-83 0-153-41t-110-111-41-152 41-152 110-111 153-41 152 41 110 111 41 152-41 152-110 111-152 41z m428-304q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
+<glyph glyph-name="circle-notch" unicode="" d="m1000 350q0-102-40-194t-106-160-160-106-194-40-194 40-160 106-106 160-40 194q0 124 56 231t155 177 218 87v-145q-124-25-205-124t-81-226q0-73 28-139t77-114 113-76 139-28 139 28 114 76 76 114 28 139q0 128-81 226t-205 124v145q120-17 218-87t155-177 56-231z" horiz-adv-x="1000" />
+<glyph glyph-name="fork" unicode="" d="m161 29q0 22-16 38t-38 15-38-15-15-38 15-38 38-16 38 16 16 38z m0 642q0 23-16 38t-38 16-38-16-15-38 15-38 38-15 38 15 16 38z m357-71q0 22-16 38t-38 16-38-16-15-38 15-38 38-16 38 16 16 38z m53 0q0-29-14-54t-39-39q-1-160-126-231-38-21-114-45-71-22-94-39t-23-56v-15q24-14 39-39t14-53q0-45-31-76t-76-32-76 32-31 76q0 29 15 53t39 39v458q-25 14-39 39t-15 53q0 45 31 76t76 32 76-32 31-76q0-29-14-53t-39-39v-278q30 15 86 32 30 10 49 17t39 17 33 22 22 29 16 38 5 51q-25 14-39 39t-15 54q0 45 31 76t76 31 76-31 31-76z" horiz-adv-x="571.4" />
+<glyph glyph-name="sitemap" unicode="" d="m1000 154v-179q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q23 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q22 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107q0 29 21 51t51 21h285v107h-53q-23 0-38 15t-16 38v179q0 22 16 38t38 16h178q23 0 38-16t16-38v-179q0-22-16-38t-38-15h-53v-107h285q29 0 51-21t21-51v-107h53q23 0 38-15t16-38z" horiz-adv-x="1000" />
+<glyph glyph-name="stethoscope" unicode="" d="m714 457q0 15-10 25t-25 11-26-11-10-25 10-25 26-11 25 11 10 25z m72 0q0-34-20-62t-52-39v-220q0-89-73-152t-177-63-176 63-74 152v73q-91 12-153 72t-61 140v286q0 15 11 25t25 11q3 0 9-1 9 16 26 27t36 10q30 0 51-21t21-51-21-50-51-21q-18 0-36 10v-225q0-59 53-101t126-41 126 41 53 101v225q-18-10-36-10-30 0-51 21t-21 50 21 51 51 21q19 0 36-10t26-27q6 1 9 1 15 0 25-11t11-25v-286q0-80-61-140t-153-72v-73q0-59 52-101t126-42 126 42 53 101v220q-32 12-52 39t-20 62q0 45 32 76t76 31 75-31 32-76z" horiz-adv-x="785.7" />
+<glyph glyph-name="shield" unicode="" d="m607 314v357h-250v-634q67 35 119 76 131 103 131 201z m107 429v-429q0-48-18-95t-47-84-66-71-70-57-68-43-50-28-23-11q-7-4-15-4t-14 4q-9 4-24 11t-50 28-68 43-70 57-66 71-46 84-19 95v429q0 14 11 25t25 11h643q14 0 25-11t10-25z" horiz-adv-x="714.3" />
+<glyph glyph-name="heart-1" unicode="" d="m790 644q70-64 70-156t-70-158l-360-330-360 330q-70 66-70 158t70 156q62 58 151 58t153-58l56-52 58 52q62 58 150 58t152-58z" horiz-adv-x="860" />
+<glyph glyph-name="search-1" unicode="" d="m772 78q30-34 6-62l-46-46q-36-32-68 0l-190 190q-74-42-156-42-128 0-223 95t-95 223 90 219 218 91 224-95 96-223q0-88-46-162z m-678 358q0-88 68-156t156-68 151 63 63 153q0 88-68 155t-156 67-151-63-63-151z" horiz-adv-x="789" />
+<glyph glyph-name="menu-1" unicode="" d="m650 400q22 0 36-15t14-35-15-35-35-15l-600 0q-20 0-35 15t-15 35 14 35 36 15l600 0z m-600 100q-20 0-35 15t-15 35 14 35 36 15l600 0q22 0 36-15t14-35-15-35-35-15l-600 0z m600-300q22 0 36-15t14-35-15-35-35-15l-600 0q-20 0-35 15t-15 35 14 35 36 15l600 0z" horiz-adv-x="700" />
+<glyph glyph-name="back" unicode="" d="m750 540q40 0 70-29t30-71l0-290q0-40-30-70t-70-30l-690 0 0 140 650 0 0 210-500 0 0-110-210 180 210 180 0-110 540 0z" horiz-adv-x="850" />
+<glyph glyph-name="home-1" unicode="" d="m888 336q16-16 11-27t-27-11l-84 0 0-310q0-14-1-21t-8-13-23-6l-204 0 0 310-204 0 0-310-194 0q-28 0-35 10t-7 30l0 310-84 0q-22 0-27 11t11 27l400 402q16 16 38 16t38-16z" horiz-adv-x="900" />
+<glyph glyph-name="pencil-1" unicode="" d="m718 680q32-32 47-64t15-48l0-16-252-252-290-288-238-52 50 240 290 288 252 252q54 12 126-60z m-494-640l24 24q-2 44-52 94-22 22-45 35t-35 13l-14 2-22-24-18-80q28-16 46-34 24-24 36-48z" horiz-adv-x="780" />
+<glyph glyph-name="location-1" unicode="" d="m250 750q104 0 177-73t73-177q0-106-62-243t-126-223l-62-84q-10 12-27 35t-60 89-76 130-60 147-27 149q0 104 73 177t177 73z m0-388q56 0 96 40t40 96-40 95-96 39-95-39-39-95 39-96 95-40z" horiz-adv-x="500" />
+<glyph glyph-name="logout-1" unicode="" d="m502 0l0 100 98 0 0-100q0-40-29-70t-71-30l-400 0q-40 0-70 30t-30 70l0 700q0 42 30 71t70 29l400 0q42 0 71-29t29-71l0-150-98 0 0 150-402 0 0-700 402 0z m398 326l-198-196 0 120-450 0 0 150 450 0 0 120z" horiz-adv-x="900" />
+<glyph glyph-name="login-1" unicode="" d="m800 800q42 0 71-29t29-71l0-700q0-40-29-70t-71-30l-450 0q-40 0-69 30t-29 70l0 100 98 0 0-100 450 0 0 700-450 0 0-150-98 0 0 150q0 42 29 71t69 29l450 0z m-350-670l0 120-450 0 0 150 450 0 0 120 200-194z" horiz-adv-x="900" />
+<glyph glyph-name="publish" unicode="" d="m900 800q42 0 71-30t29-70l0-600q0-42-29-71t-71-29l-198 0 0 98 200 0 0 462-802 0 0-462 200 0 0-98-200 0q-40 0-70 29t-30 71l0 600q0 40 30 70t70 30l800 0z m-770-168q38 0 38 38 0 16-11 26t-27 10-27-11-11-25q0-16 11-27t27-11z m100 0q38 0 38 38 0 16-11 26t-27 10-27-11-11-25q0-16 11-27t27-11z m672 6l0 62-602 0 0-62 602 0z m-404-198l242-240-150 0 0-300-184 0 0 300-150 0z" horiz-adv-x="1000" />
+<glyph glyph-name="window" unicode="" d="m900 750q42 0 71-30t29-70l0-600q0-42-29-71t-71-29l-800 0q-40 0-70 29t-30 71l0 600q0 40 30 70t70 30l800 0z m-670-94q-16 0-27-11t-11-25q0-16 11-27t27-11q38 0 38 38 0 16-11 26t-27 10z m-138-36q0-16 11-27t27-11q38 0 38 38 0 16-11 26t-27 10-27-11-11-25z m810-570l0 460-802 0 0-460 802 0z m0 540l0 60-602 0 0-60 602 0z" horiz-adv-x="1000" />
+<glyph glyph-name="chart-pie" unicode="" d="m368 770l0-368-368 0q18 146 121 249t247 119z m106 0q156-20 261-139t105-279q0-174-123-298t-299-124q-160 0-278 105t-140 263l424 0q20 0 35 14t15 36l0 422z" horiz-adv-x="840" />
+<glyph glyph-name="chart-line" unicode="" d="m34 284q-42 10-32 56 10 42 54 32l98-24-52-80z m890-12q14 12 33 11t31-15q32-32-2-64l-252-226q-12-12-30-12-14 0-28 10l-286 220-54 14 50 80 36-8q12-4 16-8l264-204z m-490 220l-350-550q-12-22-38-22-12 0-24 8-16 10-20 29t6 33l374 588q8 16 28 20 18 6 36-6l246-156 226 326q10 16 28 19t34-9q38-24 12-62l-252-362q-24-36-62-12z" horiz-adv-x="1003" />
+<glyph glyph-name="chart-area" unicode="" d="m964 732q16 22 16-4l0-768-964 0q-12 0-15 7t5 17l230 288q20 22 40 2l74-66q10-8 21-7t17 11l158 238q16 26 38 4l112-104q20-20 38 4z" horiz-adv-x="980" />
+<glyph glyph-name="chart-bar-1" unicode="" d="m750 800q22 0 36-15t14-35l0-850-200 0 0 850q0 50 40 50l110 0z m-300-300q22 0 36-15t14-35l0-550-200 0 0 550q0 50 40 50l110 0z m-300-300q22 0 36-15t14-35l0-250-200 0 0 250q0 50 40 50l110 0z" horiz-adv-x="800" />
+<glyph glyph-name="air" unicode="" d="m85 534q-16-14-36-12t-34 18q-14 14-12 36t18 36q48 40 79 60t89 40 129 4 159-66 155-53 100 16 89 67q38 30 70-6 32-40-6-72-122-110-234-110-100 0-222 70-68 38-119 52t-93 0-65-29-67-51z m736-110q38 32 70-6 32-40-6-72-40-34-65-53t-72-38-97-19q-96 0-222 70-68 38-119 52t-93 0-65-29-67-51q-14-14-35-12t-35 18q-32 40 6 72 38 34 60 50t69 38 88 23 105-15 134-56q68-38 119-52t93 0 65 29 67 51z m0-256q38 32 70-6 14-14 12-36t-18-36q-40-34-65-53t-72-38-97-19q-96 0-222 70-68 38-119 52t-93 1-66-29-66-52q-14-14-35-12t-35 18q-32 40 6 72 38 34 60 50t69 38 88 23 105-15 134-56q68-38 119-52t93 0 65 29 67 51z" horiz-adv-x="905" />
+<glyph glyph-name="database-1" unicode="" d="m686 208q14 20 14-2l0-100q0-74-104-135t-246-61q-140 0-245 61t-105 135l0 100q0 8 4 10t10-8q32-52 125-86t211-34 211 34 125 86z m2 254q8 16 12 0l0-116q0-68-102-114t-248-46q-144 0-247 46t-103 114l0 116q0 20 14 0 30-46 124-75t212-29 212 29 126 75z m-338 328q144 0 247-39t103-93l0-64q0-58-103-99t-247-41-247 41-103 99l0 64q0 54 103 93t247 39z" horiz-adv-x="700" />
+<glyph glyph-name="flow-cascade" unicode="" d="m520 120q50 0 85-35t35-85-35-85-85-35q-80 0-110 74l-164 0q-88 0-131 54t-43 118l0 464q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-114q0-78 78-78l164 0q30 72 110 72 50 0 85-35t35-85-35-85-85-35q-80 0-110 74l-164 0q-42 0-78 16l0-194q0-78 78-78l164 0q30 72 110 72z m0 300q-28 0-49-20t-21-50q0-28 21-48t49-20 49 20 21 48q0 30-21 50t-49 20z m-470 280q0-28 21-48t49-20 49 20 21 48q0 30-21 50t-49 20-49-20-21-50z m470-768q28 0 49 20t21 48q0 30-21 50t-49 20-49-20-21-50q0-28 21-48t49-20z" horiz-adv-x="640" />
+<glyph glyph-name="flow-tree" unicode="" d="m868 112q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 114q0 78-76 78l-100 0q-44 0-78 12l0-204q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 204q-30-12-76-12l-100 0q-34 0-53-19t-22-33-3-26l0-114q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 114q0 64 43 118t131 54l100 0q76 0 76 52l0 140q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-140q0-52 78-52l100 0q86 0 129-54t43-118l0-114z m-678-112q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m212 700q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m138-700q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m280-68q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="940" />
+<glyph glyph-name="flow-line" unicode="" d="m168 162q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-378z m-116 488q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="240" />
+<glyph glyph-name="flow-branch" unicode="" d="m640 650q0-80-74-110-6-58-28-101t-61-69-68-38-75-26q-42-14-63-22t-47-24-38-40-16-60q70-30 70-110 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-204q40 30 138 60 58 18 84 29t51 41 29 76q-70 32-70 108 0 50 35 85t85 35 85-35 35-85z m-588 0q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z m400 600q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="640" />
+<glyph glyph-name="flow-parallel-1" unicode="" d="m240 650q0-76-72-110l0-378q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85z m-50-600q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20 49 20 21 48z m-70 532q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z m448-420q72-34 72-112 0-50-35-85t-85-35-85 35-35 85q0 78 72 112l0 378q-72 34-72 110 0 50 35 85t85 35 85-35 35-85q0-76-72-110l0-378z m-116 488q0-28 20-48t48-20 49 20 21 48q0 30-21 50t-49 20-48-20-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20-48-20-20-50q0-28 20-48t48-20z" horiz-adv-x="640" />
+<glyph glyph-name="dot" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z" horiz-adv-x="220" />
+<glyph glyph-name="dot-3" unicode="" d="m110 460q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z m350 0q46 0 78-32t32-78q0-44-33-77t-77-33-77 33-33 77q0 46 32 78t78 32z m350 0q46 0 78-32t32-78q0-44-32-77t-78-33-78 33-32 77q0 46 32 78t78 32z" horiz-adv-x="920" />
+<glyph glyph-name="cd" unicode="" d="m460 810q190 0 325-135t135-325-135-325-325-135-325 135-135 325 135 325 325 135z m0-610q62 0 106 44t44 106q0 64-43 107t-107 43q-62 0-106-44t-44-106 44-106 106-44z" horiz-adv-x="920" />
+<glyph glyph-name="back-in-time" unicode="" d="m532 760q170 0 289-120t119-290-119-290-289-120q-138 0-252 88l70 76q82-60 182-60 126 0 216 90t90 216q0 128-90 218t-216 90q-124 0-213-86t-93-210l142 0-184-206-184 206 124 0q4 166 123 282t285 116z m-36-190l70 0 0-204 130-130-50-50-150 150 0 234z" horiz-adv-x="940" />
+<glyph glyph-name="list" unicode="" d="m100 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m0 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m0 200q20 0 35-15t15-35-15-35-35-15l-50 0q-20 0-35 15t-15 35 14 35 36 15l50 0z m200-100q-20 0-35 15t-15 35 15 35 35 15l350 0q22 0 36-15t14-35-15-35-35-15l-350 0z m350-100q22 0 36-15t14-35-15-35-35-15l-350 0q-20 0-35 15t-15 35 15 35 35 15l350 0z m0-200q22 0 36-15t14-35-15-35-35-15l-350 0q-20 0-35 15t-15 35 15 35 35 15l350 0z" horiz-adv-x="700" />
+<glyph glyph-name="list-add" unicode="" d="m350 400q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z m0-200q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z m620 200q30 0 30-50t-30-50l-170 0 0-170q0-30-50-30t-50 30l0 170-164 0q-30 0-30 50t30 50l164 0 0 170q0 30 50 30t50-30l0-170 170 0z m-620 200q22 0 36-15t14-35-15-35-35-15l-300 0q-20 0-35 15t-15 35 14 35 36 15l300 0z" horiz-adv-x="1000" />
+<glyph glyph-name="progress-0" unicode="" d="m1000 450l0-250q0-42-29-71t-71-29l-800 0q-40 0-70 29t-30 71l0 300q0 40 30 70t70 30l800 0q42 0 71-30t29-70l0-50z m-100-250l0 300-800 0 0-300 800 0z" horiz-adv-x="1000" />
+<glyph glyph-name="pencil-2" unicode="" d="m0-143l68 343 274-273z m137 392l422 422 259-260-421-422z m531 494q2 39 31 69t69 31 66-26l131-130q25-26 24-66t-30-69-69-30-66 24l-131 131q-27 27-25 66z" horiz-adv-x="989" />
+<glyph glyph-name="cog-2" unicode="" d="m0 272l0 156 150 16q14 45 38 88l-96 117 109 109 117-95q41 23 88 37l16 150 156 0 16-150q45-14 88-37l117 95 109-109-96-117q24-43 38-88l150-16 0-156-150-16q-14-47-38-88l96-117-109-109-117 96q-43-24-88-38l-16-150-156 0-16 150q-47 14-88 38l-117-96-109 109 96 117q-24 41-38 88z m355 78q0-60 42-102t103-42 103 42 42 102-42 103-103 42-103-42-42-103z" horiz-adv-x="1000" />
+<glyph glyph-name="cog-circled" unicode="" d="m0 350q0 207 147 354t353 146 354-146 146-354-146-354-354-146-353 146-147 354z m195-47l92-10q8-29 22-52l-59-73 68-68 73 59q23-14 52-22l10-92 94 0 10 92q29 8 52 22l73-59 68 68-59 73q14 23 22 52l92 10 0 94-92 10q-8 29-22 52l59 73-68 68-73-59q-23 14-52 22l-10 92-94 0-10-92q-29-8-52-22l-73 59-68-68 59-73q-14-23-22-52l-92-10 0-94z m217 47q0 37 26 63t62 25 63-25 25-63-25-62-63-26-62 26-26 62z" horiz-adv-x="1000" />
+<glyph glyph-name="cogs" unicode="" d="m0 245l0 97 94 8q8 30 23 55l-60 74 68 69 74-61q26 16 55 23l8 94 97 0 10-94q29-7 55-23l74 61 68-69-60-74q16-25 23-55l94-8 0-97-94-10q-7-29-23-55l60-72-68-70-74 60q-26-15-55-23l-10-94-97 0-8 94q-29 8-55 23l-74-60-68 70 60 72q-15 26-23 55z m221 49q0-37 26-64t64-26 63 26 26 64-26 63-63 26-64-26-26-63z m318 238l8 72 70-2q8 22 20 39l-37 57 54 45 49-49q20 10 41 14l14 66 72-8-2-68q22-8 39-22l57 39 45-54-49-49q10-20 12-43l68-14-8-70-68 0q-8-20-22-37l39-59-56-45-47 49q-22-8-43-12l-14-66-70 6 0 70q-20 8-37 20l-59-37-45 54 49 49q-8 20-12 41z m31-446l6 51 49 0q6 16 14 28l-26 43 37 33 36-37q13 7 29 9l10 49 48-6 0-48q16-6 28-16l41 27 31-41-35-35q6-14 10-29l47-12-6-51-49 0q-4-15-14-27l28-43-40-33-35 37q-13-8-29-10l-10-49-49 6 0 51q-13 4-27 14l-41-28-31 41 35 35q-6 14-8 30z m118 14q-4-21 8-36t32-18 34 10 17 33-10 36-31 18l-6 0q-17 0-31-13t-13-30z m17 451q-4-27 14-49t45-24 48 15 23 45-14 47-44 25l-7 0q-26 0-44-17t-21-42z" horiz-adv-x="1000" />
+<glyph glyph-name="calendar-1" unicode="" d="m0-150l0 649 893 0 0-649-893 0z m0 705l0 221 109 0 0-141 200 0 0 141 275 0 0-141 199 0 0 141 110 0 0-221-893 0z m168 139l0 156 82 0 0-156-82 0z m59-619q0-112 123-112 47 0 84 32 39 31 39 80 0 68-78 90 48 15 64 48 12 28-2 73-27 62-107 62-51 0-86-26t-37-77l72 0q0 45 49 46 43 0 45-52 0-49-84-47l0-57q48 0 68-8 23-11 23-46 0-57-54-61-43 0-47 55l-72 0z m281 146q49 14 88 47l0-297 70 0 0 371-64 0q-38-37-94-58l0-63z m135 473l0 156 82 0 0-156-82 0z" horiz-adv-x="893" />
+<glyph glyph-name="doc-new" unicode="" d="m0-150l0 818 188 182 519 0 0-348-86 0 0 260-369 0 0-156-166 0 0-668 418 0 0-88-504 0z m373 207l0 162 209 0 0 207 160 0 0-207 207 0 0-162-207 0 0-207-160 0 0 207-209 0z" horiz-adv-x="949" />
+</font>
+</defs>
+</svg>
\ No newline at end of file
diff --git a/ui/new-ui-samples/fonts/fontello.ttf b/ui/new-ui-samples/fonts/fontello.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..c1167906ee073765a9d01aead457c4b25c530735
GIT binary patch
literal 42532
zcmdqKe|%KcnLj?~-kE#v+?mYW`E_TQOoqv1G800WB$LTZOhODHh8RMO0ck)Qkp@IS
zq>9KYP%GA=r9fHBT1s7MsrBWrDrog%t?gQLsioF+TkLM#uC?86XkF@dt!pW{eBRHw
zGsy&@+RyjDuaZ0Wo_p@O&w0*sp7Z=V&$Td%#p1HuW)UsRFI!lj>1glsqU3G-E&jxH
zS8v$+@i&Go7S?UC2(_Qsv@wQq{I|aj2X)nkYp&a|XU`H`w^%HW4cA<K;|7##xK7|#
zxn|wpta|wQy~ivT5#^r=tzLQcsI6c6y2Y|%2kz%qqd>XMHXYaB!*ycybsIMy{!g4)
zcKjO8^sc-96IUnSwmxF9?8N)n1J_->c>}x4xyfSr{7+CRw*KntRv!OKID+eU0pE`{
zTz})n<%tzPw^;TZwOH&U8*W&+;osJZpRriJ{vhh#YGGm@+heg=6yX-(Ih5=)f7zRs
zMkb&Ii%mr7dHx$*b;+oubIfwGS{ypN#<EmgWqAnI2zTax^c?*~%rch172S<ktW3dg
zhb3mQTA~)qSZJ(rY{pn-?2@s|#ukp<GPZN<zOjR2hsM4!_RX=U#-17b>Da%Gy*c*V
zvHuzS(@Ei^dNOcw+R2KOl_#suo<%#BG0RwNEHPF;mK&QtHZ=CJu`Oe}#_k{c8lHb>
z?C{vrW5>sSKKAcpzaD#g?7gu+pR}EH^XI3ZOwjWo7Caq%KlnevcY?nQo(%pb_#eSv
z2Y(fOEBI#c7r{4zKMx)Yen0p^@Vmk1gU<!O9sEDRr-Fxr-wZw$e59nW1jhfve@yy+
zc<BFskATk3J|X%<r)9dO#-coxjJpJ3*34?ZR8<*IHfK9*!Aw-hbO=qEs7>@s@ni>!
zGSNFU*9grWvO2xdWNW1@S=Zm!*ASQEEj1CpDm}UF@!PDMpV`zkcVJ*{w52Q85)TWZ
zXbAuGWVW@Vot+rohC0F)i+FY%@4rfPSlpJprQ4!DJ*RD^&moF{p*fqJ$>LH4^XqLa
zlk;WMtST-`)0y6s$#<}f9`H-Div<Jb{cP@H)*%M{E*4J<xE*EeT~%4DsQj?IV_D;l
zdG@kCt7NxDt6OUI@~U>mZ-u-OHR^Z1e#1*+$JR@?JooOi+lGpdsq9mYi_$l{)Vx(r
zmPfsTuv6<y`q8L2?$D%gq-N-*qZ>CK{Vg3p9>UqPXV-`a#WIUxsRTZ!IV2JIWPn|Y
zvJS?8!g?lE5s22P5cJDIUD$rl@qN}^KiSFRb*=vIj@~-BcXg-GzHZl{of}%jOTHUm
zw_meY*!S|i(oSQ4MQz}_mvpSz^VMDJTdiHI_AR(|^t%CK7M8Q$5f=cDilqYY4VK9?
zj=pTt#iBxv`DG@>Q!LG9vurNkl+lAsKV92eC)9K#g)98VDZR~ad@>NNtvFfH8(_Qr
z!f>=!NOmTq2IF6%0pnBvg@N9Rv5H!T%TMB!^iCXF*>SwngLjtMtrmJ`MkhMS<|>OP
z>(iZ`%Q`#R&U9zjQv4q8T-rqi{Aj}dgm@)jPgv%mor`NUE8)x^aAClcDH*L1*dPL3
za)bPuGPykdr)wW*07R0+*e9#vl8pc9GT+>RT6!>_%jn|##IL_}`MvGEj)<<iPP=r$
zzMy6_-*<aT3fi0)XqR6zONTbhHw&+qoh<R2FI~Q$9tts=$o4(kaZ#^>Kdwg{3#x1S
zI@FdjCwm4@Qo#cATCx@@5^AiVg(pA@4sc(mC19CtDeF`lqCU-G6)e_SGlP}Q^gp^d
zn^h8pxR~C-@<i2DIM4)4(cOG=HWzI2WOGfx=ydd74xn!**t>?4y}Lw@8DAE*`(s`~
zkA!-h($<(hKBh<6R`j8BW+E0~HwSa>E8HPgHLFA3ed0t+Ut-+s_6wnK$f|k9WR;-}
z6gs7`x=zL#^jOGsg_hHIchK-o%+G|S5o43CDYs*6s<ZVhpTi*;ce4~7B>!|K(?QQ%
z%z|{t<x8fb@M(4BN>y!Aqxf}1)r`Y|Uq?ob;unQY>d#81-<vMFTj40y!s*oO&zDX*
zD`<a>I3^BR>{#vnmJs1Nr2D;PDkD4xJe6{#r_z)6u;!**P!FV7(9ZHfS-A6%@q%#w
zq4DifsxsBZuHR~WfoYvvJNJoWhsKw)iw}+e4O_cOh@~1I=QjlvH~C!qlek1UiZ^uv
zC+!ixNv|}=FqTBK7_xj54m8j59+O7%sU$cQ3ljNyvdL6cJe$k`g@r<0_@cx3Cr8wO
z+U;kcG=J2=>K#W%<{rjK;y-~Y%HirP%O#$aR6!_~%pGAPE{E}|>USU1T_^DDK_YP!
zJY{U2JEAHMyHqACc#Q49(^f&T7D`5Fe1W?^iED-LTT*6U>Rd97uU~hA9A$K+8H7hO
zEfC~IfLfA0ejUAt3MN}IyKFL+LYLV}!Gw422;f)LBCrMU1xXMj>TE=(`Qti`DTKbJ
z1+UFzx3ZDBY{wMHjm;+HtnU0hB|1HO_Ac=uvB^?y$zn_z5+NEB0M)^CS|Ng!nVfkg
z(*(oZ@?~?G=?uNYgz^xh@PmrMoRbY*X%_MdK5wX@Gs8ArG5%kRHXo?(3SCQ=>qA}j
zq5lod3H>3o=+erxkePm|C&a>9;e631wwXO!Ssz@(hASI{x+>$r^&vd_ztg7uAw)cZ
z<C}Pb8!K+T<zk}M_Uz26h~FWCR#{=<6E<nO6MrLMId*aVq4yuHix_WJ)Yew8C|LEB
zi$6}ensO0*ogSeB+kJvR$B#zK`O6{B@_vk!^y4ziRhH{5pR(+>1Uvno+rH(-wV$|h
zQUBbwrkRO|&tbKLsHiW6$pP}wJ-7xr6()<>x6=F6S7PQgnTP`E`h4{XH`LyR>T}%T
zesQg!Yu;WorXLPQ8IHsNCr;VQiHl&=I52Uc$EMt2t0o^Tsf7khZj>~>e;v4TEU*sE
zM47afeu8W1^~R4%?g$CoiRpAOj{milm@@G&XbloB=JvT`<mq%>xo~n^q>nf*d@%x^
z3pDtFaVgx-7iiX8yi6Kq7r?XdGM1{7d;o-CFgl(u!Sp%zfX0%V|KBh<1xe6~&c2K_
zx)U0abfnzQNbYbmA7o1xtH+8)LU7)fqGL6f#B^rU#e?o2HZW(v`RCJR0Viwtp=&w|
zZF9t&TUjW^PCDH$8YiuaLu2wCcgSAVs<7aTZfC$&V+4anjg9kM^PP4}EqGP6N9HnO
zzMi>RP|gQ^1qiCZjm`^!aLdELTXXH(56}4Le>Mn~pn85-;$N@&=})V^{=4h1XNL=5
zMJ@mo(F@70)_Sa?9!tj325EdT<}~Q#<4YFJo7-_wbIdObpclqxaXyO`faNoJDd2}x
z%Lg3l0xb(2j8^|l)EXpl7m^_6re8|44neok6i%jc&Dj*Bcr1pQ)I^o}OIzp9>SUK#
zYr86w)uOPSl#K2{W_4;YXc<x>-8<MbZH6XSwIpMji;cguXwxG6V|Q^~;>las+>Z48
zi<Zt3tE(%!Ypj>dE8HIuyX)#+)WfVSpbZ#Tb`1=4K`Uv=CiPGxEa+NT6`+^2bVY>S
zZPef*<M&Ip3AcP}vvkKl&rGv!an67iC<}#H;dWu&r1d6KSa0fLA7Q-#RzN@`9oI9+
z1hlr&@SbPA*|b0OzrnfCjQO%Nrva-@`U1<%CiZqEDhL07g(-Ng@nB^`LnRwtA553X
zZW`AK!hVJ1a~5}r7$Y&8#`;~NEIoSZ9m`vU_GLSE-8s_QI&vplSt5}M-)~ud$KE?e
z+O64DTlQ~R-C+EEsR&l0$0?9><Iv-#PjlNP0eT$KKpH*QQ_wA=41+%P#X{TA<{@G6
z#>IOU?i>^r?Re<U#nypc?8=h2vk`M#{y4Pr(9R)#FkYSVe#~Q-JPrx>;_cEAkCo43
zQ|C!$O}v}P7Z16Om{zA5zjeF&@q37^$Fbin=(=Xa+-|1RrKWwIU9aJnnl)u4Utz6N
zo{IQPJXRJYAxIVwl9E9TDOZ{yQV<&yK4~;?d567Poy~3;nQJtVG{j!*S}uG)TU~N<
z$;6!zwwzmT&i<XaORVO4RS>ugc->BpOHUSjO2c2?uUm6k(kca;o0^+E%n7kWHQqCJ
z81LTv64PIL$@uL{kKA+<`}lLrX}pW#_n7+J&ZELH=07GJ{imCLYJ7|L>j`lQ`sIh_
zr94$R%_ouU$4tRqo)ql$4ACpeAtVh_=h!y(F;%_D5pfuQ-URvmB2_)+h_K&`%pE^T
zy%d6TN4BC0zk@0c2h~01VDFEQb)lDYgb@937}f~e0fWPmCSK^bb6yDD-_-mwInFXf
zE{vu`5*M(lc!;714zLpspmD02iht~8-Sztlrb^5$%={%p;o*Emt&lEfD@nY`53>!Y
z$s9n3@3?ek`~h;Yo4Nh&OV+b!Z7bxZmO5s<wcZ>9tewJE@WQyI31iTZD)+lNJttFS
zdEg6!BxC)~v20R~gAGPm4x$Rgdz)XDtg%EYna$_wm^Fwc<BHqjdtcofzwL_oZ!+tf
z#{bbAJ)@egbvIz0_!q~3@xJk|#`^;f#{g4Uk|_fY)_TXB*14<q?p-~%b<Q0(?AXCB
zMb*(uoG!tuHgs#peZEic-~VY}(tq22;l6EtZvQ*`r05nEOAd3uE?^Fj9S3SZv0x}7
z02=3UiIfsjLbAAmI8RC&Zb9<p(Br1)9-cG5#TdAF%j2DF$QIWm<FUGpL#&oPQI$@l
zS;BbE<<oT6e@F?p?LVqIXEnyzCHVz&hV$%j=Qp=pY&>Su;x@K$=AxTs8kf-{Rjk{k
z$KAh{Q2rnB#&jo|$YE~58p(C!A&h?zR5;smg=K|hz2z25pwoNvC)cgIYWVU?FPaex
z2i%IF%$k`ehRG+i?uS^93z81OTTD^W6zpt8Nj{Y~HBr)5p*ibJp43&7=x>2D(5gfN
zjcFMnG13&cVL&K(-5+<`Tu$3=$>mt0Y6??b&TXm!-G(287aE4rpG`mObl!QdJMA8F
zyT7FR9naMp-}ubEU?@YHhHK}y>+6T=@2r2;$*xnCBlIW^(9}5b{t8X2wq0od^Sf=T
zX4_>`T@}Sj>P@JPYJ+prm)AFZ+u>Kg<aS@K)w%b7#_4#jfeoo&((u+g?Mrt$o!@Tw
zOnN9?|7~X%Jp@o$O%YCY*>0P|B~jaCAwK)8c&~UV?7|mWmV(9yI%ZUctYmxRs=W-^
zY&zJtjM)aGRYAE2xdU|tm0!=~Q)vN105c)#!q8MuqO$oEC#fQeVd&zEpIGPKsHHVs
zbTT2PD=wE+_h~n}XK6!jW3&546IUDEX-`m8t<j*}<r0Hl_AbZnjp@e5hR@b-G_iO?
zec|fiAe!{*q9(ZkuvN9{p0s--p@;pwuH9(jWuqG{x?FaM-Bwi$dW>BhlQ-6XwxO{R
zP2Ncu+nC;AUU9zkzWBGoi{Q2y@TID-i}NM0!BkaqRe<=A#}3^d7AMRwJ4|{+P`Nx`
zWq=P-Fe(_}5xvmLcavVu=HUM=ahoj2He;Ky4UgKYtb&bw!Q0^5!A+63*aTK%{L!tm
z6DRx{c#~qh&k{3iOk`cg^Qb$+rdip5+kL}zL_NP+WpfqQC$<VaG|G8sZIw>CFITsU
zVtEr8l1!@vsM-T<NCcUawl$#*t@LZguej-<s*3**%vEl^S9k3uC4INsKRS=!pyLVM
zWnLKH)rFhZ^76H)hB-ZH(<OM?Kvyl9+IU!*u<2s4#B?hdc7e(X6R&uV$=6mQp9pQL
zoGVPY=4R^sX<3~&Y2ckAt_&@K%^^yaaB_qnRdxpF=INVLWCwG7KM1*ZhUH@z>&si6
ze5`?>iS--^lfl%vb<wncnDzv+L+U=6xGXn=$P$@Jz)RC&D%&BqG3X6g5s1Tz-l7Pw
z3kDtc%;`33$Ao;KYA$>5juWa|mh~l1b#_e?%4ECEDaArw$iLo1O=thAwk5hOyBsGR
ztaeX9k{Dr5$t}8l!h}3=v%@C4>?%`FI7EAB?WGI8T_(Z4VQ<a#O)pQk)HWnyx^r#F
zE}|W{s;KX#43OY<lg1f-E(4gxJq%3TW%bMcAl8d~E|rAYy(z%2&J_rR#-k3$QBPgh
z`kvNsNc^~@Sj947T3dKzfS_hgrINwhM<EQn=<x-Y>hWB*Cs(y{tHf-s7w1-lmjE<&
z*Hj?^GzIw%a4v<Pq8e-4G%nwn=H)zb8qhH<yum!VEJ(dh#Z$6QJV*FO-|E%(tYPd2
zO+E8hub$u2^aHkf-zs6vrSouxQWjjZcg>nhW#?!EP8vp?a^GrU-JW#}r!Ewh;wXug
zRe1^)4UOg(On7lQmCL5`z)lB)r9J2m%6vs7bOj+1=x|${BRL5#_cW&CpJnW`@pPtJ
z=w05+*qv4B#vT+`-N|}Z^z1H0)zghVta7ehvCpkURiQg$wa<;AQf#i>if7obr=p6}
zvb6!8l}gK8z?x6`O8hw>OV;Fp^MMpJQx$=!xsuMRCm1(aS92vv1E!=$2Il}V4B=%}
z89!-*917DOO?c%9bl$^u-L;m@vD=nd*-9#L98vt*TH|>tQ57L%<qv>0I22V7t&mhN
z)63NpPUi_V0yZM8lYZs0pC~IkVUOr1<h3>!Z3WRLD57x~%!K!cHGsE~y-azk9Hyiq
zZ!0h_GX3}<A9B->m@JrfCYhE8GCgrHa8tkgh)dtUl{2fYDDev&#zOjavqy`(>yMzb
z{{b&>1A`>@HP%%4o#*<a@XlPymrW5Llchk=ujf%BG98poVlrk5EWN-PnASR3<p-wP
zWce0Zw%MKXH40?ZNBjXb<~#F%H*SXt{ir>jj4xb6ED8tae4R1LDoIx5tW9B(pq)8Y
zRps$AzgATxdOd!~dnTVH`Q3>XJPlZDE2n9ag>){g#zo%gD=<~qJ;`cY3b)VnoUunY
zzH~!T-TDVrhEIe!<+bn(sFF>&Rk2B`Y6r-oqu}U*w`;t264ZZWOJ&h!6J_H8Nr7%e
zb5&>uTna4Y%2T>aA{vC03|SL1BJY<mTtJdY0w<*RM@>C_m-mPEL^3HK_dfXcgY3Ud
zm9K4f${6(Ox|cnkn!V{k@|=@h>j}|Ypow~{Fmo-}ke%YH{?7JX<IE}$iAZ(|%sdk7
ziWY2A(Eif34?Y6O@G!f=PuG-6rmC<&V-esDar*|QPGP+SBgBY9ro@3oRV6{=hQsd3
z(_N};mda|c;ZziXy(%b*ao6c`tL+KN%6_LRxdPkf%h@9-dmSv1bxP_{;QwjkyVN9`
zL&po88>50}{P#}3s``bMb8L*+7UGTLzfX5}r3D{{<l}(|i~2vV0&QI0TLXP>$l|kv
zEmfeG%JP8UEfc-a95*$*R6)ZF!plS=jgLB=YOeH%O`0AJj(fSmj=ihr+<mXv<ZntZ
zjiJO?C~VWRq490}uDAt1x|V!RlfNmSd0c3Z22Y-OfMBp;>`Y(Hbm&#pm|^V}cc-&C
zTVIo?s*D9?8xb!glmal|L=d#NYnPEo6%6E>+^mVoO~E|GFp|bRm7pT#DO`xA8JAlN
zjep``{Mwz<3C3jQyl;HN`0_Wtaoyu501%7nLh|)!a7@?&>*7)l`28^*I%LlMYfX>o
zPX}-Q2HX0L7al)(5>lh_<=uMD7!bCP(ZzoBh3K#ppG}~{g+zya-L2Vl(nK!N;YUC&
zoDpR1hp*d|Ic$^XB%n2&d;KAU0WxHFamu+FwDjfTS!pSF^M{TY`xWsnPQ^<m3A=>G
z`CK<~An~~#bTe*a@{qa}w1F>TPI1eDNmoK!ner>lf+v9J`blbfUdY0`rTkhh^8&l$
zNBCfHDw?1fqFZ`LjitrXOElBno~=tn{7y*4z%d*=9z7^deH;8##QiXLxrhl2lMm=G
zUW-kD?)@?)IR(7f^_YY}<x~VtqS!1KdgU_ehVc)jJuqH{i*}XC3edveC5kxxyDDms
z4yGPlN=r*&d0lV$8_R8^2XDP~)Aj3DeEiCRyh&5ggFgyQ0VgCAL2#`i0X3O|_(~>a
zEL+6B$P-F_^fXQ}wNOuz1Cp%6u;OAqDG2)j?#5@cR5m5z1iXM+uqCTVy7>?SWRG|&
zDq}+)yTX{5DDRKoy8McaBD+LMu;tQ<ja5uf`pXnW@;J+66|9TN(~bX*)>qWLZkHLv
z1o$`Qp8kbQvd@gTV;WoT>Z~nSgpWY8^IaZmd6~w9fbK1;+-sGXAi07qVJxGp{^I_g
z^x}xFIKx=1yHi&h|6Mj8)~){zW~_ce7s;#YRE*C@-8Q9qc0<Q>*`;yQqUmFv<eit3
z-!7Ff$AkQKA7zdQntV+@puD*W^c}=Gw6Z{xjF^V1RGPuKC7S18yG_j>g5b8)vf*AU
zkPFAK(7WWy)Hg6Dh0Dt?z8oD9;3F3EnU8?6ciW8J%<XX5Z7$}w8vo5c+1B<)hs)`N
zKbAEZua+rRr_<&5W1H!}ETvP9huPJC6&~^d^gG`n$W8vJFr5Jf%~dIQ%Lx}QNNH6m
zjsRQ+<qyHagI}p_6*0naYg>i(nO{q;U6(vC<01h=%|uaZtNm(n&2=A+f$eQ=ORbQ|
z1j%X@m$tRtdtX}{q*syIBzXy47S^rF@y}bjhzGT{WD0#J9`q4tfcL$b;+F&niE#He
zdGb}b#$1GY`60bM_;j{^X0W=B)mD|ydL{dXuDKPS>2dEz>fguh&fY7#G_}om`M^Ha
zH!I_T3%9r)Pxh-8D>C|3KeP6)>sNK4vN<2j+e~kd|HFDBY#)Dd?Y!5Gw`O&8EbZv{
z@E)8#ymsxp6Z5F@(hk7QWlZRUDrC&nkTEZhO~{ytqRHgQ_yJ3ltOub5LN@^S0`D?|
zgPI}Q!LElR?6Y8mpf=1t2oX?<@`XZD*@-!FZGx6E`2K>_7?cUph$fsCETYJ(Rfn%e
zvbhJ#WO>1~uwAxlTNI~O9=uG_q#oUBQ)*PVvI@p#)wWu31*^@v%7ReXu85v3WDbbv
zgEqI^>$h6lT=rEEy$ddn&2(3b2Ff#%O9~7!TYH((AJJ6#8oRUICUr(_F3Fj3N6Ot0
z*?HY*;n*zMDf<V_s%}N$Rc&)4sJehxG-a0?;On~-`18Vtb*trR%m0w<^5zR)zw;AK
z(*l}9;=aD3&~BqhGUz$ba;OM?oE!yGl;D__mJi|>_KzZpNs#$a6hk1TVIv&F5Q`z>
z6N9%MPeHlDu%Ste5?aIf-~vrT2oL6iXxyAf7$?LQOg@Wsi=MsUqZr!KXW6?2zu}|g
z4nU9`cMIV6XNqmH<n&FqTFbf|lC3kKOR}|WwWOB$f?d`!Y0zp*C}r{$HU$-B2UT=-
ztCG~|3rVs_6<L{2@3NKIF1Lm}N|}V3Y~?~pjR@V$7N~GI9dexre`AFzFI*_A6=GIn
z)>_5mi3F{}Tp?mdaiMmt!fRVUP}!+ECu<j}=vNhp^qUSRh_D2Qw%XbsT?1fTzF>K^
z<g|LatQm*YUS6h1SAdwT*7<ImO{sH+bci$ZxiwX#J<Mx58qJ!~Kv}uZDJaH|2keU5
zbul7HYs#w`b7WbKAmG}q*az%(t&HwO?O8-K)dX3JZk1_vp$YfQr&4swndNs}ZaW@Q
zCLcnh6Avj|m)RuV&vi^c*L|l?^MYid%j9{?Bj~f*4Cl$_K}*#p7a*GkXoaS6fW{o!
z=LtXb0B>AlYmDuIR=o{@j$8Ca>|SU2?U#}FCDt>|ZvWakp>}?yTdhE7l{e=1pEkDp
z{j>dTI@^+8^ly6g{1LYI)jfh=lf3fC)^=gqEWZj10_g__#f5-YhJV8iy(@^hHXXWG
z6QW()5dCwR<wi?YXKeYx`Q07utu64p)x=}bNSMOcG?!CVB*Y535i5x0k^WL8zYr4m
zb@7+1r!ay*iZjg-#d3NMF@*dc1=EtLf@0E&#!WI(@&K9&JYk*%DZ+5x!GkXzKKx?w
z$i95!$ce*;*&_!Jo;Y&ks8fO<3-co#zs!qH96abX<yjJHU$2XtIYn-_-fVTEI(s6Q
zsDia~UPbL?2M-=h96o$Fad7<T!P9g|9A*s%d1D8`>{KI(dj}7$Eh(xSZ>FY%A6C@n
z5^z9N=L$cySPM+q%*3+~xSdC`SvEC2=#~p{mYz!L|D??sv~kY$N5Y5bJ#*^yNj-=?
z@=<y#w68r#a{koAU+U1L{oD^56xnrVR!<LUWP>V(I1wx5!^U-D3LPbvJ}Zs5q~K@n
z_1VfbxUr$TA1J!lZ!Ow-5a}$$VMgaQjsnW#3-4Ye4DR~sE;!=vURYu!7ZDrsIBW+R
zBEP)cb`T3XRV(+0!i@-xpaYJKWK|q2+F$K=32Bkyn}s(Tj4S(>c5E2TjK9XdK7Scp
z{7iVG`-b};`Raxqp=;xPk0037$(AqeGnQpCgEw5uzMdJ}GkE2d!}s5S+nWwNxqowq
z)VGe?4hROCPi1(2o#hhXWp;gSiu)A^FDcUkK=HENVo{1ABIn>=jKPMXZYvS96M?ft
z)>|>oIKf5lM09p-`+1|Y?=hbO<tpY=TWP$vs?$C+YMX3$#Xh;A+cu(4Gs<-{{+;)U
z%paJOWE=QU_>Jc|<gDwX!pyt);b2bEBY9{E#&k_I<RU-egu8E&8o@;1T)IH0$0w!3
zl2bmS*qv*+=LVL>qZf|)=$EC#HXAI=M4HM`m9<_l{^R^G`Xqu820V}lS^juzZqXxo
zAs9CxD7*+9z;)S<DF1k27_W5{fODI$vhZI8W4v4=znBRipd>Au0|-l3fo4BAwT113
z4Yv&B9I?4oc2sr_UtoH(dtiRXKigrOhCdjh)!7%G<HfxgAz0=z80Y#Kh)bOuXA^%!
zkDT|A+klAjd;oI5UgY%nqUr*qOD+W9h*E%y4CN-I%7q{->~Rv>*?(b|m~=!n<9r}7
za=h_r0+ah`c$ZEiSf9NM+x`z+ILAK(|6{FSwC_l0V?QvTFT_ZsDkohcLYv=hI1wN3
zJdNm;)9S<IABZ|mt7x|Hes&G~D`j}UL!>w(ETxmf##Z`cc3wFW5{3;Y{2m2x%soqN
z4q{3OcE=>_WTEbW_grUl2zJ^~a2g5#0ZyGTVKIGR|0#Y;n1Og5^qpXb-<gMZkR*ec
zcGIULK5VQ2=*9|%V;Ms2Sq-akM4ZbUY`5_Vhl70uWy>56<7X&F1-?h@?DvFw#kss)
zw@mE{W;8T~j+icO-7kE8;t>b6&F;fXmN|rnjGq~=<MiXI%Kjd|D93r!g!g;G#$vlg
zc!|RE_5ztxREn?$%@KeO_`ZKu0Qx?aU29y8mN1rV2KB&!7f?kLkHABZ2`?W*(&q>n
zym3MXIb0v6?gP4?6<WWK+PcrNb{Qa@0hj^32`+E8Fg_!~<z@_7F&30dizb>2s9+<~
z&wnmSq)!=VB#Bw!l#fV4T(-UOb7*N1n~hoViv!M!G}B*fcQQ83oa@j+`S4-*`_Ud6
zjYx&|;p>NSqgAG2TLex1{0;Lqt_$r7!|W%MF>ggL9?(&O31OJS`o_<}1IjtP9Jueu
z60WEx<ppSYvnC$U?r(Uz&PjNQ8VJ<suo%+hN4t1Jvl0@h2|!1PU{9L>b0kdk1=DU~
zF9}5mDo;(H=5vrQkNcV@c9WQ4Ciw~X7475t^F<EF!w(~d4CFQLaE#M9j+6*7y)76>
zREQwTjNdgd!od>p<$Uih@pDhzzcTgRd+3FDZxIA~_YX?nP0*lD5d<ef;V$%UlIN7C
zuy%g%-Gyy4r4pQQx7i!#xEX2p2s-$$C2u}~kUF|&5Ok{g$Rq0B(k_?ux%gf)zHb86
z6Twh=1|r+!wz-$k9YXcPkC-iwJEH6>B`@BJg2Edq1Q0O%uJpyQ&0w&zoZe@mzwt0^
z^cZK->^Zk8auh^6>%sGuVuqbFyNFIt@Ht>kIglIX*&A=zhGaS^nQ)pFvrs;7DYqNp
z5TAf874{Hp=0=ut=OcFK6<Er}h=u&iv-E@waB-M^{&RD#f-PKN>MG}-&?er7g->AK
z5#9>0oqtX@bG-5R@DHEq=biqWIEqT3r5^m47Xqyu)x^P2NW;m;bXeF}fUPj5#eIcS
z`9gDHx8c;%3vi3`vycshB4Sk&;|zcR95KSFh2}c*W07J=qgWSx=i^u8(}Xw`pnX1I
zT;leC@kPBAhd^Kkeh<|~p_m>Dv;}Ih*)r-k?tv9x9n||7fxsblm${MV=0gG81|BFD
zWe4_u{THID@jeI101(}(DnGbVV2~iWi%Sv}hWU6~z_`cnXX{{Ts5RS8u#tJu+C%<!
z|IES-ww7MhsvoK;zN;DUqP~SE`)1NA)B{olgO!uyDK`6g-)eRJYsSqLi9`jv>uWmR
z)~d6$e%4C8^ZRQ9?SZeM*U?&bDA0~e-~u59yl+p4+lBu$-^cq_pfvL1L9ya7>m?)y
zT-E|{hiax5x`DRvqIMhtEF0n7Bsf?y!tUZIY@=H=07O?4YeEIz3z4eiYXU41Nx5=@
zQB8y%BJvPEyeUlbWr%D4xyIq3t%YEQ#HyQAbq$;5(sz~cEY{i!L2eCrHSSU+)TKw(
z_?xEit_gUed=A#c!<;{qggnBTNE^!Xl@r??rvmh&2^fqq1o9z_FSN#d*SNZ~6rvIL
zBoJ;6oeBH6>MjMT1V=@fyywD1s|TE&um-@gbDrIoKXRPGPRlbY_FYERYt7KTYjK)!
zOo8Ysw|d6Gt7cU7T4RjD{#fW*?9+6(rhs%Fn8LJ{7ehnM?TrYOD_LS7IZPS2AMxFv
z6Tn2Ac;^|wbY?0{AJ<d@hJ|?4jxk2is4+YGaz@pr0L9K4g;=%*%#|6Hg?UMeAKx8}
z-3KC>zDU%@o<A}sr?C%$)GP$?iA%5zIOy{%7~0UfroX{jvuH&}*QOa(kJN7yr1r<I
z`q=#&daa$C@4a&9-r2p{EaCgux;RT)upr&PX5*UvbZaw0*cMn_Qr{r!-gw_*_igOP
zmSL~2IHxF1rx9?~nRD1BkdcCONFCll*iXc?0NY(q=b9=hS<?|hMB8b^C9sz)UjA6S
z73nHG))|}TwyqvTSbP7v>ql!AAc~GQjMjO2+xHKB?7od%Yy`*dp-Ux~b%BjZ&8-Ch
zYpNG$v#{4P<n#7k)BzBQr8Cg`pM);>QNn;tmk4J7pkN)ukhLMQg79Ywd@ZUD-PpL<
zX_uGS>_^rHeXb*F+;P|~2mu4}mH}m*#8%GmyzX?q?kTqagwTckrPRK|g7$r6%b<X=
zg4#wt7Q6#2CFf;#L1kPE-Q%z$t{y=gV{q*eMOq@O!uRpoXpN5o#XP#7t(4ZuJk}Jv
z`1{!7)(NXr-ttN4tk(_B2%2&FlAJ;mCZIR1Wf{|0!IfAEE+1PemycTEcSH;l)&vh{
zbNsGLfbYO1U<a&F@_2`khsC(VHt_`87@z4^qT#e|8hkz{yu#JqhG;aLDoclI!iloV
znNBSlt_$tvN-)2@ySy$Ic6z62p@ervFxQndpDwRW_%%;B;!Gscxy~B%0ih?ma)y=+
zI|Xi$7=KYg6HaNZfFL|o)%B!5J31{|>-P(=q(F~mZx<?P@x-+F?CMN+pdPklGtYrH
zmY7yGyCdA$PzQ&)`2dX(?VbI;cv5(RTcDJuW>t9j9&fB^awQ!mwc855oE0&J)ra<`
zH&Fl%UslHuA!vckx@ehz-P_4{r^o3`RYVKN!*?jQjQ(IV;bsYCE!5Nk=;)rJ7NIl!
zeCFKgflSoZTxZH_f5rSEU!ZCIDKQEDm6OUiFvXhsk>^++-*5tR_=_-M0oN3BZ^qkF
z%w8SY`zoh-?A*puoDgKj@DT^4m4>!jW6AqK6zQkbvcryq<4BobXDjt9C^VB}SO_8r
ztu%m?{fp0YTGLK@QpQRl#4R%8wCUd|M5l(1UH~?Q!9G>ZodpFh5d3i1bmPmqzwC&b
zR1cTUxiD<M@~6C~-R{%gLw^~v^W!a~nRp{|<UxLz#e_Es_dzt9PT@Wuz}r=BU?Sx?
z?FJtkKS_4Q4`OV@>p0@{>1>tma~^RRZwVo)H$H}=5Sxm$$?-JzbE{ADm?Uni2NNZ~
zGw1POcON>WFg!U_LWk;r>~dkO2_9oVWErqijKAbJG9Q9Gl2;!RJ)#djDCvk?u)}bS
zaWjc^yu8foEffBuj4d!mWz{X_TnK_0l_z3MDL;z~o~s(rYc)CAOq-x=gFa`rW4n+g
z@QYsKRmE%fCOoXcJMV%<z<_$#W_9@4Du2LnSPfjz0BFjKX3T3C{2=6&c)VFjyeqb^
zrK*!e0T6`pQ({}$pcmkH5`af34Q4g6YOQ+M5%3%P{SGTkD+M`tDf;cEb*pISGowIF
zdprpYXMWG664B$<h5tNrisU8HOOeE|GoJmEmExAm@w|(k$6hR%I3`pPihCuogAQ<1
zW7A6gmZjqduepZ}cCrUI4eyGla&3!(y(2$fvW4wk-FHjWZQu0Z=s?w?w%RJsM!=_1
z`#iTuF^|CH{`<eTOzYGS{O#wq-%5M%7tW_W_&g?71rP<l7fG-rEn;a*l3%QNZ9B&=
zMuPZXx__bi#iTvw-Y>qdc)#d(LqZI5Um;>?k8nn2?tChqGPuMGC93hOk~*a~C=j=}
z(aCsg@`2Lw$r`=6#JHC`6NOXN*~yGQzkm_ijN1M&Rw2Ibs_dzW(;t7-+rOB2<k|6q
z*a2ECTt(YGiaHO)+|=+r7n!=U;+h75l;|S|7d53e!j?kHy#$Xo;={068m2HZHYW*N
zq*ii2+WJ0m>E)qz&8viR?RA5zHjge!itV|OQq>;3e5vte3Sg*huQ8V_h<zVhb+`j{
zgYBLfo99B*O+!9x?cP-DZEaAzv!7(Wlw=6`BUa(a<81!K{p@MJpP-}hgL`8tGXM-c
znD)RB@8#)1z<V*)STQKJ$v0s}AvvLFrk>aj!(Oe5+C{lsk_EBMS+X(KmO$Ku)$wWL
zqOyeR9hYmiE8+TEb}cSC%GmrTCN{yitUj1Hm^iTu=JSfJN)oKhX0*Co@9_F%^k5lU
zD9r6q%*|%Z&6Ja5Ug`jC_$P4(5@WtumJk+1X@!7!O3*T$oaAIfsDSa4f?E;#BDRHH
zt}1uyv@h0H%&Vwl_k>#kpsW0zd%~JK;ch9vhuamt7;e$3+}gBznBr;;&&D%XJj_iB
z4_|@O*?4I2;`7|-n1&me>OA)B3G2;(m*NP@EFRck5ToVux?K*t&B`nkd*-R~@V`K%
z2it*hRZS%;ce9ndgqQz(*F52eINi-gjJMF&==f2geSB-Lxb(~^q!C)k9z8L>RoISq
zk-YVNakrSZ%z+<WdFqm`jLPj}aIaFXD(>n)7-tn)2eFd<3FyK&C*gFZJ-JPYuHw=l
zw0EAaiQHJMlGE#M-L<uPqY7`zdc~HEw@#Z^(Nc>!yUL-J>B=W#*q9-N%C=tZfCJ=e
z_WE+<Ua~4zqty7L@nzb?(~4zpdDl&FkvP`N){qy@5qMZaenr{n^hF(?x_GHS>Su?p
zMmjI`>Z|c0_3A@9%VGx*;gOyF^Vvtm5%{p@V%#$U8h6YyvO>yG2q-*^)DT&s_(M7t
z20z8gAeo0k#&t(N{`nkj^aA0_qGf@nOusfNd9>i_a$8WgdK~ln-JzhZe05Os$Q9S>
zWu67RPK9jNNo)P{wX}I(iqd^Hf&!`hnxN*Dqt^yyR)!~Ra`4)y?A3zTluK!C{$!1c
z)xk0^Dma6yD<<yqcyu%0hZ%2D4hu#b#dPHxYNiJ@GnRz%eIV;p3V+pz3*iKhRf+UX
z$eBDx3gk|HP5Y~h`DcnwXt>T+8T(IwdXBP{ufL8Mde@od<{EfE|GD5*XYYx5ug@DF
z+r_KxBFhNl+j9JF>@0-yL*qYuuOW>U_tU`+#r=FFvzVdr6I++g_0z%8#~o+z^+C`k
zndhhQ69y-JZACk3VPDfZe!~B8!}W$oK|iKl>MT9a-%t6}rg_YLM+IA0p$+Uh2E!`>
zX{zgSsw1)V4aZ7hmAOtZ1|6C5s8MV~Gcq&|T6~>af7k4mZ2ipSbX{{`+b9oiLhzk{
zWO&HbhnbuU=5t6b$CEW7C=W|V68qB3TeRWEtTS<fpf~_bA#@!AEDI+J8Q`u%7C37<
z*YLZGL@gW<TPkykqi(pb%pPWov2+M^EotN4LY?;tzu&w}^`H5JU%hPbj^~a&cgNt5
zqqV#$(+el>{L~eeoZ3&ty2_dTq4dnk&gx>7PZv%uEByZA3tK#%TlcPdX2-z5j%R4D
zDv)m|CmeDD04KCt#l*@yiihu+)85jA(2saU$WL*Kh=+%8l@`Eof?!azRD!y&PSO@E
zIw_R65a*erSg=Au3iB48!Z^Ybgogsi#UW%m8~(f4>xXl_IU&=Z5qc82xRA`$80pp_
zWXTx77NO4J4xwvNH=7krM}>H8d{a0X5+d>FXk`OScc;^zFLw7*tp0u3tntfmB9To9
zHSCQU)I__`(q+cK8taknr!E%zwKpP!YIG@Hh-tbKGJ*?M<~r<)M@&=mtYoDQ$(7>G
zVaGy>8i4{=qs(Vs!Gpsu^XJ^8jB(t*Ls6~({Lwpp({;nKU%$Lw?E1}TE_A-}=qACe
zwDBnWdPDtH$*!bO+fj2>eS@(Gm#MB~vMYtF6I1R9+fh2tyh%S8O9^(lHR5m47tJya
z9x#eA=6tE8xqfDKe0tdLQ7p7iCKDB10#+4dag5V;act*AbS~}h^fT-;hq58-=o=yq
z1id;4F&|qz*}I^ce(R#!zIXI{w=J^v?|5d_nyc2ON7C!AG9v3VZCw+4v{<mFnAL@S
zVqH_yI!zoZ&~D*p9?I~*_}%97KQX>z7Q9}_XL-}QtA0Xlqfazv*I2)cK9$Dyb<v#7
zM@wV(FlTL$CQ|v7%nHA$;x&Ygf(?uukXU+(VaQ;{rmh`jd=I(IR-QPKc<ZfSigWP$
z%U`|~!q0o}y(eDb_nn5waat5a{Fa^e`B}*Shmh}dS+wl5KlBHGh|OO6__B+aUwyUl
z)xyc#WnWx&@wIE#7@JP|<MyqJvXwD9+T;F{frPU9-}Sh<R+84*6M=tUZI1`JU4Y`Q
zO!;FvbilBS!V+N@uvL3(sadRy#8R#eR;L+H5mJrOvq4;am#s9uoM3kvw-~pIi~U|?
z9!$E8n?3$;0J(ERW$dm%xb6Gw6SrUd`CYr1u?P^Iu-i|lNL%<wFrn<W*>)=l;M+D~
zmpA#rOzZ-J4Afkonr`v{l7WizI#|ehnV&3xZI#Tw9pV%dbTRWxPa%QOr4O8XKzQi4
z5A`7Z&8{8GFhP;@=Jpl2OQ)Fa3mX%Q#B>FACBFUOgPSOQPDzrS1ygL(#TZ2shon_v
zK9@P|3dwIYpCPX?>_43N-D+%S_!AErHuh)yRT}p+vpl;G84BBsea59d?33)b#wF|~
zQ)YWs>=gy@N<Y>rELEmXtZPy%spS}GFC_<Mgh=Pvp~v2P&p7nnd(66j@&0><_wOIR
zcmHBhFw2&`XDr*l_}+VQhmOEI)=|8mTeuCetI`pT+lMoL@^@il5E2+tAW)`)3CU>m
zwb9q;!1kEGbn!vhd}UK%qb)F$P9e|~XqtfStz*Ylz5Md35~ynF`sGP@kT+QdJObI1
zS;mhwE!#vejK3d^0)SC2#};wo1Wp`gZc?lV1)Nj{Dkt8@9x@d6e#z_htfFp<XV0A7
zBkmXLfL9%{y6V&Ua_o^Idl=L>FL<<I0q1SbaSd69q0Wc=FNlGJB#AvO2v0Y|(P@(7
z-$W^<HhbxLhNLR*8Fv_`B<6fBngsMh1jopO;Wa~@HQm<rnl|9nG{vc_YQO<w{yM9q
zN77=gfLt;BF_mp$-tlNM5=|!XC$Qdl-9Uf1cD2<Sj)eUFkXLsqZdt)5EPpGu@MwO`
z8>ivqom+;S)3nDKd4K$Nu76^u1cl{r7by-tFj#bk@_SO3{6Qw_Jw3*~#=Si~osW04
zwsbzO)+Upk+3e~y4X{`z>sUs(z4Mt)<6Eo`Kdr6VY^(7?&F#o=wQN~KGI4v-c#B>w
zoHc;lJ)kL)c95&qS4R03e2}nVvLi9Pz!hyd+LVgHB^y)F25U|<W)(u>K+>yduEXEb
zTD{*oEOz_j+L<@CxS!qTZSe|y$hQ%5Dbn&4s=8wNi0U`?XffEkH~7_K+yu*I!w19-
zqK;Tr>4=rnkgw9_tH!@d_RMD1X`CK0-Z9=8F;25iQ8ykxY8-m?RkrM?NzcV+eSqEV
zz@9YFL*eOiCI?e_%(fJ^E^R1nX7lFF`#SbK-jaKKR|k8k*dQA;9zV6^@D0|NU$)+G
z*c_X)uZS_>53mlmqy4tHnU9l5iLgSd77PIxD(ELDz=n)GLY;6%+BdYUpbqlNLTRPi
zq{8HMWG1Kq3Tj*SZ)mxv=boIVCE}T(d&1eiFnhbD<-WfDj*Kf(>&o=r7m0*ABN?s6
z6_00fdpEjV@kC9_hW#z~bbGTJHPSG&H{72I3#(f8x7^p8an(d!4ZQ~<eW9=#&QSGC
zPNFd;U))CV8F4xHdC7$1U>r~(^aDB*6fS7n(5rBXQ{>FRRt}bfKMWU9p-}qns_tIv
zV)oA9NL`OJJZL0qmdBz}9qSKe!^V?!AtyE{uz$_O+H*O>+hrZSvyZ()x3r<1y*=L>
z!GmFEPu+5QP>qE~YuP|J8^VKOMX=I?n>1I(@b=%i!rIABh0^pOt#zQyF<}!pDal>x
z(=~}{0kyEFUi7=fcv{SMh?w^fs)7Ezj^V&M1Kc-dTv+gyJ+xtQP0ivB4?R;nS+?x<
z+n>4p_GL<It+fkjkJBzi6E<b~20J3{Lw%V{-%xv`W3UgfY&*OS|4t}Q)m29uozloY
zL44@+*>8#eh`dftp5In|+Us$ZA(;Z!U)_}Ffw4@`2S%EQUM_w|_507<;Z@5V?0Kb5
z39nzjKBUDpuO_;@-tolf=wqzT_zAZw91xxpW9W5pX9CvLipaE3z>m;MvMczSD+4|X
zoS2x0xhB3&VZRr{-%nU*U2SV?t>LU`hmDC+65nZzu@L^UOP8{@TWiO=>5lMRZR?pg
zh3Ce*g~8!rWApH^8Mkk~zqm63Ya+edgCquA#+~}!Al~NzJk|IUh9}=z!wwnC@HZmH
zN?-RX-V+-hKDu-%a7g;#0WpTYrZDGu97VO6KLoN?Gu#{I00yBvp@8mSKG`tMY&qfX
zj^W`g!-8?9HiNT{ToSttQ83(*O&X`M$x=!jTf7aIl4d;+!;R<xt7h#OMp^8D5?2l&
z6q3tOuYj&jVJ)e!P;6~gR8#qW6~u3tkfh+HYHlK*FQ4CJO^Zvmra%>?!N%m~>j^oq
zb8OMb9V7U6gDZRgrkdC8IJ8;QyczGn=FxkFL6p3D=b=qrua@x+Z5+K<ce0W0Wy|gy
z8QIppdCP%~sHkZ}TMpoSlQ*Mzy+hkZ+KJ8xM~{e)2ybGSN|7(pdWn})h7+WlgKe)#
zP60&0|In#Z5A9mtvuMS(C!ak1q_FFmXSN9M2yeb)Jo3(PU;C5H^5kP%jvs&Ew}p0(
zqTTm-yIyn6Mk)%ll!oaUj+zXTrC<ags@(hFDeEoIJhR7&MxWfadZ1_ht_R<FM|gki
zfmdGH^2n3MlkNS(@32Mh5WHAN&K?zWXqR*(<e6~Wi5DXhqB@`Sf};e<hRSTRPX1hY
zdplT4es-hr_V7mQrqP|&(cWPz`zrI(<?=nk3S2I}VdqBU4Q=r)Y;g0awo2<AKFv<!
z(s+FH3jb=lT(;4aiP*csUhYr9=4J4IPzp1hP(k(^m&;fbipN82GXgq{_cT~>g{Z%n
zOAvs2vGz{Mna(npVR5W-mBkbG%+e=~GfSTop6eWcsjEw9?JWM9?-!oqZIq4^m-R;W
z9zSlpas0UO+;QU<ue`$I#|!m`g}cE&ChFsTSXfC`ZxUR6eMU!rqDHv8)2Qw0VkZ*F
z48+$u&I_M}WeNH0pDI&qW?rPqKq?<#ax-Nw7oIbm$Bv1yW0Z_s7~Hw^{)a}5W%n=L
zIcmOFyaVqg-@nI{9j8obNRL4oTnkCio5dK-Xp>u<K6dOiVck9<0><(S&RF8Lt?QqB
za{X(s?JUTom`jIX2Zc<^<0<%zg`j}$1Sh;J!uz8;caDxf-?wf}zh5}8e(BCogq_-P
zbjRwws|9Cx-My=aAeVDlak14Su7Xy26Z*M!L7MXW@MV?kgF+z_EExrp^-#GB(ST$Z
zgw>!B4NF!*q_=bnrnQjU4(W-)A8l+ljg4e##u`YE(JoWdq(~`K#Xsx%@+Mb2bfYZR
zMOM$za$4u=a9Wganief<S{@4FW-N4*ET+S&JImV3=By4kF!{!5v9hKc?5ft&lkin9
z^hcO&eoeSO9j=*gV-f$Nq}{1qa*5`&Cl~p{f;3-sR=Cskj--d*9%7$!x4O>%8o<!0
z<vg9M%hQ7Sn&p8&34m{Sl8$tJ;XMnheTfnXya{K0y7-bsNn5a|00O`x+9F<az4!}p
z0dOuIsrS$v;^A|D6~Y5NkVm}gMyK<}*|O&R95S-GwhYJ-dEi#;)Kl*&^C}nL<Z#?{
zv8=i7Qdy|%R(^9!S;+o5rzW$17*N8BS@&+ICUtCdI5vWhQ$rJVogv06&!(FbZ$Tfp
zPG|im*Z_Q3RobwZ59?R|?3NkPX{rtDSHMT33T7S@DSsZgxr>!UdTYv0En_~S25>=a
z;1Y>W!0gLm+dH@H+NxDCh-E8hu1+ithvU<=?8d86R$1B9TqvumKpFeO>gwUpG~CbK
zP_epjzki}^!*rCzE3-{2XR;gpy1-Qb3}aU$j-Bs9nEe1{Azt+PNJ2nSX#BVAMt;|-
z2aL}n+CV_I87sSCqHGr$5gdqfa*|Di=iw)xWFxHXi!3WGn=GHTe97{N<vW%iSt>fi
z-+%te#}4iP!j9W+Ucc(&SM+zcWoE>td2ALZ2mopmWhiRQ<(situ^~tT?sV4BNFpup
zXCo`g<aM@@mozle7eRpM#)&%Qp1By$@q$LQ>Tg85Xte?D+Nhv`UW5X)k)mefg+_AZ
z^q~T*xuuPmZ}vAvF`#I*0k1ZJ({sE4?O?H?MjNPE+G@#OLDqZq66U~0*h~H-S+BI&
z+f@n2*@AJoD9%=_S4t`!MPa2Ve#LIBlI>q%c3YKr=EsUyB?#90RH@3U+$RbzQA<zL
z;Y>X>_boaV1|(~o;XZ0nWpVr;1@S8oO@t~*rRHqx74tQs-OAr%+zlwK%51A$SZ1}i
zi+ed}$PP(hibI80;63$BD!dzQBacL(L4r^E8Y_Se;B8i^*cf^y{BEMVXw!yX7n*jk
zFG+>2<JDJUpWu~(%0Z$w{)X|67vPpe^WA3m<BVN22^R4U8)V^YVM`pwir<E8eK#WC
zJY?2SZ@zxTqMmFrtU_kZH&(%r2IT^hc?O>?ph!RDJSF`p6>s)6W*aflNQnwi36ea~
zeKNiwrFC^<6Vwy@(~&9^`U?Gn62)8cH8wP&D%DP9k)#4`&_Ap=NT`Z?(6`LmT*ZkZ
zH#SHJ2KO{`dL@@9CP2*|lttMgDh|IW4<gaYX1$?&?%!RevguZPO~BW5RgElPW@Vxv
z^s{h--qNoLj#Y|ibE(0eI$4-5C^q3;$>*$GjeX_#u#4h}l~p&DiOLF<8GX_AiUm8{
zWO>LgyDPo*E3<a7LPR>XJ&}BL{@?Z5Agi|7?B0~WX;p(_Ymp!>bueF*D>>aRID`=-
z%@CEDl~!vjD2B~(SNXG_S%4%MOz~HH()|&evJ78BVdE#G`SMFXnX)Rvh-!6&%Mwd7
zcvLlR5Uuu$n`L{ORdVX~U_exskrrWo2L-tXC?A*^tpGk*m%#p9RpPd6*ru^?!&DDJ
zARlDa1s^iS?;vXsPpr%%CyFrwE6p?zLi?FhhnK=a8a=a}$2E!c%@g(VZ1tJ#+^;Wg
zt<DObS+LSC?(8&-(`%0`VHF1vShJM;`oaUU(>K19r(hHwFkSOpPXCj*6yNqJ#`DZf
zU~@agyG+Ta3D=ki^KH>pMy@luCNPVxv~%J^5C~inEi(10B(Em?U=#}M=K;a+kQFm-
zqKN39zPo_<F~B#ev(Z;1=E7Tx?=D=@J*TrHpH5EdaQN;*K2X&RWruQ06~o{zCRF=S
zPQM~@TT)*jfm1kN5Job(CO<guiw*UBsCV=zy9<6RGaKlb5#72~Tw<);%43|lKTqQu
z?h5`q7n`$ns}b#-H?JgtC_6E49*g$&jvt*j4<D`3%*W_xyj6UTQuWO<tC@bF4}Qad
zzB2(o(3Tt5;Tsb?z6FDXX+?cCJ4qd(z0u7j*H~KkwdvqTN69md`($9E5K+(@zhAtj
zL8a$uQ0YEh7vsx{F%A@8M)iyFD<`leoQRO8bvo}UZQh&=JiE|&uTwhnvPslAZ07|@
zzig6pt~&djiM&yt#TI4k-KH1PDc_BcbK_q>w8r)9Rhk1v1CIn;IVC`4GA3Ux*pqoq
zuWAq9)H`Kk)}!XeSb>!o$kW1dz6F*wlvuzi&e;6U7wI5K@rmWWWXqAbq@)2hQt}{Z
zei9xh{72C9U>+d({QP^2SplZ=q>&ePU2tzM$)l^qlaNO%0bd!{>0s=k)W%@(fhnOl
z%?QaJE4Yj{yma%HuePkXZQpI9S>dZ&HXpr#jT9YHE4G~2>G{I6mp)bS3|xBK(eM{M
zJ5SI&CfV_Ep$+*=O@GD!$&M{`A-~%x3y>YnBo^f7Eqpi(`B%)WD{yL%i4@Ba7#}v<
zgLi_~^Bycc0F^S6%N{I!Hd>2_sUC!5QHV4|gu*Yorf`yvOk-P<{qxcxe3)!$M>I4o
zLcft|(UxekChT<yW<iC{pSLE2eL?Q$v?Ah}yDRmIjO+e+fsh_gxm}qEG1{3G4Q}>w
z$p!N4d+>#=P`ozk%2dGJY0Caj@b8jb0bF<S*to(p<<qPQ_8m-3grsqP#d%PntjNO(
zWi%%zH~X89APoTKDgQ*4I9B*VOSAE-W-RK(?~BkSePqQ<71&%0FWZ#ctOCJ2DA|96
zYT>}vu8jsSaDl2*Zq`QE!r((O)s&->#&-ZT8+A|p4jhdl`bQiVatAGJnIH)nFgzi}
z4TAGJ@TE4giJ*(<7c@mPCnD~^0EB0_l}dQIki4X?CPw*3uG|9sN0jVwA6(B-uNMhz
zy<R%?#qE-aD2rQ`t-fb9i`Bq&&3<5h15EI{<1LOimTcR$<WlG6K^8?drs+InO#NjW
z(m~ArrAjemeh(Tq-WuHOyc8a=wl|zPd{7L-$@S+agdbvkm$*NnLPLgF%ukpiVXFd%
zbaCINjWPfdj}@*uJvY03ZKAcWt0(H#q>#I(tFJXK=q_P9cz-KfIeur=jB5n9v9MvJ
zuRC3%$ySG4Ti4UOyuO&H74sFgiDkm`Sf{~HxDDVO|HY)YqT_I9OKZpD!X2H@bdhtS
ztKgg{!2W_57k<m53=mIB`2?}nlduRem>Z>H6r+hRVwomi(Hae<6S3#}hHiTvX0Gq0
zjnIzAx8dJFJd%#Zp09nLS-$oBZNq&J4e!`?_|9$I_6H<ACk(@06okh^eL51-oL1AO
zOqNEhAHYmAKLS4}!8Z*i%7wf2NYp?6pg$VX=}#D@>&Y^<Ct4H5zftqY_=)*jw37_M
z{-Oa#?kV<{X4r1XiX)sN^UC;uaJS)n?X{x8W#?;TY#|gg_`r^fJK&EX8%{{!wk}Ld
z3@YOz3=B2X4iRpF7B_3EzDRIs$B(}daV^qSjqO23cQ&Z$#>+03ljV$;vB@o`YizGp
zw1=JjndlVW0d9!5V@oi7e+-<hg2_zIL%c=^0C-td3YoVcXbZ2zqGya>oXW8HnVhjS
zBxLk7Hrab4-jGvxFxIJQXN)(q@37bz=Xgt~E~DeilY^Q!gpY5*?{)SS7^zOdUKqr?
zd~Uvu_<(D{&C*s(sR^_G>D7C;batrm#a+3*t6K&KHw+92r}n;PoLaodnZDz;2f9}8
zHMUUchC$x$0r3vlmV?+ehq*qj%!WQxHX~IwA6#x_!@yRsD&$cu7|z&xD`4H)z^z+*
zYFk$r>&4hhMhAOgbhKzNZ>`<8Z@ioJ9NoNcbAeV%-%}AX*TG5i{A^_B#+U9OuYsOm
zy2t-P)2?Q8)U>W(FBlywT5Cq>Eil;?t!<;D!gKrf)wYhWz<XXW;|&jhKU05V$ca7+
zQL50f8q<^%E`pbmuibnp8LZ*8hK-v0=%5N^-~lylx`h+6)+5Oum_e0z2buU@I(Ft4
z$Bt1Sqe(rc>l^t|czpbUm;SKtnSEjm^!OkU!d@{lK#?$9)Ba#m^XpOFJW3rMFTG>@
zgyAE+Cak7i-3|Jwf*oci!8)U+I#C%xI;Ij>X`1no2u{EUpKX%~F!yNyQWL~8ZxVR7
zYxpKiQr}O9m@d|y`GpuCe?T~8!e>G@VuF>>IB?_7u;WHnh_rKiI?<cygSNt3tULuv
zv6&mS5+Vh11%f!h|DohGvkk@`?<=Pdy!PJX_rI+(Om$H(_UwH{^Pjr^vG-rQFG3+{
z@B_V%96V<bzessd8^A|u%fVY|uL1c^@%_bW3LFOKg2ld?zI_q2(T52NemANCixf0l
z5qfZ~s@AQ@BGNzUjK$A5y|7uomCGcs+h4)=V!rAOJDnO*$8J*mUhjKvsR?XCIulB=
zh?=fdLxWbQ;EKiGa;k5*1{JIIID26HUv))Ix`ciW+TQ`zqe;$C(%6^4ydz)W&%~dA
zhfv-MXpkTucy>u@_5mhtLcvd7JgS{(cS_1{{Qf>wm+sT_4Suiih8`ZbxKu3O{w_sO
zPlff>{t(yGOn;6kKdDb6*(ZGb<eMkbtny@=pw~>C(9}bSz$ra)tmgTNgBXkY&paj$
zWxzE3<Nu2IE;>1VIs;t){_NZ0mxVV#RXKc<M1A_QiyLByy#lT!igWD{5QRrUpcFI;
z{^VjdxH4&162E|@IF;-WX=@))j%pCt&U^0)ttMjC8ag)adi>5VeAg<Lyk*1aE#0dY
zrG+PxoynTaNM`vqx~y~6x?=rxBSW|K@XKV(Wz{BbH`GqOjm6X&t#j4X)Wk-mWJ5Gj
z6I<Vtj6|Y)V*{~xGRe;q)IwLRPKedetv6yxSDnke8IGNEljslh`~dugI@XgIxPtn0
zs<K??@etKHlFVYJnnbw)eK``}cmYt5$zf0?YY30IUNwI6nj*!Xef!zCVkJ+7EBf5q
z&l#`mdF2)3%~xJ|)vu5C-EvFcsA5&K-Q6ssX&d3g>fY%0r(0Xurh!~%>(EeZXKny+
zku1GKxJ}IR$g*~1hJq|TXLf6@ex_!HEX^H#7#Gf?O!poZ^nkyOCk~`ph+B}kaP1@3
zK<hlxq?yY-U^f|>pk#V_GK0}W!;5=+Mtgb(4n+qGCAA5<h}71$)Ycj<I=0lZ6Xx}1
z)a_f>$zF~3Q|<ov4FmLepZ3B)FRQC*t-(JQiqKEZnYYYq^a)0C>@j}?eVS|O2mOs8
z!#VicC$3sHyzsKVp1c)2xSE80@U$$HU1&q8z~nUv&ZHnrmT+}=HrEv}EzIuYgsT<Q
zSEPbBdrFa|90|5!&&5&R;r`LOI6sM|N8?F}pDrFA?dK;0ql*`hFRg8<scEVG3I1?)
zw|Rxm(N)cc_y8eb00?j%FP<NFCL_)pidQ#uuFLK$;%R4gUFTa-ju+u)CVs|~<~1*D
z#qM~MCZDyugV-k@A||Rqla&==&_3pAexmc9i9t_I^s?Bw2RZosu+fCO+l2S4MX1;<
zMUd7P!04G6CQf_Lg7$=o_*Br|+>2XtP4!`oeAvi4DAK?4023fCk~d*PrtAXxi-1iM
z-fewS-9T%)wl*8G_7LfDXlquqW;6VH{K+YRvq#Jh2zL)gTNh_TE|(T-NSMSr5TESL
z@o3bmx2I#AE~oYkYc3~DGf$}5KNG(fA@A*c3u4OW&FyT@))KPu4LdMJzw9};i#$;%
z^-G-S)45eZh#wr1cgzk_FEb_$^_V?kZ(L}wguDCW#+~Pk*!ZRb`81flF_xWE0kiSk
zA?137<qiH#>w>S8<U=0cQT&WGeZIPDX(#bR5a7Lq?_Y;OdlPHW#50ik%!emVimlMc
zu!p<&N3r?Gu?wx5Z5Q5P%B*|wji%aj{l%OIYZQNG&R2H)dFC?yfXJ{vFxT@u`e0bB
zEfyeB%r$=B@V3PWPvG)u(H~EKbL_I1h!+GS<i37twBYLxHU)xm%Jlf(eM8UCD0%!3
zTgl^ZJ#~A}?U{YT``qo{-wyx$BU@g1<$<y1kE58-!-IiJbRYU!!#tuNP)|cm!c>Gn
zKY79vStlX5Ug$hnq96sRenD}vm7I_Iqfvi`)Fd1}aE5OxBffv6s6QEBoxC>BkD0pD
z)SrT4Rro2~L*K}EOtC_yUN;l_&oTEK>T05-+|k@GfvXh8>hlCpnroD)2$}#IKcQZ*
zIs(=_7w?Tm9~wOrjUIvoKUrMV|B675K19{%FbOJ+c>z}XLbmdh*W)<%8%Ly?2SiBo
z;#g~~DFKu2FnZ=q_5wZ?PhZC)shA{h1P@VjSff4(A8tQdm%xA3rxDQtgFkq0z{f<p
z*n#ZcQ0n1Q>t@~`u?LuFTnPtx>tJ~MG=41K%|2%Qo^`PYj5Eek;SZ^Hq5SsnV5=}~
zd$~#brav(SX&2uf$6g`mRi0*qc0js?=Z!os_>MRHeF0d+K&6NrgkvU!aO-3$Z?aSu
z+vf@`zwV|P_1Xb#*36r(TOM-lGmB=<LQ(w;Ui70yw=BXxR;YAUkSYbQy6&dZN`>cU
z)Q_|;TC{nwz~jZZKWZW7X9K>XhHqUpCB4|k1~{{z5F{YAkRXoWTR_=FK`HqZAg3JE
z2+M`Lu?mnQIv0=!=~L7$A&Kw*9bh$9<4t3k@z!^jDXzBeOM?~ah*}Z6w7bovEIUup
zzhrxJ*7RT<8~HIy3dS#t5#tvEOWyyNo|$N-9&VC`fwa_W^80T=_miMWHCTo%w^=@C
z*+=vBZ+Gvw<K|CX)>e-}z<iwz#rz`<LI)xyq-u;;p+3f|FlaJ-Z|0z-;4<ZdCg$Nk
zH3v5s_zU&&*zAH&E<tdUe3Pdmio3nLFI=HqtyYBly4y8*WJK0@k$Sbli`>emve?d%
z>uq73N{`~K&Ncc2u3ka+Tr{gu6}pvf#g%HQ*8{E|zo%_hqhhU=8YLxMohZ}P2F*ER
zdX;3Yml~~Vq^1f*jb$z>5-zcZY9dnDD|sSbYa&-`jYZ^e;*VD=(P@2`%r*g;eM#T6
zD2J`Lr`@fL5V$?P;fl6u>@gW=u(tfL2#2+c!vWZW6L54%MR1M5Ce1msvRW1zr3OhY
zpHby<JDc28q@bt?u%Sqs7KlpWni#zLhs*1%@s=d^m4F|^N57TtTcD^r+G*6q`SHbV
z7gYv48pWeye4(CspxYyi8MavbR^w0fBTx$w&WNPKr@$!Da8nj$OMfbWcm}NGSUO;b
z#`mQp*+<p4p4oogG3NWn_2V;#g16RJrv`vOSNUL5kI>sVQ&`mC59VfC|EV$6)0u4f
z?9e{puJN0NfB3i0<G+9V+<^n*U)&Iz-q@|XD`8pAHqBz$#{b*d)d#n69rs&&6X2Ic
zOO^y#J_@2fh&z&?DT$&fnFdJFwq%ErWf_na8^^<efC%Cc;2=uwWa>Chs<4XFI!@}k
zuB*C9>ol%=pg$_RZtJ>f>bh=i>kqfnN&H8qlgUhHJe`c&>10}^zkPRrNPRRjq4aL|
z?c29+ci+Cf4;=73dqa`fUf-T4J9{tvGu8Um(lgIKE6!&py|2QicH9^9=K~%-pW(-z
zdT}3!ry(fYcd-?CPJw45Z+e2qE`99}>G>~yc>ewO&wtZ9{Mw~&k?-06&86Re{(b)M
zJUhd+K+glCFFf2e{-09B`x8!iAG~&ocYXmpbP{)n$ME(?9#ygD5!3m-7VnXtpOlXK
z`3nArz7L(ZphTN<xX6;c_;D0(2Iag1Jy?1x>w>4*{vDT(`*GnuD84~JZeu<!O}S4v
zb<blfXl@_wM~2JKv}RvGmM7X+4(c9k_t4VQrLE+@7A|yJF;<JGNn0^qa||Ab$8C=7
zc^6}&usuyW+am0_PXAW>N}E>V*XbvGc0JpgbL94I*~WF(9^WY!XBy<NEzKfi&x7u^
zaYP7Ov;Upoodj(K^gfOH36#fCDsGVhzl*|pzKuR_I>pO$roHHv5%}v<w5@S@(r!D;
z0-ulV`55p+m(DbfA=by$v4y*J5d%C1`iePW-S8V|tOM4YqbJ_`;c<n|?pQ*vJ3;$*
z6kIF_UBBY$^(gAlS^5vufpd|502<rQ1#Ln;kIUtUE^O96kNT_V!+#Uf3(~*gX>pQX
z@^pJ<J<oV0Z_azcx5@X3|55)Nfk5Edz$f^GG#7j__-^o0Xd-kj^y9XPwoBo2;U7i%
zBagL9?MK_6Z2w8eOvl-dkMR)Yc;|n0jdnfPEo0Nx@7?g!n)Pd*>XCX*^!(4-6Kh{u
zH@og#Z1Q*PrnlCwS)W_~+J?Y}^oG+Lp5E}<hL1LSHV$k&zVXW&mp6VK4M%rJt>|*}
zlTH1bPH+1D%{SgWd-F3lf3P{Ud1CX~%@=RkbW8r0Wm%Gk<ZQ2}cc%BkmcW*yTh4F!
zX{<Yzj-89W82iE2H~PB!9_hQdEwt^_wjXalw7s<b-1fJ39NO{T&f%TU_OIzb+W$)b
zkK*0&p?Er8ia!zmnKGt4qCBm<qbllI^`d%dVE=$M@XBCdaCq>c!Dj|94F2ojPlq~(
z28NCgJ(d_xJU6`U*7V5m$k~y9*)_8}ynAH#k=>8)esj;*o)<^AjGh>MbaZ+2lfB)0
zC-$D&`~2RI#=>LSv6sd^x^4Kj6StikUpGEG{@%XqzVrLL_n+PW-2M;t|Lpdm+n>Ar
z(}~R!_fDL@BXq}qCufuAFh_h(by4~hpVaW52c;YD?MTu{1Q9O&)<_?>^5ia1oVzeW
zUft#59(><tpNo4zpLB5_@Ix-{$7cvfT|5B#!!91iGvPTGkKmm5B(7Y^hc_vtlhU_c
zoFweF>f#;=FMqkX7j)IdeZcp*xL;aF_qccfblt_n(lM&JctqMpf1ffdXR5`yf+g=r
z?UaXy5+m~L8QBD>Sk_9iR<{afwI)x<d9!R8rII<In+r|+h%r|$Y1L-636B}oTG1@a
ziGiUeY1$|oRn0PTEWLJWZrHN&a=vOV$Ol}xa;0jXG<0jAU|E&1!NF!v9uE(hOsRtH
zrm9jAt|~~DB;&^^Qh4|;OT)MjOyDB`85=X7!O?WNirAn^lS-gycx~1~FK(%!K7o=)
ztqiIGjuP+zNyl;FD*6#{%%Oh?QmR+AUMb}mxOt4CkS;^70cdw6*EG1wf>RS3<e-nE
zdkwE6&cPxJ|MEi1s?bW74hV^t^_AfdZaWD%I=BafS1eG+q(S_<a?GZEh$@b7{tG+c
zsw2J@hwZJrgrBD%?9GY|zuWMpTm(B~cHl8`7j@GOw1#@<Mp}!nB;Q2qX#;J<o1>e=
zC;qpPOue*)Vzia|aI3H#zwf*gJ9EcLAr&vN;q639&@lGM8=+nJrr91E#Y=Q!*gbC?
zA1U)2sS|Vu@@0x9X^IZeG~G#e(cN^A4$(byFMWn)=rA3j`{*d$Psiv1N>hf8(}Q$^
zK1&bL!;~eBW=W?U8I-3vDo~M5(ma)Dfy!i31z%09QjILC(<xfS&h%&K5&9K8gZMnQ
zjsI18l)gZZ(HH4)`VxJaevQu3S7?cTozBr$=?VH8{RaIeJxO1ur|28>P5Lc*ntq#}
zq2Iwx(eKi8^m}xkejl&x{{elAzKwgzKcW}tJM_o&U3!uJgkGXQC7T+wOfS<b^eVkZ
ze?}MRb$WyToZh6rpueQQqPOU;>23NO`X2o)eV_i0-oab1@6tced-RX=PxL;0Kp)aY
zU%h5j+Y3giqUyz}UNUllnxR$og4fdK{5jK7hugGj)m*Hp`l7#5EtaiLT`TKGsmUKQ
zaz#tkN|wK5VzCEsH0xF<XD*gYrj`p?1r=+1&hS`;AmhcF<*Qj*HOvRqSg2TM{H#PR
zP_J-@h@*#U6^i8uE8yzoG3Pt<f}zhlebhuyFPW$fhs}Al_PM%NHFDlcvFtU@7y-?)
zG`$e0mrKR+yiXho=7QlXmh)yiADU7F#_5V#wZaY%X4DE0)gg{exxuPoEgFW^0l7xm
zLQ-PRwpQ(i7S@y-f^Hf!`mL%~D|mCJ?n9};FS=?Or>!6(#qz24CV?xVe6eJxm0Z3}
zAd6--7Z#Xt8XoU*TFphHS}`#ZPE&C~n=`z+ITu7>wE~M(qpTM~x>hpEIjxHMauC<q
z!fpOpc3$ui(_Fy7AptRM9XxGK8-^qGR#Xgkl#G09E`~cru5U4l*;aGKD&~+uNH7Cw
zbNCn&lFf=yZWE1+g`HMLgXkzoT6qpGV3vr33Z9UI*DGNMVPR_=)C~{OrDrusbnRYE
zt5>e*$D(d%O0CbjgS$*QQ&5DUu2oF+%IZ!m#&N@Jan7+Hh-*JE_6$J#N;h^m_PZ8@
zFMAt7ad{d%`l46Y7a{W$Rvld6Aj}f173%qX$p|4n3Q*4o7O=d`>KP7et(*(#W~roA
zYDT+LSH*xGO{(yjuTs*^bnu}yo$V`YSgdBnkD#gN{FVm)c+Gs?FIHkmt64_1SetLd
z=v7Od)vDgv`dmaes#Y;y!~!tTr8Zv+*09E)dYgc(xsNgboK}a<HLO~k)<ZcB^0k@~
zDi!m_Y~4KL*Xy%J&Bw>kY`s*fVQB{!i)9F?b+67sY9df6)oW^^Q-EerB!UaYGLyR;
z*rIo?OnGXeqkyDmH8V?KK`WLZQDmq@`{hIh8s`!`E^!i!n(#v<H4(YI{uANWf=+a{
zP^@hvEGMTV+5}`*`Z2F+!pDbjGt26WumqEl@K-eC#X!~2kp`fPSz(nHi<VySl}xk3
z`LCW+6Fn>3tzr#BL!)CQEz#!s3^Li*yToxgSSjjOy=wRtjB-6#D;0A{!ti~~$>!S0
zdd&(r4r_OS<DX`wY_cYKvpOHF6)j^yt3(hExX!ETSjmA}p=gwHLC3L)kaJdn1w0yT
zp4IgE0Ow>l6YF1RhliU<6Ex>E0;h?y3Sb2*u~;hv99!Ios}zl}6MJm6iz0n%kyb>i
z39nYHhMU2qCff5Qb5Yf`ny%%HHc_#vhKsS7h@j0@ahfZ13B00JwNeSIFM&jEiPPe(
z9zEC2Mj(BvRuShG_MGd!TrP~u(7CEntEodx^M?JLpob%TbmPzmycTZd=Y%*Zl#NAk
zEk)wjft<Su_u|Ty6xo*UPfulJ`QQbq^YB4CaNqH?JrcEdWU_gA>Hf6s>C;{h;kH26
zW3$oTUR%o8QYtpNj5~u=HmTaA*m5?n+8#yD$@W__wr|_<<sB4GP3cod9!&SfdZSBe
z*`Aq6_u3PgsBDiiHk!%E4Tnj~**idTYqCAW?L*A@)=XN45=)wFhiB4RP-JckGq#(t
z-Pve1lgUJFif1x0TbfB5nT%?C6?saweSI1f@~39fwm+7%1F<C3&)AezZJ!c@UUIJC
zpH0f#;tbA5Tgp!9wzt0*^pw0LFF|%=$lnLE4yUs-QSC@39m}9~;=VMRqHL5qvTFMk
zJD7?u<5E_*CV*-z8H0;sNzL}m=55k3zU}W<?I3=)21-U!`URgf3l^w3k<Bnmc2X!A
zQkH`eDK(Ys?`=7|O<C>yup@=yP$312v+~qZOyh|Vo|2;MO<Rsa$)=XJw=bqmIzvRR
z)7{>RUg+F1ZDpr+j+t0;ITH3xrF)~X-b{b5YIi6Nk7vrxX_KnmslWhPw%b#8vt2-9
z$&B5>wIir?pr+bg5YsJOBEthZ)V4cQS$Qcd+nsQlYIiFKkER>G++=2}-C@K|tM(1b
z!Nci;_c_F9FX%mjzD8+CU8(!ijjpbgO<L0KigS=6bd!yCK6Kz<(>lzAw{Irh;K+ru
zl1rFg9=5+XhHgzf>a=qg#6GuXV97M}pUz?uS54J*Ca{4=pfR`@(X@XVd#Z|P=uxDG
z<e55}w!30UdCHC;D8rbyY*Nl*_*c8JWp1aGOfF>`YXWh*8jo&)n{I?{J#p1ut2Bt=
zI{2C4O-jSdaJ|y-G2Eau{0uiLjR3=_(g-r#q%=YdZ&n&@3^yy1-4XvK6uAY8Y=!_C
ziZJYjA`G`c5r#1+!f-1TVb}*n7;b|i47WoOhC84L!<~veF5<jjf&JZCIfY5c@}y~i
z_D&9}xMKIm?S3p51(7<9kh<o2iD{!T&Q<>}2jWGw)z%!)I$P<t@yk`h%L6ODvbt$d
zk#`9_hrmNqS1(s&forP8bZOlyBGpdrkBv6)Gl{Sy0lT5-HM?XHwc4m^4=V#VjjQ&p
zzlaqPrh|P1Qz5PElLzE!UYT&=T}w;Tv1w$2G;%g_9+vB^yfG-o--Q&i4$+VQg2ir2
z#f_zbm@JPkLDufe&GLXF!}dWYxMVxai+SR3`el#om7_0vws|*ZlAPc|NR=25BgPJ3
zX<-&uuM;e4iaVLylgj2|wl}5akYhY4EebrF!NR<<j|P>Hbz=v#(P#`K9DrQ_Vid@`
z#vo9HGocTw8@~4=kdU{p&;$}SbnX*M;E2-*r?AUoAxieJ4`ht)-{$%tHV)T}3bGx-
z>XqdKv1uNRXKSx;85`hwR63d-kjHW2V~t%Rgk5%dpbxdX(9}A$IumtuaAjle%s@xg
z9&<HFHK!)a=iVz#Y)<8EN=zPLuN^?v9nTCj@LCNP-gt|Q*}P2N*CGq<X4h3b`xSdv
zyxFo!=<SNVJHCV%;$T_Aa=dC_Ov`{B$M_S%T^xW-?{aX(uqp<yNE{vSK(auBZbfR-
z-d`Mw)7J`&Unct4Z=6@gW24dD74zMjadk|xGn!6KvHiX5c~;T2qh<0WOkV3OPMpfI
z4toad1lHozb?66>Yw5-wdl)>^iai2wCwpxQew7d4oYnNxT?&VzeJ9*{w}KzSxdX^S
zAjHTaWtjx!9w35pFY_eP^cm)1WQKVdIm|qa9ATdQK<;B6MvgKMBlj~8BgdF$0>}f*
z!$_KW7|AdXBgdI11>`~IVdMn!F!EXEVdNp^xgE&E%)>~Qc^J`{hml#u-qUik&K3JM
zkaGeX2WE(P0(l=QdBq-WanEr@a2Eu|+(m&g>q*7l+hU#PieN1Xj9C{1#;j$<9&53h
zToJ4lfidgn1jejY1z)T1G_Q=3aXVz#-mNpI`BbAyxX6Cz2rfYA2_$9bvbxfc{7GCe
z^gA%L3cilBN1LFym{*!?Y^Ae@aj|$d-SFln8{4?{M(9yIo1ZwV<BAC^xF*gtr1t&`
P^z$#-zOUl!Fe&{XToHil
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/fontello.woff b/ui/new-ui-samples/fonts/fontello.woff
new file mode 100644
index 0000000000000000000000000000000000000000..e0007cf3c54b81e62aeaeec8976b8feb2e5a21c0
GIT binary patch
literal 24196
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
G0002s37CTb
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/glyphicons-halflings-regular.eot b/ui/new-ui-samples/fonts/glyphicons-halflings-regular.eot
new file mode 100644
index 0000000000000000000000000000000000000000..b93a4953fff68df523aa7656497ee339d6026d64
GIT binary patch
literal 20127
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/glyphicons-halflings-regular.svg b/ui/new-ui-samples/fonts/glyphicons-halflings-regular.svg
new file mode 100644
index 0000000..94fb549
--- /dev/null
+++ b/ui/new-ui-samples/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,288 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
+<font-face units-per-em="1200" ascent="960" descent="-240" />
+<missing-glyph horiz-adv-x="500" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="400" />
+<glyph unicode=" " />
+<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
+<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode=" " />
+<glyph unicode="¥" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
+<glyph unicode=" " horiz-adv-x="650" />
+<glyph unicode=" " horiz-adv-x="1300" />
+<glyph unicode=" " horiz-adv-x="650" />
+<glyph unicode=" " horiz-adv-x="1300" />
+<glyph unicode=" " horiz-adv-x="433" />
+<glyph unicode=" " horiz-adv-x="325" />
+<glyph unicode=" " horiz-adv-x="216" />
+<glyph unicode=" " horiz-adv-x="216" />
+<glyph unicode=" " horiz-adv-x="162" />
+<glyph unicode=" " horiz-adv-x="260" />
+<glyph unicode=" " horiz-adv-x="72" />
+<glyph unicode=" " horiz-adv-x="260" />
+<glyph unicode=" " horiz-adv-x="325" />
+<glyph unicode="€" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
+<glyph unicode="₽" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
+<glyph unicode="−" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="⌛" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
+<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="☁" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
+<glyph unicode="⛺" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
+<glyph unicode="✉" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
+<glyph unicode="✏" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
+<glyph unicode="" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
+<glyph unicode="" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
+<glyph unicode="" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
+<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
+<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
+<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
+<glyph unicode="" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
+<glyph unicode="" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
+<glyph unicode="" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
+<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
+<glyph unicode="" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
+<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
+<glyph unicode="" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
+<glyph unicode="" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
+<glyph unicode="" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
+<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
+<glyph unicode="" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
+<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
+<glyph unicode="" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
+<glyph unicode="" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
+<glyph unicode="" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
+<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
+<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
+<glyph unicode="" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
+<glyph unicode="" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
+<glyph unicode="" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
+<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
+<glyph unicode="" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
+<glyph unicode="" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
+<glyph unicode="" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
+<glyph unicode="" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
+<glyph unicode="" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
+<glyph unicode="" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
+<glyph unicode="" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
+<glyph unicode="" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
+<glyph unicode="" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
+<glyph unicode="" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
+<glyph unicode="" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
+<glyph unicode="" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
+<glyph unicode="" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
+<glyph unicode="" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
+<glyph unicode="" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
+<glyph unicode="" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
+<glyph unicode="" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
+<glyph unicode="" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
+<glyph unicode="" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
+<glyph unicode="" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
+<glyph unicode="" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
+<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
+<glyph unicode="" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
+<glyph unicode="" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
+<glyph unicode="" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
+<glyph unicode="" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
+<glyph unicode="" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
+<glyph unicode="" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
+<glyph unicode="" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
+<glyph unicode="" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
+<glyph unicode="" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
+<glyph unicode="" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
+<glyph unicode="" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
+<glyph unicode="" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
+<glyph unicode="" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
+<glyph unicode="" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
+<glyph unicode="" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
+<glyph unicode="" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
+<glyph unicode="" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
+<glyph unicode="" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
+<glyph unicode="" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
+<glyph unicode="" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
+<glyph unicode="" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
+<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
+<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
+<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
+<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
+<glyph unicode="" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
+<glyph unicode="" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
+<glyph unicode="" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
+<glyph unicode="" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
+<glyph unicode="" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
+<glyph unicode="" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
+<glyph unicode="" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
+<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
+<glyph unicode="" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
+<glyph unicode="" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
+<glyph unicode="" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
+<glyph unicode="" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
+<glyph unicode="" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
+<glyph unicode="" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
+<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
+<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
+<glyph unicode="" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
+<glyph unicode="" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
+<glyph unicode="" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
+<glyph unicode="" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
+<glyph unicode="" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
+<glyph unicode="" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
+<glyph unicode="" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
+<glyph unicode="" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
+<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
+<glyph unicode="" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
+<glyph unicode="" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
+<glyph unicode="" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
+<glyph unicode="" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
+<glyph unicode="" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
+<glyph unicode="" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
+<glyph unicode="" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
+<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
+<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
+<glyph unicode="" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
+<glyph unicode="" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
+<glyph unicode="" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
+<glyph unicode="" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
+<glyph unicode="" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
+<glyph unicode="" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
+<glyph unicode="" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
+<glyph unicode="" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
+<glyph unicode="" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
+<glyph unicode="" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
+<glyph unicode="" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
+<glyph unicode="" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
+<glyph unicode="" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
+<glyph unicode="" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
+<glyph unicode="" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
+<glyph unicode="" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
+<glyph unicode="" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
+<glyph unicode="" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
+<glyph unicode="" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
+<glyph unicode="" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
+<glyph unicode="" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
+<glyph unicode="" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
+<glyph unicode="" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
+<glyph unicode="" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
+<glyph unicode="" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
+<glyph unicode="" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
+<glyph unicode="" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
+<glyph unicode="" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
+<glyph unicode="" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
+<glyph unicode="" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
+<glyph unicode="" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
+<glyph unicode="" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
+<glyph unicode="" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
+<glyph unicode="" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
+<glyph unicode="" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
+<glyph unicode="" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
+<glyph unicode="" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
+<glyph unicode="" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
+<glyph unicode="🔑" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
+<glyph unicode="🚪" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
+</font>
+</defs></svg>
\ No newline at end of file
diff --git a/ui/new-ui-samples/fonts/glyphicons-halflings-regular.ttf b/ui/new-ui-samples/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..1413fc609ab6f21774de0cb7e01360095584f65b
GIT binary patch
literal 45404
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/glyphicons-halflings-regular.woff b/ui/new-ui-samples/fonts/glyphicons-halflings-regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..9e612858f802245ddcbf59788a0db942224bab35
GIT binary patch
literal 23424
zcmY&eV{m0%u#Iioo_J#0nb?@vwry)-+qNe*Z>))v8{5gt_uj9!t5)^yb-JtjRGrhi
zYInOUNJxNyf_yKX01)K=WP|Si>HqEj|B{eUl?MR<)%<1&{(~)D+NPwKxWqT-@~snp
zg9KCz1VTZDiS?UH`PRk1VPM{29cgT9=<v;Lf`EYagMdIet=H@a8oRlWfPg?`f7?L(
zFKED?%?+Ku?I7~Mb(sI~^#uZMZsTe8&6R_I$YX<mq!jz=4cJ?l8k&HBDD{8auziCA
zQl4qm;+y>D?!Wc_@}qzggFv;gb@2cJQAYWWtpEZ7?y@jSVqjx${B5UV@SO|wH<<0;
z{><1KdVI%Ki}>~<`46C0AggwUwx-|QcU;iiZ{NZu`ur>hd*|<W)sXtmhXDixZoaeV
zklo$X=sQ21?>Hb(|6veERq<PbegkBRzi{?HIp-GW`hU_n&12ozz{J4dAGi@L6pDe-
z_ud2pJc-_b2pj}b3Pc9vzvpJBX4(Dy6a52IgD!!AfuwLEKN$^~jn+XAz)Mg9U?T~E
zgqNfL`tz^91n&aBz=T}M5SD}tB`7H25Mn@BQsEK4gL$l9qzGE52osF@rxjbO42^t7
z#@g=mu(37N%+Vt`PAJL-lQ=FQENF`3={3?oV6ei1hBKA`DuVTzgGk7b#0j#++TdzR
zI(97e!~g}_G7m33x=^Ssom?;fl4q}a+^;UP-1|ZzG9$*2kpk7p8YI9lAxj<90CjKp
zE8u&KGi5Zv=157hgKP@$c2&H4zuKcOmHoZD%?+qY(Kf~v8|7crq{Nr<WvZ$ts)Fb$
z8!IcdkQ`H>xu=b@5Bab=rqptGxd{QJg!4*-i_$sES~)AB46}Fjg|ea#e@?J}z%CUJ
zOsLWRQR1#<tB|QIEY)&I*ZbudHp)E;$><nb=BbXZ4tHi(jj=+TGtb?X^faOKFyozE
zS@PKF)~8;5xRSNpTm4ugp<(oc@Q3%7K-)@eyP?m1z&l;rf%%J4?;rfzsBU`M+aNyb
z*@?y5Vm{LN@ggUHmiuxx_Dtj5rsol#BM~=pjyHqe<HcvPas11*o_#i9ZJ%`X+7&6Y
z4F}#7CrnT%)O76bs<&03Bs~CBL9-lPzgZEx+oS+S$-gV~5q;R39w5(FZ(Km5B%*l&
z(rrr`BO68!fN#?(kC!s6W?du1@vWLl$02}9k4Iw`sS*azt|mzMLd*ov1C_X-Z_DEc
zA>ng^sD)A4FDuY!iUhzlgfJh(J@BRqd&P#v2B`+saBx>m+M&q7vk-75$NH%T5pi%m
z5FX?`2-5l53=a&GkC9^NZCLpN5(DMKMwwab$FDIs?q>4!!xBS}75gX_5;(luk;3Vl
zLCLd5a_8`Iyz}K}+#RMwu6DVk3O_-}n>aE!4NaD*sQn`GxY?cHe!Bl9n?u&g6?aKm
z-P8z&;Q3gr;h`YIxX%z^o&GZZg1=>_+hP2$$-DnL_?7?3^!WAsY4I7|@K;aL<>OTK
zByfjl2PA$T83*LM9(;espx-qB%wv7H2i6CFsfAg<9V>Pj*OpwX)l?^mQfr$*OPPS$
z=`mzTYs{*(UW^ij1U8UfXjNoY7GK*+YHht(2oKE&tfZuvAyoN(;_OF>-J6AMmS5fB
z<XKU7YH10@@&WJhj71Cj$=TP(r@q<cW{2}t$FbdUw)ad2!elcuLPw0X5toDsPadV*
zO3EPF>^sY6wea&&${+!}@R1f$5oC-2J>J-A${@r(dRzc`wnK>a7~8{Y-scc|ETOI8
zjtNY%Y2!PI;8-@a=O}+{ap1Ewk0@T`C`q!|=KceX9gK8wtOtIC96}-^7)v23Mu;MH
zhKyLGOQMujfRG$p(s`(2*nP4EH7*J57^=|%t(#PwCcW7U%e=8Jb>p6~<TTQ9e?y3C
zdb|J>>RAlY4a*t<yx)M!`#-^(n~+nSXHt)XXPCd>s=pl}_J{->@kKzxH|8XQ5{t=E
zV&o`$D#ZHdv&iZWFa)(~o<E{GN9+27JE4iktONzQ1b)q{Sex30G?of$HMKN~8KD%g
zA+E{L7XRV>Bh-Osl{~CS0hfM7?PyWUWsr5oYlsyC1cwULoQ4|Y5RHA2*rN+EnFPnu
z`Y_&Yz*#550YJwDy@brZU>0pWV^RxRjL221@2ABq)AtA%Cz?+FG(}Yh?^v)1Lnh%D
zeM{{3&-4#F9rZhS@DT0E(WRkrG!jC<!Dwf@j`RqVrLtHFoIyn_L9bxbWrgS*Z9wMu
z#p1&N;H{ZGv&zD_N*zbkas>#5?OFjZv*xQjUP~XsaxL2rqRKvPW$zHqHr8Urp2Z)L
z+)EvQeoeJ8c6A#Iy9>3lxiH3=@86uiTbnnJJJoypZ7gco_*Hv<E!$|Yb^#x+eGvv(
zIp;Wt3|Xgi12|CZQBu5wnkbr4Z_o<}@wU&ThE&G4r6LGOs?2M%<}Vu1j2>KOH97B?
zWiwp>+r}*Zf9b3ImxwvjL~h~j<<3shN8$k-$V1p|96I!=N6VBqmb==Bec|*;HUg?)
z4!5#R*(#Fe)w%+RH#y{8&%%!|<UeDoR>fQ5JcFzUE;-yVYR^&Ek55AXb{^w|@j|&G
z|6C-+*On%j;W|f8mj?;679?!qY86c{(s1-PI2Wahoclf%1*8%JAvRh1(0)5Vu37Iz
z`JY?RW@qKr+FMmBC{TC7k@}fv-k8t6iO}4K-i3WkF!Lc=D`<I4n3h#nG>nuD)v#Na
zA|R*no51fkUN3^rmI;tty#IK284*2Zu!kG13<C=xWI7mp_-$=}wb|<b)!OZRv-HEP
z{%b~I$E(4`VZ#-glOe-5)a2pflY1Bz-1#4je?)~T9!X4-E;pkTTM{XAe2I!K$wY&{
zHEYHdnV_WuXSOaFHmg_J8USFkT|e)_-*FkL@p7z7`X=kCplNBVHgHbdYiIA4b&ia%
zF^b30NW{}~a)`)^H3EMpr)@2a^C3(yt-t3eigT2)odQdx2zf*pafN9pF#;@+u4LZa
z7x<*Yxq9&rRf5M3B$p^s`skXsITAn=Zo(y=33sGRSGWuaK?&Ne`Pj#q{feF+D~&z+
zEyT)MiaBL7L|^V76c6eAiTxZof6@zS20aGf%dzLc3HH8OA(-=u{w4pJ6%*OO;uayC
zzR4O{sz+f(78K2km*}=(W9{c=$lUj4eqLf#^t$Qwnbo?bEXMO?j$N^G)CbdGe8!P9
zJnZQX@k)7bzDG0I8w{~ZPTf4?D$;UGe$M~$TSzciU_@dS=0n{mhB=qm5O0^X+E9+o
z1x?ef8>!$OlxJAt@zLU`kvsazO25TpJLbK&;M8kw*0)*14kpf*)3<d6yUQxMZe%8t
zXy(eYN2(&WrmwSg<nK0tWy!~|3-Ib)_FW|=FVb)tUsL?PQ@qp22p>;GiDh;C(F}$-
z1;!=OBkW#ctacN=je*Pr)lnGzX=OwgNZjTpVbFxqb;8kTc@X&L2XR0A7oc!Mf2?u9
zcctQLCCr+tYip<jrMK$>a_k=;1ETIpHt!Jeo;iy^xqBES^Ct6-+wHi%2g&)?7N^Yy
zUrMIu){Jk)luDa@7We5U!$$3XFNbyRT!YPIbMKj5$IEpTX1IOtVP~(UPO2-+9ZFi6
z-$3<|{Xb#@tABt0M0s1TVCWKwveDy^S!!@4$s|DAqhsEv--Z}Dl)t%0G>U#ycJ7cy
z^8%;|pg32=7~MJmqlC-x07Sd!2YX^|2D`?y;-$a!rZ3R5ia{v1QI_^>gi(HSS_e%2
zUbdg^zjMBBiLr8eSI^BqXM6HKKg#@-w`a**w(}RMe%XWl3MipvBODo*hi?+ykYq)z
ziqy4goZw0@VIUY65+L7DaM5q=KWFd$;W3S!Zi>sOzpEF#(*3V-27N;^pDRoMh~(ZD
zJLZXIam0lM7U#)119Hm947W)p3$%V`0Tv+*n=&ybF&}h~FA}7hEpA&1Y!BiYIb~~D
z$TSo9#3ee02e^%*@4|*+=Nq6&JG5>zX4k5f?)z*#pI-G(+j|jye%13CUdcSP;rNlY
z#Q!X%zHf|V)GWIcEz-=fW6AahfxI~y7w7i|PK6H@@twdgH>D_R@>&OtKl}%MuAQ7I
zcpFmV^~w~8$4@zzh~P~+?B~%L@EM3x(^KXJSg<wVEvJN(*DSLK{@lLZ^>c6I=;)B6
zpRco2LKIlURPE*XUmZ^|1vb?w*ZfF}EXvY13I4af+()bAI5V?BRbFp`Sb{8GRJHd*
z4S2s%4A)<beb5!5W2AL1ws>6Uc=PK%4@PbJ<{1R6+2THMk0c+kif**#ZGE)w6WsqH
z`r^DL&r8|OEAumm^qyrryd(HQ9olv$ltnVGB{aY?_76Uk%6p;e)2DTvF(;t=Q+|8b
zqfT(u5@BP);6;jmRAEV057E*2d^wx@*aL1GqWU|$6h5%O@cQtVtC^isd%gD7PZ_Io
z_BDP5w(2*)Mu&JxS@X%%ByH_@+l>y07jIc~!@;Raw)q_;9oy@*U#mCnc7%t85qa4?
z%_Vr5tkN^}(^>`EFhag;!MpRh!&bKnveQZAJ4)gEJo1@wHtT$Gs6IpznN$Lk-$NcM
z3ReVC&qcXvfGX$I0nfkS$a|Pm%x+lq{WweNc;K>a1M@EAVWs2IBcQPi<R5t!qadV8
z`@w2vB^p<`Z$u8twt230^FDUXk@KFGRjk|Wy)IU*vs&-S4^@ur^QOw}{f&PX2ZUtx
z2^VHiFLv0j^tM_qTCdnm{?$%kSnzz+Rz#c}<%d@@&Y%vBngG@bQjNu*$QIzHiMtlr
z%<!I8J_+!}g1P;40riIDVp#J58>EJNt}+Ea8~WiapASoMvo(&PdUO}AfC~>ZGzq<X
zA{wc(2{B`w8<FdY#fUA=!$2hWfZJFFh^biG^FRul&;5HGQt3HYB*8-U;tAm`ZDrW?
zLGzSCAtG}^Y%BI&AQbV|jc8`aQkJs}$KZGr4&D`BKH5)pk?++zISItrK-zIx+|7D6
zd{(|~knMc?H%TN~Ttm8w#&X{*x_x0Tx_urTbWQT(rM-zoT(XUHVI3m?V@uQP4J|db
z_OkbMEz8a;6}80;ZBwYhBLn3A0_Q%9Xo7*<Qa^td-Q$KXkb<^$rXNS+J!!v~e_27-
z?B(DtKu5zrraAfXQ`1kqTCnO1=JFF~4jJA+&eXD+hsTX=d50Jrj6yJ)U-=XHF8z-o
z1o@Y7@sl2x7U<!Ygv?%s5eyX!wKt`l=(%|REJ0yS<TOH?s9B)is6Iv13lr}2%hiI}
zPUW^d?_dD#I&an8I8t^fY)SnDOhO39OTDNje$JA5dr5!UH92rZ)87wX;yQSp&mZg<
zmgmz=w6D&%v&B;c-vM3DEvl$Gev##x*ndtU#f^N2I}99-3HZpRE^$`D%!0A_ujaQb
zI5z(Mh2X@IN1#BF?<;^jK#~(MAEc`h<3P$Nghud=)(&&|-qnC?^x{5VK>Wjd)4no(
ziLi#e3lOU~sI*XPH&n&J0cWfoh*}eWEEZW%vX?YK!$?w}htY|GALx3;YZoo=JCF4@
zdiaA-uq!*L5;Yg)z-_`MciiIwDAAR3-snC4V+<n|J*V*n#h?&wg+C8sg$z312~u%3
zz$RVnQhlm*2c)>KA>&V%Ak;p{1u>{Lw$NFj)Yn0Ms2*kxUZ)OTddbiJM}PK!DM}Ot
zczn?EZXhx3wyu6i{QMz_Ht%b?K&-@5r;8b076YDir`KXF0&2i9NQ~#JYaq*}Ylb}^
z<{{6xy&;dQ;|@k_(31PDr!}}W$zF7Jv@f%um0M$#=8ygpu%j(VU-d5JtQwT714#<!
z&vm@KPB=l<TMpuv%DS+RW~~WnEOz5WiaSxW4<ph#&0;zqiCMt1ekX<hrb8#^mBYaW
zJA2vi7UWJVhfbeu%Rejgz>f0z+Cm$F9J<FFP&8OfSp_OMl7>jGr_G!~NS@L9P;C1?
z;Ij2YVYuv}tzU+HugU=f9b1Wbx3418+xj$RKD;$gf$0j_A&c;-OhoF*z@DhEW@d9o
zbQBjqEQnn2aG?N9{bmD^A#Um6SDKsm0g{g_<4^dJjg_l_HXdDMk!p`oFv8+@_v_9>
zq;#WkQ!GNGfLT7f8m60H@$tu?p;o_It#TApmE`xnZr|_|cb3XXE)N^buLE`9R=Qbg
zXJu}6r07me2HU<)S7m?@GzrQDTE3UH?FXM7V+-lT#l}P(U>Fvnyw8T7RTeP`R579m
zj=Y>qDw1h-;|mX-)cSXCc$?hr;43LQt)7z$1QG^pyclQ1Bd!jbzsVEgIg~u9b38;>
zfsRa%U`l%did6HzPRd;TK{_EW;n^Ivp-%pu0%9G-z@Au{Ry+EqEcqW=z-#6;-!{WA
z;l+xC6Zke>dl+(R1q7B^Hu~HmrG~Kt575mzve>x*cL-shl+zqp6yuGX)DDGm`cid!
znlnZY=+a5*xQ=$qM}5$N+o!^(TqTFHDdyCcL8NM4VY@2gnNXF|D?5a558Lb*Yfm4)
z_;0%2EF7k{)i(tTvS`l5he^KvW%l&-suPwpIlWB_Za1Hfa$@J!emrcyPpTKKM@NqL
z?X_SqHt#DucWm<3Lp}W|&YyQE27zbGP55=HtZmB(k*WZA79f##?TweCt{%5yuc+Kx
zgfSrIZI*Y57FOD9l@H0nzq<E4Q@_YK<1;`>Ou|Bhrm&^m_RK6^Z<^N($=DDxyyPLA
z+J)E(gs9AfaO`5qk$IGGY+_*tEk0n_wrM}n4G#So>8Dw6#K7tx@g;U`8hN_R<bPv^
zP6}0b!dly7dCc=KnICM>;^Uw9JLRUgOQ?PTMr<oQ9o~>4YD5H7=ryv)bPtl=<&4&%
z*w6k|D-%Tg*F~sh0Ns(h&mOQ_Qf{`#_XU44(VDY8b})RFpLykg10uxUztD>gswTH}
z&&xgt>zc(+=GdM2gIQ%3V4AGxPFW0*l0YsbA|nFZpN~ih4u-P!{39d@_MN)DC%d1w
z7>SaUs-g@Hp7xqZ3Tn)e<dV~D-0@M0u`KSW@qBLlIFNKze0?;|tm!<F9_5{TDKnUY
zJB8#(%G(di5;`|v12#{)=^Bhy!6zu5lq~#Rj8QgnK?%W-bqS8Lq9_xGRU?MD1Z_M>
z7x^sC`xJ{V<3YrmbB{h9i5rdancCEyL=9ZOJXoVHo@$$-%Za<Y<=Dws@<HVOn84kp
zy7czzAj#&D?|uHYH^U!oq7C#CS4C-HKPWUJ-r}5;#IkR`+-?7IMg|O#r^#PS@coAT
z<xl(XMO(JUH%Fc8@Q;tlw>Nm-75Z-Ry9Z%!^+STWyv~To>{^T&MW0-;$3yc9L2mhq
z;ZbQ5LGNM+aN628)Cs16>p55^T^*8$Dw&ss_~4G5Go63gW^CY+0+Z07f2WB4Dh0^q
z-|6QgV8__5>~&z1gq0FxDWr`OzmR}3aJmCA^d_eufde7;d|OCrKdnaM>4(M%4<dMy
z`?Qi<9Ebh#nVT{&VVFv66RU??kcC8}u+l^~F(m>V`PxpCJc~UhEuddx9)@)9qe_|i
z)0EA%&P@_&9&o#9eqZCUCbh?`j!zgih5sJ%c4(7_#|Xt#r7MVL&Q+^PQEg3MBW;4T
zG^4-*<N;_j_KF=#ltp<I^9_IU8#T_ulQ_w;P&0IS=TATWkvf^^ks|nDnb@T^ShFUW
ztuyr~q)6&!?68RQ-V8G+#+EoOhWE-6A7rk5HfHxAG?Sknf`kY=i0}11&e`cz`MCO{
zQd*rofIJ{OtoMr$=gf?H!$EPT16>8L%s|A}R%*eGdx&i}B1He(mLygTmIAc^G(9Si
zK7e{Ngoq>r-r-zhyyg<ieAPsqNv@SQwQ@xsNn5Vw2I}E18CcU&C?((>K)*9cj8_%g
z)`>ANlipCdzw(raeqP-+ldhy<kGNs8`S#*G-e>Uv_VOht+!w*>Sh+Z7(7(l=9~_Vk
ztsM|g1xW`?)?|@m2jyAgC_IB`Mtz(O`mwgP15`lPb2V+VihV#29>y=H6ujE#rdnK`
zH`EaHzABs~teIrh`ScxMz}FC**_Ii?^EbL(n90b(F0r0PMQ70UkL}tv;*4~bKCiYm
zqngRuGy`^c_*M6{*_~%7FmOMquOEZXAg1^kM`)0ZrFqgC>C%R<qRBgHG)$UB@XBA@
zshx3_1QSr};A7TJ_s8FNBrzB>JvQSo_OAA(WF3{euE}GaeA?tu5kF@#62mM$a051I
zNhE>u>!gFE8g#Jj95BqHQS%|>DOj71MZ?EYfM+MiJcX?>*}vKfGaBfQFZ3f^Q-R1#
znhyK1*RvO@nHb|^i4Ep_0s{lZwCNa;Ix<{E5cUReguJf+72QRZIc%`9-Vy)D<o;c>
zWKhb?FbluyDTgT^naN%l2|rm}oO6D0=3kfXO2L{tqj(kDqjbl(pYz9DykeZlk4iW5
zER`)vqJxx(NOa;so@buE!389-YLbEi@6rZG0#GBsC+Z0fzT6+d7deYVU;dy!rPXiE
zmu73@Jr&~K{-9MVQD}&`)e>yLNWr>Yh8CXae9XqfvVQ&eC_;#zpoaMxZ0GpZz7xjx
z`t_Q-F?u=vr<JfY4KbWG<xAz}usjoo`>RPaj3r<9&t6K=+egimiJ8D4gh-rUYvaVy
zG($v+3zk5sMuOhjxkH7bQ}(5{PD3Mg?!@8PkK&w>n7tO8FmAmoF30_#^B~c(Q_`4L
zYWOoDVSnK|1=p{+@`Fk^Qb81Xf89_S`RSTzv(a4ID%71nll%{Wad$!CKfeTKkyC?n
zCkMKHU#*nz_(tO$M)UP&Zf<GNy8?Xs8hUzIu0nqFC9@Ka{&R$vXnbN*?hR?iwv-x*
zPrH;>J#*q(0Gr!E(l5(ce<3xut+_i8XrK8?Xr7_oeHz(bZ?~8q5q~$Rah{5@@7SMN
zx9PnJ-5?^xeW2m?yC_7A#<rjP_en{9P5bFL68vgKu`Lv^loBE5&?9+BtYGMUT06bd
zXEt*_Sdl_o?{!kSnxeJB_xVtFwR-bF`2MlsSO1bZtN)M(j%)mHVUj4b&G~L_`|PNv
zb05EL`!%-lV_>WK*B@oIy*Y@iC1n7lYKj&m7vV;KP4TVll=II)$39dOJ^czLRU>L>
z68P*PFMN+WXxdAu=Hyt3g$l(GTeTVOZYw3KY|W0Fk-$S_`@9`K=60)bEy?Z%tT+Iq
z7f>%M9P)FGg3EY$ood+v<G?d-tNS5y+I=S1dlJZvs-NC{^w-&Jr{gfwR>$pdsXvG?
zd2q3abeu-}LfAQWY@=*+#`CX8RChoA`=1!hS1x5dOF)rGjX4KFg!iPHZE2E=rv|A}
zro(8h38LLFljl^>?nJkc+wdY&MOOlVa@6>vBki#gKhNVv+%Add{g6#-@Z$k*ps}0Y
zQ=8$)+Nm||)mVz^aa4b-Vpg=1daRaOU)8@BY4j<Xy)*mrZf+Eqj^RX06GbC^vLKT|
zpteFBLq#626+?=M@k2|V@k{2aN?cRlCum?`TP_u}%3Y{AVZHbKwm{q2d`D~XsJSyD
zl=xk@5@i0e1=0fu$jfj1+lTA1h#%78*$MuUCU^B9>S>=5n#6abG@(F2`=k-eQ9@u#
zxfNFHv=z2w@{p1dzSOgHokX1AUGT0DY4jQI@YMw)EWQ~q5wmR$KQ}Y;(HPMSQCwzu
zdli|G?bj(>++CP)yQ4s6YfpDc3KqPmquQSxg%*EnTWumWugbDW5ef%8j-rT#3rJu?
z)5n;4b2c*;2LIW%LmvUu6t1~di~}0&Svy}QX#ER|hDFZwl!~zUP&}B1o<!gKVHBj1
z!0%hK_{Iy`*BgY<Qck8#<-rH4Lg1;Qj-hq2OvPXM$(Gkmg`0T7B6Gm*>KAxIzt~so
zb!GaJYOb#&qRUjEI1xe_`@<o~iP+Rf(GIMHq*yg6%vf7Mu<-aQ)$}%3o$R+x;;~W%
zCQ~RFyB5g)F1k-t!#^TN>7qv_-LggQ$JE8+{ryT4%ldwC5ete+{G3C#g@^oxfY3#F
zcLlj(l2G8>tC<5XWV|6_DZQZ7ow?MD8EZ9mM2oV~WoV-uoExmbwpzc6eMV}%J_{3l
zW(4t2a-o}XRlU|NSiYn!*nR(Sc>*@TuU*(S77gfCi7+WR%2b;4#RiyxWR3(u5BIdf
zo@#g4wQjtG3T$PqdX$2z8Zi|QP~I^*9iC+(!;?qkyk&Q7v>DLJGjS44q|%yBz}}>i
z&Ve%^6>xY<=Pi9WlwpWB%K10Iz`*#gS^YqMeV9$4qFchMFO}(%y}xs2Hn_E}s4=*3
z+lAeCKtS}9E{l(P=PBI;rsYVG-gw}-_x;KwUefIB@V%RLA&}WU2XCL_?hZHoR<7ED
zY}4#P_MmX(_G_lqfp=+iX|!*)RdLCr-1w`4rB_@bI&<E#m-6fJX?!@HMojcz?@FV(
zEwb`K9p)6DH8Vt-HX;X2^%28zP(BOT@+<+Oy5Uv8eD=4p<t0n4?tw(5<&#sr?h6zV
z!&Zb?gM&8<%??jXTdmMb1(#@6)m(rk*#aUo^iqOs4-#{`NA;|yExPzdS?_q~O>Uz#
z!>9C3&LdoB$r+O#n);WTPi;V52OhNeKfW6_NLn<EDp2Lr=qOaId}Ifx9lEG?H#PEN
zbI74Vx*PNK+cvB53_AWmzs=zCb5!9-mCcW#<QbIdOJM|=ASw5QpF+P}oobETGwNf<
z0{kapJo<fgf(@=YJA0C%pNqB2CMVFcToi3AV3#1!n@Z&vX@98&`Sz6*SUYY~uWq>w
zpFTuLC^@aPy~ZGUPZr;)=-p|b$-R8htO)JXy{ecE5a|b{{&0O%H2rN&9(VHxmvNly
zbY?sVk}@^{aw)%#J}|UW=ucLWs%%j)^n7S%8D1Woi$UT}VuU6@Sd6zc2+t_2IMBxd
zb4R#ykMr8s5gKy=v+opw6;4R&&46$V+OOpDZwp3iR0Osqpjx))joB*iX+diVl?E~Q
zc|$qmb#T#7Kcal042LUNAoPTPUxF-iGFw>ZFnUqU@y$&s8%h-HGD`EoNBbe#S>Y-4
zlkeAP>6<Z7QQ9XL^<-l?vhbA^VVM{w_AGyBxGo2D4xc6Tl~BnC{PHYDLP{4>2k~-N
zHQqXXyN6<L3Gg$i2mMBKaSbx<i~TEhvQ{`W#&P&}*M*bY-+RuxoiU+jyjZtu*2#d`
z4;V{mY|5$$TfD^8s7AA{v{=Q~S8RRnPkT2vB+qp-b$~mY>7hGD6CxQIq_zoepU&j0
zYO&}<4cS^2sp!;5))(aAD!KmUED#QGr48DVlwbyft31WlS2yU<1>#VMp?>D1BCFfB
z_JJ-kxTB{OLI}5XcPHXUo}x~->VP%of!G_N-(3Snvq`*gX3u0GR&}*fFwHo3-vIw0
zeiWskq3ZT9hTg^je{sC^@+z<IC+@jyb5}hL&*c9&Uv=C+8r5MFr<BeiUxikY7v-2j
z#^Wp1Woo#;-OnJd6+u?>3FAd}KNhbpE5RO+lsLgv$;1igG7pRwI|;BO7o($2>mS(E
z$CO@qYf5i=Zh6-xB=U8@mR7Yjk%OUp;_MMBfe_v1A(Hqk6!D})x%JNl838^ZA13Xu
zz}LyD@X2;5o1P61Rc$%jcUnJ>`;6r{h5yrEbnbM$$ntA@P2IS1PyW^RyG0$S2tUlh
z8?E(McS?7}X3n<sX7)_F=$tGzECOdx`5F$56$H6$2HeHDocU>AAJs2u_n{^05)*D7
zW{Y>o99!I9&KQdzgtG(k@BT|J*;{Pt*b|?A_})e98pXCbMWbhBZ$t&YbNQOwN^=F)
z_yIb_az2Pyya2530n@Y@<KMNVgC+@Hh^eD5>s>s>n?L79;U-O9oPY$==~f1gXro5Y
z*3~JaenSl_I}1*&dpYD?i8s<7w%~sEojqq~iFnaYyLgM#so%_ZZ^WTV0`R*H@{m2+
zja4MX^|#>xS9YQo{@F1I)!%<Q9x6E+JCnjAm>RhM{4ZUapHTKgLZLcn$ehRq(emb8
z9<w{<)uy~=x}G;ZX+CDl#T7`~iRBx5XO`@><&Nx*RLcS#)SdTxcURrJhxPM2IBP%I
zf1bWu&uRf{60-?Gclb5(IFI*!%tU*7d`i!l@>TaHzYQqH4_Y*6!Wy0d-B#Lz7Rg3l
zqKsvXUk9@6iKV6#!bDy5n&j9MYpcKm!vG7z*2&4G*Yl}iccl*@WqKZWQSJCgQSj+d
ze&}E1mAs^hP}>`{BJ6lv<q%AGiq()8hz}1^1ex;^<jj#cc=g{s#0iIU-+2jVmxWDS
zd7qq)5u4+Paaui>*>0-ft<;P@`u&VFI~P3qRtufE11+|#Y6|RJccqo27Wzr}Tp|DH
z`G4^v)_8}R24X3}=6X&@Uqu;hKEQV^-)VKnBzI*|Iskecw~l?+R|WKO*~(1LrpdJ?
z0!JKnCe<|m*WR>m+Qm+NKNH<_ye<gDWD0Fl@Ho4<!fm=u&SGgDO!cbo+8PUwfWk+V
z)@b~#GtD0d4#K=39kiev5hj=8h(Nljd<HunOw<O@9z?#m(rb)ZnCBDPu~!uM>fIml
z+x32qzkNRrhR^IhT#yCiYU{3oq196nC3ePkB)f%7X1G^Ibog$ZnYu4(HyHUiFB`6x
zo$ty-8pknmO|B9|(5TzoHG|%><C<pr4&IxzPg{!KcQqRSE~Tvrur~GxUa*ce)ipeE
zWgS=NE-mtVKb)JH#~V9~Hf<heFWK%N<`blD%sTD$A|XGR=J%4vWJQ9B3q;($v$3~e
zpgG#}?8+2jU@b$OcWYMF>s#7)CM(i=M7Nl=@GyDi-*ng6ahK(&-_4h(lyUN-oOa$`
zo+P;<GhFDlQ-b}GJ)A97b8DT!@21D?+G`33xflj&^Ajw)WxefL*Yy?uny35myNvN;
zJu2^EIk(I5BXd2N-yKn?<jAHF(>C4d@m^p9J4c~rbi$rq9nhGxayFjhg+Rqa{l#`Y
z!(P6K7fK3T;y!VZhGiC#)|pl$QX?a)a9$(4l(usVSH>2&5pIu5ALn*CqBt)9$yAl;
z-{fOmgu><7Y<XFolPQk)mb~-4Wz2OqAihGXbfUWv<O@$JoEd1wcAoD{S1ZgFTS^!t
z+_d^VD?_*`AXb~e&yM8k-n#rSNZe`F1hkVx1o46tWKB^*u4Iztzf9jS`;huL0efN_
zw(C5^O4iFb>J5k>*0Q~>lq72!XFX6P5Z{vW&zLsraKq5H%Z26}$OKDMv=sim;K<Yz
zr-(K#w$yhGyI)R05r<FcNBPUs!f8{%L|!+M;WNfIk0#<kNVlmop1dan3IH7GPG0zR
zbu5#oKma)07cl(sMbhFbgIx|mM?)DnP$;1oA~OW0kph!a5>?vsoVs(JNbgTU8-M%+
zN(+7Xl}`BDl=KDkUHM9fLlV)gN&PqbyX)$86!Wv!y+r*~kAyjFUKPDWL3A)m$@ir9
zjJ;uQV9#3$*`Dqo1Cy5*;^8DQcid^Td=CivAP+D;gl4b7*xa9IQ-R|lY5tIpiM~9-
z%Hm9*vDV@_1FfiR|Kqh_5Ml0sm?abD>@peo(cnhiSWs$uy&$RYcd+m`6%X9<SS+iH
zB{MTIilfs+m}FIm`WFe<b<`1NL(_5%pWxy`61V?hXOmI!N62_Zv-n^jPyCieqxTv3
zu0_=zb8f!dMp?R&UxGJe1qNBBRLXVmj-(R6+9rkXoo6CT-@FKe>FN%?<F{pFRdeJu
z{9WJNuwr(Se^zX7t-vqF<$J*yv&MnYO_uaKBS^eIab7YX1r1^(=OyZJp!PzX%0e7b
zeEpxGl+qFvtIR-KD}KZT9sfArU;dGM3-23I#q69NU-%A?w~!T{F+*-_Lil`8wsSSR
zeW-s?xK)R5p&SHb*TI!J314$wOF*NT7qT*&*Og`^+jXq)LaOJ8#&*`Gy)1X0+KiH$
zU-5JNg0Goq-9^C#_ZqHXSIP}b7@(P=L?LSJk~7{IhyH9xAy{$zEDuPUgJ_RJae#PE
zOqO-BK*KnjogIL_)Jz3RACJUY?ZEW~+1H$~{2k_o%Y(uIH3R6z`K|NdGL!=5lV$Vc
z*(&fGI7OherXM4x!s0w3{b4Ax#6<l}lTU2>w}s~Q=3!pJzbN~iJ}bbM*PPi@!E0eN
zhKcuT=kAsz8TQo76CMO+FW#hr6da({mqpGK2K4T|xv9SNIXZ}a=4_K5pbz1HE6T}9
zbApW~m0C`q)S^F}B9Kw5!eT)Bj_h9vlCX8%VRvMOg8PJ*>PU>%yt-hyGOhjg<ke2;
z7Th2%k_wZpW!A{?Dn2nLFJ4=lqYa4jV<d3;8-+Dg@?%0IvOWsDfrv_`J~>!2pZR4{
z=VR_*?Hw|aai##~+^H>3p$W@6Zi`o4^iO2Iy=FPdEAI58Ebc~*%1#sh8KzUKOVHs(
z<3$LMSCFP|!>fmF^oESZR|c|2JI3|gucuLq4R(||_!8L@gHU8hUQZKn2S#z@EVf3?
zTroZd&}JK(mJLe>#x8xL)jfx$6`okcHP?8i%dW?F%nZh=VJ)32CmY;^y5C1^?V0;M
z<3!e8GZcPej-h&-Osc>6PU2f4x=XhA*<_K*D6U6R)4xbEx~{3*ldB#N+7QEXD^v=I
z+i^L+V7_2ld}O2b-(#bmv*PyZI4|U#<t4E{c3+Oa>Q5|22a(-VLOTZc3!9ns1RI-?
zA<~h|tPH0y*bO1#EMrsWN>4yJM7vq<?d%8sAQUGrndP7J-=xw$nCMSpe7!xoUBNp3
zGTsNoHNSmE+wi-t?Vjri@)nrwy)cL`f%zSrKknks+ReH>FZr?uw$H8*P<CaW^*(*P
zrk<ZDEOj-RoW=I>hiHRQg1U9YoscX-G|gck+SSRX<zu*#%uOZJ$&`iwbI4f^EJ9pa
z@T8p1=V0x-K77AYupaOqRJ8Y8`CFqe-OG4O?Pk+3)K=lIg7Aj+5B{LP8{|uD9bb*L
z=JkjZ*a>!(e7@~eeUEw+POsT;=W9J&=EV`cUc{PIg_#TQVGnZsQbCs7#Q-)<h~+VJ
z%O_$A%X$-T2gv^1iV6X%A*e(F(fO?hnMA3<=C!;L;mUog>v#BicxLw#Fb?#)8TYbu
zN)5R=MI1i7FHhF|X}xEl=sW~`-kf;fOR^h1yjthSw?%#F{HqrY2$q>7!nbw~nZ8q9
z<TlAz0DCai`eopoTgUXKr$&x3a%Yszt2{+eo;=r&?LuF;Zj%RNLHAg=LM|in10Rm2
zxd6;k(nHtRPkOmYqHW7fNcCybHEd(KrX46#z77Z9Q1dkPl|2ZTAjBY-ol(B)e&98T
zgr-$?X`Ytyy13^aY2fa`@Y1*X*i2)xR`@;KF^;++G5hoP)3auvu~w3;5+L|E0eJ^s
zgZRj(m;s_<P67c5tRN5r2qBB}z`g`y!oX~V8oXD2oDd8#khWZ&toq|9@%NQ>h{vY!
z<QL?e6`jG`+hK%nypIRco?pA%s6+zYx(b~=Fi(E95-40VeV5w!L2#*>%i=H!!P&wh
z7_E%pB7l5)*VU>_O-S~d5Z!+;f{pQ4e86*&);?G<9*Q$J<tS(vm9lEGpTY@s(2ek+
z8c`{)@2$sFJY{r$73(<V2UKiNm)(n(&DNp1&6b1{q_xZVGIdKSwV*O`Z3q;#cCe`U
zk~C47tS5LEB&@mN%p)_=XY@OEf&MPgH{St5oHz7A*3o-mSC#2S@XC^m@?vD0WoA3+
z%jkw-8_?@Gk~M`p*@7Cp@q?r=ifcr#f5J(+ee*SCy-59!ceTk_CH8c7hwjNA;pzKD
zr8zf+A(f>EJ!ZxY;Oj5&@^eg0Zs!iLCAR`2K?MSFzjX;kHD6)^`&=EZOIdW>L#O`J
z<!j^{WZ{m%sbn?E@W3)ou>f~$M4}JiV}v6B-e{NUBGF<D@nTna4Fj(s(L&KkX*F3!
zglkC}q4NM*a2HP+ijp5<SToUO6J4Q%w}VEJFwp|MQ|{cP2x=Zt1r&nh4>gj-*H%NG
zfY0X(@|S8?V)drF;2OQcpDl2LV=~=%gGx?_$fbSsi@%J~taHcMTLLpjNF8FkjnjyM
zW;4sSf6RHaa~LijL#EJ0W2m!BmQP(f=%Km_N@hsBFw%q#7{Er?y1V~UEPEih87B`~
zv$jE%>Ug9&=o+sZVZL7^+sp)PSrS;ZIJac4S-M>#V;T--4FXZ*>CI7w%583<{>tb6
zOZ8gZ#B0jplyTbzto2VOs)s9U%trre`m=RlKf{I_Nwdxn(xNG%zaVNurEYiMV3*g|
z``3;{j7`UyfFrjlEbIJN{0db|r>|LA@=vX9CHFZYiexnkn$b%8Rvw0TZOQIXa;oTI
zv@j;ZP+#~|!J(aBz9S{wL7W%Dr1H)G-XUNt9-lP?ijJ-XEj1e*CI~-Xz@4(Xg;UoG
z{uzBf-U+(SHe}6oG%;A*93Zb=oE>uTb^%qsL>|bQf?7_6=KIiPU`I|r;YcZ!YG7y~
zQu@UldAwz$^|uoz3mz1;An-WVBtefSh-pv<`n&TU3oM!hrEI?l@v8A4#^$4t&~T32
zl*J=1q~h+60sNc43>0aVvhzyfjshgPYZoQ(<inR$cERK&%N~SSiy;WaiBTgdl;Bz@
zMx7h{4w6)@f3=XUfD<5b*Di$-gK~XeKu8qdfa(KL$OL~#uI0n&gFVreVt1RX*+{5+
z#8$4WWjNT2me=PpYKo4u#73>OOh>LbUIoblb@1z~zp?))n?^)q6WGuDh}gMUaA9|X
z3qq-XlcNl<s-dSKro}45AbD<^IA@6tvSaLv-;sRc5uLj-i(AB^*}0)lznJ6A48b01
zt^mDP9!TqxILrO*cRjO@t^fSYOWb`|vQ*V4*6V-Ii_hT$&15AhsiGo@jvJCCnY0);
z)Gbzh<7K3LRm`L**mLt1MLc+MqqaWkz{2JV0hUf-(7U6vlP$%@`2fR-Dt+r$66q)X
zh2sR=$#8zbejz`}<A~Y#k!TUpiD??3amyj(E}M)o)o#H-j|LmgBHBXsF9$ok?Wh84
zoxjF*=Hw;;!?a%bcJVG|FBP7@_uu_xpir_`+UDHcZX;}|^THjvjdPRUJ+HO3O$%_*
zsal`RIk@07Cuvh)iE1gNnn7n}$9q`Da-o@9CupmsX{@4y;aIQ1WV^7X(Rcx&McA%o
zqa*mh{MZ+m6i(RP#X)4DdX;+iKAzev_!HbYetk>dy5==T4rq*~g@XVY!9sYZjo#R7
zr{n)r5^S{9+$+8l7IVB*3_k5%-TBY@C%`P@&tZf>82sm#nfw7L%92>nN$663yW!yt
zhS>EfLcE_Z)gv-Y^<SaxB6gHmR|E)iyYeg|g|R}ujv8tMcq*gC>h1;xj(<<JyurkO
zku;yk5>4nD4GY{C-nWUgQc9cMmH{qpa!uEznrGF^?bbJHApScQ$j>$JZHAX80DdXu
z--AMgrA0$Otdd#N9#!cg2Z~N8&lj1d+wDh+^ZObWJ$J)_h(&2#msu>q0B$DEERy{1
zCJN{7M@%#E@8pda`@u!v@{gcT3bA*>g*xYLXlbb&o@1vX*x+l}Voys6o~^_7>#GB|
z*r!R%kA9k%J`?m>1tMHB9x$ZRe0$r~ui<kO`4q0h1q9yWTy1Vw;6%l{l&HBbZk8-0
z4ijBu+y@{d)|{@F;ZFKw{xPkg5F+CDU-3fF>}X}jOC)9LH=Po*2SLdtf3^4?VKn<h
zHzQbKiZ9a#y^bZOa6n&Wk$r`rPcR^1TWQZWl`R8PvM?r?^F}g*>u2ox&mV~0oDgi`
z;9d}P$g~9%ThTK8s}5o<m&w0gVXSc39p)SfaC_U5P2<JPm~s|o1ZFngBTt(DrBI%x
z4kDX}YqUJKdxxsso$;8{1MQ;f+HD&9TGSGCQS)Y9GN_l)t8XY5-si=Gs(k<5;!fvW
zxE8*OW}N`jlcqPjb~+szeAOl~e_-nyQAfun)m7Qku$%99s}G7SNoRK-D2Tt?3bf7l
z_f&iauzO~DnLmd4z7qW{*#v(VPN`62cvfV3MGioX->w2V4?(-lU*ed8ro|}mU}pk%
z;bqB0bx3AOk<0Joeh}Vl@_7Po&C`Cg>>gff>e<EyzTH_%h@VP9GTpHG^0d?A+RMpT
z+TYf8aiHmG?aSY>7fu41U3Ic{JQu1W%+!Gvz3GDO2ixKd;KF6UEw8F_cDAh08gB>@
zaRH2Q96sBJ>`4aXvrF0xPtI<C%^cGg^K!B-fX;2xnF2UCh5PH@z5cKKOHR==RLnzf
zSmET?(5QuFJxq~ag0rPdFM7)-DQc6Kkb_;fb-^S9@$f%6aPJ=U;g7Zr?Ox#q(-JyY
zKvu&Cw@3?z3?xc$8o*T2<9qK!(D=t1JD`+Ta(zAy-y-Frq_L?(ciWSU*N3cXEeC5N
zwIavKBghMD()mO&Qc6^H#jRYCBJ}jZ#?v?4($m6CK2G!{)QNVBe9)sd3#Jc(VH2H^
z=FWxE%(d%&VjzHKBh>WoA1pPsRQtU~xDtnEfTJnl{A9u5pR^K8=UdNq%T8F$)FbN>
zgK+_(BF#D>R>kK!M#OT~=@@}3yAYqm33?{Bv?2iBr|-aRK0@uapzuXI)wE0=R@m^7
zQ`wLBn(M*wg!mgmQT1d!@3<2z>~rmDW)KG0*B4>_R6LjiI0^9QT8gtDDT|Lclxppm
z+OeL6H3QpearJAB%1ellZ6d*)wBQ(hPbE=%?y6i^uf%`RXm*JW*WQ%>&J+=V(=qf{
zri~yItvTZbII+7S0>4Q0U9@>HnMP$X>8TqAfD(vAh};2P{QK)ik`a6$W$n<S7xQ?o
z_{n4xoeaH~jS^3HDy+veci7_+aLh^-n?E!YG6S#O$LPEC_>G<{bR2U<qLrkRpb!v0
z%U*eD$^H(<WG-@VF0k%r-g68(2_6$K`r1T6sUwW?8=<u8q_-5ITGbK36tV>fd!^iE
z#1K58$gW!xpeYHeehuhQCXZ9p%N8m<Fx1W4{1&odf~Dg9N*_P3FP{`cbE*_n{Eco>
zB+l~T_u-Ycr!U><XH<{<R0eR`Jn1$qaE<CV>!?xu!!*6rNxq37{`DhMMfY6NpD3Jw
zkYQDstvt30Hc_SaZuuMP2YrdW@HsPMbf^Y9lI<9$bnMil2X7`Ba-DGLbzgqP>mxwe
zf1&JkDH54D3nLar2KjJ3z`*R+rUABq4;>>4Kjc2i<Dy@)!kC&Aw;NA8e)mD}M7}y*
zi5fe;hrp`ef1|wy(>QEj7pVLcZYZ~pteAG4rm1{><Ecc%k1Tki@ADmF<}mEh$<1ax
zS8dQ&w8<!Cd38+}XJ1#f6|D`7AJ6+Fsr$rBs%wDxJx&tw*&5k&wN_-uj!ur;28wi0
zO+Qvl)mUZbXZm|~oa;LAHy_>PQy<rI@3u-En9*i_l~-?$0z#b@Vco$oFcZc}d3oKO
zD*z%H@Hm`{0l9tDx7KHebXBjGPA%mTPf<pnOy#m~KL9BjL-WcR=L#f{u~T2e78Ilg
z(JT)-B~I|YWyGa#aWq+mx~dt<5RI9)@9nr`in)T{m4a6g9DZqFJ{0ZDQ&w4XPvcfW
z)Zgnax(EnBgW0T@l}fNuwENi8sV_h5iwfdBoer10OP+L`!QRkj>=!QiV5G|tVk)53
zP?Azw+N)Yq3zZ`dW7Q9Bq@Y*jSK0<1f`HM;_>GH57pf_S%Ounz_yhTY8lplQSM`xx
zU{r-Deqs+*I~sLI$Oq`>i`J1kJ(+yNOYy$<j89}LeB{DsRRYsqux%gkK#X#@e^U8%
z#M!7}cTMHu<FLh@jarvDc8P_@QfzNdoQi_n+%?2AM>_>R3Jfi680<|^u#J@aY%Q>O
zqfI~sCbk#3--^zMkV&Yj0D(R^rK}+_npgPr_4^kYuG=pO%$C_7v{s@<a9Q#wuB)t?
z#;9BrH!k(Q*;IUj?T<*@HX2{0em!6debb4D8+OTu+|0s%`KdJcokszE{b|_{ztw|2
zP8WR(1+AaeXov%C!=7CsT*LuDx^}pAS;||)2N$TDO}r&-q#K7;nWjNxk~onpjleeK
zUPThfcj0^+;uf%68trL0i1;=y3B3G^4+!l>-{M-P@RL3^<`kO@b=YdKMuccfO1ZW#
zeRYE%D~CMAgPlo?T!O6?b|pOZv{iMWb;sN=jF%=?$Iz_5zH?K;aFGU^8l7u%zHgiy
z%)~y|k;Es-7YX69AMj^epGX#&^c@pp+lc}kKc`5CjPN4Z$$e58$Yn*J?81%`0~A)D
zPg-db*pj-t4-G9>ImW4IMi*v#9z^9V<wSEy0;H<_ip{R`3n$&`z?qY&+x1%E`|f!X
zF^6qcbMj~^Y|&mU__An*YVWv%D)nfhgB<CJl`_02TU%zkuVLq-ifv^5t4@48WjUK6
z<1pI%d1Hq!eHx}*)cFId$Vc5Z{|e7mEOmtuWJf&C8D27?iS2&%o3DCSW(Dy{q!vBU
z<@J%bdvlGuCbxSa3MmV6=PD4kiAVQdnmr=bOicK#q7Xa-!xi^j8Y6rBUZPWqHJ^kK
zO^AmTc89bc5I+T$XZ64^_c1Pnu-4Kq8TW>D9h@9t;3jMAUVxt=oor+16yHf{lT|G4
zya6{4#BxFw!!~UTRwXXawKU4iz$$GMY6=Z8VM{2@0{=5A0+A#p6$aT3ubRyWMWPq9
zCEH5(Il0v4e4=Yxg(tDglfYAy!UpC>&^4=x7#6_S&Ktds)a8^`^tp6RnRd{KImB^o
z2n=t#>iKx<*evmvoE{+fH#@WXGWs$)Uxr<sPjul^54Bff9y%ZVHz+5}qAbDf+|fnm
zNd{_kS$6bt11Qz5?-m)?lU>tf?r>AaxV0?kf0o@oDboJ6z0cgP@A$;k>SK1UqC?Q_
zk_I?j74;}uNXhOf_5ZxQSgB4otDEb9JJrX1kq`-o%T>g%M5~xXf!2_4P~K64tKgXq
z&KHZ0@!cPvUJG<f9>4kw-0;tPo$zJrU-Nop>Uo65Pm|yaNvKjhi7V1g98;^N1~V3%
zTR>yWa+X2FJ_wpPwz3i^6AGwOa_VMS-&`*KoKgF2&oR10Jn6{!pvVG@n=Jk@vjNuY
zL~P7aDGhg~O9G^!bHi$8?G9v9Gp0cmekYkK;(q=47;~gI>h-kx-c<vM%*#w&fX{!h
zF%L>eM{ml$#8KI$4ltyja<rI2qq{$AR1|U_tFD)9Y-d_jShjldAw-)(k${x89fc)V
z^uj$O=9MXT2cL+;^v%uZ%TIiT&+A8q@<LEWivxLuc7cEhkMJup7#M4iRHWn;gs)|%
z*`|SUEl(kbPZ=F^TZ)n%ySX6erWcgVc`2wiVw2VTP%;PP;UMWPi0k}AaIl!DD+>qP
zki^cyDERloAb)dcDBU4na9C(pfD{P@eBGA}0|Rb)p{ISqi60=^FUEdF!ok{Gs;vb)
zfj9(#1QA64w*ud^Y<WE?99td@r;1MVEDo>sN5&PeiI>c`VioE8h)e}W%S9NMA55Gs
zrWL6l+@3CKd@8(UQLTwe12SGWMqRn+j)QZRj*g)Xua)%ayzpqs{pD(WWESJYL3{M$
z%qkpM`jFoqLYVv6{IbCkL?fEiJj$VG=$taup&RL9e{s(Sgse2xVJlw0h74EXJKt<N
zv_^nt|CWo1^pEn7x}Dzrxu#9#iylF>2<mjN(C1_G037wJ*c!9$6Ya%e(y$WXL!EqA
z8HVt{2cY#I$^(s5lIv2_V)0(hY4lKgWN5U}$n%K8Jg_QsDR2~!MLCfAxETJK@puD+
zRpJ+#PBP2wu|C*%vKJ>eX|dx<CQ&quy2)IJEnV9z;^O>z{->0)3W`JN7Bv!rLvRZc
z0tAOZ2yVe4g9iq826qXAg`f!*+}(o1;1FDb>kKexumFS40KvK0yH1_@Z=LgWZ+}(Y
zwYsa;OLz6tTA%gS=>8$=Z7pLh>|K2QElL)E=Q*(n*H`8R`8={-@4mTD-SWBOYRxV?
zmF(-rJB8^Wlp?319rTrh^?QEP?|Msxrv?WbJ-+id+V#F2Y4(JPJ6U9bv+U1cIIH^W
z)lg$_=g^Ma>2~Pyd_YOAv29Cb-U6DJO?NxnW7~QP*SmYi*vdUVuW#LWQ_u0`hymZi
zaQS3Nb^4`ro$>0G%zbXmr5|D|iq0R<;S@?kr0j5Ruq87-Z1>crx%EzVZ9#U;{?}ti
zW2W%*9MQg3Nbh%Ti6LhDd|-aFSgXoPG`mHlUU1iCHr>ru>DX?W_#13(`u*!Plu2OP
z6jk=2>BC0l)aw<WV`x+C!_sw{a5i*Q67F^#P-aA<I@z6VbJW-5&rwZfvvRk3_cA8b
z-o}<6m7#V@uDa<CVdlJ4d|5@tUf!yN<DjY-Ylj}w8VTHcITO{giPiM2=!{`C)-kgy
z4M#`;s$Hx(F&Ry_6@hE&#+WZxZsYohII;=<B$l#U>;HCmxoYD1i4b%m$1`DYC_^L~
zIEAnFcHvad=-aO3(_MI=9#`z6-9*_!&$?<%meb5;jG<wc(D1r`!k7AFaq^l6-TVCr
zn@T;NWtk;qx(I~IDg2;{VNza#Y9hnvC&&D^iJtYTc_&lLexMB!uC87mR>d5Qp=MGf
z6BD{%`L#TAOq%z%@*ib95Ey7NbUF=BlszVk3Iu3imD&*91N-ij%hW?W@~2TtdHTfP
z#n0@Xd7X8Dyu36n{k#PwQ~T~X7mAO^cNV+z<<Rr{6qP*fL{*O`It}aSc#<7ICz`zH
zfdvuUP1@TR@FL!bPH1@um7aB~aO<rmJ%*b)*b*mqm<2+)la8vi-b#-P?L4aM?FRQw
z!SL2{$6_lC;MwX~JFGU~u@(2B?<Z2dhI@qhN$Or_U*}$DGND-zz*x~AawYee{HE;I
zGAb(xm0Nq$##BQLFEgd@aqT*NJhB}}du8b8cj%ob49sgx?Oi-i5sJpioR>HO@3X-#
z_@rAn$k~(l@kciCC;&Qd*fWRI>=;fL{UPlciNDWyj$bX<#r^(r;EE8wwUVQm&7~QY
zCXRj!**r^xybAEPq>h3W$uvI1j=yNIyzkE_D7fpGw)OV{U*Uwm{xB;mEg2(|y|ICd
zMdQVqzMb-=XM6|E-a9kNh)^9lY`-DjhhHD1w5lufRcy+QLgJ47!fFn<KQi>e86#F;
zX{ufroVBEZJOY?rDo!;Te6aOZ^1SO!dYRxQ*2njyA~dCWawn)>!*k7~>8Ikt<J9hI
zLTxVl%^kbxFjaJKz4UwX+jy29ohPH6;RO0%T`A|oSHWhqWuNJ8tYd1Xp}S%w!~<wT
zHSeF;1&d?WDhsdZgTM&TfZ@=Pp`{?gU%*=Eo2o<UfasbP*Vgmv1Y;j}@b2Fxb@=4D
zWq$ckb3BOYn%N0MW}!64?YGvuPD`}=WgRB1BPo(kSV>&e*0>>V5ZbO|*1+2LFOqVe
zXHb!aMk03^h%&9L8GMy7UDI2Kev>V@(R}*Iu6x+!Hn4~D@wj`P%#Hdbf(lK{+DD7f
zJ&(v*mhn_e(R$^5L#bM^^Q@-!*b!l|+Xrb(q*MRFJYnrE7*xko!SJOy9LngR2|q5k
zY`Ioiu+YBfzF{Labszk-E#*BYQk>$()=xWEGZRKwY)*UxP}0dGuPLZOk<u~1pRF`m
zxYnI*6_BmyuVfiETJ#r=!}C__TJ(hS&_}hqJq6T(xXbQJ?{M?GH1d;1)n-8$1pDWw
zJw5OAAMQDHK*ksFYeeo`fz$TbpGy<)Wsk%<#FfYFVTT9*sy=H-wkS^x;7&PL{erf!
zzf{M*8sv9&hkoBZuv}-Nb}O!f7}9<9ZL1vRNUZ5T^4kV6WRoRqMQo_+AH>NJDI9Hy
zFjfwiK6RjhH#rHW#B0(MW}i%V`943<6@Z*Nd^JEP5uZonXm=u%AM>{H^U@&Jy*i0s
za_Da^xI6pMtXzHc{e~_ZcnKP*;=YL2Z^RmzDl{dJTk7*}E_h*NvgnhnxVKB59Duh~
zqouS_WoOR*{UvUw_K#OWz;gMracr%8>QQ&V*jv!8)ho;U8}9~8EU{N<=Z_gR%IpMT
zbkePUG_a<Uo93~%MM1nso9|UdE|j>fm=#|iIfFmdqkpLMGxY5D$`?I}&T7>TexU@v
zkBx09kG)O;09ckj#(_Uov6vv{{HOcr-%H#DUQ@*GzF8Zh{iSM13%fuB%>wjdU@3Nf
zlnYE!GTyNrqes|;nLFXfWU*Wg-9wmr=NBd$nCk+H?iwNvcd0Wab^3CT9a`>3V~oWI
z9=<ivyrYLX+hLVmYbCVC7nx>_H+N-Q=M<NIna#%7G#cG5P!5#|H6`sbgz{jBdvfcF
z%F@i>Q(io4u4mpdQ;k&5FXnKV5M7R`@WJ9h(GrAirO#XXOU{qQpk^B^Vd=Dt{wiqT
zg-#j9J~@o%H2;W9mg)o6@*Vo;BSs2*4HAHpDk02mndAsov08R_48zJZ@J)s7+hyCo
zy*0L#y)?AqZt-wX%+_Vx`8*A95OLHvs1$k~{h-_N<KA7r(+uvizi3XCB3#4TpjNrJ
zvai45nQG0Co%wk~tYgN!u~~y2n6k!jjXBHc$+Gq4hqTzEj>_vov_gHJE=`X>L?5K+
zD?u59=mjtImMvd1GsDytuYp{Iy<NXRrLZ4s+5CA`p}CBZMPL-T31R=B$JFH(h7Qq$
zc5;cO7Li&TJM=S4-dTKdpeXu!TD{GoUj}7yzx4mPG(VBO;Kq@rcXv?}P$X>UkW&?h
zF>$#`n$~bZ)KN0B$<p$VcVWI@lvp&2*7))!ZYjjYh^fBV(ceia`pW>XGeMYh&`;g8
zo_2-koaO6+8O!+L>SpIQbG(i;QW9UJi{Ecewlo?s&D!^>i$|#jaW}#HJuxt|W48=?
zb^Y&O$a1s5ddr8DIt!sD!t=y1g(d4GR(s;s-HfV$GXl&m;+sAAxB^rk(3_NjE$p#L
z*t4em?tA0d+XwRxN^OQwzbDZMuSE0J1)Ky{mq)^t4bnSl*)s>zNM@mMdtd78&ebHN
z`!(|lE5q-p+TsRaNnMXwALaN5QIZ2IUi^Z22tsN5>nvIO+YU}Q*xh6}ee6@rR~<&1
z(PB4z>9ZBUMXZwSMmd9-aKKsmJeJq^G|#JclOh*xf0?^e0(`40nsg1z)(48;4}B_(
zGwPI)yo|{oX{dVDL-5-aMGr;~vU1cPtJP5JM(sswz&Q`e<@0?y{YhsO9YK8EYJA;L
z>7oG_Mts+(wCBC*Md82#XdKw&J*IizR?9k^rf1r{Ot-&>V^ke{9nI9zavlcNkIJtN
z7T>?o|4rENk-?|lewZ(EfdR;%BUrzKJ^UkCpsM)EA9QHBVV8trT&*O(9?FO{MLTFL
z=5P0H+T6C^jAuX0k4U;~GM!x`!X2N~3_n?qXY$HI>x@(DHEy&Q3ucT1R6fj28wX!I
zC=&d$@bJ_v^%?W2Ngl}e8ww`b%BrN-PzGH;$@B2Ky1?%GMkm#~Okj(-Admyy;qya|
zOi7<TIqKLJIjsT6%xMurCppK$`tFA>3kr_pwt?5Nj<kh;AkqM0FqJNvpLG2%nBiEz
zf%ifK$Kw|EzR5(&`uXcro~^V8i}*)jhx5-t$rA$`c)ZqIf9DQr!qkCRbJWjUI$JZJ
zm$fJ9L9f6?UO=_r2e^Rac$+nqbYU6z^YgMBa7iN^LoJ4qw_S?6p!J<$X}7t17(?2t
zcE?oZJ$Jvt+q&PyLJYNC4pJ6B2Qde+jOF0Lu$QB|%Hl8GeqMD>3p=&H>81!w#>Agj
z(QXx{j0r=pTl>micAI_5vUw<3`Sht?Z}-j2Wx~<RLz32QGv22&J{94fr~V)YDG95g
zjef+~vo?CO%A&z(jqgjVppWOfXF_a0rF&LK$Mau_gV9Ob!+u&!{<c^Y1J5Po?`a)A
zQzS-wDNMkxF(uva11Qd*)ipedF7L8cQx?g7Pl*j{fhk~H=G{iXJB{lDwggu}3W3aA
zqf(*0b}y=rmt<QkiQ35c+=PEj9}{Iru7J~e%e$QIlUdUy@-hWEOf@ncen^;YeTZ*X
zH+U;(?Wy8Xl+h@nkoL^sjJj(5zUISeV;JWYIiaB7RDchD*VdjmbXj9)pN{CA%vsJg
zciJ6y-i)!8uXW&CN8ViTMaOYPM$w1*SL53`0@H8hO>F8DKCUQrsXl2?W8hur42(F_
zsSJ)_36&x6A|YkY6c<2a94SXbv~d>4CC4nkDPvf9Z5Fys^6^5r0j5=E>Cgy_Dk@tS
z%?c}9!qB?t6t8(XMH%le8UeNWp@Nsma~Ql+^3Bo%_npMryeQJz4V=BAqE~T?dejng
z3ge<X@Z7g2fW4F?C!aagtvam=!RFFVpJA`q1dy-E%du?YwT%+fTkMY4<03TZ)j<Oe
zuSu|TMbn$JCNKw9K<+@tJ({pU#md3G(`)NO28!Z^`B|&xuS!YWO}}^8(&l&<H`8f(
zO-EXMeXU|crFs+^NzF_IZ*xCTMAZi{Y<c;sK84v<>{fjCHoNAfYBvsfq;G%VL|j7t
z`X0sy1EEgpyD;)tS1x+fnv-?C@glP0{RCW}Ma?3qpoq_&IJAYOy3G#s`rsh5=3>`K
zkj``<PxYPrnJ%66XZ%$jT_UO;S&LzWfo&581S_54ry#ectge+aWQh>=;|*x5HSjZC
zXNvPLh372q;=+6ja|SC!R-`JcL}}wwskajjTUGTpL(1zkN-p?BA2lmf<wk(A{@fWd
zR@`1h3RtSO<YT(S4xL@1hiEAxTBBzva~C*l--DU9m2vX&A2fTNg49@_4&`2Bzy8!U
z)6qtF$FpZMEKdNYC;O-#lGOq92InNM@``qD2YvzcS>+J3WsB7!k`0Brx8^cLTF9<g
z@nKD{&MQpkhV&mNuFe;7?=GL>h)r+LZ$vsZo}`OpOs)?c6$hclR!R#MAeh|_DY|9r
zy+_3c%IO9h9X?ksp?an&>Lw;QeQ`T-Ku6HaK~H?E9-Z5$cZu{YU;1+-6B$|JD;%!^
zt(4l>F8}a-UkC4YtOxFHckhl4VK<o_&-lD0mk1#hZYAraLBA)XZd9SwQ&Pgn$a!)D
z;&eLCGu8&`Ky;&{YdGM4YZMiZi$_@v^1aVdy+K+*Qo!QYDDtW4@Os*LbJ00k{m)5`
zoRKnSu)novfL2Ts{!-4+5Y{b=o+LpM;89G7S{vXl;M_l=ND-Rc5qgt=ci7TpEo=mH
zL6*Xt9up_3hU63OR>r6P$P_O*U!)IDory%}Wz`YeFx6TO{y2Y${SBm?H9cTWV=WWJ
z`_*CGso!ZN>l@~_jkeXtV}<eU5O#LliK7g)klc(Z=e{4*h!dp)V6v<*N!NnT1w~8K
za~UIar=<m6R+`}h>fczfA{TUkyeD>)i3|NFGcCsBmK3HXp&ol_@GVs7PIpfULy!hi
zs+%KYgS%(n7_z_}6<X(k(VFudPeVYWZh9|epL*7btD&ckkCMALmGw(owKL=w(~r63
zOyHtRRzRvkW>)hblk~W#LZ@&2)fwm6xkFP%&Ju|MFWbNiTwy{{g-pV1RK`L&=RE2D
z4|g;~vd<LODHcrO&uLo^tGtrbwh8*iCTXkJcd4-eXXU0I?k1m)6`j}QSOp%!d{k#o
zIrMoZ12w1s%;qprCkWS}WH>8x<?cZds#+JB{z{||9jq*<HT!M-cBcH=;7~J2uQ_26
zvZro;_+w%PUpNkSI<TD8&2%vNAnp4avGA`e@UKhI+!{F{Jx<Cv<%&v?&9%YQ4BL2T
zaOOpQFMay>d|teYS%w!IlT4W$&FTrk-hcTADX!P?*f1YWEIRwq$Ys%^(Z9w&HT$>}
zsMD#6Df=uJrX!JHP7<>Or;e_Cf=}`!`qR=i8fBj)$6Lxx{HRzd8Tnzd0p>kSps{OG
zKJkml>bUj8$u|F=``l(-aMxWBC@CGZ#FXClQZ<4|&%jN}Tkg#q8z)=>Ly{$i0`rjU
zv<vjl^OND_&nt8%K_DY<c$hBE?ht3o;zMF?PraCx<3H?R+3c+lcVP-`!*=iR^+4=@
zjAXY+K30oPt-hFFYy6`C$csm;r=3u|c~FmFo6B7|^>t|QddO&i=91e?h3>s~i;+6{
z8X4i6a1wDLrSuE#W(zhan+U*Zq+8p3a))JFVF4ffaV51K^YgTs<ELvmzH15OGhhY8
zrA_+PnYK;aeddV!Pi3^WYTGZ2*J)4~@C%)8#kRVzSG2!MszRFau_EOo^?}G1$p^yr
zk#PoR%ZY0-+cfohw#0i(2hnkZfA7b9`g0$EfREag|7IgZEqyUPIUSL{ls?ZdY2jlv
zX?1Mzw~@8iav*U46179*NN~X0%-qa(h<B)RSSGS9k|=WNp6TA~=CbwUXG!l)zfkxA
zNej9!)gKN9qFfwPo;8s*!hnDPngF9Kp{ukrX|iXeI3(#zb*h?bb?@D>o~3;Y*NmM;
zx8T?y-N0uyWY(8=me-HUC9xtABvX5~%yg+Cp&XF$Bq=OcK6T*D7eZ2EmIoCFWm{$S
z1PNw8HDpe5hHeCusN8kdeb&f2#=3M^A~7YwJ7FRrhq*)PG9x?JIAaC<n&nyz&js(6
zJeGWn+?QRH9iX#RFkV(w>{MV}5}<q?f|v9)L^XT#O^Q+lTLo@~KU5xyfaaECe?QTB
zEU+ll%CA@S4EasNBgDg3P3g>g#7R$-Ly%)4=IUkRCGOR|XTMjn&okRmFjaO^YF5^*
z@)#MCBOBezD)*xQNxydlUyN?dW{fS(s-T`gv*0BEnk}<MqB*2*JFz@&Ut*5R*2h-J
z)_1&Q{C@mZhFSfyIyZ=2gNVh5&AtuX!f!}*i1VjIDopYKYu?w1#R<cS5`I@F1PQbP
z*(_N34x08$O$DXg^I;Q5K8>`BdmrbmPO8q8y(X$AA}*RH%I7Av!~84pudHb&%Q5-j
zt?=6x(iR?<^_7X0v6Ys#VAL}dKk^hcjI=|EY;kPcZ_w<*H`_*|N7SacaM1ERD@6ab
zg`!iTm7$URV+lpW_{V$ruR&A>jrX68k4x2wo$45}&wf7o<|o(@B!u-L@bKyQBAGwy
z4#}UrRAu>^>Vb6k2-th^>WjvP;Nl|i3WrjWv3ISkj{m{eAcQIW^_ndxSX@|8T(ASJ
z?_<Q%GX;J*nopDj?vlGTW3<2Bi-14h9Ft?$MJo-;vYeHFBv>$fcP2u*6uOBk-{d>^
z0vWlfGQMvysI%R=iE|A+!!Nw?C917EU*_$`;;)px?s83CRd3i_jBN)k#nR5t$dJ(+
z_sP;wG@Ad)^(3LRj7q}0b2O(b`|i0~5SYb%Sjk^*5ISZ-Ab+}DGu$-X1n^TF1Ndw_
zF|e*1)cI2%`TR&AW~XpqpFb!=3cHbS>np9hYD_Mr5}y5Y<hjKC>`SY^r7isA2Q4(z
zazRQEqWDKT2zIEbjSYdCPi1ZOGz80Nsl}gxO^<!<`)h}k*WrLKhVC9A^uqPrAX2rJ
zk_X_<UKVZj#SZ`e5i&Jvd|AuDABtCTp9RP@piFO@ZU#$^j4fEyi5WR4tQO|sRzdLJ
z86FxwO1hlidA6EQ5OI;XPTXTa$K&JwxgTfPhh!ZPwc^HMC{@|JRTI?xh^Ptzlf~Qj
z4+amGs<?A`M~9~Ge+{a1r{l~f$XZHt1Ik1~ki({=W}#a+O?yAslpyDBa!(JThcKg+
z`7_G`o=!47FD0IvP768*p<&Vtm`CtC?;Dj`fo;v%1qH|i1@RjM=o$pEJq4&d1&L7t
zjHm`Qe8@BW2ApUJb#%iMo6qv$oT6Alh&RB*5@4ncFm(r*OBC@so8*msJq8zql&b-+
z5<*+q@YE4P>DWMY0AV<2K&OL{&^6#@L1?lXu#6xSMh%3^5c*}oM6DQGY#(a^@z<&D
zF(43I9e&5`h|A$5!+UFuOH0>F3$shBV4`0#M4RSB8=6F0ZgIbq<2LQ$Hh^(kAJu=!
zt8ZGXTacD{(3W{V1$j_{Jc)Ka7<N6;sXR!iJaN-JXwp2f^gSr_JqZ^)=odUOg+0iG
zJ@H#S=vq9neLbjrJ&FH#F#bWI5hI@wqj2Jp)bXe%8c1>t6u}ho`4kF+4@t_0!mCBn
z)}o%eA}L)_L?=jw6BIfll7tb3n}?*yLt&XADa=rW>qz=_6s9ziOd5sXjil>FVFx3r
zf>Feewk0v#W9>Gp4GacTRr>Sd2T6dWi-{YX`v!D)kCWzG5xQB=?es5ON(%nkwUhNl
zV>@xkWWWv*N+{e$(SrExvN6BXzU(Hxlx27{VYHf+LpIbTO+Yu(ltMk<<mdQtfilQ%
z#zERxP>;)3A(LU@ytVYFkYvTa79idMtUFhfxx?P!)2F`prNWW#Fub#l>N2s@nh&n_
zA4{#}|AIs9|A4P0ZF%fy=hDN!t#ifH<)4u2kirK~JUpjQ-J+~cXOZI&dI<edX<Pe$
z<5K%Sv8eq|W{$&;<^B}h+C6HiudVR>ts;P}UeXslP6zKvpEKSN-$y>kJ^nw2tC9bv
zo(|lT@?vZ!{_l|d^8Yh)eEBh*5ABh<!=o}_%`M5uz0&2FvS#W)djCI>+Lzjw+?V)o
z#P<J#52aEke-8d*<DbLpV99;)|DC457DTn))TG@GiB9R>-W7361>E(Y4;@`sv;VKn
G`u_lkUM?>H
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/fonts/glyphicons-halflings-regular.woff2 b/ui/new-ui-samples/fonts/glyphicons-halflings-regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..64539b54c3751a6d9adb44c8e3a45ba5a73b77f0
GIT binary patch
literal 18028
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/high.png b/ui/new-ui-samples/images/high.png
new file mode 100644
index 0000000000000000000000000000000000000000..5f5fcea79a4be9eb82d05df7ee8d981df6967bf0
GIT binary patch
literal 812
zcmV+{1JnG8P)<h;3K|Lk000e1NJLTq000>P000>X1^@s6#OZ}&00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!zDYzuRCwB~
z)@x|ZaU93-|2ghQ=90@8#kSOpMPW#pMGceN+(T|PJP@LI;F2P87si9RKd@ykQ`YhT
zVJ;8IWw}JkEpy4`9O`iJ{_68DozB^gv-7Lhes%u8|L^;|{lC9?%1)O%QA%U9#sG{_
z-2qMT6K`=FmAHtP2uA9tVUz$}F#&UthHv<U*XpPNT3|TF=~*!j<6$g8`eB!9>-;=U
zXw+}u*DP&TS;)Z@EJr?;;PSt-3J=l)$IuNQunpTIEW>v^m$RtAZgkgxrfLa;;XzWd
zLrYbPeYj~2GYePcYXE6_ZnLSz6RRH-ZK%|;&Bh|^$9!C{jy>A=me_(>xPkF_N9Tj|
z;!G`3q;eNK2~?~$MVOAK7-_Ths$m|+B7l_&(4Tre=G79w(Y|b@eW8|TBkm&|)2x97
zX@&(z(kQBUAypfh>%>-CVGZx)X$d#uhfZf33t}VA)JE?`2$N9Y{9j4NG6LD=pTc$h
zHqfi%XR|qj_cTh^=EYNnp|6(hxI17A(o?7Go*phlXD9xWq583cWLS{)cFL3%LONOX
zDZN!&+WCcc7Nog;^s8=E&mhUF1FC(tOkXUTa*@M%PjM1cl5~3g_NNBFk)p(xsM1z-
zjRm=))SazUmZ*}Yy}squnGPs}c1%zJ8|)07+7ho4U4<UZNzjswKrek3)n29TqxcBR
zKSS#oz&c;8Q+g1e-2`cu%mK~DF03wb&d9R)CVh~Xv=t#YNKp63N!=@lFshF18(y-N
z`*M|q|7LSH3%kXBSZkjO2IC0USr)CMbDQyG4X{9;#8TXecKuqKo~UcrHgB=&5?sX#
zd__}qQU)Kb+J|eFiM8RO+WwJvrc;)q8`0_&`e4J0M}0iP9+bOF6wALvcGAjl4t=x?
qLzJC;x{zMk1*bMudM9G}BftP0OtN`NjudzR0000<MNUMnLSTXlM1j8m
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/icon-centos.png b/ui/new-ui-samples/images/icon-centos.png
new file mode 100644
index 0000000000000000000000000000000000000000..5afb7b4b63462412d825f63542beb1f7e26b3d7f
GIT binary patch
literal 4734
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
M07*qoM6N<$f~4IfuK)l5
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/icon-debian.png b/ui/new-ui-samples/images/icon-debian.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff49a39696fdfa5f232b0e79de04d90af6557111
GIT binary patch
literal 4239
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
D^V29c
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/icon-fedora.png b/ui/new-ui-samples/images/icon-fedora.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b9dd06d1f766a3285cd0fb587c0be4114bfac47
GIT binary patch
literal 4449
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
S9$oyI0D9VncWN{pBmW0TFKp8Q
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/icon-gentoo.png b/ui/new-ui-samples/images/icon-gentoo.png
new file mode 100644
index 0000000000000000000000000000000000000000..50d928fbfa30560fe873cf3de438a8f0c10a8f96
GIT binary patch
literal 15307
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/icon-opensuse.png b/ui/new-ui-samples/images/icon-opensuse.png
new file mode 100644
index 0000000000000000000000000000000000000000..83fe4d5df0f59b52dd609b3bd16838f4d2570ab8
GIT binary patch
literal 3046
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/icon-ubuntu.png b/ui/new-ui-samples/images/icon-ubuntu.png
new file mode 100644
index 0000000000000000000000000000000000000000..d92c00f357b6b0e1542413f6aaf0de8ef4b8d130
GIT binary patch
literal 4818
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
T?|XFr3GiA;OR-Yk^22`sn~zF<
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/icon-vm.png b/ui/new-ui-samples/images/icon-vm.png
new file mode 100644
index 0000000000000000000000000000000000000000..50dac50c5a0ee59f4e79170434f53bb3b94390e3
GIT binary patch
literal 2976
zcmbVOi8~YiAK$c?G*_1+SxjOnw_GDMmIx6-d=n-&8()kq<W|T%lAFvDQI1%-m1|)L
zlcVJ*<Q&6~-=FY(p3m`op6C63eO~YP`}I8UcZ`X#KIDYZ2><{9K^f?o9o~ea4Q4+)
zTM++z0RXsMP<l7a{~h~n$Ah+@iE!)YqjU0|_6;wf3Y?G$eFEW)8b<MQ?WJ#f1svn~
zW8Di*&&S4-g#A+Fkt*GZrm-n<u_IM6(We`*ZXNYMVhw0Dd}H$USYdKOOU2Xs4X*T1
zd#1>T!sWRfzrMOa{5InHIB|B;uUC_y-b`P{ZH>Rk5(<NY|J%wp^O<gq>H9ra<F+|6
zGQ!&1-MW^RqUJqCnc(2Lz?#m}jmj$EY!((2tTXIgoMjoShCU#_*{IO9w4|NvVsN9l
zBBP?x^W$-I;(4CFM&ZL);KH-rwYl&`?~o>3KJ!OrlIR$KnP)UzTQn=j#XOI|ZF6-7
zU@(}#JeQbSsf9S@p&gpBFwo>5OsTn;Ou_&>RUmbpVE)U-m*ub6rNo1(x2IOJ#${-4
zhM$#gEU}KG!6@slT|=`?%Q+m*mwCU0Lqa5J4I$NhCc#||5}_CV#ixK3qD}qi`<o`o
zP>|}IG5eWO7^>=Z*LQ-CVQs=AqFqs%TRRud9FtFOFIu`bQ@6@ObG(bXh@GaiNOJ|C
zZa(i~qELOe>cw0ingv-<*OFiMN9q>Y^sgX5dL^#m6Ow_5OC4OkjoBqE%h~!|!ysE>
ze*jF6d8@E(EE?L`;;SLkL7(ele1qYGjSfPQZ?wX8lb*YA5C{SrP*Jr93kM>oJ6%k}
z%Oxfvu#Z>fNw#a6su$WQW^v}~9w5rE<@xzQho4_FX>*pU#KDn~ZT2f{YTRdG<WY0K
zoF`7M9v&f|YFUB`&f}fV)%4a<r9+=o#mmijs<P+{=bkLA-}2-~Ei?XiAMOKrtvRSG
z{r&x0j2_}vlbgsrvTe*Kr4uv)t2hCG)+<}5Ei5h`xZ8}5R=dzA-+R&f25sNBmQ~Ix
z*5M71e`g>N$S}zE9eSYV)2B~f4y~D1AP9#Ts;RF*8IjD(cs)4R097IpWXgPU`0Kcw
zLl%cC(q~ed{eO?q1|{BgV0C?DwAEQDR!=z7Pk2o>GPB0FbX&R6082O^mlMyaCBsN(
z^yawPZ5A65_Y0lXx!4E<XcdbUt<gdBQG=%5ntKG*;4o{5*Gaq+{!#p|h6^z(%d<@i
zzqhloT*mch)2F-_ArN{RVR2!f`uQnW1$=ybJX^Q%)r~<ra;Txckti-mU%!K+cCI&5
zK~i#<W3}@-xUgD)7kW%*b8~ZF!I%Sz_4jXrGxxP$mT;KXLCW|x+(vnLPM&O>)0st&
zRsPdrB()|9Hb`Q;GdhMnArG6+#HfXQul>xgFk9<I-@ioSK<37c%KsFdO)_q*#4&v>
zr*p!a^(YaII(*t|O$0$uadaDrz@97R(fo}X`hGgij-L%6t77)cS&C&Umx~V|twZXT
zPdoEPhj~m8<PN~FfaS@(`Y)wPNc<fau8HD29X>$epT)&sVKV4Xk(K_d--8?RUw$3v
zjt|(Iu~9H?py1~0gRwS9DV-(pvuY*0)|1k~GF%DZynoy_T`(^X{AyrZGDAo#KPpvP
zQNkR~z8LuYd~OP3yT4>SnNPdG>TBL|(z;^|Qp;aZPThZLTM??O=Q+cU`-%?^-j&I?
zpE3SxT>%DEZ2$LoL69_!9Udu|n7k^H{^agGkZkcu5iqbtDKRM)51Q7_c<Xb_r$?)E
zm`*?7E`EGz=Q(?I9@xQF7+E77Yba?06lawZu<|duY<Wza=fMue^59UI9Y!#f><J|^
zX}%9AibhJTu|n`Gr#<A*z}ZCQzNL9jjcT{xR0$vjeLHv>6CWqMB6o1tI;$Vl@33Z%
zWJIUAM2LcV6TKz8_idv8-ns>F%(}?cvK8aH@5ulETwwOo9xvsZb|*s#e37!<d@v&6
zRGL10DnYx${=KIiSsKin`R!SEOOD}Z$iG?mQq0!RQ#psmF{-lN7uSSpzO@?mYr!7W
zFDPul;cOY)pIKuy7d^%S;9_wOpZ4mjpv9#noM_>|t3`zqcKo1du&&F+HR;urCdAWp
z<6k6<+8*7+DfKuISNP+hC#5lf!gWee)obKgHje7m6eM{AP~iW01B$<`iJhSM&^F7!
zY}*Dcck6%!N`&*!n2ZBq1l8*@8_Bx59T~ixOO_EBD3c$)p<(*<>Cn*7kD5RyK8n83
z%WjB34PP8WHq}p1m03tP0VOv2wJqc?%$%_T+Fg_NEXeR2t&(6||02b6g#UCLU~qi3
z9Xn=jumiaXz?dl$YeE=4#`d(AQuiW<8{|2s#32m7W9=2_DNOrZg7w9D6&P@HY4ipB
z?DMI*2m-#XN>R1Rj^tQ0saj^}#DB=)S(A}MITrK7Rl!{8Tn|qA$OE>V-D5jxYZEV9
zy49Pb4krQ-)Jl!c4lCX=I4)gi=%id*t;cur)5K8SQ`%x7-yPmvw*HDeV+0U&{kQ5F
zd65-0$fA=`QxY#Efu3C<DskAeNM-UhXNW{)qYU!~vdQ!<XeBkWhbk>$(!P=EDtGkh
z?1c{`PEK~M6EIQ7wsj|>RUYXmoR*W_np#5^Emo2TRwvi&O?DvHArYycuFQmCM#_Pc
z^NzLNd<%KA0Y&*o*2J4<KJWnZ&i6HB96Y3YX|v&8iRMoc3DpQHIncRhv5<GFEmo57
zT#=Np3n!gV3zl?Wu1N|##y>?@>uD`PKd(0!yleGwrru=pVcV(0^bDi7>k9)Uy7ys)
z>%tj;l6CdZyAj@unJa&yn^XsDB03(D0xoME6-S_p`eb;`{oGM3Q;#v-YOmgQYfXdj
ze@V^#XLPo8exZkW4*`)WGLR%cxdUaYmjN5aMSPgzF5atP+^c^s_ClG^5s)lHSuC!6
zT{sI+sVt3ye7L%LkJ?1Czg@DS@OI$!#Y6J(?bbDqExhMdfL#4W<+$&*>E%DLaw&Hj
z7Xhx=V+jjlhc?*}>qHQ69iGcR0hoDbRZmO{8(OR%)k8L$Kd{AuR+1uLB!<3#5=N!<
zRWb#Z|NLn(U)nzdzh_IcZjBDywN5>%kgj1fCqHG$O8&CQwn0e9p8DO1W}lgM#(Iwa
z@D-to`$u&1is*%4-nW?O<B@zkr4~V^?>jRIy*y5LOJ4VL2i?f(tXf@w9TGZ!f5#{m
zkknXdV=c4`qBJ_D=qm>c(Y%h!!n+q-X4i~z%Cio2=4~*qf?_Kbd^6<aKEnOxYW)Op
z^mQ)@OK6CFooaC;u@BLap_4avjFJIB(xZ(d4U?t*LN0vu80U}#O6v(-EzF;1Pn7X_
zuP=V|BxgQU;m+M-M-li@Ez$8akJ)}!!><TDF<cEqTNPdZ-rBV^bFE&*;nLvGcxfq~
zTS2eO%DRHQQyvko=d!Eh8W^e#9kz5)OSUUEwM)8P9OY3R`MLHT6?d`|#MIT)LgS<^
z6yx%0U4|_BHF=ZG%2GDU=aSt|&%+^$G(?AOZJ?6t#==lDO%vZ>TSUi+S!7o{{604J
zvOS*tTce4vA~B~W0$^`l^{C5&BjEa;P20|6Hf~`}BIc$_0isO&jc5U#c7UAbC-&sO
zotzTHYC7JUE;{TGL<fi6j8H3>-8pOYu|HJLvm)9;wPOpK^_ptrPX<rvG|jc;bq`#}
z@9EWsf*>QL(>N1x7G0$tb~D_exI8=(L)?q%_H5YJhE?vk@SqODLErHLrnkGe6b+?I
mVQE8J@&9#74TC1P9{|tL%c2?+(}WHuZvg71u^w5+A?$zXeWqvt
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/logo-white.png b/ui/new-ui-samples/images/logo-white.png
new file mode 100644
index 0000000000000000000000000000000000000000..0add8428122507bd2993aa01a939b9247294a0f9
GIT binary patch
literal 7438
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
M07*qoM6N<$f{<Y(^#A|>
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/logo.ico b/ui/new-ui-samples/images/logo.ico
new file mode 100644
index 0000000000000000000000000000000000000000..446143f066a60f479b2cb8f8d04ab3c97ff60e56
GIT binary patch
literal 1214
zcma)*3rLeu6vyu=X_;nPV)$&PPF)r(wTQ|dTGOUtnOdf0mZ=cR#99xbub1{BqnD9^
z^Z>PV6h)fUny6#CN{3di2P{*h2ek@Oq0a4o*=I}2Iv?krbAR`oKi_vQA0faVCr83o
zF{!X2#Dx$Nz}$(sm^sgR<Jj30yCMGpMl1z837jm3H1$<DU4IV>Tbdw<FM-;Hi<#et
z=I}n~iB^qh8{XzCNyvT<I;$&znmT~?eFXZgAE@Om?1h(6Iq+2e1-ca!zOAO7n3*};
zXq6n?2kF<!f%cez;-Fgx4$e+xo{WR;oqhc_OW;#nF!Zm|JK}m8gi6aC+##`QA5PmJ
zfeZ(o(}%&&1P5#*1vVbnssk~XhN5bNz=T)>5^+BS=V54SJ|^z)5I7%kU;>-skiq*{
z5B^=eF<T)pK9+)bV;9UCK>t-HOi+bkR-wK1xpfXL;S<?ho1pQ5gYzxiHR~=e+XHS(
zYe7QMZb3IjWV72H-JpD~6z(tbgwn1o$D2s!YteWNJS!i9l%iW?+34Lvr*KL(6{_X|
zobEjAb{lD|4qsmYvGF;~r0Aunc#>=c)0W4s|D{#(q9~vaX{rGms=((Wn*~LeWqIu}
zkGvlzwaxjL25hey2bVweu<xK*t+@Oa_)UKTK^x4IwmKMOjm@oL`l)}_NGPy}tdb}w
zHa>H`ji2N7m}Xsj#j7-`#=Dv}`)h&)9th^&^dR%>WH_MB8KcIXVf8p&s1xD|_k)R-
zrk$Z0-|Gf}&4Au$KhU$k?3YR5by~D9M&-q$=ocNz4!IY&p7%OxuJf&+Ei-G(23hU;
zHTLhMtjFR9ExVbPQVLzBFlROcIZ|#jmX6fm_hsVa3XP<aKAeAt8dqp&oBW=V^+d>Q
zkcNnm%Ds?ggd^Rv2~9_o82cv;p6LSBD_g_s-n1uZ8#<EeLwTm~LE9J!Zdo@M&*jFU
zoM+Z%F5)(8$8y`Wz~%Pd;Nlx@aH{<lk}}CcRMRXZMD&%Uhz3Ze$jpg#uec1IlFMPW
MDQ4iZEk#_;cNAJoqyPW_
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/logo.png b/ui/new-ui-samples/images/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..5be8d514bacdcc0d080a5b2f12314aa7ee94a8b2
GIT binary patch
literal 17195
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/logo.svg b/ui/new-ui-samples/images/logo.svg
new file mode 100644
index 0000000..a3e57e1
--- /dev/null
+++ b/ui/new-ui-samples/images/logo.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="387" height="366"
+ viewBox="0 0 387 366" overflow="visible" enable-background="new 0 0 387 366" xml:space="preserve">
+<path fill="#D91F2F" d="M303.868,82.71c25.172-8.604,27.898-42.319,7.13-55.331c-1.923-1.04-16.93-10.998-43.506-11.999
+ c-39.783,1.486-71.632,13.167-92.662,62.139c-0.25,2.109-0.508,6.054,1.977,3.206c0,0,0.284-0.329,0.443-0.515
+ c15.153-23.034,69.707-29.756,88.572-8.681c0.625,0.72,1.297,1.634,2.003,2.274C276.457,82.654,293.688,86.191,303.868,82.71"/>
+<path fill="#F19125" d="M336.691,227.692c20.913,16.439,50.687,0.387,50.306-24.119c-0.174-2.18,0.018-20.188-13.601-43.033
+ c-22.892-32.571-50.019-52.939-102.551-43.944c-1.906,0.938-5.355,2.866-1.615,3.403c0,0,0.432,0.059,0.674,0.093
+ c27.571,0.183,62.889,42.3,55.469,69.596c-0.263,0.916-0.665,1.977-0.817,2.918C321.826,204.661,328.231,221.044,336.691,227.692"/>
+<path fill="#8CC643" d="M228.105,329.358c-4.421,26.23,23.926,44.686,45.259,32.619c1.831-1.197,17.731-9.65,31.27-32.543
+ c17.636-35.689,22.531-69.258-10.515-111.072c-1.737-1.225-5.082-3.33-3.762,0.211c0,0,0.152,0.406,0.24,0.637
+ c13.04,24.293-7.028,75.463-34.545,82.018c-0.932,0.207-2.055,0.361-2.955,0.68C241.207,305.282,229.893,318.749,228.105,329.358"/>
+<path fill="#27AEE4" d="M81.133,285.823c-25.04,8.973-27.272,42.725-6.314,55.43c1.939,1.01,17.088,10.746,43.677,11.357
+ c39.757-2.072,71.43-14.219,91.738-63.496c0.22-2.113,0.421-6.061-2.023-3.176c0,0-0.279,0.33-0.438,0.521
+ c-14.811,23.254-69.259,30.777-88.434,9.982c-0.637-0.711-1.321-1.615-2.038-2.246C108.544,285.476,91.262,282.192,81.133,285.823"
+ />
+<path fill="#06659E" d="M48.671,141.301c-21.969-14.995-50.596,3.023-48.569,27.447c0.321,2.165,1.34,20.143,16.463,42.022
+ c25.03,30.957,53.465,49.455,105.273,36.947c1.839-1.063,5.151-3.219,1.382-3.502c0,0-0.432-0.031-0.678-0.047
+ c-27.52,1.672-65.589-37.975-60.023-65.709c0.202-0.933,0.531-2.018,0.62-2.968C65.053,163.281,57.561,147.365,48.671,141.301"/>
+<path fill="#BA1E70" d="M164.882,38.837c6.497-25.793-20.29-46.448-42.516-36.122c-1.919,1.049-18.444,8.206-33.764,29.946
+ c-20.424,34.171-27.98,67.243,1.628,111.558c1.632,1.359,4.798,3.726,3.765,0.089c0,0-0.119-0.417-0.188-0.651
+ c-11.062-25.255,13.021-74.663,40.974-79.004c0.945-0.132,2.076-0.198,3-0.441C149.9,61.794,162.255,49.273,164.882,38.837"/>
+</svg>
diff --git a/ui/new-ui-samples/images/low.png b/ui/new-ui-samples/images/low.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f891d648d7d72c558a942ab77befb1cdd368235
GIT binary patch
literal 813
zcmV+|1JeA7P)<h;3K|Lk000e1NJLTq000>P000>X1^@s6#OZ}&00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!zez+vRCwB~
zmRU$tVHC&j+-%X%DAIN?+o)`y2U}iR9)g0RqJ;|TAtCCeg*HOyHCk<7p@<61z!rr>
zC~UBW7K%zKgCQylCmUL{z?|xL;(uWnX3S<h@bfU<`+aBm&UeoBm0c-!5=b}b4U=H5
zbU)}0ZO{mhp$e+u9kj;VC@q13Tvz~wFbuxKXLzrTx<Dq(fcbiM8qUItju<I`gVMJ7
zb+{<6KR~mhw5a?r4VJ)Wm<<~s5FJ&lkuh){hQcS<2gPyH@B?0pYfuS?V5A&csuccR
z=SD5egZ)a?C8eu4QJ!O@N@=qUq{9iA;yv_?^nz^){XVRRnhqN9qz;Op1P01rZnTk^
zFb`T}?4y&Mm{U98IShwoo)HUg4P?P_xa*`QuV5GaRCV?-BNJe(4*DoWoYdtq+=Kow
z*;V;jG*_X?=^U}NU68|z%}BmV`PqLS^uMHDMn;>F9Pp_vL^{!kwVhv(Z4va;KkX(v
z!JIt}D#2vsVP0rcfhyG`!y@^rADPlOQj8!dou%q+wm%{G4TIG94yS0OR=Tfr$kolZ
z);&>G)}-5;tUQ(W>#QHRs_7PW&;jJr!rh&u0c);L<m_@)ZK*4-EA?QdQg#zgCUF+0
zaMC*SEEuP2QRk{{pMx;0hUvWc27Ls|I%vS&FJfIln{S7%a0b434Kg6l)73qPu%K4W
za;r9pCvBQ1g}h&)ZobnlAl%YXM0`;*K3ns|=E!Y0pft8}cl??+Hq=IG+}fn9XY)H+
zZ-ui~>&?Mc@W>wcVm>5BXddJ%jmK03;dWAGXSfjd%F#w0dX3jX(&Dt~MH;(yc<ZD~
z72R9-20hdjtb@;y&H#&QqYgaM-iJg`Rc2Fih4dC(*jVvtkC!Tx@^}L;(I-(@l~n=b
rm5!+}SRUIzYS4hIkWQG=KLQK@;61`6RS)H800000NkvXXu0mjfY}$8n
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/images/med.png b/ui/new-ui-samples/images/med.png
new file mode 100644
index 0000000000000000000000000000000000000000..06106551316ec16a148c346941ddec92f9d16bc9
GIT binary patch
literal 873
zcmV-v1D5=WP)<h;3K|Lk000e1NJLTq000>P000>X1^@s6#OZ}&00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!`$<GWRCwB?
zmT5@TVGxIR*Dg1-gDktK)CxPKp!-V}1r|oxMF$mSMF$ii6%o{jK17+_cVI*XW}sb=
zNJWWd2T@o`8A*3|Bpqvlxz#i96Bb)#+Z}jz*!{onJM+%We`cLIm##XRkv7l?#=vyx
zZqODQpaPyiKHP>6Q19=cR?Qgb3$q{<V&Nxzg-<#t3?g7Mr07{DoPigC7#Rr%rS0(R
za6w*w29IuOw@QFSm<Jmn88$$H@2#2|83gB`AAEtmu+L8z>fnvI0(o!<2FRiL3SoUy
zBQdaFp}Gji;Gr!{>64Ny2V(WyZc_@cOy|DM%~#l#!df^1E8vD5>{Q}Az#dov4`3!#
zariiGT&xiJlVUi4p-ing4h!KmOtss(v@i)~KrL*Mfl=rku)GBW4&^0-^{W(~o$wsu
zV1X?#BjK<bBIQL98)B5miH^XeBW!11l0vu}eyKV;n-TMPuo8U~yf7DLJN{3iAq_*8
z{9L%N-^RLBes-J7P|cz^B`+A61S1r-^NkLhks+$GXL`5>dO3oZc<C}3i8mu%t;*CE
zysE5FWSF$Io!<~;M%wE~k96x0jYLb=O1sU-cYTSFz8RvCa_LA_ug5+r;Scmw<2xLp
zkrL@H(v@bUP_28ks;pWqBUmZ+c}XqTk6fzhT6NIwv<JIxdXNUJxjvP%i&VAQE_t1&
z2g?+)TW~UnT%5v5>&#PNs9uXwm)iDOr~&Ig6Il2TeFSm>G+^tuvadjgZ&Q_?hHs4x
zvOu1PYhd+eLy4N@W*y>B8Z=K*S)ZkDzDqCU9i_tS^qKKdnkP1P?^^p-7;T;;Xx`XN
z8K`k<ld_D%?`gjk&N}Tk2Uo&l-+9s~{UJ-OrcQ$^U7>7F!qiMN<Y<MGUZ@W8&-k@A
zJx62LlDA$uTeo`;KcF4-PzRqT?FPG5niB49>5oLYsw`0x(ex(0uua9OGhV7tEG$)l
z{w1nWWnF{e3deYLXSW8@M;mZjQ`AyO{|Ybw4NBe};aPP+00000NkvXXu0mjfdFFsc
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/index.html b/ui/new-ui-samples/index.html
new file mode 100755
index 0000000..cb8d257
--- /dev/null
+++ b/ui/new-ui-samples/index.html
@@ -0,0 +1,134 @@
+<!--
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<!DOCTYPE html>
+<html class="no-js" lang="">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="description" content="">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Kimchi</title>
+ <link rel="apple-touch-icon" sizes="57x57" href="apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="manifest.json">
+ <meta name="apple-mobile-web-app-title" content="Kimchi">
+ <meta name="application-name" content="Kimchi">
+ <meta name="msapplication-TileColor" content="#4d4d4d">
+ <meta name="msapplication-TileImage" content="mstile-144x144.png">
+ <meta name="theme-color" content="#ffffff">
+ <!-- Place favicon.ico in the root directory -->
+ <link rel="stylesheet" href="css/vendor.css">
+
+ <link rel="stylesheet" href="css/menu-flat.css">
+ <link rel="stylesheet" href="css/button-flat.css">
+ <link rel="stylesheet" href="css/radio-flat.css">
+ <link rel="stylesheet" href="css/checkbox-flat.css">
+ <link rel="stylesheet" href="css/textbox-flat.css">
+ <link rel="stylesheet" href="css/selectmenu-flat.css">
+ <link rel="stylesheet" href="css/fontello.css">
+ <link rel="stylesheet" href="css/main.css">
+ <script src="js/vendor/modernizr.js"></script>
+</head>
+
+<body>
+ <div class="topbar">
+ <header class="banner-area">
+ <div class="container">
+ <h1 id="logo">Kimchi</h1>
+ </div>
+ </header>
+ <nav class="tab-area">
+ <div class="container">
+ <span class="hostname">hostname</span>
+ <ul id="tabs" class="nav-menu">
+ <li><a href="#" class="disabled">Host</a></li>
+ <li><a href="#" class="disabled">Guests<span class="digit-container">18</span></a></li>
+ <li><a href="#" class="disabled">Templates<span class="digit-container">06</span></a></li>
+ <li><a href="#" class="disabled">Storage<span class="digit-container">102</span></a></li>
+ <li><a href="#" class="disabled">Networks<span class="digit-container">37</span></a></li>
+ <li><a href="#" class="disabled">Administration</a></li>
+ </ul>
+ </div>
+ </nav>
+ </div>
+ <div class="content">
+ <div class="login-area">
+ <div class="err-area">
+ <div id="messUserPass" class="alert alert-danger" role="alert">O usuário ou senha inseridos estão incorretos. Por favor, tente novamente.</div>
+ <div id="messSession" class="alert alert-danger" role="alert">Fim do limite do tempo da sessão, por favor se autentique novamente.</div>
+ </div>
+ <form id="form-login" class="form-horizontal">
+ <div class="form-group">
+ <label for="username" class="sr-only">Usuário</label>
+ <input type="text" class="form-control" id="username" name="username" required="required" placeholder="Usuário" autofocus="">
+ </div>
+ <div class="form-group">
+ <label for="password" class="sr-only">Senha</label>
+ <input type="password" class="form-control" id="password" name="password" required="required" placeholder="Senha">
+ </div>
+ <div class="form-group">
+ <button type="submit" class="btn btn-login col-md-12 col-lg-12">Log In</button>
+ </div>
+ <div class="form-group">
+ <select id="userLang" class="selectpicker col-md-12 col-lg-12 ">
+ <option value="en_US">English (US)</option>
+ <option value="zh_CN">中文(简体)</option>
+ <option value="pt_BR">Português (Brasil)</option>
+ <option value="de_DE">Deutsch (Deutschland)</option>
+ <option value="es_ES">Español (España)</option>
+ <option value="fr_FR">Français (France)</option>
+ <option value="it_IT">Italiano (Italia)</option>
+ <option value="ja_JP">日本語 (日本)</option>
+ <option value="ko_KR">한국어 (대한민국)</option>
+ <option value="ru_RU">Русский (Россия)</option>
+ <option value="zh_TW">中文(繁體)</option>
+ </select>
+ </div>
+ </form>
+ </div>
+ </div>
+ <script src="js/vendor/jquery.js"></script>
+ <script src="js/vendor/jquery-ui.js"></script>
+ <script src="js/vendor.js"></script>
+ <script src="js/vendor/bootstrap.js"></script>
+ <script src="js/vendor/bootstrap-select.min.js"></script>
+ <script src="js/main.js"></script>
+ <script src="js/menu-flat.js"></script>
+ <script type="text/javascript">
+ $(document).ready(function() {
+ $('span.hostname').text(window.location.hostname + ':' + window.location.port);
+ $('.selectpicker').selectpicker();
+ });
+ </script>
+</body>
+
+</html>
diff --git a/ui/new-ui-samples/js/button-flat.js b/ui/new-ui-samples/js/button-flat.js
new file mode 100755
index 0000000..bc72544
--- /dev/null
+++ b/ui/new-ui-samples/js/button-flat.js
@@ -0,0 +1,419 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT 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( factory ) {
+ if ( typeof define === "function" && define.amd ) {
+
+ // AMD. Register as an anonymous module.
+ define([
+ "jquery",
+ "./core",
+ "./widget"
+ ], factory );
+ } else {
+
+ // Browser globals
+ factory( jQuery );
+ }
+}(function( $ ) {
+
+var lastActive,
+ baseClasses = "ui-button ui-widget",
+ typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+ formResetHandler = function() {
+ var form = $( this );
+ setTimeout(function() {
+ form.find( ":ui-button" ).button( "refresh" );
+ }, 1 );
+ },
+ radioGroup = function( radio ) {
+ var name = radio.name,
+ form = radio.form,
+ radios = $( [] );
+ if ( name ) {
+ name = name.replace( /'/g, "\\'" );
+ if ( form ) {
+ radios = $( form ).find( "[name='" + name + "'][type=radio]" );
+ } else {
+ radios = $( "[name='" + name + "'][type=radio]", radio.ownerDocument )
+ .filter(function() {
+ return !this.form;
+ });
+ }
+ }
+ return radios;
+ };
+
+$.widget( "wok.buttonFlat", {
+ version: "@VERSION",
+ defaultElement: "<button>",
+ options: {
+ disabled: null,
+ text: true,
+ label: null,
+ icons: {
+ primary: null,
+ secondary: null
+ }
+ },
+ _create: function() {
+ this.element.closest( "form" )
+ .unbind( "reset" + this.eventNamespace )
+ .bind( "reset" + this.eventNamespace, formResetHandler );
+
+ if ( typeof this.options.disabled !== "boolean" ) {
+ this.options.disabled = !!this.element.prop( "disabled" );
+ } else {
+ this.element.prop( "disabled", this.options.disabled );
+ }
+
+ this._determineButtonType();
+ this.hasTitle = !!this.buttonElement.attr( "title" );
+
+ var that = this,
+ options = this.options,
+ toggleButton = this.type === "checkbox" || this.type === "radio",
+ activeClass = !toggleButton ? "ui-state-active" : "";
+
+ if ( options.label === null ) {
+ options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
+ }
+
+ this._hoverable( this.buttonElement );
+
+ this.buttonElement
+ .addClass( baseClasses )
+ .attr( "role", "button" )
+ .bind( "mouseenter" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return;
+ }
+ if ( this === lastActive ) {
+ $( this ).addClass( "ui-state-active" );
+ }
+ })
+ .bind( "mouseleave" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return;
+ }
+ $( this ).removeClass( activeClass );
+ })
+ .bind( "click" + this.eventNamespace, function( event ) {
+ if ( options.disabled ) {
+ event.preventDefault();
+ event.stopImmediatePropagation();
+ }
+ });
+
+ // Can't use _focusable() because the element that receives focus
+ // and the element that gets the ui-state-focus class are different
+ this._on({
+ focus: function() {
+ this.buttonElement.addClass( "ui-state-focus" );
+ },
+ blur: function() {
+ this.buttonElement.removeClass( "ui-state-focus" );
+ }
+ });
+
+ if ( toggleButton ) {
+ this.element.bind( "change" + this.eventNamespace, function() {
+ that.refresh();
+ });
+ }
+
+ if ( this.type === "checkbox" ) {
+ this.buttonElement.bind( "click" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ });
+ } else if ( this.type === "radio" ) {
+ this.buttonElement.bind( "click" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).addClass( "ui-state-active" );
+ that.buttonElement.attr( "aria-pressed", "true" );
+
+ var radio = that.element[ 0 ];
+ radioGroup( radio )
+ .not( radio )
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ });
+ } else {
+ this.buttonElement
+ .bind( "mousedown" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).addClass( "ui-state-active" );
+ lastActive = this;
+ that.document.one( "mouseup", function() {
+ lastActive = null;
+ });
+ })
+ .bind( "mouseup" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).removeClass( "ui-state-active" );
+ })
+ .bind( "keydown" + this.eventNamespace, function(event) {
+ if ( options.disabled ) {
+ return false;
+ }
+ if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
+ $( this ).addClass( "ui-state-active" );
+ }
+ })
+ // see #8559, we bind to blur here in case the button element loses
+ // focus between keydown and keyup, it would be left in an "active" state
+ .bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
+ $( this ).removeClass( "ui-state-active" );
+ });
+
+ if ( this.buttonElement.is("a") ) {
+ this.buttonElement.keyup(function(event) {
+ if ( event.keyCode === $.ui.keyCode.SPACE ) {
+ // TODO pass through original event correctly (just as 2nd argument doesn't work)
+ $( this ).click();
+ }
+ });
+ }
+ }
+
+ this._setOption( "disabled", options.disabled );
+ this._resetButton();
+ },
+
+ _determineButtonType: function() {
+ var ancestor, labelSelector, checked;
+
+ if ( this.element.is("[type=checkbox]") ) {
+ this.type = "checkbox";
+ } else if ( this.element.is("[type=radio]") ) {
+ this.type = "radio";
+ } else if ( this.element.is("input") ) {
+ this.type = "input";
+ } else {
+ this.type = "button";
+ }
+
+ if ( this.type === "checkbox" || this.type === "radio" ) {
+ // we don't search against the document in case the element
+ // is disconnected from the DOM
+ ancestor = this.element.parents().last();
+ labelSelector = "label[for='" + this.element.attr("id") + "']";
+ this.buttonElement = ancestor.find( labelSelector );
+ if ( !this.buttonElement.length ) {
+ ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+ this.buttonElement = ancestor.filter( labelSelector );
+ if ( !this.buttonElement.length ) {
+ this.buttonElement = ancestor.find( labelSelector );
+ }
+ }
+ this.element.addClass( "ui-helper-hidden-accessible" );
+
+ checked = this.element.is( ":checked" );
+ if ( checked ) {
+ this.buttonElement.addClass( "ui-state-active" );
+ }
+ this.buttonElement.prop( "aria-pressed", checked );
+ } else {
+ this.buttonElement = this.element;
+ }
+ },
+
+ widget: function() {
+ return this.buttonElement;
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-helper-hidden-accessible" );
+ this.buttonElement
+ .removeClass( baseClasses + " ui-state-active " + typeClasses )
+ .removeAttr( "role" )
+ .removeAttr( "aria-pressed" )
+ .html( this.buttonElement.find(".ui-button-text").html() );
+
+ if ( !this.hasTitle ) {
+ this.buttonElement.removeAttr( "title" );
+ }
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+ if ( key === "disabled" ) {
+ this.widget().toggleClass( "ui-state-disabled", !!value );
+ this.element.prop( "disabled", !!value );
+ if ( value ) {
+ if ( this.type === "checkbox" || this.type === "radio" ) {
+ this.buttonElement.removeClass( "ui-state-focus" );
+ } else {
+ this.buttonElement.removeClass( "ui-state-focus ui-state-active" );
+ }
+ }
+ return;
+ }
+ this._resetButton();
+ },
+
+ refresh: function() {
+ //See #8237 & #8828
+ var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
+
+ if ( isDisabled !== this.options.disabled ) {
+ this._setOption( "disabled", isDisabled );
+ }
+ if ( this.type === "radio" ) {
+ radioGroup( this.element[0] ).each(function() {
+ if ( $( this ).is( ":checked" ) ) {
+ $( this ).button( "widget" )
+ .addClass( "ui-state-active" )
+ .attr( "aria-pressed", "true" );
+ } else {
+ $( this ).button( "widget" )
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ }
+ });
+ } else if ( this.type === "checkbox" ) {
+ if ( this.element.is( ":checked" ) ) {
+ this.buttonElement
+ .addClass( "ui-state-active" )
+ .attr( "aria-pressed", "true" );
+ } else {
+ this.buttonElement
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ }
+ }
+ },
+
+ _resetButton: function() {
+ if ( this.type === "input" ) {
+ if ( this.options.label ) {
+ this.element.val( this.options.label );
+ }
+ return;
+ }
+ var buttonElement = this.buttonElement.removeClass( typeClasses ),
+ buttonText = $( "<span></span>", this.document[0] )
+ .addClass( "ui-button-text" )
+ .html( this.options.label )
+ .appendTo( buttonElement.empty() )
+ .text(),
+ icons = this.options.icons,
+ multipleIcons = icons.primary && icons.secondary,
+ buttonClasses = [];
+
+ if ( icons.primary || icons.secondary ) {
+ if ( this.options.text ) {
+ buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
+ }
+
+ if ( icons.primary ) {
+ buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
+ }
+
+ if ( icons.secondary ) {
+ buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
+ }
+
+ if ( !this.options.text ) {
+ buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
+
+ if ( !this.hasTitle ) {
+ buttonElement.attr( "title", $.trim( buttonText ) );
+ }
+ }
+ } else {
+ buttonClasses.push( "ui-button-text-only" );
+ }
+ buttonElement.addClass( buttonClasses.join( " " ) );
+ }
+});
+
+$.widget( "ui.buttonset", {
+ version: "@VERSION",
+ options: {
+ items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
+ },
+
+ _create: function() {
+ this.element.addClass( "ui-buttonset" );
+ },
+
+ _init: function() {
+ this.refresh();
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "disabled" ) {
+ this.buttons.button( "option", key, value );
+ }
+
+ this._super( key, value );
+ },
+
+ refresh: function() {
+ var rtl = this.element.css( "direction" ) === "rtl",
+ allButtons = this.element.find( this.options.items ),
+ existingButtons = allButtons.filter( ":ui-button" );
+
+ // Initialize new buttons
+ allButtons.not( ":ui-button" ).button();
+
+ // Refresh existing buttons
+ existingButtons.button( "refresh" );
+
+ this.buttons = allButtons
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
+ .filter( ":first" )
+ .addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
+ .end()
+ .filter( ":last" )
+ .addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
+ .end()
+ .end();
+ },
+
+ _destroy: function() {
+ this.element.removeClass( "ui-buttonset" );
+ this.buttons
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-corner-left ui-corner-right" )
+ .end()
+ .button( "destroy" );
+ }
+});
+
+return $.ui.button;
+
+}));
diff --git a/ui/new-ui-samples/js/checkbox-flat.js b/ui/new-ui-samples/js/checkbox-flat.js
new file mode 100644
index 0000000..8a2564f
--- /dev/null
+++ b/ui/new-ui-samples/js/checkbox-flat.js
@@ -0,0 +1,86 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+// How to use:
+// $(".selector").checkboxFlat({
+// id: "t", //Checkbox base id.
+// name: "test", //Checkbox name.
+// content: ["apple", "banana", "orange", "cherry"], //Contents of the checkbox set.
+// checked: [1,3] //Set the checked item, which starts with number 1.
+// });
+// $(".selector").click(function() {
+// console.log($(".selector").checkboxFlat("value")); //Get value of the checked checkbox.
+// });
+
+ (function($) {
+ $.widget("wok.checkboxFlat", {
+ options: {
+ id: "",
+ name: "",
+ content: [],
+ checked: []
+ },
+
+ _create: function() {
+ var that = this;
+ var idBase = that.options.id;
+ var name = that.options.name;
+ var checked = that.options.checked;
+ var content = that.options.content;
+ var html = "";
+ for (var i=1;i<content.length+1;i++) {
+ if($.inArray(i,checked) < 0) {
+ html += "<div class='checkbox-item checkbox-inline icon-check-empty-1' id='" + idBase + i + "' name='" + name + "'></div>" +
+ "<label class='checkbox-label checkbox-inline' for='" + idBase + i + "'>" + content[i-1] + "</label>";
+ } else {
+ html += "<div class='checkbox-item checkbox-inline icon-ok-squared' id='" + idBase + i + "' name='" + name + "'></div>" +
+ "<label class='checkbox-label checkbox-inline' for='" + idBase + i + "'>" + content[i-1] + "</label>";
+ }
+ }
+ $(html).appendTo(that.element);
+ $(".checkbox-item").on("click", function() {
+ var tickID = $(this).attr("id");
+ var tick = tickID.substring(idBase.length,tickID.length);
+ if($(this).hasClass("icon-check-empty-1")) {
+ $(this).removeClass("icon-check-empty-1");
+ $(this).addClass("icon-ok-squared");
+ checked.push(Number(tick));
+ } else {
+ $(this).removeClass("icon-ok-squared");
+ $(this).addClass("icon-check-empty-1");
+ checked.splice($.inArray(Number(tick),checked),1);
+ }
+ });
+ },
+
+ value: function() {
+ var value = new Array();
+ var vContent = this.options.content;
+ var vChencked = this.options.checked;
+ for(var i=0;i<vChencked.length;i++) {
+ value.push(vContent[vChencked[i]-1]);
+ }
+ return value;
+ },
+
+ _destroy: function() {
+ this.element.remove();
+ }
+ });
+ })(jQuery);
diff --git a/ui/new-ui-samples/js/main.js b/ui/new-ui-samples/js/main.js
new file mode 100755
index 0000000..80d83e9
--- /dev/null
+++ b/ui/new-ui-samples/js/main.js
@@ -0,0 +1 @@
+console.log('\'Allo \'Allo!');
diff --git a/ui/new-ui-samples/js/menu-flat.js b/ui/new-ui-samples/js/menu-flat.js
new file mode 100644
index 0000000..3352a2b
--- /dev/null
+++ b/ui/new-ui-samples/js/menu-flat.js
@@ -0,0 +1,98 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// How to use:
+// $("#test-bar").menuFlat({
+// content: [1,2,3,4,5,6], //Set content of the menu.
+// icon: "icon-edit-alt", //Set icon of the menu button.
+// listIconList: ["icon-edit-alt","icon-edit-alt","icon-edit-alt","icon-edit-alt","icon-edit-alt","icon-user"]
+// //Set icons of the menu list.
+// // name is optional which set the name of the menu list.
+// });
+// $("#test-bar0").on("click", function() {
+// alert("hello");
+// });
+// $("#test-bar1").on("click", function() {
+// console.log("hello");
+// });
+
+
+(function($) {
+ $.widget("wok.menuFlat", {
+
+ options: {
+ name: null,
+ icon: null,
+ label: null,
+ content: null
+ },
+
+ _create: function() {
+ var that = this;
+ var icon = that.options.icon;
+ var label = that.options.label;
+ var content = that.options.content;
+ var name = that._setName(that.options.name);
+ var html = "<div class='dropdown menu-flat' id='" + name + "'>" +
+ "<button class='btn btn-primary dropdown-toggle' type='button' data-toggle='dropdown'>" +
+ "<i class=" + icon + "></i>" + label + "<span class='caret'></span></button>" +
+ "</div>";
+ $(html).appendTo(that.element);
+ html = that._setValue(content);
+ $(html).appendTo(that.element[0].children[0]);
+ },
+
+ _setName: function(name) { // Set name
+ var ids = [];
+ $(".menu-flat").each(function() { // Store each .menu-flat instance ID in an array
+ ids.push(this.id);
+ });
+
+ for (this.uuid; $.inArray('wok-dropdown-menu-' + this.uuid, ids) !== -1; ) {
+ this.uuid++; // increment uuid based on .menu-flat instances in the page
+ } // this is necessary to make widget factory skip non-existing uuids from static elements
+ // and prevent duplicated id attributes in the proccess
+
+ if (!name) { // if name is null, a new name will be given with the widget uuid
+ name = 'wok-dropdown-menu-' + this.uuid;
+ } else if ($('#' + name).length) { // if name already exists...
+ name = name.concat('_', +this.uuid); // adds a suffix with uuid
+ }
+
+ return name;
+ },
+
+ _setValue: function(content) {
+ var that = this;
+ var name = that.element[0].children[0].id;
+ var html = "<ul class='dropdown-menu'>";
+ $.each(content, function(index, data) {
+ that.options.content[index] = data.toString();
+ html += (data.critical ? "<li class='critical'>" : "<li>");
+ // <a id=" widget id _ list index" class="action name" href="# action name ">
+ html += "<a id=" + name + '_' + index + " class=" + data.action + " href='#" + data.action + "'><i class='" + data.icon + "'></i>" + data.name + "</a></li>";
+ });
+ html += "</ul>";
+ return html;
+ },
+
+ _destroy: function() {
+ this.element.remove();
+ }
+ });
+})(jQuery);
diff --git a/ui/new-ui-samples/js/radio-flat.js b/ui/new-ui-samples/js/radio-flat.js
new file mode 100644
index 0000000..401ef62
--- /dev/null
+++ b/ui/new-ui-samples/js/radio-flat.js
@@ -0,0 +1,86 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * //How to use:
+ * $(".selector").radioFlat({
+ * id: "t", //Base id of the radio set.
+ * name: "test", //name of the radio.
+ * whichChecked: 2, //First selected position, starts from 1.
+ * content: ["apple", "banana", "orange", "cherry"] //set the content array.
+ * });
+ *
+ *
+ * $(".test-bar").click(function() {
+ * console.log($(".test-bar").radioFlat("value")); //this is how to get the value of selected radio value
+ * });
+ *
+ *
+ *
+ */
+
+ (function($) {
+
+ $.widget("wok.radioFlat", {
+ options: {
+ id: "",
+ name: "",
+ whichChecked: "",
+ content:[],
+ },
+
+ _create: function() {
+ var that = this;
+ var radioName = this.options.name;
+ var labelID = this.options.id;
+ var checked = this.options.whichChecked;
+ var num = Number(this.options.content.length);
+ var html ="";
+ if(num >0) {
+ for(var i=1;i < num+1;i++) {
+ var tmpLabelID = labelID + i;
+ html += "<div class='icon-circle-empty inline-radio radio-label' id='" + tmpLabelID + "'></div>" +
+ "<label class='radio-content inline-radio' for='" + tmpLabelID + "'>" + that.options.content[i-1] + "</label>";
+ }
+ $(html).appendTo(that.element);
+ $("#" + labelID + checked).attr("checked", "true");
+ $("#" + labelID + checked).removeClass("icon-circle-empty");
+ $("#" + labelID + checked).addClass("icon-dot-circled");
+ }
+ $(".radio-label").on("click", function() {
+ $(".radio-label").removeClass("icon-dot-circled");
+ $(".radio-label").addClass("icon-circle-empty");
+ $(".radio-label").removeAttr("checked");
+ $(this).removeClass("icon-circle-empty");
+ $(this).addClass("icon-dot-circled");
+ $(this).attr("checked", "true");
+ var thisID = $(this).attr("id");
+ that.options.whichChecked = thisID.substring(labelID.length,thisID.length);
+ });
+ },
+
+ value: function() {
+ var value = Number(this.options.whichChecked) -1;
+ return this.options.content[value];
+ },
+
+ _destroy: function() {
+ this.element.remove();
+ }
+ });
+ })(jQuery);
diff --git a/ui/new-ui-samples/js/selectmenu-flat.js b/ui/new-ui-samples/js/selectmenu-flat.js
new file mode 100644
index 0000000..de17dcd
--- /dev/null
+++ b/ui/new-ui-samples/js/selectmenu-flat.js
@@ -0,0 +1,130 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+// How to use:
+// $(".selector").selectmenuFlat({
+// content: [1,2,3,4,5,6], //Set content of the select menu
+// selected: 2 // set the selected option, starts from "1"
+// });
+// $(".selector").selectmenuFlat("value", "4"); //Set value.
+// var t = $(".selector").selectmenuFlat("value"); //Get value
+// console.log(t);
+
+
+ (function( $ ) {
+ $.widget("wok.selectmenuFlat", {
+
+ options: {
+ content: null,
+ name: null,
+ selected: null,
+ parentid: null
+ },
+
+ _create: function() {
+ var that = this;
+ var name = that.options.name || $(this.element).attr("id");
+ var value = that.options.content;
+ var parentid = $(this.element).attr("id");
+ that.options.parentid = parentid;
+ var html = "<div class='selected-box'>" +
+ "<input class='select-val'>" +
+ "<span class='select-label'></span>" +
+ "<span class='select-icon icon-down-open'></span>" +
+ "</div>";
+ $(html).appendTo(that.element);
+ html = that._setValue(value);
+ $(html).appendTo(that.element);
+ $("#" + parentid).addClass("select-content");
+ var sel = that.options.selected || 1;
+ sel = that.options.content[Number(sel) -1];
+ that.options.selected = $.inArray(sel, that.options.content) + 1;
+ $(".select-val", "#" + parentid).text(sel);
+ $(".select-label", "#" + parentid).text(sel);
+ $(".selected-box", "#" + parentid).on("click", this._toggleOpt);
+ $(".selectmenu-opt", "#" + parentid).on("click", function() {
+ var selectedText = $(this).text();
+ that.options.selected = $.inArray(selectedText, that.options.content) +1;
+ $(".selected-box .select-label", "#" + parentid).text(selectedText);
+ $(".select-val", "#" + parentid).text(selectedText);
+ $(".selectmenu-list", "#" + parentid).prop("style", "display:none");
+ $(".select-icon", "#" + parentid).removeClass("icon-up-open");
+ $(".select-icon", "#" + parentid).addClass("icon-down-open").css({
+ "border-left": "none"
+ });
+ });
+ $(document).mouseup(function(e) {
+ var container = $(".selectmenu-opt");
+ if(!container.is(e.target) && container.has(e.target).length === 0 && $(".select-icon").hasClass("icon-up-open")) {
+ $(".selectmenu-list", "#" + parentid).prop("style", "display:none");
+ $(".select-icon", "#" + parentid).removeClass("icon-up-open");
+ $(".select-icon", "#" + parentid).addClass("icon-down-open").css({
+ "border-left": "none"
+ });
+ }
+ });
+ },
+
+ _setValue: function(value) {
+ var that = this;
+ var html = "<ul class='selectmenu-list' style='display:none'>";
+ var name = this.options.name || $(this.element).attr("id");
+ $.each(value, function(index, data) {
+ that.options.content[index] = data.toString();
+ html += "<li id='" + name + index + "' class='selectmenu-opt'>" + data + "</li>";
+ });
+ html += "</ul>";
+ return html;
+ },
+
+ _toggleOpt: function() {
+ var thisButton = $(this).parent().attr("id");
+ if($(".select-icon", "#" + thisButton).hasClass("icon-down-open")) {
+ $(".selectmenu-list", "#" + thisButton).prop("style", "display");
+ $(".select-icon", "#" + thisButton).removeClass("icon-down-open");
+ $(".select-icon", "#" + thisButton).addClass("icon-up-open").css({
+ "border-left": "1px solid #d8d8d8"
+ });
+ } else {
+ $(".selectmenu-list", "#" + thisButton).prop("style", "display:none");
+ $(".select-icon", "#" + thisButton).removeClass("icon-up-open");
+ $(".select-icon", "#" + thisButton).addClass("icon-down-open").css({
+ "border-left": "none"
+ });
+ }
+ },
+
+ value: function(value) {
+ var parentid = this.options.parentid;
+ if(!value) {
+ return $(".selected-box .select-val", "#" + parentid).text();
+ }
+ if (value <= this.options.content.length) {
+ this.options.selected = value;
+ var selectedText = this.options.content[value-1];
+ $(".selected-box .select-label", "#" + parentid).text(selectedText);
+ $(".selected-box .select-val", "#" + parentid).text(selectedText);
+ }
+ },
+
+ _destroy: function() {
+ this.element.remove();
+ }
+ });
+ })(jQuery);
diff --git a/ui/new-ui-samples/js/textbox-flat.js b/ui/new-ui-samples/js/textbox-flat.js
new file mode 100644
index 0000000..cd9eca0
--- /dev/null
+++ b/ui/new-ui-samples/js/textbox-flat.js
@@ -0,0 +1,39 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// How to use:
+// $(".selector").textboxFlat({
+// hint: "hint"
+// });
+
+ (function($) {
+ $.widget("wok.textboxFlat", {
+ optons: {
+ hint: ""
+ },
+
+ _create: function() {
+ this.element.addClass("textbox-container");
+ this.element.attr("placeholder", this.options.hint);
+ },
+
+ destroy:function() {
+ this.element.remove();
+ }
+ });
+ })(jQuery);
diff --git a/ui/new-ui-samples/js/vendor.js b/ui/new-ui-samples/js/vendor.js
new file mode 100644
index 0000000..ef0e2ec
--- /dev/null
+++ b/ui/new-ui-samples/js/vendor.js
@@ -0,0 +1,5523 @@
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2015 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/master/LICENSE
+ */
+
+// vim: ts=4 sts=4 sw=4 expandtab
+
+// Add semicolon to prevent IIFE from being passed as argument to concatenated code.
+;
+
+// UMD (Universal Module Definition)
+// see https://github.com/umdjs/umd/blob/master/returnExports.js
+(function (root, factory) {
+ 'use strict';
+
+ /* global define, exports, module */
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(factory);
+ } else if (typeof exports === 'object') {
+ // Node. Does not work with strict CommonJS, but
+ // only CommonJS-like enviroments that support module.exports,
+ // like Node.
+ module.exports = factory();
+ } else {
+ // Browser globals (root is window)
+ root.returnExports = factory();
+ }
+}(this, function () {
+
+/**
+ * Brings an environment as close to ECMAScript 5 compliance
+ * as is possible with the facilities of erstwhile engines.
+ *
+ * Annotated ES5: http://es5.github.com/ (specific links below)
+ * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
+ * Required reading: http://javascriptweblog.wordpress.com/2011/12/05/extending-javascript-nativ…
+ */
+
+// Shortcut to an often accessed properties, in order to avoid multiple
+// dereference that costs universally. This also holds a reference to known-good
+// functions.
+var $Array = Array;
+var ArrayPrototype = $Array.prototype;
+var $Object = Object;
+var ObjectPrototype = $Object.prototype;
+var FunctionPrototype = Function.prototype;
+var $String = String;
+var StringPrototype = $String.prototype;
+var $Number = Number;
+var NumberPrototype = $Number.prototype;
+var array_slice = ArrayPrototype.slice;
+var array_splice = ArrayPrototype.splice;
+var array_push = ArrayPrototype.push;
+var array_unshift = ArrayPrototype.unshift;
+var array_concat = ArrayPrototype.concat;
+var call = FunctionPrototype.call;
+var max = Math.max;
+var min = Math.min;
+
+// Having a toString local variable name breaks in Opera so use to_string.
+var to_string = ObjectPrototype.toString;
+
+var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
+var isCallable; /* inlined from https://npmjs.com/is-callable */ var fnToStr = Function.prototype.toString, tryFunctionObject = function tryFunctionObject(value) { try { fnToStr.call(value); return true; } catch (e) { return false; } }, fnClass = '[object Function]', genClass = '[object GeneratorFunction]'; isCallable = function isCallable(value) { if (typeof value !== 'function') { return false; } if (hasToStringTag) { return tryFunctionObject(value); } var strClass = to_string.call(value); return strClass === fnClass || strClass === genClass; };
+var isRegex; /* inlined from https://npmjs.com/is-regex */ var regexExec = RegExp.prototype.exec, tryRegexExec = function tryRegexExec(value) { try { regexExec.call(value); return true; } catch (e) { return false; } }, regexClass = '[object RegExp]'; isRegex = function isRegex(value) { if (typeof value !== 'object') { return false; } return hasToStringTag ? tryRegexExec(value) : to_string.call(value) === regexClass; };
+var isString; /* inlined from https://npmjs.com/is-string */ var strValue = String.prototype.valueOf, tryStringObject = function tryStringObject(value) { try { strValue.call(value); return true; } catch (e) { return false; } }, stringClass = '[object String]'; isString = function isString(value) { if (typeof value === 'string') { return true; } if (typeof value !== 'object') { return false; } return hasToStringTag ? tryStringObject(value) : to_string.call(value) === stringClass; };
+
+/* inlined from http://npmjs.com/define-properties */
+var defineProperties = (function (has) {
+ var supportsDescriptors = $Object.defineProperty && (function () {
+ try {
+ var obj = {};
+ $Object.defineProperty(obj, 'x', { enumerable: false, value: obj });
+ for (var _ in obj) { return false; }
+ return obj.x === obj;
+ } catch (e) { /* this is ES3 */
+ return false;
+ }
+ }());
+
+ // Define configurable, writable and non-enumerable props
+ // if they don't exist.
+ var defineProperty;
+ if (supportsDescriptors) {
+ defineProperty = function (object, name, method, forceAssign) {
+ if (!forceAssign && (name in object)) { return; }
+ $Object.defineProperty(object, name, {
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ value: method
+ });
+ };
+ } else {
+ defineProperty = function (object, name, method, forceAssign) {
+ if (!forceAssign && (name in object)) { return; }
+ object[name] = method;
+ };
+ }
+ return function defineProperties(object, map, forceAssign) {
+ for (var name in map) {
+ if (has.call(map, name)) {
+ defineProperty(object, name, map[name], forceAssign);
+ }
+ }
+ };
+}(ObjectPrototype.hasOwnProperty));
+
+//
+// Util
+// ======
+//
+
+/* replaceable with https://npmjs.com/package/es-abstract /helpers/isPrimitive */
+var isPrimitive = function isPrimitive(input) {
+ var type = typeof input;
+ return input === null || (type !== 'object' && type !== 'function');
+};
+
+var ES = {
+ // ES5 9.4
+ // http://es5.github.com/#x9.4
+ // http://jsperf.com/to-integer
+ /* replaceable with https://npmjs.com/package/es-abstract ES5.ToInteger */
+ ToInteger: function ToInteger(num) {
+ var n = +num;
+ if (n !== n) { // isNaN
+ n = 0;
+ } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
+ n = (n > 0 || -1) * Math.floor(Math.abs(n));
+ }
+ return n;
+ },
+
+ /* replaceable with https://npmjs.com/package/es-abstract ES5.ToPrimitive */
+ ToPrimitive: function ToPrimitive(input) {
+ var val, valueOf, toStr;
+ if (isPrimitive(input)) {
+ return input;
+ }
+ valueOf = input.valueOf;
+ if (isCallable(valueOf)) {
+ val = valueOf.call(input);
+ if (isPrimitive(val)) {
+ return val;
+ }
+ }
+ toStr = input.toString;
+ if (isCallable(toStr)) {
+ val = toStr.call(input);
+ if (isPrimitive(val)) {
+ return val;
+ }
+ }
+ throw new TypeError();
+ },
+
+ // ES5 9.9
+ // http://es5.github.com/#x9.9
+ /* replaceable with https://npmjs.com/package/es-abstract ES5.ToObject */
+ ToObject: function (o) {
+ /* jshint eqnull: true */
+ if (o == null) { // this matches both null and undefined
+ throw new TypeError("can't convert " + o + ' to object');
+ }
+ return $Object(o);
+ },
+
+ /* replaceable with https://npmjs.com/package/es-abstract ES5.ToUint32 */
+ ToUint32: function ToUint32(x) {
+ return x >>> 0;
+ }
+};
+
+//
+// Function
+// ========
+//
+
+// ES-5 15.3.4.5
+// http://es5.github.com/#x15.3.4.5
+
+var Empty = function Empty() {};
+
+defineProperties(FunctionPrototype, {
+ bind: function bind(that) { // .length is 1
+ // 1. Let Target be the this value.
+ var target = this;
+ // 2. If IsCallable(Target) is false, throw a TypeError exception.
+ if (!isCallable(target)) {
+ throw new TypeError('Function.prototype.bind called on incompatible ' + target);
+ }
+ // 3. Let A be a new (possibly empty) internal list of all of the
+ // argument values provided after thisArg (arg1, arg2 etc), in order.
+ // XXX slicedArgs will stand in for "A" if used
+ var args = array_slice.call(arguments, 1); // for normal call
+ // 4. Let F be a new native ECMAScript object.
+ // 11. Set the [[Prototype]] internal property of F to the standard
+ // built-in Function prototype object as specified in 15.3.3.1.
+ // 12. Set the [[Call]] internal property of F as described in
+ // 15.3.4.5.1.
+ // 13. Set the [[Construct]] internal property of F as described in
+ // 15.3.4.5.2.
+ // 14. Set the [[HasInstance]] internal property of F as described in
+ // 15.3.4.5.3.
+ var bound;
+ var binder = function () {
+
+ if (this instanceof bound) {
+ // 15.3.4.5.2 [[Construct]]
+ // When the [[Construct]] internal method of a function object,
+ // F that was created using the bind function is called with a
+ // list of arguments ExtraArgs, the following steps are taken:
+ // 1. Let target be the value of F's [[TargetFunction]]
+ // internal property.
+ // 2. If target has no [[Construct]] internal method, a
+ // TypeError exception is thrown.
+ // 3. Let boundArgs be the value of F's [[BoundArgs]] internal
+ // property.
+ // 4. Let args be a new list containing the same values as the
+ // list boundArgs in the same order followed by the same
+ // values as the list ExtraArgs in the same order.
+ // 5. Return the result of calling the [[Construct]] internal
+ // method of target providing args as the arguments.
+
+ var result = target.apply(
+ this,
+ array_concat.call(args, array_slice.call(arguments))
+ );
+ if ($Object(result) === result) {
+ return result;
+ }
+ return this;
+
+ } else {
+ // 15.3.4.5.1 [[Call]]
+ // When the [[Call]] internal method of a function object, F,
+ // which was created using the bind function is called with a
+ // this value and a list of arguments ExtraArgs, the following
+ // steps are taken:
+ // 1. Let boundArgs be the value of F's [[BoundArgs]] internal
+ // property.
+ // 2. Let boundThis be the value of F's [[BoundThis]] internal
+ // property.
+ // 3. Let target be the value of F's [[TargetFunction]] internal
+ // property.
+ // 4. Let args be a new list containing the same values as the
+ // list boundArgs in the same order followed by the same
+ // values as the list ExtraArgs in the same order.
+ // 5. Return the result of calling the [[Call]] internal method
+ // of target providing boundThis as the this value and
+ // providing args as the arguments.
+
+ // equiv: target.call(this, ...boundArgs, ...args)
+ return target.apply(
+ that,
+ array_concat.call(args, array_slice.call(arguments))
+ );
+
+ }
+
+ };
+
+ // 15. If the [[Class]] internal property of Target is "Function", then
+ // a. Let L be the length property of Target minus the length of A.
+ // b. Set the length own property of F to either 0 or L, whichever is
+ // larger.
+ // 16. Else set the length own property of F to 0.
+
+ var boundLength = max(0, target.length - args.length);
+
+ // 17. Set the attributes of the length own property of F to the values
+ // specified in 15.3.5.1.
+ var boundArgs = [];
+ for (var i = 0; i < boundLength; i++) {
+ array_push.call(boundArgs, '$' + i);
+ }
+
+ // XXX Build a dynamic function with desired amount of arguments is the only
+ // way to set the length property of a function.
+ // In environments where Content Security Policies enabled (Chrome extensions,
+ // for ex.) all use of eval or Function costructor throws an exception.
+ // However in all of these environments Function.prototype.bind exists
+ // and so this code will never be executed.
+ bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this, arguments); }')(binder);
+
+ if (target.prototype) {
+ Empty.prototype = target.prototype;
+ bound.prototype = new Empty();
+ // Clean up dangling references.
+ Empty.prototype = null;
+ }
+
+ // TODO
+ // 18. Set the [[Extensible]] internal property of F to true.
+
+ // TODO
+ // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).
+ // 20. Call the [[DefineOwnProperty]] internal method of F with
+ // arguments "caller", PropertyDescriptor {[[Get]]: thrower, [[Set]]:
+ // thrower, [[Enumerable]]: false, [[Configurable]]: false}, and
+ // false.
+ // 21. Call the [[DefineOwnProperty]] internal method of F with
+ // arguments "arguments", PropertyDescriptor {[[Get]]: thrower,
+ // [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},
+ // and false.
+
+ // TODO
+ // NOTE Function objects created using Function.prototype.bind do not
+ // have a prototype property or the [[Code]], [[FormalParameters]], and
+ // [[Scope]] internal properties.
+ // XXX can't delete prototype in pure-js.
+
+ // 22. Return F.
+ return bound;
+ }
+});
+
+// _Please note: Shortcuts are defined after `Function.prototype.bind` as we
+// us it in defining shortcuts.
+var owns = call.bind(ObjectPrototype.hasOwnProperty);
+var toStr = call.bind(ObjectPrototype.toString);
+var strSlice = call.bind(StringPrototype.slice);
+var strSplit = call.bind(StringPrototype.split);
+
+//
+// Array
+// =====
+//
+
+var isArray = $Array.isArray || function isArray(obj) {
+ return toStr(obj) === '[object Array]';
+};
+
+// ES5 15.4.4.12
+// http://es5.github.com/#x15.4.4.13
+// Return len+argCount.
+// [bugfix, ielt8]
+// IE < 8 bug: [].unshift(0) === undefined but should be "1"
+var hasUnshiftReturnValueBug = [].unshift(0) !== 1;
+defineProperties(ArrayPrototype, {
+ unshift: function () {
+ array_unshift.apply(this, arguments);
+ return this.length;
+ }
+}, hasUnshiftReturnValueBug);
+
+// ES5 15.4.3.2
+// http://es5.github.com/#x15.4.3.2
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/…
+defineProperties($Array, { isArray: isArray });
+
+// The IsCallable() check in the Array functions
+// has been replaced with a strict check on the
+// internal class of the object to trap cases where
+// the provided function was actually a regular
+// expression literal, which in V8 and
+// JavaScriptCore is a typeof "function". Only in
+// V8 are regular expression literals permitted as
+// reduce parameters, so it is desirable in the
+// general case for the shim to match the more
+// strict and common behavior of rejecting regular
+// expressions.
+
+// ES5 15.4.4.18
+// http://es5.github.com/#x15.4.4.18
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/…
+
+// Check failure of by-index access of string characters (IE < 9)
+// and failure of `0 in boxedString` (Rhino)
+var boxedString = $Object('a');
+var splitString = boxedString[0] !== 'a' || !(0 in boxedString);
+
+var properlyBoxesContext = function properlyBoxed(method) {
+ // Check node 0.6.21 bug where third parameter is not boxed
+ var properlyBoxesNonStrict = true;
+ var properlyBoxesStrict = true;
+ if (method) {
+ method.call('foo', function (_, __, context) {
+ if (typeof context !== 'object') { properlyBoxesNonStrict = false; }
+ });
+
+ method.call([1], function () {
+ 'use strict';
+
+ properlyBoxesStrict = typeof this === 'string';
+ }, 'x');
+ }
+ return !!method && properlyBoxesNonStrict && properlyBoxesStrict;
+};
+
+defineProperties(ArrayPrototype, {
+ forEach: function forEach(callbackfn /*, thisArg*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var i = -1;
+ var length = self.length >>> 0;
+ var T;
+ if (arguments.length > 1) {
+ T = arguments[1];
+ }
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.forEach callback must be a function');
+ }
+
+ while (++i < length) {
+ if (i in self) {
+ // Invoke the callback function with call, passing arguments:
+ // context, property value, property key, thisArg object
+ if (typeof T !== 'undefined') {
+ callbackfn.call(T, self[i], i, object);
+ } else {
+ callbackfn(self[i], i, object);
+ }
+ }
+ }
+ }
+}, !properlyBoxesContext(ArrayPrototype.forEach));
+
+// ES5 15.4.4.19
+// http://es5.github.com/#x15.4.4.19
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Arra…
+defineProperties(ArrayPrototype, {
+ map: function map(callbackfn/*, thisArg*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = self.length >>> 0;
+ var result = $Array(length);
+ var T;
+ if (arguments.length > 1) {
+ T = arguments[1];
+ }
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.map callback must be a function');
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self) {
+ if (typeof T !== 'undefined') {
+ result[i] = callbackfn.call(T, self[i], i, object);
+ } else {
+ result[i] = callbackfn(self[i], i, object);
+ }
+ }
+ }
+ return result;
+ }
+}, !properlyBoxesContext(ArrayPrototype.map));
+
+// ES5 15.4.4.20
+// http://es5.github.com/#x15.4.4.20
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Arra…
+defineProperties(ArrayPrototype, {
+ filter: function filter(callbackfn /*, thisArg*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = self.length >>> 0;
+ var result = [];
+ var value;
+ var T;
+ if (arguments.length > 1) {
+ T = arguments[1];
+ }
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.filter callback must be a function');
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self) {
+ value = self[i];
+ if (typeof T === 'undefined' ? callbackfn(value, i, object) : callbackfn.call(T, value, i, object)) {
+ array_push.call(result, value);
+ }
+ }
+ }
+ return result;
+ }
+}, !properlyBoxesContext(ArrayPrototype.filter));
+
+// ES5 15.4.4.16
+// http://es5.github.com/#x15.4.4.16
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/…
+defineProperties(ArrayPrototype, {
+ every: function every(callbackfn /*, thisArg*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = self.length >>> 0;
+ var T;
+ if (arguments.length > 1) {
+ T = arguments[1];
+ }
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.every callback must be a function');
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && !(typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {
+ return false;
+ }
+ }
+ return true;
+ }
+}, !properlyBoxesContext(ArrayPrototype.every));
+
+// ES5 15.4.4.17
+// http://es5.github.com/#x15.4.4.17
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/…
+defineProperties(ArrayPrototype, {
+ some: function some(callbackfn/*, thisArg */) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = self.length >>> 0;
+ var T;
+ if (arguments.length > 1) {
+ T = arguments[1];
+ }
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.some callback must be a function');
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && (typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {
+ return true;
+ }
+ }
+ return false;
+ }
+}, !properlyBoxesContext(ArrayPrototype.some));
+
+// ES5 15.4.4.21
+// http://es5.github.com/#x15.4.4.21
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Arra…
+var reduceCoercesToObject = false;
+if (ArrayPrototype.reduce) {
+ reduceCoercesToObject = typeof ArrayPrototype.reduce.call('es5', function (_, __, ___, list) { return list; }) === 'object';
+}
+defineProperties(ArrayPrototype, {
+ reduce: function reduce(callbackfn /*, initialValue*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = self.length >>> 0;
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.reduce callback must be a function');
+ }
+
+ // no value to return if no initial value and an empty array
+ if (length === 0 && arguments.length === 1) {
+ throw new TypeError('reduce of empty array with no initial value');
+ }
+
+ var i = 0;
+ var result;
+ if (arguments.length >= 2) {
+ result = arguments[1];
+ } else {
+ do {
+ if (i in self) {
+ result = self[i++];
+ break;
+ }
+
+ // if array contains no values, no initial value to return
+ if (++i >= length) {
+ throw new TypeError('reduce of empty array with no initial value');
+ }
+ } while (true);
+ }
+
+ for (; i < length; i++) {
+ if (i in self) {
+ result = callbackfn(result, self[i], i, object);
+ }
+ }
+
+ return result;
+ }
+}, !reduceCoercesToObject);
+
+// ES5 15.4.4.22
+// http://es5.github.com/#x15.4.4.22
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Arra…
+var reduceRightCoercesToObject = false;
+if (ArrayPrototype.reduceRight) {
+ reduceRightCoercesToObject = typeof ArrayPrototype.reduceRight.call('es5', function (_, __, ___, list) { return list; }) === 'object';
+}
+defineProperties(ArrayPrototype, {
+ reduceRight: function reduceRight(callbackfn/*, initial*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = self.length >>> 0;
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.reduceRight callback must be a function');
+ }
+
+ // no value to return if no initial value, empty array
+ if (length === 0 && arguments.length === 1) {
+ throw new TypeError('reduceRight of empty array with no initial value');
+ }
+
+ var result;
+ var i = length - 1;
+ if (arguments.length >= 2) {
+ result = arguments[1];
+ } else {
+ do {
+ if (i in self) {
+ result = self[i--];
+ break;
+ }
+
+ // if array contains no values, no initial value to return
+ if (--i < 0) {
+ throw new TypeError('reduceRight of empty array with no initial value');
+ }
+ } while (true);
+ }
+
+ if (i < 0) {
+ return result;
+ }
+
+ do {
+ if (i in self) {
+ result = callbackfn(result, self[i], i, object);
+ }
+ } while (i--);
+
+ return result;
+ }
+}, !reduceRightCoercesToObject);
+
+// ES5 15.4.4.14
+// http://es5.github.com/#x15.4.4.14
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/…
+var hasFirefox2IndexOfBug = ArrayPrototype.indexOf && [0, 1].indexOf(1, 2) !== -1;
+defineProperties(ArrayPrototype, {
+ indexOf: function indexOf(searchElement /*, fromIndex */) {
+ var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);
+ var length = self.length >>> 0;
+
+ if (length === 0) {
+ return -1;
+ }
+
+ var i = 0;
+ if (arguments.length > 1) {
+ i = ES.ToInteger(arguments[1]);
+ }
+
+ // handle negative indices
+ i = i >= 0 ? i : max(0, length + i);
+ for (; i < length; i++) {
+ if (i in self && self[i] === searchElement) {
+ return i;
+ }
+ }
+ return -1;
+ }
+}, hasFirefox2IndexOfBug);
+
+// ES5 15.4.4.15
+// http://es5.github.com/#x15.4.4.15
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/…
+var hasFirefox2LastIndexOfBug = ArrayPrototype.lastIndexOf && [0, 1].lastIndexOf(0, -3) !== -1;
+defineProperties(ArrayPrototype, {
+ lastIndexOf: function lastIndexOf(searchElement /*, fromIndex */) {
+ var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);
+ var length = self.length >>> 0;
+
+ if (length === 0) {
+ return -1;
+ }
+ var i = length - 1;
+ if (arguments.length > 1) {
+ i = min(i, ES.ToInteger(arguments[1]));
+ }
+ // handle negative indices
+ i = i >= 0 ? i : length - Math.abs(i);
+ for (; i >= 0; i--) {
+ if (i in self && searchElement === self[i]) {
+ return i;
+ }
+ }
+ return -1;
+ }
+}, hasFirefox2LastIndexOfBug);
+
+// ES5 15.4.4.12
+// http://es5.github.com/#x15.4.4.12
+var spliceNoopReturnsEmptyArray = (function () {
+ var a = [1, 2];
+ var result = a.splice();
+ return a.length === 2 && isArray(result) && result.length === 0;
+}());
+defineProperties(ArrayPrototype, {
+ // Safari 5.0 bug where .splice() returns undefined
+ splice: function splice(start, deleteCount) {
+ if (arguments.length === 0) {
+ return [];
+ } else {
+ return array_splice.apply(this, arguments);
+ }
+ }
+}, !spliceNoopReturnsEmptyArray);
+
+var spliceWorksWithEmptyObject = (function () {
+ var obj = {};
+ ArrayPrototype.splice.call(obj, 0, 0, 1);
+ return obj.length === 1;
+}());
+defineProperties(ArrayPrototype, {
+ splice: function splice(start, deleteCount) {
+ if (arguments.length === 0) { return []; }
+ var args = arguments;
+ this.length = max(ES.ToInteger(this.length), 0);
+ if (arguments.length > 0 && typeof deleteCount !== 'number') {
+ args = array_slice.call(arguments);
+ if (args.length < 2) {
+ array_push.call(args, this.length - start);
+ } else {
+ args[1] = ES.ToInteger(deleteCount);
+ }
+ }
+ return array_splice.apply(this, args);
+ }
+}, !spliceWorksWithEmptyObject);
+var spliceWorksWithLargeSparseArrays = (function () {
+ // Per https://github.com/es-shims/es5-shim/issues/295
+ // Safari 7/8 breaks with sparse arrays of size 1e5 or greater
+ var arr = new $Array(1e5);
+ // note: the index MUST be 8 or larger or the test will false pass
+ arr[8] = 'x';
+ arr.splice(1, 1);
+ // note: this test must be defined *after* the indexOf shim
+ // per https://github.com/es-shims/es5-shim/issues/313
+ return arr.indexOf('x') === 7;
+}());
+var spliceWorksWithSmallSparseArrays = (function () {
+ // Per https://github.com/es-shims/es5-shim/issues/295
+ // Opera 12.15 breaks on this, no idea why.
+ var n = 256;
+ var arr = [];
+ arr[n] = 'a';
+ arr.splice(n + 1, 0, 'b');
+ return arr[n] === 'a';
+}());
+defineProperties(ArrayPrototype, {
+ splice: function splice(start, deleteCount) {
+ var O = ES.ToObject(this);
+ var A = [];
+ var len = ES.ToUint32(O.length);
+ var relativeStart = ES.ToInteger(start);
+ var actualStart = relativeStart < 0 ? max((len + relativeStart), 0) : min(relativeStart, len);
+ var actualDeleteCount = min(max(ES.ToInteger(deleteCount), 0), len - actualStart);
+
+ var k = 0;
+ var from;
+ while (k < actualDeleteCount) {
+ from = $String(actualStart + k);
+ if (owns(O, from)) {
+ A[k] = O[from];
+ }
+ k += 1;
+ }
+
+ var items = array_slice.call(arguments, 2);
+ var itemCount = items.length;
+ var to;
+ if (itemCount < actualDeleteCount) {
+ k = actualStart;
+ while (k < (len - actualDeleteCount)) {
+ from = $String(k + actualDeleteCount);
+ to = $String(k + itemCount);
+ if (owns(O, from)) {
+ O[to] = O[from];
+ } else {
+ delete O[to];
+ }
+ k += 1;
+ }
+ k = len;
+ while (k > (len - actualDeleteCount + itemCount)) {
+ delete O[k - 1];
+ k -= 1;
+ }
+ } else if (itemCount > actualDeleteCount) {
+ k = len - actualDeleteCount;
+ while (k > actualStart) {
+ from = $String(k + actualDeleteCount - 1);
+ to = $String(k + itemCount - 1);
+ if (owns(O, from)) {
+ O[to] = O[from];
+ } else {
+ delete O[to];
+ }
+ k -= 1;
+ }
+ }
+ k = actualStart;
+ for (var i = 0; i < items.length; ++i) {
+ O[k] = items[i];
+ k += 1;
+ }
+ O.length = len - actualDeleteCount + itemCount;
+
+ return A;
+ }
+}, !spliceWorksWithLargeSparseArrays || !spliceWorksWithSmallSparseArrays);
+
+//
+// Object
+// ======
+//
+
+// ES5 15.2.3.14
+// http://es5.github.com/#x15.2.3.14
+
+// http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implem…
+var hasDontEnumBug = !({ 'toString': null }).propertyIsEnumerable('toString');
+var hasProtoEnumBug = function () {}.propertyIsEnumerable('prototype');
+var hasStringEnumBug = !owns('x', '0');
+var equalsConstructorPrototype = function (o) {
+ var ctor = o.constructor;
+ return ctor && ctor.prototype === o;
+};
+var blacklistedKeys = {
+ $window: true,
+ $console: true,
+ $parent: true,
+ $self: true,
+ $frames: true,
+ $frameElement: true,
+ $webkitIndexedDB: true,
+ $webkitStorageInfo: true
+};
+var hasAutomationEqualityBug = (function () {
+ /* globals window */
+ if (typeof window === 'undefined') { return false; }
+ for (var k in window) {
+ if (!blacklistedKeys['$' + k] && owns(window, k) && window[k] !== null && typeof window[k] === 'object') {
+ try {
+ equalsConstructorPrototype(window[k]);
+ } catch (e) {
+ return true;
+ }
+ }
+ }
+ return false;
+}());
+var equalsConstructorPrototypeIfNotBuggy = function (object) {
+ if (typeof window === 'undefined' || !hasAutomationEqualityBug) { return equalsConstructorPrototype(object); }
+ try {
+ return equalsConstructorPrototype(object);
+ } catch (e) {
+ return false;
+ }
+};
+var dontEnums = [
+ 'toString',
+ 'toLocaleString',
+ 'valueOf',
+ 'hasOwnProperty',
+ 'isPrototypeOf',
+ 'propertyIsEnumerable',
+ 'constructor'
+];
+var dontEnumsLength = dontEnums.length;
+
+var isArguments = function isArguments(value) {
+ var str = toStr(value);
+ var isArgs = str === '[object Arguments]';
+ if (!isArgs) {
+ isArgs = !isArray(value) &&
+ value !== null &&
+ typeof value === 'object' &&
+ typeof value.length === 'number' &&
+ value.length >= 0 &&
+ isCallable(value.callee);
+ }
+ return isArgs;
+};
+
+defineProperties($Object, {
+ keys: function keys(object) {
+ var isFn = isCallable(object);
+ var isArgs = isArguments(object);
+ var isObject = object !== null && typeof object === 'object';
+ var isStr = isObject && isString(object);
+
+ if (!isObject && !isFn && !isArgs) {
+ throw new TypeError('Object.keys called on a non-object');
+ }
+
+ var theKeys = [];
+ var skipProto = hasProtoEnumBug && isFn;
+ if ((isStr && hasStringEnumBug) || isArgs) {
+ for (var i = 0; i < object.length; ++i) {
+ array_push.call(theKeys, $String(i));
+ }
+ }
+
+ if (!isArgs) {
+ for (var name in object) {
+ if (!(skipProto && name === 'prototype') && owns(object, name)) {
+ array_push.call(theKeys, $String(name));
+ }
+ }
+ }
+
+ if (hasDontEnumBug) {
+ var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
+ for (var j = 0; j < dontEnumsLength; j++) {
+ var dontEnum = dontEnums[j];
+ if (!(skipConstructor && dontEnum === 'constructor') && owns(object, dontEnum)) {
+ array_push.call(theKeys, dontEnum);
+ }
+ }
+ }
+ return theKeys;
+ }
+});
+
+var keysWorksWithArguments = $Object.keys && (function () {
+ // Safari 5.0 bug
+ return $Object.keys(arguments).length === 2;
+}(1, 2));
+var originalKeys = $Object.keys;
+defineProperties($Object, {
+ keys: function keys(object) {
+ if (isArguments(object)) {
+ return originalKeys(array_slice.call(object));
+ } else {
+ return originalKeys(object);
+ }
+ }
+}, !keysWorksWithArguments);
+
+//
+// Date
+// ====
+//
+
+// ES5 15.9.5.43
+// http://es5.github.com/#x15.9.5.43
+// This function returns a String value represent the instance in time
+// represented by this Date object. The format of the String is the Date Time
+// string format defined in 15.9.1.15. All fields are present in the String.
+// The time zone is always UTC, denoted by the suffix Z. If the time value of
+// this object is not a finite Number a RangeError exception is thrown.
+var negativeDate = -62198755200000;
+var negativeYearString = '-000001';
+var hasNegativeDateBug = Date.prototype.toISOString && new Date(negativeDate).toISOString().indexOf(negativeYearString) === -1;
+var hasSafari51DateBug = Date.prototype.toISOString && new Date(-1).toISOString() !== '1969-12-31T23:59:59.999Z';
+
+defineProperties(Date.prototype, {
+ toISOString: function toISOString() {
+ var result, length, value, year, month;
+ if (!isFinite(this)) {
+ throw new RangeError('Date.prototype.toISOString called on non-finite value.');
+ }
+
+ year = this.getUTCFullYear();
+
+ month = this.getUTCMonth();
+ // see https://github.com/es-shims/es5-shim/issues/111
+ year += Math.floor(month / 12);
+ month = (month % 12 + 12) % 12;
+
+ // the date time string format is specified in 15.9.1.15.
+ result = [month + 1, this.getUTCDate(), this.getUTCHours(), this.getUTCMinutes(), this.getUTCSeconds()];
+ year = (
+ (year < 0 ? '-' : (year > 9999 ? '+' : '')) +
+ strSlice('00000' + Math.abs(year), (0 <= year && year <= 9999) ? -4 : -6)
+ );
+
+ length = result.length;
+ while (length--) {
+ value = result[length];
+ // pad months, days, hours, minutes, and seconds to have two
+ // digits.
+ if (value < 10) {
+ result[length] = '0' + value;
+ }
+ }
+ // pad milliseconds to have three digits.
+ return (
+ year + '-' + array_slice.call(result, 0, 2).join('-') +
+ 'T' + array_slice.call(result, 2).join(':') + '.' +
+ strSlice('000' + this.getUTCMilliseconds(), -3) + 'Z'
+ );
+ }
+}, hasNegativeDateBug || hasSafari51DateBug);
+
+// ES5 15.9.5.44
+// http://es5.github.com/#x15.9.5.44
+// This function provides a String representation of a Date object for use by
+// JSON.stringify (15.12.3).
+var dateToJSONIsSupported = (function () {
+ try {
+ return Date.prototype.toJSON &&
+ new Date(NaN).toJSON() === null &&
+ new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1 &&
+ Date.prototype.toJSON.call({ // generic
+ toISOString: function () { return true; }
+ });
+ } catch (e) {
+ return false;
+ }
+}());
+if (!dateToJSONIsSupported) {
+ Date.prototype.toJSON = function toJSON(key) {
+ // When the toJSON method is called with argument key, the following
+ // steps are taken:
+
+ // 1. Let O be the result of calling ToObject, giving it the this
+ // value as its argument.
+ // 2. Let tv be ES.ToPrimitive(O, hint Number).
+ var O = $Object(this);
+ var tv = ES.ToPrimitive(O);
+ // 3. If tv is a Number and is not finite, return null.
+ if (typeof tv === 'number' && !isFinite(tv)) {
+ return null;
+ }
+ // 4. Let toISO be the result of calling the [[Get]] internal method of
+ // O with argument "toISOString".
+ var toISO = O.toISOString;
+ // 5. If IsCallable(toISO) is false, throw a TypeError exception.
+ if (!isCallable(toISO)) {
+ throw new TypeError('toISOString property is not callable');
+ }
+ // 6. Return the result of calling the [[Call]] internal method of
+ // toISO with O as the this value and an empty argument list.
+ return toISO.call(O);
+
+ // NOTE 1 The argument is ignored.
+
+ // NOTE 2 The toJSON function is intentionally generic; it does not
+ // require that its this value be a Date object. Therefore, it can be
+ // transferred to other kinds of objects for use as a method. However,
+ // it does require that any such object have a toISOString method. An
+ // object is free to use the argument key to filter its
+ // stringification.
+ };
+}
+
+// ES5 15.9.4.2
+// http://es5.github.com/#x15.9.4.2
+// based on work shared by Daniel Friesen (dantman)
+// http://gist.github.com/303249
+var supportsExtendedYears = Date.parse('+033658-09-27T01:46:40.000Z') === 1e15;
+var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z')) || !isNaN(Date.parse('2012-12-31T23:59:60.000Z'));
+var doesNotParseY2KNewYear = isNaN(Date.parse('2000-01-01T00:00:00.000Z'));
+if (!Date.parse || doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExtendedYears) {
+ // XXX global assignment won't work in embeddings that use
+ // an alternate object for the context.
+ /* global Date: true */
+ /* eslint-disable no-undef */
+ Date = (function (NativeDate) {
+ /* eslint-enable no-undef */
+ // Date.length === 7
+ var DateShim = function Date(Y, M, D, h, m, s, ms) {
+ var length = arguments.length;
+ var date;
+ if (this instanceof NativeDate) {
+ date = length === 1 && $String(Y) === Y ? // isString(Y)
+ // We explicitly pass it through parse:
+ new NativeDate(DateShim.parse(Y)) :
+ // We have to manually make calls depending on argument
+ // length here
+ length >= 7 ? new NativeDate(Y, M, D, h, m, s, ms) :
+ length >= 6 ? new NativeDate(Y, M, D, h, m, s) :
+ length >= 5 ? new NativeDate(Y, M, D, h, m) :
+ length >= 4 ? new NativeDate(Y, M, D, h) :
+ length >= 3 ? new NativeDate(Y, M, D) :
+ length >= 2 ? new NativeDate(Y, M) :
+ length >= 1 ? new NativeDate(Y) :
+ new NativeDate();
+ } else {
+ date = NativeDate.apply(this, arguments);
+ }
+ // Prevent mixups with unfixed Date object
+ defineProperties(date, { constructor: DateShim }, true);
+ return date;
+ };
+
+ // 15.9.1.15 Date Time String Format.
+ var isoDateExpression = new RegExp('^' +
+ '(\\d{4}|[+-]\\d{6})' + // four-digit year capture or sign +
+ // 6-digit extended year
+ '(?:-(\\d{2})' + // optional month capture
+ '(?:-(\\d{2})' + // optional day capture
+ '(?:' + // capture hours:minutes:seconds.milliseconds
+ 'T(\\d{2})' + // hours capture
+ ':(\\d{2})' + // minutes capture
+ '(?:' + // optional :seconds.milliseconds
+ ':(\\d{2})' + // seconds capture
+ '(?:(\\.\\d{1,}))?' + // milliseconds capture
+ ')?' +
+ '(' + // capture UTC offset component
+ 'Z|' + // UTC capture
+ '(?:' + // offset specifier +/-hours:minutes
+ '([-+])' + // sign capture
+ '(\\d{2})' + // hours offset capture
+ ':(\\d{2})' + // minutes offset capture
+ ')' +
+ ')?)?)?)?' +
+ '$');
+
+ var months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];
+
+ var dayFromMonth = function dayFromMonth(year, month) {
+ var t = month > 1 ? 1 : 0;
+ return (
+ months[month] +
+ Math.floor((year - 1969 + t) / 4) -
+ Math.floor((year - 1901 + t) / 100) +
+ Math.floor((year - 1601 + t) / 400) +
+ 365 * (year - 1970)
+ );
+ };
+
+ var toUTC = function toUTC(t) {
+ return $Number(new NativeDate(1970, 0, 1, 0, 0, 0, t));
+ };
+
+ // Copy any custom methods a 3rd party library may have added
+ for (var key in NativeDate) {
+ if (owns(NativeDate, key)) {
+ DateShim[key] = NativeDate[key];
+ }
+ }
+
+ // Copy "native" methods explicitly; they may be non-enumerable
+ defineProperties(DateShim, {
+ now: NativeDate.now,
+ UTC: NativeDate.UTC
+ }, true);
+ DateShim.prototype = NativeDate.prototype;
+ defineProperties(DateShim.prototype, {
+ constructor: DateShim
+ }, true);
+
+ // Upgrade Date.parse to handle simplified ISO 8601 strings
+ var parseShim = function parse(string) {
+ var match = isoDateExpression.exec(string);
+ if (match) {
+ // parse months, days, hours, minutes, seconds, and milliseconds
+ // provide default values if necessary
+ // parse the UTC offset component
+ var year = $Number(match[1]),
+ month = $Number(match[2] || 1) - 1,
+ day = $Number(match[3] || 1) - 1,
+ hour = $Number(match[4] || 0),
+ minute = $Number(match[5] || 0),
+ second = $Number(match[6] || 0),
+ millisecond = Math.floor($Number(match[7] || 0) * 1000),
+ // When time zone is missed, local offset should be used
+ // (ES 5.1 bug)
+ // see https://bugs.ecmascript.org/show_bug.cgi?id=112
+ isLocalTime = Boolean(match[4] && !match[8]),
+ signOffset = match[9] === '-' ? 1 : -1,
+ hourOffset = $Number(match[10] || 0),
+ minuteOffset = $Number(match[11] || 0),
+ result;
+ if (
+ hour < (
+ minute > 0 || second > 0 || millisecond > 0 ?
+ 24 : 25
+ ) &&
+ minute < 60 && second < 60 && millisecond < 1000 &&
+ month > -1 && month < 12 && hourOffset < 24 &&
+ minuteOffset < 60 && // detect invalid offsets
+ day > -1 &&
+ day < (
+ dayFromMonth(year, month + 1) -
+ dayFromMonth(year, month)
+ )
+ ) {
+ result = (
+ (dayFromMonth(year, month) + day) * 24 +
+ hour +
+ hourOffset * signOffset
+ ) * 60;
+ result = (
+ (result + minute + minuteOffset * signOffset) * 60 +
+ second
+ ) * 1000 + millisecond;
+ if (isLocalTime) {
+ result = toUTC(result);
+ }
+ if (-8.64e15 <= result && result <= 8.64e15) {
+ return result;
+ }
+ }
+ return NaN;
+ }
+ return NativeDate.parse.apply(this, arguments);
+ };
+ defineProperties(DateShim, { parse: parseShim });
+
+ return DateShim;
+ }(Date));
+ /* global Date: false */
+}
+
+// ES5 15.9.4.4
+// http://es5.github.com/#x15.9.4.4
+if (!Date.now) {
+ Date.now = function now() {
+ return new Date().getTime();
+ };
+}
+
+//
+// Number
+// ======
+//
+
+// ES5.1 15.7.4.5
+// http://es5.github.com/#x15.7.4.5
+var hasToFixedBugs = NumberPrototype.toFixed && (
+ (0.00008).toFixed(3) !== '0.000' ||
+ (0.9).toFixed(0) !== '1' ||
+ (1.255).toFixed(2) !== '1.25' ||
+ (1000000000000000128).toFixed(0) !== '1000000000000000128'
+);
+
+var toFixedHelpers = {
+ base: 1e7,
+ size: 6,
+ data: [0, 0, 0, 0, 0, 0],
+ multiply: function multiply(n, c) {
+ var i = -1;
+ var c2 = c;
+ while (++i < toFixedHelpers.size) {
+ c2 += n * toFixedHelpers.data[i];
+ toFixedHelpers.data[i] = c2 % toFixedHelpers.base;
+ c2 = Math.floor(c2 / toFixedHelpers.base);
+ }
+ },
+ divide: function divide(n) {
+ var i = toFixedHelpers.size, c = 0;
+ while (--i >= 0) {
+ c += toFixedHelpers.data[i];
+ toFixedHelpers.data[i] = Math.floor(c / n);
+ c = (c % n) * toFixedHelpers.base;
+ }
+ },
+ numToString: function numToString() {
+ var i = toFixedHelpers.size;
+ var s = '';
+ while (--i >= 0) {
+ if (s !== '' || i === 0 || toFixedHelpers.data[i] !== 0) {
+ var t = $String(toFixedHelpers.data[i]);
+ if (s === '') {
+ s = t;
+ } else {
+ s += strSlice('0000000', 0, 7 - t.length) + t;
+ }
+ }
+ }
+ return s;
+ },
+ pow: function pow(x, n, acc) {
+ return (n === 0 ? acc : (n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc)));
+ },
+ log: function log(x) {
+ var n = 0;
+ var x2 = x;
+ while (x2 >= 4096) {
+ n += 12;
+ x2 /= 4096;
+ }
+ while (x2 >= 2) {
+ n += 1;
+ x2 /= 2;
+ }
+ return n;
+ }
+};
+
+defineProperties(NumberPrototype, {
+ toFixed: function toFixed(fractionDigits) {
+ var f, x, s, m, e, z, j, k;
+
+ // Test for NaN and round fractionDigits down
+ f = $Number(fractionDigits);
+ f = f !== f ? 0 : Math.floor(f);
+
+ if (f < 0 || f > 20) {
+ throw new RangeError('Number.toFixed called with invalid number of decimals');
+ }
+
+ x = $Number(this);
+
+ // Test for NaN
+ if (x !== x) {
+ return 'NaN';
+ }
+
+ // If it is too big or small, return the string value of the number
+ if (x <= -1e21 || x >= 1e21) {
+ return $String(x);
+ }
+
+ s = '';
+
+ if (x < 0) {
+ s = '-';
+ x = -x;
+ }
+
+ m = '0';
+
+ if (x > 1e-21) {
+ // 1e-21 < x < 1e21
+ // -70 < log2(x) < 70
+ e = toFixedHelpers.log(x * toFixedHelpers.pow(2, 69, 1)) - 69;
+ z = (e < 0 ? x * toFixedHelpers.pow(2, -e, 1) : x / toFixedHelpers.pow(2, e, 1));
+ z *= 0x10000000000000; // Math.pow(2, 52);
+ e = 52 - e;
+
+ // -18 < e < 122
+ // x = z / 2 ^ e
+ if (e > 0) {
+ toFixedHelpers.multiply(0, z);
+ j = f;
+
+ while (j >= 7) {
+ toFixedHelpers.multiply(1e7, 0);
+ j -= 7;
+ }
+
+ toFixedHelpers.multiply(toFixedHelpers.pow(10, j, 1), 0);
+ j = e - 1;
+
+ while (j >= 23) {
+ toFixedHelpers.divide(1 << 23);
+ j -= 23;
+ }
+
+ toFixedHelpers.divide(1 << j);
+ toFixedHelpers.multiply(1, 1);
+ toFixedHelpers.divide(2);
+ m = toFixedHelpers.numToString();
+ } else {
+ toFixedHelpers.multiply(0, z);
+ toFixedHelpers.multiply(1 << (-e), 0);
+ m = toFixedHelpers.numToString() + strSlice('0.00000000000000000000', 2, 2 + f);
+ }
+ }
+
+ if (f > 0) {
+ k = m.length;
+
+ if (k <= f) {
+ m = s + strSlice('0.0000000000000000000', 0, f - k + 2) + m;
+ } else {
+ m = s + strSlice(m, 0, k - f) + '.' + strSlice(m, k - f);
+ }
+ } else {
+ m = s + m;
+ }
+
+ return m;
+ }
+}, hasToFixedBugs);
+
+//
+// String
+// ======
+//
+
+// ES5 15.5.4.14
+// http://es5.github.com/#x15.5.4.14
+
+// [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]
+// Many browsers do not split properly with regular expressions or they
+// do not perform the split correctly under obscure conditions.
+// See http://blog.stevenlevithan.com/archives/cross-browser-split
+// I've tested in many browsers and this seems to cover the deviant ones:
+// 'ab'.split(/(?:ab)*/) should be ["", ""], not [""]
+// '.'.split(/(.?)(.?)/) should be ["", ".", "", ""], not ["", ""]
+// 'tesst'.split(/(s)*/) should be ["t", undefined, "e", "s", "t"], not
+// [undefined, "t", undefined, "e", ...]
+// ''.split(/.?/) should be [], not [""]
+// '.'.split(/()()/) should be ["."], not ["", "", "."]
+
+if (
+ 'ab'.split(/(?:ab)*/).length !== 2 ||
+ '.'.split(/(.?)(.?)/).length !== 4 ||
+ 'tesst'.split(/(s)*/)[1] === 't' ||
+ 'test'.split(/(?:)/, -1).length !== 4 ||
+ ''.split(/.?/).length ||
+ '.'.split(/()()/).length > 1
+) {
+ (function () {
+ var compliantExecNpcg = typeof (/()??/).exec('')[1] === 'undefined'; // NPCG: nonparticipating capturing group
+
+ StringPrototype.split = function (separator, limit) {
+ var string = this;
+ if (typeof separator === 'undefined' && limit === 0) {
+ return [];
+ }
+
+ // If `separator` is not a regex, use native split
+ if (!isRegex(separator)) {
+ return strSplit(this, separator, limit);
+ }
+
+ var output = [];
+ var flags = (separator.ignoreCase ? 'i' : '') +
+ (separator.multiline ? 'm' : '') +
+ (separator.unicode ? 'u' : '') + // in ES6
+ (separator.sticky ? 'y' : ''), // Firefox 3+ and ES6
+ lastLastIndex = 0,
+ // Make `global` and avoid `lastIndex` issues by working with a copy
+ separator2, match, lastIndex, lastLength;
+ var separatorCopy = new RegExp(separator.source, flags + 'g');
+ string += ''; // Type-convert
+ if (!compliantExecNpcg) {
+ // Doesn't need flags gy, but they don't hurt
+ separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\s)', flags);
+ }
+ /* Values for `limit`, per the spec:
+ * If undefined: 4294967295 // Math.pow(2, 32) - 1
+ * If 0, Infinity, or NaN: 0
+ * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;
+ * If negative number: 4294967296 - Math.floor(Math.abs(limit))
+ * If other: Type-convert, then use the above rules
+ */
+ var splitLimit = typeof limit === 'undefined' ?
+ -1 >>> 0 : // Math.pow(2, 32) - 1
+ ES.ToUint32(limit);
+ match = separatorCopy.exec(string);
+ while (match) {
+ // `separatorCopy.lastIndex` is not reliable cross-browser
+ lastIndex = match.index + match[0].length;
+ if (lastIndex > lastLastIndex) {
+ array_push.call(output, strSlice(string, lastLastIndex, match.index));
+ // Fix browsers whose `exec` methods don't consistently return `undefined` for
+ // nonparticipating capturing groups
+ if (!compliantExecNpcg && match.length > 1) {
+ /* eslint-disable no-loop-func */
+ match[0].replace(separator2, function () {
+ for (var i = 1; i < arguments.length - 2; i++) {
+ if (typeof arguments[i] === 'undefined') {
+ match[i] = void 0;
+ }
+ }
+ });
+ /* eslint-enable no-loop-func */
+ }
+ if (match.length > 1 && match.index < string.length) {
+ array_push.apply(output, array_slice.call(match, 1));
+ }
+ lastLength = match[0].length;
+ lastLastIndex = lastIndex;
+ if (output.length >= splitLimit) {
+ break;
+ }
+ }
+ if (separatorCopy.lastIndex === match.index) {
+ separatorCopy.lastIndex++; // Avoid an infinite loop
+ }
+ match = separatorCopy.exec(string);
+ }
+ if (lastLastIndex === string.length) {
+ if (lastLength || !separatorCopy.test('')) {
+ array_push.call(output, '');
+ }
+ } else {
+ array_push.call(output, strSlice(string, lastLastIndex));
+ }
+ return output.length > splitLimit ? strSlice(output, 0, splitLimit) : output;
+ };
+ }());
+
+// [bugfix, chrome]
+// If separator is undefined, then the result array contains just one String,
+// which is the this value (converted to a String). If limit is not undefined,
+// then the output array is truncated so that it contains no more than limit
+// elements.
+// "0".split(undefined, 0) -> []
+} else if ('0'.split(void 0, 0).length) {
+ StringPrototype.split = function split(separator, limit) {
+ if (typeof separator === 'undefined' && limit === 0) { return []; }
+ return strSplit(this, separator, limit);
+ };
+}
+
+var str_replace = StringPrototype.replace;
+var replaceReportsGroupsCorrectly = (function () {
+ var groups = [];
+ 'x'.replace(/x(.)?/g, function (match, group) {
+ array_push.call(groups, group);
+ });
+ return groups.length === 1 && typeof groups[0] === 'undefined';
+}());
+
+if (!replaceReportsGroupsCorrectly) {
+ StringPrototype.replace = function replace(searchValue, replaceValue) {
+ var isFn = isCallable(replaceValue);
+ var hasCapturingGroups = isRegex(searchValue) && (/\)[*?]/).test(searchValue.source);
+ if (!isFn || !hasCapturingGroups) {
+ return str_replace.call(this, searchValue, replaceValue);
+ } else {
+ var wrappedReplaceValue = function (match) {
+ var length = arguments.length;
+ var originalLastIndex = searchValue.lastIndex;
+ searchValue.lastIndex = 0;
+ var args = searchValue.exec(match) || [];
+ searchValue.lastIndex = originalLastIndex;
+ array_push.call(args, arguments[length - 2], arguments[length - 1]);
+ return replaceValue.apply(this, args);
+ };
+ return str_replace.call(this, searchValue, wrappedReplaceValue);
+ }
+ };
+}
+
+// ECMA-262, 3rd B.2.3
+// Not an ECMAScript standard, although ECMAScript 3rd Edition has a
+// non-normative section suggesting uniform semantics and it should be
+// normalized across all browsers
+// [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE
+var string_substr = StringPrototype.substr;
+var hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';
+defineProperties(StringPrototype, {
+ substr: function substr(start, length) {
+ var normalizedStart = start;
+ if (start < 0) {
+ normalizedStart = max(this.length + start, 0);
+ }
+ return string_substr.call(this, normalizedStart, length);
+ }
+}, hasNegativeSubstrBug);
+
+// ES5 15.5.4.20
+// whitespace from: http://es5.github.io/#x15.5.4.20
+var ws = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
+ '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028' +
+ '\u2029\uFEFF';
+var zeroWidth = '\u200b';
+var wsRegexChars = '[' + ws + ']';
+var trimBeginRegexp = new RegExp('^' + wsRegexChars + wsRegexChars + '*');
+var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + '*$');
+var hasTrimWhitespaceBug = StringPrototype.trim && (ws.trim() || !zeroWidth.trim());
+defineProperties(StringPrototype, {
+ // http://blog.stevenlevithan.com/archives/faster-trim-javascript
+ // http://perfectionkills.com/whitespace-deviations/
+ trim: function trim() {
+ if (typeof this === 'undefined' || this === null) {
+ throw new TypeError("can't convert " + this + ' to object');
+ }
+ return $String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, '');
+ }
+}, hasTrimWhitespaceBug);
+
+// ES-5 15.1.2.2
+if (parseInt(ws + '08') !== 8 || parseInt(ws + '0x16') !== 22) {
+ /* global parseInt: true */
+ parseInt = (function (origParseInt) {
+ var hexRegex = /^0[xX]/;
+ return function parseInt(str, radix) {
+ var string = $String(str).trim();
+ var defaultedRadix = $Number(radix) || (hexRegex.test(string) ? 16 : 10);
+ return origParseInt(string, defaultedRadix);
+ };
+ }(parseInt));
+}
+
+}));
+
+/*
+ json2.js
+ 2015-05-03
+
+ Public Domain.
+
+ NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
+
+ See http://www.JSON.org/js.html
+
+
+ This code should be minified before deployment.
+ See http://javascript.crockford.com/jsmin.html
+
+ USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
+ NOT CONTROL.
+
+
+ This file creates a global JSON object containing two methods: stringify
+ and parse. This file is provides the ES5 JSON capability to ES3 systems.
+ If a project might run on IE8 or earlier, then this file should be included.
+ This file does nothing on ES5 systems.
+
+ JSON.stringify(value, replacer, space)
+ value any JavaScript value, usually an object or array.
+
+ replacer an optional parameter that determines how object
+ values are stringified for objects. It can be a
+ function or an array of strings.
+
+ space an optional parameter that specifies the indentation
+ of nested structures. If it is omitted, the text will
+ be packed without extra whitespace. If it is a number,
+ it will specify the number of spaces to indent at each
+ level. If it is a string (such as '\t' or ' '),
+ it contains the characters used to indent at each level.
+
+ This method produces a JSON text from a JavaScript value.
+
+ When an object value is found, if the object contains a toJSON
+ method, its toJSON method will be called and the result will be
+ stringified. A toJSON method does not serialize: it returns the
+ value represented by the name/value pair that should be serialized,
+ or undefined if nothing should be serialized. The toJSON method
+ will be passed the key associated with the value, and this will be
+ bound to the value
+
+ For example, this would serialize Dates as ISO strings.
+
+ Date.prototype.toJSON = function (key) {
+ function f(n) {
+ // Format integers to have at least two digits.
+ return n < 10
+ ? '0' + n
+ : n;
+ }
+
+ return this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z';
+ };
+
+ You can provide an optional replacer method. It will be passed the
+ key and value of each member, with this bound to the containing
+ object. The value that is returned from your method will be
+ serialized. If your method returns undefined, then the member will
+ be excluded from the serialization.
+
+ If the replacer parameter is an array of strings, then it will be
+ used to select the members to be serialized. It filters the results
+ such that only members with keys listed in the replacer array are
+ stringified.
+
+ Values that do not have JSON representations, such as undefined or
+ functions, will not be serialized. Such values in objects will be
+ dropped; in arrays they will be replaced with null. You can use
+ a replacer function to replace those with JSON values.
+ JSON.stringify(undefined) returns undefined.
+
+ The optional space parameter produces a stringification of the
+ value that is filled with line breaks and indentation to make it
+ easier to read.
+
+ If the space parameter is a non-empty string, then that string will
+ be used for indentation. If the space parameter is a number, then
+ the indentation will be that many spaces.
+
+ Example:
+
+ text = JSON.stringify(['e', {pluribus: 'unum'}]);
+ // text is '["e",{"pluribus":"unum"}]'
+
+
+ text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
+ // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
+
+ text = JSON.stringify([new Date()], function (key, value) {
+ return this[key] instanceof Date
+ ? 'Date(' + this[key] + ')'
+ : value;
+ });
+ // text is '["Date(---current time---)"]'
+
+
+ JSON.parse(text, reviver)
+ This method parses a JSON text to produce an object or array.
+ It can throw a SyntaxError exception.
+
+ The optional reviver parameter is a function that can filter and
+ transform the results. It receives each of the keys and values,
+ and its return value is used instead of the original value.
+ If it returns what it received, then the structure is not modified.
+ If it returns undefined then the member is deleted.
+
+ Example:
+
+ // Parse the text. Values that look like ISO date strings will
+ // be converted to Date objects.
+
+ myData = JSON.parse(text, function (key, value) {
+ var a;
+ if (typeof value === 'string') {
+ a =
+/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
+ if (a) {
+ return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+ +a[5], +a[6]));
+ }
+ }
+ return value;
+ });
+
+ myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
+ var d;
+ if (typeof value === 'string' &&
+ value.slice(0, 5) === 'Date(' &&
+ value.slice(-1) === ')') {
+ d = new Date(value.slice(5, -1));
+ if (d) {
+ return d;
+ }
+ }
+ return value;
+ });
+
+
+ This is a reference implementation. You are free to copy, modify, or
+ redistribute.
+*/
+
+/*jslint
+ eval, for, this
+*/
+
+/*property
+ JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
+ getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
+ lastIndex, length, parse, prototype, push, replace, slice, stringify,
+ test, toJSON, toString, valueOf
+*/
+
+
+// Create a JSON object only if one does not already exist. We create the
+// methods in a closure to avoid creating global variables.
+
+if (typeof JSON !== 'object') {
+ JSON = {};
+}
+
+(function () {
+ 'use strict';
+
+ var rx_one = /^[\],:{}\s]*$/,
+ rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+ rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+ rx_four = /(?:^|:|,)(?:\s*\[)+/g,
+ rx_escapable = /[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
+
+ function f(n) {
+ // Format integers to have at least two digits.
+ return n < 10
+ ? '0' + n
+ : n;
+ }
+
+ function this_value() {
+ return this.valueOf();
+ }
+
+ if (typeof Date.prototype.toJSON !== 'function') {
+
+ Date.prototype.toJSON = function () {
+
+ return isFinite(this.valueOf())
+ ? this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z'
+ : null;
+ };
+
+ Boolean.prototype.toJSON = this_value;
+ Number.prototype.toJSON = this_value;
+ String.prototype.toJSON = this_value;
+ }
+
+ var gap,
+ indent,
+ meta,
+ rep;
+
+
+ function quote(string) {
+
+// If the string contains no control characters, no quote characters, and no
+// backslash characters, then we can safely slap some quotes around it.
+// Otherwise we must also replace the offending characters with safe escape
+// sequences.
+
+ rx_escapable.lastIndex = 0;
+ return rx_escapable.test(string)
+ ? '"' + string.replace(rx_escapable, function (a) {
+ var c = meta[a];
+ return typeof c === 'string'
+ ? c
+ : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ }) + '"'
+ : '"' + string + '"';
+ }
+
+
+ function str(key, holder) {
+
+// Produce a string from holder[key].
+
+ var i, // The loop counter.
+ k, // The member key.
+ v, // The member value.
+ length,
+ mind = gap,
+ partial,
+ value = holder[key];
+
+// If the value has a toJSON method, call it to obtain a replacement value.
+
+ if (value && typeof value === 'object' &&
+ typeof value.toJSON === 'function') {
+ value = value.toJSON(key);
+ }
+
+// If we were called with a replacer function, then call the replacer to
+// obtain a replacement value.
+
+ if (typeof rep === 'function') {
+ value = rep.call(holder, key, value);
+ }
+
+// What happens next depends on the value's type.
+
+ switch (typeof value) {
+ case 'string':
+ return quote(value);
+
+ case 'number':
+
+// JSON numbers must be finite. Encode non-finite numbers as null.
+
+ return isFinite(value)
+ ? String(value)
+ : 'null';
+
+ case 'boolean':
+ case 'null':
+
+// If the value is a boolean or null, convert it to a string. Note:
+// typeof null does not produce 'null'. The case is included here in
+// the remote chance that this gets fixed someday.
+
+ return String(value);
+
+// If the type is 'object', we might be dealing with an object or an array or
+// null.
+
+ case 'object':
+
+// Due to a specification blunder in ECMAScript, typeof null is 'object',
+// so watch out for that case.
+
+ if (!value) {
+ return 'null';
+ }
+
+// Make an array to hold the partial results of stringifying this object value.
+
+ gap += indent;
+ partial = [];
+
+// Is the value an array?
+
+ if (Object.prototype.toString.apply(value) === '[object Array]') {
+
+// The value is an array. Stringify every element. Use null as a placeholder
+// for non-JSON values.
+
+ length = value.length;
+ for (i = 0; i < length; i += 1) {
+ partial[i] = str(i, value) || 'null';
+ }
+
+// Join all of the elements together, separated with commas, and wrap them in
+// brackets.
+
+ v = partial.length === 0
+ ? '[]'
+ : gap
+ ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']'
+ : '[' + partial.join(',') + ']';
+ gap = mind;
+ return v;
+ }
+
+// If the replacer is an array, use it to select the members to be stringified.
+
+ if (rep && typeof rep === 'object') {
+ length = rep.length;
+ for (i = 0; i < length; i += 1) {
+ if (typeof rep[i] === 'string') {
+ k = rep[i];
+ v = str(k, value);
+ if (v) {
+ partial.push(quote(k) + (
+ gap
+ ? ': '
+ : ':'
+ ) + v);
+ }
+ }
+ }
+ } else {
+
+// Otherwise, iterate through all of the keys in the object.
+
+ for (k in value) {
+ if (Object.prototype.hasOwnProperty.call(value, k)) {
+ v = str(k, value);
+ if (v) {
+ partial.push(quote(k) + (
+ gap
+ ? ': '
+ : ':'
+ ) + v);
+ }
+ }
+ }
+ }
+
+// Join all of the member texts together, separated with commas,
+// and wrap them in braces.
+
+ v = partial.length === 0
+ ? '{}'
+ : gap
+ ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}'
+ : '{' + partial.join(',') + '}';
+ gap = mind;
+ return v;
+ }
+ }
+
+// If the JSON object does not yet have a stringify method, give it one.
+
+ if (typeof JSON.stringify !== 'function') {
+ meta = { // table of character substitutions
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '"': '\\"',
+ '\\': '\\\\'
+ };
+ JSON.stringify = function (value, replacer, space) {
+
+// The stringify method takes a value and an optional replacer, and an optional
+// space parameter, and returns a JSON text. The replacer can be a function
+// that can replace values, or an array of strings that will select the keys.
+// A default replacer method can be provided. Use of the space parameter can
+// produce text that is more easily readable.
+
+ var i;
+ gap = '';
+ indent = '';
+
+// If the space parameter is a number, make an indent string containing that
+// many spaces.
+
+ if (typeof space === 'number') {
+ for (i = 0; i < space; i += 1) {
+ indent += ' ';
+ }
+
+// If the space parameter is a string, it will be used as the indent string.
+
+ } else if (typeof space === 'string') {
+ indent = space;
+ }
+
+// If there is a replacer, it must be a function or an array.
+// Otherwise, throw an error.
+
+ rep = replacer;
+ if (replacer && typeof replacer !== 'function' &&
+ (typeof replacer !== 'object' ||
+ typeof replacer.length !== 'number')) {
+ throw new Error('JSON.stringify');
+ }
+
+// Make a fake root object containing our value under the key of ''.
+// Return the result of stringifying the value.
+
+ return str('', {'': value});
+ };
+ }
+
+
+// If the JSON object does not yet have a parse method, give it one.
+
+ if (typeof JSON.parse !== 'function') {
+ JSON.parse = function (text, reviver) {
+
+// The parse method takes a text and an optional reviver function, and returns
+// a JavaScript value if the text is a valid JSON text.
+
+ var j;
+
+ function walk(holder, key) {
+
+// The walk method is used to recursively walk the resulting structure so
+// that modifications can be made.
+
+ var k, v, value = holder[key];
+ if (value && typeof value === 'object') {
+ for (k in value) {
+ if (Object.prototype.hasOwnProperty.call(value, k)) {
+ v = walk(value, k);
+ if (v !== undefined) {
+ value[k] = v;
+ } else {
+ delete value[k];
+ }
+ }
+ }
+ }
+ return reviver.call(holder, key, value);
+ }
+
+
+// Parsing happens in four stages. In the first stage, we replace certain
+// Unicode characters with escape sequences. JavaScript handles many characters
+// incorrectly, either silently deleting them, or treating them as line endings.
+
+ text = String(text);
+ rx_dangerous.lastIndex = 0;
+ if (rx_dangerous.test(text)) {
+ text = text.replace(rx_dangerous, function (a) {
+ return '\\u' +
+ ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ });
+ }
+
+// In the second stage, we run the text against regular expressions that look
+// for non-JSON patterns. We are especially concerned with '()' and 'new'
+// because they can cause invocation, and '=' because it can cause mutation.
+// But just to be safe, we want to reject all unexpected forms.
+
+// We split the second stage into 4 regexp operations in order to work around
+// crippling inefficiencies in IE's and Safari's regexp engines. First we
+// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
+// replace all simple value tokens with ']' characters. Third, we delete all
+// open brackets that follow a colon or comma or that begin the text. Finally,
+// we look to see that the remaining characters are only whitespace or ']' or
+// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
+
+ if (
+ rx_one.test(
+ text
+ .replace(rx_two, '@')
+ .replace(rx_three, ']')
+ .replace(rx_four, '')
+ )
+ ) {
+
+// In the third stage we use the eval function to compile the text into a
+// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
+// in JavaScript: it can begin a block or an object literal. We wrap the text
+// in parens to eliminate the ambiguity.
+
+ j = eval('(' + text + ')');
+
+// In the optional fourth stage, we recursively walk the new structure, passing
+// each name/value pair to a reviver function for possible transformation.
+
+ return typeof reviver === 'function'
+ ? walk({'': j}, '')
+ : j;
+ }
+
+// If the text is not JSON parseable, then a SyntaxError is thrown.
+
+ throw new SyntaxError('JSON.parse');
+ };
+ }
+}());
+
+;(function () {
+
+ var object = typeof exports != 'undefined' ? exports : this; // #8: web workers
+ var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+ function InvalidCharacterError(message) {
+ this.message = message;
+ }
+ InvalidCharacterError.prototype = new Error;
+ InvalidCharacterError.prototype.name = 'InvalidCharacterError';
+
+ // encoder
+ // [https://gist.github.com/999166] by [https://github.com/nignag]
+ object.btoa || (
+ object.btoa = function (input) {
+ var str = String(input);
+ for (
+ // initialize result and counter
+ var block, charCode, idx = 0, map = chars, output = '';
+ // if the next str index does not exist:
+ // change the mapping table to "="
+ // check if d has no fractional digits
+ str.charAt(idx | 0) || (map = '=', idx % 1);
+ // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8
+ output += map.charAt(63 & block >> 8 - idx % 1 * 8)
+ ) {
+ charCode = str.charCodeAt(idx += 3/4);
+ if (charCode > 0xFF) {
+ throw new InvalidCharacterError("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");
+ }
+ block = block << 8 | charCode;
+ }
+ return output;
+ });
+
+ // decoder
+ // [https://gist.github.com/1020396] by [https://github.com/atk]
+ object.atob || (
+ object.atob = function (input) {
+ var str = String(input).replace(/=+$/, '');
+ if (str.length % 4 == 1) {
+ throw new InvalidCharacterError("'atob' failed: The string to be decoded is not correctly encoded.");
+ }
+ for (
+ // initialize result and counters
+ var bc = 0, bs, buffer, idx = 0, output = '';
+ // get next character
+ buffer = str.charAt(idx++);
+ // character found in table? initialize bit storage and add its ascii value;
+ ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,
+ // and if not first of each 4 characters,
+ // convert the first 8 bits to one ascii character
+ bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0
+ ) {
+ // try to find character in table (0-63, not found => -1)
+ buffer = chars.indexOf(buffer);
+ }
+ return output;
+ });
+
+}());
+
+/*!
+ * typeahead.js 0.11.1
+ * https://github.com/twitter/typeahead.js
+ * Copyright 2013-2015 Twitter, Inc. and other contributors; Licensed MIT
+ */
+
+(function(root, factory) {
+ if (typeof define === "function" && define.amd) {
+ define("bloodhound", [ "jquery" ], function(a0) {
+ return root["Bloodhound"] = factory(a0);
+ });
+ } else if (typeof exports === "object") {
+ module.exports = factory(require("jquery"));
+ } else {
+ root["Bloodhound"] = factory(jQuery);
+ }
+})(this, function($) {
+ var _ = function() {
+ "use strict";
+ return {
+ isMsie: function() {
+ return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false;
+ },
+ isBlankString: function(str) {
+ return !str || /^\s*$/.test(str);
+ },
+ escapeRegExChars: function(str) {
+ return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
+ },
+ isString: function(obj) {
+ return typeof obj === "string";
+ },
+ isNumber: function(obj) {
+ return typeof obj === "number";
+ },
+ isArray: $.isArray,
+ isFunction: $.isFunction,
+ isObject: $.isPlainObject,
+ isUndefined: function(obj) {
+ return typeof obj === "undefined";
+ },
+ isElement: function(obj) {
+ return !!(obj && obj.nodeType === 1);
+ },
+ isJQuery: function(obj) {
+ return obj instanceof $;
+ },
+ toStr: function toStr(s) {
+ return _.isUndefined(s) || s === null ? "" : s + "";
+ },
+ bind: $.proxy,
+ each: function(collection, cb) {
+ $.each(collection, reverseArgs);
+ function reverseArgs(index, value) {
+ return cb(value, index);
+ }
+ },
+ map: $.map,
+ filter: $.grep,
+ every: function(obj, test) {
+ var result = true;
+ if (!obj) {
+ return result;
+ }
+ $.each(obj, function(key, val) {
+ if (!(result = test.call(null, val, key, obj))) {
+ return false;
+ }
+ });
+ return !!result;
+ },
+ some: function(obj, test) {
+ var result = false;
+ if (!obj) {
+ return result;
+ }
+ $.each(obj, function(key, val) {
+ if (result = test.call(null, val, key, obj)) {
+ return false;
+ }
+ });
+ return !!result;
+ },
+ mixin: $.extend,
+ identity: function(x) {
+ return x;
+ },
+ clone: function(obj) {
+ return $.extend(true, {}, obj);
+ },
+ getIdGenerator: function() {
+ var counter = 0;
+ return function() {
+ return counter++;
+ };
+ },
+ templatify: function templatify(obj) {
+ return $.isFunction(obj) ? obj : template;
+ function template() {
+ return String(obj);
+ }
+ },
+ defer: function(fn) {
+ setTimeout(fn, 0);
+ },
+ debounce: function(func, wait, immediate) {
+ var timeout, result;
+ return function() {
+ var context = this, args = arguments, later, callNow;
+ later = function() {
+ timeout = null;
+ if (!immediate) {
+ result = func.apply(context, args);
+ }
+ };
+ callNow = immediate && !timeout;
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+ if (callNow) {
+ result = func.apply(context, args);
+ }
+ return result;
+ };
+ },
+ throttle: function(func, wait) {
+ var context, args, timeout, result, previous, later;
+ previous = 0;
+ later = function() {
+ previous = new Date();
+ timeout = null;
+ result = func.apply(context, args);
+ };
+ return function() {
+ var now = new Date(), remaining = wait - (now - previous);
+ context = this;
+ args = arguments;
+ if (remaining <= 0) {
+ clearTimeout(timeout);
+ timeout = null;
+ previous = now;
+ result = func.apply(context, args);
+ } else if (!timeout) {
+ timeout = setTimeout(later, remaining);
+ }
+ return result;
+ };
+ },
+ stringify: function(val) {
+ return _.isString(val) ? val : JSON.stringify(val);
+ },
+ noop: function() {}
+ };
+ }();
+ var VERSION = "0.11.1";
+ var tokenizers = function() {
+ "use strict";
+ return {
+ nonword: nonword,
+ whitespace: whitespace,
+ obj: {
+ nonword: getObjTokenizer(nonword),
+ whitespace: getObjTokenizer(whitespace)
+ }
+ };
+ function whitespace(str) {
+ str = _.toStr(str);
+ return str ? str.split(/\s+/) : [];
+ }
+ function nonword(str) {
+ str = _.toStr(str);
+ return str ? str.split(/\W+/) : [];
+ }
+ function getObjTokenizer(tokenizer) {
+ return function setKey(keys) {
+ keys = _.isArray(keys) ? keys : [].slice.call(arguments, 0);
+ return function tokenize(o) {
+ var tokens = [];
+ _.each(keys, function(k) {
+ tokens = tokens.concat(tokenizer(_.toStr(o[k])));
+ });
+ return tokens;
+ };
+ };
+ }
+ }();
+ var LruCache = function() {
+ "use strict";
+ function LruCache(maxSize) {
+ this.maxSize = _.isNumber(maxSize) ? maxSize : 100;
+ this.reset();
+ if (this.maxSize <= 0) {
+ this.set = this.get = $.noop;
+ }
+ }
+ _.mixin(LruCache.prototype, {
+ set: function set(key, val) {
+ var tailItem = this.list.tail, node;
+ if (this.size >= this.maxSize) {
+ this.list.remove(tailItem);
+ delete this.hash[tailItem.key];
+ this.size--;
+ }
+ if (node = this.hash[key]) {
+ node.val = val;
+ this.list.moveToFront(node);
+ } else {
+ node = new Node(key, val);
+ this.list.add(node);
+ this.hash[key] = node;
+ this.size++;
+ }
+ },
+ get: function get(key) {
+ var node = this.hash[key];
+ if (node) {
+ this.list.moveToFront(node);
+ return node.val;
+ }
+ },
+ reset: function reset() {
+ this.size = 0;
+ this.hash = {};
+ this.list = new List();
+ }
+ });
+ function List() {
+ this.head = this.tail = null;
+ }
+ _.mixin(List.prototype, {
+ add: function add(node) {
+ if (this.head) {
+ node.next = this.head;
+ this.head.prev = node;
+ }
+ this.head = node;
+ this.tail = this.tail || node;
+ },
+ remove: function remove(node) {
+ node.prev ? node.prev.next = node.next : this.head = node.next;
+ node.next ? node.next.prev = node.prev : this.tail = node.prev;
+ },
+ moveToFront: function(node) {
+ this.remove(node);
+ this.add(node);
+ }
+ });
+ function Node(key, val) {
+ this.key = key;
+ this.val = val;
+ this.prev = this.next = null;
+ }
+ return LruCache;
+ }();
+ var PersistentStorage = function() {
+ "use strict";
+ var LOCAL_STORAGE;
+ try {
+ LOCAL_STORAGE = window.localStorage;
+ LOCAL_STORAGE.setItem("~~~", "!");
+ LOCAL_STORAGE.removeItem("~~~");
+ } catch (err) {
+ LOCAL_STORAGE = null;
+ }
+ function PersistentStorage(namespace, override) {
+ this.prefix = [ "__", namespace, "__" ].join("");
+ this.ttlKey = "__ttl__";
+ this.keyMatcher = new RegExp("^" + _.escapeRegExChars(this.prefix));
+ this.ls = override || LOCAL_STORAGE;
+ !this.ls && this._noop();
+ }
+ _.mixin(PersistentStorage.prototype, {
+ _prefix: function(key) {
+ return this.prefix + key;
+ },
+ _ttlKey: function(key) {
+ return this._prefix(key) + this.ttlKey;
+ },
+ _noop: function() {
+ this.get = this.set = this.remove = this.clear = this.isExpired = _.noop;
+ },
+ _safeSet: function(key, val) {
+ try {
+ this.ls.setItem(key, val);
+ } catch (err) {
+ if (err.name === "QuotaExceededError") {
+ this.clear();
+ this._noop();
+ }
+ }
+ },
+ get: function(key) {
+ if (this.isExpired(key)) {
+ this.remove(key);
+ }
+ return decode(this.ls.getItem(this._prefix(key)));
+ },
+ set: function(key, val, ttl) {
+ if (_.isNumber(ttl)) {
+ this._safeSet(this._ttlKey(key), encode(now() + ttl));
+ } else {
+ this.ls.removeItem(this._ttlKey(key));
+ }
+ return this._safeSet(this._prefix(key), encode(val));
+ },
+ remove: function(key) {
+ this.ls.removeItem(this._ttlKey(key));
+ this.ls.removeItem(this._prefix(key));
+ return this;
+ },
+ clear: function() {
+ var i, keys = gatherMatchingKeys(this.keyMatcher);
+ for (i = keys.length; i--; ) {
+ this.remove(keys[i]);
+ }
+ return this;
+ },
+ isExpired: function(key) {
+ var ttl = decode(this.ls.getItem(this._ttlKey(key)));
+ return _.isNumber(ttl) && now() > ttl ? true : false;
+ }
+ });
+ return PersistentStorage;
+ function now() {
+ return new Date().getTime();
+ }
+ function encode(val) {
+ return JSON.stringify(_.isUndefined(val) ? null : val);
+ }
+ function decode(val) {
+ return $.parseJSON(val);
+ }
+ function gatherMatchingKeys(keyMatcher) {
+ var i, key, keys = [], len = LOCAL_STORAGE.length;
+ for (i = 0; i < len; i++) {
+ if ((key = LOCAL_STORAGE.key(i)).match(keyMatcher)) {
+ keys.push(key.replace(keyMatcher, ""));
+ }
+ }
+ return keys;
+ }
+ }();
+ var Transport = function() {
+ "use strict";
+ var pendingRequestsCount = 0, pendingRequests = {}, maxPendingRequests = 6, sharedCache = new LruCache(10);
+ function Transport(o) {
+ o = o || {};
+ this.cancelled = false;
+ this.lastReq = null;
+ this._send = o.transport;
+ this._get = o.limiter ? o.limiter(this._get) : this._get;
+ this._cache = o.cache === false ? new LruCache(0) : sharedCache;
+ }
+ Transport.setMaxPendingRequests = function setMaxPendingRequests(num) {
+ maxPendingRequests = num;
+ };
+ Transport.resetCache = function resetCache() {
+ sharedCache.reset();
+ };
+ _.mixin(Transport.prototype, {
+ _fingerprint: function fingerprint(o) {
+ o = o || {};
+ return o.url + o.type + $.param(o.data || {});
+ },
+ _get: function(o, cb) {
+ var that = this, fingerprint, jqXhr;
+ fingerprint = this._fingerprint(o);
+ if (this.cancelled || fingerprint !== this.lastReq) {
+ return;
+ }
+ if (jqXhr = pendingRequests[fingerprint]) {
+ jqXhr.done(done).fail(fail);
+ } else if (pendingRequestsCount < maxPendingRequests) {
+ pendingRequestsCount++;
+ pendingRequests[fingerprint] = this._send(o).done(done).fail(fail).always(always);
+ } else {
+ this.onDeckRequestArgs = [].slice.call(arguments, 0);
+ }
+ function done(resp) {
+ cb(null, resp);
+ that._cache.set(fingerprint, resp);
+ }
+ function fail() {
+ cb(true);
+ }
+ function always() {
+ pendingRequestsCount--;
+ delete pendingRequests[fingerprint];
+ if (that.onDeckRequestArgs) {
+ that._get.apply(that, that.onDeckRequestArgs);
+ that.onDeckRequestArgs = null;
+ }
+ }
+ },
+ get: function(o, cb) {
+ var resp, fingerprint;
+ cb = cb || $.noop;
+ o = _.isString(o) ? {
+ url: o
+ } : o || {};
+ fingerprint = this._fingerprint(o);
+ this.cancelled = false;
+ this.lastReq = fingerprint;
+ if (resp = this._cache.get(fingerprint)) {
+ cb(null, resp);
+ } else {
+ this._get(o, cb);
+ }
+ },
+ cancel: function() {
+ this.cancelled = true;
+ }
+ });
+ return Transport;
+ }();
+ var SearchIndex = window.SearchIndex = function() {
+ "use strict";
+ var CHILDREN = "c", IDS = "i";
+ function SearchIndex(o) {
+ o = o || {};
+ if (!o.datumTokenizer || !o.queryTokenizer) {
+ $.error("datumTokenizer and queryTokenizer are both required");
+ }
+ this.identify = o.identify || _.stringify;
+ this.datumTokenizer = o.datumTokenizer;
+ this.queryTokenizer = o.queryTokenizer;
+ this.reset();
+ }
+ _.mixin(SearchIndex.prototype, {
+ bootstrap: function bootstrap(o) {
+ this.datums = o.datums;
+ this.trie = o.trie;
+ },
+ add: function(data) {
+ var that = this;
+ data = _.isArray(data) ? data : [ data ];
+ _.each(data, function(datum) {
+ var id, tokens;
+ that.datums[id = that.identify(datum)] = datum;
+ tokens = normalizeTokens(that.datumTokenizer(datum));
+ _.each(tokens, function(token) {
+ var node, chars, ch;
+ node = that.trie;
+ chars = token.split("");
+ while (ch = chars.shift()) {
+ node = node[CHILDREN][ch] || (node[CHILDREN][ch] = newNode());
+ node[IDS].push(id);
+ }
+ });
+ });
+ },
+ get: function get(ids) {
+ var that = this;
+ return _.map(ids, function(id) {
+ return that.datums[id];
+ });
+ },
+ search: function search(query) {
+ var that = this, tokens, matches;
+ tokens = normalizeTokens(this.queryTokenizer(query));
+ _.each(tokens, function(token) {
+ var node, chars, ch, ids;
+ if (matches && matches.length === 0) {
+ return false;
+ }
+ node = that.trie;
+ chars = token.split("");
+ while (node && (ch = chars.shift())) {
+ node = node[CHILDREN][ch];
+ }
+ if (node && chars.length === 0) {
+ ids = node[IDS].slice(0);
+ matches = matches ? getIntersection(matches, ids) : ids;
+ } else {
+ matches = [];
+ return false;
+ }
+ });
+ return matches ? _.map(unique(matches), function(id) {
+ return that.datums[id];
+ }) : [];
+ },
+ all: function all() {
+ var values = [];
+ for (var key in this.datums) {
+ values.push(this.datums[key]);
+ }
+ return values;
+ },
+ reset: function reset() {
+ this.datums = {};
+ this.trie = newNode();
+ },
+ serialize: function serialize() {
+ return {
+ datums: this.datums,
+ trie: this.trie
+ };
+ }
+ });
+ return SearchIndex;
+ function normalizeTokens(tokens) {
+ tokens = _.filter(tokens, function(token) {
+ return !!token;
+ });
+ tokens = _.map(tokens, function(token) {
+ return token.toLowerCase();
+ });
+ return tokens;
+ }
+ function newNode() {
+ var node = {};
+ node[IDS] = [];
+ node[CHILDREN] = {};
+ return node;
+ }
+ function unique(array) {
+ var seen = {}, uniques = [];
+ for (var i = 0, len = array.length; i < len; i++) {
+ if (!seen[array[i]]) {
+ seen[array[i]] = true;
+ uniques.push(array[i]);
+ }
+ }
+ return uniques;
+ }
+ function getIntersection(arrayA, arrayB) {
+ var ai = 0, bi = 0, intersection = [];
+ arrayA = arrayA.sort();
+ arrayB = arrayB.sort();
+ var lenArrayA = arrayA.length, lenArrayB = arrayB.length;
+ while (ai < lenArrayA && bi < lenArrayB) {
+ if (arrayA[ai] < arrayB[bi]) {
+ ai++;
+ } else if (arrayA[ai] > arrayB[bi]) {
+ bi++;
+ } else {
+ intersection.push(arrayA[ai]);
+ ai++;
+ bi++;
+ }
+ }
+ return intersection;
+ }
+ }();
+ var Prefetch = function() {
+ "use strict";
+ var keys;
+ keys = {
+ data: "data",
+ protocol: "protocol",
+ thumbprint: "thumbprint"
+ };
+ function Prefetch(o) {
+ this.url = o.url;
+ this.ttl = o.ttl;
+ this.cache = o.cache;
+ this.prepare = o.prepare;
+ this.transform = o.transform;
+ this.transport = o.transport;
+ this.thumbprint = o.thumbprint;
+ this.storage = new PersistentStorage(o.cacheKey);
+ }
+ _.mixin(Prefetch.prototype, {
+ _settings: function settings() {
+ return {
+ url: this.url,
+ type: "GET",
+ dataType: "json"
+ };
+ },
+ store: function store(data) {
+ if (!this.cache) {
+ return;
+ }
+ this.storage.set(keys.data, data, this.ttl);
+ this.storage.set(keys.protocol, location.protocol, this.ttl);
+ this.storage.set(keys.thumbprint, this.thumbprint, this.ttl);
+ },
+ fromCache: function fromCache() {
+ var stored = {}, isExpired;
+ if (!this.cache) {
+ return null;
+ }
+ stored.data = this.storage.get(keys.data);
+ stored.protocol = this.storage.get(keys.protocol);
+ stored.thumbprint = this.storage.get(keys.thumbprint);
+ isExpired = stored.thumbprint !== this.thumbprint || stored.protocol !== location.protocol;
+ return stored.data && !isExpired ? stored.data : null;
+ },
+ fromNetwork: function(cb) {
+ var that = this, settings;
+ if (!cb) {
+ return;
+ }
+ settings = this.prepare(this._settings());
+ this.transport(settings).fail(onError).done(onResponse);
+ function onError() {
+ cb(true);
+ }
+ function onResponse(resp) {
+ cb(null, that.transform(resp));
+ }
+ },
+ clear: function clear() {
+ this.storage.clear();
+ return this;
+ }
+ });
+ return Prefetch;
+ }();
+ var Remote = function() {
+ "use strict";
+ function Remote(o) {
+ this.url = o.url;
+ this.prepare = o.prepare;
+ this.transform = o.transform;
+ this.transport = new Transport({
+ cache: o.cache,
+ limiter: o.limiter,
+ transport: o.transport
+ });
+ }
+ _.mixin(Remote.prototype, {
+ _settings: function settings() {
+ return {
+ url: this.url,
+ type: "GET",
+ dataType: "json"
+ };
+ },
+ get: function get(query, cb) {
+ var that = this, settings;
+ if (!cb) {
+ return;
+ }
+ query = query || "";
+ settings = this.prepare(query, this._settings());
+ return this.transport.get(settings, onResponse);
+ function onResponse(err, resp) {
+ err ? cb([]) : cb(that.transform(resp));
+ }
+ },
+ cancelLastRequest: function cancelLastRequest() {
+ this.transport.cancel();
+ }
+ });
+ return Remote;
+ }();
+ var oParser = function() {
+ "use strict";
+ return function parse(o) {
+ var defaults, sorter;
+ defaults = {
+ initialize: true,
+ identify: _.stringify,
+ datumTokenizer: null,
+ queryTokenizer: null,
+ sufficient: 5,
+ sorter: null,
+ local: [],
+ prefetch: null,
+ remote: null
+ };
+ o = _.mixin(defaults, o || {});
+ !o.datumTokenizer && $.error("datumTokenizer is required");
+ !o.queryTokenizer && $.error("queryTokenizer is required");
+ sorter = o.sorter;
+ o.sorter = sorter ? function(x) {
+ return x.sort(sorter);
+ } : _.identity;
+ o.local = _.isFunction(o.local) ? o.local() : o.local;
+ o.prefetch = parsePrefetch(o.prefetch);
+ o.remote = parseRemote(o.remote);
+ return o;
+ };
+ function parsePrefetch(o) {
+ var defaults;
+ if (!o) {
+ return null;
+ }
+ defaults = {
+ url: null,
+ ttl: 24 * 60 * 60 * 1e3,
+ cache: true,
+ cacheKey: null,
+ thumbprint: "",
+ prepare: _.identity,
+ transform: _.identity,
+ transport: null
+ };
+ o = _.isString(o) ? {
+ url: o
+ } : o;
+ o = _.mixin(defaults, o);
+ !o.url && $.error("prefetch requires url to be set");
+ o.transform = o.filter || o.transform;
+ o.cacheKey = o.cacheKey || o.url;
+ o.thumbprint = VERSION + o.thumbprint;
+ o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax;
+ return o;
+ }
+ function parseRemote(o) {
+ var defaults;
+ if (!o) {
+ return;
+ }
+ defaults = {
+ url: null,
+ cache: true,
+ prepare: null,
+ replace: null,
+ wildcard: null,
+ limiter: null,
+ rateLimitBy: "debounce",
+ rateLimitWait: 300,
+ transform: _.identity,
+ transport: null
+ };
+ o = _.isString(o) ? {
+ url: o
+ } : o;
+ o = _.mixin(defaults, o);
+ !o.url && $.error("remote requires url to be set");
+ o.transform = o.filter || o.transform;
+ o.prepare = toRemotePrepare(o);
+ o.limiter = toLimiter(o);
+ o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax;
+ delete o.replace;
+ delete o.wildcard;
+ delete o.rateLimitBy;
+ delete o.rateLimitWait;
+ return o;
+ }
+ function toRemotePrepare(o) {
+ var prepare, replace, wildcard;
+ prepare = o.prepare;
+ replace = o.replace;
+ wildcard = o.wildcard;
+ if (prepare) {
+ return prepare;
+ }
+ if (replace) {
+ prepare = prepareByReplace;
+ } else if (o.wildcard) {
+ prepare = prepareByWildcard;
+ } else {
+ prepare = idenityPrepare;
+ }
+ return prepare;
+ function prepareByReplace(query, settings) {
+ settings.url = replace(settings.url, query);
+ return settings;
+ }
+ function prepareByWildcard(query, settings) {
+ settings.url = settings.url.replace(wildcard, encodeURIComponent(query));
+ return settings;
+ }
+ function idenityPrepare(query, settings) {
+ return settings;
+ }
+ }
+ function toLimiter(o) {
+ var limiter, method, wait;
+ limiter = o.limiter;
+ method = o.rateLimitBy;
+ wait = o.rateLimitWait;
+ if (!limiter) {
+ limiter = /^throttle$/i.test(method) ? throttle(wait) : debounce(wait);
+ }
+ return limiter;
+ function debounce(wait) {
+ return function debounce(fn) {
+ return _.debounce(fn, wait);
+ };
+ }
+ function throttle(wait) {
+ return function throttle(fn) {
+ return _.throttle(fn, wait);
+ };
+ }
+ }
+ function callbackToDeferred(fn) {
+ return function wrapper(o) {
+ var deferred = $.Deferred();
+ fn(o, onSuccess, onError);
+ return deferred;
+ function onSuccess(resp) {
+ _.defer(function() {
+ deferred.resolve(resp);
+ });
+ }
+ function onError(err) {
+ _.defer(function() {
+ deferred.reject(err);
+ });
+ }
+ };
+ }
+ }();
+ var Bloodhound = function() {
+ "use strict";
+ var old;
+ old = window && window.Bloodhound;
+ function Bloodhound(o) {
+ o = oParser(o);
+ this.sorter = o.sorter;
+ this.identify = o.identify;
+ this.sufficient = o.sufficient;
+ this.local = o.local;
+ this.remote = o.remote ? new Remote(o.remote) : null;
+ this.prefetch = o.prefetch ? new Prefetch(o.prefetch) : null;
+ this.index = new SearchIndex({
+ identify: this.identify,
+ datumTokenizer: o.datumTokenizer,
+ queryTokenizer: o.queryTokenizer
+ });
+ o.initialize !== false && this.initialize();
+ }
+ Bloodhound.noConflict = function noConflict() {
+ window && (window.Bloodhound = old);
+ return Bloodhound;
+ };
+ Bloodhound.tokenizers = tokenizers;
+ _.mixin(Bloodhound.prototype, {
+ __ttAdapter: function ttAdapter() {
+ var that = this;
+ return this.remote ? withAsync : withoutAsync;
+ function withAsync(query, sync, async) {
+ return that.search(query, sync, async);
+ }
+ function withoutAsync(query, sync) {
+ return that.search(query, sync);
+ }
+ },
+ _loadPrefetch: function loadPrefetch() {
+ var that = this, deferred, serialized;
+ deferred = $.Deferred();
+ if (!this.prefetch) {
+ deferred.resolve();
+ } else if (serialized = this.prefetch.fromCache()) {
+ this.index.bootstrap(serialized);
+ deferred.resolve();
+ } else {
+ this.prefetch.fromNetwork(done);
+ }
+ return deferred.promise();
+ function done(err, data) {
+ if (err) {
+ return deferred.reject();
+ }
+ that.add(data);
+ that.prefetch.store(that.index.serialize());
+ deferred.resolve();
+ }
+ },
+ _initialize: function initialize() {
+ var that = this, deferred;
+ this.clear();
+ (this.initPromise = this._loadPrefetch()).done(addLocalToIndex);
+ return this.initPromise;
+ function addLocalToIndex() {
+ that.add(that.local);
+ }
+ },
+ initialize: function initialize(force) {
+ return !this.initPromise || force ? this._initialize() : this.initPromise;
+ },
+ add: function add(data) {
+ this.index.add(data);
+ return this;
+ },
+ get: function get(ids) {
+ ids = _.isArray(ids) ? ids : [].slice.call(arguments);
+ return this.index.get(ids);
+ },
+ search: function search(query, sync, async) {
+ var that = this, local;
+ local = this.sorter(this.index.search(query));
+ sync(this.remote ? local.slice() : local);
+ if (this.remote && local.length < this.sufficient) {
+ this.remote.get(query, processRemote);
+ } else if (this.remote) {
+ this.remote.cancelLastRequest();
+ }
+ return this;
+ function processRemote(remote) {
+ var nonDuplicates = [];
+ _.each(remote, function(r) {
+ !_.some(local, function(l) {
+ return that.identify(r) === that.identify(l);
+ }) && nonDuplicates.push(r);
+ });
+ async && async(nonDuplicates);
+ }
+ },
+ all: function all() {
+ return this.index.all();
+ },
+ clear: function clear() {
+ this.index.reset();
+ return this;
+ },
+ clearPrefetchCache: function clearPrefetchCache() {
+ this.prefetch && this.prefetch.clear();
+ return this;
+ },
+ clearRemoteCache: function clearRemoteCache() {
+ Transport.resetCache();
+ return this;
+ },
+ ttAdapter: function ttAdapter() {
+ return this.__ttAdapter();
+ }
+ });
+ return Bloodhound;
+ }();
+ return Bloodhound;
+});
+
+(function(root, factory) {
+ if (typeof define === "function" && define.amd) {
+ define("typeahead.js", [ "jquery" ], function(a0) {
+ return factory(a0);
+ });
+ } else if (typeof exports === "object") {
+ module.exports = factory(require("jquery"));
+ } else {
+ factory(jQuery);
+ }
+})(this, function($) {
+ var _ = function() {
+ "use strict";
+ return {
+ isMsie: function() {
+ return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false;
+ },
+ isBlankString: function(str) {
+ return !str || /^\s*$/.test(str);
+ },
+ escapeRegExChars: function(str) {
+ return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
+ },
+ isString: function(obj) {
+ return typeof obj === "string";
+ },
+ isNumber: function(obj) {
+ return typeof obj === "number";
+ },
+ isArray: $.isArray,
+ isFunction: $.isFunction,
+ isObject: $.isPlainObject,
+ isUndefined: function(obj) {
+ return typeof obj === "undefined";
+ },
+ isElement: function(obj) {
+ return !!(obj && obj.nodeType === 1);
+ },
+ isJQuery: function(obj) {
+ return obj instanceof $;
+ },
+ toStr: function toStr(s) {
+ return _.isUndefined(s) || s === null ? "" : s + "";
+ },
+ bind: $.proxy,
+ each: function(collection, cb) {
+ $.each(collection, reverseArgs);
+ function reverseArgs(index, value) {
+ return cb(value, index);
+ }
+ },
+ map: $.map,
+ filter: $.grep,
+ every: function(obj, test) {
+ var result = true;
+ if (!obj) {
+ return result;
+ }
+ $.each(obj, function(key, val) {
+ if (!(result = test.call(null, val, key, obj))) {
+ return false;
+ }
+ });
+ return !!result;
+ },
+ some: function(obj, test) {
+ var result = false;
+ if (!obj) {
+ return result;
+ }
+ $.each(obj, function(key, val) {
+ if (result = test.call(null, val, key, obj)) {
+ return false;
+ }
+ });
+ return !!result;
+ },
+ mixin: $.extend,
+ identity: function(x) {
+ return x;
+ },
+ clone: function(obj) {
+ return $.extend(true, {}, obj);
+ },
+ getIdGenerator: function() {
+ var counter = 0;
+ return function() {
+ return counter++;
+ };
+ },
+ templatify: function templatify(obj) {
+ return $.isFunction(obj) ? obj : template;
+ function template() {
+ return String(obj);
+ }
+ },
+ defer: function(fn) {
+ setTimeout(fn, 0);
+ },
+ debounce: function(func, wait, immediate) {
+ var timeout, result;
+ return function() {
+ var context = this, args = arguments, later, callNow;
+ later = function() {
+ timeout = null;
+ if (!immediate) {
+ result = func.apply(context, args);
+ }
+ };
+ callNow = immediate && !timeout;
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+ if (callNow) {
+ result = func.apply(context, args);
+ }
+ return result;
+ };
+ },
+ throttle: function(func, wait) {
+ var context, args, timeout, result, previous, later;
+ previous = 0;
+ later = function() {
+ previous = new Date();
+ timeout = null;
+ result = func.apply(context, args);
+ };
+ return function() {
+ var now = new Date(), remaining = wait - (now - previous);
+ context = this;
+ args = arguments;
+ if (remaining <= 0) {
+ clearTimeout(timeout);
+ timeout = null;
+ previous = now;
+ result = func.apply(context, args);
+ } else if (!timeout) {
+ timeout = setTimeout(later, remaining);
+ }
+ return result;
+ };
+ },
+ stringify: function(val) {
+ return _.isString(val) ? val : JSON.stringify(val);
+ },
+ noop: function() {}
+ };
+ }();
+ var WWW = function() {
+ "use strict";
+ var defaultClassNames = {
+ wrapper: "twitter-typeahead",
+ input: "tt-input",
+ hint: "tt-hint",
+ menu: "tt-menu",
+ dataset: "tt-dataset",
+ suggestion: "tt-suggestion",
+ selectable: "tt-selectable",
+ empty: "tt-empty",
+ open: "tt-open",
+ cursor: "tt-cursor",
+ highlight: "tt-highlight"
+ };
+ return build;
+ function build(o) {
+ var www, classes;
+ classes = _.mixin({}, defaultClassNames, o);
+ www = {
+ css: buildCss(),
+ classes: classes,
+ html: buildHtml(classes),
+ selectors: buildSelectors(classes)
+ };
+ return {
+ css: www.css,
+ html: www.html,
+ classes: www.classes,
+ selectors: www.selectors,
+ mixin: function(o) {
+ _.mixin(o, www);
+ }
+ };
+ }
+ function buildHtml(c) {
+ return {
+ wrapper: '<span class="' + c.wrapper + '"></span>',
+ menu: '<div class="' + c.menu + '"></div>'
+ };
+ }
+ function buildSelectors(classes) {
+ var selectors = {};
+ _.each(classes, function(v, k) {
+ selectors[k] = "." + v;
+ });
+ return selectors;
+ }
+ function buildCss() {
+ var css = {
+ wrapper: {
+ position: "relative",
+ display: "inline-block"
+ },
+ hint: {
+ position: "absolute",
+ top: "0",
+ left: "0",
+ borderColor: "transparent",
+ boxShadow: "none",
+ opacity: "1"
+ },
+ input: {
+ position: "relative",
+ verticalAlign: "top",
+ backgroundColor: "transparent"
+ },
+ inputWithNoHint: {
+ position: "relative",
+ verticalAlign: "top"
+ },
+ menu: {
+ position: "absolute",
+ top: "100%",
+ left: "0",
+ zIndex: "100",
+ display: "none"
+ },
+ ltr: {
+ left: "0",
+ right: "auto"
+ },
+ rtl: {
+ left: "auto",
+ right: " 0"
+ }
+ };
+ if (_.isMsie()) {
+ _.mixin(css.input, {
+ backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"
+ });
+ }
+ return css;
+ }
+ }();
+ var EventBus = function() {
+ "use strict";
+ var namespace, deprecationMap;
+ namespace = "typeahead:";
+ deprecationMap = {
+ render: "rendered",
+ cursorchange: "cursorchanged",
+ select: "selected",
+ autocomplete: "autocompleted"
+ };
+ function EventBus(o) {
+ if (!o || !o.el) {
+ $.error("EventBus initialized without el");
+ }
+ this.$el = $(o.el);
+ }
+ _.mixin(EventBus.prototype, {
+ _trigger: function(type, args) {
+ var $e;
+ $e = $.Event(namespace + type);
+ (args = args || []).unshift($e);
+ this.$el.trigger.apply(this.$el, args);
+ return $e;
+ },
+ before: function(type) {
+ var args, $e;
+ args = [].slice.call(arguments, 1);
+ $e = this._trigger("before" + type, args);
+ return $e.isDefaultPrevented();
+ },
+ trigger: function(type) {
+ var deprecatedType;
+ this._trigger(type, [].slice.call(arguments, 1));
+ if (deprecatedType = deprecationMap[type]) {
+ this._trigger(deprecatedType, [].slice.call(arguments, 1));
+ }
+ }
+ });
+ return EventBus;
+ }();
+ var EventEmitter = function() {
+ "use strict";
+ var splitter = /\s+/, nextTick = getNextTick();
+ return {
+ onSync: onSync,
+ onAsync: onAsync,
+ off: off,
+ trigger: trigger
+ };
+ function on(method, types, cb, context) {
+ var type;
+ if (!cb) {
+ return this;
+ }
+ types = types.split(splitter);
+ cb = context ? bindContext(cb, context) : cb;
+ this._callbacks = this._callbacks || {};
+ while (type = types.shift()) {
+ this._callbacks[type] = this._callbacks[type] || {
+ sync: [],
+ async: []
+ };
+ this._callbacks[type][method].push(cb);
+ }
+ return this;
+ }
+ function onAsync(types, cb, context) {
+ return on.call(this, "async", types, cb, context);
+ }
+ function onSync(types, cb, context) {
+ return on.call(this, "sync", types, cb, context);
+ }
+ function off(types) {
+ var type;
+ if (!this._callbacks) {
+ return this;
+ }
+ types = types.split(splitter);
+ while (type = types.shift()) {
+ delete this._callbacks[type];
+ }
+ return this;
+ }
+ function trigger(types) {
+ var type, callbacks, args, syncFlush, asyncFlush;
+ if (!this._callbacks) {
+ return this;
+ }
+ types = types.split(splitter);
+ args = [].slice.call(arguments, 1);
+ while ((type = types.shift()) && (callbacks = this._callbacks[type])) {
+ syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args));
+ asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args));
+ syncFlush() && nextTick(asyncFlush);
+ }
+ return this;
+ }
+ function getFlush(callbacks, context, args) {
+ return flush;
+ function flush() {
+ var cancelled;
+ for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {
+ cancelled = callbacks[i].apply(context, args) === false;
+ }
+ return !cancelled;
+ }
+ }
+ function getNextTick() {
+ var nextTickFn;
+ if (window.setImmediate) {
+ nextTickFn = function nextTickSetImmediate(fn) {
+ setImmediate(function() {
+ fn();
+ });
+ };
+ } else {
+ nextTickFn = function nextTickSetTimeout(fn) {
+ setTimeout(function() {
+ fn();
+ }, 0);
+ };
+ }
+ return nextTickFn;
+ }
+ function bindContext(fn, context) {
+ return fn.bind ? fn.bind(context) : function() {
+ fn.apply(context, [].slice.call(arguments, 0));
+ };
+ }
+ }();
+ var highlight = function(doc) {
+ "use strict";
+ var defaults = {
+ node: null,
+ pattern: null,
+ tagName: "strong",
+ className: null,
+ wordsOnly: false,
+ caseSensitive: false
+ };
+ return function hightlight(o) {
+ var regex;
+ o = _.mixin({}, defaults, o);
+ if (!o.node || !o.pattern) {
+ return;
+ }
+ o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ];
+ regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly);
+ traverse(o.node, hightlightTextNode);
+ function hightlightTextNode(textNode) {
+ var match, patternNode, wrapperNode;
+ if (match = regex.exec(textNode.data)) {
+ wrapperNode = doc.createElement(o.tagName);
+ o.className && (wrapperNode.className = o.className);
+ patternNode = textNode.splitText(match.index);
+ patternNode.splitText(match[0].length);
+ wrapperNode.appendChild(patternNode.cloneNode(true));
+ textNode.parentNode.replaceChild(wrapperNode, patternNode);
+ }
+ return !!match;
+ }
+ function traverse(el, hightlightTextNode) {
+ var childNode, TEXT_NODE_TYPE = 3;
+ for (var i = 0; i < el.childNodes.length; i++) {
+ childNode = el.childNodes[i];
+ if (childNode.nodeType === TEXT_NODE_TYPE) {
+ i += hightlightTextNode(childNode) ? 1 : 0;
+ } else {
+ traverse(childNode, hightlightTextNode);
+ }
+ }
+ }
+ };
+ function getRegex(patterns, caseSensitive, wordsOnly) {
+ var escapedPatterns = [], regexStr;
+ for (var i = 0, len = patterns.length; i < len; i++) {
+ escapedPatterns.push(_.escapeRegExChars(patterns[i]));
+ }
+ regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")";
+ return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i");
+ }
+ }(window.document);
+ var Input = function() {
+ "use strict";
+ var specialKeyCodeMap;
+ specialKeyCodeMap = {
+ 9: "tab",
+ 27: "esc",
+ 37: "left",
+ 39: "right",
+ 13: "enter",
+ 38: "up",
+ 40: "down"
+ };
+ function Input(o, www) {
+ o = o || {};
+ if (!o.input) {
+ $.error("input is missing");
+ }
+ www.mixin(this);
+ this.$hint = $(o.hint);
+ this.$input = $(o.input);
+ this.query = this.$input.val();
+ this.queryWhenFocused = this.hasFocus() ? this.query : null;
+ this.$overflowHelper = buildOverflowHelper(this.$input);
+ this._checkLanguageDirection();
+ if (this.$hint.length === 0) {
+ this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;
+ }
+ }
+ Input.normalizeQuery = function(str) {
+ return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " ");
+ };
+ _.mixin(Input.prototype, EventEmitter, {
+ _onBlur: function onBlur() {
+ this.resetInputValue();
+ this.trigger("blurred");
+ },
+ _onFocus: function onFocus() {
+ this.queryWhenFocused = this.query;
+ this.trigger("focused");
+ },
+ _onKeydown: function onKeydown($e) {
+ var keyName = specialKeyCodeMap[$e.which || $e.keyCode];
+ this._managePreventDefault(keyName, $e);
+ if (keyName && this._shouldTrigger(keyName, $e)) {
+ this.trigger(keyName + "Keyed", $e);
+ }
+ },
+ _onInput: function onInput() {
+ this._setQuery(this.getInputValue());
+ this.clearHintIfInvalid();
+ this._checkLanguageDirection();
+ },
+ _managePreventDefault: function managePreventDefault(keyName, $e) {
+ var preventDefault;
+ switch (keyName) {
+ case "up":
+ case "down":
+ preventDefault = !withModifier($e);
+ break;
+
+ default:
+ preventDefault = false;
+ }
+ preventDefault && $e.preventDefault();
+ },
+ _shouldTrigger: function shouldTrigger(keyName, $e) {
+ var trigger;
+ switch (keyName) {
+ case "tab":
+ trigger = !withModifier($e);
+ break;
+
+ default:
+ trigger = true;
+ }
+ return trigger;
+ },
+ _checkLanguageDirection: function checkLanguageDirection() {
+ var dir = (this.$input.css("direction") || "ltr").toLowerCase();
+ if (this.dir !== dir) {
+ this.dir = dir;
+ this.$hint.attr("dir", dir);
+ this.trigger("langDirChanged", dir);
+ }
+ },
+ _setQuery: function setQuery(val, silent) {
+ var areEquivalent, hasDifferentWhitespace;
+ areEquivalent = areQueriesEquivalent(val, this.query);
+ hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false;
+ this.query = val;
+ if (!silent && !areEquivalent) {
+ this.trigger("queryChanged", this.query);
+ } else if (!silent && hasDifferentWhitespace) {
+ this.trigger("whitespaceChanged", this.query);
+ }
+ },
+ bind: function() {
+ var that = this, onBlur, onFocus, onKeydown, onInput;
+ onBlur = _.bind(this._onBlur, this);
+ onFocus = _.bind(this._onFocus, this);
+ onKeydown = _.bind(this._onKeydown, this);
+ onInput = _.bind(this._onInput, this);
+ this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown);
+ if (!_.isMsie() || _.isMsie() > 9) {
+ this.$input.on("input.tt", onInput);
+ } else {
+ this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) {
+ if (specialKeyCodeMap[$e.which || $e.keyCode]) {
+ return;
+ }
+ _.defer(_.bind(that._onInput, that, $e));
+ });
+ }
+ return this;
+ },
+ focus: function focus() {
+ this.$input.focus();
+ },
+ blur: function blur() {
+ this.$input.blur();
+ },
+ getLangDir: function getLangDir() {
+ return this.dir;
+ },
+ getQuery: function getQuery() {
+ return this.query || "";
+ },
+ setQuery: function setQuery(val, silent) {
+ this.setInputValue(val);
+ this._setQuery(val, silent);
+ },
+ hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() {
+ return this.query !== this.queryWhenFocused;
+ },
+ getInputValue: function getInputValue() {
+ return this.$input.val();
+ },
+ setInputValue: function setInputValue(value) {
+ this.$input.val(value);
+ this.clearHintIfInvalid();
+ this._checkLanguageDirection();
+ },
+ resetInputValue: function resetInputValue() {
+ this.setInputValue(this.query);
+ },
+ getHint: function getHint() {
+ return this.$hint.val();
+ },
+ setHint: function setHint(value) {
+ this.$hint.val(value);
+ },
+ clearHint: function clearHint() {
+ this.setHint("");
+ },
+ clearHintIfInvalid: function clearHintIfInvalid() {
+ var val, hint, valIsPrefixOfHint, isValid;
+ val = this.getInputValue();
+ hint = this.getHint();
+ valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;
+ isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow();
+ !isValid && this.clearHint();
+ },
+ hasFocus: function hasFocus() {
+ return this.$input.is(":focus");
+ },
+ hasOverflow: function hasOverflow() {
+ var constraint = this.$input.width() - 2;
+ this.$overflowHelper.text(this.getInputValue());
+ return this.$overflowHelper.width() >= constraint;
+ },
+ isCursorAtEnd: function() {
+ var valueLength, selectionStart, range;
+ valueLength = this.$input.val().length;
+ selectionStart = this.$input[0].selectionStart;
+ if (_.isNumber(selectionStart)) {
+ return selectionStart === valueLength;
+ } else if (document.selection) {
+ range = document.selection.createRange();
+ range.moveStart("character", -valueLength);
+ return valueLength === range.text.length;
+ }
+ return true;
+ },
+ destroy: function destroy() {
+ this.$hint.off(".tt");
+ this.$input.off(".tt");
+ this.$overflowHelper.remove();
+ this.$hint = this.$input = this.$overflowHelper = $("<div>");
+ }
+ });
+ return Input;
+ function buildOverflowHelper($input) {
+ return $('<pre aria-hidden="true"></pre>').css({
+ position: "absolute",
+ visibility: "hidden",
+ whiteSpace: "pre",
+ fontFamily: $input.css("font-family"),
+ fontSize: $input.css("font-size"),
+ fontStyle: $input.css("font-style"),
+ fontVariant: $input.css("font-variant"),
+ fontWeight: $input.css("font-weight"),
+ wordSpacing: $input.css("word-spacing"),
+ letterSpacing: $input.css("letter-spacing"),
+ textIndent: $input.css("text-indent"),
+ textRendering: $input.css("text-rendering"),
+ textTransform: $input.css("text-transform")
+ }).insertAfter($input);
+ }
+ function areQueriesEquivalent(a, b) {
+ return Input.normalizeQuery(a) === Input.normalizeQuery(b);
+ }
+ function withModifier($e) {
+ return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;
+ }
+ }();
+ var Dataset = function() {
+ "use strict";
+ var keys, nameGenerator;
+ keys = {
+ val: "tt-selectable-display",
+ obj: "tt-selectable-object"
+ };
+ nameGenerator = _.getIdGenerator();
+ function Dataset(o, www) {
+ o = o || {};
+ o.templates = o.templates || {};
+ o.templates.notFound = o.templates.notFound || o.templates.empty;
+ if (!o.source) {
+ $.error("missing source");
+ }
+ if (!o.node) {
+ $.error("missing node");
+ }
+ if (o.name && !isValidName(o.name)) {
+ $.error("invalid dataset name: " + o.name);
+ }
+ www.mixin(this);
+ this.highlight = !!o.highlight;
+ this.name = o.name || nameGenerator();
+ this.limit = o.limit || 5;
+ this.displayFn = getDisplayFn(o.display || o.displayKey);
+ this.templates = getTemplates(o.templates, this.displayFn);
+ this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source;
+ this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async;
+ this._resetLastSuggestion();
+ this.$el = $(o.node).addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name);
+ }
+ Dataset.extractData = function extractData(el) {
+ var $el = $(el);
+ if ($el.data(keys.obj)) {
+ return {
+ val: $el.data(keys.val) || "",
+ obj: $el.data(keys.obj) || null
+ };
+ }
+ return null;
+ };
+ _.mixin(Dataset.prototype, EventEmitter, {
+ _overwrite: function overwrite(query, suggestions) {
+ suggestions = suggestions || [];
+ if (suggestions.length) {
+ this._renderSuggestions(query, suggestions);
+ } else if (this.async && this.templates.pending) {
+ this._renderPending(query);
+ } else if (!this.async && this.templates.notFound) {
+ this._renderNotFound(query);
+ } else {
+ this._empty();
+ }
+ this.trigger("rendered", this.name, suggestions, false);
+ },
+ _append: function append(query, suggestions) {
+ suggestions = suggestions || [];
+ if (suggestions.length && this.$lastSuggestion.length) {
+ this._appendSuggestions(query, suggestions);
+ } else if (suggestions.length) {
+ this._renderSuggestions(query, suggestions);
+ } else if (!this.$lastSuggestion.length && this.templates.notFound) {
+ this._renderNotFound(query);
+ }
+ this.trigger("rendered", this.name, suggestions, true);
+ },
+ _renderSuggestions: function renderSuggestions(query, suggestions) {
+ var $fragment;
+ $fragment = this._getSuggestionsFragment(query, suggestions);
+ this.$lastSuggestion = $fragment.children().last();
+ this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions));
+ },
+ _appendSuggestions: function appendSuggestions(query, suggestions) {
+ var $fragment, $lastSuggestion;
+ $fragment = this._getSuggestionsFragment(query, suggestions);
+ $lastSuggestion = $fragment.children().last();
+ this.$lastSuggestion.after($fragment);
+ this.$lastSuggestion = $lastSuggestion;
+ },
+ _renderPending: function renderPending(query) {
+ var template = this.templates.pending;
+ this._resetLastSuggestion();
+ template && this.$el.html(template({
+ query: query,
+ dataset: this.name
+ }));
+ },
+ _renderNotFound: function renderNotFound(query) {
+ var template = this.templates.notFound;
+ this._resetLastSuggestion();
+ template && this.$el.html(template({
+ query: query,
+ dataset: this.name
+ }));
+ },
+ _empty: function empty() {
+ this.$el.empty();
+ this._resetLastSuggestion();
+ },
+ _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) {
+ var that = this, fragment;
+ fragment = document.createDocumentFragment();
+ _.each(suggestions, function getSuggestionNode(suggestion) {
+ var $el, context;
+ context = that._injectQuery(query, suggestion);
+ $el = $(that.templates.suggestion(context)).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable);
+ fragment.appendChild($el[0]);
+ });
+ this.highlight && highlight({
+ className: this.classes.highlight,
+ node: fragment,
+ pattern: query
+ });
+ return $(fragment);
+ },
+ _getFooter: function getFooter(query, suggestions) {
+ return this.templates.footer ? this.templates.footer({
+ query: query,
+ suggestions: suggestions,
+ dataset: this.name
+ }) : null;
+ },
+ _getHeader: function getHeader(query, suggestions) {
+ return this.templates.header ? this.templates.header({
+ query: query,
+ suggestions: suggestions,
+ dataset: this.name
+ }) : null;
+ },
+ _resetLastSuggestion: function resetLastSuggestion() {
+ this.$lastSuggestion = $();
+ },
+ _injectQuery: function injectQuery(query, obj) {
+ return _.isObject(obj) ? _.mixin({
+ _query: query
+ }, obj) : obj;
+ },
+ update: function update(query) {
+ var that = this, canceled = false, syncCalled = false, rendered = 0;
+ this.cancel();
+ this.cancel = function cancel() {
+ canceled = true;
+ that.cancel = $.noop;
+ that.async && that.trigger("asyncCanceled", query);
+ };
+ this.source(query, sync, async);
+ !syncCalled && sync([]);
+ function sync(suggestions) {
+ if (syncCalled) {
+ return;
+ }
+ syncCalled = true;
+ suggestions = (suggestions || []).slice(0, that.limit);
+ rendered = suggestions.length;
+ that._overwrite(query, suggestions);
+ if (rendered < that.limit && that.async) {
+ that.trigger("asyncRequested", query);
+ }
+ }
+ function async(suggestions) {
+ suggestions = suggestions || [];
+ if (!canceled && rendered < that.limit) {
+ that.cancel = $.noop;
+ rendered += suggestions.length;
+ that._append(query, suggestions.slice(0, that.limit - rendered));
+ that.async && that.trigger("asyncReceived", query);
+ }
+ }
+ },
+ cancel: $.noop,
+ clear: function clear() {
+ this._empty();
+ this.cancel();
+ this.trigger("cleared");
+ },
+ isEmpty: function isEmpty() {
+ return this.$el.is(":empty");
+ },
+ destroy: function destroy() {
+ this.$el = $("<div>");
+ }
+ });
+ return Dataset;
+ function getDisplayFn(display) {
+ display = display || _.stringify;
+ return _.isFunction(display) ? display : displayFn;
+ function displayFn(obj) {
+ return obj[display];
+ }
+ }
+ function getTemplates(templates, displayFn) {
+ return {
+ notFound: templates.notFound && _.templatify(templates.notFound),
+ pending: templates.pending && _.templatify(templates.pending),
+ header: templates.header && _.templatify(templates.header),
+ footer: templates.footer && _.templatify(templates.footer),
+ suggestion: templates.suggestion || suggestionTemplate
+ };
+ function suggestionTemplate(context) {
+ return $("<div>").text(displayFn(context));
+ }
+ }
+ function isValidName(str) {
+ return /^[_a-zA-Z0-9-]+$/.test(str);
+ }
+ }();
+ var Menu = function() {
+ "use strict";
+ function Menu(o, www) {
+ var that = this;
+ o = o || {};
+ if (!o.node) {
+ $.error("node is required");
+ }
+ www.mixin(this);
+ this.$node = $(o.node);
+ this.query = null;
+ this.datasets = _.map(o.datasets, initializeDataset);
+ function initializeDataset(oDataset) {
+ var node = that.$node.find(oDataset.node).first();
+ oDataset.node = node.length ? node : $("<div>").appendTo(that.$node);
+ return new Dataset(oDataset, www);
+ }
+ }
+ _.mixin(Menu.prototype, EventEmitter, {
+ _onSelectableClick: function onSelectableClick($e) {
+ this.trigger("selectableClicked", $($e.currentTarget));
+ },
+ _onRendered: function onRendered(type, dataset, suggestions, async) {
+ this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());
+ this.trigger("datasetRendered", dataset, suggestions, async);
+ },
+ _onCleared: function onCleared() {
+ this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());
+ this.trigger("datasetCleared");
+ },
+ _propagate: function propagate() {
+ this.trigger.apply(this, arguments);
+ },
+ _allDatasetsEmpty: function allDatasetsEmpty() {
+ return _.every(this.datasets, isDatasetEmpty);
+ function isDatasetEmpty(dataset) {
+ return dataset.isEmpty();
+ }
+ },
+ _getSelectables: function getSelectables() {
+ return this.$node.find(this.selectors.selectable);
+ },
+ _removeCursor: function _removeCursor() {
+ var $selectable = this.getActiveSelectable();
+ $selectable && $selectable.removeClass(this.classes.cursor);
+ },
+ _ensureVisible: function ensureVisible($el) {
+ var elTop, elBottom, nodeScrollTop, nodeHeight;
+ elTop = $el.position().top;
+ elBottom = elTop + $el.outerHeight(true);
+ nodeScrollTop = this.$node.scrollTop();
+ nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10);
+ if (elTop < 0) {
+ this.$node.scrollTop(nodeScrollTop + elTop);
+ } else if (nodeHeight < elBottom) {
+ this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight));
+ }
+ },
+ bind: function() {
+ var that = this, onSelectableClick;
+ onSelectableClick = _.bind(this._onSelectableClick, this);
+ this.$node.on("click.tt", this.selectors.selectable, onSelectableClick);
+ _.each(this.datasets, function(dataset) {
+ dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that);
+ });
+ return this;
+ },
+ isOpen: function isOpen() {
+ return this.$node.hasClass(this.classes.open);
+ },
+ open: function open() {
+ this.$node.addClass(this.classes.open);
+ },
+ close: function close() {
+ this.$node.removeClass(this.classes.open);
+ this._removeCursor();
+ },
+ setLanguageDirection: function setLanguageDirection(dir) {
+ this.$node.attr("dir", dir);
+ },
+ selectableRelativeToCursor: function selectableRelativeToCursor(delta) {
+ var $selectables, $oldCursor, oldIndex, newIndex;
+ $oldCursor = this.getActiveSelectable();
+ $selectables = this._getSelectables();
+ oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1;
+ newIndex = oldIndex + delta;
+ newIndex = (newIndex + 1) % ($selectables.length + 1) - 1;
+ newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex;
+ return newIndex === -1 ? null : $selectables.eq(newIndex);
+ },
+ setCursor: function setCursor($selectable) {
+ this._removeCursor();
+ if ($selectable = $selectable && $selectable.first()) {
+ $selectable.addClass(this.classes.cursor);
+ this._ensureVisible($selectable);
+ }
+ },
+ getSelectableData: function getSelectableData($el) {
+ return $el && $el.length ? Dataset.extractData($el) : null;
+ },
+ getActiveSelectable: function getActiveSelectable() {
+ var $selectable = this._getSelectables().filter(this.selectors.cursor).first();
+ return $selectable.length ? $selectable : null;
+ },
+ getTopSelectable: function getTopSelectable() {
+ var $selectable = this._getSelectables().first();
+ return $selectable.length ? $selectable : null;
+ },
+ update: function update(query) {
+ var isValidUpdate = query !== this.query;
+ if (isValidUpdate) {
+ this.query = query;
+ _.each(this.datasets, updateDataset);
+ }
+ return isValidUpdate;
+ function updateDataset(dataset) {
+ dataset.update(query);
+ }
+ },
+ empty: function empty() {
+ _.each(this.datasets, clearDataset);
+ this.query = null;
+ this.$node.addClass(this.classes.empty);
+ function clearDataset(dataset) {
+ dataset.clear();
+ }
+ },
+ destroy: function destroy() {
+ this.$node.off(".tt");
+ this.$node = $("<div>");
+ _.each(this.datasets, destroyDataset);
+ function destroyDataset(dataset) {
+ dataset.destroy();
+ }
+ }
+ });
+ return Menu;
+ }();
+ var DefaultMenu = function() {
+ "use strict";
+ var s = Menu.prototype;
+ function DefaultMenu() {
+ Menu.apply(this, [].slice.call(arguments, 0));
+ }
+ _.mixin(DefaultMenu.prototype, Menu.prototype, {
+ open: function open() {
+ !this._allDatasetsEmpty() && this._show();
+ return s.open.apply(this, [].slice.call(arguments, 0));
+ },
+ close: function close() {
+ this._hide();
+ return s.close.apply(this, [].slice.call(arguments, 0));
+ },
+ _onRendered: function onRendered() {
+ if (this._allDatasetsEmpty()) {
+ this._hide();
+ } else {
+ this.isOpen() && this._show();
+ }
+ return s._onRendered.apply(this, [].slice.call(arguments, 0));
+ },
+ _onCleared: function onCleared() {
+ if (this._allDatasetsEmpty()) {
+ this._hide();
+ } else {
+ this.isOpen() && this._show();
+ }
+ return s._onCleared.apply(this, [].slice.call(arguments, 0));
+ },
+ setLanguageDirection: function setLanguageDirection(dir) {
+ this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl);
+ return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0));
+ },
+ _hide: function hide() {
+ this.$node.hide();
+ },
+ _show: function show() {
+ this.$node.css("display", "block");
+ }
+ });
+ return DefaultMenu;
+ }();
+ var Typeahead = function() {
+ "use strict";
+ function Typeahead(o, www) {
+ var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged;
+ o = o || {};
+ if (!o.input) {
+ $.error("missing input");
+ }
+ if (!o.menu) {
+ $.error("missing menu");
+ }
+ if (!o.eventBus) {
+ $.error("missing event bus");
+ }
+ www.mixin(this);
+ this.eventBus = o.eventBus;
+ this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;
+ this.input = o.input;
+ this.menu = o.menu;
+ this.enabled = true;
+ this.active = false;
+ this.input.hasFocus() && this.activate();
+ this.dir = this.input.getLangDir();
+ this._hacks();
+ this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this);
+ onFocused = c(this, "activate", "open", "_onFocused");
+ onBlurred = c(this, "deactivate", "_onBlurred");
+ onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed");
+ onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed");
+ onEscKeyed = c(this, "isActive", "_onEscKeyed");
+ onUpKeyed = c(this, "isActive", "open", "_onUpKeyed");
+ onDownKeyed = c(this, "isActive", "open", "_onDownKeyed");
+ onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed");
+ onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed");
+ onQueryChanged = c(this, "_openIfActive", "_onQueryChanged");
+ onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged");
+ this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this);
+ }
+ _.mixin(Typeahead.prototype, {
+ _hacks: function hacks() {
+ var $input, $menu;
+ $input = this.input.$input || $("<div>");
+ $menu = this.menu.$node || $("<div>");
+ $input.on("blur.tt", function($e) {
+ var active, isActive, hasActive;
+ active = document.activeElement;
+ isActive = $menu.is(active);
+ hasActive = $menu.has(active).length > 0;
+ if (_.isMsie() && (isActive || hasActive)) {
+ $e.preventDefault();
+ $e.stopImmediatePropagation();
+ _.defer(function() {
+ $input.focus();
+ });
+ }
+ });
+ $menu.on("mousedown.tt", function($e) {
+ $e.preventDefault();
+ });
+ },
+ _onSelectableClicked: function onSelectableClicked(type, $el) {
+ this.select($el);
+ },
+ _onDatasetCleared: function onDatasetCleared() {
+ this._updateHint();
+ },
+ _onDatasetRendered: function onDatasetRendered(type, dataset, suggestions, async) {
+ this._updateHint();
+ this.eventBus.trigger("render", suggestions, async, dataset);
+ },
+ _onAsyncRequested: function onAsyncRequested(type, dataset, query) {
+ this.eventBus.trigger("asyncrequest", query, dataset);
+ },
+ _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {
+ this.eventBus.trigger("asynccancel", query, dataset);
+ },
+ _onAsyncReceived: function onAsyncReceived(type, dataset, query) {
+ this.eventBus.trigger("asyncreceive", query, dataset);
+ },
+ _onFocused: function onFocused() {
+ this._minLengthMet() && this.menu.update(this.input.getQuery());
+ },
+ _onBlurred: function onBlurred() {
+ if (this.input.hasQueryChangedSinceLastFocus()) {
+ this.eventBus.trigger("change", this.input.getQuery());
+ }
+ },
+ _onEnterKeyed: function onEnterKeyed(type, $e) {
+ var $selectable;
+ if ($selectable = this.menu.getActiveSelectable()) {
+ this.select($selectable) && $e.preventDefault();
+ }
+ },
+ _onTabKeyed: function onTabKeyed(type, $e) {
+ var $selectable;
+ if ($selectable = this.menu.getActiveSelectable()) {
+ this.select($selectable) && $e.preventDefault();
+ } else if ($selectable = this.menu.getTopSelectable()) {
+ this.autocomplete($selectable) && $e.preventDefault();
+ }
+ },
+ _onEscKeyed: function onEscKeyed() {
+ this.close();
+ },
+ _onUpKeyed: function onUpKeyed() {
+ this.moveCursor(-1);
+ },
+ _onDownKeyed: function onDownKeyed() {
+ this.moveCursor(+1);
+ },
+ _onLeftKeyed: function onLeftKeyed() {
+ if (this.dir === "rtl" && this.input.isCursorAtEnd()) {
+ this.autocomplete(this.menu.getTopSelectable());
+ }
+ },
+ _onRightKeyed: function onRightKeyed() {
+ if (this.dir === "ltr" && this.input.isCursorAtEnd()) {
+ this.autocomplete(this.menu.getTopSelectable());
+ }
+ },
+ _onQueryChanged: function onQueryChanged(e, query) {
+ this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();
+ },
+ _onWhitespaceChanged: function onWhitespaceChanged() {
+ this._updateHint();
+ },
+ _onLangDirChanged: function onLangDirChanged(e, dir) {
+ if (this.dir !== dir) {
+ this.dir = dir;
+ this.menu.setLanguageDirection(dir);
+ }
+ },
+ _openIfActive: function openIfActive() {
+ this.isActive() && this.open();
+ },
+ _minLengthMet: function minLengthMet(query) {
+ query = _.isString(query) ? query : this.input.getQuery() || "";
+ return query.length >= this.minLength;
+ },
+ _updateHint: function updateHint() {
+ var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;
+ $selectable = this.menu.getTopSelectable();
+ data = this.menu.getSelectableData($selectable);
+ val = this.input.getInputValue();
+ if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {
+ query = Input.normalizeQuery(val);
+ escapedQuery = _.escapeRegExChars(query);
+ frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i");
+ match = frontMatchRegEx.exec(data.val);
+ match && this.input.setHint(val + match[1]);
+ } else {
+ this.input.clearHint();
+ }
+ },
+ isEnabled: function isEnabled() {
+ return this.enabled;
+ },
+ enable: function enable() {
+ this.enabled = true;
+ },
+ disable: function disable() {
+ this.enabled = false;
+ },
+ isActive: function isActive() {
+ return this.active;
+ },
+ activate: function activate() {
+ if (this.isActive()) {
+ return true;
+ } else if (!this.isEnabled() || this.eventBus.before("active")) {
+ return false;
+ } else {
+ this.active = true;
+ this.eventBus.trigger("active");
+ return true;
+ }
+ },
+ deactivate: function deactivate() {
+ if (!this.isActive()) {
+ return true;
+ } else if (this.eventBus.before("idle")) {
+ return false;
+ } else {
+ this.active = false;
+ this.close();
+ this.eventBus.trigger("idle");
+ return true;
+ }
+ },
+ isOpen: function isOpen() {
+ return this.menu.isOpen();
+ },
+ open: function open() {
+ if (!this.isOpen() && !this.eventBus.before("open")) {
+ this.menu.open();
+ this._updateHint();
+ this.eventBus.trigger("open");
+ }
+ return this.isOpen();
+ },
+ close: function close() {
+ if (this.isOpen() && !this.eventBus.before("close")) {
+ this.menu.close();
+ this.input.clearHint();
+ this.input.resetInputValue();
+ this.eventBus.trigger("close");
+ }
+ return !this.isOpen();
+ },
+ setVal: function setVal(val) {
+ this.input.setQuery(_.toStr(val));
+ },
+ getVal: function getVal() {
+ return this.input.getQuery();
+ },
+ select: function select($selectable) {
+ var data = this.menu.getSelectableData($selectable);
+ if (data && !this.eventBus.before("select", data.obj)) {
+ this.input.setQuery(data.val, true);
+ this.eventBus.trigger("select", data.obj);
+ this.close();
+ return true;
+ }
+ return false;
+ },
+ autocomplete: function autocomplete($selectable) {
+ var query, data, isValid;
+ query = this.input.getQuery();
+ data = this.menu.getSelectableData($selectable);
+ isValid = data && query !== data.val;
+ if (isValid && !this.eventBus.before("autocomplete", data.obj)) {
+ this.input.setQuery(data.val);
+ this.eventBus.trigger("autocomplete", data.obj);
+ return true;
+ }
+ return false;
+ },
+ moveCursor: function moveCursor(delta) {
+ var query, $candidate, data, payload, cancelMove;
+ query = this.input.getQuery();
+ $candidate = this.menu.selectableRelativeToCursor(delta);
+ data = this.menu.getSelectableData($candidate);
+ payload = data ? data.obj : null;
+ cancelMove = this._minLengthMet() && this.menu.update(query);
+ if (!cancelMove && !this.eventBus.before("cursorchange", payload)) {
+ this.menu.setCursor($candidate);
+ if (data) {
+ this.input.setInputValue(data.val);
+ } else {
+ this.input.resetInputValue();
+ this._updateHint();
+ }
+ this.eventBus.trigger("cursorchange", payload);
+ return true;
+ }
+ return false;
+ },
+ destroy: function destroy() {
+ this.input.destroy();
+ this.menu.destroy();
+ }
+ });
+ return Typeahead;
+ function c(ctx) {
+ var methods = [].slice.call(arguments, 1);
+ return function() {
+ var args = [].slice.call(arguments);
+ _.each(methods, function(method) {
+ return ctx[method].apply(ctx, args);
+ });
+ };
+ }
+ }();
+ (function() {
+ "use strict";
+ var old, keys, methods;
+ old = $.fn.typeahead;
+ keys = {
+ www: "tt-www",
+ attrs: "tt-attrs",
+ typeahead: "tt-typeahead"
+ };
+ methods = {
+ initialize: function initialize(o, datasets) {
+ var www;
+ datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);
+ o = o || {};
+ www = WWW(o.classNames);
+ return this.each(attach);
+ function attach() {
+ var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, typeahead, MenuConstructor;
+ _.each(datasets, function(d) {
+ d.highlight = !!o.highlight;
+ });
+ $input = $(this);
+ $wrapper = $(www.html.wrapper);
+ $hint = $elOrNull(o.hint);
+ $menu = $elOrNull(o.menu);
+ defaultHint = o.hint !== false && !$hint;
+ defaultMenu = o.menu !== false && !$menu;
+ defaultHint && ($hint = buildHintFromInput($input, www));
+ defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));
+ $hint && $hint.val("");
+ $input = prepInput($input, www);
+ if (defaultHint || defaultMenu) {
+ $wrapper.css(www.css.wrapper);
+ $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint)
+ $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);
+ }
+ MenuConstructor = defaultMenu ? DefaultMenu : Menu;
+ eventBus = new EventBus({
+ el: $input
+ });
+ input = new Input({
+ hint: $hint,
+ input: $input
+ }, www);
+ menu = new MenuConstructor({
+ node: $menu,
+ datasets: datasets
+ }, www);
+ typeahead = new Typeahead({
+ input: input,
+ menu: menu,
+ eventBus: eventBus,
+ minLength: o.minLength
+ }, www);
+ $input.data(keys.www, www);
+ $input.data(keys.typeahead, typeahead);
+ }
+ },
+ isEnabled: function isEnabled() {
+ var enabled;
+ ttEach(this.first(), function(t) {
+ enabled = t.isEnabled();
+ });
+ return enabled;
+ },
+ enable: function enable() {
+ ttEach(this, function(t) {
+ t.enable();
+ });
+ return this;
+ },
+ disable: function disable() {
+ ttEach(this, function(t) {
+ t.disable();
+ });
+ return this;
+ },
+ isActive: function isActive() {
+ var active;
+ ttEach(this.first(), function(t) {
+ active = t.isActive();
+ });
+ return active;
+ },
+ activate: function activate() {
+ ttEach(this, function(t) {
+ t.activate();
+ });
+ return this;
+ },
+ deactivate: function deactivate() {
+ ttEach(this, function(t) {
+ t.deactivate();
+ });
+ return this;
+ },
+ isOpen: function isOpen() {
+ var open;
+ ttEach(this.first(), function(t) {
+ open = t.isOpen();
+ });
+ return open;
+ },
+ open: function open() {
+ ttEach(this, function(t) {
+ t.open();
+ });
+ return this;
+ },
+ close: function close() {
+ ttEach(this, function(t) {
+ t.close();
+ });
+ return this;
+ },
+ select: function select(el) {
+ var success = false, $el = $(el);
+ ttEach(this.first(), function(t) {
+ success = t.select($el);
+ });
+ return success;
+ },
+ autocomplete: function autocomplete(el) {
+ var success = false, $el = $(el);
+ ttEach(this.first(), function(t) {
+ success = t.autocomplete($el);
+ });
+ return success;
+ },
+ moveCursor: function moveCursoe(delta) {
+ var success = false;
+ ttEach(this.first(), function(t) {
+ success = t.moveCursor(delta);
+ });
+ return success;
+ },
+ val: function val(newVal) {
+ var query;
+ if (!arguments.length) {
+ ttEach(this.first(), function(t) {
+ query = t.getVal();
+ });
+ return query;
+ } else {
+ ttEach(this, function(t) {
+ t.setVal(newVal);
+ });
+ return this;
+ }
+ },
+ destroy: function destroy() {
+ ttEach(this, function(typeahead, $input) {
+ revert($input);
+ typeahead.destroy();
+ });
+ return this;
+ }
+ };
+ $.fn.typeahead = function(method) {
+ if (methods[method]) {
+ return methods[method].apply(this, [].slice.call(arguments, 1));
+ } else {
+ return methods.initialize.apply(this, arguments);
+ }
+ };
+ $.fn.typeahead.noConflict = function noConflict() {
+ $.fn.typeahead = old;
+ return this;
+ };
+ function ttEach($els, fn) {
+ $els.each(function() {
+ var $input = $(this), typeahead;
+ (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);
+ });
+ }
+ function buildHintFromInput($input, www) {
+ return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop("readonly", true).removeAttr("id name placeholder required").attr({
+ autocomplete: "off",
+ spellcheck: "false",
+ tabindex: -1
+ });
+ }
+ function prepInput($input, www) {
+ $input.data(keys.attrs, {
+ dir: $input.attr("dir"),
+ autocomplete: $input.attr("autocomplete"),
+ spellcheck: $input.attr("spellcheck"),
+ style: $input.attr("style")
+ });
+ $input.addClass(www.classes.input).attr({
+ autocomplete: "off",
+ spellcheck: false
+ });
+ try {
+ !$input.attr("dir") && $input.attr("dir", "auto");
+ } catch (e) {}
+ return $input;
+ }
+ function getBackgroundStyles($el) {
+ return {
+ backgroundAttachment: $el.css("background-attachment"),
+ backgroundClip: $el.css("background-clip"),
+ backgroundColor: $el.css("background-color"),
+ backgroundImage: $el.css("background-image"),
+ backgroundOrigin: $el.css("background-origin"),
+ backgroundPosition: $el.css("background-position"),
+ backgroundRepeat: $el.css("background-repeat"),
+ backgroundSize: $el.css("background-size")
+ };
+ }
+ function revert($input) {
+ var www, $wrapper;
+ www = $input.data(keys.www);
+ $wrapper = $input.parent().filter(www.selectors.wrapper);
+ _.each($input.data(keys.attrs), function(val, key) {
+ _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);
+ });
+ $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);
+ if ($wrapper.length) {
+ $input.detach().insertAfter($wrapper);
+ $wrapper.remove();
+ }
+ }
+ function $elOrNull(obj) {
+ var isValid, $el;
+ isValid = _.isJQuery(obj) || _.isElement(obj);
+ $el = isValid ? $(obj).first() : [];
+ return $el.length ? $el : null;
+ }
+ })();
+});
+/*
+ * bag.js - js/css/other loader + kv storage
+ *
+ * Copyright 2013-2014 Vitaly Puzrin
+ * https://github.com/nodeca/bag.js
+ *
+ * License MIT
+ */
+
+/*global define*/
+
+(function (root, factory) {
+ 'use strict';
+
+ if (typeof define === 'function' && define.amd) {
+ define(factory);
+ } else if (typeof module === 'object' && typeof module.exports === 'object') {
+ module.exports = factory();
+ } else {
+ root.Bag = factory();
+ }
+} (this, function () {
+ 'use strict';
+
+ var head = document.head || document.getElementsByTagName('head')[0];
+
+ //////////////////////////////////////////////////////////////////////////////
+ // helpers
+
+ function _nope() { return; }
+
+ function _isString(obj) {
+ return Object.prototype.toString.call(obj) === '[object String]';
+ }
+
+ var _isArray = Array.isArray || function isArray(obj) {
+ return Object.prototype.toString.call(obj) === '[object Array]';
+ };
+
+ function _isFunction(obj) {
+ return Object.prototype.toString.call(obj) === '[object Function]';
+ }
+
+ function _each(obj, iterator) {
+ if (_isArray(obj)) {
+ if (obj.forEach) {
+ return obj.forEach(iterator);
+ }
+ for (var i = 0; i < obj.length; i++) {
+ iterator(obj[i], i, obj);
+ }
+ } else {
+ for (var k in obj) {
+ if (Object.prototype.hasOwnProperty.call(obj, k)) {
+ iterator(obj[k], k);
+ }
+ }
+ }
+ }
+
+ function _default(obj, src) {
+ // extend obj with src properties if not exists;
+ _each(src, function (val, key) {
+ if (!obj[key]) { obj[key] = src[key]; }
+ });
+ }
+
+
+ function _asyncEach(arr, iterator, callback) {
+ callback = callback || _nope;
+ if (!arr.length) { return callback(); }
+
+ var completed = 0;
+ _each(arr, function (x) {
+ iterator(x, function (err) {
+ if (err) {
+ callback(err);
+ callback = _nope;
+ } else {
+ completed += 1;
+ if (completed >= arr.length) {
+ callback();
+ }
+ }
+ });
+ });
+ }
+
+
+ //////////////////////////////////////////////////////////////////////////////
+ // Adapters for Store class
+
+ function DomStorage(namespace) {
+ var self = this;
+ var _ns = namespace + '__';
+ var _storage = localStorage;
+
+
+ this.init = function (callback) {
+ callback();
+ };
+
+
+ this.remove = function (key, callback) {
+ callback = callback || _nope;
+ _storage.removeItem(_ns + key);
+ callback();
+ };
+
+
+ this.set = function (key, value, expire, callback) {
+ var obj = {
+ value: value,
+ expire: expire
+ };
+
+ var err;
+
+ try {
+ _storage.setItem(_ns + key, JSON.stringify(obj));
+ } catch (e) {
+ // On quota error try to reset storage & try again.
+ // Just remove all keys, without conditions, no optimizations needed.
+ if (e.name.toUpperCase().indexOf('QUOTA') >= 0) {
+ try {
+ _each(_storage, function (val, name) {
+ var k = name.split(_ns)[1];
+ if (k) { self.remove(k); }
+ });
+ _storage.setItem(_ns + key, JSON.stringify(obj));
+ } catch (e2) {
+ err = e2;
+ }
+ } else {
+ err = e;
+ }
+ }
+
+ callback(err);
+ };
+
+
+ this.get = function (key, raw, callback) {
+ if (_isFunction(raw)) {
+ callback = raw;
+ raw = false;
+ }
+
+ var err, data;
+
+ try {
+ data = JSON.parse(_storage.getItem(_ns + key));
+ data = raw ? data : data.value;
+ } catch (e) {
+ err = new Error('Can\'t read key: ' + key);
+ }
+
+ callback(err, data);
+ };
+
+
+ this.clear = function (expiredOnly, callback) {
+ var now = +new Date();
+
+ _each(_storage, function (val, name) {
+ var key = name.split(_ns)[1];
+
+ if (!key) { return; }
+
+ if (!expiredOnly) {
+ self.remove(key);
+ return;
+ }
+
+ var raw;
+ self.get(key, true, function (__, data) {
+ raw = data; // can use this hack, because get is sync;
+ });
+ if (raw && (raw.expire > 0) && ((raw.expire - now) < 0)) {
+ self.remove(key);
+ }
+ });
+
+ callback();
+ };
+ }
+
+
+ DomStorage.prototype.exists = function () {
+ try {
+ localStorage.setItem('__ls_test__', '__ls_test__');
+ localStorage.removeItem('__ls_test__');
+ return true;
+ } catch (e) {
+ return false;
+ }
+ };
+
+
+
+ function WebSql(namespace) {
+ var db;
+
+
+ this.init = function (callback) {
+ db = window.openDatabase(namespace, '1.0', 'bag.js db', 2e5);
+
+ if (!db) { return callback('Can\'t open webdql database'); }
+
+ db.transaction(function (tx) {
+ tx.executeSql(
+ 'CREATE TABLE IF NOT EXISTS kv (key TEXT PRIMARY KEY, value TEXT, expire INTEGER KEY)',
+ [],
+ function () { return callback(); },
+ function (tx, err) { return callback(err); }
+ );
+ });
+ };
+
+
+ this.remove = function (key, callback) {
+ callback = callback || _nope;
+ db.transaction(function (tx) {
+ tx.executeSql(
+ 'DELETE FROM kv WHERE key = ?',
+ [ key ],
+ function () { return callback(); },
+ function (tx, err) { return callback(err); }
+ );
+ });
+ };
+
+
+ this.set = function (key, value, expire, callback) {
+ db.transaction(function (tx) {
+ tx.executeSql(
+ 'INSERT OR REPLACE INTO kv (key, value, expire) VALUES (?, ?, ?)',
+ [ key, JSON.stringify(value), expire ],
+ function () { return callback(); },
+ function (tx, err) { return callback(err); }
+ );
+ });
+ };
+
+
+ this.get = function (key, callback) {
+ db.readTransaction(function (tx) {
+ tx.executeSql(
+ 'SELECT value FROM kv WHERE key = ?',
+ [ key ],
+ function (tx, result) {
+ if (result.rows.length === 0) {
+ return callback(new Error('key not found: ' + key));
+ }
+ var value = result.rows.item(0).value;
+ var err, data;
+ try {
+ data = JSON.parse(value);
+ } catch (e) {
+ err = new Error('Can\'t unserialise data: ' + value);
+ }
+ callback(err, data);
+ },
+ function (tx, err) { return callback(err); }
+ );
+ });
+ };
+
+
+ this.clear = function (expiredOnly, callback) {
+
+ db.transaction(function (tx) {
+ if (expiredOnly) {
+ tx.executeSql(
+ 'DELETE FROM kv WHERE expire > 0 AND expire < ?',
+ [ +new Date() ],
+ function () { return callback(); },
+ function (tx, err) { return callback(err); }
+ );
+ } else {
+ db.transaction(function (tx) {
+ tx.executeSql(
+ 'DELETE FROM kv',
+ [],
+ function () { return callback(); },
+ function (tx, err) { return callback(err); }
+ );
+ });
+ }
+ });
+ };
+ }
+
+
+ WebSql.prototype.exists = function () {
+ return (!!window.openDatabase);
+ };
+
+
+
+ function Idb(namespace) {
+ var db;
+
+ this.init = function (callback) {
+ var idb = this.idb = window.indexedDB; /* || window.webkitIndexedDB ||
+ window.mozIndexedDB || window.msIndexedDB;*/
+
+ var req = idb.open(namespace, 2 /*version*/);
+
+ req.onsuccess = function (e) {
+ db = e.target.result;
+ callback();
+ };
+ req.onblocked = function (e) {
+ callback(new Error('IndexedDB blocked. ' + e.target.errorCode));
+ };
+ req.onerror = function (e) {
+ callback(new Error('IndexedDB opening error. ' + e.target.errorCode));
+ };
+ req.onupgradeneeded = function (e) {
+ db = e.target.result;
+ if (db.objectStoreNames.contains('kv')) {
+ db.deleteObjectStore('kv');
+ }
+ var store = db.createObjectStore('kv', { keyPath: 'key' });
+ store.createIndex('expire', 'expire', { unique: false });
+ };
+ };
+
+
+ this.remove = function (key, callback) {
+ var tx = db.transaction('kv', 'readwrite');
+
+ tx.oncomplete = function () { callback(); };
+ tx.onerror = tx.onabort = function (e) { callback(new Error('Key remove error: ', e.target)); };
+
+ // IE 8 not allow to use reserved keywords as functions. More info:
+ // http://tiffanybbrown.com/2013/09/10/expected-identifier-bug-in-internet-exp…
+ tx.objectStore('kv')['delete'](key).onerror = function () { tx.abort(); };
+ };
+
+
+ this.set = function (key, value, expire, callback) {
+ var tx = db.transaction('kv', 'readwrite');
+
+ tx.oncomplete = function () { callback(); };
+ tx.onerror = tx.onabort = function (e) { callback(new Error('Key set error: ', e.target)); };
+
+ tx.objectStore('kv').put({
+ key: key,
+ value: value,
+ expire: expire
+ }).onerror = function () { tx.abort(); };
+ };
+
+
+ this.get = function (key, callback) {
+ var err, result;
+ var tx = db.transaction('kv');
+
+ tx.oncomplete = function () { callback(err, result); };
+ tx.onerror = tx.onabort = function (e) { callback(new Error('Key get error: ', e.target)); };
+
+ tx.objectStore('kv').get(key).onsuccess = function (e) {
+ if (e.target.result) {
+ result = e.target.result.value;
+ } else {
+ err = new Error('key not found: ' + key);
+ }
+ };
+ };
+
+
+ this.clear = function (expiredOnly, callback) {
+ var keyrange = window.IDBKeyRange; /* ||
+ window.webkitIDBKeyRange || window.msIDBKeyRange;*/
+ var tx, store;
+
+ tx = db.transaction('kv', 'readwrite');
+ store = tx.objectStore('kv');
+
+ tx.oncomplete = function () { callback(); };
+ tx.onerror = tx.onabort = function (e) { callback(new Error('Clear error: ', e.target)); };
+
+ if (expiredOnly) {
+
+ var cursor = store.index('expire').openCursor(keyrange.bound(1, +new Date()));
+
+ cursor.onsuccess = function (e) {
+ var _cursor = e.target.result;
+ if (_cursor) {
+ // IE 8 not allow to use reserved keywords as functions (`delete` and `continue`). More info:
+ // http://tiffanybbrown.com/2013/09/10/expected-identifier-bug-in-internet-exp…
+ store['delete'](_cursor.primaryKey).onerror = function () { tx.abort(); };
+ _cursor['continue']();
+ }
+ };
+
+ } else {
+ // Just clear everything
+ tx.objectStore('kv').clear().onerror = function () { tx.abort(); };
+ }
+ };
+ }
+
+
+ Idb.prototype.exists = function () {
+ var db = window.indexedDB /*||
+ window.webkitIndexedDB ||
+ window.mozIndexedDB ||
+ window.msIndexedDB*/;
+
+ if (!db) {
+ return false;
+ }
+
+ // Check outdated idb implementations, where `onupgradeneede` event doesn't work,
+ // see https://github.com/pouchdb/pouchdb/issues/1207 for more details
+ var dbName = '__idb_test__';
+ var result = db.open(dbName, 1).onupgradeneeded === null;
+
+ if (db.deleteDatabase) {
+ db.deleteDatabase(dbName);
+ }
+
+ return result;
+ };
+
+
+
+ /////////////////////////////////////////////////////////////////////////////
+ // key/value storage with expiration
+
+ var storeAdapters = {
+ indexeddb: Idb,
+ websql: WebSql,
+ localstorage: DomStorage
+ };
+
+
+ // namespace - db name or similar
+ // storesList - array of allowed adapter names to use
+ //
+ function Storage(namespace, storesList) {
+ var self = this;
+
+ var db = null;
+
+ // States of db init singletone process
+ // 'done' / 'progress' / 'failed' / undefined
+ var initState;
+ var initStack = [];
+
+ _each(storesList, function (name) {
+ // do storage names case insensitive
+ name = name.toLowerCase();
+
+ if (!storeAdapters[name]) {
+ throw new Error('Wrong storage adapter name: ' + name, storesList);
+ }
+
+ if (storeAdapters[name].prototype.exists() && !db) {
+ db = new storeAdapters[name](namespace);
+ return false; // terminate search on first success
+ }
+ });
+
+ if (!db) {
+ /* eslint-disable no-console */
+ // If no adaprets - don't make error for correct fallback.
+ // Just log that we continue work without storing results.
+ if (typeof console !== 'undefined' && console.log) {
+ console.log('None of requested storages available: ' + storesList);
+ }
+ /* eslint-enable no-console */
+ }
+
+
+ this.init = function (callback) {
+ if (!db) {
+ callback(new Error('No available db'));
+ return;
+ }
+
+ if (initState === 'done') {
+ callback();
+ return;
+ }
+
+ if (initState === 'progress') {
+ initStack.push(callback);
+ return;
+ }
+
+ initStack.push(callback);
+ initState = 'progress';
+
+ db.init(function (err) {
+ initState = !err ? 'done' : 'failed';
+ _each(initStack, function (cb) {
+ cb(err);
+ });
+ initStack = [];
+
+ // Clear expired. A bit dirty without callback,
+ // but we don't care until clear compleete
+ if (!err) { self.clear(true); }
+ });
+ };
+
+
+ this.set = function (key, value, expire, callback) {
+ if (_isFunction(expire)) {
+ callback = expire;
+ expire = null;
+ }
+ callback = callback || _nope;
+ expire = expire ? +(new Date()) + (expire * 1000) : 0;
+
+ this.init(function (err) {
+ if (err) { return callback(err); }
+ db.set(key, value, expire, callback);
+ });
+ };
+
+
+ this.get = function (key, callback) {
+ this.init(function (err) {
+ if (err) { return callback(err); }
+ db.get(key, callback);
+ });
+ };
+
+
+ this.remove = function (key, callback) {
+ callback = callback || _nope;
+ this.init(function (err) {
+ if (err) { return callback(err); }
+ db.remove(key, callback);
+ });
+ };
+
+
+ this.clear = function (expiredOnly, callback) {
+ if (_isFunction(expiredOnly)) {
+ callback = expiredOnly;
+ expiredOnly = false;
+ }
+ callback = callback || _nope;
+
+ this.init(function (err) {
+ if (err) { return callback(err); }
+ db.clear(expiredOnly, callback);
+ });
+ };
+ }
+
+
+ //////////////////////////////////////////////////////////////////////////////
+ // Bag class implementation
+
+ function Bag(options) {
+ if (!(this instanceof Bag)) { return new Bag(options); }
+
+ var self = this;
+
+ options = options || {};
+
+ this.prefix = options.prefix || 'bag';
+ this.timeout = options.timeout || 20; // 20 seconds
+ this.expire = options.expire || 30 * 24; // 30 days
+ this.isValidItem = options.isValidItem || null;
+
+ this.stores = _isArray(options.stores) ? options.stores : [ 'indexeddb', 'websql', 'localstorage' ];
+
+ var storage = null;
+
+ this._queue = [];
+ this._chained = false;
+
+ this._createStorage = function () {
+ if (!storage) { storage = new Storage(self.prefix, self.stores); }
+ };
+
+ function getUrl(url, callback) {
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', url);
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState === 4) {
+ if (xhr.status === 200) {
+ callback(null, {
+ content: xhr.responseText,
+ type: xhr.getResponseHeader('content-type')
+ });
+ callback = _nope;
+ } else {
+ callback(new Error('Can\'t open url ' + url +
+ (xhr.status ? xhr.statusText + ' (' + xhr.status + ')' : '')));
+ callback = _nope;
+ }
+ }
+ };
+
+ setTimeout(function () {
+ if (xhr.readyState < 4) {
+ xhr.abort();
+ callback(new Error('Timeout'));
+ callback = _nope;
+ }
+ }, self.timeout * 1000);
+
+ xhr.send();
+ }
+
+ function createCacheObj(obj, response) {
+ var cacheObj = {};
+
+ _each([ 'url', 'key', 'unique' ], function (key) {
+ if (obj[key]) { cacheObj[key] = obj[key]; }
+ });
+
+ var now = +new Date();
+ cacheObj.data = response.content;
+ cacheObj.originalType = response.type;
+ cacheObj.type = obj.type || response.type;
+ cacheObj.stamp = now;
+
+ return cacheObj;
+ }
+
+ function saveUrl(obj, callback) {
+ getUrl(obj.url_real, function (err, result) {
+ if (err) { return callback(err); }
+
+ var delay = (obj.expire || self.expire) * 60 * 60; // in seconds
+
+ var cached = createCacheObj(obj, result);
+
+ self.set(obj.key, cached, delay, function () {
+ // Don't check error - have to return data anyway
+ _default(obj, cached);
+ callback(null, obj);
+ });
+ });
+ }
+
+
+ function isCacheValid(cached, obj) {
+ return !cached ||
+ cached.expire - +new Date() < 0 ||
+ obj.unique !== cached.unique ||
+ obj.url !== cached.url ||
+ (self.isValidItem && !self.isValidItem(cached, obj));
+ }
+
+
+ function fetch(obj, callback) {
+
+ if (!obj.url) { return callback(); }
+ obj.key = (obj.key || obj.url);
+
+ self.get(obj.key, function (err_cache, cached) {
+
+ // Check error only on forced fetch from cache
+ if (err_cache && obj.cached) {
+ callback(err_cache);
+ return;
+ }
+
+ // if can't get object from store, then just load it from web.
+ obj.execute = (obj.execute !== false);
+ var shouldFetch = !!err_cache || isCacheValid(cached, obj);
+
+ // If don't have to load new date - return one from cache
+ if (!obj.live && !shouldFetch) {
+ obj.type = obj.type || cached.originalType;
+ _default(obj, cached);
+ callback(null, obj);
+ return;
+ }
+
+ // calculate loading url
+ obj.url_real = obj.url;
+ if (obj.unique) {
+ // set parameter to prevent browser cache
+ obj.url_real = obj.url + ((obj.url.indexOf('?') > 0) ? '&' : '?') + 'bag-unique=' + obj.unique;
+ }
+
+ saveUrl(obj, function (err_load) {
+ if (err_cache && err_load) {
+ callback(err_load);
+ return;
+ }
+
+ if (err_load) {
+ obj.type = obj.type || cached.originalType;
+ _default(obj, cached);
+ callback(null, obj);
+ return;
+ }
+
+ callback(null, obj);
+ });
+ });
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ // helpers to set absolute sourcemap url
+
+ /* eslint-disable max-len */
+ var sourceMappingRe = /(?:^([ \t]*\/\/[@|#][ \t]+sourceMappingURL=)(.+?)([ \t]*)$)|(?:^([ \t]*\/\*[@#][ \t]+sourceMappingURL=)(.+?)([ \t]*\*\/[ \t])*$)/mg;
+ /* eslint-enable max-len */
+
+ function parse_url(url) {
+ var pattern = new RegExp('^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?');
+ var matches = url.match(pattern);
+ return {
+ scheme: matches[2],
+ authority: matches[4],
+ path: matches[5],
+ query: matches[7],
+ fragment: matches[9]
+ };
+ }
+
+ function patchMappingUrl(obj) {
+ var refUrl = parse_url(obj.url);
+ var done = false;
+ var res = obj.data.replace(sourceMappingRe, function (match, p1, p2, p3, p4, p5, p6) {
+ if (!match) { return null; }
+ done = true;
+ // select matched group of params
+ if (!p1) { p1 = p4; p2 = p5; p3 = p6; }
+ var mapUrl = parse_url(p2);
+
+ var scheme = (mapUrl.scheme ? mapUrl.scheme : refUrl.scheme) || window.location.protocol.slice(0, -1);
+ var authority = (mapUrl.authority ? mapUrl.authority : refUrl.authority) || window.location.host;
+ /* eslint-disable max-len */
+ var path = mapUrl.path[0] === '/' ? mapUrl.path : refUrl.path.split('/').slice(0, -1).join('/') + '/' + mapUrl.path;
+ /* eslint-enable max-len */
+ return p1 + (scheme + '://' + authority + path) + p3;
+ });
+ return done ? res : '';
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ var handlers = {
+ 'application/javascript': function injectScript(obj) {
+ var script = document.createElement('script'), txt;
+
+ // try to change sourcemap address to absolute
+ txt = patchMappingUrl(obj);
+ if (!txt) {
+ // or add script name for dev tools
+ txt = obj.data + '\n//# sourceURL=' + obj.url;
+ }
+
+ // Have to use .text, since we support IE8,
+ // which won't allow appending to a script
+ script.text = txt;
+ head.appendChild(script);
+ return;
+ },
+
+ 'text/css': function injectStyle(obj) {
+ var style = document.createElement('style'), txt;
+
+ // try to change sourcemap address to absolute
+ txt = patchMappingUrl(obj);
+ if (!txt) {
+ // or add stylesheet script name for dev tools
+ txt = obj.data + '\n/*# sourceURL=' + obj.url + ' */';
+ }
+
+ // Needed to enable `style.styleSheet` in IE
+ style.setAttribute('type', 'text/css');
+
+ if (style.styleSheet) {
+ // We should append style element to DOM before assign css text to
+ // workaround IE bugs with `@import` and `@font-face`.
+ // https://github.com/andrewwakeling/ie-css-bugs
+ head.appendChild(style);
+
+ style.styleSheet.cssText = txt; // IE method
+ } else {
+ style.appendChild(document.createTextNode(txt)); // others
+ head.appendChild(style);
+ }
+
+ return;
+ }
+ };
+
+
+ function execute(obj) {
+ if (!obj.type) { return; }
+
+ // Cut off encoding if exists:
+ // application/javascript; charset=UTF-8
+ var handlerName = obj.type.split(';')[0];
+
+ // Fix outdated mime types if needed, to use single handler
+ if (handlerName === 'application/x-javascript' || handlerName === 'text/javascript') {
+ handlerName = 'application/javascript';
+ }
+
+ if (handlers[handlerName]) {
+ handlers[handlerName](obj);
+ }
+ return;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+
+ //
+ // Public methods
+ //
+
+ this.require = function (resources, callback) {
+ var queue = self._queue;
+
+ if (_isFunction(resources)) {
+ callback = resources;
+ resources = null;
+ }
+
+ if (resources) {
+ var res = _isArray(resources) ? resources : [ resources ];
+
+ // convert string urls to structures
+ // and push to queue
+ _each(res, function (r, i) {
+ if (_isString(r)) { res[i] = { url: r }; }
+ queue.push(res[i]);
+ });
+ }
+
+ self._createStorage();
+
+ if (!callback) {
+ self._chained = true;
+ return self;
+ }
+
+ _asyncEach(queue, fetch, function (err) {
+ if (err) {
+ // cleanup
+ self._chained = false;
+ self._queue = [];
+
+ callback(err);
+ return;
+ }
+
+ _each(queue, function (obj) {
+ if (obj.execute) {
+ execute(obj);
+ }
+ });
+
+ // return content only, if one need fuul info -
+ // check input object, that will be extended.
+ var replies = [];
+ _each(queue, function (r) { replies.push(r.data); });
+
+ var result = (_isArray(resources) || self._chained) ? replies : replies[0];
+
+ // cleanup
+ self._chained = false;
+ self._queue = [];
+
+ callback(null, result);
+ });
+ };
+
+
+ // Create proxy methods (init store then subcall)
+ _each([ 'remove', 'get', 'set', 'clear' ], function (method) {
+ self[method] = function () {
+ self._createStorage();
+ storage[method].apply(storage, arguments);
+ };
+ });
+
+
+ this.addHandler = function (types, handler) {
+ types = _isArray(types) ? types : [ types ];
+ _each(types, function (type) { handlers[type] = handler; });
+ };
+
+
+ this.removeHandler = function (types) {
+ self.addHandler(types/*, undefined*/);
+ };
+ }
+
+ return Bag;
+
+}));
diff --git a/ui/new-ui-samples/js/vendor/bootstrap.js b/ui/new-ui-samples/js/vendor/bootstrap.js
new file mode 100644
index 0000000..c99fc77
--- /dev/null
+++ b/ui/new-ui-samples/js/vendor/bootstrap.js
@@ -0,0 +1,2345 @@
+/* ========================================================================
+ * Bootstrap: affix.js v3.3.5
+ * http://getbootstrap.com/javascript/#affix
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // AFFIX CLASS DEFINITION
+ // ======================
+
+ var Affix = function (element, options) {
+ this.options = $.extend({}, Affix.DEFAULTS, options)
+
+ this.$target = $(this.options.target)
+ .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
+ .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
+
+ this.$element = $(element)
+ this.affixed = null
+ this.unpin = null
+ this.pinnedOffset = null
+
+ this.checkPosition()
+ }
+
+ Affix.VERSION = '3.3.5'
+
+ Affix.RESET = 'affix affix-top affix-bottom'
+
+ Affix.DEFAULTS = {
+ offset: 0,
+ target: window
+ }
+
+ Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ var targetHeight = this.$target.height()
+
+ if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
+
+ if (this.affixed == 'bottom') {
+ if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
+ return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
+ }
+
+ var initializing = this.affixed == null
+ var colliderTop = initializing ? scrollTop : position.top
+ var colliderHeight = initializing ? targetHeight : height
+
+ if (offsetTop != null && scrollTop <= offsetTop) return 'top'
+ if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
+
+ return false
+ }
+
+ Affix.prototype.getPinnedOffset = function () {
+ if (this.pinnedOffset) return this.pinnedOffset
+ this.$element.removeClass(Affix.RESET).addClass('affix')
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ return (this.pinnedOffset = position.top - scrollTop)
+ }
+
+ Affix.prototype.checkPositionWithEventLoop = function () {
+ setTimeout($.proxy(this.checkPosition, this), 1)
+ }
+
+ Affix.prototype.checkPosition = function () {
+ if (!this.$element.is(':visible')) return
+
+ var height = this.$element.height()
+ var offset = this.options.offset
+ var offsetTop = offset.top
+ var offsetBottom = offset.bottom
+ var scrollHeight = Math.max($(document).height(), $(document.body).height())
+
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
+ if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
+
+ var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
+
+ if (this.affixed != affix) {
+ if (this.unpin != null) this.$element.css('top', '')
+
+ var affixType = 'affix' + (affix ? '-' + affix : '')
+ var e = $.Event(affixType + '.bs.affix')
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ this.affixed = affix
+ this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
+
+ this.$element
+ .removeClass(Affix.RESET)
+ .addClass(affixType)
+ .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
+ }
+
+ if (affix == 'bottom') {
+ this.$element.offset({
+ top: scrollHeight - height - offsetBottom
+ })
+ }
+ }
+
+
+ // AFFIX PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.affix')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.affix
+
+ $.fn.affix = Plugin
+ $.fn.affix.Constructor = Affix
+
+
+ // AFFIX NO CONFLICT
+ // =================
+
+ $.fn.affix.noConflict = function () {
+ $.fn.affix = old
+ return this
+ }
+
+
+ // AFFIX DATA-API
+ // ==============
+
+ $(window).on('load', function () {
+ $('[data-spy="affix"]').each(function () {
+ var $spy = $(this)
+ var data = $spy.data()
+
+ data.offset = data.offset || {}
+
+ if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
+ if (data.offsetTop != null) data.offset.top = data.offsetTop
+
+ Plugin.call($spy, data)
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: alert.js v3.3.5
+ * http://getbootstrap.com/javascript/#alerts
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // ALERT CLASS DEFINITION
+ // ======================
+
+ var dismiss = '[data-dismiss="alert"]'
+ var Alert = function (el) {
+ $(el).on('click', dismiss, this.close)
+ }
+
+ Alert.VERSION = '3.3.5'
+
+ Alert.TRANSITION_DURATION = 150
+
+ Alert.prototype.close = function (e) {
+ var $this = $(this)
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = $(selector)
+
+ if (e) e.preventDefault()
+
+ if (!$parent.length) {
+ $parent = $this.closest('.alert')
+ }
+
+ $parent.trigger(e = $.Event('close.bs.alert'))
+
+ if (e.isDefaultPrevented()) return
+
+ $parent.removeClass('in')
+
+ function removeElement() {
+ // detach from parent, fire event then clean up data
+ $parent.detach().trigger('closed.bs.alert').remove()
+ }
+
+ $.support.transition && $parent.hasClass('fade') ?
+ $parent
+ .one('bsTransitionEnd', removeElement)
+ .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
+ removeElement()
+ }
+
+
+ // ALERT PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.alert')
+
+ if (!data) $this.data('bs.alert', (data = new Alert(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ var old = $.fn.alert
+
+ $.fn.alert = Plugin
+ $.fn.alert.Constructor = Alert
+
+
+ // ALERT NO CONFLICT
+ // =================
+
+ $.fn.alert.noConflict = function () {
+ $.fn.alert = old
+ return this
+ }
+
+
+ // ALERT DATA-API
+ // ==============
+
+ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: dropdown.js v3.3.5
+ * http://getbootstrap.com/javascript/#dropdowns
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // DROPDOWN CLASS DEFINITION
+ // =========================
+
+ var backdrop = '.dropdown-backdrop'
+ var toggle = '[data-toggle="dropdown"]'
+ var Dropdown = function (element) {
+ $(element).on('click.bs.dropdown', this.toggle)
+ }
+
+ Dropdown.VERSION = '3.3.5'
+
+ function getParent($this) {
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = selector && $(selector)
+
+ return $parent && $parent.length ? $parent : $this.parent()
+ }
+
+ function clearMenus(e) {
+ if (e && e.which === 3) return
+ $(backdrop).remove()
+ $(toggle).each(function () {
+ var $this = $(this)
+ var $parent = getParent($this)
+ var relatedTarget = { relatedTarget: this }
+
+ if (!$parent.hasClass('open')) return
+
+ if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
+
+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $this.attr('aria-expanded', 'false')
+ $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
+ })
+ }
+
+ Dropdown.prototype.toggle = function (e) {
+ var $this = $(this)
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ clearMenus()
+
+ if (!isActive) {
+ if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
+ // if mobile we use a backdrop because click events don't delegate
+ $(document.createElement('div'))
+ .addClass('dropdown-backdrop')
+ .insertAfter($(this))
+ .on('click', clearMenus)
+ }
+
+ var relatedTarget = { relatedTarget: this }
+ $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $this
+ .trigger('focus')
+ .attr('aria-expanded', 'true')
+
+ $parent
+ .toggleClass('open')
+ .trigger('shown.bs.dropdown', relatedTarget)
+ }
+
+ return false
+ }
+
+ Dropdown.prototype.keydown = function (e) {
+ if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
+
+ var $this = $(this)
+
+ e.preventDefault()
+ e.stopPropagation()
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ if (!isActive && e.which != 27 || isActive && e.which == 27) {
+ if (e.which == 27) $parent.find(toggle).trigger('focus')
+ return $this.trigger('click')
+ }
+
+ var desc = ' li:not(.disabled):visible a'
+ var $items = $parent.find('.dropdown-menu' + desc)
+
+ if (!$items.length) return
+
+ var index = $items.index(e.target)
+
+ if (e.which == 38 && index > 0) index-- // up
+ if (e.which == 40 && index < $items.length - 1) index++ // down
+ if (!~index) index = 0
+
+ $items.eq(index).trigger('focus')
+ }
+
+
+ // DROPDOWN PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.dropdown')
+
+ if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ var old = $.fn.dropdown
+
+ $.fn.dropdown = Plugin
+ $.fn.dropdown.Constructor = Dropdown
+
+
+ // DROPDOWN NO CONFLICT
+ // ====================
+
+ $.fn.dropdown.noConflict = function () {
+ $.fn.dropdown = old
+ return this
+ }
+
+
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
+ // ===================================
+
+ $(document)
+ .on('click.bs.dropdown.data-api', clearMenus)
+ .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
+ .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+ .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
+ .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tooltip.js v3.3.5
+ * http://getbootstrap.com/javascript/#tooltip
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TOOLTIP PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Tooltip = function (element, options) {
+ this.type = null
+ this.options = null
+ this.enabled = null
+ this.timeout = null
+ this.hoverState = null
+ this.$element = null
+ this.inState = null
+
+ this.init('tooltip', element, options)
+ }
+
+ Tooltip.VERSION = '3.3.5'
+
+ Tooltip.TRANSITION_DURATION = 150
+
+ Tooltip.DEFAULTS = {
+ animation: true,
+ placement: 'top',
+ selector: false,
+ template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
+ trigger: 'hover focus',
+ title: '',
+ delay: 0,
+ html: false,
+ container: false,
+ viewport: {
+ selector: 'body',
+ padding: 0
+ }
+ }
+
+ Tooltip.prototype.init = function (type, element, options) {
+ this.enabled = true
+ this.type = type
+ this.$element = $(element)
+ this.options = this.getOptions(options)
+ this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
+ this.inState = { click: false, hover: false, focus: false }
+
+ if (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!')
+ }
+
+ var triggers = this.options.trigger.split(' ')
+
+ for (var i = triggers.length; i--;) {
+ var trigger = triggers[i]
+
+ if (trigger == 'click') {
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
+ } else if (trigger != 'manual') {
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
+
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
+ }
+ }
+
+ this.options.selector ?
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
+ this.fixTitle()
+ }
+
+ Tooltip.prototype.getDefaults = function () {
+ return Tooltip.DEFAULTS
+ }
+
+ Tooltip.prototype.getOptions = function (options) {
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
+
+ if (options.delay && typeof options.delay == 'number') {
+ options.delay = {
+ show: options.delay,
+ hide: options.delay
+ }
+ }
+
+ return options
+ }
+
+ Tooltip.prototype.getDelegateOptions = function () {
+ var options = {}
+ var defaults = this.getDefaults()
+
+ this._options && $.each(this._options, function (key, value) {
+ if (defaults[key] != value) options[key] = value
+ })
+
+ return options
+ }
+
+ Tooltip.prototype.enter = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
+
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
+ }
+
+ if (self.tip().hasClass('in') || self.hoverState == 'in') {
+ self.hoverState = 'in'
+ return
+ }
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'in'
+
+ if (!self.options.delay || !self.options.delay.show) return self.show()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'in') self.show()
+ }, self.options.delay.show)
+ }
+
+ Tooltip.prototype.isInStateTrue = function () {
+ for (var key in this.inState) {
+ if (this.inState[key]) return true
+ }
+
+ return false
+ }
+
+ Tooltip.prototype.leave = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
+
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
+ }
+
+ if (self.isInStateTrue()) return
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'out'
+
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'out') self.hide()
+ }, self.options.delay.hide)
+ }
+
+ Tooltip.prototype.show = function () {
+ var e = $.Event('show.bs.' + this.type)
+
+ if (this.hasContent() && this.enabled) {
+ this.$element.trigger(e)
+
+ var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
+ if (e.isDefaultPrevented() || !inDom) return
+ var that = this
+
+ var $tip = this.tip()
+
+ var tipId = this.getUID(this.type)
+
+ this.setContent()
+ $tip.attr('id', tipId)
+ this.$element.attr('aria-describedby', tipId)
+
+ if (this.options.animation) $tip.addClass('fade')
+
+ var placement = typeof this.options.placement == 'function' ?
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
+ this.options.placement
+
+ var autoToken = /\s?auto?\s?/i
+ var autoPlace = autoToken.test(placement)
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
+
+ $tip
+ .detach()
+ .css({ top: 0, left: 0, display: 'block' })
+ .addClass(placement)
+ .data('bs.' + this.type, this)
+
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
+ this.$element.trigger('inserted.bs.' + this.type)
+
+ var pos = this.getPosition()
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (autoPlace) {
+ var orgPlacement = placement
+ var viewportDim = this.getPosition(this.$viewport)
+
+ placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
+ placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
+ placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
+ placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
+ placement
+
+ $tip
+ .removeClass(orgPlacement)
+ .addClass(placement)
+ }
+
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
+
+ this.applyPlacement(calculatedOffset, placement)
+
+ var complete = function () {
+ var prevHoverState = that.hoverState
+ that.$element.trigger('shown.bs.' + that.type)
+ that.hoverState = null
+
+ if (prevHoverState == 'out') that.leave(that)
+ }
+
+ $.support.transition && this.$tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
+ }
+ }
+
+ Tooltip.prototype.applyPlacement = function (offset, placement) {
+ var $tip = this.tip()
+ var width = $tip[0].offsetWidth
+ var height = $tip[0].offsetHeight
+
+ // manually read margins because getBoundingClientRect includes difference
+ var marginTop = parseInt($tip.css('margin-top'), 10)
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
+
+ // we must check for NaN for ie 8/9
+ if (isNaN(marginTop)) marginTop = 0
+ if (isNaN(marginLeft)) marginLeft = 0
+
+ offset.top += marginTop
+ offset.left += marginLeft
+
+ // $.fn.offset doesn't round pixel values
+ // so we use setOffset directly with our own function B-0
+ $.offset.setOffset($tip[0], $.extend({
+ using: function (props) {
+ $tip.css({
+ top: Math.round(props.top),
+ left: Math.round(props.left)
+ })
+ }
+ }, offset), 0)
+
+ $tip.addClass('in')
+
+ // check to see if placing tip in new offset caused the tip to resize itself
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (placement == 'top' && actualHeight != height) {
+ offset.top = offset.top + height - actualHeight
+ }
+
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
+
+ if (delta.left) offset.left += delta.left
+ else offset.top += delta.top
+
+ var isVertical = /top|bottom/.test(placement)
+ var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
+ var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
+
+ $tip.offset(offset)
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
+ }
+
+ Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
+ this.arrow()
+ .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
+ .css(isVertical ? 'top' : 'left', '')
+ }
+
+ Tooltip.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
+ $tip.removeClass('fade in top bottom left right')
+ }
+
+ Tooltip.prototype.hide = function (callback) {
+ var that = this
+ var $tip = $(this.$tip)
+ var e = $.Event('hide.bs.' + this.type)
+
+ function complete() {
+ if (that.hoverState != 'in') $tip.detach()
+ that.$element
+ .removeAttr('aria-describedby')
+ .trigger('hidden.bs.' + that.type)
+ callback && callback()
+ }
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ $tip.removeClass('in')
+
+ $.support.transition && $tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
+
+ this.hoverState = null
+
+ return this
+ }
+
+ Tooltip.prototype.fixTitle = function () {
+ var $e = this.$element
+ if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
+ }
+ }
+
+ Tooltip.prototype.hasContent = function () {
+ return this.getTitle()
+ }
+
+ Tooltip.prototype.getPosition = function ($element) {
+ $element = $element || this.$element
+
+ var el = $element[0]
+ var isBody = el.tagName == 'BODY'
+
+ var elRect = el.getBoundingClientRect()
+ if (elRect.width == null) {
+ // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
+ elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
+ }
+ var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
+ var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
+ var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
+
+ return $.extend({}, elRect, scroll, outerDims, elOffset)
+ }
+
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
+
+ }
+
+ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
+ var delta = { top: 0, left: 0 }
+ if (!this.$viewport) return delta
+
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
+ var viewportDimensions = this.getPosition(this.$viewport)
+
+ if (/right|left/.test(placement)) {
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
+ delta.top = viewportDimensions.top - topEdgeOffset
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
+ }
+ } else {
+ var leftEdgeOffset = pos.left - viewportPadding
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
+ delta.left = viewportDimensions.left - leftEdgeOffset
+ } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
+ }
+ }
+
+ return delta
+ }
+
+ Tooltip.prototype.getTitle = function () {
+ var title
+ var $e = this.$element
+ var o = this.options
+
+ title = $e.attr('data-original-title')
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
+
+ return title
+ }
+
+ Tooltip.prototype.getUID = function (prefix) {
+ do prefix += ~~(Math.random() * 1000000)
+ while (document.getElementById(prefix))
+ return prefix
+ }
+
+ Tooltip.prototype.tip = function () {
+ if (!this.$tip) {
+ this.$tip = $(this.options.template)
+ if (this.$tip.length != 1) {
+ throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
+ }
+ }
+ return this.$tip
+ }
+
+ Tooltip.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
+ }
+
+ Tooltip.prototype.enable = function () {
+ this.enabled = true
+ }
+
+ Tooltip.prototype.disable = function () {
+ this.enabled = false
+ }
+
+ Tooltip.prototype.toggleEnabled = function () {
+ this.enabled = !this.enabled
+ }
+
+ Tooltip.prototype.toggle = function (e) {
+ var self = this
+ if (e) {
+ self = $(e.currentTarget).data('bs.' + this.type)
+ if (!self) {
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
+ $(e.currentTarget).data('bs.' + this.type, self)
+ }
+ }
+
+ if (e) {
+ self.inState.click = !self.inState.click
+ if (self.isInStateTrue()) self.enter(self)
+ else self.leave(self)
+ } else {
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
+ }
+ }
+
+ Tooltip.prototype.destroy = function () {
+ var that = this
+ clearTimeout(this.timeout)
+ this.hide(function () {
+ that.$element.off('.' + that.type).removeData('bs.' + that.type)
+ if (that.$tip) {
+ that.$tip.detach()
+ }
+ that.$tip = null
+ that.$arrow = null
+ that.$viewport = null
+ })
+ }
+
+
+ // TOOLTIP PLUGIN DEFINITION
+ // =========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tooltip')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.tooltip
+
+ $.fn.tooltip = Plugin
+ $.fn.tooltip.Constructor = Tooltip
+
+
+ // TOOLTIP NO CONFLICT
+ // ===================
+
+ $.fn.tooltip.noConflict = function () {
+ $.fn.tooltip = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: modal.js v3.3.5
+ * http://getbootstrap.com/javascript/#modals
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // MODAL CLASS DEFINITION
+ // ======================
+
+ var Modal = function (element, options) {
+ this.options = options
+ this.$body = $(document.body)
+ this.$element = $(element)
+ this.$dialog = this.$element.find('.modal-dialog')
+ this.$backdrop = null
+ this.isShown = null
+ this.originalBodyPad = null
+ this.scrollbarWidth = 0
+ this.ignoreBackdropClick = false
+
+ if (this.options.remote) {
+ this.$element
+ .find('.modal-content')
+ .load(this.options.remote, $.proxy(function () {
+ this.$element.trigger('loaded.bs.modal')
+ }, this))
+ }
+ }
+
+ Modal.VERSION = '3.3.5'
+
+ Modal.TRANSITION_DURATION = 300
+ Modal.BACKDROP_TRANSITION_DURATION = 150
+
+ Modal.DEFAULTS = {
+ backdrop: true,
+ keyboard: true,
+ show: true
+ }
+
+ Modal.prototype.toggle = function (_relatedTarget) {
+ return this.isShown ? this.hide() : this.show(_relatedTarget)
+ }
+
+ Modal.prototype.show = function (_relatedTarget) {
+ var that = this
+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
+
+ this.$element.trigger(e)
+
+ if (this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = true
+
+ this.checkScrollbar()
+ this.setScrollbar()
+ this.$body.addClass('modal-open')
+
+ this.escape()
+ this.resize()
+
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
+
+ this.$dialog.on('mousedown.dismiss.bs.modal', function () {
+ that.$element.one('mouseup.dismiss.bs.modal', function (e) {
+ if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
+ })
+ })
+
+ this.backdrop(function () {
+ var transition = $.support.transition && that.$element.hasClass('fade')
+
+ if (!that.$element.parent().length) {
+ that.$element.appendTo(that.$body) // don't move modals dom position
+ }
+
+ that.$element
+ .show()
+ .scrollTop(0)
+
+ that.adjustDialog()
+
+ if (transition) {
+ that.$element[0].offsetWidth // force reflow
+ }
+
+ that.$element.addClass('in')
+
+ that.enforceFocus()
+
+ var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
+
+ transition ?
+ that.$dialog // wait for modal to slide in
+ .one('bsTransitionEnd', function () {
+ that.$element.trigger('focus').trigger(e)
+ })
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ that.$element.trigger('focus').trigger(e)
+ })
+ }
+
+ Modal.prototype.hide = function (e) {
+ if (e) e.preventDefault()
+
+ e = $.Event('hide.bs.modal')
+
+ this.$element.trigger(e)
+
+ if (!this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = false
+
+ this.escape()
+ this.resize()
+
+ $(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')
+
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$element
+ .one('bsTransitionEnd', $.proxy(this.hideModal, this))
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ this.hideModal()
+ }
+
+ Modal.prototype.enforceFocus = function () {
+ $(document)
+ .off('focusin.bs.modal') // guard against infinite focus loop
+ .on('focusin.bs.modal', $.proxy(function (e) {
+ if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
+ this.$element.trigger('focus')
+ }
+ }, this))
+ }
+
+ Modal.prototype.escape = function () {
+ if (this.isShown && this.options.keyboard) {
+ this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
+ e.which == 27 && this.hide()
+ }, this))
+ } else if (!this.isShown) {
+ this.$element.off('keydown.dismiss.bs.modal')
+ }
+ }
+
+ Modal.prototype.resize = function () {
+ if (this.isShown) {
+ $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
+ } else {
+ $(window).off('resize.bs.modal')
+ }
+ }
+
+ Modal.prototype.hideModal = function () {
+ var that = this
+ this.$element.hide()
+ this.backdrop(function () {
+ that.$body.removeClass('modal-open')
+ that.resetAdjustments()
+ that.resetScrollbar()
+ that.$element.trigger('hidden.bs.modal')
+ })
+ }
+
+ Modal.prototype.removeBackdrop = function () {
+ this.$backdrop && this.$backdrop.remove()
+ this.$backdrop = null
+ }
+
+ Modal.prototype.backdrop = function (callback) {
+ var that = this
+ var animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+ if (this.isShown && this.options.backdrop) {
+ var doAnimate = $.support.transition && animate
+
+ this.$backdrop = $(document.createElement('div'))
+ .addClass('modal-backdrop ' + animate)
+ .appendTo(this.$body)
+
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
+ if (this.ignoreBackdropClick) {
+ this.ignoreBackdropClick = false
+ return
+ }
+ if (e.target !== e.currentTarget) return
+ this.options.backdrop == 'static'
+ ? this.$element[0].focus()
+ : this.hide()
+ }, this))
+
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+ this.$backdrop.addClass('in')
+
+ if (!callback) return
+
+ doAnimate ?
+ this.$backdrop
+ .one('bsTransitionEnd', callback)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callback()
+
+ } else if (!this.isShown && this.$backdrop) {
+ this.$backdrop.removeClass('in')
+
+ var callbackRemove = function () {
+ that.removeBackdrop()
+ callback && callback()
+ }
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$backdrop
+ .one('bsTransitionEnd', callbackRemove)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callbackRemove()
+
+ } else if (callback) {
+ callback()
+ }
+ }
+
+ // these following methods are used to handle overflowing modals
+
+ Modal.prototype.handleUpdate = function () {
+ this.adjustDialog()
+ }
+
+ Modal.prototype.adjustDialog = function () {
+ var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
+
+ this.$element.css({
+ paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
+ paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
+ })
+ }
+
+ Modal.prototype.resetAdjustments = function () {
+ this.$element.css({
+ paddingLeft: '',
+ paddingRight: ''
+ })
+ }
+
+ Modal.prototype.checkScrollbar = function () {
+ var fullWindowWidth = window.innerWidth
+ if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
+ var documentElementRect = document.documentElement.getBoundingClientRect()
+ fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
+ }
+ this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
+ this.scrollbarWidth = this.measureScrollbar()
+ }
+
+ Modal.prototype.setScrollbar = function () {
+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
+ this.originalBodyPad = document.body.style.paddingRight || ''
+ if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
+ }
+
+ Modal.prototype.resetScrollbar = function () {
+ this.$body.css('padding-right', this.originalBodyPad)
+ }
+
+ Modal.prototype.measureScrollbar = function () { // thx walsh
+ var scrollDiv = document.createElement('div')
+ scrollDiv.className = 'modal-scrollbar-measure'
+ this.$body.append(scrollDiv)
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
+ this.$body[0].removeChild(scrollDiv)
+ return scrollbarWidth
+ }
+
+
+ // MODAL PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option, _relatedTarget) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.modal')
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
+ if (typeof option == 'string') data[option](_relatedTarget)
+ else if (options.show) data.show(_relatedTarget)
+ })
+ }
+
+ var old = $.fn.modal
+
+ $.fn.modal = Plugin
+ $.fn.modal.Constructor = Modal
+
+
+ // MODAL NO CONFLICT
+ // =================
+
+ $.fn.modal.noConflict = function () {
+ $.fn.modal = old
+ return this
+ }
+
+
+ // MODAL DATA-API
+ // ==============
+
+ $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
+ var $this = $(this)
+ var href = $this.attr('href')
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
+
+ if ($this.is('a')) e.preventDefault()
+
+ $target.one('show.bs.modal', function (showEvent) {
+ if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
+ $target.one('hidden.bs.modal', function () {
+ $this.is(':visible') && $this.trigger('focus')
+ })
+ })
+ Plugin.call($target, option, this)
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: transition.js v3.3.5
+ * http://getbootstrap.com/javascript/#transitions
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+ // ============================================================
+
+ function transitionEnd() {
+ var el = document.createElement('bootstrap')
+
+ var transEndEventNames = {
+ WebkitTransition : 'webkitTransitionEnd',
+ MozTransition : 'transitionend',
+ OTransition : 'oTransitionEnd otransitionend',
+ transition : 'transitionend'
+ }
+
+ for (var name in transEndEventNames) {
+ if (el.style[name] !== undefined) {
+ return { end: transEndEventNames[name] }
+ }
+ }
+
+ return false // explicit for ie8 ( ._.)
+ }
+
+ // http://blog.alexmaccaw.com/css-transitions
+ $.fn.emulateTransitionEnd = function (duration) {
+ var called = false
+ var $el = this
+ $(this).one('bsTransitionEnd', function () { called = true })
+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
+ setTimeout(callback, duration)
+ return this
+ }
+
+ $(function () {
+ $.support.transition = transitionEnd()
+
+ if (!$.support.transition) return
+
+ $.event.special.bsTransitionEnd = {
+ bindType: $.support.transition.end,
+ delegateType: $.support.transition.end,
+ handle: function (e) {
+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
+ }
+ }
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: button.js v3.3.5
+ * http://getbootstrap.com/javascript/#buttons
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // BUTTON PUBLIC CLASS DEFINITION
+ // ==============================
+
+ var Button = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Button.DEFAULTS, options)
+ this.isLoading = false
+ }
+
+ Button.VERSION = '3.3.5'
+
+ Button.DEFAULTS = {
+ loadingText: 'loading...'
+ }
+
+ Button.prototype.setState = function (state) {
+ var d = 'disabled'
+ var $el = this.$element
+ var val = $el.is('input') ? 'val' : 'html'
+ var data = $el.data()
+
+ state += 'Text'
+
+ if (data.resetText == null) $el.data('resetText', $el[val]())
+
+ // push to event loop to allow forms to submit
+ setTimeout($.proxy(function () {
+ $el[val](data[state] == null ? this.options[state] : data[state])
+
+ if (state == 'loadingText') {
+ this.isLoading = true
+ $el.addClass(d).attr(d, d)
+ } else if (this.isLoading) {
+ this.isLoading = false
+ $el.removeClass(d).removeAttr(d)
+ }
+ }, this), 0)
+ }
+
+ Button.prototype.toggle = function () {
+ var changed = true
+ var $parent = this.$element.closest('[data-toggle="buttons"]')
+
+ if ($parent.length) {
+ var $input = this.$element.find('input')
+ if ($input.prop('type') == 'radio') {
+ if ($input.prop('checked')) changed = false
+ $parent.find('.active').removeClass('active')
+ this.$element.addClass('active')
+ } else if ($input.prop('type') == 'checkbox') {
+ if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
+ this.$element.toggleClass('active')
+ }
+ $input.prop('checked', this.$element.hasClass('active'))
+ if (changed) $input.trigger('change')
+ } else {
+ this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
+ this.$element.toggleClass('active')
+ }
+ }
+
+
+ // BUTTON PLUGIN DEFINITION
+ // ========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.button')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.button', (data = new Button(this, options)))
+
+ if (option == 'toggle') data.toggle()
+ else if (option) data.setState(option)
+ })
+ }
+
+ var old = $.fn.button
+
+ $.fn.button = Plugin
+ $.fn.button.Constructor = Button
+
+
+ // BUTTON NO CONFLICT
+ // ==================
+
+ $.fn.button.noConflict = function () {
+ $.fn.button = old
+ return this
+ }
+
+
+ // BUTTON DATA-API
+ // ===============
+
+ $(document)
+ .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ var $btn = $(e.target)
+ if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
+ Plugin.call($btn, 'toggle')
+ if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault()
+ })
+ .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: popover.js v3.3.5
+ * http://getbootstrap.com/javascript/#popovers
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // POPOVER PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Popover = function (element, options) {
+ this.init('popover', element, options)
+ }
+
+ if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
+
+ Popover.VERSION = '3.3.5'
+
+ Popover.DEFAULTS = $.extend({}, $.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>'
+ })
+
+
+ // NOTE: POPOVER EXTENDS tooltip.js
+ // ================================
+
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
+
+ Popover.prototype.constructor = Popover
+
+ Popover.prototype.getDefaults = function () {
+ return Popover.DEFAULTS
+ }
+
+ Popover.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+ var content = this.getContent()
+
+ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
+ $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
+ this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
+ ](content)
+
+ $tip.removeClass('fade top bottom left right in')
+
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
+ // this manually by checking the contents.
+ if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
+ }
+
+ Popover.prototype.hasContent = function () {
+ return this.getTitle() || this.getContent()
+ }
+
+ Popover.prototype.getContent = function () {
+ var $e = this.$element
+ var o = this.options
+
+ return $e.attr('data-content')
+ || (typeof o.content == 'function' ?
+ o.content.call($e[0]) :
+ o.content)
+ }
+
+ Popover.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
+ }
+
+
+ // POPOVER PLUGIN DEFINITION
+ // =========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.popover')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.popover
+
+ $.fn.popover = Plugin
+ $.fn.popover.Constructor = Popover
+
+
+ // POPOVER NO CONFLICT
+ // ===================
+
+ $.fn.popover.noConflict = function () {
+ $.fn.popover = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: carousel.js v3.3.5
+ * http://getbootstrap.com/javascript/#carousel
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CAROUSEL CLASS DEFINITION
+ // =========================
+
+ var Carousel = function (element, options) {
+ this.$element = $(element)
+ this.$indicators = this.$element.find('.carousel-indicators')
+ this.options = options
+ this.paused = null
+ this.sliding = null
+ this.interval = null
+ this.$active = null
+ this.$items = null
+
+ this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
+
+ this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
+ }
+
+ Carousel.VERSION = '3.3.5'
+
+ Carousel.TRANSITION_DURATION = 600
+
+ Carousel.DEFAULTS = {
+ interval: 5000,
+ pause: 'hover',
+ wrap: true,
+ keyboard: true
+ }
+
+ Carousel.prototype.keydown = function (e) {
+ if (/input|textarea/i.test(e.target.tagName)) return
+ switch (e.which) {
+ case 37: this.prev(); break
+ case 39: this.next(); break
+ default: return
+ }
+
+ e.preventDefault()
+ }
+
+ Carousel.prototype.cycle = function (e) {
+ e || (this.paused = false)
+
+ this.interval && clearInterval(this.interval)
+
+ this.options.interval
+ && !this.paused
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
+
+ return this
+ }
+
+ Carousel.prototype.getItemIndex = function (item) {
+ this.$items = item.parent().children('.item')
+ return this.$items.index(item || this.$active)
+ }
+
+ Carousel.prototype.getItemForDirection = function (direction, active) {
+ var activeIndex = this.getItemIndex(active)
+ var willWrap = (direction == 'prev' && activeIndex === 0)
+ || (direction == 'next' && activeIndex == (this.$items.length - 1))
+ if (willWrap && !this.options.wrap) return active
+ var delta = direction == 'prev' ? -1 : 1
+ var itemIndex = (activeIndex + delta) % this.$items.length
+ return this.$items.eq(itemIndex)
+ }
+
+ Carousel.prototype.to = function (pos) {
+ var that = this
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
+
+ if (pos > (this.$items.length - 1) || pos < 0) return
+
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
+ if (activeIndex == pos) return this.pause().cycle()
+
+ return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
+ }
+
+ Carousel.prototype.pause = function (e) {
+ e || (this.paused = true)
+
+ if (this.$element.find('.next, .prev').length && $.support.transition) {
+ this.$element.trigger($.support.transition.end)
+ this.cycle(true)
+ }
+
+ this.interval = clearInterval(this.interval)
+
+ return this
+ }
+
+ Carousel.prototype.next = function () {
+ if (this.sliding) return
+ return this.slide('next')
+ }
+
+ Carousel.prototype.prev = function () {
+ if (this.sliding) return
+ return this.slide('prev')
+ }
+
+ Carousel.prototype.slide = function (type, next) {
+ var $active = this.$element.find('.item.active')
+ var $next = next || this.getItemForDirection(type, $active)
+ var isCycling = this.interval
+ var direction = type == 'next' ? 'left' : 'right'
+ var that = this
+
+ if ($next.hasClass('active')) return (this.sliding = false)
+
+ var relatedTarget = $next[0]
+ var slideEvent = $.Event('slide.bs.carousel', {
+ relatedTarget: relatedTarget,
+ direction: direction
+ })
+ this.$element.trigger(slideEvent)
+ if (slideEvent.isDefaultPrevented()) return
+
+ this.sliding = true
+
+ isCycling && this.pause()
+
+ if (this.$indicators.length) {
+ this.$indicators.find('.active').removeClass('active')
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
+ $nextIndicator && $nextIndicator.addClass('active')
+ }
+
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
+ if ($.support.transition && this.$element.hasClass('slide')) {
+ $next.addClass(type)
+ $next[0].offsetWidth // force reflow
+ $active.addClass(direction)
+ $next.addClass(direction)
+ $active
+ .one('bsTransitionEnd', function () {
+ $next.removeClass([type, direction].join(' ')).addClass('active')
+ $active.removeClass(['active', direction].join(' '))
+ that.sliding = false
+ setTimeout(function () {
+ that.$element.trigger(slidEvent)
+ }, 0)
+ })
+ .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
+ } else {
+ $active.removeClass('active')
+ $next.addClass('active')
+ this.sliding = false
+ this.$element.trigger(slidEvent)
+ }
+
+ isCycling && this.cycle()
+
+ return this
+ }
+
+
+ // CAROUSEL PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.carousel')
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
+ var action = typeof option == 'string' ? option : options.slide
+
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
+ if (typeof option == 'number') data.to(option)
+ else if (action) data[action]()
+ else if (options.interval) data.pause().cycle()
+ })
+ }
+
+ var old = $.fn.carousel
+
+ $.fn.carousel = Plugin
+ $.fn.carousel.Constructor = Carousel
+
+
+ // CAROUSEL NO CONFLICT
+ // ====================
+
+ $.fn.carousel.noConflict = function () {
+ $.fn.carousel = old
+ return this
+ }
+
+
+ // CAROUSEL DATA-API
+ // =================
+
+ var clickHandler = function (e) {
+ var href
+ var $this = $(this)
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
+ if (!$target.hasClass('carousel')) return
+ var options = $.extend({}, $target.data(), $this.data())
+ var slideIndex = $this.attr('data-slide-to')
+ if (slideIndex) options.interval = false
+
+ Plugin.call($target, options)
+
+ if (slideIndex) {
+ $target.data('bs.carousel').to(slideIndex)
+ }
+
+ e.preventDefault()
+ }
+
+ $(document)
+ .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
+ .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
+
+ $(window).on('load', function () {
+ $('[data-ride="carousel"]').each(function () {
+ var $carousel = $(this)
+ Plugin.call($carousel, $carousel.data())
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: scrollspy.js v3.3.5
+ * http://getbootstrap.com/javascript/#scrollspy
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // SCROLLSPY CLASS DEFINITION
+ // ==========================
+
+ function ScrollSpy(element, options) {
+ this.$body = $(document.body)
+ this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
+ this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
+ this.selector = (this.options.target || '') + ' .nav li > a'
+ this.offsets = []
+ this.targets = []
+ this.activeTarget = null
+ this.scrollHeight = 0
+
+ this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
+ this.refresh()
+ this.process()
+ }
+
+ ScrollSpy.VERSION = '3.3.5'
+
+ ScrollSpy.DEFAULTS = {
+ offset: 10
+ }
+
+ ScrollSpy.prototype.getScrollHeight = function () {
+ return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
+ }
+
+ ScrollSpy.prototype.refresh = function () {
+ var that = this
+ var offsetMethod = 'offset'
+ var offsetBase = 0
+
+ this.offsets = []
+ this.targets = []
+ this.scrollHeight = this.getScrollHeight()
+
+ if (!$.isWindow(this.$scrollElement[0])) {
+ offsetMethod = 'position'
+ offsetBase = this.$scrollElement.scrollTop()
+ }
+
+ this.$body
+ .find(this.selector)
+ .map(function () {
+ var $el = $(this)
+ var href = $el.data('target') || $el.attr('href')
+ var $href = /^#./.test(href) && $(href)
+
+ return ($href
+ && $href.length
+ && $href.is(':visible')
+ && [[$href[offsetMethod]().top + offsetBase, href]]) || null
+ })
+ .sort(function (a, b) { return a[0] - b[0] })
+ .each(function () {
+ that.offsets.push(this[0])
+ that.targets.push(this[1])
+ })
+ }
+
+ ScrollSpy.prototype.process = function () {
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
+ var scrollHeight = this.getScrollHeight()
+ var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
+ var offsets = this.offsets
+ var targets = this.targets
+ var activeTarget = this.activeTarget
+ var i
+
+ if (this.scrollHeight != scrollHeight) {
+ this.refresh()
+ }
+
+ if (scrollTop >= maxScroll) {
+ return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
+ }
+
+ if (activeTarget && scrollTop < offsets[0]) {
+ this.activeTarget = null
+ return this.clear()
+ }
+
+ for (i = offsets.length; i--;) {
+ activeTarget != targets[i]
+ && scrollTop >= offsets[i]
+ && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
+ && this.activate(targets[i])
+ }
+ }
+
+ ScrollSpy.prototype.activate = function (target) {
+ this.activeTarget = target
+
+ this.clear()
+
+ var selector = this.selector +
+ '[data-target="' + target + '"],' +
+ this.selector + '[href="' + target + '"]'
+
+ var active = $(selector)
+ .parents('li')
+ .addClass('active')
+
+ if (active.parent('.dropdown-menu').length) {
+ active = active
+ .closest('li.dropdown')
+ .addClass('active')
+ }
+
+ active.trigger('activate.bs.scrollspy')
+ }
+
+ ScrollSpy.prototype.clear = function () {
+ $(this.selector)
+ .parentsUntil(this.options.target, '.active')
+ .removeClass('active')
+ }
+
+
+ // SCROLLSPY PLUGIN DEFINITION
+ // ===========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.scrollspy')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.scrollspy
+
+ $.fn.scrollspy = Plugin
+ $.fn.scrollspy.Constructor = ScrollSpy
+
+
+ // SCROLLSPY NO CONFLICT
+ // =====================
+
+ $.fn.scrollspy.noConflict = function () {
+ $.fn.scrollspy = old
+ return this
+ }
+
+
+ // SCROLLSPY DATA-API
+ // ==================
+
+ $(window).on('load.bs.scrollspy.data-api', function () {
+ $('[data-spy="scroll"]').each(function () {
+ var $spy = $(this)
+ Plugin.call($spy, $spy.data())
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: collapse.js v3.3.5
+ * http://getbootstrap.com/javascript/#collapse
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // COLLAPSE PUBLIC CLASS DEFINITION
+ // ================================
+
+ var Collapse = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Collapse.DEFAULTS, options)
+ this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
+ '[data-toggle="collapse"][data-target="#' + element.id + '"]')
+ this.transitioning = null
+
+ if (this.options.parent) {
+ this.$parent = this.getParent()
+ } else {
+ this.addAriaAndCollapsedClass(this.$element, this.$trigger)
+ }
+
+ if (this.options.toggle) this.toggle()
+ }
+
+ Collapse.VERSION = '3.3.5'
+
+ Collapse.TRANSITION_DURATION = 350
+
+ Collapse.DEFAULTS = {
+ toggle: true
+ }
+
+ Collapse.prototype.dimension = function () {
+ var hasWidth = this.$element.hasClass('width')
+ return hasWidth ? 'width' : 'height'
+ }
+
+ Collapse.prototype.show = function () {
+ if (this.transitioning || this.$element.hasClass('in')) return
+
+ var activesData
+ var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
+
+ if (actives && actives.length) {
+ activesData = actives.data('bs.collapse')
+ if (activesData && activesData.transitioning) return
+ }
+
+ var startEvent = $.Event('show.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ if (actives && actives.length) {
+ Plugin.call(actives, 'hide')
+ activesData || actives.data('bs.collapse', null)
+ }
+
+ var dimension = this.dimension()
+
+ this.$element
+ .removeClass('collapse')
+ .addClass('collapsing')[dimension](0)
+ .attr('aria-expanded', true)
+
+ this.$trigger
+ .removeClass('collapsed')
+ .attr('aria-expanded', true)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse in')[dimension]('')
+ this.transitioning = 0
+ this.$element
+ .trigger('shown.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ var scrollSize = $.camelCase(['scroll', dimension].join('-'))
+
+ this.$element
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
+ }
+
+ Collapse.prototype.hide = function () {
+ if (this.transitioning || !this.$element.hasClass('in')) return
+
+ var startEvent = $.Event('hide.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ var dimension = this.dimension()
+
+ this.$element[dimension](this.$element[dimension]())[0].offsetHeight
+
+ this.$element
+ .addClass('collapsing')
+ .removeClass('collapse in')
+ .attr('aria-expanded', false)
+
+ this.$trigger
+ .addClass('collapsed')
+ .attr('aria-expanded', false)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.transitioning = 0
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse')
+ .trigger('hidden.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ this.$element
+ [dimension](0)
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
+ }
+
+ Collapse.prototype.toggle = function () {
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
+ }
+
+ Collapse.prototype.getParent = function () {
+ return $(this.options.parent)
+ .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
+ .each($.proxy(function (i, element) {
+ var $element = $(element)
+ this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
+ }, this))
+ .end()
+ }
+
+ Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
+ var isOpen = $element.hasClass('in')
+
+ $element.attr('aria-expanded', isOpen)
+ $trigger
+ .toggleClass('collapsed', !isOpen)
+ .attr('aria-expanded', isOpen)
+ }
+
+ function getTargetFromTrigger($trigger) {
+ var href
+ var target = $trigger.attr('data-target')
+ || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
+
+ return $(target)
+ }
+
+
+ // COLLAPSE PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.collapse')
+ var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
+ if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.collapse
+
+ $.fn.collapse = Plugin
+ $.fn.collapse.Constructor = Collapse
+
+
+ // COLLAPSE NO CONFLICT
+ // ====================
+
+ $.fn.collapse.noConflict = function () {
+ $.fn.collapse = old
+ return this
+ }
+
+
+ // COLLAPSE DATA-API
+ // =================
+
+ $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
+ var $this = $(this)
+
+ if (!$this.attr('data-target')) e.preventDefault()
+
+ var $target = getTargetFromTrigger($this)
+ var data = $target.data('bs.collapse')
+ var option = data ? 'toggle' : $this.data()
+
+ Plugin.call($target, option)
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tab.js v3.3.5
+ * http://getbootstrap.com/javascript/#tabs
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TAB CLASS DEFINITION
+ // ====================
+
+ var Tab = function (element) {
+ // jscs:disable requireDollarBeforejQueryAssignment
+ this.element = $(element)
+ // jscs:enable requireDollarBeforejQueryAssignment
+ }
+
+ Tab.VERSION = '3.3.5'
+
+ Tab.TRANSITION_DURATION = 150
+
+ Tab.prototype.show = function () {
+ var $this = this.element
+ var $ul = $this.closest('ul:not(.dropdown-menu)')
+ var selector = $this.data('target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ if ($this.parent('li').hasClass('active')) return
+
+ var $previous = $ul.find('.active:last a')
+ var hideEvent = $.Event('hide.bs.tab', {
+ relatedTarget: $this[0]
+ })
+ var showEvent = $.Event('show.bs.tab', {
+ relatedTarget: $previous[0]
+ })
+
+ $previous.trigger(hideEvent)
+ $this.trigger(showEvent)
+
+ if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
+
+ var $target = $(selector)
+
+ this.activate($this.closest('li'), $ul)
+ this.activate($target, $target.parent(), function () {
+ $previous.trigger({
+ type: 'hidden.bs.tab',
+ relatedTarget: $this[0]
+ })
+ $this.trigger({
+ type: 'shown.bs.tab',
+ relatedTarget: $previous[0]
+ })
+ })
+ }
+
+ Tab.prototype.activate = function (element, container, callback) {
+ var $active = container.find('> .active')
+ var transition = callback
+ && $.support.transition
+ && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
+
+ function next() {
+ $active
+ .removeClass('active')
+ .find('> .dropdown-menu > .active')
+ .removeClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', false)
+
+ element
+ .addClass('active')
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+
+ if (transition) {
+ element[0].offsetWidth // reflow for transition
+ element.addClass('in')
+ } else {
+ element.removeClass('fade')
+ }
+
+ if (element.parent('.dropdown-menu').length) {
+ element
+ .closest('li.dropdown')
+ .addClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+ }
+
+ callback && callback()
+ }
+
+ $active.length && transition ?
+ $active
+ .one('bsTransitionEnd', next)
+ .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
+ next()
+
+ $active.removeClass('in')
+ }
+
+
+ // TAB PLUGIN DEFINITION
+ // =====================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tab')
+
+ if (!data) $this.data('bs.tab', (data = new Tab(this)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.tab
+
+ $.fn.tab = Plugin
+ $.fn.tab.Constructor = Tab
+
+
+ // TAB NO CONFLICT
+ // ===============
+
+ $.fn.tab.noConflict = function () {
+ $.fn.tab = old
+ return this
+ }
+
+
+ // TAB DATA-API
+ // ============
+
+ var clickHandler = function (e) {
+ e.preventDefault()
+ Plugin.call($(this), 'show')
+ }
+
+ $(document)
+ .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
+ .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
+
+}(jQuery);
diff --git a/ui/new-ui-samples/js/vendor/jquery-ui.js b/ui/new-ui-samples/js/vendor/jquery-ui.js
new file mode 100644
index 0000000..31ee9cd
--- /dev/null
+++ b/ui/new-ui-samples/js/vendor/jquery-ui.js
@@ -0,0 +1,16617 @@
+/*! jQuery UI - v1.11.4 - 2015-03-11
+* http://jqueryui.com
+* Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+(function( factory ) {
+ if ( typeof define === "function" && define.amd ) {
+
+ // AMD. Register as an anonymous module.
+ define([ "jquery" ], factory );
+ } else {
+
+ // Browser globals
+ factory( jQuery );
+ }
+}(function( $ ) {
+/*!
+ * jQuery UI Core 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/ui-core/
+ */
+
+
+// $.ui might exist from components with no dependencies, e.g., $.ui.position
+$.ui = $.ui || {};
+
+$.extend( $.ui, {
+ version: "1.11.4",
+
+ keyCode: {
+ BACKSPACE: 8,
+ COMMA: 188,
+ DELETE: 46,
+ DOWN: 40,
+ END: 35,
+ ENTER: 13,
+ ESCAPE: 27,
+ HOME: 36,
+ LEFT: 37,
+ PAGE_DOWN: 34,
+ PAGE_UP: 33,
+ PERIOD: 190,
+ RIGHT: 39,
+ SPACE: 32,
+ TAB: 9,
+ UP: 38
+ }
+});
+
+// plugins
+$.fn.extend({
+ scrollParent: function( includeHidden ) {
+ var position = this.css( "position" ),
+ excludeStaticParent = position === "absolute",
+ overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
+ scrollParent = this.parents().filter( function() {
+ var parent = $( this );
+ if ( excludeStaticParent && parent.css( "position" ) === "static" ) {
+ return false;
+ }
+ return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + parent.css( "overflow-x" ) );
+ }).eq( 0 );
+
+ return position === "fixed" || !scrollParent.length ? $( this[ 0 ].ownerDocument || document ) : scrollParent;
+ },
+
+ uniqueId: (function() {
+ var uuid = 0;
+
+ return function() {
+ return this.each(function() {
+ if ( !this.id ) {
+ this.id = "ui-id-" + ( ++uuid );
+ }
+ });
+ };
+ })(),
+
+ removeUniqueId: function() {
+ return this.each(function() {
+ if ( /^ui-id-\d+$/.test( this.id ) ) {
+ $( this ).removeAttr( "id" );
+ }
+ });
+ }
+});
+
+// selectors
+function focusable( element, isTabIndexNotNaN ) {
+ var map, mapName, img,
+ nodeName = element.nodeName.toLowerCase();
+ if ( "area" === nodeName ) {
+ map = element.parentNode;
+ mapName = map.name;
+ if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+ return false;
+ }
+ img = $( "img[usemap='#" + mapName + "']" )[ 0 ];
+ return !!img && visible( img );
+ }
+ return ( /^(input|select|textarea|button|object)$/.test( nodeName ) ?
+ !element.disabled :
+ "a" === nodeName ?
+ element.href || isTabIndexNotNaN :
+ isTabIndexNotNaN) &&
+ // the element and all of its ancestors must be visible
+ visible( element );
+}
+
+function visible( element ) {
+ return $.expr.filters.visible( element ) &&
+ !$( element ).parents().addBack().filter(function() {
+ return $.css( this, "visibility" ) === "hidden";
+ }).length;
+}
+
+$.extend( $.expr[ ":" ], {
+ data: $.expr.createPseudo ?
+ $.expr.createPseudo(function( dataName ) {
+ return function( elem ) {
+ return !!$.data( elem, dataName );
+ };
+ }) :
+ // support: jQuery <1.8
+ function( elem, i, match ) {
+ return !!$.data( elem, match[ 3 ] );
+ },
+
+ focusable: function( element ) {
+ return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+ },
+
+ tabbable: function( element ) {
+ var tabIndex = $.attr( element, "tabindex" ),
+ isTabIndexNaN = isNaN( tabIndex );
+ return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+ }
+});
+
+// support: jQuery <1.8
+if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
+ $.each( [ "Width", "Height" ], function( i, name ) {
+ var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+ type = name.toLowerCase(),
+ orig = {
+ innerWidth: $.fn.innerWidth,
+ innerHeight: $.fn.innerHeight,
+ outerWidth: $.fn.outerWidth,
+ outerHeight: $.fn.outerHeight
+ };
+
+ function reduce( elem, size, border, margin ) {
+ $.each( side, function() {
+ size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
+ if ( border ) {
+ size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
+ }
+ if ( margin ) {
+ size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
+ }
+ });
+ return size;
+ }
+
+ $.fn[ "inner" + name ] = function( size ) {
+ if ( size === undefined ) {
+ return orig[ "inner" + name ].call( this );
+ }
+
+ return this.each(function() {
+ $( this ).css( type, reduce( this, size ) + "px" );
+ });
+ };
+
+ $.fn[ "outer" + name] = function( size, margin ) {
+ if ( typeof size !== "number" ) {
+ return orig[ "outer" + name ].call( this, size );
+ }
+
+ return this.each(function() {
+ $( this).css( type, reduce( this, size, true, margin ) + "px" );
+ });
+ };
+ });
+}
+
+// support: jQuery <1.8
+if ( !$.fn.addBack ) {
+ $.fn.addBack = function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter( selector )
+ );
+ };
+}
+
+// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
+if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
+ $.fn.removeData = (function( removeData ) {
+ return function( key ) {
+ if ( arguments.length ) {
+ return removeData.call( this, $.camelCase( key ) );
+ } else {
+ return removeData.call( this );
+ }
+ };
+ })( $.fn.removeData );
+}
+
+// deprecated
+$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
+
+$.fn.extend({
+ focus: (function( orig ) {
+ return function( delay, fn ) {
+ return typeof delay === "number" ?
+ this.each(function() {
+ var elem = this;
+ setTimeout(function() {
+ $( elem ).focus();
+ if ( fn ) {
+ fn.call( elem );
+ }
+ }, delay );
+ }) :
+ orig.apply( this, arguments );
+ };
+ })( $.fn.focus ),
+
+ disableSelection: (function() {
+ var eventType = "onselectstart" in document.createElement( "div" ) ?
+ "selectstart" :
+ "mousedown";
+
+ return function() {
+ return this.bind( eventType + ".ui-disableSelection", function( event ) {
+ event.preventDefault();
+ });
+ };
+ })(),
+
+ enableSelection: function() {
+ return this.unbind( ".ui-disableSelection" );
+ },
+
+ zIndex: function( zIndex ) {
+ if ( zIndex !== undefined ) {
+ return this.css( "zIndex", zIndex );
+ }
+
+ if ( this.length ) {
+ var elem = $( this[ 0 ] ), position, value;
+ while ( elem.length && elem[ 0 ] !== document ) {
+ // Ignore z-index if position is set to a value where z-index is ignored by the browser
+ // This makes behavior of this function consistent across browsers
+ // WebKit always returns auto if the element is positioned
+ position = elem.css( "position" );
+ if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+ // IE returns 0 when zIndex is not specified
+ // other browsers return a string
+ // we ignore the case of nested elements with an explicit value of 0
+ // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+ value = parseInt( elem.css( "zIndex" ), 10 );
+ if ( !isNaN( value ) && value !== 0 ) {
+ return value;
+ }
+ }
+ elem = elem.parent();
+ }
+ }
+
+ return 0;
+ }
+});
+
+// $.ui.plugin is deprecated. Use $.widget() extensions instead.
+$.ui.plugin = {
+ add: function( module, option, set ) {
+ var i,
+ proto = $.ui[ module ].prototype;
+ for ( i in set ) {
+ proto.plugins[ i ] = proto.plugins[ i ] || [];
+ proto.plugins[ i ].push( [ option, set[ i ] ] );
+ }
+ },
+ call: function( instance, name, args, allowDisconnected ) {
+ var i,
+ set = instance.plugins[ name ];
+
+ if ( !set ) {
+ return;
+ }
+
+ if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) ) {
+ return;
+ }
+
+ for ( i = 0; i < set.length; i++ ) {
+ if ( instance.options[ set[ i ][ 0 ] ] ) {
+ set[ i ][ 1 ].apply( instance.element, args );
+ }
+ }
+ }
+};
+
+
+/*!
+ * jQuery UI Widget 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/jQuery.widget/
+ */
+
+
+var widget_uuid = 0,
+ widget_slice = Array.prototype.slice;
+
+$.cleanData = (function( orig ) {
+ return function( elems ) {
+ var events, elem, i;
+ for ( i = 0; (elem = elems[i]) != null; i++ ) {
+ try {
+
+ // Only trigger remove when necessary to save time
+ events = $._data( elem, "events" );
+ if ( events && events.remove ) {
+ $( elem ).triggerHandler( "remove" );
+ }
+
+ // http://bugs.jquery.com/ticket/8235
+ } catch ( e ) {}
+ }
+ orig( elems );
+ };
+})( $.cleanData );
+
+$.widget = function( name, base, prototype ) {
+ var fullName, existingConstructor, constructor, basePrototype,
+ // proxiedPrototype allows the provided prototype to remain unmodified
+ // so that it can be used as a mixin for multiple widgets (#8876)
+ proxiedPrototype = {},
+ namespace = name.split( "." )[ 0 ];
+
+ name = name.split( "." )[ 1 ];
+ fullName = namespace + "-" + name;
+
+ if ( !prototype ) {
+ prototype = base;
+ base = $.Widget;
+ }
+
+ // create selector for plugin
+ $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+ return !!$.data( elem, fullName );
+ };
+
+ $[ namespace ] = $[ namespace ] || {};
+ existingConstructor = $[ namespace ][ name ];
+ constructor = $[ namespace ][ name ] = function( options, element ) {
+ // allow instantiation without "new" keyword
+ if ( !this._createWidget ) {
+ return new constructor( options, element );
+ }
+
+ // allow instantiation without initializing for simple inheritance
+ // must use "new" keyword (the code above always passes args)
+ if ( arguments.length ) {
+ this._createWidget( options, element );
+ }
+ };
+ // extend with the existing constructor to carry over any static properties
+ $.extend( constructor, existingConstructor, {
+ version: prototype.version,
+ // copy the object used to create the prototype in case we need to
+ // redefine the widget later
+ _proto: $.extend( {}, prototype ),
+ // track widgets that inherit from this widget in case this widget is
+ // redefined after a widget inherits from it
+ _childConstructors: []
+ });
+
+ basePrototype = new base();
+ // we need to make the options hash a property directly on the new instance
+ // otherwise we'll modify the options hash on the prototype that we're
+ // inheriting from
+ basePrototype.options = $.widget.extend( {}, basePrototype.options );
+ $.each( prototype, function( prop, value ) {
+ if ( !$.isFunction( value ) ) {
+ proxiedPrototype[ prop ] = value;
+ return;
+ }
+ proxiedPrototype[ prop ] = (function() {
+ var _super = function() {
+ return base.prototype[ prop ].apply( this, arguments );
+ },
+ _superApply = function( args ) {
+ return base.prototype[ prop ].apply( this, args );
+ };
+ return function() {
+ var __super = this._super,
+ __superApply = this._superApply,
+ returnValue;
+
+ this._super = _super;
+ this._superApply = _superApply;
+
+ returnValue = value.apply( this, arguments );
+
+ this._super = __super;
+ this._superApply = __superApply;
+
+ return returnValue;
+ };
+ })();
+ });
+ constructor.prototype = $.widget.extend( basePrototype, {
+ // TODO: remove support for widgetEventPrefix
+ // always use the name + a colon as the prefix, e.g., draggable:start
+ // don't prefix for widgets that aren't DOM-based
+ widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
+ }, proxiedPrototype, {
+ constructor: constructor,
+ namespace: namespace,
+ widgetName: name,
+ widgetFullName: fullName
+ });
+
+ // If this widget is being redefined then we need to find all widgets that
+ // are inheriting from it and redefine all of them so that they inherit from
+ // the new version of this widget. We're essentially trying to replace one
+ // level in the prototype chain.
+ if ( existingConstructor ) {
+ $.each( existingConstructor._childConstructors, function( i, child ) {
+ var childPrototype = child.prototype;
+
+ // redefine the child widget using the same prototype that was
+ // originally used, but inherit from the new version of the base
+ $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
+ });
+ // remove the list of existing child constructors from the old constructor
+ // so the old child constructors can be garbage collected
+ delete existingConstructor._childConstructors;
+ } else {
+ base._childConstructors.push( constructor );
+ }
+
+ $.widget.bridge( name, constructor );
+
+ return constructor;
+};
+
+$.widget.extend = function( target ) {
+ var input = widget_slice.call( arguments, 1 ),
+ inputIndex = 0,
+ inputLength = input.length,
+ key,
+ value;
+ for ( ; inputIndex < inputLength; inputIndex++ ) {
+ for ( key in input[ inputIndex ] ) {
+ value = input[ inputIndex ][ key ];
+ if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+ // Clone objects
+ if ( $.isPlainObject( value ) ) {
+ target[ key ] = $.isPlainObject( target[ key ] ) ?
+ $.widget.extend( {}, target[ key ], value ) :
+ // Don't extend strings, arrays, etc. with objects
+ $.widget.extend( {}, value );
+ // Copy everything else by reference
+ } else {
+ target[ key ] = value;
+ }
+ }
+ }
+ }
+ return target;
+};
+
+$.widget.bridge = function( name, object ) {
+ var fullName = object.prototype.widgetFullName || name;
+ $.fn[ name ] = function( options ) {
+ var isMethodCall = typeof options === "string",
+ args = widget_slice.call( arguments, 1 ),
+ returnValue = this;
+
+ if ( isMethodCall ) {
+ this.each(function() {
+ var methodValue,
+ instance = $.data( this, fullName );
+ if ( options === "instance" ) {
+ returnValue = instance;
+ return false;
+ }
+ if ( !instance ) {
+ return $.error( "cannot call methods on " + name + " prior to initialization; " +
+ "attempted to call method '" + options + "'" );
+ }
+ if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
+ return $.error( "no such method '" + options + "' for " + name + " widget instance" );
+ }
+ methodValue = instance[ options ].apply( instance, args );
+ if ( methodValue !== instance && methodValue !== undefined ) {
+ returnValue = methodValue && methodValue.jquery ?
+ returnValue.pushStack( methodValue.get() ) :
+ methodValue;
+ return false;
+ }
+ });
+ } else {
+
+ // Allow multiple hashes to be passed on init
+ if ( args.length ) {
+ options = $.widget.extend.apply( null, [ options ].concat(args) );
+ }
+
+ this.each(function() {
+ var instance = $.data( this, fullName );
+ if ( instance ) {
+ instance.option( options || {} );
+ if ( instance._init ) {
+ instance._init();
+ }
+ } else {
+ $.data( this, fullName, new object( options, this ) );
+ }
+ });
+ }
+
+ return returnValue;
+ };
+};
+
+$.Widget = function( /* options, element */ ) {};
+$.Widget._childConstructors = [];
+
+$.Widget.prototype = {
+ widgetName: "widget",
+ widgetEventPrefix: "",
+ defaultElement: "<div>",
+ options: {
+ disabled: false,
+
+ // callbacks
+ create: null
+ },
+ _createWidget: function( options, element ) {
+ element = $( element || this.defaultElement || this )[ 0 ];
+ this.element = $( element );
+ this.uuid = widget_uuid++;
+ this.eventNamespace = "." + this.widgetName + this.uuid;
+
+ this.bindings = $();
+ this.hoverable = $();
+ this.focusable = $();
+
+ if ( element !== this ) {
+ $.data( element, this.widgetFullName, this );
+ this._on( true, this.element, {
+ remove: function( event ) {
+ if ( event.target === element ) {
+ this.destroy();
+ }
+ }
+ });
+ this.document = $( element.style ?
+ // element within the document
+ element.ownerDocument :
+ // element is window or document
+ element.document || element );
+ this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+ }
+
+ this.options = $.widget.extend( {},
+ this.options,
+ this._getCreateOptions(),
+ options );
+
+ this._create();
+ this._trigger( "create", null, this._getCreateEventData() );
+ this._init();
+ },
+ _getCreateOptions: $.noop,
+ _getCreateEventData: $.noop,
+ _create: $.noop,
+ _init: $.noop,
+
+ destroy: function() {
+ this._destroy();
+ // we can probably remove the unbind calls in 2.0
+ // all event bindings should go through this._on()
+ this.element
+ .unbind( this.eventNamespace )
+ .removeData( this.widgetFullName )
+ // support: jquery <1.6.3
+ // http://bugs.jquery.com/ticket/9413
+ .removeData( $.camelCase( this.widgetFullName ) );
+ this.widget()
+ .unbind( this.eventNamespace )
+ .removeAttr( "aria-disabled" )
+ .removeClass(
+ this.widgetFullName + "-disabled " +
+ "ui-state-disabled" );
+
+ // clean up events and states
+ this.bindings.unbind( this.eventNamespace );
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
+ },
+ _destroy: $.noop,
+
+ widget: function() {
+ return this.element;
+ },
+
+ option: function( key, value ) {
+ var options = key,
+ parts,
+ curOption,
+ i;
+
+ if ( arguments.length === 0 ) {
+ // don't return a reference to the internal hash
+ return $.widget.extend( {}, this.options );
+ }
+
+ if ( typeof key === "string" ) {
+ // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+ options = {};
+ parts = key.split( "." );
+ key = parts.shift();
+ if ( parts.length ) {
+ curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+ for ( i = 0; i < parts.length - 1; i++ ) {
+ curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+ curOption = curOption[ parts[ i ] ];
+ }
+ key = parts.pop();
+ if ( arguments.length === 1 ) {
+ return curOption[ key ] === undefined ? null : curOption[ key ];
+ }
+ curOption[ key ] = value;
+ } else {
+ if ( arguments.length === 1 ) {
+ return this.options[ key ] === undefined ? null : this.options[ key ];
+ }
+ options[ key ] = value;
+ }
+ }
+
+ this._setOptions( options );
+
+ return this;
+ },
+ _setOptions: function( options ) {
+ var key;
+
+ for ( key in options ) {
+ this._setOption( key, options[ key ] );
+ }
+
+ return this;
+ },
+ _setOption: function( key, value ) {
+ this.options[ key ] = value;
+
+ if ( key === "disabled" ) {
+ this.widget()
+ .toggleClass( this.widgetFullName + "-disabled", !!value );
+
+ // If the widget is becoming disabled, then nothing is interactive
+ if ( value ) {
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
+ }
+ }
+
+ return this;
+ },
+
+ enable: function() {
+ return this._setOptions({ disabled: false });
+ },
+ disable: function() {
+ return this._setOptions({ disabled: true });
+ },
+
+ _on: function( suppressDisabledCheck, element, handlers ) {
+ var delegateElement,
+ instance = this;
+
+ // no suppressDisabledCheck flag, shuffle arguments
+ if ( typeof suppressDisabledCheck !== "boolean" ) {
+ handlers = element;
+ element = suppressDisabledCheck;
+ suppressDisabledCheck = false;
+ }
+
+ // no element argument, shuffle and use this.element
+ if ( !handlers ) {
+ handlers = element;
+ element = this.element;
+ delegateElement = this.widget();
+ } else {
+ element = delegateElement = $( element );
+ this.bindings = this.bindings.add( element );
+ }
+
+ $.each( handlers, function( event, handler ) {
+ function handlerProxy() {
+ // allow widgets to customize the disabled handling
+ // - disabled as an array instead of boolean
+ // - disabled class as method for disabling individual parts
+ if ( !suppressDisabledCheck &&
+ ( instance.options.disabled === true ||
+ $( this ).hasClass( "ui-state-disabled" ) ) ) {
+ return;
+ }
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+
+ // copy the guid so direct unbinding works
+ if ( typeof handler !== "string" ) {
+ handlerProxy.guid = handler.guid =
+ handler.guid || handlerProxy.guid || $.guid++;
+ }
+
+ var match = event.match( /^([\w:-]*)\s*(.*)$/ ),
+ eventName = match[1] + instance.eventNamespace,
+ selector = match[2];
+ if ( selector ) {
+ delegateElement.delegate( selector, eventName, handlerProxy );
+ } else {
+ element.bind( eventName, handlerProxy );
+ }
+ });
+ },
+
+ _off: function( element, eventName ) {
+ eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) +
+ this.eventNamespace;
+ element.unbind( eventName ).undelegate( eventName );
+
+ // Clear the stack to avoid memory leaks (#10056)
+ this.bindings = $( this.bindings.not( element ).get() );
+ this.focusable = $( this.focusable.not( element ).get() );
+ this.hoverable = $( this.hoverable.not( element ).get() );
+ },
+
+ _delay: function( handler, delay ) {
+ function handlerProxy() {
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+ var instance = this;
+ return setTimeout( handlerProxy, delay || 0 );
+ },
+
+ _hoverable: function( element ) {
+ this.hoverable = this.hoverable.add( element );
+ this._on( element, {
+ mouseenter: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-hover" );
+ },
+ mouseleave: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-hover" );
+ }
+ });
+ },
+
+ _focusable: function( element ) {
+ this.focusable = this.focusable.add( element );
+ this._on( element, {
+ focusin: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-focus" );
+ },
+ focusout: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-focus" );
+ }
+ });
+ },
+
+ _trigger: function( type, event, data ) {
+ var prop, orig,
+ callback = this.options[ type ];
+
+ data = data || {};
+ event = $.Event( event );
+ event.type = ( type === this.widgetEventPrefix ?
+ type :
+ this.widgetEventPrefix + type ).toLowerCase();
+ // the original event may come from any element
+ // so we need to reset the target on the new event
+ event.target = this.element[ 0 ];
+
+ // copy original event properties over to the new event
+ orig = event.originalEvent;
+ if ( orig ) {
+ for ( prop in orig ) {
+ if ( !( prop in event ) ) {
+ event[ prop ] = orig[ prop ];
+ }
+ }
+ }
+
+ this.element.trigger( event, data );
+ return !( $.isFunction( callback ) &&
+ callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
+ event.isDefaultPrevented() );
+ }
+};
+
+$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+ $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+ if ( typeof options === "string" ) {
+ options = { effect: options };
+ }
+ var hasOptions,
+ effectName = !options ?
+ method :
+ options === true || typeof options === "number" ?
+ defaultEffect :
+ options.effect || defaultEffect;
+ options = options || {};
+ if ( typeof options === "number" ) {
+ options = { duration: options };
+ }
+ hasOptions = !$.isEmptyObject( options );
+ options.complete = callback;
+ if ( options.delay ) {
+ element.delay( options.delay );
+ }
+ if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+ element[ method ]( options );
+ } else if ( effectName !== method && element[ effectName ] ) {
+ element[ effectName ]( options.duration, options.easing, callback );
+ } else {
+ element.queue(function( next ) {
+ $( this )[ method ]();
+ if ( callback ) {
+ callback.call( element[ 0 ] );
+ }
+ next();
+ });
+ }
+ };
+});
+
+var widget = $.widget;
+
+
+/*!
+ * jQuery UI Mouse 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/mouse/
+ */
+
+
+var mouseHandled = false;
+$( document ).mouseup( function() {
+ mouseHandled = false;
+});
+
+var mouse = $.widget("ui.mouse", {
+ version: "1.11.4",
+ options: {
+ cancel: "input,textarea,button,select,option",
+ distance: 1,
+ delay: 0
+ },
+ _mouseInit: function() {
+ var that = this;
+
+ this.element
+ .bind("mousedown." + this.widgetName, function(event) {
+ return that._mouseDown(event);
+ })
+ .bind("click." + this.widgetName, function(event) {
+ if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
+ $.removeData(event.target, that.widgetName + ".preventClickEvent");
+ event.stopImmediatePropagation();
+ return false;
+ }
+ });
+
+ this.started = false;
+ },
+
+ // TODO: make sure destroying one instance of mouse doesn't mess with
+ // other instances of mouse
+ _mouseDestroy: function() {
+ this.element.unbind("." + this.widgetName);
+ if ( this._mouseMoveDelegate ) {
+ this.document
+ .unbind("mousemove." + this.widgetName, this._mouseMoveDelegate)
+ .unbind("mouseup." + this.widgetName, this._mouseUpDelegate);
+ }
+ },
+
+ _mouseDown: function(event) {
+ // don't let more than one widget handle mouseStart
+ if ( mouseHandled ) {
+ return;
+ }
+
+ this._mouseMoved = false;
+
+ // we may have missed mouseup (out of window)
+ (this._mouseStarted && this._mouseUp(event));
+
+ this._mouseDownEvent = event;
+
+ var that = this,
+ btnIsLeft = (event.which === 1),
+ // event.target.nodeName works around a bug in IE 8 with
+ // disabled inputs (#7620)
+ elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+ if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+ return true;
+ }
+
+ this.mouseDelayMet = !this.options.delay;
+ if (!this.mouseDelayMet) {
+ this._mouseDelayTimer = setTimeout(function() {
+ that.mouseDelayMet = true;
+ }, this.options.delay);
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted = (this._mouseStart(event) !== false);
+ if (!this._mouseStarted) {
+ event.preventDefault();
+ return true;
+ }
+ }
+
+ // Click event may never have fired (Gecko & Opera)
+ if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
+ $.removeData(event.target, this.widgetName + ".preventClickEvent");
+ }
+
+ // these delegates are required to keep context
+ this._mouseMoveDelegate = function(event) {
+ return that._mouseMove(event);
+ };
+ this._mouseUpDelegate = function(event) {
+ return that._mouseUp(event);
+ };
+
+ this.document
+ .bind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+ .bind( "mouseup." + this.widgetName, this._mouseUpDelegate );
+
+ event.preventDefault();
+
+ mouseHandled = true;
+ return true;
+ },
+
+ _mouseMove: function(event) {
+ // Only check for mouseups outside the document if you've moved inside the document
+ // at least once. This prevents the firing of mouseup in the case of IE<9, which will
+ // fire a mousemove event if content is placed under the cursor. See #7778
+ // Support: IE <9
+ if ( this._mouseMoved ) {
+ // IE mouseup check - mouseup happened when mouse was out of window
+ if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
+ return this._mouseUp(event);
+
+ // Iframe mouseup check - mouseup occurred in another document
+ } else if ( !event.which ) {
+ return this._mouseUp( event );
+ }
+ }
+
+ if ( event.which || event.button ) {
+ this._mouseMoved = true;
+ }
+
+ if (this._mouseStarted) {
+ this._mouseDrag(event);
+ return event.preventDefault();
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted =
+ (this._mouseStart(this._mouseDownEvent, event) !== false);
+ (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+ }
+
+ return !this._mouseStarted;
+ },
+
+ _mouseUp: function(event) {
+ this.document
+ .unbind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+ .unbind( "mouseup." + this.widgetName, this._mouseUpDelegate );
+
+ if (this._mouseStarted) {
+ this._mouseStarted = false;
+
+ if (event.target === this._mouseDownEvent.target) {
+ $.data(event.target, this.widgetName + ".preventClickEvent", true);
+ }
+
+ this._mouseStop(event);
+ }
+
+ mouseHandled = false;
+ return false;
+ },
+
+ _mouseDistanceMet: function(event) {
+ return (Math.max(
+ Math.abs(this._mouseDownEvent.pageX - event.pageX),
+ Math.abs(this._mouseDownEvent.pageY - event.pageY)
+ ) >= this.options.distance
+ );
+ },
+
+ _mouseDelayMet: function(/* event */) {
+ return this.mouseDelayMet;
+ },
+
+ // These are placeholder methods, to be overriden by extending plugin
+ _mouseStart: function(/* event */) {},
+ _mouseDrag: function(/* event */) {},
+ _mouseStop: function(/* event */) {},
+ _mouseCapture: function(/* event */) { return true; }
+});
+
+
+/*!
+ * jQuery UI Position 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/position/
+ */
+
+(function() {
+
+$.ui = $.ui || {};
+
+var cachedScrollbarWidth, supportsOffsetFractions,
+ max = Math.max,
+ abs = Math.abs,
+ round = Math.round,
+ rhorizontal = /left|center|right/,
+ rvertical = /top|center|bottom/,
+ roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+ rposition = /^\w+/,
+ rpercent = /%$/,
+ _position = $.fn.position;
+
+function getOffsets( offsets, width, height ) {
+ return [
+ parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+ parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+ ];
+}
+
+function parseCss( element, property ) {
+ return parseInt( $.css( element, property ), 10 ) || 0;
+}
+
+function getDimensions( elem ) {
+ var raw = elem[0];
+ if ( raw.nodeType === 9 ) {
+ return {
+ width: elem.width(),
+ height: elem.height(),
+ offset: { top: 0, left: 0 }
+ };
+ }
+ if ( $.isWindow( raw ) ) {
+ return {
+ width: elem.width(),
+ height: elem.height(),
+ offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
+ };
+ }
+ if ( raw.preventDefault ) {
+ return {
+ width: 0,
+ height: 0,
+ offset: { top: raw.pageY, left: raw.pageX }
+ };
+ }
+ return {
+ width: elem.outerWidth(),
+ height: elem.outerHeight(),
+ offset: elem.offset()
+ };
+}
+
+$.position = {
+ scrollbarWidth: function() {
+ if ( cachedScrollbarWidth !== undefined ) {
+ return cachedScrollbarWidth;
+ }
+ var w1, w2,
+ div = $( "<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
+ innerDiv = div.children()[0];
+
+ $( "body" ).append( div );
+ w1 = innerDiv.offsetWidth;
+ div.css( "overflow", "scroll" );
+
+ w2 = innerDiv.offsetWidth;
+
+ if ( w1 === w2 ) {
+ w2 = div[0].clientWidth;
+ }
+
+ div.remove();
+
+ return (cachedScrollbarWidth = w1 - w2);
+ },
+ getScrollInfo: function( within ) {
+ var overflowX = within.isWindow || within.isDocument ? "" :
+ within.element.css( "overflow-x" ),
+ overflowY = within.isWindow || within.isDocument ? "" :
+ within.element.css( "overflow-y" ),
+ hasOverflowX = overflowX === "scroll" ||
+ ( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
+ hasOverflowY = overflowY === "scroll" ||
+ ( overflowY === "auto" && within.height < within.element[0].scrollHeight );
+ return {
+ width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+ height: hasOverflowX ? $.position.scrollbarWidth() : 0
+ };
+ },
+ getWithinInfo: function( element ) {
+ var withinElement = $( element || window ),
+ isWindow = $.isWindow( withinElement[0] ),
+ isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;
+ return {
+ element: withinElement,
+ isWindow: isWindow,
+ isDocument: isDocument,
+ offset: withinElement.offset() || { left: 0, top: 0 },
+ scrollLeft: withinElement.scrollLeft(),
+ scrollTop: withinElement.scrollTop(),
+
+ // support: jQuery 1.6.x
+ // jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows
+ width: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(),
+ height: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight()
+ };
+ }
+};
+
+$.fn.position = function( options ) {
+ if ( !options || !options.of ) {
+ return _position.apply( this, arguments );
+ }
+
+ // make a copy, we don't want to modify arguments
+ options = $.extend( {}, options );
+
+ var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+ target = $( options.of ),
+ within = $.position.getWithinInfo( options.within ),
+ scrollInfo = $.position.getScrollInfo( within ),
+ collision = ( options.collision || "flip" ).split( " " ),
+ offsets = {};
+
+ dimensions = getDimensions( target );
+ if ( target[0].preventDefault ) {
+ // force left top to allow flipping
+ options.at = "left top";
+ }
+ targetWidth = dimensions.width;
+ targetHeight = dimensions.height;
+ targetOffset = dimensions.offset;
+ // clone to reuse original targetOffset later
+ basePosition = $.extend( {}, targetOffset );
+
+ // force my and at to have valid horizontal and vertical positions
+ // if a value is missing or invalid, it will be converted to center
+ $.each( [ "my", "at" ], function() {
+ var pos = ( options[ this ] || "" ).split( " " ),
+ horizontalOffset,
+ verticalOffset;
+
+ if ( pos.length === 1) {
+ pos = rhorizontal.test( pos[ 0 ] ) ?
+ pos.concat( [ "center" ] ) :
+ rvertical.test( pos[ 0 ] ) ?
+ [ "center" ].concat( pos ) :
+ [ "center", "center" ];
+ }
+ pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+ pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+
+ // calculate offsets
+ horizontalOffset = roffset.exec( pos[ 0 ] );
+ verticalOffset = roffset.exec( pos[ 1 ] );
+ offsets[ this ] = [
+ horizontalOffset ? horizontalOffset[ 0 ] : 0,
+ verticalOffset ? verticalOffset[ 0 ] : 0
+ ];
+
+ // reduce to just the positions without the offsets
+ options[ this ] = [
+ rposition.exec( pos[ 0 ] )[ 0 ],
+ rposition.exec( pos[ 1 ] )[ 0 ]
+ ];
+ });
+
+ // normalize collision option
+ if ( collision.length === 1 ) {
+ collision[ 1 ] = collision[ 0 ];
+ }
+
+ if ( options.at[ 0 ] === "right" ) {
+ basePosition.left += targetWidth;
+ } else if ( options.at[ 0 ] === "center" ) {
+ basePosition.left += targetWidth / 2;
+ }
+
+ if ( options.at[ 1 ] === "bottom" ) {
+ basePosition.top += targetHeight;
+ } else if ( options.at[ 1 ] === "center" ) {
+ basePosition.top += targetHeight / 2;
+ }
+
+ atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+ basePosition.left += atOffset[ 0 ];
+ basePosition.top += atOffset[ 1 ];
+
+ return this.each(function() {
+ var collisionPosition, using,
+ elem = $( this ),
+ elemWidth = elem.outerWidth(),
+ elemHeight = elem.outerHeight(),
+ marginLeft = parseCss( this, "marginLeft" ),
+ marginTop = parseCss( this, "marginTop" ),
+ collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
+ collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
+ position = $.extend( {}, basePosition ),
+ myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
+
+ if ( options.my[ 0 ] === "right" ) {
+ position.left -= elemWidth;
+ } else if ( options.my[ 0 ] === "center" ) {
+ position.left -= elemWidth / 2;
+ }
+
+ if ( options.my[ 1 ] === "bottom" ) {
+ position.top -= elemHeight;
+ } else if ( options.my[ 1 ] === "center" ) {
+ position.top -= elemHeight / 2;
+ }
+
+ position.left += myOffset[ 0 ];
+ position.top += myOffset[ 1 ];
+
+ // if the browser doesn't support fractions, then round for consistent results
+ if ( !supportsOffsetFractions ) {
+ position.left = round( position.left );
+ position.top = round( position.top );
+ }
+
+ collisionPosition = {
+ marginLeft: marginLeft,
+ marginTop: marginTop
+ };
+
+ $.each( [ "left", "top" ], function( i, dir ) {
+ if ( $.ui.position[ collision[ i ] ] ) {
+ $.ui.position[ collision[ i ] ][ dir ]( position, {
+ targetWidth: targetWidth,
+ targetHeight: targetHeight,
+ elemWidth: elemWidth,
+ elemHeight: elemHeight,
+ collisionPosition: collisionPosition,
+ collisionWidth: collisionWidth,
+ collisionHeight: collisionHeight,
+ offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
+ my: options.my,
+ at: options.at,
+ within: within,
+ elem: elem
+ });
+ }
+ });
+
+ if ( options.using ) {
+ // adds feedback as second argument to using callback, if present
+ using = function( props ) {
+ var left = targetOffset.left - position.left,
+ right = left + targetWidth - elemWidth,
+ top = targetOffset.top - position.top,
+ bottom = top + targetHeight - elemHeight,
+ feedback = {
+ target: {
+ element: target,
+ left: targetOffset.left,
+ top: targetOffset.top,
+ width: targetWidth,
+ height: targetHeight
+ },
+ element: {
+ element: elem,
+ left: position.left,
+ top: position.top,
+ width: elemWidth,
+ height: elemHeight
+ },
+ horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+ vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+ };
+ if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+ feedback.horizontal = "center";
+ }
+ if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+ feedback.vertical = "middle";
+ }
+ if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+ feedback.important = "horizontal";
+ } else {
+ feedback.important = "vertical";
+ }
+ options.using.call( this, props, feedback );
+ };
+ }
+
+ elem.offset( $.extend( position, { using: using } ) );
+ });
+};
+
+$.ui.position = {
+ fit: {
+ left: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+ outerWidth = within.width,
+ collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+ overLeft = withinOffset - collisionPosLeft,
+ overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+ newOverRight;
+
+ // element is wider than within
+ if ( data.collisionWidth > outerWidth ) {
+ // element is initially over the left side of within
+ if ( overLeft > 0 && overRight <= 0 ) {
+ newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
+ position.left += overLeft - newOverRight;
+ // element is initially over right side of within
+ } else if ( overRight > 0 && overLeft <= 0 ) {
+ position.left = withinOffset;
+ // element is initially over both left and right sides of within
+ } else {
+ if ( overLeft > overRight ) {
+ position.left = withinOffset + outerWidth - data.collisionWidth;
+ } else {
+ position.left = withinOffset;
+ }
+ }
+ // too far left -> align with left edge
+ } else if ( overLeft > 0 ) {
+ position.left += overLeft;
+ // too far right -> align with right edge
+ } else if ( overRight > 0 ) {
+ position.left -= overRight;
+ // adjust based on position and margin
+ } else {
+ position.left = max( position.left - collisionPosLeft, position.left );
+ }
+ },
+ top: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+ outerHeight = data.within.height,
+ collisionPosTop = position.top - data.collisionPosition.marginTop,
+ overTop = withinOffset - collisionPosTop,
+ overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+ newOverBottom;
+
+ // element is taller than within
+ if ( data.collisionHeight > outerHeight ) {
+ // element is initially over the top of within
+ if ( overTop > 0 && overBottom <= 0 ) {
+ newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
+ position.top += overTop - newOverBottom;
+ // element is initially over bottom of within
+ } else if ( overBottom > 0 && overTop <= 0 ) {
+ position.top = withinOffset;
+ // element is initially over both top and bottom of within
+ } else {
+ if ( overTop > overBottom ) {
+ position.top = withinOffset + outerHeight - data.collisionHeight;
+ } else {
+ position.top = withinOffset;
+ }
+ }
+ // too far up -> align with top
+ } else if ( overTop > 0 ) {
+ position.top += overTop;
+ // too far down -> align with bottom edge
+ } else if ( overBottom > 0 ) {
+ position.top -= overBottom;
+ // adjust based on position and margin
+ } else {
+ position.top = max( position.top - collisionPosTop, position.top );
+ }
+ }
+ },
+ flip: {
+ left: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.offset.left + within.scrollLeft,
+ outerWidth = within.width,
+ offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+ collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+ overLeft = collisionPosLeft - offsetLeft,
+ overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+ myOffset = data.my[ 0 ] === "left" ?
+ -data.elemWidth :
+ data.my[ 0 ] === "right" ?
+ data.elemWidth :
+ 0,
+ atOffset = data.at[ 0 ] === "left" ?
+ data.targetWidth :
+ data.at[ 0 ] === "right" ?
+ -data.targetWidth :
+ 0,
+ offset = -2 * data.offset[ 0 ],
+ newOverRight,
+ newOverLeft;
+
+ if ( overLeft < 0 ) {
+ newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
+ if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+ position.left += myOffset + atOffset + offset;
+ }
+ } else if ( overRight > 0 ) {
+ newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
+ if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+ position.left += myOffset + atOffset + offset;
+ }
+ }
+ },
+ top: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.offset.top + within.scrollTop,
+ outerHeight = within.height,
+ offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+ collisionPosTop = position.top - data.collisionPosition.marginTop,
+ overTop = collisionPosTop - offsetTop,
+ overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+ top = data.my[ 1 ] === "top",
+ myOffset = top ?
+ -data.elemHeight :
+ data.my[ 1 ] === "bottom" ?
+ data.elemHeight :
+ 0,
+ atOffset = data.at[ 1 ] === "top" ?
+ data.targetHeight :
+ data.at[ 1 ] === "bottom" ?
+ -data.targetHeight :
+ 0,
+ offset = -2 * data.offset[ 1 ],
+ newOverTop,
+ newOverBottom;
+ if ( overTop < 0 ) {
+ newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
+ if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {
+ position.top += myOffset + atOffset + offset;
+ }
+ } else if ( overBottom > 0 ) {
+ newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
+ if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {
+ position.top += myOffset + atOffset + offset;
+ }
+ }
+ }
+ },
+ flipfit: {
+ left: function() {
+ $.ui.position.flip.left.apply( this, arguments );
+ $.ui.position.fit.left.apply( this, arguments );
+ },
+ top: function() {
+ $.ui.position.flip.top.apply( this, arguments );
+ $.ui.position.fit.top.apply( this, arguments );
+ }
+ }
+};
+
+// fraction support test
+(function() {
+ var testElement, testElementParent, testElementStyle, offsetLeft, i,
+ body = document.getElementsByTagName( "body" )[ 0 ],
+ div = document.createElement( "div" );
+
+ //Create a "fake body" for testing based on method used in jQuery.support
+ testElement = document.createElement( body ? "div" : "body" );
+ testElementStyle = {
+ visibility: "hidden",
+ width: 0,
+ height: 0,
+ border: 0,
+ margin: 0,
+ background: "none"
+ };
+ if ( body ) {
+ $.extend( testElementStyle, {
+ position: "absolute",
+ left: "-1000px",
+ top: "-1000px"
+ });
+ }
+ for ( i in testElementStyle ) {
+ testElement.style[ i ] = testElementStyle[ i ];
+ }
+ testElement.appendChild( div );
+ testElementParent = body || document.documentElement;
+ testElementParent.insertBefore( testElement, testElementParent.firstChild );
+
+ div.style.cssText = "position: absolute; left: 10.7432222px;";
+
+ offsetLeft = $( div ).offset().left;
+ supportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11;
+
+ testElement.innerHTML = "";
+ testElementParent.removeChild( testElement );
+})();
+
+})();
+
+var position = $.ui.position;
+
+
+/*!
+ * jQuery UI Accordion 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/accordion/
+ */
+
+
+var accordion = $.widget( "ui.accordion", {
+ version: "1.11.4",
+ options: {
+ active: 0,
+ animate: {},
+ collapsible: false,
+ event: "click",
+ header: "> li > :first-child,> :not(li):even",
+ heightStyle: "auto",
+ icons: {
+ activeHeader: "ui-icon-triangle-1-s",
+ header: "ui-icon-triangle-1-e"
+ },
+
+ // callbacks
+ activate: null,
+ beforeActivate: null
+ },
+
+ hideProps: {
+ borderTopWidth: "hide",
+ borderBottomWidth: "hide",
+ paddingTop: "hide",
+ paddingBottom: "hide",
+ height: "hide"
+ },
+
+ showProps: {
+ borderTopWidth: "show",
+ borderBottomWidth: "show",
+ paddingTop: "show",
+ paddingBottom: "show",
+ height: "show"
+ },
+
+ _create: function() {
+ var options = this.options;
+ this.prevShow = this.prevHide = $();
+ this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
+ // ARIA
+ .attr( "role", "tablist" );
+
+ // don't allow collapsible: false and active: false / null
+ if ( !options.collapsible && (options.active === false || options.active == null) ) {
+ options.active = 0;
+ }
+
+ this._processPanels();
+ // handle negative values
+ if ( options.active < 0 ) {
+ options.active += this.headers.length;
+ }
+ this._refresh();
+ },
+
+ _getCreateEventData: function() {
+ return {
+ header: this.active,
+ panel: !this.active.length ? $() : this.active.next()
+ };
+ },
+
+ _createIcons: function() {
+ var icons = this.options.icons;
+ if ( icons ) {
+ $( "<span>" )
+ .addClass( "ui-accordion-header-icon ui-icon " + icons.header )
+ .prependTo( this.headers );
+ this.active.children( ".ui-accordion-header-icon" )
+ .removeClass( icons.header )
+ .addClass( icons.activeHeader );
+ this.headers.addClass( "ui-accordion-icons" );
+ }
+ },
+
+ _destroyIcons: function() {
+ this.headers
+ .removeClass( "ui-accordion-icons" )
+ .children( ".ui-accordion-header-icon" )
+ .remove();
+ },
+
+ _destroy: function() {
+ var contents;
+
+ // clean up main element
+ this.element
+ .removeClass( "ui-accordion ui-widget ui-helper-reset" )
+ .removeAttr( "role" );
+
+ // clean up headers
+ this.headers
+ .removeClass( "ui-accordion-header ui-accordion-header-active ui-state-default " +
+ "ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-expanded" )
+ .removeAttr( "aria-selected" )
+ .removeAttr( "aria-controls" )
+ .removeAttr( "tabIndex" )
+ .removeUniqueId();
+
+ this._destroyIcons();
+
+ // clean up content panels
+ contents = this.headers.next()
+ .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom " +
+ "ui-accordion-content ui-accordion-content-active ui-state-disabled" )
+ .css( "display", "" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-hidden" )
+ .removeAttr( "aria-labelledby" )
+ .removeUniqueId();
+
+ if ( this.options.heightStyle !== "content" ) {
+ contents.css( "height", "" );
+ }
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "active" ) {
+ // _activate() will handle invalid values and update this.options
+ this._activate( value );
+ return;
+ }
+
+ if ( key === "event" ) {
+ if ( this.options.event ) {
+ this._off( this.headers, this.options.event );
+ }
+ this._setupEvents( value );
+ }
+
+ this._super( key, value );
+
+ // setting collapsible: false while collapsed; open first panel
+ if ( key === "collapsible" && !value && this.options.active === false ) {
+ this._activate( 0 );
+ }
+
+ if ( key === "icons" ) {
+ this._destroyIcons();
+ if ( value ) {
+ this._createIcons();
+ }
+ }
+
+ // #5332 - opacity doesn't cascade to positioned elements in IE
+ // so we need to add the disabled class to the headers and panels
+ if ( key === "disabled" ) {
+ this.element
+ .toggleClass( "ui-state-disabled", !!value )
+ .attr( "aria-disabled", value );
+ this.headers.add( this.headers.next() )
+ .toggleClass( "ui-state-disabled", !!value );
+ }
+ },
+
+ _keydown: function( event ) {
+ if ( event.altKey || event.ctrlKey ) {
+ return;
+ }
+
+ var keyCode = $.ui.keyCode,
+ length = this.headers.length,
+ currentIndex = this.headers.index( event.target ),
+ toFocus = false;
+
+ switch ( event.keyCode ) {
+ case keyCode.RIGHT:
+ case keyCode.DOWN:
+ toFocus = this.headers[ ( currentIndex + 1 ) % length ];
+ break;
+ case keyCode.LEFT:
+ case keyCode.UP:
+ toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
+ break;
+ case keyCode.SPACE:
+ case keyCode.ENTER:
+ this._eventHandler( event );
+ break;
+ case keyCode.HOME:
+ toFocus = this.headers[ 0 ];
+ break;
+ case keyCode.END:
+ toFocus = this.headers[ length - 1 ];
+ break;
+ }
+
+ if ( toFocus ) {
+ $( event.target ).attr( "tabIndex", -1 );
+ $( toFocus ).attr( "tabIndex", 0 );
+ toFocus.focus();
+ event.preventDefault();
+ }
+ },
+
+ _panelKeyDown: function( event ) {
+ if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
+ $( event.currentTarget ).prev().focus();
+ }
+ },
+
+ refresh: function() {
+ var options = this.options;
+ this._processPanels();
+
+ // was collapsed or no panel
+ if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
+ options.active = false;
+ this.active = $();
+ // active false only when collapsible is true
+ } else if ( options.active === false ) {
+ this._activate( 0 );
+ // was active, but active panel is gone
+ } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+ // all remaining panel are disabled
+ if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
+ options.active = false;
+ this.active = $();
+ // activate previous panel
+ } else {
+ this._activate( Math.max( 0, options.active - 1 ) );
+ }
+ // was active, active panel still exists
+ } else {
+ // make sure active index is correct
+ options.active = this.headers.index( this.active );
+ }
+
+ this._destroyIcons();
+
+ this._refresh();
+ },
+
+ _processPanels: function() {
+ var prevHeaders = this.headers,
+ prevPanels = this.panels;
+
+ this.headers = this.element.find( this.options.header )
+ .addClass( "ui-accordion-header ui-state-default ui-corner-all" );
+
+ this.panels = this.headers.next()
+ .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
+ .filter( ":not(.ui-accordion-content-active)" )
+ .hide();
+
+ // Avoid memory leaks (#10056)
+ if ( prevPanels ) {
+ this._off( prevHeaders.not( this.headers ) );
+ this._off( prevPanels.not( this.panels ) );
+ }
+ },
+
+ _refresh: function() {
+ var maxHeight,
+ options = this.options,
+ heightStyle = options.heightStyle,
+ parent = this.element.parent();
+
+ this.active = this._findActive( options.active )
+ .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
+ .removeClass( "ui-corner-all" );
+ this.active.next()
+ .addClass( "ui-accordion-content-active" )
+ .show();
+
+ this.headers
+ .attr( "role", "tab" )
+ .each(function() {
+ var header = $( this ),
+ headerId = header.uniqueId().attr( "id" ),
+ panel = header.next(),
+ panelId = panel.uniqueId().attr( "id" );
+ header.attr( "aria-controls", panelId );
+ panel.attr( "aria-labelledby", headerId );
+ })
+ .next()
+ .attr( "role", "tabpanel" );
+
+ this.headers
+ .not( this.active )
+ .attr({
+ "aria-selected": "false",
+ "aria-expanded": "false",
+ tabIndex: -1
+ })
+ .next()
+ .attr({
+ "aria-hidden": "true"
+ })
+ .hide();
+
+ // make sure at least one header is in the tab order
+ if ( !this.active.length ) {
+ this.headers.eq( 0 ).attr( "tabIndex", 0 );
+ } else {
+ this.active.attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ })
+ .next()
+ .attr({
+ "aria-hidden": "false"
+ });
+ }
+
+ this._createIcons();
+
+ this._setupEvents( options.event );
+
+ if ( heightStyle === "fill" ) {
+ maxHeight = parent.height();
+ this.element.siblings( ":visible" ).each(function() {
+ var elem = $( this ),
+ position = elem.css( "position" );
+
+ if ( position === "absolute" || position === "fixed" ) {
+ return;
+ }
+ maxHeight -= elem.outerHeight( true );
+ });
+
+ this.headers.each(function() {
+ maxHeight -= $( this ).outerHeight( true );
+ });
+
+ this.headers.next()
+ .each(function() {
+ $( this ).height( Math.max( 0, maxHeight -
+ $( this ).innerHeight() + $( this ).height() ) );
+ })
+ .css( "overflow", "auto" );
+ } else if ( heightStyle === "auto" ) {
+ maxHeight = 0;
+ this.headers.next()
+ .each(function() {
+ maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
+ })
+ .height( maxHeight );
+ }
+ },
+
+ _activate: function( index ) {
+ var active = this._findActive( index )[ 0 ];
+
+ // trying to activate the already active panel
+ if ( active === this.active[ 0 ] ) {
+ return;
+ }
+
+ // trying to collapse, simulate a click on the currently active header
+ active = active || this.active[ 0 ];
+
+ this._eventHandler({
+ target: active,
+ currentTarget: active,
+ preventDefault: $.noop
+ });
+ },
+
+ _findActive: function( selector ) {
+ return typeof selector === "number" ? this.headers.eq( selector ) : $();
+ },
+
+ _setupEvents: function( event ) {
+ var events = {
+ keydown: "_keydown"
+ };
+ if ( event ) {
+ $.each( event.split( " " ), function( index, eventName ) {
+ events[ eventName ] = "_eventHandler";
+ });
+ }
+
+ this._off( this.headers.add( this.headers.next() ) );
+ this._on( this.headers, events );
+ this._on( this.headers.next(), { keydown: "_panelKeyDown" });
+ this._hoverable( this.headers );
+ this._focusable( this.headers );
+ },
+
+ _eventHandler: function( event ) {
+ var options = this.options,
+ active = this.active,
+ clicked = $( event.currentTarget ),
+ clickedIsActive = clicked[ 0 ] === active[ 0 ],
+ collapsing = clickedIsActive && options.collapsible,
+ toShow = collapsing ? $() : clicked.next(),
+ toHide = active.next(),
+ eventData = {
+ oldHeader: active,
+ oldPanel: toHide,
+ newHeader: collapsing ? $() : clicked,
+ newPanel: toShow
+ };
+
+ event.preventDefault();
+
+ if (
+ // click on active header, but not collapsible
+ ( clickedIsActive && !options.collapsible ) ||
+ // allow canceling activation
+ ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+ return;
+ }
+
+ options.active = collapsing ? false : this.headers.index( clicked );
+
+ // when the call to ._toggle() comes after the class changes
+ // it causes a very odd bug in IE 8 (see #6720)
+ this.active = clickedIsActive ? $() : clicked;
+ this._toggle( eventData );
+
+ // switch classes
+ // corner classes on the previously active header stay after the animation
+ active.removeClass( "ui-accordion-header-active ui-state-active" );
+ if ( options.icons ) {
+ active.children( ".ui-accordion-header-icon" )
+ .removeClass( options.icons.activeHeader )
+ .addClass( options.icons.header );
+ }
+
+ if ( !clickedIsActive ) {
+ clicked
+ .removeClass( "ui-corner-all" )
+ .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
+ if ( options.icons ) {
+ clicked.children( ".ui-accordion-header-icon" )
+ .removeClass( options.icons.header )
+ .addClass( options.icons.activeHeader );
+ }
+
+ clicked
+ .next()
+ .addClass( "ui-accordion-content-active" );
+ }
+ },
+
+ _toggle: function( data ) {
+ var toShow = data.newPanel,
+ toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
+
+ // handle activating a panel during the animation for another activation
+ this.prevShow.add( this.prevHide ).stop( true, true );
+ this.prevShow = toShow;
+ this.prevHide = toHide;
+
+ if ( this.options.animate ) {
+ this._animate( toShow, toHide, data );
+ } else {
+ toHide.hide();
+ toShow.show();
+ this._toggleComplete( data );
+ }
+
+ toHide.attr({
+ "aria-hidden": "true"
+ });
+ toHide.prev().attr({
+ "aria-selected": "false",
+ "aria-expanded": "false"
+ });
+ // if we're switching panels, remove the old header from the tab order
+ // if we're opening from collapsed state, remove the previous header from the tab order
+ // if we're collapsing, then keep the collapsing header in the tab order
+ if ( toShow.length && toHide.length ) {
+ toHide.prev().attr({
+ "tabIndex": -1,
+ "aria-expanded": "false"
+ });
+ } else if ( toShow.length ) {
+ this.headers.filter(function() {
+ return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0;
+ })
+ .attr( "tabIndex", -1 );
+ }
+
+ toShow
+ .attr( "aria-hidden", "false" )
+ .prev()
+ .attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ });
+ },
+
+ _animate: function( toShow, toHide, data ) {
+ var total, easing, duration,
+ that = this,
+ adjust = 0,
+ boxSizing = toShow.css( "box-sizing" ),
+ down = toShow.length &&
+ ( !toHide.length || ( toShow.index() < toHide.index() ) ),
+ animate = this.options.animate || {},
+ options = down && animate.down || animate,
+ complete = function() {
+ that._toggleComplete( data );
+ };
+
+ if ( typeof options === "number" ) {
+ duration = options;
+ }
+ if ( typeof options === "string" ) {
+ easing = options;
+ }
+ // fall back from options to animation in case of partial down settings
+ easing = easing || options.easing || animate.easing;
+ duration = duration || options.duration || animate.duration;
+
+ if ( !toHide.length ) {
+ return toShow.animate( this.showProps, duration, easing, complete );
+ }
+ if ( !toShow.length ) {
+ return toHide.animate( this.hideProps, duration, easing, complete );
+ }
+
+ total = toShow.show().outerHeight();
+ toHide.animate( this.hideProps, {
+ duration: duration,
+ easing: easing,
+ step: function( now, fx ) {
+ fx.now = Math.round( now );
+ }
+ });
+ toShow
+ .hide()
+ .animate( this.showProps, {
+ duration: duration,
+ easing: easing,
+ complete: complete,
+ step: function( now, fx ) {
+ fx.now = Math.round( now );
+ if ( fx.prop !== "height" ) {
+ if ( boxSizing === "content-box" ) {
+ adjust += fx.now;
+ }
+ } else if ( that.options.heightStyle !== "content" ) {
+ fx.now = Math.round( total - toHide.outerHeight() - adjust );
+ adjust = 0;
+ }
+ }
+ });
+ },
+
+ _toggleComplete: function( data ) {
+ var toHide = data.oldPanel;
+
+ toHide
+ .removeClass( "ui-accordion-content-active" )
+ .prev()
+ .removeClass( "ui-corner-top" )
+ .addClass( "ui-corner-all" );
+
+ // Work around for rendering bug in IE (#5421)
+ if ( toHide.length ) {
+ toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;
+ }
+ this._trigger( "activate", null, data );
+ }
+});
+
+
+/*!
+ * jQuery UI Menu 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/menu/
+ */
+
+
+var menu = $.widget( "ui.menu", {
+ version: "1.11.4",
+ defaultElement: "<ul>",
+ delay: 300,
+ options: {
+ icons: {
+ submenu: "ui-icon-carat-1-e"
+ },
+ items: "> *",
+ menus: "ul",
+ position: {
+ my: "left-1 top",
+ at: "right top"
+ },
+ role: "menu",
+
+ // callbacks
+ blur: null,
+ focus: null,
+ select: null
+ },
+
+ _create: function() {
+ this.activeMenu = this.element;
+
+ // Flag used to prevent firing of the click handler
+ // as the event bubbles up through nested menus
+ this.mouseHandled = false;
+ this.element
+ .uniqueId()
+ .addClass( "ui-menu ui-widget ui-widget-content" )
+ .toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
+ .attr({
+ role: this.options.role,
+ tabIndex: 0
+ });
+
+ if ( this.options.disabled ) {
+ this.element
+ .addClass( "ui-state-disabled" )
+ .attr( "aria-disabled", "true" );
+ }
+
+ this._on({
+ // Prevent focus from sticking to links inside menu after clicking
+ // them (focus should always stay on UL during navigation).
+ "mousedown .ui-menu-item": function( event ) {
+ event.preventDefault();
+ },
+ "click .ui-menu-item": function( event ) {
+ var target = $( event.target );
+ if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
+ this.select( event );
+
+ // Only set the mouseHandled flag if the event will bubble, see #9469.
+ if ( !event.isPropagationStopped() ) {
+ this.mouseHandled = true;
+ }
+
+ // Open submenu on click
+ if ( target.has( ".ui-menu" ).length ) {
+ this.expand( event );
+ } else if ( !this.element.is( ":focus" ) && $( this.document[ 0 ].activeElement ).closest( ".ui-menu" ).length ) {
+
+ // Redirect focus to the menu
+ this.element.trigger( "focus", [ true ] );
+
+ // If the active item is on the top level, let it stay active.
+ // Otherwise, blur the active item since it is no longer visible.
+ if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
+ clearTimeout( this.timer );
+ }
+ }
+ }
+ },
+ "mouseenter .ui-menu-item": function( event ) {
+ // Ignore mouse events while typeahead is active, see #10458.
+ // Prevents focusing the wrong item when typeahead causes a scroll while the mouse
+ // is over an item in the menu
+ if ( this.previousFilter ) {
+ return;
+ }
+ var target = $( event.currentTarget );
+ // Remove ui-state-active class from siblings of the newly focused menu item
+ // to avoid a jump caused by adjacent elements both having a class with a border
+ target.siblings( ".ui-state-active" ).removeClass( "ui-state-active" );
+ this.focus( event, target );
+ },
+ mouseleave: "collapseAll",
+ "mouseleave .ui-menu": "collapseAll",
+ focus: function( event, keepActiveItem ) {
+ // If there's already an active item, keep it active
+ // If not, activate the first item
+ var item = this.active || this.element.find( this.options.items ).eq( 0 );
+
+ if ( !keepActiveItem ) {
+ this.focus( event, item );
+ }
+ },
+ blur: function( event ) {
+ this._delay(function() {
+ if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
+ this.collapseAll( event );
+ }
+ });
+ },
+ keydown: "_keydown"
+ });
+
+ this.refresh();
+
+ // Clicks outside of a menu collapse any open menus
+ this._on( this.document, {
+ click: function( event ) {
+ if ( this._closeOnDocumentClick( event ) ) {
+ this.collapseAll( event );
+ }
+
+ // Reset the mouseHandled flag
+ this.mouseHandled = false;
+ }
+ });
+ },
+
+ _destroy: function() {
+ // Destroy (sub)menus
+ this.element
+ .removeAttr( "aria-activedescendant" )
+ .find( ".ui-menu" ).addBack()
+ .removeClass( "ui-menu ui-widget ui-widget-content ui-menu-icons ui-front" )
+ .removeAttr( "role" )
+ .removeAttr( "tabIndex" )
+ .removeAttr( "aria-labelledby" )
+ .removeAttr( "aria-expanded" )
+ .removeAttr( "aria-hidden" )
+ .removeAttr( "aria-disabled" )
+ .removeUniqueId()
+ .show();
+
+ // Destroy menu items
+ this.element.find( ".ui-menu-item" )
+ .removeClass( "ui-menu-item" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-disabled" )
+ .removeUniqueId()
+ .removeClass( "ui-state-hover" )
+ .removeAttr( "tabIndex" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-haspopup" )
+ .children().each( function() {
+ var elem = $( this );
+ if ( elem.data( "ui-menu-submenu-carat" ) ) {
+ elem.remove();
+ }
+ });
+
+ // Destroy menu dividers
+ this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
+ },
+
+ _keydown: function( event ) {
+ var match, prev, character, skip,
+ preventDefault = true;
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.PAGE_UP:
+ this.previousPage( event );
+ break;
+ case $.ui.keyCode.PAGE_DOWN:
+ this.nextPage( event );
+ break;
+ case $.ui.keyCode.HOME:
+ this._move( "first", "first", event );
+ break;
+ case $.ui.keyCode.END:
+ this._move( "last", "last", event );
+ break;
+ case $.ui.keyCode.UP:
+ this.previous( event );
+ break;
+ case $.ui.keyCode.DOWN:
+ this.next( event );
+ break;
+ case $.ui.keyCode.LEFT:
+ this.collapse( event );
+ break;
+ case $.ui.keyCode.RIGHT:
+ if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+ this.expand( event );
+ }
+ break;
+ case $.ui.keyCode.ENTER:
+ case $.ui.keyCode.SPACE:
+ this._activate( event );
+ break;
+ case $.ui.keyCode.ESCAPE:
+ this.collapse( event );
+ break;
+ default:
+ preventDefault = false;
+ prev = this.previousFilter || "";
+ character = String.fromCharCode( event.keyCode );
+ skip = false;
+
+ clearTimeout( this.filterTimer );
+
+ if ( character === prev ) {
+ skip = true;
+ } else {
+ character = prev + character;
+ }
+
+ match = this._filterMenuItems( character );
+ match = skip && match.index( this.active.next() ) !== -1 ?
+ this.active.nextAll( ".ui-menu-item" ) :
+ match;
+
+ // If no matches on the current filter, reset to the last character pressed
+ // to move down the menu to the first item that starts with that character
+ if ( !match.length ) {
+ character = String.fromCharCode( event.keyCode );
+ match = this._filterMenuItems( character );
+ }
+
+ if ( match.length ) {
+ this.focus( event, match );
+ this.previousFilter = character;
+ this.filterTimer = this._delay(function() {
+ delete this.previousFilter;
+ }, 1000 );
+ } else {
+ delete this.previousFilter;
+ }
+ }
+
+ if ( preventDefault ) {
+ event.preventDefault();
+ }
+ },
+
+ _activate: function( event ) {
+ if ( !this.active.is( ".ui-state-disabled" ) ) {
+ if ( this.active.is( "[aria-haspopup='true']" ) ) {
+ this.expand( event );
+ } else {
+ this.select( event );
+ }
+ }
+ },
+
+ refresh: function() {
+ var menus, items,
+ that = this,
+ icon = this.options.icons.submenu,
+ submenus = this.element.find( this.options.menus );
+
+ this.element.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length );
+
+ // Initialize nested menus
+ submenus.filter( ":not(.ui-menu)" )
+ .addClass( "ui-menu ui-widget ui-widget-content ui-front" )
+ .hide()
+ .attr({
+ role: this.options.role,
+ "aria-hidden": "true",
+ "aria-expanded": "false"
+ })
+ .each(function() {
+ var menu = $( this ),
+ item = menu.parent(),
+ submenuCarat = $( "<span>" )
+ .addClass( "ui-menu-icon ui-icon " + icon )
+ .data( "ui-menu-submenu-carat", true );
+
+ item
+ .attr( "aria-haspopup", "true" )
+ .prepend( submenuCarat );
+ menu.attr( "aria-labelledby", item.attr( "id" ) );
+ });
+
+ menus = submenus.add( this.element );
+ items = menus.find( this.options.items );
+
+ // Initialize menu-items containing spaces and/or dashes only as dividers
+ items.not( ".ui-menu-item" ).each(function() {
+ var item = $( this );
+ if ( that._isDivider( item ) ) {
+ item.addClass( "ui-widget-content ui-menu-divider" );
+ }
+ });
+
+ // Don't refresh list items that are already adapted
+ items.not( ".ui-menu-item, .ui-menu-divider" )
+ .addClass( "ui-menu-item" )
+ .uniqueId()
+ .attr({
+ tabIndex: -1,
+ role: this._itemRole()
+ });
+
+ // Add aria-disabled attribute to any disabled menu item
+ items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+
+ // If the active item has been removed, blur the menu
+ if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+ this.blur();
+ }
+ },
+
+ _itemRole: function() {
+ return {
+ menu: "menuitem",
+ listbox: "option"
+ }[ this.options.role ];
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "icons" ) {
+ this.element.find( ".ui-menu-icon" )
+ .removeClass( this.options.icons.submenu )
+ .addClass( value.submenu );
+ }
+ if ( key === "disabled" ) {
+ this.element
+ .toggleClass( "ui-state-disabled", !!value )
+ .attr( "aria-disabled", value );
+ }
+ this._super( key, value );
+ },
+
+ focus: function( event, item ) {
+ var nested, focused;
+ this.blur( event, event && event.type === "focus" );
+
+ this._scrollIntoView( item );
+
+ this.active = item.first();
+ focused = this.active.addClass( "ui-state-focus" ).removeClass( "ui-state-active" );
+ // Only update aria-activedescendant if there's a role
+ // otherwise we assume focus is managed elsewhere
+ if ( this.options.role ) {
+ this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
+ }
+
+ // Highlight active parent menu item, if any
+ this.active
+ .parent()
+ .closest( ".ui-menu-item" )
+ .addClass( "ui-state-active" );
+
+ if ( event && event.type === "keydown" ) {
+ this._close();
+ } else {
+ this.timer = this._delay(function() {
+ this._close();
+ }, this.delay );
+ }
+
+ nested = item.children( ".ui-menu" );
+ if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {
+ this._startOpening(nested);
+ }
+ this.activeMenu = item.parent();
+
+ this._trigger( "focus", event, { item: item } );
+ },
+
+ _scrollIntoView: function( item ) {
+ var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+ if ( this._hasScroll() ) {
+ borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
+ paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
+ offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+ scroll = this.activeMenu.scrollTop();
+ elementHeight = this.activeMenu.height();
+ itemHeight = item.outerHeight();
+
+ if ( offset < 0 ) {
+ this.activeMenu.scrollTop( scroll + offset );
+ } else if ( offset + itemHeight > elementHeight ) {
+ this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+ }
+ }
+ },
+
+ blur: function( event, fromFocus ) {
+ if ( !fromFocus ) {
+ clearTimeout( this.timer );
+ }
+
+ if ( !this.active ) {
+ return;
+ }
+
+ this.active.removeClass( "ui-state-focus" );
+ this.active = null;
+
+ this._trigger( "blur", event, { item: this.active } );
+ },
+
+ _startOpening: function( submenu ) {
+ clearTimeout( this.timer );
+
+ // Don't open if already open fixes a Firefox bug that caused a .5 pixel
+ // shift in the submenu position when mousing over the carat icon
+ if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+ return;
+ }
+
+ this.timer = this._delay(function() {
+ this._close();
+ this._open( submenu );
+ }, this.delay );
+ },
+
+ _open: function( submenu ) {
+ var position = $.extend({
+ of: this.active
+ }, this.options.position );
+
+ clearTimeout( this.timer );
+ this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
+ .hide()
+ .attr( "aria-hidden", "true" );
+
+ submenu
+ .show()
+ .removeAttr( "aria-hidden" )
+ .attr( "aria-expanded", "true" )
+ .position( position );
+ },
+
+ collapseAll: function( event, all ) {
+ clearTimeout( this.timer );
+ this.timer = this._delay(function() {
+ // If we were passed an event, look for the submenu that contains the event
+ var currentMenu = all ? this.element :
+ $( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+
+ // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
+ if ( !currentMenu.length ) {
+ currentMenu = this.element;
+ }
+
+ this._close( currentMenu );
+
+ this.blur( event );
+ this.activeMenu = currentMenu;
+ }, this.delay );
+ },
+
+ // With no arguments, closes the currently active menu - if nothing is active
+ // it closes all menus. If passed an argument, it will search for menus BELOW
+ _close: function( startMenu ) {
+ if ( !startMenu ) {
+ startMenu = this.active ? this.active.parent() : this.element;
+ }
+
+ startMenu
+ .find( ".ui-menu" )
+ .hide()
+ .attr( "aria-hidden", "true" )
+ .attr( "aria-expanded", "false" )
+ .end()
+ .find( ".ui-state-active" ).not( ".ui-state-focus" )
+ .removeClass( "ui-state-active" );
+ },
+
+ _closeOnDocumentClick: function( event ) {
+ return !$( event.target ).closest( ".ui-menu" ).length;
+ },
+
+ _isDivider: function( item ) {
+
+ // Match hyphen, em dash, en dash
+ return !/[^\-\u2014\u2013\s]/.test( item.text() );
+ },
+
+ collapse: function( event ) {
+ var newItem = this.active &&
+ this.active.parent().closest( ".ui-menu-item", this.element );
+ if ( newItem && newItem.length ) {
+ this._close();
+ this.focus( event, newItem );
+ }
+ },
+
+ expand: function( event ) {
+ var newItem = this.active &&
+ this.active
+ .children( ".ui-menu " )
+ .find( this.options.items )
+ .first();
+
+ if ( newItem && newItem.length ) {
+ this._open( newItem.parent() );
+
+ // Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+ this._delay(function() {
+ this.focus( event, newItem );
+ });
+ }
+ },
+
+ next: function( event ) {
+ this._move( "next", "first", event );
+ },
+
+ previous: function( event ) {
+ this._move( "prev", "last", event );
+ },
+
+ isFirstItem: function() {
+ return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+ },
+
+ isLastItem: function() {
+ return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+ },
+
+ _move: function( direction, filter, event ) {
+ var next;
+ if ( this.active ) {
+ if ( direction === "first" || direction === "last" ) {
+ next = this.active
+ [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
+ .eq( -1 );
+ } else {
+ next = this.active
+ [ direction + "All" ]( ".ui-menu-item" )
+ .eq( 0 );
+ }
+ }
+ if ( !next || !next.length || !this.active ) {
+ next = this.activeMenu.find( this.options.items )[ filter ]();
+ }
+
+ this.focus( event, next );
+ },
+
+ nextPage: function( event ) {
+ var item, base, height;
+
+ if ( !this.active ) {
+ this.next( event );
+ return;
+ }
+ if ( this.isLastItem() ) {
+ return;
+ }
+ if ( this._hasScroll() ) {
+ base = this.active.offset().top;
+ height = this.element.height();
+ this.active.nextAll( ".ui-menu-item" ).each(function() {
+ item = $( this );
+ return item.offset().top - base - height < 0;
+ });
+
+ this.focus( event, item );
+ } else {
+ this.focus( event, this.activeMenu.find( this.options.items )
+ [ !this.active ? "first" : "last" ]() );
+ }
+ },
+
+ previousPage: function( event ) {
+ var item, base, height;
+ if ( !this.active ) {
+ this.next( event );
+ return;
+ }
+ if ( this.isFirstItem() ) {
+ return;
+ }
+ if ( this._hasScroll() ) {
+ base = this.active.offset().top;
+ height = this.element.height();
+ this.active.prevAll( ".ui-menu-item" ).each(function() {
+ item = $( this );
+ return item.offset().top - base + height > 0;
+ });
+
+ this.focus( event, item );
+ } else {
+ this.focus( event, this.activeMenu.find( this.options.items ).first() );
+ }
+ },
+
+ _hasScroll: function() {
+ return this.element.outerHeight() < this.element.prop( "scrollHeight" );
+ },
+
+ select: function( event ) {
+ // TODO: It should never be possible to not have an active item at this
+ // point, but the tests don't trigger mouseenter before click.
+ this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
+ var ui = { item: this.active };
+ if ( !this.active.has( ".ui-menu" ).length ) {
+ this.collapseAll( event, true );
+ }
+ this._trigger( "select", event, ui );
+ },
+
+ _filterMenuItems: function(character) {
+ var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ),
+ regex = new RegExp( "^" + escapedCharacter, "i" );
+
+ return this.activeMenu
+ .find( this.options.items )
+
+ // Only match on items, not dividers or other content (#10571)
+ .filter( ".ui-menu-item" )
+ .filter(function() {
+ return regex.test( $.trim( $( this ).text() ) );
+ });
+ }
+});
+
+
+/*!
+ * jQuery UI Autocomplete 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/autocomplete/
+ */
+
+
+$.widget( "ui.autocomplete", {
+ version: "1.11.4",
+ defaultElement: "<input>",
+ options: {
+ appendTo: null,
+ autoFocus: false,
+ delay: 300,
+ minLength: 1,
+ position: {
+ my: "left top",
+ at: "left bottom",
+ collision: "none"
+ },
+ source: null,
+
+ // callbacks
+ change: null,
+ close: null,
+ focus: null,
+ open: null,
+ response: null,
+ search: null,
+ select: null
+ },
+
+ requestIndex: 0,
+ pending: 0,
+
+ _create: function() {
+ // Some browsers only repeat keydown events, not keypress events,
+ // so we use the suppressKeyPress flag to determine if we've already
+ // handled the keydown event. #7269
+ // Unfortunately the code for & in keypress is the same as the up arrow,
+ // so we use the suppressKeyPressRepeat flag to avoid handling keypress
+ // events when we know the keydown event was used to modify the
+ // search term. #7799
+ var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
+ nodeName = this.element[ 0 ].nodeName.toLowerCase(),
+ isTextarea = nodeName === "textarea",
+ isInput = nodeName === "input";
+
+ this.isMultiLine =
+ // Textareas are always multi-line
+ isTextarea ? true :
+ // Inputs are always single-line, even if inside a contentEditable element
+ // IE also treats inputs as contentEditable
+ isInput ? false :
+ // All other element types are determined by whether or not they're contentEditable
+ this.element.prop( "isContentEditable" );
+
+ this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
+ this.isNewMenu = true;
+
+ this.element
+ .addClass( "ui-autocomplete-input" )
+ .attr( "autocomplete", "off" );
+
+ this._on( this.element, {
+ keydown: function( event ) {
+ if ( this.element.prop( "readOnly" ) ) {
+ suppressKeyPress = true;
+ suppressInput = true;
+ suppressKeyPressRepeat = true;
+ return;
+ }
+
+ suppressKeyPress = false;
+ suppressInput = false;
+ suppressKeyPressRepeat = false;
+ var keyCode = $.ui.keyCode;
+ switch ( event.keyCode ) {
+ case keyCode.PAGE_UP:
+ suppressKeyPress = true;
+ this._move( "previousPage", event );
+ break;
+ case keyCode.PAGE_DOWN:
+ suppressKeyPress = true;
+ this._move( "nextPage", event );
+ break;
+ case keyCode.UP:
+ suppressKeyPress = true;
+ this._keyEvent( "previous", event );
+ break;
+ case keyCode.DOWN:
+ suppressKeyPress = true;
+ this._keyEvent( "next", event );
+ break;
+ case keyCode.ENTER:
+ // when menu is open and has focus
+ if ( this.menu.active ) {
+ // #6055 - Opera still allows the keypress to occur
+ // which causes forms to submit
+ suppressKeyPress = true;
+ event.preventDefault();
+ this.menu.select( event );
+ }
+ break;
+ case keyCode.TAB:
+ if ( this.menu.active ) {
+ this.menu.select( event );
+ }
+ break;
+ case keyCode.ESCAPE:
+ if ( this.menu.element.is( ":visible" ) ) {
+ if ( !this.isMultiLine ) {
+ this._value( this.term );
+ }
+ this.close( event );
+ // Different browsers have different default behavior for escape
+ // Single press can mean undo or clear
+ // Double press in IE means clear the whole form
+ event.preventDefault();
+ }
+ break;
+ default:
+ suppressKeyPressRepeat = true;
+ // search timeout should be triggered before the input value is changed
+ this._searchTimeout( event );
+ break;
+ }
+ },
+ keypress: function( event ) {
+ if ( suppressKeyPress ) {
+ suppressKeyPress = false;
+ if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+ event.preventDefault();
+ }
+ return;
+ }
+ if ( suppressKeyPressRepeat ) {
+ return;
+ }
+
+ // replicate some key handlers to allow them to repeat in Firefox and Opera
+ var keyCode = $.ui.keyCode;
+ switch ( event.keyCode ) {
+ case keyCode.PAGE_UP:
+ this._move( "previousPage", event );
+ break;
+ case keyCode.PAGE_DOWN:
+ this._move( "nextPage", event );
+ break;
+ case keyCode.UP:
+ this._keyEvent( "previous", event );
+ break;
+ case keyCode.DOWN:
+ this._keyEvent( "next", event );
+ break;
+ }
+ },
+ input: function( event ) {
+ if ( suppressInput ) {
+ suppressInput = false;
+ event.preventDefault();
+ return;
+ }
+ this._searchTimeout( event );
+ },
+ focus: function() {
+ this.selectedItem = null;
+ this.previous = this._value();
+ },
+ blur: function( event ) {
+ if ( this.cancelBlur ) {
+ delete this.cancelBlur;
+ return;
+ }
+
+ clearTimeout( this.searching );
+ this.close( event );
+ this._change( event );
+ }
+ });
+
+ this._initSource();
+ this.menu = $( "<ul>" )
+ .addClass( "ui-autocomplete ui-front" )
+ .appendTo( this._appendTo() )
+ .menu({
+ // disable ARIA support, the live region takes care of that
+ role: null
+ })
+ .hide()
+ .menu( "instance" );
+
+ this._on( this.menu.element, {
+ mousedown: function( event ) {
+ // prevent moving focus out of the text field
+ event.preventDefault();
+
+ // IE doesn't prevent moving focus even with event.preventDefault()
+ // so we set a flag to know when we should ignore the blur event
+ this.cancelBlur = true;
+ this._delay(function() {
+ delete this.cancelBlur;
+ });
+
+ // clicking on the scrollbar causes focus to shift to the body
+ // but we can't detect a mouseup or a click immediately afterward
+ // so we have to track the next mousedown and close the menu if
+ // the user clicks somewhere outside of the autocomplete
+ var menuElement = this.menu.element[ 0 ];
+ if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
+ this._delay(function() {
+ var that = this;
+ this.document.one( "mousedown", function( event ) {
+ if ( event.target !== that.element[ 0 ] &&
+ event.target !== menuElement &&
+ !$.contains( menuElement, event.target ) ) {
+ that.close();
+ }
+ });
+ });
+ }
+ },
+ menufocus: function( event, ui ) {
+ var label, item;
+ // support: Firefox
+ // Prevent accidental activation of menu items in Firefox (#7024 #9118)
+ if ( this.isNewMenu ) {
+ this.isNewMenu = false;
+ if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
+ this.menu.blur();
+
+ this.document.one( "mousemove", function() {
+ $( event.target ).trigger( event.originalEvent );
+ });
+
+ return;
+ }
+ }
+
+ item = ui.item.data( "ui-autocomplete-item" );
+ if ( false !== this._trigger( "focus", event, { item: item } ) ) {
+ // use value to match what will end up in the input, if it was a key event
+ if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
+ this._value( item.value );
+ }
+ }
+
+ // Announce the value in the liveRegion
+ label = ui.item.attr( "aria-label" ) || item.value;
+ if ( label && $.trim( label ).length ) {
+ this.liveRegion.children().hide();
+ $( "<div>" ).text( label ).appendTo( this.liveRegion );
+ }
+ },
+ menuselect: function( event, ui ) {
+ var item = ui.item.data( "ui-autocomplete-item" ),
+ previous = this.previous;
+
+ // only trigger when focus was lost (click on menu)
+ if ( this.element[ 0 ] !== this.document[ 0 ].activeElement ) {
+ this.element.focus();
+ this.previous = previous;
+ // #6109 - IE triggers two focus events and the second
+ // is asynchronous, so we need to reset the previous
+ // term synchronously and asynchronously :-(
+ this._delay(function() {
+ this.previous = previous;
+ this.selectedItem = item;
+ });
+ }
+
+ if ( false !== this._trigger( "select", event, { item: item } ) ) {
+ this._value( item.value );
+ }
+ // reset the term after the select event
+ // this allows custom select handling to work properly
+ this.term = this._value();
+
+ this.close( event );
+ this.selectedItem = item;
+ }
+ });
+
+ this.liveRegion = $( "<span>", {
+ role: "status",
+ "aria-live": "assertive",
+ "aria-relevant": "additions"
+ })
+ .addClass( "ui-helper-hidden-accessible" )
+ .appendTo( this.document[ 0 ].body );
+
+ // turning off autocomplete prevents the browser from remembering the
+ // value when navigating through history, so we re-enable autocomplete
+ // if the page is unloaded before the widget is destroyed. #7790
+ this._on( this.window, {
+ beforeunload: function() {
+ this.element.removeAttr( "autocomplete" );
+ }
+ });
+ },
+
+ _destroy: function() {
+ clearTimeout( this.searching );
+ this.element
+ .removeClass( "ui-autocomplete-input" )
+ .removeAttr( "autocomplete" );
+ this.menu.element.remove();
+ this.liveRegion.remove();
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+ if ( key === "source" ) {
+ this._initSource();
+ }
+ if ( key === "appendTo" ) {
+ this.menu.element.appendTo( this._appendTo() );
+ }
+ if ( key === "disabled" && value && this.xhr ) {
+ this.xhr.abort();
+ }
+ },
+
+ _appendTo: function() {
+ var element = this.options.appendTo;
+
+ if ( element ) {
+ element = element.jquery || element.nodeType ?
+ $( element ) :
+ this.document.find( element ).eq( 0 );
+ }
+
+ if ( !element || !element[ 0 ] ) {
+ element = this.element.closest( ".ui-front" );
+ }
+
+ if ( !element.length ) {
+ element = this.document[ 0 ].body;
+ }
+
+ return element;
+ },
+
+ _initSource: function() {
+ var array, url,
+ that = this;
+ if ( $.isArray( this.options.source ) ) {
+ array = this.options.source;
+ this.source = function( request, response ) {
+ response( $.ui.autocomplete.filter( array, request.term ) );
+ };
+ } else if ( typeof this.options.source === "string" ) {
+ url = this.options.source;
+ this.source = function( request, response ) {
+ if ( that.xhr ) {
+ that.xhr.abort();
+ }
+ that.xhr = $.ajax({
+ url: url,
+ data: request,
+ dataType: "json",
+ success: function( data ) {
+ response( data );
+ },
+ error: function() {
+ response([]);
+ }
+ });
+ };
+ } else {
+ this.source = this.options.source;
+ }
+ },
+
+ _searchTimeout: function( event ) {
+ clearTimeout( this.searching );
+ this.searching = this._delay(function() {
+
+ // Search if the value has changed, or if the user retypes the same value (see #7434)
+ var equalValues = this.term === this._value(),
+ menuVisible = this.menu.element.is( ":visible" ),
+ modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;
+
+ if ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {
+ this.selectedItem = null;
+ this.search( null, event );
+ }
+ }, this.options.delay );
+ },
+
+ search: function( value, event ) {
+ value = value != null ? value : this._value();
+
+ // always save the actual value, not the one passed as an argument
+ this.term = this._value();
+
+ if ( value.length < this.options.minLength ) {
+ return this.close( event );
+ }
+
+ if ( this._trigger( "search", event ) === false ) {
+ return;
+ }
+
+ return this._search( value );
+ },
+
+ _search: function( value ) {
+ this.pending++;
+ this.element.addClass( "ui-autocomplete-loading" );
+ this.cancelSearch = false;
+
+ this.source( { term: value }, this._response() );
+ },
+
+ _response: function() {
+ var index = ++this.requestIndex;
+
+ return $.proxy(function( content ) {
+ if ( index === this.requestIndex ) {
+ this.__response( content );
+ }
+
+ this.pending--;
+ if ( !this.pending ) {
+ this.element.removeClass( "ui-autocomplete-loading" );
+ }
+ }, this );
+ },
+
+ __response: function( content ) {
+ if ( content ) {
+ content = this._normalize( content );
+ }
+ this._trigger( "response", null, { content: content } );
+ if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
+ this._suggest( content );
+ this._trigger( "open" );
+ } else {
+ // use ._close() instead of .close() so we don't cancel future searches
+ this._close();
+ }
+ },
+
+ close: function( event ) {
+ this.cancelSearch = true;
+ this._close( event );
+ },
+
+ _close: function( event ) {
+ if ( this.menu.element.is( ":visible" ) ) {
+ this.menu.element.hide();
+ this.menu.blur();
+ this.isNewMenu = true;
+ this._trigger( "close", event );
+ }
+ },
+
+ _change: function( event ) {
+ if ( this.previous !== this._value() ) {
+ this._trigger( "change", event, { item: this.selectedItem } );
+ }
+ },
+
+ _normalize: function( items ) {
+ // assume all items have the right format when the first item is complete
+ if ( items.length && items[ 0 ].label && items[ 0 ].value ) {
+ return items;
+ }
+ return $.map( items, function( item ) {
+ if ( typeof item === "string" ) {
+ return {
+ label: item,
+ value: item
+ };
+ }
+ return $.extend( {}, item, {
+ label: item.label || item.value,
+ value: item.value || item.label
+ });
+ });
+ },
+
+ _suggest: function( items ) {
+ var ul = this.menu.element.empty();
+ this._renderMenu( ul, items );
+ this.isNewMenu = true;
+ this.menu.refresh();
+
+ // size and position menu
+ ul.show();
+ this._resizeMenu();
+ ul.position( $.extend({
+ of: this.element
+ }, this.options.position ) );
+
+ if ( this.options.autoFocus ) {
+ this.menu.next();
+ }
+ },
+
+ _resizeMenu: function() {
+ var ul = this.menu.element;
+ ul.outerWidth( Math.max(
+ // Firefox wraps long text (possibly a rounding bug)
+ // so we add 1px to avoid the wrapping (#7513)
+ ul.width( "" ).outerWidth() + 1,
+ this.element.outerWidth()
+ ) );
+ },
+
+ _renderMenu: function( ul, items ) {
+ var that = this;
+ $.each( items, function( index, item ) {
+ that._renderItemData( ul, item );
+ });
+ },
+
+ _renderItemData: function( ul, item ) {
+ return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
+ },
+
+ _renderItem: function( ul, item ) {
+ return $( "<li>" ).text( item.label ).appendTo( ul );
+ },
+
+ _move: function( direction, event ) {
+ if ( !this.menu.element.is( ":visible" ) ) {
+ this.search( null, event );
+ return;
+ }
+ if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
+ this.menu.isLastItem() && /^next/.test( direction ) ) {
+
+ if ( !this.isMultiLine ) {
+ this._value( this.term );
+ }
+
+ this.menu.blur();
+ return;
+ }
+ this.menu[ direction ]( event );
+ },
+
+ widget: function() {
+ return this.menu.element;
+ },
+
+ _value: function() {
+ return this.valueMethod.apply( this.element, arguments );
+ },
+
+ _keyEvent: function( keyEvent, event ) {
+ if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+ this._move( keyEvent, event );
+
+ // prevents moving cursor to beginning/end of the text field in some browsers
+ event.preventDefault();
+ }
+ }
+});
+
+$.extend( $.ui.autocomplete, {
+ escapeRegex: function( value ) {
+ return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
+ },
+ filter: function( array, term ) {
+ var matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), "i" );
+ return $.grep( array, function( value ) {
+ return matcher.test( value.label || value.value || value );
+ });
+ }
+});
+
+// live region extension, adding a `messages` option
+// NOTE: This is an experimental API. We are still investigating
+// a full solution for string manipulation and internationalization.
+$.widget( "ui.autocomplete", $.ui.autocomplete, {
+ options: {
+ messages: {
+ noResults: "No search results.",
+ results: function( amount ) {
+ return amount + ( amount > 1 ? " results are" : " result is" ) +
+ " available, use up and down arrow keys to navigate.";
+ }
+ }
+ },
+
+ __response: function( content ) {
+ var message;
+ this._superApply( arguments );
+ if ( this.options.disabled || this.cancelSearch ) {
+ return;
+ }
+ if ( content && content.length ) {
+ message = this.options.messages.results( content.length );
+ } else {
+ message = this.options.messages.noResults;
+ }
+ this.liveRegion.children().hide();
+ $( "<div>" ).text( message ).appendTo( this.liveRegion );
+ }
+});
+
+var autocomplete = $.ui.autocomplete;
+
+
+/*!
+ * jQuery UI Button 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/button/
+ */
+
+
+var lastActive,
+ baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
+ typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+ formResetHandler = function() {
+ var form = $( this );
+ setTimeout(function() {
+ form.find( ":ui-button" ).button( "refresh" );
+ }, 1 );
+ },
+ radioGroup = function( radio ) {
+ var name = radio.name,
+ form = radio.form,
+ radios = $( [] );
+ if ( name ) {
+ name = name.replace( /'/g, "\\'" );
+ if ( form ) {
+ radios = $( form ).find( "[name='" + name + "'][type=radio]" );
+ } else {
+ radios = $( "[name='" + name + "'][type=radio]", radio.ownerDocument )
+ .filter(function() {
+ return !this.form;
+ });
+ }
+ }
+ return radios;
+ };
+
+$.widget( "ui.button", {
+ version: "1.11.4",
+ defaultElement: "<button>",
+ options: {
+ disabled: null,
+ text: true,
+ label: null,
+ icons: {
+ primary: null,
+ secondary: null
+ }
+ },
+ _create: function() {
+ this.element.closest( "form" )
+ .unbind( "reset" + this.eventNamespace )
+ .bind( "reset" + this.eventNamespace, formResetHandler );
+
+ if ( typeof this.options.disabled !== "boolean" ) {
+ this.options.disabled = !!this.element.prop( "disabled" );
+ } else {
+ this.element.prop( "disabled", this.options.disabled );
+ }
+
+ this._determineButtonType();
+ this.hasTitle = !!this.buttonElement.attr( "title" );
+
+ var that = this,
+ options = this.options,
+ toggleButton = this.type === "checkbox" || this.type === "radio",
+ activeClass = !toggleButton ? "ui-state-active" : "";
+
+ if ( options.label === null ) {
+ options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
+ }
+
+ this._hoverable( this.buttonElement );
+
+ this.buttonElement
+ .addClass( baseClasses )
+ .attr( "role", "button" )
+ .bind( "mouseenter" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return;
+ }
+ if ( this === lastActive ) {
+ $( this ).addClass( "ui-state-active" );
+ }
+ })
+ .bind( "mouseleave" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return;
+ }
+ $( this ).removeClass( activeClass );
+ })
+ .bind( "click" + this.eventNamespace, function( event ) {
+ if ( options.disabled ) {
+ event.preventDefault();
+ event.stopImmediatePropagation();
+ }
+ });
+
+ // Can't use _focusable() because the element that receives focus
+ // and the element that gets the ui-state-focus class are different
+ this._on({
+ focus: function() {
+ this.buttonElement.addClass( "ui-state-focus" );
+ },
+ blur: function() {
+ this.buttonElement.removeClass( "ui-state-focus" );
+ }
+ });
+
+ if ( toggleButton ) {
+ this.element.bind( "change" + this.eventNamespace, function() {
+ that.refresh();
+ });
+ }
+
+ if ( this.type === "checkbox" ) {
+ this.buttonElement.bind( "click" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ });
+ } else if ( this.type === "radio" ) {
+ this.buttonElement.bind( "click" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).addClass( "ui-state-active" );
+ that.buttonElement.attr( "aria-pressed", "true" );
+
+ var radio = that.element[ 0 ];
+ radioGroup( radio )
+ .not( radio )
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ });
+ } else {
+ this.buttonElement
+ .bind( "mousedown" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).addClass( "ui-state-active" );
+ lastActive = this;
+ that.document.one( "mouseup", function() {
+ lastActive = null;
+ });
+ })
+ .bind( "mouseup" + this.eventNamespace, function() {
+ if ( options.disabled ) {
+ return false;
+ }
+ $( this ).removeClass( "ui-state-active" );
+ })
+ .bind( "keydown" + this.eventNamespace, function(event) {
+ if ( options.disabled ) {
+ return false;
+ }
+ if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
+ $( this ).addClass( "ui-state-active" );
+ }
+ })
+ // see #8559, we bind to blur here in case the button element loses
+ // focus between keydown and keyup, it would be left in an "active" state
+ .bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
+ $( this ).removeClass( "ui-state-active" );
+ });
+
+ if ( this.buttonElement.is("a") ) {
+ this.buttonElement.keyup(function(event) {
+ if ( event.keyCode === $.ui.keyCode.SPACE ) {
+ // TODO pass through original event correctly (just as 2nd argument doesn't work)
+ $( this ).click();
+ }
+ });
+ }
+ }
+
+ this._setOption( "disabled", options.disabled );
+ this._resetButton();
+ },
+
+ _determineButtonType: function() {
+ var ancestor, labelSelector, checked;
+
+ if ( this.element.is("[type=checkbox]") ) {
+ this.type = "checkbox";
+ } else if ( this.element.is("[type=radio]") ) {
+ this.type = "radio";
+ } else if ( this.element.is("input") ) {
+ this.type = "input";
+ } else {
+ this.type = "button";
+ }
+
+ if ( this.type === "checkbox" || this.type === "radio" ) {
+ // we don't search against the document in case the element
+ // is disconnected from the DOM
+ ancestor = this.element.parents().last();
+ labelSelector = "label[for='" + this.element.attr("id") + "']";
+ this.buttonElement = ancestor.find( labelSelector );
+ if ( !this.buttonElement.length ) {
+ ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+ this.buttonElement = ancestor.filter( labelSelector );
+ if ( !this.buttonElement.length ) {
+ this.buttonElement = ancestor.find( labelSelector );
+ }
+ }
+ this.element.addClass( "ui-helper-hidden-accessible" );
+
+ checked = this.element.is( ":checked" );
+ if ( checked ) {
+ this.buttonElement.addClass( "ui-state-active" );
+ }
+ this.buttonElement.prop( "aria-pressed", checked );
+ } else {
+ this.buttonElement = this.element;
+ }
+ },
+
+ widget: function() {
+ return this.buttonElement;
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-helper-hidden-accessible" );
+ this.buttonElement
+ .removeClass( baseClasses + " ui-state-active " + typeClasses )
+ .removeAttr( "role" )
+ .removeAttr( "aria-pressed" )
+ .html( this.buttonElement.find(".ui-button-text").html() );
+
+ if ( !this.hasTitle ) {
+ this.buttonElement.removeAttr( "title" );
+ }
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+ if ( key === "disabled" ) {
+ this.widget().toggleClass( "ui-state-disabled", !!value );
+ this.element.prop( "disabled", !!value );
+ if ( value ) {
+ if ( this.type === "checkbox" || this.type === "radio" ) {
+ this.buttonElement.removeClass( "ui-state-focus" );
+ } else {
+ this.buttonElement.removeClass( "ui-state-focus ui-state-active" );
+ }
+ }
+ return;
+ }
+ this._resetButton();
+ },
+
+ refresh: function() {
+ //See #8237 & #8828
+ var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
+
+ if ( isDisabled !== this.options.disabled ) {
+ this._setOption( "disabled", isDisabled );
+ }
+ if ( this.type === "radio" ) {
+ radioGroup( this.element[0] ).each(function() {
+ if ( $( this ).is( ":checked" ) ) {
+ $( this ).button( "widget" )
+ .addClass( "ui-state-active" )
+ .attr( "aria-pressed", "true" );
+ } else {
+ $( this ).button( "widget" )
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ }
+ });
+ } else if ( this.type === "checkbox" ) {
+ if ( this.element.is( ":checked" ) ) {
+ this.buttonElement
+ .addClass( "ui-state-active" )
+ .attr( "aria-pressed", "true" );
+ } else {
+ this.buttonElement
+ .removeClass( "ui-state-active" )
+ .attr( "aria-pressed", "false" );
+ }
+ }
+ },
+
+ _resetButton: function() {
+ if ( this.type === "input" ) {
+ if ( this.options.label ) {
+ this.element.val( this.options.label );
+ }
+ return;
+ }
+ var buttonElement = this.buttonElement.removeClass( typeClasses ),
+ buttonText = $( "<span></span>", this.document[0] )
+ .addClass( "ui-button-text" )
+ .html( this.options.label )
+ .appendTo( buttonElement.empty() )
+ .text(),
+ icons = this.options.icons,
+ multipleIcons = icons.primary && icons.secondary,
+ buttonClasses = [];
+
+ if ( icons.primary || icons.secondary ) {
+ if ( this.options.text ) {
+ buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
+ }
+
+ if ( icons.primary ) {
+ buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
+ }
+
+ if ( icons.secondary ) {
+ buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
+ }
+
+ if ( !this.options.text ) {
+ buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
+
+ if ( !this.hasTitle ) {
+ buttonElement.attr( "title", $.trim( buttonText ) );
+ }
+ }
+ } else {
+ buttonClasses.push( "ui-button-text-only" );
+ }
+ buttonElement.addClass( buttonClasses.join( " " ) );
+ }
+});
+
+$.widget( "ui.buttonset", {
+ version: "1.11.4",
+ options: {
+ items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
+ },
+
+ _create: function() {
+ this.element.addClass( "ui-buttonset" );
+ },
+
+ _init: function() {
+ this.refresh();
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "disabled" ) {
+ this.buttons.button( "option", key, value );
+ }
+
+ this._super( key, value );
+ },
+
+ refresh: function() {
+ var rtl = this.element.css( "direction" ) === "rtl",
+ allButtons = this.element.find( this.options.items ),
+ existingButtons = allButtons.filter( ":ui-button" );
+
+ // Initialize new buttons
+ allButtons.not( ":ui-button" ).button();
+
+ // Refresh existing buttons
+ existingButtons.button( "refresh" );
+
+ this.buttons = allButtons
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
+ .filter( ":first" )
+ .addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
+ .end()
+ .filter( ":last" )
+ .addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
+ .end()
+ .end();
+ },
+
+ _destroy: function() {
+ this.element.removeClass( "ui-buttonset" );
+ this.buttons
+ .map(function() {
+ return $( this ).button( "widget" )[ 0 ];
+ })
+ .removeClass( "ui-corner-left ui-corner-right" )
+ .end()
+ .button( "destroy" );
+ }
+});
+
+var button = $.ui.button;
+
+
+/*!
+ * jQuery UI Datepicker 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/datepicker/
+ */
+
+
+$.extend($.ui, { datepicker: { version: "1.11.4" } });
+
+var datepicker_instActive;
+
+function datepicker_getZindex( elem ) {
+ var position, value;
+ while ( elem.length && elem[ 0 ] !== document ) {
+ // Ignore z-index if position is set to a value where z-index is ignored by the browser
+ // This makes behavior of this function consistent across browsers
+ // WebKit always returns auto if the element is positioned
+ position = elem.css( "position" );
+ if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+ // IE returns 0 when zIndex is not specified
+ // other browsers return a string
+ // we ignore the case of nested elements with an explicit value of 0
+ // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+ value = parseInt( elem.css( "zIndex" ), 10 );
+ if ( !isNaN( value ) && value !== 0 ) {
+ return value;
+ }
+ }
+ elem = elem.parent();
+ }
+
+ return 0;
+}
+/* Date picker manager.
+ Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+ Settings for (groups of) date pickers are maintained in an instance object,
+ allowing multiple different settings on the same page. */
+
+function Datepicker() {
+ this._curInst = null; // The current instance in use
+ this._keyEvent = false; // If the last event was a key event
+ this._disabledInputs = []; // List of date picker inputs that have been disabled
+ this._datepickerShowing = false; // True if the popup picker is showing , false if not
+ this._inDialog = false; // True if showing within a "dialog", false if not
+ this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
+ this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
+ this._appendClass = "ui-datepicker-append"; // The name of the append marker class
+ this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
+ this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
+ this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
+ this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
+ this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
+ this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
+ this.regional = []; // Available regional settings, indexed by language code
+ this.regional[""] = { // Default regional settings
+ closeText: "Done", // Display text for close link
+ prevText: "Prev", // Display text for previous month link
+ nextText: "Next", // Display text for next month link
+ currentText: "Today", // Display text for current month link
+ monthNames: ["January","February","March","April","May","June",
+ "July","August","September","October","November","December"], // Names of months for drop-down and formatting
+ monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
+ dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
+ dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
+ dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
+ weekHeader: "Wk", // Column header for week of the year
+ dateFormat: "mm/dd/yy", // See format options on parseDate
+ firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+ isRTL: false, // True if right-to-left language, false if left-to-right
+ showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+ yearSuffix: "" // Additional text to append to the year in the month headers
+ };
+ this._defaults = { // Global defaults for all the date picker instances
+ showOn: "focus", // "focus" for popup on focus,
+ // "button" for trigger button, or "both" for either
+ showAnim: "fadeIn", // Name of jQuery animation for popup
+ showOptions: {}, // Options for enhanced animations
+ defaultDate: null, // Used when field is blank: actual date,
+ // +/-number for offset from today, null for today
+ appendText: "", // Display text following the input box, e.g. showing the format
+ buttonText: "...", // Text for trigger button
+ buttonImage: "", // URL for trigger button image
+ buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+ hideIfNoPrevNext: false, // True to hide next/previous month links
+ // if not applicable, false to just disable them
+ navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+ gotoCurrent: false, // True if today link goes back to current selection instead
+ changeMonth: false, // True if month can be selected directly, false if only prev/next
+ changeYear: false, // True if year can be selected directly, false if only prev/next
+ yearRange: "c-10:c+10", // Range of years to display in drop-down,
+ // either relative to today's year (-nn:+nn), relative to currently displayed year
+ // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+ showOtherMonths: false, // True to show dates in other months, false to leave blank
+ selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+ showWeek: false, // True to show week of the year, false to not show it
+ calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+ // takes a Date and returns the number of the week for it
+ shortYearCutoff: "+10", // Short year values < this are in the current century,
+ // > this are in the previous century,
+ // string value starting with "+" for current year + value
+ minDate: null, // The earliest selectable date, or null for no limit
+ maxDate: null, // The latest selectable date, or null for no limit
+ duration: "fast", // Duration of display/closure
+ beforeShowDay: null, // Function that takes a date and returns an array with
+ // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
+ // [2] = cell title (optional), e.g. $.datepicker.noWeekends
+ beforeShow: null, // Function that takes an input field and
+ // returns a set of custom settings for the date picker
+ onSelect: null, // Define a callback function when a date is selected
+ onChangeMonthYear: null, // Define a callback function when the month or year is changed
+ onClose: null, // Define a callback function when the datepicker is closed
+ numberOfMonths: 1, // Number of months to show at a time
+ showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+ stepMonths: 1, // Number of months to step back/forward
+ stepBigMonths: 12, // Number of months to step back/forward for the big links
+ altField: "", // Selector for an alternate field to store selected dates into
+ altFormat: "", // The date format to use for the alternate field
+ constrainInput: true, // The input is constrained by the current date format
+ showButtonPanel: false, // True to show button panel, false to not show it
+ autoSize: false, // True to size the input for the date format, false to leave as is
+ disabled: false // The initial disabled state
+ };
+ $.extend(this._defaults, this.regional[""]);
+ this.regional.en = $.extend( true, {}, this.regional[ "" ]);
+ this.regional[ "en-US" ] = $.extend( true, {}, this.regional.en );
+ this.dpDiv = datepicker_bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
+}
+
+$.extend(Datepicker.prototype, {
+ /* Class name added to elements to indicate already configured with a date picker. */
+ markerClassName: "hasDatepicker",
+
+ //Keep track of the maximum number of rows displayed (see #7043)
+ maxRows: 4,
+
+ // TODO rename to "widget" when switching to widget factory
+ _widgetDatepicker: function() {
+ return this.dpDiv;
+ },
+
+ /* Override the default settings for all instances of the date picker.
+ * @param settings object - the new settings to use as defaults (anonymous object)
+ * @return the manager object
+ */
+ setDefaults: function(settings) {
+ datepicker_extendRemove(this._defaults, settings || {});
+ return this;
+ },
+
+ /* Attach the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param settings object - the new settings to use for this date picker instance (anonymous)
+ */
+ _attachDatepicker: function(target, settings) {
+ var nodeName, inline, inst;
+ nodeName = target.nodeName.toLowerCase();
+ inline = (nodeName === "div" || nodeName === "span");
+ if (!target.id) {
+ this.uuid += 1;
+ target.id = "dp" + this.uuid;
+ }
+ inst = this._newInst($(target), inline);
+ inst.settings = $.extend({}, settings || {});
+ if (nodeName === "input") {
+ this._connectDatepicker(target, inst);
+ } else if (inline) {
+ this._inlineDatepicker(target, inst);
+ }
+ },
+
+ /* Create a new instance object. */
+ _newInst: function(target, inline) {
+ var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
+ return {id: id, input: target, // associated target
+ selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+ drawMonth: 0, drawYear: 0, // month being drawn
+ inline: inline, // is datepicker inline or not
+ dpDiv: (!inline ? this.dpDiv : // presentation div
+ datepicker_bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
+ },
+
+ /* Attach the date picker to an input field. */
+ _connectDatepicker: function(target, inst) {
+ var input = $(target);
+ inst.append = $([]);
+ inst.trigger = $([]);
+ if (input.hasClass(this.markerClassName)) {
+ return;
+ }
+ this._attachments(input, inst);
+ input.addClass(this.markerClassName).keydown(this._doKeyDown).
+ keypress(this._doKeyPress).keyup(this._doKeyUp);
+ this._autoSize(inst);
+ $.data(target, "datepicker", inst);
+ //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+ if( inst.settings.disabled ) {
+ this._disableDatepicker( target );
+ }
+ },
+
+ /* Make attachments based on settings. */
+ _attachments: function(input, inst) {
+ var showOn, buttonText, buttonImage,
+ appendText = this._get(inst, "appendText"),
+ isRTL = this._get(inst, "isRTL");
+
+ if (inst.append) {
+ inst.append.remove();
+ }
+ if (appendText) {
+ inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
+ input[isRTL ? "before" : "after"](inst.append);
+ }
+
+ input.unbind("focus", this._showDatepicker);
+
+ if (inst.trigger) {
+ inst.trigger.remove();
+ }
+
+ showOn = this._get(inst, "showOn");
+ if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
+ input.focus(this._showDatepicker);
+ }
+ if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
+ buttonText = this._get(inst, "buttonText");
+ buttonImage = this._get(inst, "buttonImage");
+ inst.trigger = $(this._get(inst, "buttonImageOnly") ?
+ $("<img/>").addClass(this._triggerClass).
+ attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
+ $("<button type='button'></button>").addClass(this._triggerClass).
+ html(!buttonImage ? buttonText : $("<img/>").attr(
+ { src:buttonImage, alt:buttonText, title:buttonText })));
+ input[isRTL ? "before" : "after"](inst.trigger);
+ inst.trigger.click(function() {
+ if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
+ $.datepicker._hideDatepicker();
+ } else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
+ $.datepicker._hideDatepicker();
+ $.datepicker._showDatepicker(input[0]);
+ } else {
+ $.datepicker._showDatepicker(input[0]);
+ }
+ return false;
+ });
+ }
+ },
+
+ /* Apply the maximum length for the date format. */
+ _autoSize: function(inst) {
+ if (this._get(inst, "autoSize") && !inst.inline) {
+ var findMax, max, maxI, i,
+ date = new Date(2009, 12 - 1, 20), // Ensure double digits
+ dateFormat = this._get(inst, "dateFormat");
+
+ if (dateFormat.match(/[DM]/)) {
+ findMax = function(names) {
+ max = 0;
+ maxI = 0;
+ for (i = 0; i < names.length; i++) {
+ if (names[i].length > max) {
+ max = names[i].length;
+ maxI = i;
+ }
+ }
+ return maxI;
+ };
+ date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
+ "monthNames" : "monthNamesShort"))));
+ date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
+ "dayNames" : "dayNamesShort"))) + 20 - date.getDay());
+ }
+ inst.input.attr("size", this._formatDate(inst, date).length);
+ }
+ },
+
+ /* Attach an inline date picker to a div. */
+ _inlineDatepicker: function(target, inst) {
+ var divSpan = $(target);
+ if (divSpan.hasClass(this.markerClassName)) {
+ return;
+ }
+ divSpan.addClass(this.markerClassName).append(inst.dpDiv);
+ $.data(target, "datepicker", inst);
+ this._setDate(inst, this._getDefaultDate(inst), true);
+ this._updateDatepicker(inst);
+ this._updateAlternate(inst);
+ //If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+ if( inst.settings.disabled ) {
+ this._disableDatepicker( target );
+ }
+ // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+ // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+ inst.dpDiv.css( "display", "block" );
+ },
+
+ /* Pop-up the date picker in a "dialog" box.
+ * @param input element - ignored
+ * @param date string or Date - the initial date to display
+ * @param onSelect function - the function to call when a date is selected
+ * @param settings object - update the dialog date picker instance's settings (anonymous object)
+ * @param pos int[2] - coordinates for the dialog's position within the screen or
+ * event - with x/y coordinates or
+ * leave empty for default (screen centre)
+ * @return the manager object
+ */
+ _dialogDatepicker: function(input, date, onSelect, settings, pos) {
+ var id, browserWidth, browserHeight, scrollX, scrollY,
+ inst = this._dialogInst; // internal instance
+
+ if (!inst) {
+ this.uuid += 1;
+ id = "dp" + this.uuid;
+ this._dialogInput = $("<input type='text' id='" + id +
+ "' style='position: absolute; top: -100px; width: 0px;'/>");
+ this._dialogInput.keydown(this._doKeyDown);
+ $("body").append(this._dialogInput);
+ inst = this._dialogInst = this._newInst(this._dialogInput, false);
+ inst.settings = {};
+ $.data(this._dialogInput[0], "datepicker", inst);
+ }
+ datepicker_extendRemove(inst.settings, settings || {});
+ date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
+ this._dialogInput.val(date);
+
+ this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+ if (!this._pos) {
+ browserWidth = document.documentElement.clientWidth;
+ browserHeight = document.documentElement.clientHeight;
+ scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+ scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+ this._pos = // should use actual width/height below
+ [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+ }
+
+ // move input on screen for focus, but hidden behind dialog
+ this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
+ inst.settings.onSelect = onSelect;
+ this._inDialog = true;
+ this.dpDiv.addClass(this._dialogClass);
+ this._showDatepicker(this._dialogInput[0]);
+ if ($.blockUI) {
+ $.blockUI(this.dpDiv);
+ }
+ $.data(this._dialogInput[0], "datepicker", inst);
+ return this;
+ },
+
+ /* Detach a datepicker from its control.
+ * @param target element - the target input field or division or span
+ */
+ _destroyDatepicker: function(target) {
+ var nodeName,
+ $target = $(target),
+ inst = $.data(target, "datepicker");
+
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ $.removeData(target, "datepicker");
+ if (nodeName === "input") {
+ inst.append.remove();
+ inst.trigger.remove();
+ $target.removeClass(this.markerClassName).
+ unbind("focus", this._showDatepicker).
+ unbind("keydown", this._doKeyDown).
+ unbind("keypress", this._doKeyPress).
+ unbind("keyup", this._doKeyUp);
+ } else if (nodeName === "div" || nodeName === "span") {
+ $target.removeClass(this.markerClassName).empty();
+ }
+
+ if ( datepicker_instActive === inst ) {
+ datepicker_instActive = null;
+ }
+ },
+
+ /* Enable the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ */
+ _enableDatepicker: function(target) {
+ var nodeName, inline,
+ $target = $(target),
+ inst = $.data(target, "datepicker");
+
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ if (nodeName === "input") {
+ target.disabled = false;
+ inst.trigger.filter("button").
+ each(function() { this.disabled = false; }).end().
+ filter("img").css({opacity: "1.0", cursor: ""});
+ } else if (nodeName === "div" || nodeName === "span") {
+ inline = $target.children("." + this._inlineClass);
+ inline.children().removeClass("ui-state-disabled");
+ inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+ prop("disabled", false);
+ }
+ this._disabledInputs = $.map(this._disabledInputs,
+ function(value) { return (value === target ? null : value); }); // delete entry
+ },
+
+ /* Disable the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ */
+ _disableDatepicker: function(target) {
+ var nodeName, inline,
+ $target = $(target),
+ inst = $.data(target, "datepicker");
+
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ if (nodeName === "input") {
+ target.disabled = true;
+ inst.trigger.filter("button").
+ each(function() { this.disabled = true; }).end().
+ filter("img").css({opacity: "0.5", cursor: "default"});
+ } else if (nodeName === "div" || nodeName === "span") {
+ inline = $target.children("." + this._inlineClass);
+ inline.children().addClass("ui-state-disabled");
+ inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+ prop("disabled", true);
+ }
+ this._disabledInputs = $.map(this._disabledInputs,
+ function(value) { return (value === target ? null : value); }); // delete entry
+ this._disabledInputs[this._disabledInputs.length] = target;
+ },
+
+ /* Is the first field in a jQuery collection disabled as a datepicker?
+ * @param target element - the target input field or division or span
+ * @return boolean - true if disabled, false if enabled
+ */
+ _isDisabledDatepicker: function(target) {
+ if (!target) {
+ return false;
+ }
+ for (var i = 0; i < this._disabledInputs.length; i++) {
+ if (this._disabledInputs[i] === target) {
+ return true;
+ }
+ }
+ return false;
+ },
+
+ /* Retrieve the instance data for the target control.
+ * @param target element - the target input field or division or span
+ * @return object - the associated instance data
+ * @throws error if a jQuery problem getting data
+ */
+ _getInst: function(target) {
+ try {
+ return $.data(target, "datepicker");
+ }
+ catch (err) {
+ throw "Missing instance data for this datepicker";
+ }
+ },
+
+ /* Update or retrieve the settings for a date picker attached to an input field or division.
+ * @param target element - the target input field or division or span
+ * @param name object - the new settings to update or
+ * string - the name of the setting to change or retrieve,
+ * when retrieving also "all" for all instance settings or
+ * "defaults" for all global defaults
+ * @param value any - the new value for the setting
+ * (omit if above is an object or to retrieve a value)
+ */
+ _optionDatepicker: function(target, name, value) {
+ var settings, date, minDate, maxDate,
+ inst = this._getInst(target);
+
+ if (arguments.length === 2 && typeof name === "string") {
+ return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
+ (inst ? (name === "all" ? $.extend({}, inst.settings) :
+ this._get(inst, name)) : null));
+ }
+
+ settings = name || {};
+ if (typeof name === "string") {
+ settings = {};
+ settings[name] = value;
+ }
+
+ if (inst) {
+ if (this._curInst === inst) {
+ this._hideDatepicker();
+ }
+
+ date = this._getDateDatepicker(target, true);
+ minDate = this._getMinMaxDate(inst, "min");
+ maxDate = this._getMinMaxDate(inst, "max");
+ datepicker_extendRemove(inst.settings, settings);
+ // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+ if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
+ inst.settings.minDate = this._formatDate(inst, minDate);
+ }
+ if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
+ inst.settings.maxDate = this._formatDate(inst, maxDate);
+ }
+ if ( "disabled" in settings ) {
+ if ( settings.disabled ) {
+ this._disableDatepicker(target);
+ } else {
+ this._enableDatepicker(target);
+ }
+ }
+ this._attachments($(target), inst);
+ this._autoSize(inst);
+ this._setDate(inst, date);
+ this._updateAlternate(inst);
+ this._updateDatepicker(inst);
+ }
+ },
+
+ // change method deprecated
+ _changeDatepicker: function(target, name, value) {
+ this._optionDatepicker(target, name, value);
+ },
+
+ /* Redraw the date picker attached to an input field or division.
+ * @param target element - the target input field or division or span
+ */
+ _refreshDatepicker: function(target) {
+ var inst = this._getInst(target);
+ if (inst) {
+ this._updateDatepicker(inst);
+ }
+ },
+
+ /* Set the dates for a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param date Date - the new date
+ */
+ _setDateDatepicker: function(target, date) {
+ var inst = this._getInst(target);
+ if (inst) {
+ this._setDate(inst, date);
+ this._updateDatepicker(inst);
+ this._updateAlternate(inst);
+ }
+ },
+
+ /* Get the date(s) for the first entry in a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param noDefault boolean - true if no default date is to be used
+ * @return Date - the current date
+ */
+ _getDateDatepicker: function(target, noDefault) {
+ var inst = this._getInst(target);
+ if (inst && !inst.inline) {
+ this._setDateFromField(inst, noDefault);
+ }
+ return (inst ? this._getDate(inst) : null);
+ },
+
+ /* Handle keystrokes. */
+ _doKeyDown: function(event) {
+ var onSelect, dateStr, sel,
+ inst = $.datepicker._getInst(event.target),
+ handled = true,
+ isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
+
+ inst._keyEvent = true;
+ if ($.datepicker._datepickerShowing) {
+ switch (event.keyCode) {
+ case 9: $.datepicker._hideDatepicker();
+ handled = false;
+ break; // hide on tab out
+ case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
+ $.datepicker._currentClass + ")", inst.dpDiv);
+ if (sel[0]) {
+ $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+ }
+
+ onSelect = $.datepicker._get(inst, "onSelect");
+ if (onSelect) {
+ dateStr = $.datepicker._formatDate(inst);
+
+ // trigger custom callback
+ onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+ } else {
+ $.datepicker._hideDatepicker();
+ }
+
+ return false; // don't submit the form
+ case 27: $.datepicker._hideDatepicker();
+ break; // hide on escape
+ case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ -$.datepicker._get(inst, "stepBigMonths") :
+ -$.datepicker._get(inst, "stepMonths")), "M");
+ break; // previous month/year on page up/+ ctrl
+ case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ +$.datepicker._get(inst, "stepBigMonths") :
+ +$.datepicker._get(inst, "stepMonths")), "M");
+ break; // next month/year on page down/+ ctrl
+ case 35: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._clearDate(event.target);
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // clear on ctrl or command +end
+ case 36: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._gotoToday(event.target);
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // current on ctrl or command +home
+ case 37: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ // -1 day on ctrl or command +left
+ if (event.originalEvent.altKey) {
+ $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ -$.datepicker._get(inst, "stepBigMonths") :
+ -$.datepicker._get(inst, "stepMonths")), "M");
+ }
+ // next month/year on alt +left on Mac
+ break;
+ case 38: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, -7, "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // -1 week on ctrl or command +up
+ case 39: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ // +1 day on ctrl or command +right
+ if (event.originalEvent.altKey) {
+ $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ +$.datepicker._get(inst, "stepBigMonths") :
+ +$.datepicker._get(inst, "stepMonths")), "M");
+ }
+ // next month/year on alt +right
+ break;
+ case 40: if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, +7, "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // +1 week on ctrl or command +down
+ default: handled = false;
+ }
+ } else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
+ $.datepicker._showDatepicker(this);
+ } else {
+ handled = false;
+ }
+
+ if (handled) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ },
+
+ /* Filter entered characters - based on date format. */
+ _doKeyPress: function(event) {
+ var chars, chr,
+ inst = $.datepicker._getInst(event.target);
+
+ if ($.datepicker._get(inst, "constrainInput")) {
+ chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
+ chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
+ return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
+ }
+ },
+
+ /* Synchronise manual entry and field/alternate field. */
+ _doKeyUp: function(event) {
+ var date,
+ inst = $.datepicker._getInst(event.target);
+
+ if (inst.input.val() !== inst.lastVal) {
+ try {
+ date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+ (inst.input ? inst.input.val() : null),
+ $.datepicker._getFormatConfig(inst));
+
+ if (date) { // only if valid
+ $.datepicker._setDateFromField(inst);
+ $.datepicker._updateAlternate(inst);
+ $.datepicker._updateDatepicker(inst);
+ }
+ }
+ catch (err) {
+ }
+ }
+ return true;
+ },
+
+ /* Pop-up the date picker for a given input field.
+ * If false returned from beforeShow event handler do not show.
+ * @param input element - the input field attached to the date picker or
+ * event - if triggered by focus
+ */
+ _showDatepicker: function(input) {
+ input = input.target || input;
+ if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
+ input = $("input", input.parentNode)[0];
+ }
+
+ if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
+ return;
+ }
+
+ var inst, beforeShow, beforeShowSettings, isFixed,
+ offset, showAnim, duration;
+
+ inst = $.datepicker._getInst(input);
+ if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
+ $.datepicker._curInst.dpDiv.stop(true, true);
+ if ( inst && $.datepicker._datepickerShowing ) {
+ $.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
+ }
+ }
+
+ beforeShow = $.datepicker._get(inst, "beforeShow");
+ beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
+ if(beforeShowSettings === false){
+ return;
+ }
+ datepicker_extendRemove(inst.settings, beforeShowSettings);
+
+ inst.lastVal = null;
+ $.datepicker._lastInput = input;
+ $.datepicker._setDateFromField(inst);
+
+ if ($.datepicker._inDialog) { // hide cursor
+ input.value = "";
+ }
+ if (!$.datepicker._pos) { // position below input
+ $.datepicker._pos = $.datepicker._findPos(input);
+ $.datepicker._pos[1] += input.offsetHeight; // add the height
+ }
+
+ isFixed = false;
+ $(input).parents().each(function() {
+ isFixed |= $(this).css("position") === "fixed";
+ return !isFixed;
+ });
+
+ offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+ $.datepicker._pos = null;
+ //to avoid flashes on Firefox
+ inst.dpDiv.empty();
+ // determine sizing offscreen
+ inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
+ $.datepicker._updateDatepicker(inst);
+ // fix width for dynamic number of date pickers
+ // and adjust position before showing
+ offset = $.datepicker._checkOffset(inst, offset, isFixed);
+ inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
+ "static" : (isFixed ? "fixed" : "absolute")), display: "none",
+ left: offset.left + "px", top: offset.top + "px"});
+
+ if (!inst.inline) {
+ showAnim = $.datepicker._get(inst, "showAnim");
+ duration = $.datepicker._get(inst, "duration");
+ inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 );
+ $.datepicker._datepickerShowing = true;
+
+ if ( $.effects && $.effects.effect[ showAnim ] ) {
+ inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
+ } else {
+ inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
+ }
+
+ if ( $.datepicker._shouldFocusInput( inst ) ) {
+ inst.input.focus();
+ }
+
+ $.datepicker._curInst = inst;
+ }
+ },
+
+ /* Generate the date picker content. */
+ _updateDatepicker: function(inst) {
+ this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+ datepicker_instActive = inst; // for delegate hover events
+ inst.dpDiv.empty().append(this._generateHTML(inst));
+ this._attachHandlers(inst);
+
+ var origyearshtml,
+ numMonths = this._getNumberOfMonths(inst),
+ cols = numMonths[1],
+ width = 17,
+ activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" );
+
+ if ( activeCell.length > 0 ) {
+ datepicker_handleMouseover.apply( activeCell.get( 0 ) );
+ }
+
+ inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
+ if (cols > 1) {
+ inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
+ }
+ inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
+ "Class"]("ui-datepicker-multi");
+ inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
+ "Class"]("ui-datepicker-rtl");
+
+ if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
+ inst.input.focus();
+ }
+
+ // deffered render of the years select (to avoid flashes on Firefox)
+ if( inst.yearshtml ){
+ origyearshtml = inst.yearshtml;
+ setTimeout(function(){
+ //assure that inst.yearshtml didn't change.
+ if( origyearshtml === inst.yearshtml && inst.yearshtml ){
+ inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
+ }
+ origyearshtml = inst.yearshtml = null;
+ }, 0);
+ }
+ },
+
+ // #6694 - don't focus the input if it's already focused
+ // this breaks the change event in IE
+ // Support: IE and jQuery <1.9
+ _shouldFocusInput: function( inst ) {
+ return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
+ },
+
+ /* Check positioning to remain on screen. */
+ _checkOffset: function(inst, offset, isFixed) {
+ var dpWidth = inst.dpDiv.outerWidth(),
+ dpHeight = inst.dpDiv.outerHeight(),
+ inputWidth = inst.input ? inst.input.outerWidth() : 0,
+ inputHeight = inst.input ? inst.input.outerHeight() : 0,
+ viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
+ viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
+
+ offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
+ offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
+ offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+
+ // now check if datepicker is showing outside window viewport - move to a better place if so.
+ offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
+ Math.abs(offset.left + dpWidth - viewWidth) : 0);
+ offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
+ Math.abs(dpHeight + inputHeight) : 0);
+
+ return offset;
+ },
+
+ /* Find an object's position on the screen. */
+ _findPos: function(obj) {
+ var position,
+ inst = this._getInst(obj),
+ isRTL = this._get(inst, "isRTL");
+
+ while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
+ obj = obj[isRTL ? "previousSibling" : "nextSibling"];
+ }
+
+ position = $(obj).offset();
+ return [position.left, position.top];
+ },
+
+ /* Hide the date picker from view.
+ * @param input element - the input field attached to the date picker
+ */
+ _hideDatepicker: function(input) {
+ var showAnim, duration, postProcess, onClose,
+ inst = this._curInst;
+
+ if (!inst || (input && inst !== $.data(input, "datepicker"))) {
+ return;
+ }
+
+ if (this._datepickerShowing) {
+ showAnim = this._get(inst, "showAnim");
+ duration = this._get(inst, "duration");
+ postProcess = function() {
+ $.datepicker._tidyDialog(inst);
+ };
+
+ // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
+ if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
+ inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
+ } else {
+ inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
+ (showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
+ }
+
+ if (!showAnim) {
+ postProcess();
+ }
+ this._datepickerShowing = false;
+
+ onClose = this._get(inst, "onClose");
+ if (onClose) {
+ onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
+ }
+
+ this._lastInput = null;
+ if (this._inDialog) {
+ this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
+ if ($.blockUI) {
+ $.unblockUI();
+ $("body").append(this.dpDiv);
+ }
+ }
+ this._inDialog = false;
+ }
+ },
+
+ /* Tidy up after a dialog display. */
+ _tidyDialog: function(inst) {
+ inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
+ },
+
+ /* Close date picker if clicked elsewhere. */
+ _checkExternalClick: function(event) {
+ if (!$.datepicker._curInst) {
+ return;
+ }
+
+ var $target = $(event.target),
+ inst = $.datepicker._getInst($target[0]);
+
+ if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
+ $target.parents("#" + $.datepicker._mainDivId).length === 0 &&
+ !$target.hasClass($.datepicker.markerClassName) &&
+ !$target.closest("." + $.datepicker._triggerClass).length &&
+ $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
+ ( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
+ $.datepicker._hideDatepicker();
+ }
+ },
+
+ /* Adjust one of the date sub-fields. */
+ _adjustDate: function(id, offset, period) {
+ var target = $(id),
+ inst = this._getInst(target[0]);
+
+ if (this._isDisabledDatepicker(target[0])) {
+ return;
+ }
+ this._adjustInstDate(inst, offset +
+ (period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
+ period);
+ this._updateDatepicker(inst);
+ },
+
+ /* Action for current link. */
+ _gotoToday: function(id) {
+ var date,
+ target = $(id),
+ inst = this._getInst(target[0]);
+
+ if (this._get(inst, "gotoCurrent") && inst.currentDay) {
+ inst.selectedDay = inst.currentDay;
+ inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+ inst.drawYear = inst.selectedYear = inst.currentYear;
+ } else {
+ date = new Date();
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ }
+ this._notifyChange(inst);
+ this._adjustDate(target);
+ },
+
+ /* Action for selecting a new month/year. */
+ _selectMonthYear: function(id, select, period) {
+ var target = $(id),
+ inst = this._getInst(target[0]);
+
+ inst["selected" + (period === "M" ? "Month" : "Year")] =
+ inst["draw" + (period === "M" ? "Month" : "Year")] =
+ parseInt(select.options[select.selectedIndex].value,10);
+
+ this._notifyChange(inst);
+ this._adjustDate(target);
+ },
+
+ /* Action for selecting a day. */
+ _selectDay: function(id, month, year, td) {
+ var inst,
+ target = $(id);
+
+ if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+ return;
+ }
+
+ inst = this._getInst(target[0]);
+ inst.selectedDay = inst.currentDay = $("a", td).html();
+ inst.selectedMonth = inst.currentMonth = month;
+ inst.selectedYear = inst.currentYear = year;
+ this._selectDate(id, this._formatDate(inst,
+ inst.currentDay, inst.currentMonth, inst.currentYear));
+ },
+
+ /* Erase the input field and hide the date picker. */
+ _clearDate: function(id) {
+ var target = $(id);
+ this._selectDate(target, "");
+ },
+
+ /* Update the input field with the selected date. */
+ _selectDate: function(id, dateStr) {
+ var onSelect,
+ target = $(id),
+ inst = this._getInst(target[0]);
+
+ dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+ if (inst.input) {
+ inst.input.val(dateStr);
+ }
+ this._updateAlternate(inst);
+
+ onSelect = this._get(inst, "onSelect");
+ if (onSelect) {
+ onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback
+ } else if (inst.input) {
+ inst.input.trigger("change"); // fire the change event
+ }
+
+ if (inst.inline){
+ this._updateDatepicker(inst);
+ } else {
+ this._hideDatepicker();
+ this._lastInput = inst.input[0];
+ if (typeof(inst.input[0]) !== "object") {
+ inst.input.focus(); // restore focus
+ }
+ this._lastInput = null;
+ }
+ },
+
+ /* Update any alternate field to synchronise with the main field. */
+ _updateAlternate: function(inst) {
+ var altFormat, date, dateStr,
+ altField = this._get(inst, "altField");
+
+ if (altField) { // update alternate field too
+ altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
+ date = this._getDate(inst);
+ dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+ $(altField).each(function() { $(this).val(dateStr); });
+ }
+ },
+
+ /* Set as beforeShowDay function to prevent selection of weekends.
+ * @param date Date - the date to customise
+ * @return [boolean, string] - is this date selectable?, what is its CSS class?
+ */
+ noWeekends: function(date) {
+ var day = date.getDay();
+ return [(day > 0 && day < 6), ""];
+ },
+
+ /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+ * @param date Date - the date to get the week for
+ * @return number - the number of the week within the year that contains this date
+ */
+ iso8601Week: function(date) {
+ var time,
+ checkDate = new Date(date.getTime());
+
+ // Find Thursday of this week starting on Monday
+ checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
+
+ time = checkDate.getTime();
+ checkDate.setMonth(0); // Compare with Jan 1
+ checkDate.setDate(1);
+ return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+ },
+
+ /* Parse a string value into a date object.
+ * See formatDate below for the possible formats.
+ *
+ * @param format string - the expected format of the date
+ * @param value string - the date in the above format
+ * @param settings Object - attributes include:
+ * shortYearCutoff number - the cutoff year for determining the century (optional)
+ * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
+ * dayNames string[7] - names of the days from Sunday (optional)
+ * monthNamesShort string[12] - abbreviated names of the months (optional)
+ * monthNames string[12] - names of the months (optional)
+ * @return Date - the extracted date value or null if value is blank
+ */
+ parseDate: function (format, value, settings) {
+ if (format == null || value == null) {
+ throw "Invalid arguments";
+ }
+
+ value = (typeof value === "object" ? value.toString() : value + "");
+ if (value === "") {
+ return null;
+ }
+
+ var iFormat, dim, extra,
+ iValue = 0,
+ shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
+ shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
+ new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
+ dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+ dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+ monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+ monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+ year = -1,
+ month = -1,
+ day = -1,
+ doy = -1,
+ literal = false,
+ date,
+ // Check whether a format character is doubled
+ lookAhead = function(match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+ if (matches) {
+ iFormat++;
+ }
+ return matches;
+ },
+ // Extract a number from the string value
+ getNumber = function(match) {
+ var isDoubled = lookAhead(match),
+ size = (match === "@" ? 14 : (match === "!" ? 20 :
+ (match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
+ minSize = (match === "y" ? size : 1),
+ digits = new RegExp("^\\d{" + minSize + "," + size + "}"),
+ num = value.substring(iValue).match(digits);
+ if (!num) {
+ throw "Missing number at position " + iValue;
+ }
+ iValue += num[0].length;
+ return parseInt(num[0], 10);
+ },
+ // Extract a name from the string value and convert to an index
+ getName = function(match, shortNames, longNames) {
+ var index = -1,
+ names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
+ return [ [k, v] ];
+ }).sort(function (a, b) {
+ return -(a[1].length - b[1].length);
+ });
+
+ $.each(names, function (i, pair) {
+ var name = pair[1];
+ if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
+ index = pair[0];
+ iValue += name.length;
+ return false;
+ }
+ });
+ if (index !== -1) {
+ return index + 1;
+ } else {
+ throw "Unknown name at position " + iValue;
+ }
+ },
+ // Confirm that a literal character matches the string value
+ checkLiteral = function() {
+ if (value.charAt(iValue) !== format.charAt(iFormat)) {
+ throw "Unexpected literal at position " + iValue;
+ }
+ iValue++;
+ };
+
+ for (iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+ literal = false;
+ } else {
+ checkLiteral();
+ }
+ } else {
+ switch (format.charAt(iFormat)) {
+ case "d":
+ day = getNumber("d");
+ break;
+ case "D":
+ getName("D", dayNamesShort, dayNames);
+ break;
+ case "o":
+ doy = getNumber("o");
+ break;
+ case "m":
+ month = getNumber("m");
+ break;
+ case "M":
+ month = getName("M", monthNamesShort, monthNames);
+ break;
+ case "y":
+ year = getNumber("y");
+ break;
+ case "@":
+ date = new Date(getNumber("@"));
+ year = date.getFullYear();
+ month = date.getMonth() + 1;
+ day = date.getDate();
+ break;
+ case "!":
+ date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
+ year = date.getFullYear();
+ month = date.getMonth() + 1;
+ day = date.getDate();
+ break;
+ case "'":
+ if (lookAhead("'")){
+ checkLiteral();
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ checkLiteral();
+ }
+ }
+ }
+
+ if (iValue < value.length){
+ extra = value.substr(iValue);
+ if (!/^\s+/.test(extra)) {
+ throw "Extra/unparsed characters found in date: " + extra;
+ }
+ }
+
+ if (year === -1) {
+ year = new Date().getFullYear();
+ } else if (year < 100) {
+ year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+ (year <= shortYearCutoff ? 0 : -100);
+ }
+
+ if (doy > -1) {
+ month = 1;
+ day = doy;
+ do {
+ dim = this._getDaysInMonth(year, month - 1);
+ if (day <= dim) {
+ break;
+ }
+ month++;
+ day -= dim;
+ } while (true);
+ }
+
+ date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+ if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
+ throw "Invalid date"; // E.g. 31/02/00
+ }
+ return date;
+ },
+
+ /* Standard date formats. */
+ ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
+ COOKIE: "D, dd M yy",
+ ISO_8601: "yy-mm-dd",
+ RFC_822: "D, d M y",
+ RFC_850: "DD, dd-M-y",
+ RFC_1036: "D, d M y",
+ RFC_1123: "D, d M yy",
+ RFC_2822: "D, d M yy",
+ RSS: "D, d M y", // RFC 822
+ TICKS: "!",
+ TIMESTAMP: "@",
+ W3C: "yy-mm-dd", // ISO 8601
+
+ _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
+ Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
+
+ /* Format a date object into a string value.
+ * The format can be combinations of the following:
+ * d - day of month (no leading zero)
+ * dd - day of month (two digit)
+ * o - day of year (no leading zeros)
+ * oo - day of year (three digit)
+ * D - day name short
+ * DD - day name long
+ * m - month of year (no leading zero)
+ * mm - month of year (two digit)
+ * M - month name short
+ * MM - month name long
+ * y - year (two digit)
+ * yy - year (four digit)
+ * @ - Unix timestamp (ms since 01/01/1970)
+ * ! - Windows ticks (100ns since 01/01/0001)
+ * "..." - literal text
+ * '' - single quote
+ *
+ * @param format string - the desired format of the date
+ * @param date Date - the date value to format
+ * @param settings Object - attributes include:
+ * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
+ * dayNames string[7] - names of the days from Sunday (optional)
+ * monthNamesShort string[12] - abbreviated names of the months (optional)
+ * monthNames string[12] - names of the months (optional)
+ * @return string - the date in the above format
+ */
+ formatDate: function (format, date, settings) {
+ if (!date) {
+ return "";
+ }
+
+ var iFormat,
+ dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+ dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+ monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+ monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+ // Check whether a format character is doubled
+ lookAhead = function(match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+ if (matches) {
+ iFormat++;
+ }
+ return matches;
+ },
+ // Format a number, with leading zero if necessary
+ formatNumber = function(match, value, len) {
+ var num = "" + value;
+ if (lookAhead(match)) {
+ while (num.length < len) {
+ num = "0" + num;
+ }
+ }
+ return num;
+ },
+ // Format a name, short or long as requested
+ formatName = function(match, value, shortNames, longNames) {
+ return (lookAhead(match) ? longNames[value] : shortNames[value]);
+ },
+ output = "",
+ literal = false;
+
+ if (date) {
+ for (iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+ literal = false;
+ } else {
+ output += format.charAt(iFormat);
+ }
+ } else {
+ switch (format.charAt(iFormat)) {
+ case "d":
+ output += formatNumber("d", date.getDate(), 2);
+ break;
+ case "D":
+ output += formatName("D", date.getDay(), dayNamesShort, dayNames);
+ break;
+ case "o":
+ output += formatNumber("o",
+ Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
+ break;
+ case "m":
+ output += formatNumber("m", date.getMonth() + 1, 2);
+ break;
+ case "M":
+ output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
+ break;
+ case "y":
+ output += (lookAhead("y") ? date.getFullYear() :
+ (date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
+ break;
+ case "@":
+ output += date.getTime();
+ break;
+ case "!":
+ output += date.getTime() * 10000 + this._ticksTo1970;
+ break;
+ case "'":
+ if (lookAhead("'")) {
+ output += "'";
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ output += format.charAt(iFormat);
+ }
+ }
+ }
+ }
+ return output;
+ },
+
+ /* Extract all possible characters from the date format. */
+ _possibleChars: function (format) {
+ var iFormat,
+ chars = "",
+ literal = false,
+ // Check whether a format character is doubled
+ lookAhead = function(match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+ if (matches) {
+ iFormat++;
+ }
+ return matches;
+ };
+
+ for (iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+ literal = false;
+ } else {
+ chars += format.charAt(iFormat);
+ }
+ } else {
+ switch (format.charAt(iFormat)) {
+ case "d": case "m": case "y": case "@":
+ chars += "0123456789";
+ break;
+ case "D": case "M":
+ return null; // Accept anything
+ case "'":
+ if (lookAhead("'")) {
+ chars += "'";
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ chars += format.charAt(iFormat);
+ }
+ }
+ }
+ return chars;
+ },
+
+ /* Get a setting value, defaulting if necessary. */
+ _get: function(inst, name) {
+ return inst.settings[name] !== undefined ?
+ inst.settings[name] : this._defaults[name];
+ },
+
+ /* Parse existing date and initialise date picker. */
+ _setDateFromField: function(inst, noDefault) {
+ if (inst.input.val() === inst.lastVal) {
+ return;
+ }
+
+ var dateFormat = this._get(inst, "dateFormat"),
+ dates = inst.lastVal = inst.input ? inst.input.val() : null,
+ defaultDate = this._getDefaultDate(inst),
+ date = defaultDate,
+ settings = this._getFormatConfig(inst);
+
+ try {
+ date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+ } catch (event) {
+ dates = (noDefault ? "" : dates);
+ }
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ inst.currentDay = (dates ? date.getDate() : 0);
+ inst.currentMonth = (dates ? date.getMonth() : 0);
+ inst.currentYear = (dates ? date.getFullYear() : 0);
+ this._adjustInstDate(inst);
+ },
+
+ /* Retrieve the default date shown on opening. */
+ _getDefaultDate: function(inst) {
+ return this._restrictMinMax(inst,
+ this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
+ },
+
+ /* A date may be specified as an exact value or a relative one. */
+ _determineDate: function(inst, date, defaultDate) {
+ var offsetNumeric = function(offset) {
+ var date = new Date();
+ date.setDate(date.getDate() + offset);
+ return date;
+ },
+ offsetString = function(offset) {
+ try {
+ return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+ offset, $.datepicker._getFormatConfig(inst));
+ }
+ catch (e) {
+ // Ignore
+ }
+
+ var date = (offset.toLowerCase().match(/^c/) ?
+ $.datepicker._getDate(inst) : null) || new Date(),
+ year = date.getFullYear(),
+ month = date.getMonth(),
+ day = date.getDate(),
+ pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
+ matches = pattern.exec(offset);
+
+ while (matches) {
+ switch (matches[2] || "d") {
+ case "d" : case "D" :
+ day += parseInt(matches[1],10); break;
+ case "w" : case "W" :
+ day += parseInt(matches[1],10) * 7; break;
+ case "m" : case "M" :
+ month += parseInt(matches[1],10);
+ day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+ break;
+ case "y": case "Y" :
+ year += parseInt(matches[1],10);
+ day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+ break;
+ }
+ matches = pattern.exec(offset);
+ }
+ return new Date(year, month, day);
+ },
+ newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
+ (typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
+
+ newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
+ if (newDate) {
+ newDate.setHours(0);
+ newDate.setMinutes(0);
+ newDate.setSeconds(0);
+ newDate.setMilliseconds(0);
+ }
+ return this._daylightSavingAdjust(newDate);
+ },
+
+ /* Handle switch to/from daylight saving.
+ * Hours may be non-zero on daylight saving cut-over:
+ * > 12 when midnight changeover, but then cannot generate
+ * midnight datetime, so jump to 1AM, otherwise reset.
+ * @param date (Date) the date to check
+ * @return (Date) the corrected date
+ */
+ _daylightSavingAdjust: function(date) {
+ if (!date) {
+ return null;
+ }
+ date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+ return date;
+ },
+
+ /* Set the date(s) directly. */
+ _setDate: function(inst, date, noChange) {
+ var clear = !date,
+ origMonth = inst.selectedMonth,
+ origYear = inst.selectedYear,
+ newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
+
+ inst.selectedDay = inst.currentDay = newDate.getDate();
+ inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+ inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+ if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
+ this._notifyChange(inst);
+ }
+ this._adjustInstDate(inst);
+ if (inst.input) {
+ inst.input.val(clear ? "" : this._formatDate(inst));
+ }
+ },
+
+ /* Retrieve the date(s) directly. */
+ _getDate: function(inst) {
+ var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
+ this._daylightSavingAdjust(new Date(
+ inst.currentYear, inst.currentMonth, inst.currentDay)));
+ return startDate;
+ },
+
+ /* Attach the onxxx handlers. These are declared statically so
+ * they work with static code transformers like Caja.
+ */
+ _attachHandlers: function(inst) {
+ var stepMonths = this._get(inst, "stepMonths"),
+ id = "#" + inst.id.replace( /\\\\/g, "\\" );
+ inst.dpDiv.find("[data-handler]").map(function () {
+ var handler = {
+ prev: function () {
+ $.datepicker._adjustDate(id, -stepMonths, "M");
+ },
+ next: function () {
+ $.datepicker._adjustDate(id, +stepMonths, "M");
+ },
+ hide: function () {
+ $.datepicker._hideDatepicker();
+ },
+ today: function () {
+ $.datepicker._gotoToday(id);
+ },
+ selectDay: function () {
+ $.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
+ return false;
+ },
+ selectMonth: function () {
+ $.datepicker._selectMonthYear(id, this, "M");
+ return false;
+ },
+ selectYear: function () {
+ $.datepicker._selectMonthYear(id, this, "Y");
+ return false;
+ }
+ };
+ $(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
+ });
+ },
+
+ /* Generate the HTML for the current state of the date picker. */
+ _generateHTML: function(inst) {
+ var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
+ controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
+ monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
+ selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
+ cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
+ printDate, dRow, tbody, daySettings, otherMonth, unselectable,
+ tempDate = new Date(),
+ today = this._daylightSavingAdjust(
+ new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
+ isRTL = this._get(inst, "isRTL"),
+ showButtonPanel = this._get(inst, "showButtonPanel"),
+ hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
+ navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
+ numMonths = this._getNumberOfMonths(inst),
+ showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
+ stepMonths = this._get(inst, "stepMonths"),
+ isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
+ currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+ new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
+ minDate = this._getMinMaxDate(inst, "min"),
+ maxDate = this._getMinMaxDate(inst, "max"),
+ drawMonth = inst.drawMonth - showCurrentAtPos,
+ drawYear = inst.drawYear;
+
+ if (drawMonth < 0) {
+ drawMonth += 12;
+ drawYear--;
+ }
+ if (maxDate) {
+ maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+ maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
+ maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+ while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+ drawMonth--;
+ if (drawMonth < 0) {
+ drawMonth = 11;
+ drawYear--;
+ }
+ }
+ }
+ inst.drawMonth = drawMonth;
+ inst.drawYear = drawYear;
+
+ prevText = this._get(inst, "prevText");
+ prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+ this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+ this._getFormatConfig(inst)));
+
+ prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+ "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
+ " title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
+ (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
+
+ nextText = this._get(inst, "nextText");
+ nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+ this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+ this._getFormatConfig(inst)));
+
+ next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+ "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
+ " title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
+ (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
+
+ currentText = this._get(inst, "currentText");
+ gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
+ currentText = (!navigationAsDateFormat ? currentText :
+ this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+
+ controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
+ this._get(inst, "closeText") + "</button>" : "");
+
+ buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
+ (this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
+ ">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
+
+ firstDay = parseInt(this._get(inst, "firstDay"),10);
+ firstDay = (isNaN(firstDay) ? 0 : firstDay);
+
+ showWeek = this._get(inst, "showWeek");
+ dayNames = this._get(inst, "dayNames");
+ dayNamesMin = this._get(inst, "dayNamesMin");
+ monthNames = this._get(inst, "monthNames");
+ monthNamesShort = this._get(inst, "monthNamesShort");
+ beforeShowDay = this._get(inst, "beforeShowDay");
+ showOtherMonths = this._get(inst, "showOtherMonths");
+ selectOtherMonths = this._get(inst, "selectOtherMonths");
+ defaultDate = this._getDefaultDate(inst);
+ html = "";
+ dow;
+ for (row = 0; row < numMonths[0]; row++) {
+ group = "";
+ this.maxRows = 4;
+ for (col = 0; col < numMonths[1]; col++) {
+ selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+ cornerClass = " ui-corner-all";
+ calender = "";
+ if (isMultiMonth) {
+ calender += "<div class='ui-datepicker-group";
+ if (numMonths[1] > 1) {
+ switch (col) {
+ case 0: calender += " ui-datepicker-group-first";
+ cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
+ case numMonths[1]-1: calender += " ui-datepicker-group-last";
+ cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
+ default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
+ }
+ }
+ calender += "'>";
+ }
+ calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
+ (/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
+ (/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
+ this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+ row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+ "</div><table class='ui-datepicker-calendar'><thead>" +
+ "<tr>";
+ thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
+ for (dow = 0; dow < 7; dow++) { // days of the week
+ day = (dow + firstDay) % 7;
+ thead += "<th scope='col'" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
+ "<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
+ }
+ calender += thead + "</tr></thead><tbody>";
+ daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+ if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
+ inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+ }
+ leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+ curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
+ numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
+ this.maxRows = numRows;
+ printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+ for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+ calender += "<tr>";
+ tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
+ this._get(inst, "calculateWeek")(printDate) + "</td>");
+ for (dow = 0; dow < 7; dow++) { // create date picker days
+ daySettings = (beforeShowDay ?
+ beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
+ otherMonth = (printDate.getMonth() !== drawMonth);
+ unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
+ (minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+ tbody += "<td class='" +
+ ((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
+ (otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
+ ((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
+ (defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
+ // or defaultDate is current printedDate and defaultDate is selectedDate
+ " " + this._dayOverClass : "") + // highlight selected day
+ (unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") + // highlight unselectable days
+ (otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
+ (printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
+ (printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
+ ((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "'") + "'" : "") + // cell title
+ (unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
+ (otherMonth && !showOtherMonths ? " " : // display for other months
+ (unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
+ (printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
+ (printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
+ (otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
+ "' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
+ printDate.setDate(printDate.getDate() + 1);
+ printDate = this._daylightSavingAdjust(printDate);
+ }
+ calender += tbody + "</tr>";
+ }
+ drawMonth++;
+ if (drawMonth > 11) {
+ drawMonth = 0;
+ drawYear++;
+ }
+ calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
+ ((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
+ group += calender;
+ }
+ html += group;
+ }
+ html += buttonPanel;
+ inst._keyEvent = false;
+ return html;
+ },
+
+ /* Generate the month and year header. */
+ _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
+ secondary, monthNames, monthNamesShort) {
+
+ var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
+ changeMonth = this._get(inst, "changeMonth"),
+ changeYear = this._get(inst, "changeYear"),
+ showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
+ html = "<div class='ui-datepicker-title'>",
+ monthHtml = "";
+
+ // month selection
+ if (secondary || !changeMonth) {
+ monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
+ } else {
+ inMinYear = (minDate && minDate.getFullYear() === drawYear);
+ inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
+ monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
+ for ( month = 0; month < 12; month++) {
+ if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
+ monthHtml += "<option value='" + month + "'" +
+ (month === drawMonth ? " selected='selected'" : "") +
+ ">" + monthNamesShort[month] + "</option>";
+ }
+ }
+ monthHtml += "</select>";
+ }
+
+ if (!showMonthAfterYear) {
+ html += monthHtml + (secondary || !(changeMonth && changeYear) ? " " : "");
+ }
+
+ // year selection
+ if ( !inst.yearshtml ) {
+ inst.yearshtml = "";
+ if (secondary || !changeYear) {
+ html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
+ } else {
+ // determine range of years to display
+ years = this._get(inst, "yearRange").split(":");
+ thisYear = new Date().getFullYear();
+ determineYear = function(value) {
+ var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
+ (value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
+ parseInt(value, 10)));
+ return (isNaN(year) ? thisYear : year);
+ };
+ year = determineYear(years[0]);
+ endYear = Math.max(year, determineYear(years[1] || ""));
+ year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+ endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+ inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
+ for (; year <= endYear; year++) {
+ inst.yearshtml += "<option value='" + year + "'" +
+ (year === drawYear ? " selected='selected'" : "") +
+ ">" + year + "</option>";
+ }
+ inst.yearshtml += "</select>";
+
+ html += inst.yearshtml;
+ inst.yearshtml = null;
+ }
+ }
+
+ html += this._get(inst, "yearSuffix");
+ if (showMonthAfterYear) {
+ html += (secondary || !(changeMonth && changeYear) ? " " : "") + monthHtml;
+ }
+ html += "</div>"; // Close datepicker_header
+ return html;
+ },
+
+ /* Adjust one of the date sub-fields. */
+ _adjustInstDate: function(inst, offset, period) {
+ var year = inst.drawYear + (period === "Y" ? offset : 0),
+ month = inst.drawMonth + (period === "M" ? offset : 0),
+ day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
+ date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
+
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ if (period === "M" || period === "Y") {
+ this._notifyChange(inst);
+ }
+ },
+
+ /* Ensure a date is within any min/max bounds. */
+ _restrictMinMax: function(inst, date) {
+ var minDate = this._getMinMaxDate(inst, "min"),
+ maxDate = this._getMinMaxDate(inst, "max"),
+ newDate = (minDate && date < minDate ? minDate : date);
+ return (maxDate && newDate > maxDate ? maxDate : newDate);
+ },
+
+ /* Notify change of month/year. */
+ _notifyChange: function(inst) {
+ var onChange = this._get(inst, "onChangeMonthYear");
+ if (onChange) {
+ onChange.apply((inst.input ? inst.input[0] : null),
+ [inst.selectedYear, inst.selectedMonth + 1, inst]);
+ }
+ },
+
+ /* Determine the number of months to show. */
+ _getNumberOfMonths: function(inst) {
+ var numMonths = this._get(inst, "numberOfMonths");
+ return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
+ },
+
+ /* Determine the current maximum date - ensure no time components are set. */
+ _getMinMaxDate: function(inst, minMax) {
+ return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
+ },
+
+ /* Find the number of days in a given month. */
+ _getDaysInMonth: function(year, month) {
+ return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
+ },
+
+ /* Find the day of the week of the first of a month. */
+ _getFirstDayOfMonth: function(year, month) {
+ return new Date(year, month, 1).getDay();
+ },
+
+ /* Determines if we should allow a "next/prev" month display change. */
+ _canAdjustMonth: function(inst, offset, curYear, curMonth) {
+ var numMonths = this._getNumberOfMonths(inst),
+ date = this._daylightSavingAdjust(new Date(curYear,
+ curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
+
+ if (offset < 0) {
+ date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+ }
+ return this._isInRange(inst, date);
+ },
+
+ /* Is the given date in the accepted range? */
+ _isInRange: function(inst, date) {
+ var yearSplit, currentYear,
+ minDate = this._getMinMaxDate(inst, "min"),
+ maxDate = this._getMinMaxDate(inst, "max"),
+ minYear = null,
+ maxYear = null,
+ years = this._get(inst, "yearRange");
+ if (years){
+ yearSplit = years.split(":");
+ currentYear = new Date().getFullYear();
+ minYear = parseInt(yearSplit[0], 10);
+ maxYear = parseInt(yearSplit[1], 10);
+ if ( yearSplit[0].match(/[+\-].*/) ) {
+ minYear += currentYear;
+ }
+ if ( yearSplit[1].match(/[+\-].*/) ) {
+ maxYear += currentYear;
+ }
+ }
+
+ return ((!minDate || date.getTime() >= minDate.getTime()) &&
+ (!maxDate || date.getTime() <= maxDate.getTime()) &&
+ (!minYear || date.getFullYear() >= minYear) &&
+ (!maxYear || date.getFullYear() <= maxYear));
+ },
+
+ /* Provide the configuration settings for formatting/parsing. */
+ _getFormatConfig: function(inst) {
+ var shortYearCutoff = this._get(inst, "shortYearCutoff");
+ shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
+ new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+ return {shortYearCutoff: shortYearCutoff,
+ dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
+ monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
+ },
+
+ /* Format the given date for display. */
+ _formatDate: function(inst, day, month, year) {
+ if (!day) {
+ inst.currentDay = inst.selectedDay;
+ inst.currentMonth = inst.selectedMonth;
+ inst.currentYear = inst.selectedYear;
+ }
+ var date = (day ? (typeof day === "object" ? day :
+ this._daylightSavingAdjust(new Date(year, month, day))) :
+ this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+ return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
+ }
+});
+
+/*
+ * Bind hover events for datepicker elements.
+ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+ * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+ */
+function datepicker_bindHover(dpDiv) {
+ var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
+ return dpDiv.delegate(selector, "mouseout", function() {
+ $(this).removeClass("ui-state-hover");
+ if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+ $(this).removeClass("ui-datepicker-prev-hover");
+ }
+ if (this.className.indexOf("ui-datepicker-next") !== -1) {
+ $(this).removeClass("ui-datepicker-next-hover");
+ }
+ })
+ .delegate( selector, "mouseover", datepicker_handleMouseover );
+}
+
+function datepicker_handleMouseover() {
+ if (!$.datepicker._isDisabledDatepicker( datepicker_instActive.inline? datepicker_instActive.dpDiv.parent()[0] : datepicker_instActive.input[0])) {
+ $(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+ $(this).addClass("ui-state-hover");
+ if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+ $(this).addClass("ui-datepicker-prev-hover");
+ }
+ if (this.className.indexOf("ui-datepicker-next") !== -1) {
+ $(this).addClass("ui-datepicker-next-hover");
+ }
+ }
+}
+
+/* jQuery extend now ignores nulls! */
+function datepicker_extendRemove(target, props) {
+ $.extend(target, props);
+ for (var name in props) {
+ if (props[name] == null) {
+ target[name] = props[name];
+ }
+ }
+ return target;
+}
+
+/* Invoke the datepicker functionality.
+ @param options string - a command, optionally followed by additional parameters or
+ Object - settings for attaching new datepicker functionality
+ @return jQuery object */
+$.fn.datepicker = function(options){
+
+ /* Verify an empty collection wasn't passed - Fixes #6976 */
+ if ( !this.length ) {
+ return this;
+ }
+
+ /* Initialise the date picker. */
+ if (!$.datepicker.initialized) {
+ $(document).mousedown($.datepicker._checkExternalClick);
+ $.datepicker.initialized = true;
+ }
+
+ /* Append datepicker main container to body if not exist. */
+ if ($("#"+$.datepicker._mainDivId).length === 0) {
+ $("body").append($.datepicker.dpDiv);
+ }
+
+ var otherArgs = Array.prototype.slice.call(arguments, 1);
+ if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
+ return $.datepicker["_" + options + "Datepicker"].
+ apply($.datepicker, [this[0]].concat(otherArgs));
+ }
+ if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
+ return $.datepicker["_" + options + "Datepicker"].
+ apply($.datepicker, [this[0]].concat(otherArgs));
+ }
+ return this.each(function() {
+ typeof options === "string" ?
+ $.datepicker["_" + options + "Datepicker"].
+ apply($.datepicker, [this].concat(otherArgs)) :
+ $.datepicker._attachDatepicker(this, options);
+ });
+};
+
+$.datepicker = new Datepicker(); // singleton instance
+$.datepicker.initialized = false;
+$.datepicker.uuid = new Date().getTime();
+$.datepicker.version = "1.11.4";
+
+var datepicker = $.datepicker;
+
+
+/*!
+ * jQuery UI Draggable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/draggable/
+ */
+
+
+$.widget("ui.draggable", $.ui.mouse, {
+ version: "1.11.4",
+ widgetEventPrefix: "drag",
+ options: {
+ addClasses: true,
+ appendTo: "parent",
+ axis: false,
+ connectToSortable: false,
+ containment: false,
+ cursor: "auto",
+ cursorAt: false,
+ grid: false,
+ handle: false,
+ helper: "original",
+ iframeFix: false,
+ opacity: false,
+ refreshPositions: false,
+ revert: false,
+ revertDuration: 500,
+ scope: "default",
+ scroll: true,
+ scrollSensitivity: 20,
+ scrollSpeed: 20,
+ snap: false,
+ snapMode: "both",
+ snapTolerance: 20,
+ stack: false,
+ zIndex: false,
+
+ // callbacks
+ drag: null,
+ start: null,
+ stop: null
+ },
+ _create: function() {
+
+ if ( this.options.helper === "original" ) {
+ this._setPositionRelative();
+ }
+ if (this.options.addClasses){
+ this.element.addClass("ui-draggable");
+ }
+ if (this.options.disabled){
+ this.element.addClass("ui-draggable-disabled");
+ }
+ this._setHandleClassName();
+
+ this._mouseInit();
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+ if ( key === "handle" ) {
+ this._removeHandleClassName();
+ this._setHandleClassName();
+ }
+ },
+
+ _destroy: function() {
+ if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) {
+ this.destroyOnClear = true;
+ return;
+ }
+ this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
+ this._removeHandleClassName();
+ this._mouseDestroy();
+ },
+
+ _mouseCapture: function(event) {
+ var o = this.options;
+
+ this._blurActiveElement( event );
+
+ // among others, prevent a drag on a resizable-handle
+ if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
+ return false;
+ }
+
+ //Quit if we're not on a valid handle
+ this.handle = this._getHandle(event);
+ if (!this.handle) {
+ return false;
+ }
+
+ this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix );
+
+ return true;
+
+ },
+
+ _blockFrames: function( selector ) {
+ this.iframeBlocks = this.document.find( selector ).map(function() {
+ var iframe = $( this );
+
+ return $( "<div>" )
+ .css( "position", "absolute" )
+ .appendTo( iframe.parent() )
+ .outerWidth( iframe.outerWidth() )
+ .outerHeight( iframe.outerHeight() )
+ .offset( iframe.offset() )[ 0 ];
+ });
+ },
+
+ _unblockFrames: function() {
+ if ( this.iframeBlocks ) {
+ this.iframeBlocks.remove();
+ delete this.iframeBlocks;
+ }
+ },
+
+ _blurActiveElement: function( event ) {
+ var document = this.document[ 0 ];
+
+ // Only need to blur if the event occurred on the draggable itself, see #10527
+ if ( !this.handleElement.is( event.target ) ) {
+ return;
+ }
+
+ // support: IE9
+ // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+ try {
+
+ // Support: IE9, IE10
+ // If the <body> is blurred, IE will switch windows, see #9520
+ if ( document.activeElement && document.activeElement.nodeName.toLowerCase() !== "body" ) {
+
+ // Blur any element that currently has focus, see #4261
+ $( document.activeElement ).blur();
+ }
+ } catch ( error ) {}
+ },
+
+ _mouseStart: function(event) {
+
+ var o = this.options;
+
+ //Create and append the visible helper
+ this.helper = this._createHelper(event);
+
+ this.helper.addClass("ui-draggable-dragging");
+
+ //Cache the helper size
+ this._cacheHelperProportions();
+
+ //If ddmanager is used for droppables, set the global draggable
+ if ($.ui.ddmanager) {
+ $.ui.ddmanager.current = this;
+ }
+
+ /*
+ * - Position generation -
+ * This block generates everything position related - it's the core of draggables.
+ */
+
+ //Cache the margins of the original element
+ this._cacheMargins();
+
+ //Store the helper's css position
+ this.cssPosition = this.helper.css( "position" );
+ this.scrollParent = this.helper.scrollParent( true );
+ this.offsetParent = this.helper.offsetParent();
+ this.hasFixedAncestor = this.helper.parents().filter(function() {
+ return $( this ).css( "position" ) === "fixed";
+ }).length > 0;
+
+ //The element's absolute position on the page minus margins
+ this.positionAbs = this.element.offset();
+ this._refreshOffsets( event );
+
+ //Generate the original position
+ this.originalPosition = this.position = this._generatePosition( event, false );
+ this.originalPageX = event.pageX;
+ this.originalPageY = event.pageY;
+
+ //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+ (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+ //Set a containment if given in the options
+ this._setContainment();
+
+ //Trigger event + callbacks
+ if (this._trigger("start", event) === false) {
+ this._clear();
+ return false;
+ }
+
+ //Recache the helper size
+ this._cacheHelperProportions();
+
+ //Prepare the droppable offsets
+ if ($.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+
+ // Reset helper's right/bottom css if they're set and set explicit width/height instead
+ // as this prevents resizing of elements with right/bottom set (see #7772)
+ this._normalizeRightBottom();
+
+ this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+
+ //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
+ if ( $.ui.ddmanager ) {
+ $.ui.ddmanager.dragStart(this, event);
+ }
+
+ return true;
+ },
+
+ _refreshOffsets: function( event ) {
+ this.offset = {
+ top: this.positionAbs.top - this.margins.top,
+ left: this.positionAbs.left - this.margins.left,
+ scroll: false,
+ parent: this._getParentOffset(),
+ relative: this._getRelativeOffset()
+ };
+
+ this.offset.click = {
+ left: event.pageX - this.offset.left,
+ top: event.pageY - this.offset.top
+ };
+ },
+
+ _mouseDrag: function(event, noPropagation) {
+ // reset any necessary cached properties (see #5009)
+ if ( this.hasFixedAncestor ) {
+ this.offset.parent = this._getParentOffset();
+ }
+
+ //Compute the helpers position
+ this.position = this._generatePosition( event, true );
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ //Call plugins and callbacks and use the resulting position if something is returned
+ if (!noPropagation) {
+ var ui = this._uiHash();
+ if (this._trigger("drag", event, ui) === false) {
+ this._mouseUp({});
+ return false;
+ }
+ this.position = ui.position;
+ }
+
+ this.helper[ 0 ].style.left = this.position.left + "px";
+ this.helper[ 0 ].style.top = this.position.top + "px";
+
+ if ($.ui.ddmanager) {
+ $.ui.ddmanager.drag(this, event);
+ }
+
+ return false;
+ },
+
+ _mouseStop: function(event) {
+
+ //If we are using droppables, inform the manager about the drop
+ var that = this,
+ dropped = false;
+ if ($.ui.ddmanager && !this.options.dropBehaviour) {
+ dropped = $.ui.ddmanager.drop(this, event);
+ }
+
+ //if a drop comes from outside (a sortable)
+ if (this.dropped) {
+ dropped = this.dropped;
+ this.dropped = false;
+ }
+
+ if ((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+ $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
+ if (that._trigger("stop", event) !== false) {
+ that._clear();
+ }
+ });
+ } else {
+ if (this._trigger("stop", event) !== false) {
+ this._clear();
+ }
+ }
+
+ return false;
+ },
+
+ _mouseUp: function( event ) {
+ this._unblockFrames();
+
+ //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
+ if ( $.ui.ddmanager ) {
+ $.ui.ddmanager.dragStop(this, event);
+ }
+
+ // Only need to focus if the event occurred on the draggable itself, see #10527
+ if ( this.handleElement.is( event.target ) ) {
+ // The interaction is over; whether or not the click resulted in a drag, focus the element
+ this.element.focus();
+ }
+
+ return $.ui.mouse.prototype._mouseUp.call(this, event);
+ },
+
+ cancel: function() {
+
+ if (this.helper.is(".ui-draggable-dragging")) {
+ this._mouseUp({});
+ } else {
+ this._clear();
+ }
+
+ return this;
+
+ },
+
+ _getHandle: function(event) {
+ return this.options.handle ?
+ !!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
+ true;
+ },
+
+ _setHandleClassName: function() {
+ this.handleElement = this.options.handle ?
+ this.element.find( this.options.handle ) : this.element;
+ this.handleElement.addClass( "ui-draggable-handle" );
+ },
+
+ _removeHandleClassName: function() {
+ this.handleElement.removeClass( "ui-draggable-handle" );
+ },
+
+ _createHelper: function(event) {
+
+ var o = this.options,
+ helperIsFunction = $.isFunction( o.helper ),
+ helper = helperIsFunction ?
+ $( o.helper.apply( this.element[ 0 ], [ event ] ) ) :
+ ( o.helper === "clone" ?
+ this.element.clone().removeAttr( "id" ) :
+ this.element );
+
+ if (!helper.parents("body").length) {
+ helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
+ }
+
+ // http://bugs.jqueryui.com/ticket/9446
+ // a helper function can return the original element
+ // which wouldn't have been set to relative in _create
+ if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {
+ this._setPositionRelative();
+ }
+
+ if (helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
+ helper.css("position", "absolute");
+ }
+
+ return helper;
+
+ },
+
+ _setPositionRelative: function() {
+ if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) {
+ this.element[ 0 ].style.position = "relative";
+ }
+ },
+
+ _adjustOffsetFromHelper: function(obj) {
+ if (typeof obj === "string") {
+ obj = obj.split(" ");
+ }
+ if ($.isArray(obj)) {
+ obj = { left: +obj[0], top: +obj[1] || 0 };
+ }
+ if ("left" in obj) {
+ this.offset.click.left = obj.left + this.margins.left;
+ }
+ if ("right" in obj) {
+ this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+ }
+ if ("top" in obj) {
+ this.offset.click.top = obj.top + this.margins.top;
+ }
+ if ("bottom" in obj) {
+ this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+ }
+ },
+
+ _isRootNode: function( element ) {
+ return ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];
+ },
+
+ _getParentOffset: function() {
+
+ //Get the offsetParent and cache its position
+ var po = this.offsetParent.offset(),
+ document = this.document[ 0 ];
+
+ // This is a special case where we need to modify a offset calculated on start, since the following happened:
+ // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+ // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+ // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+ if (this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+ po.left += this.scrollParent.scrollLeft();
+ po.top += this.scrollParent.scrollTop();
+ }
+
+ if ( this._isRootNode( this.offsetParent[ 0 ] ) ) {
+ po = { top: 0, left: 0 };
+ }
+
+ return {
+ top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
+ left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
+ };
+
+ },
+
+ _getRelativeOffset: function() {
+ if ( this.cssPosition !== "relative" ) {
+ return { top: 0, left: 0 };
+ }
+
+ var p = this.element.position(),
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
+
+ return {
+ top: p.top - ( parseInt(this.helper.css( "top" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),
+ left: p.left - ( parseInt(this.helper.css( "left" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )
+ };
+
+ },
+
+ _cacheMargins: function() {
+ this.margins = {
+ left: (parseInt(this.element.css("marginLeft"), 10) || 0),
+ top: (parseInt(this.element.css("marginTop"), 10) || 0),
+ right: (parseInt(this.element.css("marginRight"), 10) || 0),
+ bottom: (parseInt(this.element.css("marginBottom"), 10) || 0)
+ };
+ },
+
+ _cacheHelperProportions: function() {
+ this.helperProportions = {
+ width: this.helper.outerWidth(),
+ height: this.helper.outerHeight()
+ };
+ },
+
+ _setContainment: function() {
+
+ var isUserScrollable, c, ce,
+ o = this.options,
+ document = this.document[ 0 ];
+
+ this.relativeContainer = null;
+
+ if ( !o.containment ) {
+ this.containment = null;
+ return;
+ }
+
+ if ( o.containment === "window" ) {
+ this.containment = [
+ $( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+ $( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+ $( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
+ $( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+ ];
+ return;
+ }
+
+ if ( o.containment === "document") {
+ this.containment = [
+ 0,
+ 0,
+ $( document ).width() - this.helperProportions.width - this.margins.left,
+ ( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+ ];
+ return;
+ }
+
+ if ( o.containment.constructor === Array ) {
+ this.containment = o.containment;
+ return;
+ }
+
+ if ( o.containment === "parent" ) {
+ o.containment = this.helper[ 0 ].parentNode;
+ }
+
+ c = $( o.containment );
+ ce = c[ 0 ];
+
+ if ( !ce ) {
+ return;
+ }
+
+ isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) );
+
+ this.containment = [
+ ( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
+ ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ),
+ ( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
+ ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) -
+ ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) -
+ this.helperProportions.width -
+ this.margins.left -
+ this.margins.right,
+ ( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
+ ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) -
+ ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) -
+ this.helperProportions.height -
+ this.margins.top -
+ this.margins.bottom
+ ];
+ this.relativeContainer = c;
+ },
+
+ _convertPositionTo: function(d, pos) {
+
+ if (!pos) {
+ pos = this.position;
+ }
+
+ var mod = d === "absolute" ? 1 : -1,
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
+
+ return {
+ top: (
+ pos.top + // The absolute mouse position
+ this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod)
+ ),
+ left: (
+ pos.left + // The absolute mouse position
+ this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod)
+ )
+ };
+
+ },
+
+ _generatePosition: function( event, constrainPosition ) {
+
+ var containment, co, top, left,
+ o = this.options,
+ scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),
+ pageX = event.pageX,
+ pageY = event.pageY;
+
+ // Cache the scroll
+ if ( !scrollIsRootNode || !this.offset.scroll ) {
+ this.offset.scroll = {
+ top: this.scrollParent.scrollTop(),
+ left: this.scrollParent.scrollLeft()
+ };
+ }
+
+ /*
+ * - Position constraining -
+ * Constrain the position to a mix of grid, containment.
+ */
+
+ // If we are not dragging yet, we won't check for options
+ if ( constrainPosition ) {
+ if ( this.containment ) {
+ if ( this.relativeContainer ){
+ co = this.relativeContainer.offset();
+ containment = [
+ this.containment[ 0 ] + co.left,
+ this.containment[ 1 ] + co.top,
+ this.containment[ 2 ] + co.left,
+ this.containment[ 3 ] + co.top
+ ];
+ } else {
+ containment = this.containment;
+ }
+
+ if (event.pageX - this.offset.click.left < containment[0]) {
+ pageX = containment[0] + this.offset.click.left;
+ }
+ if (event.pageY - this.offset.click.top < containment[1]) {
+ pageY = containment[1] + this.offset.click.top;
+ }
+ if (event.pageX - this.offset.click.left > containment[2]) {
+ pageX = containment[2] + this.offset.click.left;
+ }
+ if (event.pageY - this.offset.click.top > containment[3]) {
+ pageY = containment[3] + this.offset.click.top;
+ }
+ }
+
+ if (o.grid) {
+ //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+ top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
+ pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+ left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
+ pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+ }
+
+ if ( o.axis === "y" ) {
+ pageX = this.originalPageX;
+ }
+
+ if ( o.axis === "x" ) {
+ pageY = this.originalPageY;
+ }
+ }
+
+ return {
+ top: (
+ pageY - // The absolute mouse position
+ this.offset.click.top - // Click offset (relative to the element)
+ this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top + // The offsetParent's offset without borders (offset + border)
+ ( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) )
+ ),
+ left: (
+ pageX - // The absolute mouse position
+ this.offset.click.left - // Click offset (relative to the element)
+ this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left + // The offsetParent's offset without borders (offset + border)
+ ( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) )
+ )
+ };
+
+ },
+
+ _clear: function() {
+ this.helper.removeClass("ui-draggable-dragging");
+ if (this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
+ this.helper.remove();
+ }
+ this.helper = null;
+ this.cancelHelperRemoval = false;
+ if ( this.destroyOnClear ) {
+ this.destroy();
+ }
+ },
+
+ _normalizeRightBottom: function() {
+ if ( this.options.axis !== "y" && this.helper.css( "right" ) !== "auto" ) {
+ this.helper.width( this.helper.width() );
+ this.helper.css( "right", "auto" );
+ }
+ if ( this.options.axis !== "x" && this.helper.css( "bottom" ) !== "auto" ) {
+ this.helper.height( this.helper.height() );
+ this.helper.css( "bottom", "auto" );
+ }
+ },
+
+ // From now on bulk stuff - mainly helpers
+
+ _trigger: function( type, event, ui ) {
+ ui = ui || this._uiHash();
+ $.ui.plugin.call( this, type, [ event, ui, this ], true );
+
+ // Absolute position and offset (see #6884 ) have to be recalculated after plugins
+ if ( /^(drag|start|stop)/.test( type ) ) {
+ this.positionAbs = this._convertPositionTo( "absolute" );
+ ui.offset = this.positionAbs;
+ }
+ return $.Widget.prototype._trigger.call( this, type, event, ui );
+ },
+
+ plugins: {},
+
+ _uiHash: function() {
+ return {
+ helper: this.helper,
+ position: this.position,
+ originalPosition: this.originalPosition,
+ offset: this.positionAbs
+ };
+ }
+
+});
+
+$.ui.plugin.add( "draggable", "connectToSortable", {
+ start: function( event, ui, draggable ) {
+ var uiSortable = $.extend( {}, ui, {
+ item: draggable.element
+ });
+
+ draggable.sortables = [];
+ $( draggable.options.connectToSortable ).each(function() {
+ var sortable = $( this ).sortable( "instance" );
+
+ if ( sortable && !sortable.options.disabled ) {
+ draggable.sortables.push( sortable );
+
+ // refreshPositions is called at drag start to refresh the containerCache
+ // which is used in drag. This ensures it's initialized and synchronized
+ // with any changes that might have happened on the page since initialization.
+ sortable.refreshPositions();
+ sortable._trigger("activate", event, uiSortable);
+ }
+ });
+ },
+ stop: function( event, ui, draggable ) {
+ var uiSortable = $.extend( {}, ui, {
+ item: draggable.element
+ });
+
+ draggable.cancelHelperRemoval = false;
+
+ $.each( draggable.sortables, function() {
+ var sortable = this;
+
+ if ( sortable.isOver ) {
+ sortable.isOver = 0;
+
+ // Allow this sortable to handle removing the helper
+ draggable.cancelHelperRemoval = true;
+ sortable.cancelHelperRemoval = false;
+
+ // Use _storedCSS To restore properties in the sortable,
+ // as this also handles revert (#9675) since the draggable
+ // may have modified them in unexpected ways (#8809)
+ sortable._storedCSS = {
+ position: sortable.placeholder.css( "position" ),
+ top: sortable.placeholder.css( "top" ),
+ left: sortable.placeholder.css( "left" )
+ };
+
+ sortable._mouseStop(event);
+
+ // Once drag has ended, the sortable should return to using
+ // its original helper, not the shared helper from draggable
+ sortable.options.helper = sortable.options._helper;
+ } else {
+ // Prevent this Sortable from removing the helper.
+ // However, don't set the draggable to remove the helper
+ // either as another connected Sortable may yet handle the removal.
+ sortable.cancelHelperRemoval = true;
+
+ sortable._trigger( "deactivate", event, uiSortable );
+ }
+ });
+ },
+ drag: function( event, ui, draggable ) {
+ $.each( draggable.sortables, function() {
+ var innermostIntersecting = false,
+ sortable = this;
+
+ // Copy over variables that sortable's _intersectsWith uses
+ sortable.positionAbs = draggable.positionAbs;
+ sortable.helperProportions = draggable.helperProportions;
+ sortable.offset.click = draggable.offset.click;
+
+ if ( sortable._intersectsWith( sortable.containerCache ) ) {
+ innermostIntersecting = true;
+
+ $.each( draggable.sortables, function() {
+ // Copy over variables that sortable's _intersectsWith uses
+ this.positionAbs = draggable.positionAbs;
+ this.helperProportions = draggable.helperProportions;
+ this.offset.click = draggable.offset.click;
+
+ if ( this !== sortable &&
+ this._intersectsWith( this.containerCache ) &&
+ $.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {
+ innermostIntersecting = false;
+ }
+
+ return innermostIntersecting;
+ });
+ }
+
+ if ( innermostIntersecting ) {
+ // If it intersects, we use a little isOver variable and set it once,
+ // so that the move-in stuff gets fired only once.
+ if ( !sortable.isOver ) {
+ sortable.isOver = 1;
+
+ // Store draggable's parent in case we need to reappend to it later.
+ draggable._parent = ui.helper.parent();
+
+ sortable.currentItem = ui.helper
+ .appendTo( sortable.element )
+ .data( "ui-sortable-item", true );
+
+ // Store helper option to later restore it
+ sortable.options._helper = sortable.options.helper;
+
+ sortable.options.helper = function() {
+ return ui.helper[ 0 ];
+ };
+
+ // Fire the start events of the sortable with our passed browser event,
+ // and our own helper (so it doesn't create a new one)
+ event.target = sortable.currentItem[ 0 ];
+ sortable._mouseCapture( event, true );
+ sortable._mouseStart( event, true, true );
+
+ // Because the browser event is way off the new appended portlet,
+ // modify necessary variables to reflect the changes
+ sortable.offset.click.top = draggable.offset.click.top;
+ sortable.offset.click.left = draggable.offset.click.left;
+ sortable.offset.parent.left -= draggable.offset.parent.left -
+ sortable.offset.parent.left;
+ sortable.offset.parent.top -= draggable.offset.parent.top -
+ sortable.offset.parent.top;
+
+ draggable._trigger( "toSortable", event );
+
+ // Inform draggable that the helper is in a valid drop zone,
+ // used solely in the revert option to handle "valid/invalid".
+ draggable.dropped = sortable.element;
+
+ // Need to refreshPositions of all sortables in the case that
+ // adding to one sortable changes the location of the other sortables (#9675)
+ $.each( draggable.sortables, function() {
+ this.refreshPositions();
+ });
+
+ // hack so receive/update callbacks work (mostly)
+ draggable.currentItem = draggable.element;
+ sortable.fromOutside = draggable;
+ }
+
+ if ( sortable.currentItem ) {
+ sortable._mouseDrag( event );
+ // Copy the sortable's position because the draggable's can potentially reflect
+ // a relative position, while sortable is always absolute, which the dragged
+ // element has now become. (#8809)
+ ui.position = sortable.position;
+ }
+ } else {
+ // If it doesn't intersect with the sortable, and it intersected before,
+ // we fake the drag stop of the sortable, but make sure it doesn't remove
+ // the helper by using cancelHelperRemoval.
+ if ( sortable.isOver ) {
+
+ sortable.isOver = 0;
+ sortable.cancelHelperRemoval = true;
+
+ // Calling sortable's mouseStop would trigger a revert,
+ // so revert must be temporarily false until after mouseStop is called.
+ sortable.options._revert = sortable.options.revert;
+ sortable.options.revert = false;
+
+ sortable._trigger( "out", event, sortable._uiHash( sortable ) );
+ sortable._mouseStop( event, true );
+
+ // restore sortable behaviors that were modfied
+ // when the draggable entered the sortable area (#9481)
+ sortable.options.revert = sortable.options._revert;
+ sortable.options.helper = sortable.options._helper;
+
+ if ( sortable.placeholder ) {
+ sortable.placeholder.remove();
+ }
+
+ // Restore and recalculate the draggable's offset considering the sortable
+ // may have modified them in unexpected ways. (#8809, #10669)
+ ui.helper.appendTo( draggable._parent );
+ draggable._refreshOffsets( event );
+ ui.position = draggable._generatePosition( event, true );
+
+ draggable._trigger( "fromSortable", event );
+
+ // Inform draggable that the helper is no longer in a valid drop zone
+ draggable.dropped = false;
+
+ // Need to refreshPositions of all sortables just in case removing
+ // from one sortable changes the location of other sortables (#9675)
+ $.each( draggable.sortables, function() {
+ this.refreshPositions();
+ });
+ }
+ }
+ });
+ }
+});
+
+$.ui.plugin.add("draggable", "cursor", {
+ start: function( event, ui, instance ) {
+ var t = $( "body" ),
+ o = instance.options;
+
+ if (t.css("cursor")) {
+ o._cursor = t.css("cursor");
+ }
+ t.css("cursor", o.cursor);
+ },
+ stop: function( event, ui, instance ) {
+ var o = instance.options;
+ if (o._cursor) {
+ $("body").css("cursor", o._cursor);
+ }
+ }
+});
+
+$.ui.plugin.add("draggable", "opacity", {
+ start: function( event, ui, instance ) {
+ var t = $( ui.helper ),
+ o = instance.options;
+ if (t.css("opacity")) {
+ o._opacity = t.css("opacity");
+ }
+ t.css("opacity", o.opacity);
+ },
+ stop: function( event, ui, instance ) {
+ var o = instance.options;
+ if (o._opacity) {
+ $(ui.helper).css("opacity", o._opacity);
+ }
+ }
+});
+
+$.ui.plugin.add("draggable", "scroll", {
+ start: function( event, ui, i ) {
+ if ( !i.scrollParentNotHidden ) {
+ i.scrollParentNotHidden = i.helper.scrollParent( false );
+ }
+
+ if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] && i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) {
+ i.overflowOffset = i.scrollParentNotHidden.offset();
+ }
+ },
+ drag: function( event, ui, i ) {
+
+ var o = i.options,
+ scrolled = false,
+ scrollParent = i.scrollParentNotHidden[ 0 ],
+ document = i.document[ 0 ];
+
+ if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) {
+ if ( !o.axis || o.axis !== "x" ) {
+ if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY < o.scrollSensitivity ) {
+ scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;
+ } else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {
+ scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;
+ }
+ }
+
+ if ( !o.axis || o.axis !== "y" ) {
+ if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX < o.scrollSensitivity ) {
+ scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;
+ } else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {
+ scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;
+ }
+ }
+
+ } else {
+
+ if (!o.axis || o.axis !== "x") {
+ if (event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+ scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+ } else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+ scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+ }
+ }
+
+ if (!o.axis || o.axis !== "y") {
+ if (event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+ scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+ } else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+ scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+ }
+ }
+
+ }
+
+ if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(i, event);
+ }
+
+ }
+});
+
+$.ui.plugin.add("draggable", "snap", {
+ start: function( event, ui, i ) {
+
+ var o = i.options;
+
+ i.snapElements = [];
+
+ $(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
+ var $t = $(this),
+ $o = $t.offset();
+ if (this !== i.element[0]) {
+ i.snapElements.push({
+ item: this,
+ width: $t.outerWidth(), height: $t.outerHeight(),
+ top: $o.top, left: $o.left
+ });
+ }
+ });
+
+ },
+ drag: function( event, ui, inst ) {
+
+ var ts, bs, ls, rs, l, r, t, b, i, first,
+ o = inst.options,
+ d = o.snapTolerance,
+ x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+ y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+
+ for (i = inst.snapElements.length - 1; i >= 0; i--){
+
+ l = inst.snapElements[i].left - inst.margins.left;
+ r = l + inst.snapElements[i].width;
+ t = inst.snapElements[i].top - inst.margins.top;
+ b = t + inst.snapElements[i].height;
+
+ if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
+ if (inst.snapElements[i].snapping) {
+ (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+ }
+ inst.snapElements[i].snapping = false;
+ continue;
+ }
+
+ if (o.snapMode !== "inner") {
+ ts = Math.abs(t - y2) <= d;
+ bs = Math.abs(b - y1) <= d;
+ ls = Math.abs(l - x2) <= d;
+ rs = Math.abs(r - x1) <= d;
+ if (ts) {
+ ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top;
+ }
+ if (bs) {
+ ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top;
+ }
+ if (ls) {
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left;
+ }
+ if (rs) {
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left;
+ }
+ }
+
+ first = (ts || bs || ls || rs);
+
+ if (o.snapMode !== "outer") {
+ ts = Math.abs(t - y1) <= d;
+ bs = Math.abs(b - y2) <= d;
+ ls = Math.abs(l - x1) <= d;
+ rs = Math.abs(r - x2) <= d;
+ if (ts) {
+ ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top;
+ }
+ if (bs) {
+ ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top;
+ }
+ if (ls) {
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left;
+ }
+ if (rs) {
+ ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left;
+ }
+ }
+
+ if (!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
+ (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+ }
+ inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+
+ }
+
+ }
+});
+
+$.ui.plugin.add("draggable", "stack", {
+ start: function( event, ui, instance ) {
+ var min,
+ o = instance.options,
+ group = $.makeArray($(o.stack)).sort(function(a, b) {
+ return (parseInt($(a).css("zIndex"), 10) || 0) - (parseInt($(b).css("zIndex"), 10) || 0);
+ });
+
+ if (!group.length) { return; }
+
+ min = parseInt($(group[0]).css("zIndex"), 10) || 0;
+ $(group).each(function(i) {
+ $(this).css("zIndex", min + i);
+ });
+ this.css("zIndex", (min + group.length));
+ }
+});
+
+$.ui.plugin.add("draggable", "zIndex", {
+ start: function( event, ui, instance ) {
+ var t = $( ui.helper ),
+ o = instance.options;
+
+ if (t.css("zIndex")) {
+ o._zIndex = t.css("zIndex");
+ }
+ t.css("zIndex", o.zIndex);
+ },
+ stop: function( event, ui, instance ) {
+ var o = instance.options;
+
+ if (o._zIndex) {
+ $(ui.helper).css("zIndex", o._zIndex);
+ }
+ }
+});
+
+var draggable = $.ui.draggable;
+
+
+/*!
+ * jQuery UI Resizable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/resizable/
+ */
+
+
+$.widget("ui.resizable", $.ui.mouse, {
+ version: "1.11.4",
+ widgetEventPrefix: "resize",
+ options: {
+ alsoResize: false,
+ animate: false,
+ animateDuration: "slow",
+ animateEasing: "swing",
+ aspectRatio: false,
+ autoHide: false,
+ containment: false,
+ ghost: false,
+ grid: false,
+ handles: "e,s,se",
+ helper: false,
+ maxHeight: null,
+ maxWidth: null,
+ minHeight: 10,
+ minWidth: 10,
+ // See #7960
+ zIndex: 90,
+
+ // callbacks
+ resize: null,
+ start: null,
+ stop: null
+ },
+
+ _num: function( value ) {
+ return parseInt( value, 10 ) || 0;
+ },
+
+ _isNumber: function( value ) {
+ return !isNaN( parseInt( value, 10 ) );
+ },
+
+ _hasScroll: function( el, a ) {
+
+ if ( $( el ).css( "overflow" ) === "hidden") {
+ return false;
+ }
+
+ var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+ has = false;
+
+ if ( el[ scroll ] > 0 ) {
+ return true;
+ }
+
+ // TODO: determine which cases actually cause this to happen
+ // if the element doesn't have the scroll set, see if it's possible to
+ // set the scroll
+ el[ scroll ] = 1;
+ has = ( el[ scroll ] > 0 );
+ el[ scroll ] = 0;
+ return has;
+ },
+
+ _create: function() {
+
+ var n, i, handle, axis, hname,
+ that = this,
+ o = this.options;
+ this.element.addClass("ui-resizable");
+
+ $.extend(this, {
+ _aspectRatio: !!(o.aspectRatio),
+ aspectRatio: o.aspectRatio,
+ originalElement: this.element,
+ _proportionallyResizeElements: [],
+ _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
+ });
+
+ // Wrap the element if it cannot hold child nodes
+ if (this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)) {
+
+ this.element.wrap(
+ $("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
+ position: this.element.css("position"),
+ width: this.element.outerWidth(),
+ height: this.element.outerHeight(),
+ top: this.element.css("top"),
+ left: this.element.css("left")
+ })
+ );
+
+ this.element = this.element.parent().data(
+ "ui-resizable", this.element.resizable( "instance" )
+ );
+
+ this.elementIsWrapper = true;
+
+ this.element.css({
+ marginLeft: this.originalElement.css("marginLeft"),
+ marginTop: this.originalElement.css("marginTop"),
+ marginRight: this.originalElement.css("marginRight"),
+ marginBottom: this.originalElement.css("marginBottom")
+ });
+ this.originalElement.css({
+ marginLeft: 0,
+ marginTop: 0,
+ marginRight: 0,
+ marginBottom: 0
+ });
+ // support: Safari
+ // Prevent Safari textarea resize
+ this.originalResizeStyle = this.originalElement.css("resize");
+ this.originalElement.css("resize", "none");
+
+ this._proportionallyResizeElements.push( this.originalElement.css({
+ position: "static",
+ zoom: 1,
+ display: "block"
+ }) );
+
+ // support: IE9
+ // avoid IE jump (hard set the margin)
+ this.originalElement.css({ margin: this.originalElement.css("margin") });
+
+ this._proportionallyResize();
+ }
+
+ this.handles = o.handles ||
+ ( !$(".ui-resizable-handle", this.element).length ?
+ "e,s,se" : {
+ n: ".ui-resizable-n",
+ e: ".ui-resizable-e",
+ s: ".ui-resizable-s",
+ w: ".ui-resizable-w",
+ se: ".ui-resizable-se",
+ sw: ".ui-resizable-sw",
+ ne: ".ui-resizable-ne",
+ nw: ".ui-resizable-nw"
+ } );
+
+ this._handles = $();
+ if ( this.handles.constructor === String ) {
+
+ if ( this.handles === "all") {
+ this.handles = "n,e,s,w,se,sw,ne,nw";
+ }
+
+ n = this.handles.split(",");
+ this.handles = {};
+
+ for (i = 0; i < n.length; i++) {
+
+ handle = $.trim(n[i]);
+ hname = "ui-resizable-" + handle;
+ axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
+
+ axis.css({ zIndex: o.zIndex });
+
+ // TODO : What's going on here?
+ if ("se" === handle) {
+ axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
+ }
+
+ this.handles[handle] = ".ui-resizable-" + handle;
+ this.element.append(axis);
+ }
+
+ }
+
+ this._renderAxis = function(target) {
+
+ var i, axis, padPos, padWrapper;
+
+ target = target || this.element;
+
+ for (i in this.handles) {
+
+ if (this.handles[i].constructor === String) {
+ this.handles[i] = this.element.children( this.handles[ i ] ).first().show();
+ } else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {
+ this.handles[ i ] = $( this.handles[ i ] );
+ this._on( this.handles[ i ], { "mousedown": that._mouseDown });
+ }
+
+ if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)) {
+
+ axis = $(this.handles[i], this.element);
+
+ padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+
+ padPos = [ "padding",
+ /ne|nw|n/.test(i) ? "Top" :
+ /se|sw|s/.test(i) ? "Bottom" :
+ /^e$/.test(i) ? "Right" : "Left" ].join("");
+
+ target.css(padPos, padWrapper);
+
+ this._proportionallyResize();
+ }
+
+ this._handles = this._handles.add( this.handles[ i ] );
+ }
+ };
+
+ // TODO: make renderAxis a prototype function
+ this._renderAxis(this.element);
+
+ this._handles = this._handles.add( this.element.find( ".ui-resizable-handle" ) );
+ this._handles.disableSelection();
+
+ this._handles.mouseover(function() {
+ if (!that.resizing) {
+ if (this.className) {
+ axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+ }
+ that.axis = axis && axis[1] ? axis[1] : "se";
+ }
+ });
+
+ if (o.autoHide) {
+ this._handles.hide();
+ $(this.element)
+ .addClass("ui-resizable-autohide")
+ .mouseenter(function() {
+ if (o.disabled) {
+ return;
+ }
+ $(this).removeClass("ui-resizable-autohide");
+ that._handles.show();
+ })
+ .mouseleave(function() {
+ if (o.disabled) {
+ return;
+ }
+ if (!that.resizing) {
+ $(this).addClass("ui-resizable-autohide");
+ that._handles.hide();
+ }
+ });
+ }
+
+ this._mouseInit();
+ },
+
+ _destroy: function() {
+
+ this._mouseDestroy();
+
+ var wrapper,
+ _destroy = function(exp) {
+ $(exp)
+ .removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+ .removeData("resizable")
+ .removeData("ui-resizable")
+ .unbind(".resizable")
+ .find(".ui-resizable-handle")
+ .remove();
+ };
+
+ // TODO: Unwrap at same DOM position
+ if (this.elementIsWrapper) {
+ _destroy(this.element);
+ wrapper = this.element;
+ this.originalElement.css({
+ position: wrapper.css("position"),
+ width: wrapper.outerWidth(),
+ height: wrapper.outerHeight(),
+ top: wrapper.css("top"),
+ left: wrapper.css("left")
+ }).insertAfter( wrapper );
+ wrapper.remove();
+ }
+
+ this.originalElement.css("resize", this.originalResizeStyle);
+ _destroy(this.originalElement);
+
+ return this;
+ },
+
+ _mouseCapture: function(event) {
+ var i, handle,
+ capture = false;
+
+ for (i in this.handles) {
+ handle = $(this.handles[i])[0];
+ if (handle === event.target || $.contains(handle, event.target)) {
+ capture = true;
+ }
+ }
+
+ return !this.options.disabled && capture;
+ },
+
+ _mouseStart: function(event) {
+
+ var curleft, curtop, cursor,
+ o = this.options,
+ el = this.element;
+
+ this.resizing = true;
+
+ this._renderProxy();
+
+ curleft = this._num(this.helper.css("left"));
+ curtop = this._num(this.helper.css("top"));
+
+ if (o.containment) {
+ curleft += $(o.containment).scrollLeft() || 0;
+ curtop += $(o.containment).scrollTop() || 0;
+ }
+
+ this.offset = this.helper.offset();
+ this.position = { left: curleft, top: curtop };
+
+ this.size = this._helper ? {
+ width: this.helper.width(),
+ height: this.helper.height()
+ } : {
+ width: el.width(),
+ height: el.height()
+ };
+
+ this.originalSize = this._helper ? {
+ width: el.outerWidth(),
+ height: el.outerHeight()
+ } : {
+ width: el.width(),
+ height: el.height()
+ };
+
+ this.sizeDiff = {
+ width: el.outerWidth() - el.width(),
+ height: el.outerHeight() - el.height()
+ };
+
+ this.originalPosition = { left: curleft, top: curtop };
+ this.originalMousePosition = { left: event.pageX, top: event.pageY };
+
+ this.aspectRatio = (typeof o.aspectRatio === "number") ?
+ o.aspectRatio :
+ ((this.originalSize.width / this.originalSize.height) || 1);
+
+ cursor = $(".ui-resizable-" + this.axis).css("cursor");
+ $("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
+
+ el.addClass("ui-resizable-resizing");
+ this._propagate("start", event);
+ return true;
+ },
+
+ _mouseDrag: function(event) {
+
+ var data, props,
+ smp = this.originalMousePosition,
+ a = this.axis,
+ dx = (event.pageX - smp.left) || 0,
+ dy = (event.pageY - smp.top) || 0,
+ trigger = this._change[a];
+
+ this._updatePrevProperties();
+
+ if (!trigger) {
+ return false;
+ }
+
+ data = trigger.apply(this, [ event, dx, dy ]);
+
+ this._updateVirtualBoundaries(event.shiftKey);
+ if (this._aspectRatio || event.shiftKey) {
+ data = this._updateRatio(data, event);
+ }
+
+ data = this._respectSize(data, event);
+
+ this._updateCache(data);
+
+ this._propagate("resize", event);
+
+ props = this._applyChanges();
+
+ if ( !this._helper && this._proportionallyResizeElements.length ) {
+ this._proportionallyResize();
+ }
+
+ if ( !$.isEmptyObject( props ) ) {
+ this._updatePrevProperties();
+ this._trigger( "resize", event, this.ui() );
+ this._applyChanges();
+ }
+
+ return false;
+ },
+
+ _mouseStop: function(event) {
+
+ this.resizing = false;
+ var pr, ista, soffseth, soffsetw, s, left, top,
+ o = this.options, that = this;
+
+ if (this._helper) {
+
+ pr = this._proportionallyResizeElements;
+ ista = pr.length && (/textarea/i).test(pr[0].nodeName);
+ soffseth = ista && this._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height;
+ soffsetw = ista ? 0 : that.sizeDiff.width;
+
+ s = {
+ width: (that.helper.width() - soffsetw),
+ height: (that.helper.height() - soffseth)
+ };
+ left = (parseInt(that.element.css("left"), 10) +
+ (that.position.left - that.originalPosition.left)) || null;
+ top = (parseInt(that.element.css("top"), 10) +
+ (that.position.top - that.originalPosition.top)) || null;
+
+ if (!o.animate) {
+ this.element.css($.extend(s, { top: top, left: left }));
+ }
+
+ that.helper.height(that.size.height);
+ that.helper.width(that.size.width);
+
+ if (this._helper && !o.animate) {
+ this._proportionallyResize();
+ }
+ }
+
+ $("body").css("cursor", "auto");
+
+ this.element.removeClass("ui-resizable-resizing");
+
+ this._propagate("stop", event);
+
+ if (this._helper) {
+ this.helper.remove();
+ }
+
+ return false;
+
+ },
+
+ _updatePrevProperties: function() {
+ this.prevPosition = {
+ top: this.position.top,
+ left: this.position.left
+ };
+ this.prevSize = {
+ width: this.size.width,
+ height: this.size.height
+ };
+ },
+
+ _applyChanges: function() {
+ var props = {};
+
+ if ( this.position.top !== this.prevPosition.top ) {
+ props.top = this.position.top + "px";
+ }
+ if ( this.position.left !== this.prevPosition.left ) {
+ props.left = this.position.left + "px";
+ }
+ if ( this.size.width !== this.prevSize.width ) {
+ props.width = this.size.width + "px";
+ }
+ if ( this.size.height !== this.prevSize.height ) {
+ props.height = this.size.height + "px";
+ }
+
+ this.helper.css( props );
+
+ return props;
+ },
+
+ _updateVirtualBoundaries: function(forceAspectRatio) {
+ var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
+ o = this.options;
+
+ b = {
+ minWidth: this._isNumber(o.minWidth) ? o.minWidth : 0,
+ maxWidth: this._isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+ minHeight: this._isNumber(o.minHeight) ? o.minHeight : 0,
+ maxHeight: this._isNumber(o.maxHeight) ? o.maxHeight : Infinity
+ };
+
+ if (this._aspectRatio || forceAspectRatio) {
+ pMinWidth = b.minHeight * this.aspectRatio;
+ pMinHeight = b.minWidth / this.aspectRatio;
+ pMaxWidth = b.maxHeight * this.aspectRatio;
+ pMaxHeight = b.maxWidth / this.aspectRatio;
+
+ if (pMinWidth > b.minWidth) {
+ b.minWidth = pMinWidth;
+ }
+ if (pMinHeight > b.minHeight) {
+ b.minHeight = pMinHeight;
+ }
+ if (pMaxWidth < b.maxWidth) {
+ b.maxWidth = pMaxWidth;
+ }
+ if (pMaxHeight < b.maxHeight) {
+ b.maxHeight = pMaxHeight;
+ }
+ }
+ this._vBoundaries = b;
+ },
+
+ _updateCache: function(data) {
+ this.offset = this.helper.offset();
+ if (this._isNumber(data.left)) {
+ this.position.left = data.left;
+ }
+ if (this._isNumber(data.top)) {
+ this.position.top = data.top;
+ }
+ if (this._isNumber(data.height)) {
+ this.size.height = data.height;
+ }
+ if (this._isNumber(data.width)) {
+ this.size.width = data.width;
+ }
+ },
+
+ _updateRatio: function( data ) {
+
+ var cpos = this.position,
+ csize = this.size,
+ a = this.axis;
+
+ if (this._isNumber(data.height)) {
+ data.width = (data.height * this.aspectRatio);
+ } else if (this._isNumber(data.width)) {
+ data.height = (data.width / this.aspectRatio);
+ }
+
+ if (a === "sw") {
+ data.left = cpos.left + (csize.width - data.width);
+ data.top = null;
+ }
+ if (a === "nw") {
+ data.top = cpos.top + (csize.height - data.height);
+ data.left = cpos.left + (csize.width - data.width);
+ }
+
+ return data;
+ },
+
+ _respectSize: function( data ) {
+
+ var o = this._vBoundaries,
+ a = this.axis,
+ ismaxw = this._isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width),
+ ismaxh = this._isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+ isminw = this._isNumber(data.width) && o.minWidth && (o.minWidth > data.width),
+ isminh = this._isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
+ dw = this.originalPosition.left + this.originalSize.width,
+ dh = this.position.top + this.size.height,
+ cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+ if (isminw) {
+ data.width = o.minWidth;
+ }
+ if (isminh) {
+ data.height = o.minHeight;
+ }
+ if (ismaxw) {
+ data.width = o.maxWidth;
+ }
+ if (ismaxh) {
+ data.height = o.maxHeight;
+ }
+
+ if (isminw && cw) {
+ data.left = dw - o.minWidth;
+ }
+ if (ismaxw && cw) {
+ data.left = dw - o.maxWidth;
+ }
+ if (isminh && ch) {
+ data.top = dh - o.minHeight;
+ }
+ if (ismaxh && ch) {
+ data.top = dh - o.maxHeight;
+ }
+
+ // Fixing jump error on top/left - bug #2330
+ if (!data.width && !data.height && !data.left && data.top) {
+ data.top = null;
+ } else if (!data.width && !data.height && !data.top && data.left) {
+ data.left = null;
+ }
+
+ return data;
+ },
+
+ _getPaddingPlusBorderDimensions: function( element ) {
+ var i = 0,
+ widths = [],
+ borders = [
+ element.css( "borderTopWidth" ),
+ element.css( "borderRightWidth" ),
+ element.css( "borderBottomWidth" ),
+ element.css( "borderLeftWidth" )
+ ],
+ paddings = [
+ element.css( "paddingTop" ),
+ element.css( "paddingRight" ),
+ element.css( "paddingBottom" ),
+ element.css( "paddingLeft" )
+ ];
+
+ for ( ; i < 4; i++ ) {
+ widths[ i ] = ( parseInt( borders[ i ], 10 ) || 0 );
+ widths[ i ] += ( parseInt( paddings[ i ], 10 ) || 0 );
+ }
+
+ return {
+ height: widths[ 0 ] + widths[ 2 ],
+ width: widths[ 1 ] + widths[ 3 ]
+ };
+ },
+
+ _proportionallyResize: function() {
+
+ if (!this._proportionallyResizeElements.length) {
+ return;
+ }
+
+ var prel,
+ i = 0,
+ element = this.helper || this.element;
+
+ for ( ; i < this._proportionallyResizeElements.length; i++) {
+
+ prel = this._proportionallyResizeElements[i];
+
+ // TODO: Seems like a bug to cache this.outerDimensions
+ // considering that we are in a loop.
+ if (!this.outerDimensions) {
+ this.outerDimensions = this._getPaddingPlusBorderDimensions( prel );
+ }
+
+ prel.css({
+ height: (element.height() - this.outerDimensions.height) || 0,
+ width: (element.width() - this.outerDimensions.width) || 0
+ });
+
+ }
+
+ },
+
+ _renderProxy: function() {
+
+ var el = this.element, o = this.options;
+ this.elementOffset = el.offset();
+
+ if (this._helper) {
+
+ this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
+
+ this.helper.addClass(this._helper).css({
+ width: this.element.outerWidth() - 1,
+ height: this.element.outerHeight() - 1,
+ position: "absolute",
+ left: this.elementOffset.left + "px",
+ top: this.elementOffset.top + "px",
+ zIndex: ++o.zIndex //TODO: Don't modify option
+ });
+
+ this.helper
+ .appendTo("body")
+ .disableSelection();
+
+ } else {
+ this.helper = this.element;
+ }
+
+ },
+
+ _change: {
+ e: function(event, dx) {
+ return { width: this.originalSize.width + dx };
+ },
+ w: function(event, dx) {
+ var cs = this.originalSize, sp = this.originalPosition;
+ return { left: sp.left + dx, width: cs.width - dx };
+ },
+ n: function(event, dx, dy) {
+ var cs = this.originalSize, sp = this.originalPosition;
+ return { top: sp.top + dy, height: cs.height - dy };
+ },
+ s: function(event, dx, dy) {
+ return { height: this.originalSize.height + dy };
+ },
+ se: function(event, dx, dy) {
+ return $.extend(this._change.s.apply(this, arguments),
+ this._change.e.apply(this, [ event, dx, dy ]));
+ },
+ sw: function(event, dx, dy) {
+ return $.extend(this._change.s.apply(this, arguments),
+ this._change.w.apply(this, [ event, dx, dy ]));
+ },
+ ne: function(event, dx, dy) {
+ return $.extend(this._change.n.apply(this, arguments),
+ this._change.e.apply(this, [ event, dx, dy ]));
+ },
+ nw: function(event, dx, dy) {
+ return $.extend(this._change.n.apply(this, arguments),
+ this._change.w.apply(this, [ event, dx, dy ]));
+ }
+ },
+
+ _propagate: function(n, event) {
+ $.ui.plugin.call(this, n, [ event, this.ui() ]);
+ (n !== "resize" && this._trigger(n, event, this.ui()));
+ },
+
+ plugins: {},
+
+ ui: function() {
+ return {
+ originalElement: this.originalElement,
+ element: this.element,
+ helper: this.helper,
+ position: this.position,
+ size: this.size,
+ originalSize: this.originalSize,
+ originalPosition: this.originalPosition
+ };
+ }
+
+});
+
+/*
+ * Resizable Extensions
+ */
+
+$.ui.plugin.add("resizable", "animate", {
+
+ stop: function( event ) {
+ var that = $(this).resizable( "instance" ),
+ o = that.options,
+ pr = that._proportionallyResizeElements,
+ ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+ soffseth = ista && that._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height,
+ soffsetw = ista ? 0 : that.sizeDiff.width,
+ style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
+ left = (parseInt(that.element.css("left"), 10) +
+ (that.position.left - that.originalPosition.left)) || null,
+ top = (parseInt(that.element.css("top"), 10) +
+ (that.position.top - that.originalPosition.top)) || null;
+
+ that.element.animate(
+ $.extend(style, top && left ? { top: top, left: left } : {}), {
+ duration: o.animateDuration,
+ easing: o.animateEasing,
+ step: function() {
+
+ var data = {
+ width: parseInt(that.element.css("width"), 10),
+ height: parseInt(that.element.css("height"), 10),
+ top: parseInt(that.element.css("top"), 10),
+ left: parseInt(that.element.css("left"), 10)
+ };
+
+ if (pr && pr.length) {
+ $(pr[0]).css({ width: data.width, height: data.height });
+ }
+
+ // propagating resize, and updating values for each animation step
+ that._updateCache(data);
+ that._propagate("resize", event);
+
+ }
+ }
+ );
+ }
+
+});
+
+$.ui.plugin.add( "resizable", "containment", {
+
+ start: function() {
+ var element, p, co, ch, cw, width, height,
+ that = $( this ).resizable( "instance" ),
+ o = that.options,
+ el = that.element,
+ oc = o.containment,
+ ce = ( oc instanceof $ ) ? oc.get( 0 ) : ( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;
+
+ if ( !ce ) {
+ return;
+ }
+
+ that.containerElement = $( ce );
+
+ if ( /document/.test( oc ) || oc === document ) {
+ that.containerOffset = {
+ left: 0,
+ top: 0
+ };
+ that.containerPosition = {
+ left: 0,
+ top: 0
+ };
+
+ that.parentData = {
+ element: $( document ),
+ left: 0,
+ top: 0,
+ width: $( document ).width(),
+ height: $( document ).height() || document.body.parentNode.scrollHeight
+ };
+ } else {
+ element = $( ce );
+ p = [];
+ $([ "Top", "Right", "Left", "Bottom" ]).each(function( i, name ) {
+ p[ i ] = that._num( element.css( "padding" + name ) );
+ });
+
+ that.containerOffset = element.offset();
+ that.containerPosition = element.position();
+ that.containerSize = {
+ height: ( element.innerHeight() - p[ 3 ] ),
+ width: ( element.innerWidth() - p[ 1 ] )
+ };
+
+ co = that.containerOffset;
+ ch = that.containerSize.height;
+ cw = that.containerSize.width;
+ width = ( that._hasScroll ( ce, "left" ) ? ce.scrollWidth : cw );
+ height = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;
+
+ that.parentData = {
+ element: ce,
+ left: co.left,
+ top: co.top,
+ width: width,
+ height: height
+ };
+ }
+ },
+
+ resize: function( event ) {
+ var woset, hoset, isParent, isOffsetRelative,
+ that = $( this ).resizable( "instance" ),
+ o = that.options,
+ co = that.containerOffset,
+ cp = that.position,
+ pRatio = that._aspectRatio || event.shiftKey,
+ cop = {
+ top: 0,
+ left: 0
+ },
+ ce = that.containerElement,
+ continueResize = true;
+
+ if ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( "position" ) ) ) {
+ cop = co;
+ }
+
+ if ( cp.left < ( that._helper ? co.left : 0 ) ) {
+ that.size.width = that.size.width +
+ ( that._helper ?
+ ( that.position.left - co.left ) :
+ ( that.position.left - cop.left ) );
+
+ if ( pRatio ) {
+ that.size.height = that.size.width / that.aspectRatio;
+ continueResize = false;
+ }
+ that.position.left = o.helper ? co.left : 0;
+ }
+
+ if ( cp.top < ( that._helper ? co.top : 0 ) ) {
+ that.size.height = that.size.height +
+ ( that._helper ?
+ ( that.position.top - co.top ) :
+ that.position.top );
+
+ if ( pRatio ) {
+ that.size.width = that.size.height * that.aspectRatio;
+ continueResize = false;
+ }
+ that.position.top = that._helper ? co.top : 0;
+ }
+
+ isParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );
+ isOffsetRelative = /relative|absolute/.test( that.containerElement.css( "position" ) );
+
+ if ( isParent && isOffsetRelative ) {
+ that.offset.left = that.parentData.left + that.position.left;
+ that.offset.top = that.parentData.top + that.position.top;
+ } else {
+ that.offset.left = that.element.offset().left;
+ that.offset.top = that.element.offset().top;
+ }
+
+ woset = Math.abs( that.sizeDiff.width +
+ (that._helper ?
+ that.offset.left - cop.left :
+ (that.offset.left - co.left)) );
+
+ hoset = Math.abs( that.sizeDiff.height +
+ (that._helper ?
+ that.offset.top - cop.top :
+ (that.offset.top - co.top)) );
+
+ if ( woset + that.size.width >= that.parentData.width ) {
+ that.size.width = that.parentData.width - woset;
+ if ( pRatio ) {
+ that.size.height = that.size.width / that.aspectRatio;
+ continueResize = false;
+ }
+ }
+
+ if ( hoset + that.size.height >= that.parentData.height ) {
+ that.size.height = that.parentData.height - hoset;
+ if ( pRatio ) {
+ that.size.width = that.size.height * that.aspectRatio;
+ continueResize = false;
+ }
+ }
+
+ if ( !continueResize ) {
+ that.position.left = that.prevPosition.left;
+ that.position.top = that.prevPosition.top;
+ that.size.width = that.prevSize.width;
+ that.size.height = that.prevSize.height;
+ }
+ },
+
+ stop: function() {
+ var that = $( this ).resizable( "instance" ),
+ o = that.options,
+ co = that.containerOffset,
+ cop = that.containerPosition,
+ ce = that.containerElement,
+ helper = $( that.helper ),
+ ho = helper.offset(),
+ w = helper.outerWidth() - that.sizeDiff.width,
+ h = helper.outerHeight() - that.sizeDiff.height;
+
+ if ( that._helper && !o.animate && ( /relative/ ).test( ce.css( "position" ) ) ) {
+ $( this ).css({
+ left: ho.left - cop.left - co.left,
+ width: w,
+ height: h
+ });
+ }
+
+ if ( that._helper && !o.animate && ( /static/ ).test( ce.css( "position" ) ) ) {
+ $( this ).css({
+ left: ho.left - cop.left - co.left,
+ width: w,
+ height: h
+ });
+ }
+ }
+});
+
+$.ui.plugin.add("resizable", "alsoResize", {
+
+ start: function() {
+ var that = $(this).resizable( "instance" ),
+ o = that.options;
+
+ $(o.alsoResize).each(function() {
+ var el = $(this);
+ el.data("ui-resizable-alsoresize", {
+ width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+ left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
+ });
+ });
+ },
+
+ resize: function(event, ui) {
+ var that = $(this).resizable( "instance" ),
+ o = that.options,
+ os = that.originalSize,
+ op = that.originalPosition,
+ delta = {
+ height: (that.size.height - os.height) || 0,
+ width: (that.size.width - os.width) || 0,
+ top: (that.position.top - op.top) || 0,
+ left: (that.position.left - op.left) || 0
+ };
+
+ $(o.alsoResize).each(function() {
+ var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
+ css = el.parents(ui.originalElement[0]).length ?
+ [ "width", "height" ] :
+ [ "width", "height", "top", "left" ];
+
+ $.each(css, function(i, prop) {
+ var sum = (start[prop] || 0) + (delta[prop] || 0);
+ if (sum && sum >= 0) {
+ style[prop] = sum || null;
+ }
+ });
+
+ el.css(style);
+ });
+ },
+
+ stop: function() {
+ $(this).removeData("resizable-alsoresize");
+ }
+});
+
+$.ui.plugin.add("resizable", "ghost", {
+
+ start: function() {
+
+ var that = $(this).resizable( "instance" ), o = that.options, cs = that.size;
+
+ that.ghost = that.originalElement.clone();
+ that.ghost
+ .css({
+ opacity: 0.25,
+ display: "block",
+ position: "relative",
+ height: cs.height,
+ width: cs.width,
+ margin: 0,
+ left: 0,
+ top: 0
+ })
+ .addClass("ui-resizable-ghost")
+ .addClass(typeof o.ghost === "string" ? o.ghost : "");
+
+ that.ghost.appendTo(that.helper);
+
+ },
+
+ resize: function() {
+ var that = $(this).resizable( "instance" );
+ if (that.ghost) {
+ that.ghost.css({
+ position: "relative",
+ height: that.size.height,
+ width: that.size.width
+ });
+ }
+ },
+
+ stop: function() {
+ var that = $(this).resizable( "instance" );
+ if (that.ghost && that.helper) {
+ that.helper.get(0).removeChild(that.ghost.get(0));
+ }
+ }
+
+});
+
+$.ui.plugin.add("resizable", "grid", {
+
+ resize: function() {
+ var outerDimensions,
+ that = $(this).resizable( "instance" ),
+ o = that.options,
+ cs = that.size,
+ os = that.originalSize,
+ op = that.originalPosition,
+ a = that.axis,
+ grid = typeof o.grid === "number" ? [ o.grid, o.grid ] : o.grid,
+ gridX = (grid[0] || 1),
+ gridY = (grid[1] || 1),
+ ox = Math.round((cs.width - os.width) / gridX) * gridX,
+ oy = Math.round((cs.height - os.height) / gridY) * gridY,
+ newWidth = os.width + ox,
+ newHeight = os.height + oy,
+ isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
+ isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
+ isMinWidth = o.minWidth && (o.minWidth > newWidth),
+ isMinHeight = o.minHeight && (o.minHeight > newHeight);
+
+ o.grid = grid;
+
+ if (isMinWidth) {
+ newWidth += gridX;
+ }
+ if (isMinHeight) {
+ newHeight += gridY;
+ }
+ if (isMaxWidth) {
+ newWidth -= gridX;
+ }
+ if (isMaxHeight) {
+ newHeight -= gridY;
+ }
+
+ if (/^(se|s|e)$/.test(a)) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ } else if (/^(ne)$/.test(a)) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ that.position.top = op.top - oy;
+ } else if (/^(sw)$/.test(a)) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ that.position.left = op.left - ox;
+ } else {
+ if ( newHeight - gridY <= 0 || newWidth - gridX <= 0) {
+ outerDimensions = that._getPaddingPlusBorderDimensions( this );
+ }
+
+ if ( newHeight - gridY > 0 ) {
+ that.size.height = newHeight;
+ that.position.top = op.top - oy;
+ } else {
+ newHeight = gridY - outerDimensions.height;
+ that.size.height = newHeight;
+ that.position.top = op.top + os.height - newHeight;
+ }
+ if ( newWidth - gridX > 0 ) {
+ that.size.width = newWidth;
+ that.position.left = op.left - ox;
+ } else {
+ newWidth = gridX - outerDimensions.width;
+ that.size.width = newWidth;
+ that.position.left = op.left + os.width - newWidth;
+ }
+ }
+ }
+
+});
+
+var resizable = $.ui.resizable;
+
+
+/*!
+ * jQuery UI Dialog 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/dialog/
+ */
+
+
+var dialog = $.widget( "ui.dialog", {
+ version: "1.11.4",
+ options: {
+ appendTo: "body",
+ autoOpen: true,
+ buttons: [],
+ closeOnEscape: true,
+ closeText: "Close",
+ dialogClass: "",
+ draggable: true,
+ hide: null,
+ height: "auto",
+ maxHeight: null,
+ maxWidth: null,
+ minHeight: 150,
+ minWidth: 150,
+ modal: false,
+ position: {
+ my: "center",
+ at: "center",
+ of: window,
+ collision: "fit",
+ // Ensure the titlebar is always visible
+ using: function( pos ) {
+ var topOffset = $( this ).css( pos ).offset().top;
+ if ( topOffset < 0 ) {
+ $( this ).css( "top", pos.top - topOffset );
+ }
+ }
+ },
+ resizable: true,
+ show: null,
+ title: null,
+ width: 300,
+
+ // callbacks
+ beforeClose: null,
+ close: null,
+ drag: null,
+ dragStart: null,
+ dragStop: null,
+ focus: null,
+ open: null,
+ resize: null,
+ resizeStart: null,
+ resizeStop: null
+ },
+
+ sizeRelatedOptions: {
+ buttons: true,
+ height: true,
+ maxHeight: true,
+ maxWidth: true,
+ minHeight: true,
+ minWidth: true,
+ width: true
+ },
+
+ resizableRelatedOptions: {
+ maxHeight: true,
+ maxWidth: true,
+ minHeight: true,
+ minWidth: true
+ },
+
+ _create: function() {
+ this.originalCss = {
+ display: this.element[ 0 ].style.display,
+ width: this.element[ 0 ].style.width,
+ minHeight: this.element[ 0 ].style.minHeight,
+ maxHeight: this.element[ 0 ].style.maxHeight,
+ height: this.element[ 0 ].style.height
+ };
+ this.originalPosition = {
+ parent: this.element.parent(),
+ index: this.element.parent().children().index( this.element )
+ };
+ this.originalTitle = this.element.attr( "title" );
+ this.options.title = this.options.title || this.originalTitle;
+
+ this._createWrapper();
+
+ this.element
+ .show()
+ .removeAttr( "title" )
+ .addClass( "ui-dialog-content ui-widget-content" )
+ .appendTo( this.uiDialog );
+
+ this._createTitlebar();
+ this._createButtonPane();
+
+ if ( this.options.draggable && $.fn.draggable ) {
+ this._makeDraggable();
+ }
+ if ( this.options.resizable && $.fn.resizable ) {
+ this._makeResizable();
+ }
+
+ this._isOpen = false;
+
+ this._trackFocus();
+ },
+
+ _init: function() {
+ if ( this.options.autoOpen ) {
+ this.open();
+ }
+ },
+
+ _appendTo: function() {
+ var element = this.options.appendTo;
+ if ( element && (element.jquery || element.nodeType) ) {
+ return $( element );
+ }
+ return this.document.find( element || "body" ).eq( 0 );
+ },
+
+ _destroy: function() {
+ var next,
+ originalPosition = this.originalPosition;
+
+ this._untrackInstance();
+ this._destroyOverlay();
+
+ this.element
+ .removeUniqueId()
+ .removeClass( "ui-dialog-content ui-widget-content" )
+ .css( this.originalCss )
+ // Without detaching first, the following becomes really slow
+ .detach();
+
+ this.uiDialog.stop( true, true ).remove();
+
+ if ( this.originalTitle ) {
+ this.element.attr( "title", this.originalTitle );
+ }
+
+ next = originalPosition.parent.children().eq( originalPosition.index );
+ // Don't try to place the dialog next to itself (#8613)
+ if ( next.length && next[ 0 ] !== this.element[ 0 ] ) {
+ next.before( this.element );
+ } else {
+ originalPosition.parent.append( this.element );
+ }
+ },
+
+ widget: function() {
+ return this.uiDialog;
+ },
+
+ disable: $.noop,
+ enable: $.noop,
+
+ close: function( event ) {
+ var activeElement,
+ that = this;
+
+ if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
+ return;
+ }
+
+ this._isOpen = false;
+ this._focusedElement = null;
+ this._destroyOverlay();
+ this._untrackInstance();
+
+ if ( !this.opener.filter( ":focusable" ).focus().length ) {
+
+ // support: IE9
+ // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+ try {
+ activeElement = this.document[ 0 ].activeElement;
+
+ // Support: IE9, IE10
+ // If the <body> is blurred, IE will switch windows, see #4520
+ if ( activeElement && activeElement.nodeName.toLowerCase() !== "body" ) {
+
+ // Hiding a focused element doesn't trigger blur in WebKit
+ // so in case we have nothing to focus on, explicitly blur the active element
+ // https://bugs.webkit.org/show_bug.cgi?id=47182
+ $( activeElement ).blur();
+ }
+ } catch ( error ) {}
+ }
+
+ this._hide( this.uiDialog, this.options.hide, function() {
+ that._trigger( "close", event );
+ });
+ },
+
+ isOpen: function() {
+ return this._isOpen;
+ },
+
+ moveToTop: function() {
+ this._moveToTop();
+ },
+
+ _moveToTop: function( event, silent ) {
+ var moved = false,
+ zIndices = this.uiDialog.siblings( ".ui-front:visible" ).map(function() {
+ return +$( this ).css( "z-index" );
+ }).get(),
+ zIndexMax = Math.max.apply( null, zIndices );
+
+ if ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) {
+ this.uiDialog.css( "z-index", zIndexMax + 1 );
+ moved = true;
+ }
+
+ if ( moved && !silent ) {
+ this._trigger( "focus", event );
+ }
+ return moved;
+ },
+
+ open: function() {
+ var that = this;
+ if ( this._isOpen ) {
+ if ( this._moveToTop() ) {
+ this._focusTabbable();
+ }
+ return;
+ }
+
+ this._isOpen = true;
+ this.opener = $( this.document[ 0 ].activeElement );
+
+ this._size();
+ this._position();
+ this._createOverlay();
+ this._moveToTop( null, true );
+
+ // Ensure the overlay is moved to the top with the dialog, but only when
+ // opening. The overlay shouldn't move after the dialog is open so that
+ // modeless dialogs opened after the modal dialog stack properly.
+ if ( this.overlay ) {
+ this.overlay.css( "z-index", this.uiDialog.css( "z-index" ) - 1 );
+ }
+
+ this._show( this.uiDialog, this.options.show, function() {
+ that._focusTabbable();
+ that._trigger( "focus" );
+ });
+
+ // Track the dialog immediately upon openening in case a focus event
+ // somehow occurs outside of the dialog before an element inside the
+ // dialog is focused (#10152)
+ this._makeFocusTarget();
+
+ this._trigger( "open" );
+ },
+
+ _focusTabbable: function() {
+ // Set focus to the first match:
+ // 1. An element that was focused previously
+ // 2. First element inside the dialog matching [autofocus]
+ // 3. Tabbable element inside the content element
+ // 4. Tabbable element inside the buttonpane
+ // 5. The close button
+ // 6. The dialog itself
+ var hasFocus = this._focusedElement;
+ if ( !hasFocus ) {
+ hasFocus = this.element.find( "[autofocus]" );
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.element.find( ":tabbable" );
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.uiDialogButtonPane.find( ":tabbable" );
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.uiDialogTitlebarClose.filter( ":tabbable" );
+ }
+ if ( !hasFocus.length ) {
+ hasFocus = this.uiDialog;
+ }
+ hasFocus.eq( 0 ).focus();
+ },
+
+ _keepFocus: function( event ) {
+ function checkFocus() {
+ var activeElement = this.document[0].activeElement,
+ isActive = this.uiDialog[0] === activeElement ||
+ $.contains( this.uiDialog[0], activeElement );
+ if ( !isActive ) {
+ this._focusTabbable();
+ }
+ }
+ event.preventDefault();
+ checkFocus.call( this );
+ // support: IE
+ // IE <= 8 doesn't prevent moving focus even with event.preventDefault()
+ // so we check again later
+ this._delay( checkFocus );
+ },
+
+ _createWrapper: function() {
+ this.uiDialog = $("<div>")
+ .addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
+ this.options.dialogClass )
+ .hide()
+ .attr({
+ // Setting tabIndex makes the div focusable
+ tabIndex: -1,
+ role: "dialog"
+ })
+ .appendTo( this._appendTo() );
+
+ this._on( this.uiDialog, {
+ keydown: function( event ) {
+ if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+ event.keyCode === $.ui.keyCode.ESCAPE ) {
+ event.preventDefault();
+ this.close( event );
+ return;
+ }
+
+ // prevent tabbing out of dialogs
+ if ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {
+ return;
+ }
+ var tabbables = this.uiDialog.find( ":tabbable" ),
+ first = tabbables.filter( ":first" ),
+ last = tabbables.filter( ":last" );
+
+ if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
+ this._delay(function() {
+ first.focus();
+ });
+ event.preventDefault();
+ } else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
+ this._delay(function() {
+ last.focus();
+ });
+ event.preventDefault();
+ }
+ },
+ mousedown: function( event ) {
+ if ( this._moveToTop( event ) ) {
+ this._focusTabbable();
+ }
+ }
+ });
+
+ // We assume that any existing aria-describedby attribute means
+ // that the dialog content is marked up properly
+ // otherwise we brute force the content as the description
+ if ( !this.element.find( "[aria-describedby]" ).length ) {
+ this.uiDialog.attr({
+ "aria-describedby": this.element.uniqueId().attr( "id" )
+ });
+ }
+ },
+
+ _createTitlebar: function() {
+ var uiDialogTitle;
+
+ this.uiDialogTitlebar = $( "<div>" )
+ .addClass( "ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix" )
+ .prependTo( this.uiDialog );
+ this._on( this.uiDialogTitlebar, {
+ mousedown: function( event ) {
+ // Don't prevent click on close button (#8838)
+ // Focusing a dialog that is partially scrolled out of view
+ // causes the browser to scroll it into view, preventing the click event
+ if ( !$( event.target ).closest( ".ui-dialog-titlebar-close" ) ) {
+ // Dialog isn't getting focus when dragging (#8063)
+ this.uiDialog.focus();
+ }
+ }
+ });
+
+ // support: IE
+ // Use type="button" to prevent enter keypresses in textboxes from closing the
+ // dialog in IE (#9312)
+ this.uiDialogTitlebarClose = $( "<button type='button'></button>" )
+ .button({
+ label: this.options.closeText,
+ icons: {
+ primary: "ui-icon-closethick"
+ },
+ text: false
+ })
+ .addClass( "ui-dialog-titlebar-close" )
+ .appendTo( this.uiDialogTitlebar );
+ this._on( this.uiDialogTitlebarClose, {
+ click: function( event ) {
+ event.preventDefault();
+ this.close( event );
+ }
+ });
+
+ uiDialogTitle = $( "<span>" )
+ .uniqueId()
+ .addClass( "ui-dialog-title" )
+ .prependTo( this.uiDialogTitlebar );
+ this._title( uiDialogTitle );
+
+ this.uiDialog.attr({
+ "aria-labelledby": uiDialogTitle.attr( "id" )
+ });
+ },
+
+ _title: function( title ) {
+ if ( !this.options.title ) {
+ title.html( " " );
+ }
+ title.text( this.options.title );
+ },
+
+ _createButtonPane: function() {
+ this.uiDialogButtonPane = $( "<div>" )
+ .addClass( "ui-dialog-buttonpane ui-widget-content ui-helper-clearfix" );
+
+ this.uiButtonSet = $( "<div>" )
+ .addClass( "ui-dialog-buttonset" )
+ .appendTo( this.uiDialogButtonPane );
+
+ this._createButtons();
+ },
+
+ _createButtons: function() {
+ var that = this,
+ buttons = this.options.buttons;
+
+ // if we already have a button pane, remove it
+ this.uiDialogButtonPane.remove();
+ this.uiButtonSet.empty();
+
+ if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
+ this.uiDialog.removeClass( "ui-dialog-buttons" );
+ return;
+ }
+
+ $.each( buttons, function( name, props ) {
+ var click, buttonOptions;
+ props = $.isFunction( props ) ?
+ { click: props, text: name } :
+ props;
+ // Default to a non-submitting button
+ props = $.extend( { type: "button" }, props );
+ // Change the context for the click callback to be the main element
+ click = props.click;
+ props.click = function() {
+ click.apply( that.element[ 0 ], arguments );
+ };
+ buttonOptions = {
+ icons: props.icons,
+ text: props.showText
+ };
+ delete props.icons;
+ delete props.showText;
+ $( "<button></button>", props )
+ .button( buttonOptions )
+ .appendTo( that.uiButtonSet );
+ });
+ this.uiDialog.addClass( "ui-dialog-buttons" );
+ this.uiDialogButtonPane.appendTo( this.uiDialog );
+ },
+
+ _makeDraggable: function() {
+ var that = this,
+ options = this.options;
+
+ function filteredUi( ui ) {
+ return {
+ position: ui.position,
+ offset: ui.offset
+ };
+ }
+
+ this.uiDialog.draggable({
+ cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
+ handle: ".ui-dialog-titlebar",
+ containment: "document",
+ start: function( event, ui ) {
+ $( this ).addClass( "ui-dialog-dragging" );
+ that._blockFrames();
+ that._trigger( "dragStart", event, filteredUi( ui ) );
+ },
+ drag: function( event, ui ) {
+ that._trigger( "drag", event, filteredUi( ui ) );
+ },
+ stop: function( event, ui ) {
+ var left = ui.offset.left - that.document.scrollLeft(),
+ top = ui.offset.top - that.document.scrollTop();
+
+ options.position = {
+ my: "left top",
+ at: "left" + (left >= 0 ? "+" : "") + left + " " +
+ "top" + (top >= 0 ? "+" : "") + top,
+ of: that.window
+ };
+ $( this ).removeClass( "ui-dialog-dragging" );
+ that._unblockFrames();
+ that._trigger( "dragStop", event, filteredUi( ui ) );
+ }
+ });
+ },
+
+ _makeResizable: function() {
+ var that = this,
+ options = this.options,
+ handles = options.resizable,
+ // .ui-resizable has position: relative defined in the stylesheet
+ // but dialogs have to use absolute or fixed positioning
+ position = this.uiDialog.css("position"),
+ resizeHandles = typeof handles === "string" ?
+ handles :
+ "n,e,s,w,se,sw,ne,nw";
+
+ function filteredUi( ui ) {
+ return {
+ originalPosition: ui.originalPosition,
+ originalSize: ui.originalSize,
+ position: ui.position,
+ size: ui.size
+ };
+ }
+
+ this.uiDialog.resizable({
+ cancel: ".ui-dialog-content",
+ containment: "document",
+ alsoResize: this.element,
+ maxWidth: options.maxWidth,
+ maxHeight: options.maxHeight,
+ minWidth: options.minWidth,
+ minHeight: this._minHeight(),
+ handles: resizeHandles,
+ start: function( event, ui ) {
+ $( this ).addClass( "ui-dialog-resizing" );
+ that._blockFrames();
+ that._trigger( "resizeStart", event, filteredUi( ui ) );
+ },
+ resize: function( event, ui ) {
+ that._trigger( "resize", event, filteredUi( ui ) );
+ },
+ stop: function( event, ui ) {
+ var offset = that.uiDialog.offset(),
+ left = offset.left - that.document.scrollLeft(),
+ top = offset.top - that.document.scrollTop();
+
+ options.height = that.uiDialog.height();
+ options.width = that.uiDialog.width();
+ options.position = {
+ my: "left top",
+ at: "left" + (left >= 0 ? "+" : "") + left + " " +
+ "top" + (top >= 0 ? "+" : "") + top,
+ of: that.window
+ };
+ $( this ).removeClass( "ui-dialog-resizing" );
+ that._unblockFrames();
+ that._trigger( "resizeStop", event, filteredUi( ui ) );
+ }
+ })
+ .css( "position", position );
+ },
+
+ _trackFocus: function() {
+ this._on( this.widget(), {
+ focusin: function( event ) {
+ this._makeFocusTarget();
+ this._focusedElement = $( event.target );
+ }
+ });
+ },
+
+ _makeFocusTarget: function() {
+ this._untrackInstance();
+ this._trackingInstances().unshift( this );
+ },
+
+ _untrackInstance: function() {
+ var instances = this._trackingInstances(),
+ exists = $.inArray( this, instances );
+ if ( exists !== -1 ) {
+ instances.splice( exists, 1 );
+ }
+ },
+
+ _trackingInstances: function() {
+ var instances = this.document.data( "ui-dialog-instances" );
+ if ( !instances ) {
+ instances = [];
+ this.document.data( "ui-dialog-instances", instances );
+ }
+ return instances;
+ },
+
+ _minHeight: function() {
+ var options = this.options;
+
+ return options.height === "auto" ?
+ options.minHeight :
+ Math.min( options.minHeight, options.height );
+ },
+
+ _position: function() {
+ // Need to show the dialog to get the actual offset in the position plugin
+ var isVisible = this.uiDialog.is( ":visible" );
+ if ( !isVisible ) {
+ this.uiDialog.show();
+ }
+ this.uiDialog.position( this.options.position );
+ if ( !isVisible ) {
+ this.uiDialog.hide();
+ }
+ },
+
+ _setOptions: function( options ) {
+ var that = this,
+ resize = false,
+ resizableOptions = {};
+
+ $.each( options, function( key, value ) {
+ that._setOption( key, value );
+
+ if ( key in that.sizeRelatedOptions ) {
+ resize = true;
+ }
+ if ( key in that.resizableRelatedOptions ) {
+ resizableOptions[ key ] = value;
+ }
+ });
+
+ if ( resize ) {
+ this._size();
+ this._position();
+ }
+ if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
+ this.uiDialog.resizable( "option", resizableOptions );
+ }
+ },
+
+ _setOption: function( key, value ) {
+ var isDraggable, isResizable,
+ uiDialog = this.uiDialog;
+
+ if ( key === "dialogClass" ) {
+ uiDialog
+ .removeClass( this.options.dialogClass )
+ .addClass( value );
+ }
+
+ if ( key === "disabled" ) {
+ return;
+ }
+
+ this._super( key, value );
+
+ if ( key === "appendTo" ) {
+ this.uiDialog.appendTo( this._appendTo() );
+ }
+
+ if ( key === "buttons" ) {
+ this._createButtons();
+ }
+
+ if ( key === "closeText" ) {
+ this.uiDialogTitlebarClose.button({
+ // Ensure that we always pass a string
+ label: "" + value
+ });
+ }
+
+ if ( key === "draggable" ) {
+ isDraggable = uiDialog.is( ":data(ui-draggable)" );
+ if ( isDraggable && !value ) {
+ uiDialog.draggable( "destroy" );
+ }
+
+ if ( !isDraggable && value ) {
+ this._makeDraggable();
+ }
+ }
+
+ if ( key === "position" ) {
+ this._position();
+ }
+
+ if ( key === "resizable" ) {
+ // currently resizable, becoming non-resizable
+ isResizable = uiDialog.is( ":data(ui-resizable)" );
+ if ( isResizable && !value ) {
+ uiDialog.resizable( "destroy" );
+ }
+
+ // currently resizable, changing handles
+ if ( isResizable && typeof value === "string" ) {
+ uiDialog.resizable( "option", "handles", value );
+ }
+
+ // currently non-resizable, becoming resizable
+ if ( !isResizable && value !== false ) {
+ this._makeResizable();
+ }
+ }
+
+ if ( key === "title" ) {
+ this._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) );
+ }
+ },
+
+ _size: function() {
+ // If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+ // divs will both have width and height set, so we need to reset them
+ var nonContentHeight, minContentHeight, maxContentHeight,
+ options = this.options;
+
+ // Reset content sizing
+ this.element.show().css({
+ width: "auto",
+ minHeight: 0,
+ maxHeight: "none",
+ height: 0
+ });
+
+ if ( options.minWidth > options.width ) {
+ options.width = options.minWidth;
+ }
+
+ // reset wrapper sizing
+ // determine the height of all the non-content elements
+ nonContentHeight = this.uiDialog.css({
+ height: "auto",
+ width: options.width
+ })
+ .outerHeight();
+ minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+ maxContentHeight = typeof options.maxHeight === "number" ?
+ Math.max( 0, options.maxHeight - nonContentHeight ) :
+ "none";
+
+ if ( options.height === "auto" ) {
+ this.element.css({
+ minHeight: minContentHeight,
+ maxHeight: maxContentHeight,
+ height: "auto"
+ });
+ } else {
+ this.element.height( Math.max( 0, options.height - nonContentHeight ) );
+ }
+
+ if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
+ this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
+ }
+ },
+
+ _blockFrames: function() {
+ this.iframeBlocks = this.document.find( "iframe" ).map(function() {
+ var iframe = $( this );
+
+ return $( "<div>" )
+ .css({
+ position: "absolute",
+ width: iframe.outerWidth(),
+ height: iframe.outerHeight()
+ })
+ .appendTo( iframe.parent() )
+ .offset( iframe.offset() )[0];
+ });
+ },
+
+ _unblockFrames: function() {
+ if ( this.iframeBlocks ) {
+ this.iframeBlocks.remove();
+ delete this.iframeBlocks;
+ }
+ },
+
+ _allowInteraction: function( event ) {
+ if ( $( event.target ).closest( ".ui-dialog" ).length ) {
+ return true;
+ }
+
+ // TODO: Remove hack when datepicker implements
+ // the .ui-front logic (#8989)
+ return !!$( event.target ).closest( ".ui-datepicker" ).length;
+ },
+
+ _createOverlay: function() {
+ if ( !this.options.modal ) {
+ return;
+ }
+
+ // We use a delay in case the overlay is created from an
+ // event that we're going to be cancelling (#2804)
+ var isOpening = true;
+ this._delay(function() {
+ isOpening = false;
+ });
+
+ if ( !this.document.data( "ui-dialog-overlays" ) ) {
+
+ // Prevent use of anchors and inputs
+ // Using _on() for an event handler shared across many instances is
+ // safe because the dialogs stack and must be closed in reverse order
+ this._on( this.document, {
+ focusin: function( event ) {
+ if ( isOpening ) {
+ return;
+ }
+
+ if ( !this._allowInteraction( event ) ) {
+ event.preventDefault();
+ this._trackingInstances()[ 0 ]._focusTabbable();
+ }
+ }
+ });
+ }
+
+ this.overlay = $( "<div>" )
+ .addClass( "ui-widget-overlay ui-front" )
+ .appendTo( this._appendTo() );
+ this._on( this.overlay, {
+ mousedown: "_keepFocus"
+ });
+ this.document.data( "ui-dialog-overlays",
+ (this.document.data( "ui-dialog-overlays" ) || 0) + 1 );
+ },
+
+ _destroyOverlay: function() {
+ if ( !this.options.modal ) {
+ return;
+ }
+
+ if ( this.overlay ) {
+ var overlays = this.document.data( "ui-dialog-overlays" ) - 1;
+
+ if ( !overlays ) {
+ this.document
+ .unbind( "focusin" )
+ .removeData( "ui-dialog-overlays" );
+ } else {
+ this.document.data( "ui-dialog-overlays", overlays );
+ }
+
+ this.overlay.remove();
+ this.overlay = null;
+ }
+ }
+});
+
+
+/*!
+ * jQuery UI Droppable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/droppable/
+ */
+
+
+$.widget( "ui.droppable", {
+ version: "1.11.4",
+ widgetEventPrefix: "drop",
+ options: {
+ accept: "*",
+ activeClass: false,
+ addClasses: true,
+ greedy: false,
+ hoverClass: false,
+ scope: "default",
+ tolerance: "intersect",
+
+ // callbacks
+ activate: null,
+ deactivate: null,
+ drop: null,
+ out: null,
+ over: null
+ },
+ _create: function() {
+
+ var proportions,
+ o = this.options,
+ accept = o.accept;
+
+ this.isover = false;
+ this.isout = true;
+
+ this.accept = $.isFunction( accept ) ? accept : function( d ) {
+ return d.is( accept );
+ };
+
+ this.proportions = function( /* valueToWrite */ ) {
+ if ( arguments.length ) {
+ // Store the droppable's proportions
+ proportions = arguments[ 0 ];
+ } else {
+ // Retrieve or derive the droppable's proportions
+ return proportions ?
+ proportions :
+ proportions = {
+ width: this.element[ 0 ].offsetWidth,
+ height: this.element[ 0 ].offsetHeight
+ };
+ }
+ };
+
+ this._addToManager( o.scope );
+
+ o.addClasses && this.element.addClass( "ui-droppable" );
+
+ },
+
+ _addToManager: function( scope ) {
+ // Add the reference and positions to the manager
+ $.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];
+ $.ui.ddmanager.droppables[ scope ].push( this );
+ },
+
+ _splice: function( drop ) {
+ var i = 0;
+ for ( ; i < drop.length; i++ ) {
+ if ( drop[ i ] === this ) {
+ drop.splice( i, 1 );
+ }
+ }
+ },
+
+ _destroy: function() {
+ var drop = $.ui.ddmanager.droppables[ this.options.scope ];
+
+ this._splice( drop );
+
+ this.element.removeClass( "ui-droppable ui-droppable-disabled" );
+ },
+
+ _setOption: function( key, value ) {
+
+ if ( key === "accept" ) {
+ this.accept = $.isFunction( value ) ? value : function( d ) {
+ return d.is( value );
+ };
+ } else if ( key === "scope" ) {
+ var drop = $.ui.ddmanager.droppables[ this.options.scope ];
+
+ this._splice( drop );
+ this._addToManager( value );
+ }
+
+ this._super( key, value );
+ },
+
+ _activate: function( event ) {
+ var draggable = $.ui.ddmanager.current;
+ if ( this.options.activeClass ) {
+ this.element.addClass( this.options.activeClass );
+ }
+ if ( draggable ){
+ this._trigger( "activate", event, this.ui( draggable ) );
+ }
+ },
+
+ _deactivate: function( event ) {
+ var draggable = $.ui.ddmanager.current;
+ if ( this.options.activeClass ) {
+ this.element.removeClass( this.options.activeClass );
+ }
+ if ( draggable ){
+ this._trigger( "deactivate", event, this.ui( draggable ) );
+ }
+ },
+
+ _over: function( event ) {
+
+ var draggable = $.ui.ddmanager.current;
+
+ // Bail if draggable and droppable are same element
+ if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
+ return;
+ }
+
+ if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+ if ( this.options.hoverClass ) {
+ this.element.addClass( this.options.hoverClass );
+ }
+ this._trigger( "over", event, this.ui( draggable ) );
+ }
+
+ },
+
+ _out: function( event ) {
+
+ var draggable = $.ui.ddmanager.current;
+
+ // Bail if draggable and droppable are same element
+ if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
+ return;
+ }
+
+ if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+ if ( this.options.hoverClass ) {
+ this.element.removeClass( this.options.hoverClass );
+ }
+ this._trigger( "out", event, this.ui( draggable ) );
+ }
+
+ },
+
+ _drop: function( event, custom ) {
+
+ var draggable = custom || $.ui.ddmanager.current,
+ childrenIntersection = false;
+
+ // Bail if draggable and droppable are same element
+ if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
+ return false;
+ }
+
+ this.element.find( ":data(ui-droppable)" ).not( ".ui-draggable-dragging" ).each(function() {
+ var inst = $( this ).droppable( "instance" );
+ if (
+ inst.options.greedy &&
+ !inst.options.disabled &&
+ inst.options.scope === draggable.options.scope &&
+ inst.accept.call( inst.element[ 0 ], ( draggable.currentItem || draggable.element ) ) &&
+ $.ui.intersect( draggable, $.extend( inst, { offset: inst.element.offset() } ), inst.options.tolerance, event )
+ ) { childrenIntersection = true; return false; }
+ });
+ if ( childrenIntersection ) {
+ return false;
+ }
+
+ if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+ if ( this.options.activeClass ) {
+ this.element.removeClass( this.options.activeClass );
+ }
+ if ( this.options.hoverClass ) {
+ this.element.removeClass( this.options.hoverClass );
+ }
+ this._trigger( "drop", event, this.ui( draggable ) );
+ return this.element;
+ }
+
+ return false;
+
+ },
+
+ ui: function( c ) {
+ return {
+ draggable: ( c.currentItem || c.element ),
+ helper: c.helper,
+ position: c.position,
+ offset: c.positionAbs
+ };
+ }
+
+});
+
+$.ui.intersect = (function() {
+ function isOverAxis( x, reference, size ) {
+ return ( x >= reference ) && ( x < ( reference + size ) );
+ }
+
+ return function( draggable, droppable, toleranceMode, event ) {
+
+ if ( !droppable.offset ) {
+ return false;
+ }
+
+ var x1 = ( draggable.positionAbs || draggable.position.absolute ).left + draggable.margins.left,
+ y1 = ( draggable.positionAbs || draggable.position.absolute ).top + draggable.margins.top,
+ x2 = x1 + draggable.helperProportions.width,
+ y2 = y1 + draggable.helperProportions.height,
+ l = droppable.offset.left,
+ t = droppable.offset.top,
+ r = l + droppable.proportions().width,
+ b = t + droppable.proportions().height;
+
+ switch ( toleranceMode ) {
+ case "fit":
+ return ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );
+ case "intersect":
+ return ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half
+ x2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half
+ t < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half
+ y2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half
+ case "pointer":
+ return isOverAxis( event.pageY, t, droppable.proportions().height ) && isOverAxis( event.pageX, l, droppable.proportions().width );
+ case "touch":
+ return (
+ ( y1 >= t && y1 <= b ) || // Top edge touching
+ ( y2 >= t && y2 <= b ) || // Bottom edge touching
+ ( y1 < t && y2 > b ) // Surrounded vertically
+ ) && (
+ ( x1 >= l && x1 <= r ) || // Left edge touching
+ ( x2 >= l && x2 <= r ) || // Right edge touching
+ ( x1 < l && x2 > r ) // Surrounded horizontally
+ );
+ default:
+ return false;
+ }
+ };
+})();
+
+/*
+ This manager tracks offsets of draggables and droppables
+*/
+$.ui.ddmanager = {
+ current: null,
+ droppables: { "default": [] },
+ prepareOffsets: function( t, event ) {
+
+ var i, j,
+ m = $.ui.ddmanager.droppables[ t.options.scope ] || [],
+ type = event ? event.type : null, // workaround for #2317
+ list = ( t.currentItem || t.element ).find( ":data(ui-droppable)" ).addBack();
+
+ droppablesLoop: for ( i = 0; i < m.length; i++ ) {
+
+ // No disabled and non-accepted
+ if ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ], ( t.currentItem || t.element ) ) ) ) {
+ continue;
+ }
+
+ // Filter out elements in the current dragged item
+ for ( j = 0; j < list.length; j++ ) {
+ if ( list[ j ] === m[ i ].element[ 0 ] ) {
+ m[ i ].proportions().height = 0;
+ continue droppablesLoop;
+ }
+ }
+
+ m[ i ].visible = m[ i ].element.css( "display" ) !== "none";
+ if ( !m[ i ].visible ) {
+ continue;
+ }
+
+ // Activate the droppable if used directly from draggables
+ if ( type === "mousedown" ) {
+ m[ i ]._activate.call( m[ i ], event );
+ }
+
+ m[ i ].offset = m[ i ].element.offset();
+ m[ i ].proportions({ width: m[ i ].element[ 0 ].offsetWidth, height: m[ i ].element[ 0 ].offsetHeight });
+
+ }
+
+ },
+ drop: function( draggable, event ) {
+
+ var dropped = false;
+ // Create a copy of the droppables in case the list changes during the drop (#9116)
+ $.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {
+
+ if ( !this.options ) {
+ return;
+ }
+ if ( !this.options.disabled && this.visible && $.ui.intersect( draggable, this, this.options.tolerance, event ) ) {
+ dropped = this._drop.call( this, event ) || dropped;
+ }
+
+ if ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+ this.isout = true;
+ this.isover = false;
+ this._deactivate.call( this, event );
+ }
+
+ });
+ return dropped;
+
+ },
+ dragStart: function( draggable, event ) {
+ // Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+ draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
+ if ( !draggable.options.refreshPositions ) {
+ $.ui.ddmanager.prepareOffsets( draggable, event );
+ }
+ });
+ },
+ drag: function( draggable, event ) {
+
+ // If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+ if ( draggable.options.refreshPositions ) {
+ $.ui.ddmanager.prepareOffsets( draggable, event );
+ }
+
+ // Run through all droppables and check their positions based on specific tolerance options
+ $.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {
+
+ if ( this.options.disabled || this.greedyChild || !this.visible ) {
+ return;
+ }
+
+ var parentInstance, scope, parent,
+ intersects = $.ui.intersect( draggable, this, this.options.tolerance, event ),
+ c = !intersects && this.isover ? "isout" : ( intersects && !this.isover ? "isover" : null );
+ if ( !c ) {
+ return;
+ }
+
+ if ( this.options.greedy ) {
+ // find droppable parents with same scope
+ scope = this.options.scope;
+ parent = this.element.parents( ":data(ui-droppable)" ).filter(function() {
+ return $( this ).droppable( "instance" ).options.scope === scope;
+ });
+
+ if ( parent.length ) {
+ parentInstance = $( parent[ 0 ] ).droppable( "instance" );
+ parentInstance.greedyChild = ( c === "isover" );
+ }
+ }
+
+ // we just moved into a greedy child
+ if ( parentInstance && c === "isover" ) {
+ parentInstance.isover = false;
+ parentInstance.isout = true;
+ parentInstance._out.call( parentInstance, event );
+ }
+
+ this[ c ] = true;
+ this[c === "isout" ? "isover" : "isout"] = false;
+ this[c === "isover" ? "_over" : "_out"].call( this, event );
+
+ // we just moved out of a greedy child
+ if ( parentInstance && c === "isout" ) {
+ parentInstance.isout = false;
+ parentInstance.isover = true;
+ parentInstance._over.call( parentInstance, event );
+ }
+ });
+
+ },
+ dragStop: function( draggable, event ) {
+ draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
+ // Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+ if ( !draggable.options.refreshPositions ) {
+ $.ui.ddmanager.prepareOffsets( draggable, event );
+ }
+ }
+};
+
+var droppable = $.ui.droppable;
+
+
+/*!
+ * jQuery UI Effects 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/effects-core/
+ */
+
+
+var dataSpace = "ui-effects-",
+
+ // Create a local jQuery because jQuery Color relies on it and the
+ // global may not exist with AMD and a custom build (#10199)
+ jQuery = $;
+
+$.effects = {
+ effect: {}
+};
+
+/*!
+ * jQuery Color Animations v2.1.2
+ * https://github.com/jquery/jquery-color
+ *
+ * Copyright 2014 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * Date: Wed Jan 16 08:47:09 2013 -0600
+ */
+(function( jQuery, undefined ) {
+
+ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
+
+ // plusequals test for += 100 -= 100
+ rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
+ // a set of RE's that can match strings and generate color tuples.
+ stringParsers = [ {
+ re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ parse: function( execResult ) {
+ return [
+ execResult[ 1 ],
+ execResult[ 2 ],
+ execResult[ 3 ],
+ execResult[ 4 ]
+ ];
+ }
+ }, {
+ re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ parse: function( execResult ) {
+ return [
+ execResult[ 1 ] * 2.55,
+ execResult[ 2 ] * 2.55,
+ execResult[ 3 ] * 2.55,
+ execResult[ 4 ]
+ ];
+ }
+ }, {
+ // this regex ignores A-F because it's compared against an already lowercased string
+ re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
+ parse: function( execResult ) {
+ return [
+ parseInt( execResult[ 1 ], 16 ),
+ parseInt( execResult[ 2 ], 16 ),
+ parseInt( execResult[ 3 ], 16 )
+ ];
+ }
+ }, {
+ // this regex ignores A-F because it's compared against an already lowercased string
+ re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
+ parse: function( execResult ) {
+ return [
+ parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
+ parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
+ parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
+ ];
+ }
+ }, {
+ re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ space: "hsla",
+ parse: function( execResult ) {
+ return [
+ execResult[ 1 ],
+ execResult[ 2 ] / 100,
+ execResult[ 3 ] / 100,
+ execResult[ 4 ]
+ ];
+ }
+ } ],
+
+ // jQuery.Color( )
+ color = jQuery.Color = function( color, green, blue, alpha ) {
+ return new jQuery.Color.fn.parse( color, green, blue, alpha );
+ },
+ spaces = {
+ rgba: {
+ props: {
+ red: {
+ idx: 0,
+ type: "byte"
+ },
+ green: {
+ idx: 1,
+ type: "byte"
+ },
+ blue: {
+ idx: 2,
+ type: "byte"
+ }
+ }
+ },
+
+ hsla: {
+ props: {
+ hue: {
+ idx: 0,
+ type: "degrees"
+ },
+ saturation: {
+ idx: 1,
+ type: "percent"
+ },
+ lightness: {
+ idx: 2,
+ type: "percent"
+ }
+ }
+ }
+ },
+ propTypes = {
+ "byte": {
+ floor: true,
+ max: 255
+ },
+ "percent": {
+ max: 1
+ },
+ "degrees": {
+ mod: 360,
+ floor: true
+ }
+ },
+ support = color.support = {},
+
+ // element for support tests
+ supportElem = jQuery( "<p>" )[ 0 ],
+
+ // colors = jQuery.Color.names
+ colors,
+
+ // local aliases of functions called often
+ each = jQuery.each;
+
+// determine rgba support immediately
+supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
+support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
+
+// define cache name and alpha properties
+// for rgba and hsla spaces
+each( spaces, function( spaceName, space ) {
+ space.cache = "_" + spaceName;
+ space.props.alpha = {
+ idx: 3,
+ type: "percent",
+ def: 1
+ };
+});
+
+function clamp( value, prop, allowEmpty ) {
+ var type = propTypes[ prop.type ] || {};
+
+ if ( value == null ) {
+ return (allowEmpty || !prop.def) ? null : prop.def;
+ }
+
+ // ~~ is an short way of doing floor for positive numbers
+ value = type.floor ? ~~value : parseFloat( value );
+
+ // IE will pass in empty strings as value for alpha,
+ // which will hit this case
+ if ( isNaN( value ) ) {
+ return prop.def;
+ }
+
+ if ( type.mod ) {
+ // we add mod before modding to make sure that negatives values
+ // get converted properly: -10 -> 350
+ return (value + type.mod) % type.mod;
+ }
+
+ // for now all property types without mod have min and max
+ return 0 > value ? 0 : type.max < value ? type.max : value;
+}
+
+function stringParse( string ) {
+ var inst = color(),
+ rgba = inst._rgba = [];
+
+ string = string.toLowerCase();
+
+ each( stringParsers, function( i, parser ) {
+ var parsed,
+ match = parser.re.exec( string ),
+ values = match && parser.parse( match ),
+ spaceName = parser.space || "rgba";
+
+ if ( values ) {
+ parsed = inst[ spaceName ]( values );
+
+ // if this was an rgba parse the assignment might happen twice
+ // oh well....
+ inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
+ rgba = inst._rgba = parsed._rgba;
+
+ // exit each( stringParsers ) here because we matched
+ return false;
+ }
+ });
+
+ // Found a stringParser that handled it
+ if ( rgba.length ) {
+
+ // if this came from a parsed string, force "transparent" when alpha is 0
+ // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
+ if ( rgba.join() === "0,0,0,0" ) {
+ jQuery.extend( rgba, colors.transparent );
+ }
+ return inst;
+ }
+
+ // named colors
+ return colors[ string ];
+}
+
+color.fn = jQuery.extend( color.prototype, {
+ parse: function( red, green, blue, alpha ) {
+ if ( red === undefined ) {
+ this._rgba = [ null, null, null, null ];
+ return this;
+ }
+ if ( red.jquery || red.nodeType ) {
+ red = jQuery( red ).css( green );
+ green = undefined;
+ }
+
+ var inst = this,
+ type = jQuery.type( red ),
+ rgba = this._rgba = [];
+
+ // more than 1 argument specified - assume ( red, green, blue, alpha )
+ if ( green !== undefined ) {
+ red = [ red, green, blue, alpha ];
+ type = "array";
+ }
+
+ if ( type === "string" ) {
+ return this.parse( stringParse( red ) || colors._default );
+ }
+
+ if ( type === "array" ) {
+ each( spaces.rgba.props, function( key, prop ) {
+ rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
+ });
+ return this;
+ }
+
+ if ( type === "object" ) {
+ if ( red instanceof color ) {
+ each( spaces, function( spaceName, space ) {
+ if ( red[ space.cache ] ) {
+ inst[ space.cache ] = red[ space.cache ].slice();
+ }
+ });
+ } else {
+ each( spaces, function( spaceName, space ) {
+ var cache = space.cache;
+ each( space.props, function( key, prop ) {
+
+ // if the cache doesn't exist, and we know how to convert
+ if ( !inst[ cache ] && space.to ) {
+
+ // if the value was null, we don't need to copy it
+ // if the key was alpha, we don't need to copy it either
+ if ( key === "alpha" || red[ key ] == null ) {
+ return;
+ }
+ inst[ cache ] = space.to( inst._rgba );
+ }
+
+ // this is the only case where we allow nulls for ALL properties.
+ // call clamp with alwaysAllowEmpty
+ inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
+ });
+
+ // everything defined but alpha?
+ if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
+ // use the default of 1
+ inst[ cache ][ 3 ] = 1;
+ if ( space.from ) {
+ inst._rgba = space.from( inst[ cache ] );
+ }
+ }
+ });
+ }
+ return this;
+ }
+ },
+ is: function( compare ) {
+ var is = color( compare ),
+ same = true,
+ inst = this;
+
+ each( spaces, function( _, space ) {
+ var localCache,
+ isCache = is[ space.cache ];
+ if (isCache) {
+ localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
+ each( space.props, function( _, prop ) {
+ if ( isCache[ prop.idx ] != null ) {
+ same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
+ return same;
+ }
+ });
+ }
+ return same;
+ });
+ return same;
+ },
+ _space: function() {
+ var used = [],
+ inst = this;
+ each( spaces, function( spaceName, space ) {
+ if ( inst[ space.cache ] ) {
+ used.push( spaceName );
+ }
+ });
+ return used.pop();
+ },
+ transition: function( other, distance ) {
+ var end = color( other ),
+ spaceName = end._space(),
+ space = spaces[ spaceName ],
+ startColor = this.alpha() === 0 ? color( "transparent" ) : this,
+ start = startColor[ space.cache ] || space.to( startColor._rgba ),
+ result = start.slice();
+
+ end = end[ space.cache ];
+ each( space.props, function( key, prop ) {
+ var index = prop.idx,
+ startValue = start[ index ],
+ endValue = end[ index ],
+ type = propTypes[ prop.type ] || {};
+
+ // if null, don't override start value
+ if ( endValue === null ) {
+ return;
+ }
+ // if null - use end
+ if ( startValue === null ) {
+ result[ index ] = endValue;
+ } else {
+ if ( type.mod ) {
+ if ( endValue - startValue > type.mod / 2 ) {
+ startValue += type.mod;
+ } else if ( startValue - endValue > type.mod / 2 ) {
+ startValue -= type.mod;
+ }
+ }
+ result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
+ }
+ });
+ return this[ spaceName ]( result );
+ },
+ blend: function( opaque ) {
+ // if we are already opaque - return ourself
+ if ( this._rgba[ 3 ] === 1 ) {
+ return this;
+ }
+
+ var rgb = this._rgba.slice(),
+ a = rgb.pop(),
+ blend = color( opaque )._rgba;
+
+ return color( jQuery.map( rgb, function( v, i ) {
+ return ( 1 - a ) * blend[ i ] + a * v;
+ }));
+ },
+ toRgbaString: function() {
+ var prefix = "rgba(",
+ rgba = jQuery.map( this._rgba, function( v, i ) {
+ return v == null ? ( i > 2 ? 1 : 0 ) : v;
+ });
+
+ if ( rgba[ 3 ] === 1 ) {
+ rgba.pop();
+ prefix = "rgb(";
+ }
+
+ return prefix + rgba.join() + ")";
+ },
+ toHslaString: function() {
+ var prefix = "hsla(",
+ hsla = jQuery.map( this.hsla(), function( v, i ) {
+ if ( v == null ) {
+ v = i > 2 ? 1 : 0;
+ }
+
+ // catch 1 and 2
+ if ( i && i < 3 ) {
+ v = Math.round( v * 100 ) + "%";
+ }
+ return v;
+ });
+
+ if ( hsla[ 3 ] === 1 ) {
+ hsla.pop();
+ prefix = "hsl(";
+ }
+ return prefix + hsla.join() + ")";
+ },
+ toHexString: function( includeAlpha ) {
+ var rgba = this._rgba.slice(),
+ alpha = rgba.pop();
+
+ if ( includeAlpha ) {
+ rgba.push( ~~( alpha * 255 ) );
+ }
+
+ return "#" + jQuery.map( rgba, function( v ) {
+
+ // default to 0 when nulls exist
+ v = ( v || 0 ).toString( 16 );
+ return v.length === 1 ? "0" + v : v;
+ }).join("");
+ },
+ toString: function() {
+ return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
+ }
+});
+color.fn.parse.prototype = color.fn;
+
+// hsla conversions adapted from:
+// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/s…
+
+function hue2rgb( p, q, h ) {
+ h = ( h + 1 ) % 1;
+ if ( h * 6 < 1 ) {
+ return p + ( q - p ) * h * 6;
+ }
+ if ( h * 2 < 1) {
+ return q;
+ }
+ if ( h * 3 < 2 ) {
+ return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;
+ }
+ return p;
+}
+
+spaces.hsla.to = function( rgba ) {
+ if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
+ return [ null, null, null, rgba[ 3 ] ];
+ }
+ var r = rgba[ 0 ] / 255,
+ g = rgba[ 1 ] / 255,
+ b = rgba[ 2 ] / 255,
+ a = rgba[ 3 ],
+ max = Math.max( r, g, b ),
+ min = Math.min( r, g, b ),
+ diff = max - min,
+ add = max + min,
+ l = add * 0.5,
+ h, s;
+
+ if ( min === max ) {
+ h = 0;
+ } else if ( r === max ) {
+ h = ( 60 * ( g - b ) / diff ) + 360;
+ } else if ( g === max ) {
+ h = ( 60 * ( b - r ) / diff ) + 120;
+ } else {
+ h = ( 60 * ( r - g ) / diff ) + 240;
+ }
+
+ // chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
+ // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
+ if ( diff === 0 ) {
+ s = 0;
+ } else if ( l <= 0.5 ) {
+ s = diff / add;
+ } else {
+ s = diff / ( 2 - add );
+ }
+ return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
+};
+
+spaces.hsla.from = function( hsla ) {
+ if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
+ return [ null, null, null, hsla[ 3 ] ];
+ }
+ var h = hsla[ 0 ] / 360,
+ s = hsla[ 1 ],
+ l = hsla[ 2 ],
+ a = hsla[ 3 ],
+ q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
+ p = 2 * l - q;
+
+ return [
+ Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
+ Math.round( hue2rgb( p, q, h ) * 255 ),
+ Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
+ a
+ ];
+};
+
+each( spaces, function( spaceName, space ) {
+ var props = space.props,
+ cache = space.cache,
+ to = space.to,
+ from = space.from;
+
+ // makes rgba() and hsla()
+ color.fn[ spaceName ] = function( value ) {
+
+ // generate a cache for this space if it doesn't exist
+ if ( to && !this[ cache ] ) {
+ this[ cache ] = to( this._rgba );
+ }
+ if ( value === undefined ) {
+ return this[ cache ].slice();
+ }
+
+ var ret,
+ type = jQuery.type( value ),
+ arr = ( type === "array" || type === "object" ) ? value : arguments,
+ local = this[ cache ].slice();
+
+ each( props, function( key, prop ) {
+ var val = arr[ type === "object" ? key : prop.idx ];
+ if ( val == null ) {
+ val = local[ prop.idx ];
+ }
+ local[ prop.idx ] = clamp( val, prop );
+ });
+
+ if ( from ) {
+ ret = color( from( local ) );
+ ret[ cache ] = local;
+ return ret;
+ } else {
+ return color( local );
+ }
+ };
+
+ // makes red() green() blue() alpha() hue() saturation() lightness()
+ each( props, function( key, prop ) {
+ // alpha is included in more than one space
+ if ( color.fn[ key ] ) {
+ return;
+ }
+ color.fn[ key ] = function( value ) {
+ var vtype = jQuery.type( value ),
+ fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
+ local = this[ fn ](),
+ cur = local[ prop.idx ],
+ match;
+
+ if ( vtype === "undefined" ) {
+ return cur;
+ }
+
+ if ( vtype === "function" ) {
+ value = value.call( this, cur );
+ vtype = jQuery.type( value );
+ }
+ if ( value == null && prop.empty ) {
+ return this;
+ }
+ if ( vtype === "string" ) {
+ match = rplusequals.exec( value );
+ if ( match ) {
+ value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
+ }
+ }
+ local[ prop.idx ] = value;
+ return this[ fn ]( local );
+ };
+ });
+});
+
+// add cssHook and .fx.step function for each named hook.
+// accept a space separated string of properties
+color.hook = function( hook ) {
+ var hooks = hook.split( " " );
+ each( hooks, function( i, hook ) {
+ jQuery.cssHooks[ hook ] = {
+ set: function( elem, value ) {
+ var parsed, curElem,
+ backgroundColor = "";
+
+ if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
+ value = color( parsed || value );
+ if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
+ curElem = hook === "backgroundColor" ? elem.parentNode : elem;
+ while (
+ (backgroundColor === "" || backgroundColor === "transparent") &&
+ curElem && curElem.style
+ ) {
+ try {
+ backgroundColor = jQuery.css( curElem, "backgroundColor" );
+ curElem = curElem.parentNode;
+ } catch ( e ) {
+ }
+ }
+
+ value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
+ backgroundColor :
+ "_default" );
+ }
+
+ value = value.toRgbaString();
+ }
+ try {
+ elem.style[ hook ] = value;
+ } catch ( e ) {
+ // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
+ }
+ }
+ };
+ jQuery.fx.step[ hook ] = function( fx ) {
+ if ( !fx.colorInit ) {
+ fx.start = color( fx.elem, hook );
+ fx.end = color( fx.end );
+ fx.colorInit = true;
+ }
+ jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
+ };
+ });
+
+};
+
+color.hook( stepHooks );
+
+jQuery.cssHooks.borderColor = {
+ expand: function( value ) {
+ var expanded = {};
+
+ each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
+ expanded[ "border" + part + "Color" ] = value;
+ });
+ return expanded;
+ }
+};
+
+// Basic color names only.
+// Usage of any of the other color names requires adding yourself or including
+// jquery.color.svg-names.js.
+colors = jQuery.Color.names = {
+ // 4.1. Basic color keywords
+ aqua: "#00ffff",
+ black: "#000000",
+ blue: "#0000ff",
+ fuchsia: "#ff00ff",
+ gray: "#808080",
+ green: "#008000",
+ lime: "#00ff00",
+ maroon: "#800000",
+ navy: "#000080",
+ olive: "#808000",
+ purple: "#800080",
+ red: "#ff0000",
+ silver: "#c0c0c0",
+ teal: "#008080",
+ white: "#ffffff",
+ yellow: "#ffff00",
+
+ // 4.2.3. "transparent" color keyword
+ transparent: [ null, null, null, 0 ],
+
+ _default: "#ffffff"
+};
+
+})( jQuery );
+
+/******************************************************************************/
+/****************************** CLASS ANIMATIONS ******************************/
+/******************************************************************************/
+(function() {
+
+var classAnimationActions = [ "add", "remove", "toggle" ],
+ shorthandStyles = {
+ border: 1,
+ borderBottom: 1,
+ borderColor: 1,
+ borderLeft: 1,
+ borderRight: 1,
+ borderTop: 1,
+ borderWidth: 1,
+ margin: 1,
+ padding: 1
+ };
+
+$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
+ $.fx.step[ prop ] = function( fx ) {
+ if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
+ jQuery.style( fx.elem, prop, fx.end );
+ fx.setAttr = true;
+ }
+ };
+});
+
+function getElementStyles( elem ) {
+ var key, len,
+ style = elem.ownerDocument.defaultView ?
+ elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
+ elem.currentStyle,
+ styles = {};
+
+ if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
+ len = style.length;
+ while ( len-- ) {
+ key = style[ len ];
+ if ( typeof style[ key ] === "string" ) {
+ styles[ $.camelCase( key ) ] = style[ key ];
+ }
+ }
+ // support: Opera, IE <9
+ } else {
+ for ( key in style ) {
+ if ( typeof style[ key ] === "string" ) {
+ styles[ key ] = style[ key ];
+ }
+ }
+ }
+
+ return styles;
+}
+
+function styleDifference( oldStyle, newStyle ) {
+ var diff = {},
+ name, value;
+
+ for ( name in newStyle ) {
+ value = newStyle[ name ];
+ if ( oldStyle[ name ] !== value ) {
+ if ( !shorthandStyles[ name ] ) {
+ if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
+ diff[ name ] = value;
+ }
+ }
+ }
+ }
+
+ return diff;
+}
+
+// support: jQuery <1.8
+if ( !$.fn.addBack ) {
+ $.fn.addBack = function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter( selector )
+ );
+ };
+}
+
+$.effects.animateClass = function( value, duration, easing, callback ) {
+ var o = $.speed( duration, easing, callback );
+
+ return this.queue( function() {
+ var animated = $( this ),
+ baseClass = animated.attr( "class" ) || "",
+ applyClassChange,
+ allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
+
+ // map the animated objects to store the original styles.
+ allAnimations = allAnimations.map(function() {
+ var el = $( this );
+ return {
+ el: el,
+ start: getElementStyles( this )
+ };
+ });
+
+ // apply class change
+ applyClassChange = function() {
+ $.each( classAnimationActions, function(i, action) {
+ if ( value[ action ] ) {
+ animated[ action + "Class" ]( value[ action ] );
+ }
+ });
+ };
+ applyClassChange();
+
+ // map all animated objects again - calculate new styles and diff
+ allAnimations = allAnimations.map(function() {
+ this.end = getElementStyles( this.el[ 0 ] );
+ this.diff = styleDifference( this.start, this.end );
+ return this;
+ });
+
+ // apply original class
+ animated.attr( "class", baseClass );
+
+ // map all animated objects again - this time collecting a promise
+ allAnimations = allAnimations.map(function() {
+ var styleInfo = this,
+ dfd = $.Deferred(),
+ opts = $.extend({}, o, {
+ queue: false,
+ complete: function() {
+ dfd.resolve( styleInfo );
+ }
+ });
+
+ this.el.animate( this.diff, opts );
+ return dfd.promise();
+ });
+
+ // once all animations have completed:
+ $.when.apply( $, allAnimations.get() ).done(function() {
+
+ // set the final class
+ applyClassChange();
+
+ // for each animated element,
+ // clear all css properties that were animated
+ $.each( arguments, function() {
+ var el = this.el;
+ $.each( this.diff, function(key) {
+ el.css( key, "" );
+ });
+ });
+
+ // this is guarnteed to be there if you use jQuery.speed()
+ // it also handles dequeuing the next anim...
+ o.complete.call( animated[ 0 ] );
+ });
+ });
+};
+
+$.fn.extend({
+ addClass: (function( orig ) {
+ return function( classNames, speed, easing, callback ) {
+ return speed ?
+ $.effects.animateClass.call( this,
+ { add: classNames }, speed, easing, callback ) :
+ orig.apply( this, arguments );
+ };
+ })( $.fn.addClass ),
+
+ removeClass: (function( orig ) {
+ return function( classNames, speed, easing, callback ) {
+ return arguments.length > 1 ?
+ $.effects.animateClass.call( this,
+ { remove: classNames }, speed, easing, callback ) :
+ orig.apply( this, arguments );
+ };
+ })( $.fn.removeClass ),
+
+ toggleClass: (function( orig ) {
+ return function( classNames, force, speed, easing, callback ) {
+ if ( typeof force === "boolean" || force === undefined ) {
+ if ( !speed ) {
+ // without speed parameter
+ return orig.apply( this, arguments );
+ } else {
+ return $.effects.animateClass.call( this,
+ (force ? { add: classNames } : { remove: classNames }),
+ speed, easing, callback );
+ }
+ } else {
+ // without force parameter
+ return $.effects.animateClass.call( this,
+ { toggle: classNames }, force, speed, easing );
+ }
+ };
+ })( $.fn.toggleClass ),
+
+ switchClass: function( remove, add, speed, easing, callback) {
+ return $.effects.animateClass.call( this, {
+ add: add,
+ remove: remove
+ }, speed, easing, callback );
+ }
+});
+
+})();
+
+/******************************************************************************/
+/*********************************** EFFECTS **********************************/
+/******************************************************************************/
+
+(function() {
+
+$.extend( $.effects, {
+ version: "1.11.4",
+
+ // Saves a set of properties in a data storage
+ save: function( element, set ) {
+ for ( var i = 0; i < set.length; i++ ) {
+ if ( set[ i ] !== null ) {
+ element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
+ }
+ }
+ },
+
+ // Restores a set of previously saved properties from a data storage
+ restore: function( element, set ) {
+ var val, i;
+ for ( i = 0; i < set.length; i++ ) {
+ if ( set[ i ] !== null ) {
+ val = element.data( dataSpace + set[ i ] );
+ // support: jQuery 1.6.2
+ // http://bugs.jquery.com/ticket/9917
+ // jQuery 1.6.2 incorrectly returns undefined for any falsy value.
+ // We can't differentiate between "" and 0 here, so we just assume
+ // empty string since it's likely to be a more common value...
+ if ( val === undefined ) {
+ val = "";
+ }
+ element.css( set[ i ], val );
+ }
+ }
+ },
+
+ setMode: function( el, mode ) {
+ if (mode === "toggle") {
+ mode = el.is( ":hidden" ) ? "show" : "hide";
+ }
+ return mode;
+ },
+
+ // Translates a [top,left] array into a baseline value
+ // this should be a little more flexible in the future to handle a string & hash
+ getBaseline: function( origin, original ) {
+ var y, x;
+ switch ( origin[ 0 ] ) {
+ case "top": y = 0; break;
+ case "middle": y = 0.5; break;
+ case "bottom": y = 1; break;
+ default: y = origin[ 0 ] / original.height;
+ }
+ switch ( origin[ 1 ] ) {
+ case "left": x = 0; break;
+ case "center": x = 0.5; break;
+ case "right": x = 1; break;
+ default: x = origin[ 1 ] / original.width;
+ }
+ return {
+ x: x,
+ y: y
+ };
+ },
+
+ // Wraps the element around a wrapper that copies position properties
+ createWrapper: function( element ) {
+
+ // if the element is already wrapped, return it
+ if ( element.parent().is( ".ui-effects-wrapper" )) {
+ return element.parent();
+ }
+
+ // wrap the element
+ var props = {
+ width: element.outerWidth(true),
+ height: element.outerHeight(true),
+ "float": element.css( "float" )
+ },
+ wrapper = $( "<div></div>" )
+ .addClass( "ui-effects-wrapper" )
+ .css({
+ fontSize: "100%",
+ background: "transparent",
+ border: "none",
+ margin: 0,
+ padding: 0
+ }),
+ // Store the size in case width/height are defined in % - Fixes #5245
+ size = {
+ width: element.width(),
+ height: element.height()
+ },
+ active = document.activeElement;
+
+ // support: Firefox
+ // Firefox incorrectly exposes anonymous content
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=561664
+ try {
+ active.id;
+ } catch ( e ) {
+ active = document.body;
+ }
+
+ element.wrap( wrapper );
+
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+ $( active ).focus();
+ }
+
+ wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
+
+ // transfer positioning properties to the wrapper
+ if ( element.css( "position" ) === "static" ) {
+ wrapper.css({ position: "relative" });
+ element.css({ position: "relative" });
+ } else {
+ $.extend( props, {
+ position: element.css( "position" ),
+ zIndex: element.css( "z-index" )
+ });
+ $.each([ "top", "left", "bottom", "right" ], function(i, pos) {
+ props[ pos ] = element.css( pos );
+ if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
+ props[ pos ] = "auto";
+ }
+ });
+ element.css({
+ position: "relative",
+ top: 0,
+ left: 0,
+ right: "auto",
+ bottom: "auto"
+ });
+ }
+ element.css(size);
+
+ return wrapper.css( props ).show();
+ },
+
+ removeWrapper: function( element ) {
+ var active = document.activeElement;
+
+ if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+ element.parent().replaceWith( element );
+
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+ $( active ).focus();
+ }
+ }
+
+ return element;
+ },
+
+ setTransition: function( element, list, factor, value ) {
+ value = value || {};
+ $.each( list, function( i, x ) {
+ var unit = element.cssUnit( x );
+ if ( unit[ 0 ] > 0 ) {
+ value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
+ }
+ });
+ return value;
+ }
+});
+
+// return an effect options object for the given parameters:
+function _normalizeArguments( effect, options, speed, callback ) {
+
+ // allow passing all options as the first parameter
+ if ( $.isPlainObject( effect ) ) {
+ options = effect;
+ effect = effect.effect;
+ }
+
+ // convert to an object
+ effect = { effect: effect };
+
+ // catch (effect, null, ...)
+ if ( options == null ) {
+ options = {};
+ }
+
+ // catch (effect, callback)
+ if ( $.isFunction( options ) ) {
+ callback = options;
+ speed = null;
+ options = {};
+ }
+
+ // catch (effect, speed, ?)
+ if ( typeof options === "number" || $.fx.speeds[ options ] ) {
+ callback = speed;
+ speed = options;
+ options = {};
+ }
+
+ // catch (effect, options, callback)
+ if ( $.isFunction( speed ) ) {
+ callback = speed;
+ speed = null;
+ }
+
+ // add options to effect
+ if ( options ) {
+ $.extend( effect, options );
+ }
+
+ speed = speed || options.duration;
+ effect.duration = $.fx.off ? 0 :
+ typeof speed === "number" ? speed :
+ speed in $.fx.speeds ? $.fx.speeds[ speed ] :
+ $.fx.speeds._default;
+
+ effect.complete = callback || options.complete;
+
+ return effect;
+}
+
+function standardAnimationOption( option ) {
+ // Valid standard speeds (nothing, number, named speed)
+ if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
+ return true;
+ }
+
+ // Invalid strings - treat as "normal" speed
+ if ( typeof option === "string" && !$.effects.effect[ option ] ) {
+ return true;
+ }
+
+ // Complete callback
+ if ( $.isFunction( option ) ) {
+ return true;
+ }
+
+ // Options hash (but not naming an effect)
+ if ( typeof option === "object" && !option.effect ) {
+ return true;
+ }
+
+ // Didn't match any standard API
+ return false;
+}
+
+$.fn.extend({
+ effect: function( /* effect, options, speed, callback */ ) {
+ var args = _normalizeArguments.apply( this, arguments ),
+ mode = args.mode,
+ queue = args.queue,
+ effectMethod = $.effects.effect[ args.effect ];
+
+ if ( $.fx.off || !effectMethod ) {
+ // delegate to the original method (e.g., .show()) if possible
+ if ( mode ) {
+ return this[ mode ]( args.duration, args.complete );
+ } else {
+ return this.each( function() {
+ if ( args.complete ) {
+ args.complete.call( this );
+ }
+ });
+ }
+ }
+
+ function run( next ) {
+ var elem = $( this ),
+ complete = args.complete,
+ mode = args.mode;
+
+ function done() {
+ if ( $.isFunction( complete ) ) {
+ complete.call( elem[0] );
+ }
+ if ( $.isFunction( next ) ) {
+ next();
+ }
+ }
+
+ // If the element already has the correct final state, delegate to
+ // the core methods so the internal tracking of "olddisplay" works.
+ if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+ elem[ mode ]();
+ done();
+ } else {
+ effectMethod.call( elem[0], args, done );
+ }
+ }
+
+ return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
+ },
+
+ show: (function( orig ) {
+ return function( option ) {
+ if ( standardAnimationOption( option ) ) {
+ return orig.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "show";
+ return this.effect.call( this, args );
+ }
+ };
+ })( $.fn.show ),
+
+ hide: (function( orig ) {
+ return function( option ) {
+ if ( standardAnimationOption( option ) ) {
+ return orig.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "hide";
+ return this.effect.call( this, args );
+ }
+ };
+ })( $.fn.hide ),
+
+ toggle: (function( orig ) {
+ return function( option ) {
+ if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
+ return orig.apply( this, arguments );
+ } else {
+ var args = _normalizeArguments.apply( this, arguments );
+ args.mode = "toggle";
+ return this.effect.call( this, args );
+ }
+ };
+ })( $.fn.toggle ),
+
+ // helper functions
+ cssUnit: function(key) {
+ var style = this.css( key ),
+ val = [];
+
+ $.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
+ if ( style.indexOf( unit ) > 0 ) {
+ val = [ parseFloat( style ), unit ];
+ }
+ });
+ return val;
+ }
+});
+
+})();
+
+/******************************************************************************/
+/*********************************** EASING ***********************************/
+/******************************************************************************/
+
+(function() {
+
+// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
+
+var baseEasings = {};
+
+$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
+ baseEasings[ name ] = function( p ) {
+ return Math.pow( p, i + 2 );
+ };
+});
+
+$.extend( baseEasings, {
+ Sine: function( p ) {
+ return 1 - Math.cos( p * Math.PI / 2 );
+ },
+ Circ: function( p ) {
+ return 1 - Math.sqrt( 1 - p * p );
+ },
+ Elastic: function( p ) {
+ return p === 0 || p === 1 ? p :
+ -Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
+ },
+ Back: function( p ) {
+ return p * p * ( 3 * p - 2 );
+ },
+ Bounce: function( p ) {
+ var pow2,
+ bounce = 4;
+
+ while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
+ return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
+ }
+});
+
+$.each( baseEasings, function( name, easeIn ) {
+ $.easing[ "easeIn" + name ] = easeIn;
+ $.easing[ "easeOut" + name ] = function( p ) {
+ return 1 - easeIn( 1 - p );
+ };
+ $.easing[ "easeInOut" + name ] = function( p ) {
+ return p < 0.5 ?
+ easeIn( p * 2 ) / 2 :
+ 1 - easeIn( p * -2 + 2 ) / 2;
+ };
+});
+
+})();
+
+var effect = $.effects;
+
+
+/*!
+ * jQuery UI Effects Blind 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/blind-effect/
+ */
+
+
+var effectBlind = $.effects.effect.blind = function( o, done ) {
+ // Create element
+ var el = $( this ),
+ rvertical = /up|down|vertical/,
+ rpositivemotion = /up|left|vertical|horizontal/,
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ direction = o.direction || "up",
+ vertical = rvertical.test( direction ),
+ ref = vertical ? "height" : "width",
+ ref2 = vertical ? "top" : "left",
+ motion = rpositivemotion.test( direction ),
+ animation = {},
+ show = mode === "show",
+ wrapper, distance, margin;
+
+ // if already wrapped, the wrapper's properties are my property. #6245
+ if ( el.parent().is( ".ui-effects-wrapper" ) ) {
+ $.effects.save( el.parent(), props );
+ } else {
+ $.effects.save( el, props );
+ }
+ el.show();
+ wrapper = $.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+
+ distance = wrapper[ ref ]();
+ margin = parseFloat( wrapper.css( ref2 ) ) || 0;
+
+ animation[ ref ] = show ? distance : 0;
+ if ( !motion ) {
+ el
+ .css( vertical ? "bottom" : "right", 0 )
+ .css( vertical ? "top" : "left", "auto" )
+ .css({ position: "absolute" });
+
+ animation[ ref2 ] = show ? margin : distance + margin;
+ }
+
+ // start at 0 if we are showing
+ if ( show ) {
+ wrapper.css( ref, 0 );
+ if ( !motion ) {
+ wrapper.css( ref2, margin + distance );
+ }
+ }
+
+ // Animate
+ wrapper.animate( animation, {
+ duration: o.duration,
+ easing: o.easing,
+ queue: false,
+ complete: function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+};
+
+
+/*!
+ * jQuery UI Effects Bounce 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/bounce-effect/
+ */
+
+
+var effectBounce = $.effects.effect.bounce = function( o, done ) {
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+
+ // defaults:
+ mode = $.effects.setMode( el, o.mode || "effect" ),
+ hide = mode === "hide",
+ show = mode === "show",
+ direction = o.direction || "up",
+ distance = o.distance,
+ times = o.times || 5,
+
+ // number of internal animations
+ anims = times * 2 + ( show || hide ? 1 : 0 ),
+ speed = o.duration / anims,
+ easing = o.easing,
+
+ // utility:
+ ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+ motion = ( direction === "up" || direction === "left" ),
+ i,
+ upAnim,
+ downAnim,
+
+ // we will need to re-assemble the queue to stack our animations in place
+ queue = el.queue(),
+ queuelen = queue.length;
+
+ // Avoid touching opacity to prevent clearType and PNG issues in IE
+ if ( show || hide ) {
+ props.push( "opacity" );
+ }
+
+ $.effects.save( el, props );
+ el.show();
+ $.effects.createWrapper( el ); // Create Wrapper
+
+ // default distance for the BIGGEST bounce is the outer Distance / 3
+ if ( !distance ) {
+ distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
+ }
+
+ if ( show ) {
+ downAnim = { opacity: 1 };
+ downAnim[ ref ] = 0;
+
+ // if we are showing, force opacity 0 and set the initial position
+ // then do the "first" animation
+ el.css( "opacity", 0 )
+ .css( ref, motion ? -distance * 2 : distance * 2 )
+ .animate( downAnim, speed, easing );
+ }
+
+ // start at the smallest distance if we are hiding
+ if ( hide ) {
+ distance = distance / Math.pow( 2, times - 1 );
+ }
+
+ downAnim = {};
+ downAnim[ ref ] = 0;
+ // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
+ for ( i = 0; i < times; i++ ) {
+ upAnim = {};
+ upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+ el.animate( upAnim, speed, easing )
+ .animate( downAnim, speed, easing );
+
+ distance = hide ? distance * 2 : distance / 2;
+ }
+
+ // Last Bounce when Hiding
+ if ( hide ) {
+ upAnim = { opacity: 0 };
+ upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+ el.animate( upAnim, speed, easing );
+ }
+
+ el.queue(function() {
+ if ( hide ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ });
+
+ // inject all the animations we just queued to be first in line (after "inprogress")
+ if ( queuelen > 1) {
+ queue.splice.apply( queue,
+ [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+ }
+ el.dequeue();
+
+};
+
+
+/*!
+ * jQuery UI Effects Clip 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/clip-effect/
+ */
+
+
+var effectClip = $.effects.effect.clip = function( o, done ) {
+ // Create element
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ show = mode === "show",
+ direction = o.direction || "vertical",
+ vert = direction === "vertical",
+ size = vert ? "height" : "width",
+ position = vert ? "top" : "left",
+ animation = {},
+ wrapper, animate, distance;
+
+ // Save & Show
+ $.effects.save( el, props );
+ el.show();
+
+ // Create Wrapper
+ wrapper = $.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+ animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
+ distance = animate[ size ]();
+
+ // Shift
+ if ( show ) {
+ animate.css( size, 0 );
+ animate.css( position, distance / 2 );
+ }
+
+ // Create Animation Object:
+ animation[ size ] = show ? distance : 0;
+ animation[ position ] = show ? 0 : distance / 2;
+
+ // Animate
+ animate.animate( animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( !show ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+
+};
+
+
+/*!
+ * jQuery UI Effects Drop 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/drop-effect/
+ */
+
+
+var effectDrop = $.effects.effect.drop = function( o, done ) {
+
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ show = mode === "show",
+ direction = o.direction || "left",
+ ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+ motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
+ animation = {
+ opacity: show ? 1 : 0
+ },
+ distance;
+
+ // Adjust
+ $.effects.save( el, props );
+ el.show();
+ $.effects.createWrapper( el );
+
+ distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2;
+
+ if ( show ) {
+ el
+ .css( "opacity", 0 )
+ .css( ref, motion === "pos" ? -distance : distance );
+ }
+
+ // Animation
+ animation[ ref ] = ( show ?
+ ( motion === "pos" ? "+=" : "-=" ) :
+ ( motion === "pos" ? "-=" : "+=" ) ) +
+ distance;
+
+ // Animate
+ el.animate( animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+};
+
+
+/*!
+ * jQuery UI Effects Explode 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/explode-effect/
+ */
+
+
+var effectExplode = $.effects.effect.explode = function( o, done ) {
+
+ var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
+ cells = rows,
+ el = $( this ),
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ show = mode === "show",
+
+ // show and then visibility:hidden the element before calculating offset
+ offset = el.show().css( "visibility", "hidden" ).offset(),
+
+ // width and height of a piece
+ width = Math.ceil( el.outerWidth() / cells ),
+ height = Math.ceil( el.outerHeight() / rows ),
+ pieces = [],
+
+ // loop
+ i, j, left, top, mx, my;
+
+ // children animate complete:
+ function childComplete() {
+ pieces.push( this );
+ if ( pieces.length === rows * cells ) {
+ animComplete();
+ }
+ }
+
+ // clone the element for each row and cell.
+ for ( i = 0; i < rows ; i++ ) { // ===>
+ top = offset.top + i * height;
+ my = i - ( rows - 1 ) / 2 ;
+
+ for ( j = 0; j < cells ; j++ ) { // |||
+ left = offset.left + j * width;
+ mx = j - ( cells - 1 ) / 2 ;
+
+ // Create a clone of the now hidden main element that will be absolute positioned
+ // within a wrapper div off the -left and -top equal to size of our pieces
+ el
+ .clone()
+ .appendTo( "body" )
+ .wrap( "<div></div>" )
+ .css({
+ position: "absolute",
+ visibility: "visible",
+ left: -j * width,
+ top: -i * height
+ })
+
+ // select the wrapper - make it overflow: hidden and absolute positioned based on
+ // where the original was located +left and +top equal to the size of pieces
+ .parent()
+ .addClass( "ui-effects-explode" )
+ .css({
+ position: "absolute",
+ overflow: "hidden",
+ width: width,
+ height: height,
+ left: left + ( show ? mx * width : 0 ),
+ top: top + ( show ? my * height : 0 ),
+ opacity: show ? 0 : 1
+ }).animate({
+ left: left + ( show ? 0 : mx * width ),
+ top: top + ( show ? 0 : my * height ),
+ opacity: show ? 1 : 0
+ }, o.duration || 500, o.easing, childComplete );
+ }
+ }
+
+ function animComplete() {
+ el.css({
+ visibility: "visible"
+ });
+ $( pieces ).remove();
+ if ( !show ) {
+ el.hide();
+ }
+ done();
+ }
+};
+
+
+/*!
+ * jQuery UI Effects Fade 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/fade-effect/
+ */
+
+
+var effectFade = $.effects.effect.fade = function( o, done ) {
+ var el = $( this ),
+ mode = $.effects.setMode( el, o.mode || "toggle" );
+
+ el.animate({
+ opacity: mode
+ }, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: done
+ });
+};
+
+
+/*!
+ * jQuery UI Effects Fold 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/fold-effect/
+ */
+
+
+var effectFold = $.effects.effect.fold = function( o, done ) {
+
+ // Create element
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "hide" ),
+ show = mode === "show",
+ hide = mode === "hide",
+ size = o.size || 15,
+ percent = /([0-9]+)%/.exec( size ),
+ horizFirst = !!o.horizFirst,
+ widthFirst = show !== horizFirst,
+ ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
+ duration = o.duration / 2,
+ wrapper, distance,
+ animation1 = {},
+ animation2 = {};
+
+ $.effects.save( el, props );
+ el.show();
+
+ // Create Wrapper
+ wrapper = $.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+ distance = widthFirst ?
+ [ wrapper.width(), wrapper.height() ] :
+ [ wrapper.height(), wrapper.width() ];
+
+ if ( percent ) {
+ size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
+ }
+ if ( show ) {
+ wrapper.css( horizFirst ? {
+ height: 0,
+ width: size
+ } : {
+ height: size,
+ width: 0
+ });
+ }
+
+ // Animation
+ animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
+ animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
+
+ // Animate
+ wrapper
+ .animate( animation1, duration, o.easing )
+ .animate( animation2, duration, o.easing, function() {
+ if ( hide ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ });
+
+};
+
+
+/*!
+ * jQuery UI Effects Highlight 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/highlight-effect/
+ */
+
+
+var effectHighlight = $.effects.effect.highlight = function( o, done ) {
+ var elem = $( this ),
+ props = [ "backgroundImage", "backgroundColor", "opacity" ],
+ mode = $.effects.setMode( elem, o.mode || "show" ),
+ animation = {
+ backgroundColor: elem.css( "backgroundColor" )
+ };
+
+ if (mode === "hide") {
+ animation.opacity = 0;
+ }
+
+ $.effects.save( elem, props );
+
+ elem
+ .show()
+ .css({
+ backgroundImage: "none",
+ backgroundColor: o.color || "#ffff99"
+ })
+ .animate( animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( mode === "hide" ) {
+ elem.hide();
+ }
+ $.effects.restore( elem, props );
+ done();
+ }
+ });
+};
+
+
+/*!
+ * jQuery UI Effects Size 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/size-effect/
+ */
+
+
+var effectSize = $.effects.effect.size = function( o, done ) {
+
+ // Create element
+ var original, baseline, factor,
+ el = $( this ),
+ props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
+
+ // Always restore
+ props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
+
+ // Copy for children
+ props2 = [ "width", "height", "overflow" ],
+ cProps = [ "fontSize" ],
+ vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
+ hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
+
+ // Set options
+ mode = $.effects.setMode( el, o.mode || "effect" ),
+ restore = o.restore || mode !== "effect",
+ scale = o.scale || "both",
+ origin = o.origin || [ "middle", "center" ],
+ position = el.css( "position" ),
+ props = restore ? props0 : props1,
+ zero = {
+ height: 0,
+ width: 0,
+ outerHeight: 0,
+ outerWidth: 0
+ };
+
+ if ( mode === "show" ) {
+ el.show();
+ }
+ original = {
+ height: el.height(),
+ width: el.width(),
+ outerHeight: el.outerHeight(),
+ outerWidth: el.outerWidth()
+ };
+
+ if ( o.mode === "toggle" && mode === "show" ) {
+ el.from = o.to || zero;
+ el.to = o.from || original;
+ } else {
+ el.from = o.from || ( mode === "show" ? zero : original );
+ el.to = o.to || ( mode === "hide" ? zero : original );
+ }
+
+ // Set scaling factor
+ factor = {
+ from: {
+ y: el.from.height / original.height,
+ x: el.from.width / original.width
+ },
+ to: {
+ y: el.to.height / original.height,
+ x: el.to.width / original.width
+ }
+ };
+
+ // Scale the css box
+ if ( scale === "box" || scale === "both" ) {
+
+ // Vertical props scaling
+ if ( factor.from.y !== factor.to.y ) {
+ props = props.concat( vProps );
+ el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
+ el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
+ }
+
+ // Horizontal props scaling
+ if ( factor.from.x !== factor.to.x ) {
+ props = props.concat( hProps );
+ el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
+ el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
+ }
+ }
+
+ // Scale the content
+ if ( scale === "content" || scale === "both" ) {
+
+ // Vertical props scaling
+ if ( factor.from.y !== factor.to.y ) {
+ props = props.concat( cProps ).concat( props2 );
+ el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
+ el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
+ }
+ }
+
+ $.effects.save( el, props );
+ el.show();
+ $.effects.createWrapper( el );
+ el.css( "overflow", "hidden" ).css( el.from );
+
+ // Adjust
+ if (origin) { // Calculate baseline shifts
+ baseline = $.effects.getBaseline( origin, original );
+ el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
+ el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
+ el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
+ el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
+ }
+ el.css( el.from ); // set top & left
+
+ // Animate
+ if ( scale === "content" || scale === "both" ) { // Scale the children
+
+ // Add margins/font-size
+ vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
+ hProps = hProps.concat([ "marginLeft", "marginRight" ]);
+ props2 = props0.concat(vProps).concat(hProps);
+
+ el.find( "*[width]" ).each( function() {
+ var child = $( this ),
+ c_original = {
+ height: child.height(),
+ width: child.width(),
+ outerHeight: child.outerHeight(),
+ outerWidth: child.outerWidth()
+ };
+ if (restore) {
+ $.effects.save(child, props2);
+ }
+
+ child.from = {
+ height: c_original.height * factor.from.y,
+ width: c_original.width * factor.from.x,
+ outerHeight: c_original.outerHeight * factor.from.y,
+ outerWidth: c_original.outerWidth * factor.from.x
+ };
+ child.to = {
+ height: c_original.height * factor.to.y,
+ width: c_original.width * factor.to.x,
+ outerHeight: c_original.height * factor.to.y,
+ outerWidth: c_original.width * factor.to.x
+ };
+
+ // Vertical props scaling
+ if ( factor.from.y !== factor.to.y ) {
+ child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
+ child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
+ }
+
+ // Horizontal props scaling
+ if ( factor.from.x !== factor.to.x ) {
+ child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
+ child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
+ }
+
+ // Animate children
+ child.css( child.from );
+ child.animate( child.to, o.duration, o.easing, function() {
+
+ // Restore children
+ if ( restore ) {
+ $.effects.restore( child, props2 );
+ }
+ });
+ });
+ }
+
+ // Animate
+ el.animate( el.to, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( el.to.opacity === 0 ) {
+ el.css( "opacity", el.from.opacity );
+ }
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ if ( !restore ) {
+
+ // we need to calculate our new positioning based on the scaling
+ if ( position === "static" ) {
+ el.css({
+ position: "relative",
+ top: el.to.top,
+ left: el.to.left
+ });
+ } else {
+ $.each([ "top", "left" ], function( idx, pos ) {
+ el.css( pos, function( _, str ) {
+ var val = parseInt( str, 10 ),
+ toRef = idx ? el.to.left : el.to.top;
+
+ // if original was "auto", recalculate the new value from wrapper
+ if ( str === "auto" ) {
+ return toRef + "px";
+ }
+
+ return val + toRef + "px";
+ });
+ });
+ }
+ }
+
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+
+};
+
+
+/*!
+ * jQuery UI Effects Scale 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/scale-effect/
+ */
+
+
+var effectScale = $.effects.effect.scale = function( o, done ) {
+
+ // Create element
+ var el = $( this ),
+ options = $.extend( true, {}, o ),
+ mode = $.effects.setMode( el, o.mode || "effect" ),
+ percent = parseInt( o.percent, 10 ) ||
+ ( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
+ direction = o.direction || "both",
+ origin = o.origin,
+ original = {
+ height: el.height(),
+ width: el.width(),
+ outerHeight: el.outerHeight(),
+ outerWidth: el.outerWidth()
+ },
+ factor = {
+ y: direction !== "horizontal" ? (percent / 100) : 1,
+ x: direction !== "vertical" ? (percent / 100) : 1
+ };
+
+ // We are going to pass this effect to the size effect:
+ options.effect = "size";
+ options.queue = false;
+ options.complete = done;
+
+ // Set default origin and restore for show/hide
+ if ( mode !== "effect" ) {
+ options.origin = origin || [ "middle", "center" ];
+ options.restore = true;
+ }
+
+ options.from = o.from || ( mode === "show" ? {
+ height: 0,
+ width: 0,
+ outerHeight: 0,
+ outerWidth: 0
+ } : original );
+ options.to = {
+ height: original.height * factor.y,
+ width: original.width * factor.x,
+ outerHeight: original.outerHeight * factor.y,
+ outerWidth: original.outerWidth * factor.x
+ };
+
+ // Fade option to support puff
+ if ( options.fade ) {
+ if ( mode === "show" ) {
+ options.from.opacity = 0;
+ options.to.opacity = 1;
+ }
+ if ( mode === "hide" ) {
+ options.from.opacity = 1;
+ options.to.opacity = 0;
+ }
+ }
+
+ // Animate
+ el.effect( options );
+
+};
+
+
+/*!
+ * jQuery UI Effects Puff 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/puff-effect/
+ */
+
+
+var effectPuff = $.effects.effect.puff = function( o, done ) {
+ var elem = $( this ),
+ mode = $.effects.setMode( elem, o.mode || "hide" ),
+ hide = mode === "hide",
+ percent = parseInt( o.percent, 10 ) || 150,
+ factor = percent / 100,
+ original = {
+ height: elem.height(),
+ width: elem.width(),
+ outerHeight: elem.outerHeight(),
+ outerWidth: elem.outerWidth()
+ };
+
+ $.extend( o, {
+ effect: "scale",
+ queue: false,
+ fade: true,
+ mode: mode,
+ complete: done,
+ percent: hide ? percent : 100,
+ from: hide ?
+ original :
+ {
+ height: original.height * factor,
+ width: original.width * factor,
+ outerHeight: original.outerHeight * factor,
+ outerWidth: original.outerWidth * factor
+ }
+ });
+
+ elem.effect( o );
+};
+
+
+/*!
+ * jQuery UI Effects Pulsate 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/pulsate-effect/
+ */
+
+
+var effectPulsate = $.effects.effect.pulsate = function( o, done ) {
+ var elem = $( this ),
+ mode = $.effects.setMode( elem, o.mode || "show" ),
+ show = mode === "show",
+ hide = mode === "hide",
+ showhide = ( show || mode === "hide" ),
+
+ // showing or hiding leaves of the "last" animation
+ anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+ duration = o.duration / anims,
+ animateTo = 0,
+ queue = elem.queue(),
+ queuelen = queue.length,
+ i;
+
+ if ( show || !elem.is(":visible")) {
+ elem.css( "opacity", 0 ).show();
+ animateTo = 1;
+ }
+
+ // anims - 1 opacity "toggles"
+ for ( i = 1; i < anims; i++ ) {
+ elem.animate({
+ opacity: animateTo
+ }, duration, o.easing );
+ animateTo = 1 - animateTo;
+ }
+
+ elem.animate({
+ opacity: animateTo
+ }, duration, o.easing);
+
+ elem.queue(function() {
+ if ( hide ) {
+ elem.hide();
+ }
+ done();
+ });
+
+ // We just queued up "anims" animations, we need to put them next in the queue
+ if ( queuelen > 1 ) {
+ queue.splice.apply( queue,
+ [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+ }
+ elem.dequeue();
+};
+
+
+/*!
+ * jQuery UI Effects Shake 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/shake-effect/
+ */
+
+
+var effectShake = $.effects.effect.shake = function( o, done ) {
+
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+ mode = $.effects.setMode( el, o.mode || "effect" ),
+ direction = o.direction || "left",
+ distance = o.distance || 20,
+ times = o.times || 3,
+ anims = times * 2 + 1,
+ speed = Math.round( o.duration / anims ),
+ ref = (direction === "up" || direction === "down") ? "top" : "left",
+ positiveMotion = (direction === "up" || direction === "left"),
+ animation = {},
+ animation1 = {},
+ animation2 = {},
+ i,
+
+ // we will need to re-assemble the queue to stack our animations in place
+ queue = el.queue(),
+ queuelen = queue.length;
+
+ $.effects.save( el, props );
+ el.show();
+ $.effects.createWrapper( el );
+
+ // Animation
+ animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
+ animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
+ animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
+
+ // Animate
+ el.animate( animation, speed, o.easing );
+
+ // Shakes
+ for ( i = 1; i < times; i++ ) {
+ el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
+ }
+ el
+ .animate( animation1, speed, o.easing )
+ .animate( animation, speed / 2, o.easing )
+ .queue(function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ });
+
+ // inject all the animations we just queued to be first in line (after "inprogress")
+ if ( queuelen > 1) {
+ queue.splice.apply( queue,
+ [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+ }
+ el.dequeue();
+
+};
+
+
+/*!
+ * jQuery UI Effects Slide 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/slide-effect/
+ */
+
+
+var effectSlide = $.effects.effect.slide = function( o, done ) {
+
+ // Create element
+ var el = $( this ),
+ props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
+ mode = $.effects.setMode( el, o.mode || "show" ),
+ show = mode === "show",
+ direction = o.direction || "left",
+ ref = (direction === "up" || direction === "down") ? "top" : "left",
+ positiveMotion = (direction === "up" || direction === "left"),
+ distance,
+ animation = {};
+
+ // Adjust
+ $.effects.save( el, props );
+ el.show();
+ distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
+
+ $.effects.createWrapper( el ).css({
+ overflow: "hidden"
+ });
+
+ if ( show ) {
+ el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
+ }
+
+ // Animation
+ animation[ ref ] = ( show ?
+ ( positiveMotion ? "+=" : "-=") :
+ ( positiveMotion ? "-=" : "+=")) +
+ distance;
+
+ // Animate
+ el.animate( animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function() {
+ if ( mode === "hide" ) {
+ el.hide();
+ }
+ $.effects.restore( el, props );
+ $.effects.removeWrapper( el );
+ done();
+ }
+ });
+};
+
+
+/*!
+ * jQuery UI Effects Transfer 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/transfer-effect/
+ */
+
+
+var effectTransfer = $.effects.effect.transfer = function( o, done ) {
+ var elem = $( this ),
+ target = $( o.to ),
+ targetFixed = target.css( "position" ) === "fixed",
+ body = $("body"),
+ fixTop = targetFixed ? body.scrollTop() : 0,
+ fixLeft = targetFixed ? body.scrollLeft() : 0,
+ endPosition = target.offset(),
+ animation = {
+ top: endPosition.top - fixTop,
+ left: endPosition.left - fixLeft,
+ height: target.innerHeight(),
+ width: target.innerWidth()
+ },
+ startPosition = elem.offset(),
+ transfer = $( "<div class='ui-effects-transfer'></div>" )
+ .appendTo( document.body )
+ .addClass( o.className )
+ .css({
+ top: startPosition.top - fixTop,
+ left: startPosition.left - fixLeft,
+ height: elem.innerHeight(),
+ width: elem.innerWidth(),
+ position: targetFixed ? "fixed" : "absolute"
+ })
+ .animate( animation, o.duration, o.easing, function() {
+ transfer.remove();
+ done();
+ });
+};
+
+
+/*!
+ * jQuery UI Progressbar 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/progressbar/
+ */
+
+
+var progressbar = $.widget( "ui.progressbar", {
+ version: "1.11.4",
+ options: {
+ max: 100,
+ value: 0,
+
+ change: null,
+ complete: null
+ },
+
+ min: 0,
+
+ _create: function() {
+ // Constrain initial value
+ this.oldValue = this.options.value = this._constrainedValue();
+
+ this.element
+ .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+ .attr({
+ // Only set static values, aria-valuenow and aria-valuemax are
+ // set inside _refreshValue()
+ role: "progressbar",
+ "aria-valuemin": this.min
+ });
+
+ this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
+ .appendTo( this.element );
+
+ this._refreshValue();
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-valuemin" )
+ .removeAttr( "aria-valuemax" )
+ .removeAttr( "aria-valuenow" );
+
+ this.valueDiv.remove();
+ },
+
+ value: function( newValue ) {
+ if ( newValue === undefined ) {
+ return this.options.value;
+ }
+
+ this.options.value = this._constrainedValue( newValue );
+ this._refreshValue();
+ },
+
+ _constrainedValue: function( newValue ) {
+ if ( newValue === undefined ) {
+ newValue = this.options.value;
+ }
+
+ this.indeterminate = newValue === false;
+
+ // sanitize value
+ if ( typeof newValue !== "number" ) {
+ newValue = 0;
+ }
+
+ return this.indeterminate ? false :
+ Math.min( this.options.max, Math.max( this.min, newValue ) );
+ },
+
+ _setOptions: function( options ) {
+ // Ensure "value" option is set after other values (like max)
+ var value = options.value;
+ delete options.value;
+
+ this._super( options );
+
+ this.options.value = this._constrainedValue( value );
+ this._refreshValue();
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "max" ) {
+ // Don't allow a max less than min
+ value = Math.max( this.min, value );
+ }
+ if ( key === "disabled" ) {
+ this.element
+ .toggleClass( "ui-state-disabled", !!value )
+ .attr( "aria-disabled", value );
+ }
+ this._super( key, value );
+ },
+
+ _percentage: function() {
+ return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
+ },
+
+ _refreshValue: function() {
+ var value = this.options.value,
+ percentage = this._percentage();
+
+ this.valueDiv
+ .toggle( this.indeterminate || value > this.min )
+ .toggleClass( "ui-corner-right", value === this.options.max )
+ .width( percentage.toFixed(0) + "%" );
+
+ this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
+
+ if ( this.indeterminate ) {
+ this.element.removeAttr( "aria-valuenow" );
+ if ( !this.overlayDiv ) {
+ this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
+ }
+ } else {
+ this.element.attr({
+ "aria-valuemax": this.options.max,
+ "aria-valuenow": value
+ });
+ if ( this.overlayDiv ) {
+ this.overlayDiv.remove();
+ this.overlayDiv = null;
+ }
+ }
+
+ if ( this.oldValue !== value ) {
+ this.oldValue = value;
+ this._trigger( "change" );
+ }
+ if ( value === this.options.max ) {
+ this._trigger( "complete" );
+ }
+ }
+});
+
+
+/*!
+ * jQuery UI Selectable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/selectable/
+ */
+
+
+var selectable = $.widget("ui.selectable", $.ui.mouse, {
+ version: "1.11.4",
+ options: {
+ appendTo: "body",
+ autoRefresh: true,
+ distance: 0,
+ filter: "*",
+ tolerance: "touch",
+
+ // callbacks
+ selected: null,
+ selecting: null,
+ start: null,
+ stop: null,
+ unselected: null,
+ unselecting: null
+ },
+ _create: function() {
+ var selectees,
+ that = this;
+
+ this.element.addClass("ui-selectable");
+
+ this.dragged = false;
+
+ // cache selectee children based on filter
+ this.refresh = function() {
+ selectees = $(that.options.filter, that.element[0]);
+ selectees.addClass("ui-selectee");
+ selectees.each(function() {
+ var $this = $(this),
+ pos = $this.offset();
+ $.data(this, "selectable-item", {
+ element: this,
+ $element: $this,
+ left: pos.left,
+ top: pos.top,
+ right: pos.left + $this.outerWidth(),
+ bottom: pos.top + $this.outerHeight(),
+ startselected: false,
+ selected: $this.hasClass("ui-selected"),
+ selecting: $this.hasClass("ui-selecting"),
+ unselecting: $this.hasClass("ui-unselecting")
+ });
+ });
+ };
+ this.refresh();
+
+ this.selectees = selectees.addClass("ui-selectee");
+
+ this._mouseInit();
+
+ this.helper = $("<div class='ui-selectable-helper'></div>");
+ },
+
+ _destroy: function() {
+ this.selectees
+ .removeClass("ui-selectee")
+ .removeData("selectable-item");
+ this.element
+ .removeClass("ui-selectable ui-selectable-disabled");
+ this._mouseDestroy();
+ },
+
+ _mouseStart: function(event) {
+ var that = this,
+ options = this.options;
+
+ this.opos = [ event.pageX, event.pageY ];
+
+ if (this.options.disabled) {
+ return;
+ }
+
+ this.selectees = $(options.filter, this.element[0]);
+
+ this._trigger("start", event);
+
+ $(options.appendTo).append(this.helper);
+ // position helper (lasso)
+ this.helper.css({
+ "left": event.pageX,
+ "top": event.pageY,
+ "width": 0,
+ "height": 0
+ });
+
+ if (options.autoRefresh) {
+ this.refresh();
+ }
+
+ this.selectees.filter(".ui-selected").each(function() {
+ var selectee = $.data(this, "selectable-item");
+ selectee.startselected = true;
+ if (!event.metaKey && !event.ctrlKey) {
+ selectee.$element.removeClass("ui-selected");
+ selectee.selected = false;
+ selectee.$element.addClass("ui-unselecting");
+ selectee.unselecting = true;
+ // selectable UNSELECTING callback
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ });
+
+ $(event.target).parents().addBack().each(function() {
+ var doSelect,
+ selectee = $.data(this, "selectable-item");
+ if (selectee) {
+ doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
+ selectee.$element
+ .removeClass(doSelect ? "ui-unselecting" : "ui-selected")
+ .addClass(doSelect ? "ui-selecting" : "ui-unselecting");
+ selectee.unselecting = !doSelect;
+ selectee.selecting = doSelect;
+ selectee.selected = doSelect;
+ // selectable (UN)SELECTING callback
+ if (doSelect) {
+ that._trigger("selecting", event, {
+ selecting: selectee.element
+ });
+ } else {
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ return false;
+ }
+ });
+
+ },
+
+ _mouseDrag: function(event) {
+
+ this.dragged = true;
+
+ if (this.options.disabled) {
+ return;
+ }
+
+ var tmp,
+ that = this,
+ options = this.options,
+ x1 = this.opos[0],
+ y1 = this.opos[1],
+ x2 = event.pageX,
+ y2 = event.pageY;
+
+ if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
+ if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
+ this.helper.css({ left: x1, top: y1, width: x2 - x1, height: y2 - y1 });
+
+ this.selectees.each(function() {
+ var selectee = $.data(this, "selectable-item"),
+ hit = false;
+
+ //prevent helper from being selected if appendTo: selectable
+ if (!selectee || selectee.element === that.element[0]) {
+ return;
+ }
+
+ if (options.tolerance === "touch") {
+ hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
+ } else if (options.tolerance === "fit") {
+ hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
+ }
+
+ if (hit) {
+ // SELECT
+ if (selectee.selected) {
+ selectee.$element.removeClass("ui-selected");
+ selectee.selected = false;
+ }
+ if (selectee.unselecting) {
+ selectee.$element.removeClass("ui-unselecting");
+ selectee.unselecting = false;
+ }
+ if (!selectee.selecting) {
+ selectee.$element.addClass("ui-selecting");
+ selectee.selecting = true;
+ // selectable SELECTING callback
+ that._trigger("selecting", event, {
+ selecting: selectee.element
+ });
+ }
+ } else {
+ // UNSELECT
+ if (selectee.selecting) {
+ if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
+ selectee.$element.removeClass("ui-selecting");
+ selectee.selecting = false;
+ selectee.$element.addClass("ui-selected");
+ selectee.selected = true;
+ } else {
+ selectee.$element.removeClass("ui-selecting");
+ selectee.selecting = false;
+ if (selectee.startselected) {
+ selectee.$element.addClass("ui-unselecting");
+ selectee.unselecting = true;
+ }
+ // selectable UNSELECTING callback
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ }
+ if (selectee.selected) {
+ if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
+ selectee.$element.removeClass("ui-selected");
+ selectee.selected = false;
+
+ selectee.$element.addClass("ui-unselecting");
+ selectee.unselecting = true;
+ // selectable UNSELECTING callback
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ }
+ }
+ });
+
+ return false;
+ },
+
+ _mouseStop: function(event) {
+ var that = this;
+
+ this.dragged = false;
+
+ $(".ui-unselecting", this.element[0]).each(function() {
+ var selectee = $.data(this, "selectable-item");
+ selectee.$element.removeClass("ui-unselecting");
+ selectee.unselecting = false;
+ selectee.startselected = false;
+ that._trigger("unselected", event, {
+ unselected: selectee.element
+ });
+ });
+ $(".ui-selecting", this.element[0]).each(function() {
+ var selectee = $.data(this, "selectable-item");
+ selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
+ selectee.selecting = false;
+ selectee.selected = true;
+ selectee.startselected = true;
+ that._trigger("selected", event, {
+ selected: selectee.element
+ });
+ });
+ this._trigger("stop", event);
+
+ this.helper.remove();
+
+ return false;
+ }
+
+});
+
+
+/*!
+ * jQuery UI Selectmenu 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/selectmenu
+ */
+
+
+var selectmenu = $.widget( "ui.selectmenu", {
+ version: "1.11.4",
+ defaultElement: "<select>",
+ options: {
+ appendTo: null,
+ disabled: null,
+ icons: {
+ button: "ui-icon-triangle-1-s"
+ },
+ position: {
+ my: "left top",
+ at: "left bottom",
+ collision: "none"
+ },
+ width: null,
+
+ // callbacks
+ change: null,
+ close: null,
+ focus: null,
+ open: null,
+ select: null
+ },
+
+ _create: function() {
+ var selectmenuId = this.element.uniqueId().attr( "id" );
+ this.ids = {
+ element: selectmenuId,
+ button: selectmenuId + "-button",
+ menu: selectmenuId + "-menu"
+ };
+
+ this._drawButton();
+ this._drawMenu();
+
+ if ( this.options.disabled ) {
+ this.disable();
+ }
+ },
+
+ _drawButton: function() {
+ var that = this;
+
+ // Associate existing label with the new button
+ this.label = $( "label[for='" + this.ids.element + "']" ).attr( "for", this.ids.button );
+ this._on( this.label, {
+ click: function( event ) {
+ this.button.focus();
+ event.preventDefault();
+ }
+ });
+
+ // Hide original select element
+ this.element.hide();
+
+ // Create button
+ this.button = $( "<span>", {
+ "class": "ui-selectmenu-button ui-widget ui-state-default ui-corner-all",
+ tabindex: this.options.disabled ? -1 : 0,
+ id: this.ids.button,
+ role: "combobox",
+ "aria-expanded": "false",
+ "aria-autocomplete": "list",
+ "aria-owns": this.ids.menu,
+ "aria-haspopup": "true"
+ })
+ .insertAfter( this.element );
+
+ $( "<span>", {
+ "class": "ui-icon " + this.options.icons.button
+ })
+ .prependTo( this.button );
+
+ this.buttonText = $( "<span>", {
+ "class": "ui-selectmenu-text"
+ })
+ .appendTo( this.button );
+
+ this._setText( this.buttonText, this.element.find( "option:selected" ).text() );
+ this._resizeButton();
+
+ this._on( this.button, this._buttonEvents );
+ this.button.one( "focusin", function() {
+
+ // Delay rendering the menu items until the button receives focus.
+ // The menu may have already been rendered via a programmatic open.
+ if ( !that.menuItems ) {
+ that._refreshMenu();
+ }
+ });
+ this._hoverable( this.button );
+ this._focusable( this.button );
+ },
+
+ _drawMenu: function() {
+ var that = this;
+
+ // Create menu
+ this.menu = $( "<ul>", {
+ "aria-hidden": "true",
+ "aria-labelledby": this.ids.button,
+ id: this.ids.menu
+ });
+
+ // Wrap menu
+ this.menuWrap = $( "<div>", {
+ "class": "ui-selectmenu-menu ui-front"
+ })
+ .append( this.menu )
+ .appendTo( this._appendTo() );
+
+ // Initialize menu widget
+ this.menuInstance = this.menu
+ .menu({
+ role: "listbox",
+ select: function( event, ui ) {
+ event.preventDefault();
+
+ // support: IE8
+ // If the item was selected via a click, the text selection
+ // will be destroyed in IE
+ that._setSelection();
+
+ that._select( ui.item.data( "ui-selectmenu-item" ), event );
+ },
+ focus: function( event, ui ) {
+ var item = ui.item.data( "ui-selectmenu-item" );
+
+ // Prevent inital focus from firing and check if its a newly focused item
+ if ( that.focusIndex != null && item.index !== that.focusIndex ) {
+ that._trigger( "focus", event, { item: item } );
+ if ( !that.isOpen ) {
+ that._select( item, event );
+ }
+ }
+ that.focusIndex = item.index;
+
+ that.button.attr( "aria-activedescendant",
+ that.menuItems.eq( item.index ).attr( "id" ) );
+ }
+ })
+ .menu( "instance" );
+
+ // Adjust menu styles to dropdown
+ this.menu
+ .addClass( "ui-corner-bottom" )
+ .removeClass( "ui-corner-all" );
+
+ // Don't close the menu on mouseleave
+ this.menuInstance._off( this.menu, "mouseleave" );
+
+ // Cancel the menu's collapseAll on document click
+ this.menuInstance._closeOnDocumentClick = function() {
+ return false;
+ };
+
+ // Selects often contain empty items, but never contain dividers
+ this.menuInstance._isDivider = function() {
+ return false;
+ };
+ },
+
+ refresh: function() {
+ this._refreshMenu();
+ this._setText( this.buttonText, this._getSelectedItem().text() );
+ if ( !this.options.width ) {
+ this._resizeButton();
+ }
+ },
+
+ _refreshMenu: function() {
+ this.menu.empty();
+
+ var item,
+ options = this.element.find( "option" );
+
+ if ( !options.length ) {
+ return;
+ }
+
+ this._parseOptions( options );
+ this._renderMenu( this.menu, this.items );
+
+ this.menuInstance.refresh();
+ this.menuItems = this.menu.find( "li" ).not( ".ui-selectmenu-optgroup" );
+
+ item = this._getSelectedItem();
+
+ // Update the menu to have the correct item focused
+ this.menuInstance.focus( null, item );
+ this._setAria( item.data( "ui-selectmenu-item" ) );
+
+ // Set disabled state
+ this._setOption( "disabled", this.element.prop( "disabled" ) );
+ },
+
+ open: function( event ) {
+ if ( this.options.disabled ) {
+ return;
+ }
+
+ // If this is the first time the menu is being opened, render the items
+ if ( !this.menuItems ) {
+ this._refreshMenu();
+ } else {
+
+ // Menu clears focus on close, reset focus to selected item
+ this.menu.find( ".ui-state-focus" ).removeClass( "ui-state-focus" );
+ this.menuInstance.focus( null, this._getSelectedItem() );
+ }
+
+ this.isOpen = true;
+ this._toggleAttr();
+ this._resizeMenu();
+ this._position();
+
+ this._on( this.document, this._documentClick );
+
+ this._trigger( "open", event );
+ },
+
+ _position: function() {
+ this.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );
+ },
+
+ close: function( event ) {
+ if ( !this.isOpen ) {
+ return;
+ }
+
+ this.isOpen = false;
+ this._toggleAttr();
+
+ this.range = null;
+ this._off( this.document );
+
+ this._trigger( "close", event );
+ },
+
+ widget: function() {
+ return this.button;
+ },
+
+ menuWidget: function() {
+ return this.menu;
+ },
+
+ _renderMenu: function( ul, items ) {
+ var that = this,
+ currentOptgroup = "";
+
+ $.each( items, function( index, item ) {
+ if ( item.optgroup !== currentOptgroup ) {
+ $( "<li>", {
+ "class": "ui-selectmenu-optgroup ui-menu-divider" +
+ ( item.element.parent( "optgroup" ).prop( "disabled" ) ?
+ " ui-state-disabled" :
+ "" ),
+ text: item.optgroup
+ })
+ .appendTo( ul );
+
+ currentOptgroup = item.optgroup;
+ }
+
+ that._renderItemData( ul, item );
+ });
+ },
+
+ _renderItemData: function( ul, item ) {
+ return this._renderItem( ul, item ).data( "ui-selectmenu-item", item );
+ },
+
+ _renderItem: function( ul, item ) {
+ var li = $( "<li>" );
+
+ if ( item.disabled ) {
+ li.addClass( "ui-state-disabled" );
+ }
+ this._setText( li, item.label );
+
+ return li.appendTo( ul );
+ },
+
+ _setText: function( element, value ) {
+ if ( value ) {
+ element.text( value );
+ } else {
+ element.html( " " );
+ }
+ },
+
+ _move: function( direction, event ) {
+ var item, next,
+ filter = ".ui-menu-item";
+
+ if ( this.isOpen ) {
+ item = this.menuItems.eq( this.focusIndex );
+ } else {
+ item = this.menuItems.eq( this.element[ 0 ].selectedIndex );
+ filter += ":not(.ui-state-disabled)";
+ }
+
+ if ( direction === "first" || direction === "last" ) {
+ next = item[ direction === "first" ? "prevAll" : "nextAll" ]( filter ).eq( -1 );
+ } else {
+ next = item[ direction + "All" ]( filter ).eq( 0 );
+ }
+
+ if ( next.length ) {
+ this.menuInstance.focus( event, next );
+ }
+ },
+
+ _getSelectedItem: function() {
+ return this.menuItems.eq( this.element[ 0 ].selectedIndex );
+ },
+
+ _toggle: function( event ) {
+ this[ this.isOpen ? "close" : "open" ]( event );
+ },
+
+ _setSelection: function() {
+ var selection;
+
+ if ( !this.range ) {
+ return;
+ }
+
+ if ( window.getSelection ) {
+ selection = window.getSelection();
+ selection.removeAllRanges();
+ selection.addRange( this.range );
+
+ // support: IE8
+ } else {
+ this.range.select();
+ }
+
+ // support: IE
+ // Setting the text selection kills the button focus in IE, but
+ // restoring the focus doesn't kill the selection.
+ this.button.focus();
+ },
+
+ _documentClick: {
+ mousedown: function( event ) {
+ if ( !this.isOpen ) {
+ return;
+ }
+
+ if ( !$( event.target ).closest( ".ui-selectmenu-menu, #" + this.ids.button ).length ) {
+ this.close( event );
+ }
+ }
+ },
+
+ _buttonEvents: {
+
+ // Prevent text selection from being reset when interacting with the selectmenu (#10144)
+ mousedown: function() {
+ var selection;
+
+ if ( window.getSelection ) {
+ selection = window.getSelection();
+ if ( selection.rangeCount ) {
+ this.range = selection.getRangeAt( 0 );
+ }
+
+ // support: IE8
+ } else {
+ this.range = document.selection.createRange();
+ }
+ },
+
+ click: function( event ) {
+ this._setSelection();
+ this._toggle( event );
+ },
+
+ keydown: function( event ) {
+ var preventDefault = true;
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.TAB:
+ case $.ui.keyCode.ESCAPE:
+ this.close( event );
+ preventDefault = false;
+ break;
+ case $.ui.keyCode.ENTER:
+ if ( this.isOpen ) {
+ this._selectFocusedItem( event );
+ }
+ break;
+ case $.ui.keyCode.UP:
+ if ( event.altKey ) {
+ this._toggle( event );
+ } else {
+ this._move( "prev", event );
+ }
+ break;
+ case $.ui.keyCode.DOWN:
+ if ( event.altKey ) {
+ this._toggle( event );
+ } else {
+ this._move( "next", event );
+ }
+ break;
+ case $.ui.keyCode.SPACE:
+ if ( this.isOpen ) {
+ this._selectFocusedItem( event );
+ } else {
+ this._toggle( event );
+ }
+ break;
+ case $.ui.keyCode.LEFT:
+ this._move( "prev", event );
+ break;
+ case $.ui.keyCode.RIGHT:
+ this._move( "next", event );
+ break;
+ case $.ui.keyCode.HOME:
+ case $.ui.keyCode.PAGE_UP:
+ this._move( "first", event );
+ break;
+ case $.ui.keyCode.END:
+ case $.ui.keyCode.PAGE_DOWN:
+ this._move( "last", event );
+ break;
+ default:
+ this.menu.trigger( event );
+ preventDefault = false;
+ }
+
+ if ( preventDefault ) {
+ event.preventDefault();
+ }
+ }
+ },
+
+ _selectFocusedItem: function( event ) {
+ var item = this.menuItems.eq( this.focusIndex );
+ if ( !item.hasClass( "ui-state-disabled" ) ) {
+ this._select( item.data( "ui-selectmenu-item" ), event );
+ }
+ },
+
+ _select: function( item, event ) {
+ var oldIndex = this.element[ 0 ].selectedIndex;
+
+ // Change native select element
+ this.element[ 0 ].selectedIndex = item.index;
+ this._setText( this.buttonText, item.label );
+ this._setAria( item );
+ this._trigger( "select", event, { item: item } );
+
+ if ( item.index !== oldIndex ) {
+ this._trigger( "change", event, { item: item } );
+ }
+
+ this.close( event );
+ },
+
+ _setAria: function( item ) {
+ var id = this.menuItems.eq( item.index ).attr( "id" );
+
+ this.button.attr({
+ "aria-labelledby": id,
+ "aria-activedescendant": id
+ });
+ this.menu.attr( "aria-activedescendant", id );
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "icons" ) {
+ this.button.find( "span.ui-icon" )
+ .removeClass( this.options.icons.button )
+ .addClass( value.button );
+ }
+
+ this._super( key, value );
+
+ if ( key === "appendTo" ) {
+ this.menuWrap.appendTo( this._appendTo() );
+ }
+
+ if ( key === "disabled" ) {
+ this.menuInstance.option( "disabled", value );
+ this.button
+ .toggleClass( "ui-state-disabled", value )
+ .attr( "aria-disabled", value );
+
+ this.element.prop( "disabled", value );
+ if ( value ) {
+ this.button.attr( "tabindex", -1 );
+ this.close();
+ } else {
+ this.button.attr( "tabindex", 0 );
+ }
+ }
+
+ if ( key === "width" ) {
+ this._resizeButton();
+ }
+ },
+
+ _appendTo: function() {
+ var element = this.options.appendTo;
+
+ if ( element ) {
+ element = element.jquery || element.nodeType ?
+ $( element ) :
+ this.document.find( element ).eq( 0 );
+ }
+
+ if ( !element || !element[ 0 ] ) {
+ element = this.element.closest( ".ui-front" );
+ }
+
+ if ( !element.length ) {
+ element = this.document[ 0 ].body;
+ }
+
+ return element;
+ },
+
+ _toggleAttr: function() {
+ this.button
+ .toggleClass( "ui-corner-top", this.isOpen )
+ .toggleClass( "ui-corner-all", !this.isOpen )
+ .attr( "aria-expanded", this.isOpen );
+ this.menuWrap.toggleClass( "ui-selectmenu-open", this.isOpen );
+ this.menu.attr( "aria-hidden", !this.isOpen );
+ },
+
+ _resizeButton: function() {
+ var width = this.options.width;
+
+ if ( !width ) {
+ width = this.element.show().outerWidth();
+ this.element.hide();
+ }
+
+ this.button.outerWidth( width );
+ },
+
+ _resizeMenu: function() {
+ this.menu.outerWidth( Math.max(
+ this.button.outerWidth(),
+
+ // support: IE10
+ // IE10 wraps long text (possibly a rounding bug)
+ // so we add 1px to avoid the wrapping
+ this.menu.width( "" ).outerWidth() + 1
+ ) );
+ },
+
+ _getCreateOptions: function() {
+ return { disabled: this.element.prop( "disabled" ) };
+ },
+
+ _parseOptions: function( options ) {
+ var data = [];
+ options.each(function( index, item ) {
+ var option = $( item ),
+ optgroup = option.parent( "optgroup" );
+ data.push({
+ element: option,
+ index: index,
+ value: option.val(),
+ label: option.text(),
+ optgroup: optgroup.attr( "label" ) || "",
+ disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )
+ });
+ });
+ this.items = data;
+ },
+
+ _destroy: function() {
+ this.menuWrap.remove();
+ this.button.remove();
+ this.element.show();
+ this.element.removeUniqueId();
+ this.label.attr( "for", this.ids.element );
+ }
+});
+
+
+/*!
+ * jQuery UI Slider 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/slider/
+ */
+
+
+var slider = $.widget( "ui.slider", $.ui.mouse, {
+ version: "1.11.4",
+ widgetEventPrefix: "slide",
+
+ options: {
+ animate: false,
+ distance: 0,
+ max: 100,
+ min: 0,
+ orientation: "horizontal",
+ range: false,
+ step: 1,
+ value: 0,
+ values: null,
+
+ // callbacks
+ change: null,
+ slide: null,
+ start: null,
+ stop: null
+ },
+
+ // number of pages in a slider
+ // (how many times can you page up/down to go through the whole range)
+ numPages: 5,
+
+ _create: function() {
+ this._keySliding = false;
+ this._mouseSliding = false;
+ this._animateOff = true;
+ this._handleIndex = null;
+ this._detectOrientation();
+ this._mouseInit();
+ this._calculateNewMax();
+
+ this.element
+ .addClass( "ui-slider" +
+ " ui-slider-" + this.orientation +
+ " ui-widget" +
+ " ui-widget-content" +
+ " ui-corner-all");
+
+ this._refresh();
+ this._setOption( "disabled", this.options.disabled );
+
+ this._animateOff = false;
+ },
+
+ _refresh: function() {
+ this._createRange();
+ this._createHandles();
+ this._setupEvents();
+ this._refreshValue();
+ },
+
+ _createHandles: function() {
+ var i, handleCount,
+ options = this.options,
+ existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
+ handle = "<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",
+ handles = [];
+
+ handleCount = ( options.values && options.values.length ) || 1;
+
+ if ( existingHandles.length > handleCount ) {
+ existingHandles.slice( handleCount ).remove();
+ existingHandles = existingHandles.slice( 0, handleCount );
+ }
+
+ for ( i = existingHandles.length; i < handleCount; i++ ) {
+ handles.push( handle );
+ }
+
+ this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
+
+ this.handle = this.handles.eq( 0 );
+
+ this.handles.each(function( i ) {
+ $( this ).data( "ui-slider-handle-index", i );
+ });
+ },
+
+ _createRange: function() {
+ var options = this.options,
+ classes = "";
+
+ if ( options.range ) {
+ if ( options.range === true ) {
+ if ( !options.values ) {
+ options.values = [ this._valueMin(), this._valueMin() ];
+ } else if ( options.values.length && options.values.length !== 2 ) {
+ options.values = [ options.values[0], options.values[0] ];
+ } else if ( $.isArray( options.values ) ) {
+ options.values = options.values.slice(0);
+ }
+ }
+
+ if ( !this.range || !this.range.length ) {
+ this.range = $( "<div></div>" )
+ .appendTo( this.element );
+
+ classes = "ui-slider-range" +
+ // note: this isn't the most fittingly semantic framework class for this element,
+ // but worked best visually with a variety of themes
+ " ui-widget-header ui-corner-all";
+ } else {
+ this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
+ // Handle range switching from true to min/max
+ .css({
+ "left": "",
+ "bottom": ""
+ });
+ }
+
+ this.range.addClass( classes +
+ ( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
+ } else {
+ if ( this.range ) {
+ this.range.remove();
+ }
+ this.range = null;
+ }
+ },
+
+ _setupEvents: function() {
+ this._off( this.handles );
+ this._on( this.handles, this._handleEvents );
+ this._hoverable( this.handles );
+ this._focusable( this.handles );
+ },
+
+ _destroy: function() {
+ this.handles.remove();
+ if ( this.range ) {
+ this.range.remove();
+ }
+
+ this.element
+ .removeClass( "ui-slider" +
+ " ui-slider-horizontal" +
+ " ui-slider-vertical" +
+ " ui-widget" +
+ " ui-widget-content" +
+ " ui-corner-all" );
+
+ this._mouseDestroy();
+ },
+
+ _mouseCapture: function( event ) {
+ var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
+ that = this,
+ o = this.options;
+
+ if ( o.disabled ) {
+ return false;
+ }
+
+ this.elementSize = {
+ width: this.element.outerWidth(),
+ height: this.element.outerHeight()
+ };
+ this.elementOffset = this.element.offset();
+
+ position = { x: event.pageX, y: event.pageY };
+ normValue = this._normValueFromMouse( position );
+ distance = this._valueMax() - this._valueMin() + 1;
+ this.handles.each(function( i ) {
+ var thisDistance = Math.abs( normValue - that.values(i) );
+ if (( distance > thisDistance ) ||
+ ( distance === thisDistance &&
+ (i === that._lastChangedValue || that.values(i) === o.min ))) {
+ distance = thisDistance;
+ closestHandle = $( this );
+ index = i;
+ }
+ });
+
+ allowed = this._start( event, index );
+ if ( allowed === false ) {
+ return false;
+ }
+ this._mouseSliding = true;
+
+ this._handleIndex = index;
+
+ closestHandle
+ .addClass( "ui-state-active" )
+ .focus();
+
+ offset = closestHandle.offset();
+ mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
+ this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+ left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+ top: event.pageY - offset.top -
+ ( closestHandle.height() / 2 ) -
+ ( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
+ ( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
+ ( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
+ };
+
+ if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+ this._slide( event, index, normValue );
+ }
+ this._animateOff = true;
+ return true;
+ },
+
+ _mouseStart: function() {
+ return true;
+ },
+
+ _mouseDrag: function( event ) {
+ var position = { x: event.pageX, y: event.pageY },
+ normValue = this._normValueFromMouse( position );
+
+ this._slide( event, this._handleIndex, normValue );
+
+ return false;
+ },
+
+ _mouseStop: function( event ) {
+ this.handles.removeClass( "ui-state-active" );
+ this._mouseSliding = false;
+
+ this._stop( event, this._handleIndex );
+ this._change( event, this._handleIndex );
+
+ this._handleIndex = null;
+ this._clickOffset = null;
+ this._animateOff = false;
+
+ return false;
+ },
+
+ _detectOrientation: function() {
+ this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+ },
+
+ _normValueFromMouse: function( position ) {
+ var pixelTotal,
+ pixelMouse,
+ percentMouse,
+ valueTotal,
+ valueMouse;
+
+ if ( this.orientation === "horizontal" ) {
+ pixelTotal = this.elementSize.width;
+ pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
+ } else {
+ pixelTotal = this.elementSize.height;
+ pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
+ }
+
+ percentMouse = ( pixelMouse / pixelTotal );
+ if ( percentMouse > 1 ) {
+ percentMouse = 1;
+ }
+ if ( percentMouse < 0 ) {
+ percentMouse = 0;
+ }
+ if ( this.orientation === "vertical" ) {
+ percentMouse = 1 - percentMouse;
+ }
+
+ valueTotal = this._valueMax() - this._valueMin();
+ valueMouse = this._valueMin() + percentMouse * valueTotal;
+
+ return this._trimAlignValue( valueMouse );
+ },
+
+ _start: function( event, index ) {
+ var uiHash = {
+ handle: this.handles[ index ],
+ value: this.value()
+ };
+ if ( this.options.values && this.options.values.length ) {
+ uiHash.value = this.values( index );
+ uiHash.values = this.values();
+ }
+ return this._trigger( "start", event, uiHash );
+ },
+
+ _slide: function( event, index, newVal ) {
+ var otherVal,
+ newValues,
+ allowed;
+
+ if ( this.options.values && this.options.values.length ) {
+ otherVal = this.values( index ? 0 : 1 );
+
+ if ( ( this.options.values.length === 2 && this.options.range === true ) &&
+ ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
+ ) {
+ newVal = otherVal;
+ }
+
+ if ( newVal !== this.values( index ) ) {
+ newValues = this.values();
+ newValues[ index ] = newVal;
+ // A slide can be canceled by returning false from the slide callback
+ allowed = this._trigger( "slide", event, {
+ handle: this.handles[ index ],
+ value: newVal,
+ values: newValues
+ } );
+ otherVal = this.values( index ? 0 : 1 );
+ if ( allowed !== false ) {
+ this.values( index, newVal );
+ }
+ }
+ } else {
+ if ( newVal !== this.value() ) {
+ // A slide can be canceled by returning false from the slide callback
+ allowed = this._trigger( "slide", event, {
+ handle: this.handles[ index ],
+ value: newVal
+ } );
+ if ( allowed !== false ) {
+ this.value( newVal );
+ }
+ }
+ }
+ },
+
+ _stop: function( event, index ) {
+ var uiHash = {
+ handle: this.handles[ index ],
+ value: this.value()
+ };
+ if ( this.options.values && this.options.values.length ) {
+ uiHash.value = this.values( index );
+ uiHash.values = this.values();
+ }
+
+ this._trigger( "stop", event, uiHash );
+ },
+
+ _change: function( event, index ) {
+ if ( !this._keySliding && !this._mouseSliding ) {
+ var uiHash = {
+ handle: this.handles[ index ],
+ value: this.value()
+ };
+ if ( this.options.values && this.options.values.length ) {
+ uiHash.value = this.values( index );
+ uiHash.values = this.values();
+ }
+
+ //store the last changed value index for reference when handles overlap
+ this._lastChangedValue = index;
+
+ this._trigger( "change", event, uiHash );
+ }
+ },
+
+ value: function( newValue ) {
+ if ( arguments.length ) {
+ this.options.value = this._trimAlignValue( newValue );
+ this._refreshValue();
+ this._change( null, 0 );
+ return;
+ }
+
+ return this._value();
+ },
+
+ values: function( index, newValue ) {
+ var vals,
+ newValues,
+ i;
+
+ if ( arguments.length > 1 ) {
+ this.options.values[ index ] = this._trimAlignValue( newValue );
+ this._refreshValue();
+ this._change( null, index );
+ return;
+ }
+
+ if ( arguments.length ) {
+ if ( $.isArray( arguments[ 0 ] ) ) {
+ vals = this.options.values;
+ newValues = arguments[ 0 ];
+ for ( i = 0; i < vals.length; i += 1 ) {
+ vals[ i ] = this._trimAlignValue( newValues[ i ] );
+ this._change( null, i );
+ }
+ this._refreshValue();
+ } else {
+ if ( this.options.values && this.options.values.length ) {
+ return this._values( index );
+ } else {
+ return this.value();
+ }
+ }
+ } else {
+ return this._values();
+ }
+ },
+
+ _setOption: function( key, value ) {
+ var i,
+ valsLength = 0;
+
+ if ( key === "range" && this.options.range === true ) {
+ if ( value === "min" ) {
+ this.options.value = this._values( 0 );
+ this.options.values = null;
+ } else if ( value === "max" ) {
+ this.options.value = this._values( this.options.values.length - 1 );
+ this.options.values = null;
+ }
+ }
+
+ if ( $.isArray( this.options.values ) ) {
+ valsLength = this.options.values.length;
+ }
+
+ if ( key === "disabled" ) {
+ this.element.toggleClass( "ui-state-disabled", !!value );
+ }
+
+ this._super( key, value );
+
+ switch ( key ) {
+ case "orientation":
+ this._detectOrientation();
+ this.element
+ .removeClass( "ui-slider-horizontal ui-slider-vertical" )
+ .addClass( "ui-slider-" + this.orientation );
+ this._refreshValue();
+
+ // Reset positioning from previous orientation
+ this.handles.css( value === "horizontal" ? "bottom" : "left", "" );
+ break;
+ case "value":
+ this._animateOff = true;
+ this._refreshValue();
+ this._change( null, 0 );
+ this._animateOff = false;
+ break;
+ case "values":
+ this._animateOff = true;
+ this._refreshValue();
+ for ( i = 0; i < valsLength; i += 1 ) {
+ this._change( null, i );
+ }
+ this._animateOff = false;
+ break;
+ case "step":
+ case "min":
+ case "max":
+ this._animateOff = true;
+ this._calculateNewMax();
+ this._refreshValue();
+ this._animateOff = false;
+ break;
+ case "range":
+ this._animateOff = true;
+ this._refresh();
+ this._animateOff = false;
+ break;
+ }
+ },
+
+ //internal value getter
+ // _value() returns value trimmed by min and max, aligned by step
+ _value: function() {
+ var val = this.options.value;
+ val = this._trimAlignValue( val );
+
+ return val;
+ },
+
+ //internal values getter
+ // _values() returns array of values trimmed by min and max, aligned by step
+ // _values( index ) returns single value trimmed by min and max, aligned by step
+ _values: function( index ) {
+ var val,
+ vals,
+ i;
+
+ if ( arguments.length ) {
+ val = this.options.values[ index ];
+ val = this._trimAlignValue( val );
+
+ return val;
+ } else if ( this.options.values && this.options.values.length ) {
+ // .slice() creates a copy of the array
+ // this copy gets trimmed by min and max and then returned
+ vals = this.options.values.slice();
+ for ( i = 0; i < vals.length; i += 1) {
+ vals[ i ] = this._trimAlignValue( vals[ i ] );
+ }
+
+ return vals;
+ } else {
+ return [];
+ }
+ },
+
+ // returns the step-aligned value that val is closest to, between (inclusive) min and max
+ _trimAlignValue: function( val ) {
+ if ( val <= this._valueMin() ) {
+ return this._valueMin();
+ }
+ if ( val >= this._valueMax() ) {
+ return this._valueMax();
+ }
+ var step = ( this.options.step > 0 ) ? this.options.step : 1,
+ valModStep = (val - this._valueMin()) % step,
+ alignValue = val - valModStep;
+
+ if ( Math.abs(valModStep) * 2 >= step ) {
+ alignValue += ( valModStep > 0 ) ? step : ( -step );
+ }
+
+ // Since JavaScript has problems with large floats, round
+ // the final value to 5 digits after the decimal point (see #4124)
+ return parseFloat( alignValue.toFixed(5) );
+ },
+
+ _calculateNewMax: function() {
+ var max = this.options.max,
+ min = this._valueMin(),
+ step = this.options.step,
+ aboveMin = Math.floor( ( +( max - min ).toFixed( this._precision() ) ) / step ) * step;
+ max = aboveMin + min;
+ this.max = parseFloat( max.toFixed( this._precision() ) );
+ },
+
+ _precision: function() {
+ var precision = this._precisionOf( this.options.step );
+ if ( this.options.min !== null ) {
+ precision = Math.max( precision, this._precisionOf( this.options.min ) );
+ }
+ return precision;
+ },
+
+ _precisionOf: function( num ) {
+ var str = num.toString(),
+ decimal = str.indexOf( "." );
+ return decimal === -1 ? 0 : str.length - decimal - 1;
+ },
+
+ _valueMin: function() {
+ return this.options.min;
+ },
+
+ _valueMax: function() {
+ return this.max;
+ },
+
+ _refreshValue: function() {
+ var lastValPercent, valPercent, value, valueMin, valueMax,
+ oRange = this.options.range,
+ o = this.options,
+ that = this,
+ animate = ( !this._animateOff ) ? o.animate : false,
+ _set = {};
+
+ if ( this.options.values && this.options.values.length ) {
+ this.handles.each(function( i ) {
+ valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
+ _set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+ $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+ if ( that.options.range === true ) {
+ if ( that.orientation === "horizontal" ) {
+ if ( i === 0 ) {
+ that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
+ }
+ if ( i === 1 ) {
+ that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ } else {
+ if ( i === 0 ) {
+ that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
+ }
+ if ( i === 1 ) {
+ that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ }
+ }
+ lastValPercent = valPercent;
+ });
+ } else {
+ value = this.value();
+ valueMin = this._valueMin();
+ valueMax = this._valueMax();
+ valPercent = ( valueMax !== valueMin ) ?
+ ( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+ 0;
+ _set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+ this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+
+ if ( oRange === "min" && this.orientation === "horizontal" ) {
+ this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
+ }
+ if ( oRange === "max" && this.orientation === "horizontal" ) {
+ this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ if ( oRange === "min" && this.orientation === "vertical" ) {
+ this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
+ }
+ if ( oRange === "max" && this.orientation === "vertical" ) {
+ this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+ }
+ }
+ },
+
+ _handleEvents: {
+ keydown: function( event ) {
+ var allowed, curVal, newVal, step,
+ index = $( event.target ).data( "ui-slider-handle-index" );
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.HOME:
+ case $.ui.keyCode.END:
+ case $.ui.keyCode.PAGE_UP:
+ case $.ui.keyCode.PAGE_DOWN:
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.RIGHT:
+ case $.ui.keyCode.DOWN:
+ case $.ui.keyCode.LEFT:
+ event.preventDefault();
+ if ( !this._keySliding ) {
+ this._keySliding = true;
+ $( event.target ).addClass( "ui-state-active" );
+ allowed = this._start( event, index );
+ if ( allowed === false ) {
+ return;
+ }
+ }
+ break;
+ }
+
+ step = this.options.step;
+ if ( this.options.values && this.options.values.length ) {
+ curVal = newVal = this.values( index );
+ } else {
+ curVal = newVal = this.value();
+ }
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.HOME:
+ newVal = this._valueMin();
+ break;
+ case $.ui.keyCode.END:
+ newVal = this._valueMax();
+ break;
+ case $.ui.keyCode.PAGE_UP:
+ newVal = this._trimAlignValue(
+ curVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )
+ );
+ break;
+ case $.ui.keyCode.PAGE_DOWN:
+ newVal = this._trimAlignValue(
+ curVal - ( (this._valueMax() - this._valueMin()) / this.numPages ) );
+ break;
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.RIGHT:
+ if ( curVal === this._valueMax() ) {
+ return;
+ }
+ newVal = this._trimAlignValue( curVal + step );
+ break;
+ case $.ui.keyCode.DOWN:
+ case $.ui.keyCode.LEFT:
+ if ( curVal === this._valueMin() ) {
+ return;
+ }
+ newVal = this._trimAlignValue( curVal - step );
+ break;
+ }
+
+ this._slide( event, index, newVal );
+ },
+ keyup: function( event ) {
+ var index = $( event.target ).data( "ui-slider-handle-index" );
+
+ if ( this._keySliding ) {
+ this._keySliding = false;
+ this._stop( event, index );
+ this._change( event, index );
+ $( event.target ).removeClass( "ui-state-active" );
+ }
+ }
+ }
+});
+
+
+/*!
+ * jQuery UI Sortable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/sortable/
+ */
+
+
+var sortable = $.widget("ui.sortable", $.ui.mouse, {
+ version: "1.11.4",
+ widgetEventPrefix: "sort",
+ ready: false,
+ options: {
+ appendTo: "parent",
+ axis: false,
+ connectWith: false,
+ containment: false,
+ cursor: "auto",
+ cursorAt: false,
+ dropOnEmpty: true,
+ forcePlaceholderSize: false,
+ forceHelperSize: false,
+ grid: false,
+ handle: false,
+ helper: "original",
+ items: "> *",
+ opacity: false,
+ placeholder: false,
+ revert: false,
+ scroll: true,
+ scrollSensitivity: 20,
+ scrollSpeed: 20,
+ scope: "default",
+ tolerance: "intersect",
+ zIndex: 1000,
+
+ // callbacks
+ activate: null,
+ beforeStop: null,
+ change: null,
+ deactivate: null,
+ out: null,
+ over: null,
+ receive: null,
+ remove: null,
+ sort: null,
+ start: null,
+ stop: null,
+ update: null
+ },
+
+ _isOverAxis: function( x, reference, size ) {
+ return ( x >= reference ) && ( x < ( reference + size ) );
+ },
+
+ _isFloating: function( item ) {
+ return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
+ },
+
+ _create: function() {
+ this.containerCache = {};
+ this.element.addClass("ui-sortable");
+
+ //Get the items
+ this.refresh();
+
+ //Let's determine the parent's offset
+ this.offset = this.element.offset();
+
+ //Initialize mouse events for interaction
+ this._mouseInit();
+
+ this._setHandleClassName();
+
+ //We're ready to go
+ this.ready = true;
+
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+
+ if ( key === "handle" ) {
+ this._setHandleClassName();
+ }
+ },
+
+ _setHandleClassName: function() {
+ this.element.find( ".ui-sortable-handle" ).removeClass( "ui-sortable-handle" );
+ $.each( this.items, function() {
+ ( this.instance.options.handle ?
+ this.item.find( this.instance.options.handle ) : this.item )
+ .addClass( "ui-sortable-handle" );
+ });
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-sortable ui-sortable-disabled" )
+ .find( ".ui-sortable-handle" )
+ .removeClass( "ui-sortable-handle" );
+ this._mouseDestroy();
+
+ for ( var i = this.items.length - 1; i >= 0; i-- ) {
+ this.items[i].item.removeData(this.widgetName + "-item");
+ }
+
+ return this;
+ },
+
+ _mouseCapture: function(event, overrideHandle) {
+ var currentItem = null,
+ validHandle = false,
+ that = this;
+
+ if (this.reverting) {
+ return false;
+ }
+
+ if(this.options.disabled || this.options.type === "static") {
+ return false;
+ }
+
+ //We have to refresh the items data once first
+ this._refreshItems(event);
+
+ //Find out if the clicked node (or one of its parents) is a actual item in this.items
+ $(event.target).parents().each(function() {
+ if($.data(this, that.widgetName + "-item") === that) {
+ currentItem = $(this);
+ return false;
+ }
+ });
+ if($.data(event.target, that.widgetName + "-item") === that) {
+ currentItem = $(event.target);
+ }
+
+ if(!currentItem) {
+ return false;
+ }
+ if(this.options.handle && !overrideHandle) {
+ $(this.options.handle, currentItem).find("*").addBack().each(function() {
+ if(this === event.target) {
+ validHandle = true;
+ }
+ });
+ if(!validHandle) {
+ return false;
+ }
+ }
+
+ this.currentItem = currentItem;
+ this._removeCurrentsFromItems();
+ return true;
+
+ },
+
+ _mouseStart: function(event, overrideHandle, noActivation) {
+
+ var i, body,
+ o = this.options;
+
+ this.currentContainer = this;
+
+ //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
+ this.refreshPositions();
+
+ //Create and append the visible helper
+ this.helper = this._createHelper(event);
+
+ //Cache the helper size
+ this._cacheHelperProportions();
+
+ /*
+ * - Position generation -
+ * This block generates everything position related - it's the core of draggables.
+ */
+
+ //Cache the margins of the original element
+ this._cacheMargins();
+
+ //Get the next scrolling parent
+ this.scrollParent = this.helper.scrollParent();
+
+ //The element's absolute position on the page minus margins
+ this.offset = this.currentItem.offset();
+ this.offset = {
+ top: this.offset.top - this.margins.top,
+ left: this.offset.left - this.margins.left
+ };
+
+ $.extend(this.offset, {
+ click: { //Where the click happened, relative to the element
+ left: event.pageX - this.offset.left,
+ top: event.pageY - this.offset.top
+ },
+ parent: this._getParentOffset(),
+ relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+ });
+
+ // Only after we got the offset, we can change the helper's position to absolute
+ // TODO: Still need to figure out a way to make relative sorting possible
+ this.helper.css("position", "absolute");
+ this.cssPosition = this.helper.css("position");
+
+ //Generate the original position
+ this.originalPosition = this._generatePosition(event);
+ this.originalPageX = event.pageX;
+ this.originalPageY = event.pageY;
+
+ //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+ (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+ //Cache the former DOM position
+ this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
+
+ //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
+ if(this.helper[0] !== this.currentItem[0]) {
+ this.currentItem.hide();
+ }
+
+ //Create the placeholder
+ this._createPlaceholder();
+
+ //Set a containment if given in the options
+ if(o.containment) {
+ this._setContainment();
+ }
+
+ if( o.cursor && o.cursor !== "auto" ) { // cursor option
+ body = this.document.find( "body" );
+
+ // support: IE
+ this.storedCursor = body.css( "cursor" );
+ body.css( "cursor", o.cursor );
+
+ this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
+ }
+
+ if(o.opacity) { // opacity option
+ if (this.helper.css("opacity")) {
+ this._storedOpacity = this.helper.css("opacity");
+ }
+ this.helper.css("opacity", o.opacity);
+ }
+
+ if(o.zIndex) { // zIndex option
+ if (this.helper.css("zIndex")) {
+ this._storedZIndex = this.helper.css("zIndex");
+ }
+ this.helper.css("zIndex", o.zIndex);
+ }
+
+ //Prepare scrolling
+ if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
+ this.overflowOffset = this.scrollParent.offset();
+ }
+
+ //Call callbacks
+ this._trigger("start", event, this._uiHash());
+
+ //Recache the helper size
+ if(!this._preserveHelperProportions) {
+ this._cacheHelperProportions();
+ }
+
+
+ //Post "activate" events to possible containers
+ if( !noActivation ) {
+ for ( i = this.containers.length - 1; i >= 0; i-- ) {
+ this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
+ }
+ }
+
+ //Prepare possible droppables
+ if($.ui.ddmanager) {
+ $.ui.ddmanager.current = this;
+ }
+
+ if ($.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+
+ this.dragging = true;
+
+ this.helper.addClass("ui-sortable-helper");
+ this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+ return true;
+
+ },
+
+ _mouseDrag: function(event) {
+ var i, item, itemElement, intersection,
+ o = this.options,
+ scrolled = false;
+
+ //Compute the helpers position
+ this.position = this._generatePosition(event);
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ if (!this.lastPositionAbs) {
+ this.lastPositionAbs = this.positionAbs;
+ }
+
+ //Do scrolling
+ if(this.options.scroll) {
+ if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
+
+ if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+ } else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+ }
+
+ if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+ } else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+ }
+
+ } else {
+
+ if(event.pageY - this.document.scrollTop() < o.scrollSensitivity) {
+ scrolled = this.document.scrollTop(this.document.scrollTop() - o.scrollSpeed);
+ } else if(this.window.height() - (event.pageY - this.document.scrollTop()) < o.scrollSensitivity) {
+ scrolled = this.document.scrollTop(this.document.scrollTop() + o.scrollSpeed);
+ }
+
+ if(event.pageX - this.document.scrollLeft() < o.scrollSensitivity) {
+ scrolled = this.document.scrollLeft(this.document.scrollLeft() - o.scrollSpeed);
+ } else if(this.window.width() - (event.pageX - this.document.scrollLeft()) < o.scrollSensitivity) {
+ scrolled = this.document.scrollLeft(this.document.scrollLeft() + o.scrollSpeed);
+ }
+
+ }
+
+ if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+ }
+
+ //Regenerate the absolute position used for position checks
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ //Set the helper position
+ if(!this.options.axis || this.options.axis !== "y") {
+ this.helper[0].style.left = this.position.left+"px";
+ }
+ if(!this.options.axis || this.options.axis !== "x") {
+ this.helper[0].style.top = this.position.top+"px";
+ }
+
+ //Rearrange
+ for (i = this.items.length - 1; i >= 0; i--) {
+
+ //Cache variables and intersection, continue if no intersection
+ item = this.items[i];
+ itemElement = item.item[0];
+ intersection = this._intersectsWithPointer(item);
+ if (!intersection) {
+ continue;
+ }
+
+ // Only put the placeholder inside the current Container, skip all
+ // items from other containers. This works because when moving
+ // an item from one container to another the
+ // currentContainer is switched before the placeholder is moved.
+ //
+ // Without this, moving items in "sub-sortables" can cause
+ // the placeholder to jitter between the outer and inner container.
+ if (item.instance !== this.currentContainer) {
+ continue;
+ }
+
+ // cannot intersect with itself
+ // no useless actions that have been done before
+ // no action if the item moved is the parent of the item checked
+ if (itemElement !== this.currentItem[0] &&
+ this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
+ !$.contains(this.placeholder[0], itemElement) &&
+ (this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
+ ) {
+
+ this.direction = intersection === 1 ? "down" : "up";
+
+ if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
+ this._rearrange(event, item);
+ } else {
+ break;
+ }
+
+ this._trigger("change", event, this._uiHash());
+ break;
+ }
+ }
+
+ //Post events to containers
+ this._contactContainers(event);
+
+ //Interconnect with droppables
+ if($.ui.ddmanager) {
+ $.ui.ddmanager.drag(this, event);
+ }
+
+ //Call callbacks
+ this._trigger("sort", event, this._uiHash());
+
+ this.lastPositionAbs = this.positionAbs;
+ return false;
+
+ },
+
+ _mouseStop: function(event, noPropagation) {
+
+ if(!event) {
+ return;
+ }
+
+ //If we are using droppables, inform the manager about the drop
+ if ($.ui.ddmanager && !this.options.dropBehaviour) {
+ $.ui.ddmanager.drop(this, event);
+ }
+
+ if(this.options.revert) {
+ var that = this,
+ cur = this.placeholder.offset(),
+ axis = this.options.axis,
+ animation = {};
+
+ if ( !axis || axis === "x" ) {
+ animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollLeft);
+ }
+ if ( !axis || axis === "y" ) {
+ animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop);
+ }
+ this.reverting = true;
+ $(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
+ that._clear(event);
+ });
+ } else {
+ this._clear(event, noPropagation);
+ }
+
+ return false;
+
+ },
+
+ cancel: function() {
+
+ if(this.dragging) {
+
+ this._mouseUp({ target: null });
+
+ if(this.options.helper === "original") {
+ this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+ } else {
+ this.currentItem.show();
+ }
+
+ //Post deactivating events to containers
+ for (var i = this.containers.length - 1; i >= 0; i--){
+ this.containers[i]._trigger("deactivate", null, this._uiHash(this));
+ if(this.containers[i].containerCache.over) {
+ this.containers[i]._trigger("out", null, this._uiHash(this));
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ }
+
+ if (this.placeholder) {
+ //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+ if(this.placeholder[0].parentNode) {
+ this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+ }
+ if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
+ this.helper.remove();
+ }
+
+ $.extend(this, {
+ helper: null,
+ dragging: false,
+ reverting: false,
+ _noFinalSort: null
+ });
+
+ if(this.domPosition.prev) {
+ $(this.domPosition.prev).after(this.currentItem);
+ } else {
+ $(this.domPosition.parent).prepend(this.currentItem);
+ }
+ }
+
+ return this;
+
+ },
+
+ serialize: function(o) {
+
+ var items = this._getItemsAsjQuery(o && o.connected),
+ str = [];
+ o = o || {};
+
+ $(items).each(function() {
+ var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
+ if (res) {
+ str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
+ }
+ });
+
+ if(!str.length && o.key) {
+ str.push(o.key + "=");
+ }
+
+ return str.join("&");
+
+ },
+
+ toArray: function(o) {
+
+ var items = this._getItemsAsjQuery(o && o.connected),
+ ret = [];
+
+ o = o || {};
+
+ items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
+ return ret;
+
+ },
+
+ /* Be careful with the following core functions */
+ _intersectsWith: function(item) {
+
+ var x1 = this.positionAbs.left,
+ x2 = x1 + this.helperProportions.width,
+ y1 = this.positionAbs.top,
+ y2 = y1 + this.helperProportions.height,
+ l = item.left,
+ r = l + item.width,
+ t = item.top,
+ b = t + item.height,
+ dyClick = this.offset.click.top,
+ dxClick = this.offset.click.left,
+ isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
+ isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
+ isOverElement = isOverElementHeight && isOverElementWidth;
+
+ if ( this.options.tolerance === "pointer" ||
+ this.options.forcePointerForContainers ||
+ (this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
+ ) {
+ return isOverElement;
+ } else {
+
+ return (l < x1 + (this.helperProportions.width / 2) && // Right Half
+ x2 - (this.helperProportions.width / 2) < r && // Left Half
+ t < y1 + (this.helperProportions.height / 2) && // Bottom Half
+ y2 - (this.helperProportions.height / 2) < b ); // Top Half
+
+ }
+ },
+
+ _intersectsWithPointer: function(item) {
+
+ var isOverElementHeight = (this.options.axis === "x") || this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+ isOverElementWidth = (this.options.axis === "y") || this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+ isOverElement = isOverElementHeight && isOverElementWidth,
+ verticalDirection = this._getDragVerticalDirection(),
+ horizontalDirection = this._getDragHorizontalDirection();
+
+ if (!isOverElement) {
+ return false;
+ }
+
+ return this.floating ?
+ ( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
+ : ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
+
+ },
+
+ _intersectsWithSides: function(item) {
+
+ var isOverBottomHalf = this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
+ isOverRightHalf = this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
+ verticalDirection = this._getDragVerticalDirection(),
+ horizontalDirection = this._getDragHorizontalDirection();
+
+ if (this.floating && horizontalDirection) {
+ return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
+ } else {
+ return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
+ }
+
+ },
+
+ _getDragVerticalDirection: function() {
+ var delta = this.positionAbs.top - this.lastPositionAbs.top;
+ return delta !== 0 && (delta > 0 ? "down" : "up");
+ },
+
+ _getDragHorizontalDirection: function() {
+ var delta = this.positionAbs.left - this.lastPositionAbs.left;
+ return delta !== 0 && (delta > 0 ? "right" : "left");
+ },
+
+ refresh: function(event) {
+ this._refreshItems(event);
+ this._setHandleClassName();
+ this.refreshPositions();
+ return this;
+ },
+
+ _connectWith: function() {
+ var options = this.options;
+ return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
+ },
+
+ _getItemsAsjQuery: function(connected) {
+
+ var i, j, cur, inst,
+ items = [],
+ queries = [],
+ connectWith = this._connectWith();
+
+ if(connectWith && connected) {
+ for (i = connectWith.length - 1; i >= 0; i--){
+ cur = $(connectWith[i], this.document[0]);
+ for ( j = cur.length - 1; j >= 0; j--){
+ inst = $.data(cur[j], this.widgetFullName);
+ if(inst && inst !== this && !inst.options.disabled) {
+ queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
+ }
+ }
+ }
+ }
+
+ queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
+
+ function addItems() {
+ items.push( this );
+ }
+ for (i = queries.length - 1; i >= 0; i--){
+ queries[i][0].each( addItems );
+ }
+
+ return $(items);
+
+ },
+
+ _removeCurrentsFromItems: function() {
+
+ var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
+
+ this.items = $.grep(this.items, function (item) {
+ for (var j=0; j < list.length; j++) {
+ if(list[j] === item.item[0]) {
+ return false;
+ }
+ }
+ return true;
+ });
+
+ },
+
+ _refreshItems: function(event) {
+
+ this.items = [];
+ this.containers = [this];
+
+ var i, j, cur, inst, targetData, _queries, item, queriesLength,
+ items = this.items,
+ queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
+ connectWith = this._connectWith();
+
+ if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
+ for (i = connectWith.length - 1; i >= 0; i--){
+ cur = $(connectWith[i], this.document[0]);
+ for (j = cur.length - 1; j >= 0; j--){
+ inst = $.data(cur[j], this.widgetFullName);
+ if(inst && inst !== this && !inst.options.disabled) {
+ queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
+ this.containers.push(inst);
+ }
+ }
+ }
+ }
+
+ for (i = queries.length - 1; i >= 0; i--) {
+ targetData = queries[i][1];
+ _queries = queries[i][0];
+
+ for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
+ item = $(_queries[j]);
+
+ item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
+
+ items.push({
+ item: item,
+ instance: targetData,
+ width: 0, height: 0,
+ left: 0, top: 0
+ });
+ }
+ }
+
+ },
+
+ refreshPositions: function(fast) {
+
+ // Determine whether items are being displayed horizontally
+ this.floating = this.items.length ?
+ this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) :
+ false;
+
+ //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
+ if(this.offsetParent && this.helper) {
+ this.offset.parent = this._getParentOffset();
+ }
+
+ var i, item, t, p;
+
+ for (i = this.items.length - 1; i >= 0; i--){
+ item = this.items[i];
+
+ //We ignore calculating positions of all connected containers when we're not over them
+ if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
+ continue;
+ }
+
+ t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
+
+ if (!fast) {
+ item.width = t.outerWidth();
+ item.height = t.outerHeight();
+ }
+
+ p = t.offset();
+ item.left = p.left;
+ item.top = p.top;
+ }
+
+ if(this.options.custom && this.options.custom.refreshContainers) {
+ this.options.custom.refreshContainers.call(this);
+ } else {
+ for (i = this.containers.length - 1; i >= 0; i--){
+ p = this.containers[i].element.offset();
+ this.containers[i].containerCache.left = p.left;
+ this.containers[i].containerCache.top = p.top;
+ this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
+ this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+ }
+ }
+
+ return this;
+ },
+
+ _createPlaceholder: function(that) {
+ that = that || this;
+ var className,
+ o = that.options;
+
+ if(!o.placeholder || o.placeholder.constructor === String) {
+ className = o.placeholder;
+ o.placeholder = {
+ element: function() {
+
+ var nodeName = that.currentItem[0].nodeName.toLowerCase(),
+ element = $( "<" + nodeName + ">", that.document[0] )
+ .addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
+ .removeClass("ui-sortable-helper");
+
+ if ( nodeName === "tbody" ) {
+ that._createTrPlaceholder(
+ that.currentItem.find( "tr" ).eq( 0 ),
+ $( "<tr>", that.document[ 0 ] ).appendTo( element )
+ );
+ } else if ( nodeName === "tr" ) {
+ that._createTrPlaceholder( that.currentItem, element );
+ } else if ( nodeName === "img" ) {
+ element.attr( "src", that.currentItem.attr( "src" ) );
+ }
+
+ if ( !className ) {
+ element.css( "visibility", "hidden" );
+ }
+
+ return element;
+ },
+ update: function(container, p) {
+
+ // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
+ // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
+ if(className && !o.forcePlaceholderSize) {
+ return;
+ }
+
+ //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
+ if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
+ if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
+ }
+ };
+ }
+
+ //Create the placeholder
+ that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
+
+ //Append it after the actual current item
+ that.currentItem.after(that.placeholder);
+
+ //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+ o.placeholder.update(that, that.placeholder);
+
+ },
+
+ _createTrPlaceholder: function( sourceTr, targetTr ) {
+ var that = this;
+
+ sourceTr.children().each(function() {
+ $( "<td> </td>", that.document[ 0 ] )
+ .attr( "colspan", $( this ).attr( "colspan" ) || 1 )
+ .appendTo( targetTr );
+ });
+ },
+
+ _contactContainers: function(event) {
+ var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, floating, axis,
+ innermostContainer = null,
+ innermostIndex = null;
+
+ // get innermost container that intersects with item
+ for (i = this.containers.length - 1; i >= 0; i--) {
+
+ // never consider a container that's located within the item itself
+ if($.contains(this.currentItem[0], this.containers[i].element[0])) {
+ continue;
+ }
+
+ if(this._intersectsWith(this.containers[i].containerCache)) {
+
+ // if we've already found a container and it's more "inner" than this, then continue
+ if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
+ continue;
+ }
+
+ innermostContainer = this.containers[i];
+ innermostIndex = i;
+
+ } else {
+ // container doesn't intersect. trigger "out" event if necessary
+ if(this.containers[i].containerCache.over) {
+ this.containers[i]._trigger("out", event, this._uiHash(this));
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ }
+
+ // if no intersecting containers found, return
+ if(!innermostContainer) {
+ return;
+ }
+
+ // move the item into the container if it's not there already
+ if(this.containers.length === 1) {
+ if (!this.containers[innermostIndex].containerCache.over) {
+ this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+ this.containers[innermostIndex].containerCache.over = 1;
+ }
+ } else {
+
+ //When entering a new container, we will find the item with the least distance and append our item near it
+ dist = 10000;
+ itemWithLeastDistance = null;
+ floating = innermostContainer.floating || this._isFloating(this.currentItem);
+ posProperty = floating ? "left" : "top";
+ sizeProperty = floating ? "width" : "height";
+ axis = floating ? "clientX" : "clientY";
+
+ for (j = this.items.length - 1; j >= 0; j--) {
+ if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
+ continue;
+ }
+ if(this.items[j].item[0] === this.currentItem[0]) {
+ continue;
+ }
+
+ cur = this.items[j].item.offset()[posProperty];
+ nearBottom = false;
+ if ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {
+ nearBottom = true;
+ }
+
+ if ( Math.abs( event[ axis ] - cur ) < dist ) {
+ dist = Math.abs( event[ axis ] - cur );
+ itemWithLeastDistance = this.items[ j ];
+ this.direction = nearBottom ? "up": "down";
+ }
+ }
+
+ //Check if dropOnEmpty is enabled
+ if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
+ return;
+ }
+
+ if(this.currentContainer === this.containers[innermostIndex]) {
+ if ( !this.currentContainer.containerCache.over ) {
+ this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() );
+ this.currentContainer.containerCache.over = 1;
+ }
+ return;
+ }
+
+ itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
+ this._trigger("change", event, this._uiHash());
+ this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
+ this.currentContainer = this.containers[innermostIndex];
+
+ //Update the placeholder
+ this.options.placeholder.update(this.currentContainer, this.placeholder);
+
+ this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+ this.containers[innermostIndex].containerCache.over = 1;
+ }
+
+
+ },
+
+ _createHelper: function(event) {
+
+ var o = this.options,
+ helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
+
+ //Add the helper to the DOM if that didn't happen already
+ if(!helper.parents("body").length) {
+ $(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
+ }
+
+ if(helper[0] === this.currentItem[0]) {
+ this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
+ }
+
+ if(!helper[0].style.width || o.forceHelperSize) {
+ helper.width(this.currentItem.width());
+ }
+ if(!helper[0].style.height || o.forceHelperSize) {
+ helper.height(this.currentItem.height());
+ }
+
+ return helper;
+
+ },
+
+ _adjustOffsetFromHelper: function(obj) {
+ if (typeof obj === "string") {
+ obj = obj.split(" ");
+ }
+ if ($.isArray(obj)) {
+ obj = {left: +obj[0], top: +obj[1] || 0};
+ }
+ if ("left" in obj) {
+ this.offset.click.left = obj.left + this.margins.left;
+ }
+ if ("right" in obj) {
+ this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+ }
+ if ("top" in obj) {
+ this.offset.click.top = obj.top + this.margins.top;
+ }
+ if ("bottom" in obj) {
+ this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+ }
+ },
+
+ _getParentOffset: function() {
+
+
+ //Get the offsetParent and cache its position
+ this.offsetParent = this.helper.offsetParent();
+ var po = this.offsetParent.offset();
+
+ // This is a special case where we need to modify a offset calculated on start, since the following happened:
+ // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+ // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+ // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+ if(this.cssPosition === "absolute" && this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+ po.left += this.scrollParent.scrollLeft();
+ po.top += this.scrollParent.scrollTop();
+ }
+
+ // This needs to be actually done for all browsers, since pageX/pageY includes this information
+ // with an ugly IE fix
+ if( this.offsetParent[0] === this.document[0].body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+ po = { top: 0, left: 0 };
+ }
+
+ return {
+ top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+ left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+ };
+
+ },
+
+ _getRelativeOffset: function() {
+
+ if(this.cssPosition === "relative") {
+ var p = this.currentItem.position();
+ return {
+ top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+ left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+ };
+ } else {
+ return { top: 0, left: 0 };
+ }
+
+ },
+
+ _cacheMargins: function() {
+ this.margins = {
+ left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
+ top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
+ };
+ },
+
+ _cacheHelperProportions: function() {
+ this.helperProportions = {
+ width: this.helper.outerWidth(),
+ height: this.helper.outerHeight()
+ };
+ },
+
+ _setContainment: function() {
+
+ var ce, co, over,
+ o = this.options;
+ if(o.containment === "parent") {
+ o.containment = this.helper[0].parentNode;
+ }
+ if(o.containment === "document" || o.containment === "window") {
+ this.containment = [
+ 0 - this.offset.relative.left - this.offset.parent.left,
+ 0 - this.offset.relative.top - this.offset.parent.top,
+ o.containment === "document" ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left,
+ (o.containment === "document" ? this.document.width() : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+ ];
+ }
+
+ if(!(/^(document|window|parent)$/).test(o.containment)) {
+ ce = $(o.containment)[0];
+ co = $(o.containment).offset();
+ over = ($(ce).css("overflow") !== "hidden");
+
+ this.containment = [
+ co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
+ co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
+ co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
+ co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
+ ];
+ }
+
+ },
+
+ _convertPositionTo: function(d, pos) {
+
+ if(!pos) {
+ pos = this.position;
+ }
+ var mod = d === "absolute" ? 1 : -1,
+ scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
+ scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+ return {
+ top: (
+ pos.top + // The absolute mouse position
+ this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+ ),
+ left: (
+ pos.left + // The absolute mouse position
+ this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+ )
+ };
+
+ },
+
+ _generatePosition: function(event) {
+
+ var top, left,
+ o = this.options,
+ pageX = event.pageX,
+ pageY = event.pageY,
+ scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+ // This is another very weird special case that only happens for relative elements:
+ // 1. If the css position is relative
+ // 2. and the scroll parent is the document or similar to the offset parent
+ // we have to refresh the relative offset during the scroll so there are no jumps
+ if(this.cssPosition === "relative" && !(this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[0])) {
+ this.offset.relative = this._getRelativeOffset();
+ }
+
+ /*
+ * - Position constraining -
+ * Constrain the position to a mix of grid, containment.
+ */
+
+ if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+
+ if(this.containment) {
+ if(event.pageX - this.offset.click.left < this.containment[0]) {
+ pageX = this.containment[0] + this.offset.click.left;
+ }
+ if(event.pageY - this.offset.click.top < this.containment[1]) {
+ pageY = this.containment[1] + this.offset.click.top;
+ }
+ if(event.pageX - this.offset.click.left > this.containment[2]) {
+ pageX = this.containment[2] + this.offset.click.left;
+ }
+ if(event.pageY - this.offset.click.top > this.containment[3]) {
+ pageY = this.containment[3] + this.offset.click.top;
+ }
+ }
+
+ if(o.grid) {
+ top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+ pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+ left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+ pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+ }
+
+ }
+
+ return {
+ top: (
+ pageY - // The absolute mouse position
+ this.offset.click.top - // Click offset (relative to the element)
+ this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top + // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+ ),
+ left: (
+ pageX - // The absolute mouse position
+ this.offset.click.left - // Click offset (relative to the element)
+ this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left + // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+ )
+ };
+
+ },
+
+ _rearrange: function(event, i, a, hardRefresh) {
+
+ a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
+
+ //Various things done here to improve the performance:
+ // 1. we create a setTimeout, that calls refreshPositions
+ // 2. on the instance, we have a counter variable, that get's higher after every append
+ // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
+ // 4. this lets only the last addition to the timeout stack through
+ this.counter = this.counter ? ++this.counter : 1;
+ var counter = this.counter;
+
+ this._delay(function() {
+ if(counter === this.counter) {
+ this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+ }
+ });
+
+ },
+
+ _clear: function(event, noPropagation) {
+
+ this.reverting = false;
+ // We delay all events that have to be triggered to after the point where the placeholder has been removed and
+ // everything else normalized again
+ var i,
+ delayedTriggers = [];
+
+ // We first have to update the dom position of the actual currentItem
+ // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
+ if(!this._noFinalSort && this.currentItem.parent().length) {
+ this.placeholder.before(this.currentItem);
+ }
+ this._noFinalSort = null;
+
+ if(this.helper[0] === this.currentItem[0]) {
+ for(i in this._storedCSS) {
+ if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
+ this._storedCSS[i] = "";
+ }
+ }
+ this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+ } else {
+ this.currentItem.show();
+ }
+
+ if(this.fromOutside && !noPropagation) {
+ delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
+ }
+ if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
+ delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
+ }
+
+ // Check if the items Container has Changed and trigger appropriate
+ // events.
+ if (this !== this.currentContainer) {
+ if(!noPropagation) {
+ delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
+ delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.currentContainer));
+ delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.currentContainer));
+ }
+ }
+
+
+ //Post events to containers
+ function delayEvent( type, instance, container ) {
+ return function( event ) {
+ container._trigger( type, event, instance._uiHash( instance ) );
+ };
+ }
+ for (i = this.containers.length - 1; i >= 0; i--){
+ if (!noPropagation) {
+ delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) );
+ }
+ if(this.containers[i].containerCache.over) {
+ delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) );
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ //Do what was originally in plugins
+ if ( this.storedCursor ) {
+ this.document.find( "body" ).css( "cursor", this.storedCursor );
+ this.storedStylesheet.remove();
+ }
+ if(this._storedOpacity) {
+ this.helper.css("opacity", this._storedOpacity);
+ }
+ if(this._storedZIndex) {
+ this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
+ }
+
+ this.dragging = false;
+
+ if(!noPropagation) {
+ this._trigger("beforeStop", event, this._uiHash());
+ }
+
+ //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+ this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+
+ if ( !this.cancelHelperRemoval ) {
+ if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
+ this.helper.remove();
+ }
+ this.helper = null;
+ }
+
+ if(!noPropagation) {
+ for (i=0; i < delayedTriggers.length; i++) {
+ delayedTriggers[i].call(this, event);
+ } //Trigger all delayed events
+ this._trigger("stop", event, this._uiHash());
+ }
+
+ this.fromOutside = false;
+ return !this.cancelHelperRemoval;
+
+ },
+
+ _trigger: function() {
+ if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
+ this.cancel();
+ }
+ },
+
+ _uiHash: function(_inst) {
+ var inst = _inst || this;
+ return {
+ helper: inst.helper,
+ placeholder: inst.placeholder || $([]),
+ position: inst.position,
+ originalPosition: inst.originalPosition,
+ offset: inst.positionAbs,
+ item: inst.currentItem,
+ sender: _inst ? _inst.element : null
+ };
+ }
+
+});
+
+
+/*!
+ * jQuery UI Spinner 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/spinner/
+ */
+
+
+function spinner_modifier( fn ) {
+ return function() {
+ var previous = this.element.val();
+ fn.apply( this, arguments );
+ this._refresh();
+ if ( previous !== this.element.val() ) {
+ this._trigger( "change" );
+ }
+ };
+}
+
+var spinner = $.widget( "ui.spinner", {
+ version: "1.11.4",
+ defaultElement: "<input>",
+ widgetEventPrefix: "spin",
+ options: {
+ culture: null,
+ icons: {
+ down: "ui-icon-triangle-1-s",
+ up: "ui-icon-triangle-1-n"
+ },
+ incremental: true,
+ max: null,
+ min: null,
+ numberFormat: null,
+ page: 10,
+ step: 1,
+
+ change: null,
+ spin: null,
+ start: null,
+ stop: null
+ },
+
+ _create: function() {
+ // handle string values that need to be parsed
+ this._setOption( "max", this.options.max );
+ this._setOption( "min", this.options.min );
+ this._setOption( "step", this.options.step );
+
+ // Only format if there is a value, prevents the field from being marked
+ // as invalid in Firefox, see #9573.
+ if ( this.value() !== "" ) {
+ // Format the value, but don't constrain.
+ this._value( this.element.val(), true );
+ }
+
+ this._draw();
+ this._on( this._events );
+ this._refresh();
+
+ // turning off autocomplete prevents the browser from remembering the
+ // value when navigating through history, so we re-enable autocomplete
+ // if the page is unloaded before the widget is destroyed. #7790
+ this._on( this.window, {
+ beforeunload: function() {
+ this.element.removeAttr( "autocomplete" );
+ }
+ });
+ },
+
+ _getCreateOptions: function() {
+ var options = {},
+ element = this.element;
+
+ $.each( [ "min", "max", "step" ], function( i, option ) {
+ var value = element.attr( option );
+ if ( value !== undefined && value.length ) {
+ options[ option ] = value;
+ }
+ });
+
+ return options;
+ },
+
+ _events: {
+ keydown: function( event ) {
+ if ( this._start( event ) && this._keydown( event ) ) {
+ event.preventDefault();
+ }
+ },
+ keyup: "_stop",
+ focus: function() {
+ this.previous = this.element.val();
+ },
+ blur: function( event ) {
+ if ( this.cancelBlur ) {
+ delete this.cancelBlur;
+ return;
+ }
+
+ this._stop();
+ this._refresh();
+ if ( this.previous !== this.element.val() ) {
+ this._trigger( "change", event );
+ }
+ },
+ mousewheel: function( event, delta ) {
+ if ( !delta ) {
+ return;
+ }
+ if ( !this.spinning && !this._start( event ) ) {
+ return false;
+ }
+
+ this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
+ clearTimeout( this.mousewheelTimer );
+ this.mousewheelTimer = this._delay(function() {
+ if ( this.spinning ) {
+ this._stop( event );
+ }
+ }, 100 );
+ event.preventDefault();
+ },
+ "mousedown .ui-spinner-button": function( event ) {
+ var previous;
+
+ // We never want the buttons to have focus; whenever the user is
+ // interacting with the spinner, the focus should be on the input.
+ // If the input is focused then this.previous is properly set from
+ // when the input first received focus. If the input is not focused
+ // then we need to set this.previous based on the value before spinning.
+ previous = this.element[0] === this.document[0].activeElement ?
+ this.previous : this.element.val();
+ function checkFocus() {
+ var isActive = this.element[0] === this.document[0].activeElement;
+ if ( !isActive ) {
+ this.element.focus();
+ this.previous = previous;
+ // support: IE
+ // IE sets focus asynchronously, so we need to check if focus
+ // moved off of the input because the user clicked on the button.
+ this._delay(function() {
+ this.previous = previous;
+ });
+ }
+ }
+
+ // ensure focus is on (or stays on) the text field
+ event.preventDefault();
+ checkFocus.call( this );
+
+ // support: IE
+ // IE doesn't prevent moving focus even with event.preventDefault()
+ // so we set a flag to know when we should ignore the blur event
+ // and check (again) if focus moved off of the input.
+ this.cancelBlur = true;
+ this._delay(function() {
+ delete this.cancelBlur;
+ checkFocus.call( this );
+ });
+
+ if ( this._start( event ) === false ) {
+ return;
+ }
+
+ this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+ },
+ "mouseup .ui-spinner-button": "_stop",
+ "mouseenter .ui-spinner-button": function( event ) {
+ // button will add ui-state-active if mouse was down while mouseleave and kept down
+ if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
+ return;
+ }
+
+ if ( this._start( event ) === false ) {
+ return false;
+ }
+ this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+ },
+ // TODO: do we really want to consider this a stop?
+ // shouldn't we just stop the repeater and wait until mouseup before
+ // we trigger the stop event?
+ "mouseleave .ui-spinner-button": "_stop"
+ },
+
+ _draw: function() {
+ var uiSpinner = this.uiSpinner = this.element
+ .addClass( "ui-spinner-input" )
+ .attr( "autocomplete", "off" )
+ .wrap( this._uiSpinnerHtml() )
+ .parent()
+ // add buttons
+ .append( this._buttonHtml() );
+
+ this.element.attr( "role", "spinbutton" );
+
+ // button bindings
+ this.buttons = uiSpinner.find( ".ui-spinner-button" )
+ .attr( "tabIndex", -1 )
+ .button()
+ .removeClass( "ui-corner-all" );
+
+ // IE 6 doesn't understand height: 50% for the buttons
+ // unless the wrapper has an explicit height
+ if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
+ uiSpinner.height() > 0 ) {
+ uiSpinner.height( uiSpinner.height() );
+ }
+
+ // disable spinner if element was already disabled
+ if ( this.options.disabled ) {
+ this.disable();
+ }
+ },
+
+ _keydown: function( event ) {
+ var options = this.options,
+ keyCode = $.ui.keyCode;
+
+ switch ( event.keyCode ) {
+ case keyCode.UP:
+ this._repeat( null, 1, event );
+ return true;
+ case keyCode.DOWN:
+ this._repeat( null, -1, event );
+ return true;
+ case keyCode.PAGE_UP:
+ this._repeat( null, options.page, event );
+ return true;
+ case keyCode.PAGE_DOWN:
+ this._repeat( null, -options.page, event );
+ return true;
+ }
+
+ return false;
+ },
+
+ _uiSpinnerHtml: function() {
+ return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
+ },
+
+ _buttonHtml: function() {
+ return "" +
+ "<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
+ "<span class='ui-icon " + this.options.icons.up + "'>▲</span>" +
+ "</a>" +
+ "<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
+ "<span class='ui-icon " + this.options.icons.down + "'>▼</span>" +
+ "</a>";
+ },
+
+ _start: function( event ) {
+ if ( !this.spinning && this._trigger( "start", event ) === false ) {
+ return false;
+ }
+
+ if ( !this.counter ) {
+ this.counter = 1;
+ }
+ this.spinning = true;
+ return true;
+ },
+
+ _repeat: function( i, steps, event ) {
+ i = i || 500;
+
+ clearTimeout( this.timer );
+ this.timer = this._delay(function() {
+ this._repeat( 40, steps, event );
+ }, i );
+
+ this._spin( steps * this.options.step, event );
+ },
+
+ _spin: function( step, event ) {
+ var value = this.value() || 0;
+
+ if ( !this.counter ) {
+ this.counter = 1;
+ }
+
+ value = this._adjustValue( value + step * this._increment( this.counter ) );
+
+ if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
+ this._value( value );
+ this.counter++;
+ }
+ },
+
+ _increment: function( i ) {
+ var incremental = this.options.incremental;
+
+ if ( incremental ) {
+ return $.isFunction( incremental ) ?
+ incremental( i ) :
+ Math.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );
+ }
+
+ return 1;
+ },
+
+ _precision: function() {
+ var precision = this._precisionOf( this.options.step );
+ if ( this.options.min !== null ) {
+ precision = Math.max( precision, this._precisionOf( this.options.min ) );
+ }
+ return precision;
+ },
+
+ _precisionOf: function( num ) {
+ var str = num.toString(),
+ decimal = str.indexOf( "." );
+ return decimal === -1 ? 0 : str.length - decimal - 1;
+ },
+
+ _adjustValue: function( value ) {
+ var base, aboveMin,
+ options = this.options;
+
+ // make sure we're at a valid step
+ // - find out where we are relative to the base (min or 0)
+ base = options.min !== null ? options.min : 0;
+ aboveMin = value - base;
+ // - round to the nearest step
+ aboveMin = Math.round(aboveMin / options.step) * options.step;
+ // - rounding is based on 0, so adjust back to our base
+ value = base + aboveMin;
+
+ // fix precision from bad JS floating point math
+ value = parseFloat( value.toFixed( this._precision() ) );
+
+ // clamp the value
+ if ( options.max !== null && value > options.max) {
+ return options.max;
+ }
+ if ( options.min !== null && value < options.min ) {
+ return options.min;
+ }
+
+ return value;
+ },
+
+ _stop: function( event ) {
+ if ( !this.spinning ) {
+ return;
+ }
+
+ clearTimeout( this.timer );
+ clearTimeout( this.mousewheelTimer );
+ this.counter = 0;
+ this.spinning = false;
+ this._trigger( "stop", event );
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "culture" || key === "numberFormat" ) {
+ var prevValue = this._parse( this.element.val() );
+ this.options[ key ] = value;
+ this.element.val( this._format( prevValue ) );
+ return;
+ }
+
+ if ( key === "max" || key === "min" || key === "step" ) {
+ if ( typeof value === "string" ) {
+ value = this._parse( value );
+ }
+ }
+ if ( key === "icons" ) {
+ this.buttons.first().find( ".ui-icon" )
+ .removeClass( this.options.icons.up )
+ .addClass( value.up );
+ this.buttons.last().find( ".ui-icon" )
+ .removeClass( this.options.icons.down )
+ .addClass( value.down );
+ }
+
+ this._super( key, value );
+
+ if ( key === "disabled" ) {
+ this.widget().toggleClass( "ui-state-disabled", !!value );
+ this.element.prop( "disabled", !!value );
+ this.buttons.button( value ? "disable" : "enable" );
+ }
+ },
+
+ _setOptions: spinner_modifier(function( options ) {
+ this._super( options );
+ }),
+
+ _parse: function( val ) {
+ if ( typeof val === "string" && val !== "" ) {
+ val = window.Globalize && this.options.numberFormat ?
+ Globalize.parseFloat( val, 10, this.options.culture ) : +val;
+ }
+ return val === "" || isNaN( val ) ? null : val;
+ },
+
+ _format: function( value ) {
+ if ( value === "" ) {
+ return "";
+ }
+ return window.Globalize && this.options.numberFormat ?
+ Globalize.format( value, this.options.numberFormat, this.options.culture ) :
+ value;
+ },
+
+ _refresh: function() {
+ this.element.attr({
+ "aria-valuemin": this.options.min,
+ "aria-valuemax": this.options.max,
+ // TODO: what should we do with values that can't be parsed?
+ "aria-valuenow": this._parse( this.element.val() )
+ });
+ },
+
+ isValid: function() {
+ var value = this.value();
+
+ // null is invalid
+ if ( value === null ) {
+ return false;
+ }
+
+ // if value gets adjusted, it's invalid
+ return value === this._adjustValue( value );
+ },
+
+ // update the value without triggering change
+ _value: function( value, allowAny ) {
+ var parsed;
+ if ( value !== "" ) {
+ parsed = this._parse( value );
+ if ( parsed !== null ) {
+ if ( !allowAny ) {
+ parsed = this._adjustValue( parsed );
+ }
+ value = this._format( parsed );
+ }
+ }
+ this.element.val( value );
+ this._refresh();
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-spinner-input" )
+ .prop( "disabled", false )
+ .removeAttr( "autocomplete" )
+ .removeAttr( "role" )
+ .removeAttr( "aria-valuemin" )
+ .removeAttr( "aria-valuemax" )
+ .removeAttr( "aria-valuenow" );
+ this.uiSpinner.replaceWith( this.element );
+ },
+
+ stepUp: spinner_modifier(function( steps ) {
+ this._stepUp( steps );
+ }),
+ _stepUp: function( steps ) {
+ if ( this._start() ) {
+ this._spin( (steps || 1) * this.options.step );
+ this._stop();
+ }
+ },
+
+ stepDown: spinner_modifier(function( steps ) {
+ this._stepDown( steps );
+ }),
+ _stepDown: function( steps ) {
+ if ( this._start() ) {
+ this._spin( (steps || 1) * -this.options.step );
+ this._stop();
+ }
+ },
+
+ pageUp: spinner_modifier(function( pages ) {
+ this._stepUp( (pages || 1) * this.options.page );
+ }),
+
+ pageDown: spinner_modifier(function( pages ) {
+ this._stepDown( (pages || 1) * this.options.page );
+ }),
+
+ value: function( newVal ) {
+ if ( !arguments.length ) {
+ return this._parse( this.element.val() );
+ }
+ spinner_modifier( this._value ).call( this, newVal );
+ },
+
+ widget: function() {
+ return this.uiSpinner;
+ }
+});
+
+
+/*!
+ * jQuery UI Tabs 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/tabs/
+ */
+
+
+var tabs = $.widget( "ui.tabs", {
+ version: "1.11.4",
+ delay: 300,
+ options: {
+ active: null,
+ collapsible: false,
+ event: "click",
+ heightStyle: "content",
+ hide: null,
+ show: null,
+
+ // callbacks
+ activate: null,
+ beforeActivate: null,
+ beforeLoad: null,
+ load: null
+ },
+
+ _isLocal: (function() {
+ var rhash = /#.*$/;
+
+ return function( anchor ) {
+ var anchorUrl, locationUrl;
+
+ // support: IE7
+ // IE7 doesn't normalize the href property when set via script (#9317)
+ anchor = anchor.cloneNode( false );
+
+ anchorUrl = anchor.href.replace( rhash, "" );
+ locationUrl = location.href.replace( rhash, "" );
+
+ // decoding may throw an error if the URL isn't UTF-8 (#9518)
+ try {
+ anchorUrl = decodeURIComponent( anchorUrl );
+ } catch ( error ) {}
+ try {
+ locationUrl = decodeURIComponent( locationUrl );
+ } catch ( error ) {}
+
+ return anchor.hash.length > 1 && anchorUrl === locationUrl;
+ };
+ })(),
+
+ _create: function() {
+ var that = this,
+ options = this.options;
+
+ this.running = false;
+
+ this.element
+ .addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
+ .toggleClass( "ui-tabs-collapsible", options.collapsible );
+
+ this._processTabs();
+ options.active = this._initialActive();
+
+ // Take disabling tabs via class attribute from HTML
+ // into account and update option properly.
+ if ( $.isArray( options.disabled ) ) {
+ options.disabled = $.unique( options.disabled.concat(
+ $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
+ return that.tabs.index( li );
+ })
+ ) ).sort();
+ }
+
+ // check for length avoids error when initializing empty list
+ if ( this.options.active !== false && this.anchors.length ) {
+ this.active = this._findActive( options.active );
+ } else {
+ this.active = $();
+ }
+
+ this._refresh();
+
+ if ( this.active.length ) {
+ this.load( options.active );
+ }
+ },
+
+ _initialActive: function() {
+ var active = this.options.active,
+ collapsible = this.options.collapsible,
+ locationHash = location.hash.substring( 1 );
+
+ if ( active === null ) {
+ // check the fragment identifier in the URL
+ if ( locationHash ) {
+ this.tabs.each(function( i, tab ) {
+ if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
+ active = i;
+ return false;
+ }
+ });
+ }
+
+ // check for a tab marked active via a class
+ if ( active === null ) {
+ active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
+ }
+
+ // no active tab, set to false
+ if ( active === null || active === -1 ) {
+ active = this.tabs.length ? 0 : false;
+ }
+ }
+
+ // handle numbers: negative, out of range
+ if ( active !== false ) {
+ active = this.tabs.index( this.tabs.eq( active ) );
+ if ( active === -1 ) {
+ active = collapsible ? false : 0;
+ }
+ }
+
+ // don't allow collapsible: false and active: false
+ if ( !collapsible && active === false && this.anchors.length ) {
+ active = 0;
+ }
+
+ return active;
+ },
+
+ _getCreateEventData: function() {
+ return {
+ tab: this.active,
+ panel: !this.active.length ? $() : this._getPanelForTab( this.active )
+ };
+ },
+
+ _tabKeydown: function( event ) {
+ var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
+ selectedIndex = this.tabs.index( focusedTab ),
+ goingForward = true;
+
+ if ( this._handlePageNav( event ) ) {
+ return;
+ }
+
+ switch ( event.keyCode ) {
+ case $.ui.keyCode.RIGHT:
+ case $.ui.keyCode.DOWN:
+ selectedIndex++;
+ break;
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.LEFT:
+ goingForward = false;
+ selectedIndex--;
+ break;
+ case $.ui.keyCode.END:
+ selectedIndex = this.anchors.length - 1;
+ break;
+ case $.ui.keyCode.HOME:
+ selectedIndex = 0;
+ break;
+ case $.ui.keyCode.SPACE:
+ // Activate only, no collapsing
+ event.preventDefault();
+ clearTimeout( this.activating );
+ this._activate( selectedIndex );
+ return;
+ case $.ui.keyCode.ENTER:
+ // Toggle (cancel delayed activation, allow collapsing)
+ event.preventDefault();
+ clearTimeout( this.activating );
+ // Determine if we should collapse or activate
+ this._activate( selectedIndex === this.options.active ? false : selectedIndex );
+ return;
+ default:
+ return;
+ }
+
+ // Focus the appropriate tab, based on which key was pressed
+ event.preventDefault();
+ clearTimeout( this.activating );
+ selectedIndex = this._focusNextTab( selectedIndex, goingForward );
+
+ // Navigating with control/command key will prevent automatic activation
+ if ( !event.ctrlKey && !event.metaKey ) {
+
+ // Update aria-selected immediately so that AT think the tab is already selected.
+ // Otherwise AT may confuse the user by stating that they need to activate the tab,
+ // but the tab will already be activated by the time the announcement finishes.
+ focusedTab.attr( "aria-selected", "false" );
+ this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
+
+ this.activating = this._delay(function() {
+ this.option( "active", selectedIndex );
+ }, this.delay );
+ }
+ },
+
+ _panelKeydown: function( event ) {
+ if ( this._handlePageNav( event ) ) {
+ return;
+ }
+
+ // Ctrl+up moves focus to the current tab
+ if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
+ event.preventDefault();
+ this.active.focus();
+ }
+ },
+
+ // Alt+page up/down moves focus to the previous/next tab (and activates)
+ _handlePageNav: function( event ) {
+ if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
+ this._activate( this._focusNextTab( this.options.active - 1, false ) );
+ return true;
+ }
+ if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
+ this._activate( this._focusNextTab( this.options.active + 1, true ) );
+ return true;
+ }
+ },
+
+ _findNextTab: function( index, goingForward ) {
+ var lastTabIndex = this.tabs.length - 1;
+
+ function constrain() {
+ if ( index > lastTabIndex ) {
+ index = 0;
+ }
+ if ( index < 0 ) {
+ index = lastTabIndex;
+ }
+ return index;
+ }
+
+ while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
+ index = goingForward ? index + 1 : index - 1;
+ }
+
+ return index;
+ },
+
+ _focusNextTab: function( index, goingForward ) {
+ index = this._findNextTab( index, goingForward );
+ this.tabs.eq( index ).focus();
+ return index;
+ },
+
+ _setOption: function( key, value ) {
+ if ( key === "active" ) {
+ // _activate() will handle invalid values and update this.options
+ this._activate( value );
+ return;
+ }
+
+ if ( key === "disabled" ) {
+ // don't use the widget factory's disabled handling
+ this._setupDisabled( value );
+ return;
+ }
+
+ this._super( key, value);
+
+ if ( key === "collapsible" ) {
+ this.element.toggleClass( "ui-tabs-collapsible", value );
+ // Setting collapsible: false while collapsed; open first panel
+ if ( !value && this.options.active === false ) {
+ this._activate( 0 );
+ }
+ }
+
+ if ( key === "event" ) {
+ this._setupEvents( value );
+ }
+
+ if ( key === "heightStyle" ) {
+ this._setupHeightStyle( value );
+ }
+ },
+
+ _sanitizeSelector: function( hash ) {
+ return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
+ },
+
+ refresh: function() {
+ var options = this.options,
+ lis = this.tablist.children( ":has(a[href])" );
+
+ // get disabled tabs from class attribute from HTML
+ // this will get converted to a boolean if needed in _refresh()
+ options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
+ return lis.index( tab );
+ });
+
+ this._processTabs();
+
+ // was collapsed or no tabs
+ if ( options.active === false || !this.anchors.length ) {
+ options.active = false;
+ this.active = $();
+ // was active, but active tab is gone
+ } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
+ // all remaining tabs are disabled
+ if ( this.tabs.length === options.disabled.length ) {
+ options.active = false;
+ this.active = $();
+ // activate previous tab
+ } else {
+ this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
+ }
+ // was active, active tab still exists
+ } else {
+ // make sure active index is correct
+ options.active = this.tabs.index( this.active );
+ }
+
+ this._refresh();
+ },
+
+ _refresh: function() {
+ this._setupDisabled( this.options.disabled );
+ this._setupEvents( this.options.event );
+ this._setupHeightStyle( this.options.heightStyle );
+
+ this.tabs.not( this.active ).attr({
+ "aria-selected": "false",
+ "aria-expanded": "false",
+ tabIndex: -1
+ });
+ this.panels.not( this._getPanelForTab( this.active ) )
+ .hide()
+ .attr({
+ "aria-hidden": "true"
+ });
+
+ // Make sure one tab is in the tab order
+ if ( !this.active.length ) {
+ this.tabs.eq( 0 ).attr( "tabIndex", 0 );
+ } else {
+ this.active
+ .addClass( "ui-tabs-active ui-state-active" )
+ .attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ });
+ this._getPanelForTab( this.active )
+ .show()
+ .attr({
+ "aria-hidden": "false"
+ });
+ }
+ },
+
+ _processTabs: function() {
+ var that = this,
+ prevTabs = this.tabs,
+ prevAnchors = this.anchors,
+ prevPanels = this.panels;
+
+ this.tablist = this._getList()
+ .addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+ .attr( "role", "tablist" )
+
+ // Prevent users from focusing disabled tabs via click
+ .delegate( "> li", "mousedown" + this.eventNamespace, function( event ) {
+ if ( $( this ).is( ".ui-state-disabled" ) ) {
+ event.preventDefault();
+ }
+ })
+
+ // support: IE <9
+ // Preventing the default action in mousedown doesn't prevent IE
+ // from focusing the element, so if the anchor gets focused, blur.
+ // We don't have to worry about focusing the previously focused
+ // element since clicking on a non-focusable element should focus
+ // the body anyway.
+ .delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
+ if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
+ this.blur();
+ }
+ });
+
+ this.tabs = this.tablist.find( "> li:has(a[href])" )
+ .addClass( "ui-state-default ui-corner-top" )
+ .attr({
+ role: "tab",
+ tabIndex: -1
+ });
+
+ this.anchors = this.tabs.map(function() {
+ return $( "a", this )[ 0 ];
+ })
+ .addClass( "ui-tabs-anchor" )
+ .attr({
+ role: "presentation",
+ tabIndex: -1
+ });
+
+ this.panels = $();
+
+ this.anchors.each(function( i, anchor ) {
+ var selector, panel, panelId,
+ anchorId = $( anchor ).uniqueId().attr( "id" ),
+ tab = $( anchor ).closest( "li" ),
+ originalAriaControls = tab.attr( "aria-controls" );
+
+ // inline tab
+ if ( that._isLocal( anchor ) ) {
+ selector = anchor.hash;
+ panelId = selector.substring( 1 );
+ panel = that.element.find( that._sanitizeSelector( selector ) );
+ // remote tab
+ } else {
+ // If the tab doesn't already have aria-controls,
+ // generate an id by using a throw-away element
+ panelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id;
+ selector = "#" + panelId;
+ panel = that.element.find( selector );
+ if ( !panel.length ) {
+ panel = that._createPanel( panelId );
+ panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
+ }
+ panel.attr( "aria-live", "polite" );
+ }
+
+ if ( panel.length) {
+ that.panels = that.panels.add( panel );
+ }
+ if ( originalAriaControls ) {
+ tab.data( "ui-tabs-aria-controls", originalAriaControls );
+ }
+ tab.attr({
+ "aria-controls": panelId,
+ "aria-labelledby": anchorId
+ });
+ panel.attr( "aria-labelledby", anchorId );
+ });
+
+ this.panels
+ .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+ .attr( "role", "tabpanel" );
+
+ // Avoid memory leaks (#10056)
+ if ( prevTabs ) {
+ this._off( prevTabs.not( this.tabs ) );
+ this._off( prevAnchors.not( this.anchors ) );
+ this._off( prevPanels.not( this.panels ) );
+ }
+ },
+
+ // allow overriding how to find the list for rare usage scenarios (#7715)
+ _getList: function() {
+ return this.tablist || this.element.find( "ol,ul" ).eq( 0 );
+ },
+
+ _createPanel: function( id ) {
+ return $( "<div>" )
+ .attr( "id", id )
+ .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+ .data( "ui-tabs-destroy", true );
+ },
+
+ _setupDisabled: function( disabled ) {
+ if ( $.isArray( disabled ) ) {
+ if ( !disabled.length ) {
+ disabled = false;
+ } else if ( disabled.length === this.anchors.length ) {
+ disabled = true;
+ }
+ }
+
+ // disable tabs
+ for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
+ if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
+ $( li )
+ .addClass( "ui-state-disabled" )
+ .attr( "aria-disabled", "true" );
+ } else {
+ $( li )
+ .removeClass( "ui-state-disabled" )
+ .removeAttr( "aria-disabled" );
+ }
+ }
+
+ this.options.disabled = disabled;
+ },
+
+ _setupEvents: function( event ) {
+ var events = {};
+ if ( event ) {
+ $.each( event.split(" "), function( index, eventName ) {
+ events[ eventName ] = "_eventHandler";
+ });
+ }
+
+ this._off( this.anchors.add( this.tabs ).add( this.panels ) );
+ // Always prevent the default action, even when disabled
+ this._on( true, this.anchors, {
+ click: function( event ) {
+ event.preventDefault();
+ }
+ });
+ this._on( this.anchors, events );
+ this._on( this.tabs, { keydown: "_tabKeydown" } );
+ this._on( this.panels, { keydown: "_panelKeydown" } );
+
+ this._focusable( this.tabs );
+ this._hoverable( this.tabs );
+ },
+
+ _setupHeightStyle: function( heightStyle ) {
+ var maxHeight,
+ parent = this.element.parent();
+
+ if ( heightStyle === "fill" ) {
+ maxHeight = parent.height();
+ maxHeight -= this.element.outerHeight() - this.element.height();
+
+ this.element.siblings( ":visible" ).each(function() {
+ var elem = $( this ),
+ position = elem.css( "position" );
+
+ if ( position === "absolute" || position === "fixed" ) {
+ return;
+ }
+ maxHeight -= elem.outerHeight( true );
+ });
+
+ this.element.children().not( this.panels ).each(function() {
+ maxHeight -= $( this ).outerHeight( true );
+ });
+
+ this.panels.each(function() {
+ $( this ).height( Math.max( 0, maxHeight -
+ $( this ).innerHeight() + $( this ).height() ) );
+ })
+ .css( "overflow", "auto" );
+ } else if ( heightStyle === "auto" ) {
+ maxHeight = 0;
+ this.panels.each(function() {
+ maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+ }).height( maxHeight );
+ }
+ },
+
+ _eventHandler: function( event ) {
+ var options = this.options,
+ active = this.active,
+ anchor = $( event.currentTarget ),
+ tab = anchor.closest( "li" ),
+ clickedIsActive = tab[ 0 ] === active[ 0 ],
+ collapsing = clickedIsActive && options.collapsible,
+ toShow = collapsing ? $() : this._getPanelForTab( tab ),
+ toHide = !active.length ? $() : this._getPanelForTab( active ),
+ eventData = {
+ oldTab: active,
+ oldPanel: toHide,
+ newTab: collapsing ? $() : tab,
+ newPanel: toShow
+ };
+
+ event.preventDefault();
+
+ if ( tab.hasClass( "ui-state-disabled" ) ||
+ // tab is already loading
+ tab.hasClass( "ui-tabs-loading" ) ||
+ // can't switch durning an animation
+ this.running ||
+ // click on active header, but not collapsible
+ ( clickedIsActive && !options.collapsible ) ||
+ // allow canceling activation
+ ( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+ return;
+ }
+
+ options.active = collapsing ? false : this.tabs.index( tab );
+
+ this.active = clickedIsActive ? $() : tab;
+ if ( this.xhr ) {
+ this.xhr.abort();
+ }
+
+ if ( !toHide.length && !toShow.length ) {
+ $.error( "jQuery UI Tabs: Mismatching fragment identifier." );
+ }
+
+ if ( toShow.length ) {
+ this.load( this.tabs.index( tab ), event );
+ }
+ this._toggle( event, eventData );
+ },
+
+ // handles show/hide for selecting tabs
+ _toggle: function( event, eventData ) {
+ var that = this,
+ toShow = eventData.newPanel,
+ toHide = eventData.oldPanel;
+
+ this.running = true;
+
+ function complete() {
+ that.running = false;
+ that._trigger( "activate", event, eventData );
+ }
+
+ function show() {
+ eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
+
+ if ( toShow.length && that.options.show ) {
+ that._show( toShow, that.options.show, complete );
+ } else {
+ toShow.show();
+ complete();
+ }
+ }
+
+ // start out by hiding, then showing, then completing
+ if ( toHide.length && this.options.hide ) {
+ this._hide( toHide, this.options.hide, function() {
+ eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+ show();
+ });
+ } else {
+ eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+ toHide.hide();
+ show();
+ }
+
+ toHide.attr( "aria-hidden", "true" );
+ eventData.oldTab.attr({
+ "aria-selected": "false",
+ "aria-expanded": "false"
+ });
+ // If we're switching tabs, remove the old tab from the tab order.
+ // If we're opening from collapsed state, remove the previous tab from the tab order.
+ // If we're collapsing, then keep the collapsing tab in the tab order.
+ if ( toShow.length && toHide.length ) {
+ eventData.oldTab.attr( "tabIndex", -1 );
+ } else if ( toShow.length ) {
+ this.tabs.filter(function() {
+ return $( this ).attr( "tabIndex" ) === 0;
+ })
+ .attr( "tabIndex", -1 );
+ }
+
+ toShow.attr( "aria-hidden", "false" );
+ eventData.newTab.attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ });
+ },
+
+ _activate: function( index ) {
+ var anchor,
+ active = this._findActive( index );
+
+ // trying to activate the already active panel
+ if ( active[ 0 ] === this.active[ 0 ] ) {
+ return;
+ }
+
+ // trying to collapse, simulate a click on the current active header
+ if ( !active.length ) {
+ active = this.active;
+ }
+
+ anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
+ this._eventHandler({
+ target: anchor,
+ currentTarget: anchor,
+ preventDefault: $.noop
+ });
+ },
+
+ _findActive: function( index ) {
+ return index === false ? $() : this.tabs.eq( index );
+ },
+
+ _getIndex: function( index ) {
+ // meta-function to give users option to provide a href string instead of a numerical index.
+ if ( typeof index === "string" ) {
+ index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
+ }
+
+ return index;
+ },
+
+ _destroy: function() {
+ if ( this.xhr ) {
+ this.xhr.abort();
+ }
+
+ this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
+
+ this.tablist
+ .removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+ .removeAttr( "role" );
+
+ this.anchors
+ .removeClass( "ui-tabs-anchor" )
+ .removeAttr( "role" )
+ .removeAttr( "tabIndex" )
+ .removeUniqueId();
+
+ this.tablist.unbind( this.eventNamespace );
+
+ this.tabs.add( this.panels ).each(function() {
+ if ( $.data( this, "ui-tabs-destroy" ) ) {
+ $( this ).remove();
+ } else {
+ $( this )
+ .removeClass( "ui-state-default ui-state-active ui-state-disabled " +
+ "ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
+ .removeAttr( "tabIndex" )
+ .removeAttr( "aria-live" )
+ .removeAttr( "aria-busy" )
+ .removeAttr( "aria-selected" )
+ .removeAttr( "aria-labelledby" )
+ .removeAttr( "aria-hidden" )
+ .removeAttr( "aria-expanded" )
+ .removeAttr( "role" );
+ }
+ });
+
+ this.tabs.each(function() {
+ var li = $( this ),
+ prev = li.data( "ui-tabs-aria-controls" );
+ if ( prev ) {
+ li
+ .attr( "aria-controls", prev )
+ .removeData( "ui-tabs-aria-controls" );
+ } else {
+ li.removeAttr( "aria-controls" );
+ }
+ });
+
+ this.panels.show();
+
+ if ( this.options.heightStyle !== "content" ) {
+ this.panels.css( "height", "" );
+ }
+ },
+
+ enable: function( index ) {
+ var disabled = this.options.disabled;
+ if ( disabled === false ) {
+ return;
+ }
+
+ if ( index === undefined ) {
+ disabled = false;
+ } else {
+ index = this._getIndex( index );
+ if ( $.isArray( disabled ) ) {
+ disabled = $.map( disabled, function( num ) {
+ return num !== index ? num : null;
+ });
+ } else {
+ disabled = $.map( this.tabs, function( li, num ) {
+ return num !== index ? num : null;
+ });
+ }
+ }
+ this._setupDisabled( disabled );
+ },
+
+ disable: function( index ) {
+ var disabled = this.options.disabled;
+ if ( disabled === true ) {
+ return;
+ }
+
+ if ( index === undefined ) {
+ disabled = true;
+ } else {
+ index = this._getIndex( index );
+ if ( $.inArray( index, disabled ) !== -1 ) {
+ return;
+ }
+ if ( $.isArray( disabled ) ) {
+ disabled = $.merge( [ index ], disabled ).sort();
+ } else {
+ disabled = [ index ];
+ }
+ }
+ this._setupDisabled( disabled );
+ },
+
+ load: function( index, event ) {
+ index = this._getIndex( index );
+ var that = this,
+ tab = this.tabs.eq( index ),
+ anchor = tab.find( ".ui-tabs-anchor" ),
+ panel = this._getPanelForTab( tab ),
+ eventData = {
+ tab: tab,
+ panel: panel
+ },
+ complete = function( jqXHR, status ) {
+ if ( status === "abort" ) {
+ that.panels.stop( false, true );
+ }
+
+ tab.removeClass( "ui-tabs-loading" );
+ panel.removeAttr( "aria-busy" );
+
+ if ( jqXHR === that.xhr ) {
+ delete that.xhr;
+ }
+ };
+
+ // not remote
+ if ( this._isLocal( anchor[ 0 ] ) ) {
+ return;
+ }
+
+ this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
+
+ // support: jQuery <1.8
+ // jQuery <1.8 returns false if the request is canceled in beforeSend,
+ // but as of 1.8, $.ajax() always returns a jqXHR object.
+ if ( this.xhr && this.xhr.statusText !== "canceled" ) {
+ tab.addClass( "ui-tabs-loading" );
+ panel.attr( "aria-busy", "true" );
+
+ this.xhr
+ .done(function( response, status, jqXHR ) {
+ // support: jQuery <1.8
+ // http://bugs.jquery.com/ticket/11778
+ setTimeout(function() {
+ panel.html( response );
+ that._trigger( "load", event, eventData );
+
+ complete( jqXHR, status );
+ }, 1 );
+ })
+ .fail(function( jqXHR, status ) {
+ // support: jQuery <1.8
+ // http://bugs.jquery.com/ticket/11778
+ setTimeout(function() {
+ complete( jqXHR, status );
+ }, 1 );
+ });
+ }
+ },
+
+ _ajaxSettings: function( anchor, event, eventData ) {
+ var that = this;
+ return {
+ url: anchor.attr( "href" ),
+ beforeSend: function( jqXHR, settings ) {
+ return that._trigger( "beforeLoad", event,
+ $.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );
+ }
+ };
+ },
+
+ _getPanelForTab: function( tab ) {
+ var id = $( tab ).attr( "aria-controls" );
+ return this.element.find( this._sanitizeSelector( "#" + id ) );
+ }
+});
+
+
+/*!
+ * jQuery UI Tooltip 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/tooltip/
+ */
+
+
+var tooltip = $.widget( "ui.tooltip", {
+ version: "1.11.4",
+ options: {
+ content: function() {
+ // support: IE<9, Opera in jQuery <1.7
+ // .text() can't accept undefined, so coerce to a string
+ var title = $( this ).attr( "title" ) || "";
+ // Escape title, since we're going from an attribute to raw HTML
+ return $( "<a>" ).text( title ).html();
+ },
+ hide: true,
+ // Disabled elements have inconsistent behavior across browsers (#8661)
+ items: "[title]:not([disabled])",
+ position: {
+ my: "left top+15",
+ at: "left bottom",
+ collision: "flipfit flip"
+ },
+ show: true,
+ tooltipClass: null,
+ track: false,
+
+ // callbacks
+ close: null,
+ open: null
+ },
+
+ _addDescribedBy: function( elem, id ) {
+ var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
+ describedby.push( id );
+ elem
+ .data( "ui-tooltip-id", id )
+ .attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
+ },
+
+ _removeDescribedBy: function( elem ) {
+ var id = elem.data( "ui-tooltip-id" ),
+ describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
+ index = $.inArray( id, describedby );
+
+ if ( index !== -1 ) {
+ describedby.splice( index, 1 );
+ }
+
+ elem.removeData( "ui-tooltip-id" );
+ describedby = $.trim( describedby.join( " " ) );
+ if ( describedby ) {
+ elem.attr( "aria-describedby", describedby );
+ } else {
+ elem.removeAttr( "aria-describedby" );
+ }
+ },
+
+ _create: function() {
+ this._on({
+ mouseover: "open",
+ focusin: "open"
+ });
+
+ // IDs of generated tooltips, needed for destroy
+ this.tooltips = {};
+
+ // IDs of parent tooltips where we removed the title attribute
+ this.parents = {};
+
+ if ( this.options.disabled ) {
+ this._disable();
+ }
+
+ // Append the aria-live region so tooltips announce correctly
+ this.liveRegion = $( "<div>" )
+ .attr({
+ role: "log",
+ "aria-live": "assertive",
+ "aria-relevant": "additions"
+ })
+ .addClass( "ui-helper-hidden-accessible" )
+ .appendTo( this.document[ 0 ].body );
+ },
+
+ _setOption: function( key, value ) {
+ var that = this;
+
+ if ( key === "disabled" ) {
+ this[ value ? "_disable" : "_enable" ]();
+ this.options[ key ] = value;
+ // disable element style changes
+ return;
+ }
+
+ this._super( key, value );
+
+ if ( key === "content" ) {
+ $.each( this.tooltips, function( id, tooltipData ) {
+ that._updateContent( tooltipData.element );
+ });
+ }
+ },
+
+ _disable: function() {
+ var that = this;
+
+ // close open tooltips
+ $.each( this.tooltips, function( id, tooltipData ) {
+ var event = $.Event( "blur" );
+ event.target = event.currentTarget = tooltipData.element[ 0 ];
+ that.close( event, true );
+ });
+
+ // remove title attributes to prevent native tooltips
+ this.element.find( this.options.items ).addBack().each(function() {
+ var element = $( this );
+ if ( element.is( "[title]" ) ) {
+ element
+ .data( "ui-tooltip-title", element.attr( "title" ) )
+ .removeAttr( "title" );
+ }
+ });
+ },
+
+ _enable: function() {
+ // restore title attributes
+ this.element.find( this.options.items ).addBack().each(function() {
+ var element = $( this );
+ if ( element.data( "ui-tooltip-title" ) ) {
+ element.attr( "title", element.data( "ui-tooltip-title" ) );
+ }
+ });
+ },
+
+ open: function( event ) {
+ var that = this,
+ target = $( event ? event.target : this.element )
+ // we need closest here due to mouseover bubbling,
+ // but always pointing at the same event target
+ .closest( this.options.items );
+
+ // No element to show a tooltip for or the tooltip is already open
+ if ( !target.length || target.data( "ui-tooltip-id" ) ) {
+ return;
+ }
+
+ if ( target.attr( "title" ) ) {
+ target.data( "ui-tooltip-title", target.attr( "title" ) );
+ }
+
+ target.data( "ui-tooltip-open", true );
+
+ // kill parent tooltips, custom or native, for hover
+ if ( event && event.type === "mouseover" ) {
+ target.parents().each(function() {
+ var parent = $( this ),
+ blurEvent;
+ if ( parent.data( "ui-tooltip-open" ) ) {
+ blurEvent = $.Event( "blur" );
+ blurEvent.target = blurEvent.currentTarget = this;
+ that.close( blurEvent, true );
+ }
+ if ( parent.attr( "title" ) ) {
+ parent.uniqueId();
+ that.parents[ this.id ] = {
+ element: this,
+ title: parent.attr( "title" )
+ };
+ parent.attr( "title", "" );
+ }
+ });
+ }
+
+ this._registerCloseHandlers( event, target );
+ this._updateContent( target, event );
+ },
+
+ _updateContent: function( target, event ) {
+ var content,
+ contentOption = this.options.content,
+ that = this,
+ eventType = event ? event.type : null;
+
+ if ( typeof contentOption === "string" ) {
+ return this._open( event, target, contentOption );
+ }
+
+ content = contentOption.call( target[0], function( response ) {
+
+ // IE may instantly serve a cached response for ajax requests
+ // delay this call to _open so the other call to _open runs first
+ that._delay(function() {
+
+ // Ignore async response if tooltip was closed already
+ if ( !target.data( "ui-tooltip-open" ) ) {
+ return;
+ }
+
+ // jQuery creates a special event for focusin when it doesn't
+ // exist natively. To improve performance, the native event
+ // object is reused and the type is changed. Therefore, we can't
+ // rely on the type being correct after the event finished
+ // bubbling, so we set it back to the previous value. (#8740)
+ if ( event ) {
+ event.type = eventType;
+ }
+ this._open( event, target, response );
+ });
+ });
+ if ( content ) {
+ this._open( event, target, content );
+ }
+ },
+
+ _open: function( event, target, content ) {
+ var tooltipData, tooltip, delayedShow, a11yContent,
+ positionOption = $.extend( {}, this.options.position );
+
+ if ( !content ) {
+ return;
+ }
+
+ // Content can be updated multiple times. If the tooltip already
+ // exists, then just update the content and bail.
+ tooltipData = this._find( target );
+ if ( tooltipData ) {
+ tooltipData.tooltip.find( ".ui-tooltip-content" ).html( content );
+ return;
+ }
+
+ // if we have a title, clear it to prevent the native tooltip
+ // we have to check first to avoid defining a title if none exists
+ // (we don't want to cause an element to start matching [title])
+ //
+ // We use removeAttr only for key events, to allow IE to export the correct
+ // accessible attributes. For mouse events, set to empty string to avoid
+ // native tooltip showing up (happens only when removing inside mouseover).
+ if ( target.is( "[title]" ) ) {
+ if ( event && event.type === "mouseover" ) {
+ target.attr( "title", "" );
+ } else {
+ target.removeAttr( "title" );
+ }
+ }
+
+ tooltipData = this._tooltip( target );
+ tooltip = tooltipData.tooltip;
+ this._addDescribedBy( target, tooltip.attr( "id" ) );
+ tooltip.find( ".ui-tooltip-content" ).html( content );
+
+ // Support: Voiceover on OS X, JAWS on IE <= 9
+ // JAWS announces deletions even when aria-relevant="additions"
+ // Voiceover will sometimes re-read the entire log region's contents from the beginning
+ this.liveRegion.children().hide();
+ if ( content.clone ) {
+ a11yContent = content.clone();
+ a11yContent.removeAttr( "id" ).find( "[id]" ).removeAttr( "id" );
+ } else {
+ a11yContent = content;
+ }
+ $( "<div>" ).html( a11yContent ).appendTo( this.liveRegion );
+
+ function position( event ) {
+ positionOption.of = event;
+ if ( tooltip.is( ":hidden" ) ) {
+ return;
+ }
+ tooltip.position( positionOption );
+ }
+ if ( this.options.track && event && /^mouse/.test( event.type ) ) {
+ this._on( this.document, {
+ mousemove: position
+ });
+ // trigger once to override element-relative positioning
+ position( event );
+ } else {
+ tooltip.position( $.extend({
+ of: target
+ }, this.options.position ) );
+ }
+
+ tooltip.hide();
+
+ this._show( tooltip, this.options.show );
+ // Handle tracking tooltips that are shown with a delay (#8644). As soon
+ // as the tooltip is visible, position the tooltip using the most recent
+ // event.
+ if ( this.options.show && this.options.show.delay ) {
+ delayedShow = this.delayedShow = setInterval(function() {
+ if ( tooltip.is( ":visible" ) ) {
+ position( positionOption.of );
+ clearInterval( delayedShow );
+ }
+ }, $.fx.interval );
+ }
+
+ this._trigger( "open", event, { tooltip: tooltip } );
+ },
+
+ _registerCloseHandlers: function( event, target ) {
+ var events = {
+ keyup: function( event ) {
+ if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
+ var fakeEvent = $.Event(event);
+ fakeEvent.currentTarget = target[0];
+ this.close( fakeEvent, true );
+ }
+ }
+ };
+
+ // Only bind remove handler for delegated targets. Non-delegated
+ // tooltips will handle this in destroy.
+ if ( target[ 0 ] !== this.element[ 0 ] ) {
+ events.remove = function() {
+ this._removeTooltip( this._find( target ).tooltip );
+ };
+ }
+
+ if ( !event || event.type === "mouseover" ) {
+ events.mouseleave = "close";
+ }
+ if ( !event || event.type === "focusin" ) {
+ events.focusout = "close";
+ }
+ this._on( true, target, events );
+ },
+
+ close: function( event ) {
+ var tooltip,
+ that = this,
+ target = $( event ? event.currentTarget : this.element ),
+ tooltipData = this._find( target );
+
+ // The tooltip may already be closed
+ if ( !tooltipData ) {
+
+ // We set ui-tooltip-open immediately upon open (in open()), but only set the
+ // additional data once there's actually content to show (in _open()). So even if the
+ // tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in
+ // the period between open() and _open().
+ target.removeData( "ui-tooltip-open" );
+ return;
+ }
+
+ tooltip = tooltipData.tooltip;
+
+ // disabling closes the tooltip, so we need to track when we're closing
+ // to avoid an infinite loop in case the tooltip becomes disabled on close
+ if ( tooltipData.closing ) {
+ return;
+ }
+
+ // Clear the interval for delayed tracking tooltips
+ clearInterval( this.delayedShow );
+
+ // only set title if we had one before (see comment in _open())
+ // If the title attribute has changed since open(), don't restore
+ if ( target.data( "ui-tooltip-title" ) && !target.attr( "title" ) ) {
+ target.attr( "title", target.data( "ui-tooltip-title" ) );
+ }
+
+ this._removeDescribedBy( target );
+
+ tooltipData.hiding = true;
+ tooltip.stop( true );
+ this._hide( tooltip, this.options.hide, function() {
+ that._removeTooltip( $( this ) );
+ });
+
+ target.removeData( "ui-tooltip-open" );
+ this._off( target, "mouseleave focusout keyup" );
+
+ // Remove 'remove' binding only on delegated targets
+ if ( target[ 0 ] !== this.element[ 0 ] ) {
+ this._off( target, "remove" );
+ }
+ this._off( this.document, "mousemove" );
+
+ if ( event && event.type === "mouseleave" ) {
+ $.each( this.parents, function( id, parent ) {
+ $( parent.element ).attr( "title", parent.title );
+ delete that.parents[ id ];
+ });
+ }
+
+ tooltipData.closing = true;
+ this._trigger( "close", event, { tooltip: tooltip } );
+ if ( !tooltipData.hiding ) {
+ tooltipData.closing = false;
+ }
+ },
+
+ _tooltip: function( element ) {
+ var tooltip = $( "<div>" )
+ .attr( "role", "tooltip" )
+ .addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
+ ( this.options.tooltipClass || "" ) ),
+ id = tooltip.uniqueId().attr( "id" );
+
+ $( "<div>" )
+ .addClass( "ui-tooltip-content" )
+ .appendTo( tooltip );
+
+ tooltip.appendTo( this.document[0].body );
+
+ return this.tooltips[ id ] = {
+ element: element,
+ tooltip: tooltip
+ };
+ },
+
+ _find: function( target ) {
+ var id = target.data( "ui-tooltip-id" );
+ return id ? this.tooltips[ id ] : null;
+ },
+
+ _removeTooltip: function( tooltip ) {
+ tooltip.remove();
+ delete this.tooltips[ tooltip.attr( "id" ) ];
+ },
+
+ _destroy: function() {
+ var that = this;
+
+ // close open tooltips
+ $.each( this.tooltips, function( id, tooltipData ) {
+ // Delegate to close method to handle common cleanup
+ var event = $.Event( "blur" ),
+ element = tooltipData.element;
+ event.target = event.currentTarget = element[ 0 ];
+ that.close( event, true );
+
+ // Remove immediately; destroying an open tooltip doesn't use the
+ // hide animation
+ $( "#" + id ).remove();
+
+ // Restore the title
+ if ( element.data( "ui-tooltip-title" ) ) {
+ // If the title attribute has changed since open(), don't restore
+ if ( !element.attr( "title" ) ) {
+ element.attr( "title", element.data( "ui-tooltip-title" ) );
+ }
+ element.removeData( "ui-tooltip-title" );
+ }
+ });
+ this.liveRegion.remove();
+ }
+});
+
+
+
+}));
\ No newline at end of file
diff --git a/ui/new-ui-samples/js/vendor/jquery.js b/ui/new-ui-samples/js/vendor/jquery.js
new file mode 100644
index 0000000..eed1777
--- /dev/null
+++ b/ui/new-ui-samples/js/vendor/jquery.js
@@ -0,0 +1,9210 @@
+/*!
+ * jQuery JavaScript Library v2.1.4
+ * 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:01Z
+ */
+
+(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 have a `window` with a `document`
+ // (such as Node.js), expose a 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 ) {
+
+// Support: Firefox 18+
+// Can't be in strict mode, several libs including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+//
+
+var arr = [];
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var support = {};
+
+
+
+var
+ // Use the correct document accordingly with window argument (sandbox)
+ document = window.document,
+
+ version = "2.1.4",
+
+ // 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
+ // 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: arr.sort,
+ splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[0] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+
+ // 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() {},
+
+ isFunction: function( obj ) {
+ return jQuery.type(obj) === "function";
+ },
+
+ isArray: Array.isArray,
+
+ isWindow: function( obj ) {
+ 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;
+ },
+
+ isPlainObject: function( obj ) {
+ // Not plain objects:
+ // - Any object or value whose internal [[Class]] property is not "[object Object]"
+ // - DOM nodes
+ // - window
+ if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ if ( obj.constructor &&
+ !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
+ return false;
+ }
+
+ // If the function hasn't returned already, we're confident that
+ // |obj| is a plain object, created by {} or constructed with new Object
+ return true;
+ },
+
+ isEmptyObject: function( obj ) {
+ var name;
+ for ( name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ type: function( obj ) {
+ if ( obj == null ) {
+ return obj + "";
+ }
+ // Support: Android<4.0, iOS<6 (functionish RegExp)
+ return typeof obj === "object" || typeof obj === "function" ?
+ class2type[ toString.call(obj) ] || "object" :
+ typeof obj;
+ },
+
+ // Evaluates a script in a global context
+ globalEval: function( code ) {
+ var script,
+ indirect = eval;
+
+ code = jQuery.trim( code );
+
+ if ( code ) {
+ // If the code includes a valid, prologue position
+ // strict mode pragma, execute code by injecting a
+ // script tag into the document.
+ if ( code.indexOf("use strict") === 1 ) {
+ script = document.createElement("script");
+ script.text = code;
+ document.head.appendChild( script ).parentNode.removeChild( script );
+ } else {
+ // Otherwise, avoid the DOM node creation, insertion
+ // and removal by using an indirect global eval
+ indirect( code );
+ }
+ }
+ },
+
+ // Convert dashed to camelCase; used by the css and data modules
+ // Support: IE9-11+
+ // 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
+ 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 ) {
+ return arr == null ? -1 : indexOf.call( arr, elem, i );
+ },
+
+ merge: function( first, second ) {
+ var len = +second.length,
+ j = 0,
+ i = first.length;
+
+ for ( ; j < len; j++ ) {
+ 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 tmp, args, proxy;
+
+ if ( typeof context === "string" ) {
+ tmp = fn[ context ];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if ( !jQuery.isFunction( fn ) ) {
+ return undefined;
+ }
+
+ // Simulated bind
+ args = 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: Date.now,
+
+ // 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 ( indexOf.call( qualifier, elem ) >= 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,
+ len = this.length,
+ ret = [],
+ self = this;
+
+ 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,
+
+ // 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[0] === "<" && selector[ 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;
+
+ // Option to run 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] );
+
+ // Support: Blackberry 4.6
+ // gEBID returns nodes no longer in the document (#6963)
+ if ( elem && elem.parentNode ) {
+ // Inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return ( context || rootjQuery ).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor( context ).find( selector );
+ }
+
+ // HANDLE: $(DOMElement)
+ } else if ( selector.nodeType ) {
+ this.context = this[0] = selector;
+ this.length = 1;
+ return this;
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) ) {
+ return 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 = [],
+ truncate = until !== undefined;
+
+ while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {
+ if ( elem.nodeType === 1 ) {
+ if ( truncate && jQuery( elem ).is( until ) ) {
+ break;
+ }
+ matched.push( elem );
+ }
+ }
+ return matched;
+ },
+
+ sibling: function( n, elem ) {
+ var matched = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ matched.push( n );
+ }
+ }
+
+ return matched;
+ }
+});
+
+jQuery.fn.extend({
+ has: function( target ) {
+ var targets = jQuery( target, this ),
+ l = targets.length;
+
+ return this.filter(function() {
+ var i = 0;
+ for ( ; i < l; 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 set
+ 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 indexOf.call( jQuery( elem ), this[ 0 ] );
+ }
+
+ // Locate the position of the desired element
+ return indexOf.call( this,
+
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[ 0 ] : elem
+ );
+ },
+
+ 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 ) {
+ while ( (cur = cur[dir]) && 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 elem.contentDocument || jQuery.merge( [], elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var matched = jQuery.map( this, fn, until );
+
+ if ( name.slice( -5 ) !== "Until" ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ matched = jQuery.filter( selector, matched );
+ }
+
+ if ( this.length > 1 ) {
+ // Remove duplicates
+ if ( !guaranteedUnique[ name ] ) {
+ jQuery.unique( matched );
+ }
+
+ // Reverse order for parents* and prev-derivatives
+ if ( rparentsprev.test( name ) ) {
+ matched.reverse();
+ }
+ }
+
+ return this.pushStack( matched );
+ };
+});
+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 // Last fire value (for non-forgettable lists)
+ memory,
+ // Flag to know if list was already fired
+ fired,
+ // Flag to know if list is currently firing
+ firing,
+ // First callback to fire (used internally by add and fireWith)
+ firingStart,
+ // End of the loop when firing
+ firingLength,
+ // Index of currently firing callback (modified by remove if needed)
+ firingIndex,
+ // Actual callback list
+ list = [],
+ // Stack of fire calls for repeatable lists
+ stack = !options.once && [],
+ // Fire callbacks
+ fire = function( data ) {
+ memory = options.memory && data;
+ fired = true;
+ firingIndex = firingStart || 0;
+ firingStart = 0;
+ firingLength = list.length;
+ firing = true;
+ for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+ if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+ memory = false; // To prevent further calls using add
+ break;
+ }
+ }
+ firing = false;
+ if ( list ) {
+ if ( stack ) {
+ if ( stack.length ) {
+ fire( stack.shift() );
+ }
+ } else if ( memory ) {
+ list = [];
+ } else {
+ self.disable();
+ }
+ }
+ },
+ // Actual Callbacks object
+ self = {
+ // Add a callback or a collection of callbacks to the list
+ add: function() {
+ if ( list ) {
+ // First, we save the current length
+ var start = list.length;
+ (function add( args ) {
+ jQuery.each( args, function( _, arg ) {
+ var type = jQuery.type( arg );
+ if ( type === "function" ) {
+ if ( !options.unique || !self.has( arg ) ) {
+ list.push( arg );
+ }
+ } else if ( arg && arg.length && type !== "string" ) {
+ // Inspect recursively
+ add( arg );
+ }
+ });
+ })( arguments );
+ // Do we need to add the callbacks to the
+ // current firing batch?
+ if ( firing ) {
+ firingLength = list.length;
+ // With memory, if we're not firing then
+ // we should call right away
+ } else if ( memory ) {
+ firingStart = start;
+ fire( memory );
+ }
+ }
+ return this;
+ },
+ // Remove a callback from the list
+ remove: function() {
+ if ( list ) {
+ jQuery.each( arguments, function( _, arg ) {
+ var index;
+ while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+ list.splice( index, 1 );
+ // Handle firing indexes
+ if ( firing ) {
+ if ( index <= firingLength ) {
+ firingLength--;
+ }
+ if ( index <= firingIndex ) {
+ firingIndex--;
+ }
+ }
+ }
+ });
+ }
+ return this;
+ },
+ // Check if a given callback is in the list.
+ // If no argument is given, return whether or not list has callbacks attached.
+ has: function( fn ) {
+ return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
+ },
+ // Remove all callbacks from the list
+ empty: function() {
+ list = [];
+ firingLength = 0;
+ return this;
+ },
+ // Have the list do nothing anymore
+ disable: function() {
+ list = stack = memory = undefined;
+ return this;
+ },
+ // Is it disabled?
+ disabled: function() {
+ return !list;
+ },
+ // Lock the list in its current state
+ lock: function() {
+ stack = undefined;
+ if ( !memory ) {
+ self.disable();
+ }
+ return this;
+ },
+ // Is it locked?
+ locked: function() {
+ return !stack;
+ },
+ // Call all callbacks with the given context and arguments
+ fireWith: function( context, args ) {
+ if ( list && ( !fired || stack ) ) {
+ args = args || [];
+ args = [ context, args.slice ? args.slice() : args ];
+ if ( firing ) {
+ stack.push( args );
+ } else {
+ fire( args );
+ }
+ }
+ return this;
+ },
+ // Call all the callbacks with the given arguments
+ fire: function() {
+ self.fireWith( this, arguments );
+ return this;
+ },
+ // To know if the callbacks have already been called at least once
+ fired: function() {
+ return !!fired;
+ }
+ };
+
+ return self;
+};
+
+
+jQuery.extend({
+
+ Deferred: function( func ) {
+ var tuples = [
+ // action, add listener, listener list, final state
+ [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+ [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+ [ "notify", "progress", jQuery.Callbacks("memory") ]
+ ],
+ state = "pending",
+ promise = {
+ state: function() {
+ return state;
+ },
+ always: function() {
+ deferred.done( arguments ).fail( arguments );
+ return this;
+ },
+ then: function( /* fnDone, fnFail, fnProgress */ ) {
+ var fns = arguments;
+ return jQuery.Deferred(function( newDefer ) {
+ jQuery.each( tuples, function( i, tuple ) {
+ var 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;
+ }
+
+ // 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" );
+ }
+ }
+});
+
+/**
+ * The ready event handler and self cleanup method
+ */
+function completed() {
+ document.removeEventListener( "DOMContentLoaded", completed, false );
+ window.removeEventListener( "load", completed, false );
+ 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 );
+
+ } else {
+
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", completed, false );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", completed, false );
+ }
+ }
+ return readyList.promise( obj );
+};
+
+// Kick off the DOM ready check even if the user does not
+jQuery.ready.promise();
+
+
+
+
+// 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,
+ len = 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 < len; i++ ) {
+ fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+ }
+ }
+ }
+
+ return chainable ?
+ elems :
+
+ // Gets
+ bulk ?
+ fn.call( elems ) :
+ len ? fn( elems[0], key ) : emptyGet;
+};
+
+
+/**
+ * Determines whether an object can have data
+ */
+jQuery.acceptData = function( owner ) {
+ // Accepts only:
+ // - Node
+ // - Node.ELEMENT_NODE
+ // - Node.DOCUMENT_NODE
+ // - Object
+ // - Any
+ /* jshint -W018 */
+ return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+function Data() {
+ // Support: Android<4,
+ // Old WebKit does not have Object.preventExtensions/freeze method,
+ // return new empty object instead with no [[set]] accessor
+ Object.defineProperty( this.cache = {}, 0, {
+ get: function() {
+ return {};
+ }
+ });
+
+ this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+Data.accepts = jQuery.acceptData;
+
+Data.prototype = {
+ key: function( owner ) {
+ // We can accept data for non-element nodes in modern browsers,
+ // but we should not, see #8335.
+ // Always return the key for a frozen object.
+ if ( !Data.accepts( owner ) ) {
+ return 0;
+ }
+
+ var descriptor = {},
+ // Check if the owner object already has a cache key
+ unlock = owner[ this.expando ];
+
+ // If not, create one
+ if ( !unlock ) {
+ unlock = Data.uid++;
+
+ // Secure it in a non-enumerable, non-writable property
+ try {
+ descriptor[ this.expando ] = { value: unlock };
+ Object.defineProperties( owner, descriptor );
+
+ // Support: Android<4
+ // Fallback to a less secure definition
+ } catch ( e ) {
+ descriptor[ this.expando ] = unlock;
+ jQuery.extend( owner, descriptor );
+ }
+ }
+
+ // Ensure the cache object
+ if ( !this.cache[ unlock ] ) {
+ this.cache[ unlock ] = {};
+ }
+
+ return unlock;
+ },
+ set: function( owner, data, value ) {
+ var prop,
+ // There may be an unlock assigned to this node,
+ // if there is no entry for this "owner", create one inline
+ // and set the unlock as though an owner entry had always existed
+ unlock = this.key( owner ),
+ cache = this.cache[ unlock ];
+
+ // Handle: [ owner, key, value ] args
+ if ( typeof data === "string" ) {
+ cache[ data ] = value;
+
+ // Handle: [ owner, { properties } ] args
+ } else {
+ // Fresh assignments by object are shallow copied
+ if ( jQuery.isEmptyObject( cache ) ) {
+ jQuery.extend( this.cache[ unlock ], data );
+ // Otherwise, copy the properties one-by-one to the cache object
+ } else {
+ for ( prop in data ) {
+ cache[ prop ] = data[ prop ];
+ }
+ }
+ }
+ return cache;
+ },
+ get: function( owner, key ) {
+ // Either a valid cache is found, or will be created.
+ // New caches will be created and the unlock returned,
+ // allowing direct access to the newly created
+ // empty data object. A valid owner object must be provided.
+ var cache = this.cache[ this.key( owner ) ];
+
+ return key === undefined ?
+ cache : cache[ key ];
+ },
+ access: function( owner, key, value ) {
+ var stored;
+ // In cases where either:
+ //
+ // 1. No key was specified
+ // 2. A string key was specified, but no value provided
+ //
+ // Take the "read" path and allow the get method to determine
+ // which value to return, respectively either:
+ //
+ // 1. The entire cache object
+ // 2. The data stored at the key
+ //
+ if ( key === undefined ||
+ ((key && typeof key === "string") && value === undefined) ) {
+
+ stored = this.get( owner, key );
+
+ return stored !== undefined ?
+ stored : this.get( owner, jQuery.camelCase(key) );
+ }
+
+ // [*]When the key is not a string, or both a key and value
+ // are specified, set or extend (existing objects) with either:
+ //
+ // 1. An object of properties
+ // 2. A key and value
+ //
+ this.set( owner, key, value );
+
+ // Since the "set" path can have two possible entry points
+ // return the expected data based on which path was taken[*]
+ return value !== undefined ? value : key;
+ },
+ remove: function( owner, key ) {
+ var i, name, camel,
+ unlock = this.key( owner ),
+ cache = this.cache[ unlock ];
+
+ if ( key === undefined ) {
+ this.cache[ unlock ] = {};
+
+ } else {
+ // Support array or space separated string of keys
+ if ( jQuery.isArray( key ) ) {
+ // 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 = key.concat( key.map( jQuery.camelCase ) );
+ } else {
+ camel = jQuery.camelCase( key );
+ // Try the string as a key before any manipulation
+ if ( key in cache ) {
+ name = [ key, camel ];
+ } else {
+ // If a key with the spaces exists, use it.
+ // Otherwise, create an array by matching non-whitespace
+ name = camel;
+ name = name in cache ?
+ [ name ] : ( name.match( rnotwhite ) || [] );
+ }
+ }
+
+ i = name.length;
+ while ( i-- ) {
+ delete cache[ name[ i ] ];
+ }
+ }
+ },
+ hasData: function( owner ) {
+ return !jQuery.isEmptyObject(
+ this.cache[ owner[ this.expando ] ] || {}
+ );
+ },
+ discard: function( owner ) {
+ if ( owner[ this.expando ] ) {
+ delete this.cache[ owner[ this.expando ] ];
+ }
+ }
+};
+var data_priv = new Data();
+
+var data_user = new Data();
+
+
+
+// Implementation Summary
+//
+// 1. Enforce API surface and semantic compatibility with 1.9.x branch
+// 2. Improve the module's maintainability by reducing the storage
+// paths to a single mechanism.
+// 3. Use the same single mechanism to support "private" and "user" data.
+// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+// 5. Avoid exposing implementation details on user objects (eg. expando properties)
+// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+ rmultiDash = /([A-Z])/g;
+
+function dataAttr( elem, key, data ) {
+ var name;
+
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && elem.nodeType === 1 ) {
+ 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
+ data_user.set( elem, key, data );
+ } else {
+ data = undefined;
+ }
+ }
+ return data;
+}
+
+jQuery.extend({
+ hasData: function( elem ) {
+ return data_user.hasData( elem ) || data_priv.hasData( elem );
+ },
+
+ data: function( elem, name, data ) {
+ return data_user.access( elem, name, data );
+ },
+
+ removeData: function( elem, name ) {
+ data_user.remove( elem, name );
+ },
+
+ // TODO: Now that all calls to _data and _removeData have been replaced
+ // with direct calls to data_priv methods, these can be deprecated.
+ _data: function( elem, name, data ) {
+ return data_priv.access( elem, name, data );
+ },
+
+ _removeData: function( elem, name ) {
+ data_priv.remove( elem, name );
+ }
+});
+
+jQuery.fn.extend({
+ data: function( key, value ) {
+ var i, name, data,
+ elem = this[ 0 ],
+ attrs = elem && elem.attributes;
+
+ // Gets all values
+ if ( key === undefined ) {
+ if ( this.length ) {
+ data = data_user.get( elem );
+
+ if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) {
+ 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 ] );
+ }
+ }
+ }
+ data_priv.set( elem, "hasDataAttrs", true );
+ }
+ }
+
+ return data;
+ }
+
+ // Sets multiple values
+ if ( typeof key === "object" ) {
+ return this.each(function() {
+ data_user.set( this, key );
+ });
+ }
+
+ return access( this, function( value ) {
+ var data,
+ camelKey = jQuery.camelCase( key );
+
+ // The calling jQuery object (element matches) is not empty
+ // (and therefore has an element appears at this[ 0 ]) and the
+ // `value` parameter was not undefined. An empty jQuery object
+ // will result in `undefined` for elem = this[ 0 ] which will
+ // throw an exception if an attempt to read a data cache is made.
+ if ( elem && value === undefined ) {
+ // Attempt to get data from the cache
+ // with the key as-is
+ data = data_user.get( elem, key );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // Attempt to get data from the cache
+ // with the key camelized
+ data = data_user.get( elem, camelKey );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // Attempt to "discover" the data in
+ // HTML5 custom data-* attrs
+ data = dataAttr( elem, camelKey, undefined );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // We tried really hard, but the data doesn't exist.
+ return;
+ }
+
+ // Set the data...
+ this.each(function() {
+ // First, attempt to store a copy or reference of any
+ // data that might've been store with a camelCased key.
+ var data = data_user.get( this, camelKey );
+
+ // For HTML5 data-* attribute interop, we have to
+ // store property names with dashes in a camelCase form.
+ // This might not apply to all properties...*
+ data_user.set( this, camelKey, value );
+
+ // *... In the case of properties that might _actually_
+ // have dashes, we need to also store a copy of that
+ // unchanged property.
+ if ( key.indexOf("-") !== -1 && data !== undefined ) {
+ data_user.set( this, key, value );
+ }
+ });
+ }, null, value, arguments.length > 1, null, true );
+ },
+
+ removeData: function( key ) {
+ return this.each(function() {
+ data_user.remove( this, key );
+ });
+ }
+});
+
+
+jQuery.extend({
+ queue: function( elem, type, data ) {
+ var queue;
+
+ if ( elem ) {
+ type = ( type || "fx" ) + "queue";
+ queue = data_priv.get( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !queue || jQuery.isArray( data ) ) {
+ queue = data_priv.access( 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 public - generate a queueHooks object, or return the current one
+ _queueHooks: function( elem, type ) {
+ var key = type + "queueHooks";
+ return data_priv.get( elem, key ) || data_priv.access( elem, key, {
+ empty: jQuery.Callbacks("once memory").add(function() {
+ data_priv.remove( elem, [ type + "queue", 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 = data_priv.get( 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 );
+ };
+
+var rcheckableType = (/^(?:checkbox|radio)$/i);
+
+
+
+(function() {
+ var fragment = document.createDocumentFragment(),
+ div = fragment.appendChild( document.createElement( "div" ) ),
+ input = document.createElement( "input" );
+
+ // Support: Safari<=5.1
+ // Check state lost if the name is set (#11217)
+ // Support: Windows Web Apps (WWA)
+ // `name` and `type` must use .setAttribute for WWA (#14901)
+ input.setAttribute( "type", "radio" );
+ input.setAttribute( "checked", "checked" );
+ input.setAttribute( "name", "t" );
+
+ div.appendChild( input );
+
+ // Support: Safari<=5.1, Android<4.2
+ // Older WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ // Support: IE<=11+
+ // Make sure textarea (and checkbox) defaultValue is properly cloned
+ div.innerHTML = "<textarea>x</textarea>";
+ support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+})();
+var strundefined = typeof undefined;
+
+
+
+support.focusinBubbles = "onfocusin" in window;
+
+
+var
+ 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 handleObjIn, eventHandle, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = data_priv.get( 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 && jQuery.event.triggered !== e.type ?
+ jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+ };
+ }
+
+ // 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 if the special events handler returns false
+ if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle, false );
+ }
+ }
+ }
+
+ 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;
+ }
+
+ },
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, selector, mappedTypes ) {
+
+ var j, origCount, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = data_priv.hasData( elem ) && data_priv.get( 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;
+ data_priv.remove( elem, "events" );
+ }
+ },
+
+ trigger: function( event, data, elem, onlyHandlers ) {
+
+ var i, cur, tmp, bubbleType, ontype, handle, special,
+ 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 = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( 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.
+ // Don't do default actions on window, that's where global variables be (#6170)
+ if ( ontype && jQuery.isFunction( 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;
+ elem[ type ]();
+ 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, j, ret, matched, handleObj,
+ handlerQueue = [],
+ args = slice.call( arguments ),
+ handlers = ( data_priv.get( 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 i, matches, sel, handleObj,
+ 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") ) {
+
+ for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+ // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+ if ( 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;
+ },
+
+ // 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 offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+ filter: function( event, original ) {
+ var eventDoc, doc, body,
+ button = original.button;
+
+ // 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 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;
+ }
+ },
+
+ 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: Cordova 2.5 (WebKit) (#13255)
+ // All events should have a target; Cordova deviceready doesn't
+ if ( !event.target ) {
+ event.target = document;
+ }
+
+ // Support: Safari 6.0+, Chrome<28
+ // Target should not be a text node (#504, #13143)
+ if ( event.target.nodeType === 3 ) {
+ event.target = event.target.parentNode;
+ }
+
+ return fixHook.filter ? fixHook.filter( event, originalEvent ) : 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 ) {
+ this.focus();
+ return false;
+ }
+ },
+ 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 ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
+ 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 = function( elem, type, handle ) {
+ if ( elem.removeEventListener ) {
+ elem.removeEventListener( type, handle, false );
+ }
+};
+
+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: 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-bindin…
+jQuery.Event.prototype = {
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse,
+
+ preventDefault: function() {
+ var e = this.originalEvent;
+
+ this.isDefaultPrevented = returnTrue;
+
+ if ( e && e.preventDefault ) {
+ e.preventDefault();
+ }
+ },
+ stopPropagation: function() {
+ var e = this.originalEvent;
+
+ this.isPropagationStopped = returnTrue;
+
+ if ( e && e.stopPropagation ) {
+ e.stopPropagation();
+ }
+ },
+ 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
+// Support: Chrome 15+
+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;
+ }
+ };
+});
+
+// Support: Firefox, Chrome, Safari
+// 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 = data_priv.access( doc, fix );
+
+ if ( !attaches ) {
+ doc.addEventListener( orig, handler, true );
+ }
+ data_priv.access( doc, fix, ( attaches || 0 ) + 1 );
+ },
+ teardown: function() {
+ var doc = this.ownerDocument || this,
+ attaches = data_priv.access( doc, fix ) - 1;
+
+ if ( !attaches ) {
+ doc.removeEventListener( orig, handler, true );
+ data_priv.remove( doc, fix );
+
+ } else {
+ data_priv.access( doc, fix, attaches );
+ }
+ }
+ };
+ });
+}
+
+jQuery.fn.extend({
+
+ on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+ var origFn, type;
+
+ // 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 );
+ }
+ }
+});
+
+
+var
+ rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+ rtagName = /<([\w:]+)/,
+ 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 = {
+
+ // Support: IE9
+ 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, "", "" ]
+ };
+
+// Support: IE9
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// Support: 1.x compatibility
+// 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 = (elem.getAttribute("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 i = 0,
+ l = elems.length;
+
+ for ( ; i < l; i++ ) {
+ data_priv.set(
+ elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" )
+ );
+ }
+}
+
+function cloneCopyEvent( src, dest ) {
+ var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+ if ( dest.nodeType !== 1 ) {
+ return;
+ }
+
+ // 1. Copy private data: events, handlers, etc.
+ if ( data_priv.hasData( src ) ) {
+ pdataOld = data_priv.access( src );
+ pdataCur = data_priv.set( dest, pdataOld );
+ events = pdataOld.events;
+
+ if ( events ) {
+ delete pdataCur.handle;
+ pdataCur.events = {};
+
+ for ( type in events ) {
+ for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+ jQuery.event.add( dest, type, events[ type ][ i ] );
+ }
+ }
+ }
+ }
+
+ // 2. Copy user data
+ if ( data_user.hasData( src ) ) {
+ udataOld = data_user.access( src );
+ udataCur = jQuery.extend( {}, udataOld );
+
+ data_user.set( dest, udataCur );
+ }
+}
+
+function getAll( context, tag ) {
+ var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) :
+ context.querySelectorAll ? context.querySelectorAll( tag || "*" ) :
+ [];
+
+ return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+ jQuery.merge( [ context ], ret ) :
+ ret;
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+ var nodeName = dest.nodeName.toLowerCase();
+
+ // Fails to persist the checked state of a cloned checkbox or radio button.
+ if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+ dest.checked = src.checked;
+
+ // Fails to return the selected option to the default selected state when cloning options
+ } else if ( nodeName === "input" || nodeName === "textarea" ) {
+ dest.defaultValue = src.defaultValue;
+ }
+}
+
+jQuery.extend({
+ clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+ var i, l, srcElements, destElements,
+ clone = elem.cloneNode( true ),
+ inPage = jQuery.contains( elem.ownerDocument, elem );
+
+ // Fix IE cloning issues
+ if ( !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 );
+
+ for ( i = 0, l = srcElements.length; i < l; i++ ) {
+ fixInput( srcElements[ i ], 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, l = srcElements.length; i < l; i++ ) {
+ cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+ }
+ } else {
+ cloneCopyEvent( elem, clone );
+ }
+ }
+
+ // Preserve script evaluation history
+ destElements = getAll( clone, "script" );
+ if ( destElements.length > 0 ) {
+ setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+ }
+
+ // Return the cloned set
+ return clone;
+ },
+
+ buildFragment: function( elems, context, scripts, selection ) {
+ var elem, tmp, tag, wrap, contains, j,
+ fragment = context.createDocumentFragment(),
+ nodes = [],
+ i = 0,
+ l = elems.length;
+
+ for ( ; i < l; i++ ) {
+ elem = elems[ i ];
+
+ if ( elem || elem === 0 ) {
+
+ // Add nodes directly
+ if ( jQuery.type( elem ) === "object" ) {
+ // Support: QtWebKit, PhantomJS
+ // push.apply(_, arraylike) throws on ancient WebKit
+ 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 || fragment.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;
+ }
+
+ // Support: QtWebKit, PhantomJS
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge( nodes, tmp.childNodes );
+
+ // Remember the top-level container
+ tmp = fragment.firstChild;
+
+ // Ensure the created nodes are orphaned (#12392)
+ tmp.textContent = "";
+ }
+ }
+ }
+
+ // Remove wrapper from fragment
+ fragment.textContent = "";
+
+ 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( fragment.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 );
+ }
+ }
+ }
+ }
+
+ return fragment;
+ },
+
+ cleanData: function( elems ) {
+ var data, elem, type, key,
+ special = jQuery.event.special,
+ i = 0;
+
+ for ( ; (elem = elems[ i ]) !== undefined; i++ ) {
+ if ( jQuery.acceptData( elem ) ) {
+ key = elem[ data_priv.expando ];
+
+ if ( key && (data = data_priv.cache[ key ]) ) {
+ 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 );
+ }
+ }
+ }
+ if ( data_priv.cache[ key ] ) {
+ // Discard any remaining `private` data
+ delete data_priv.cache[ key ];
+ }
+ }
+ }
+ // Discard any remaining `user` data
+ delete data_user.cache[ elem[ data_user.expando ] ];
+ }
+ }
+});
+
+jQuery.fn.extend({
+ text: function( value ) {
+ return access( this, function( value ) {
+ return value === undefined ?
+ jQuery.text( this ) :
+ this.empty().each(function() {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ this.textContent = 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++ ) {
+ if ( elem.nodeType === 1 ) {
+
+ // Prevent memory leaks
+ jQuery.cleanData( getAll( elem, false ) );
+
+ // Remove any remaining nodes
+ elem.textContent = "";
+ }
+ }
+
+ 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 && elem.nodeType === 1 ) {
+ return elem.innerHTML;
+ }
+
+ // See if we can take a shortcut and just use innerHTML
+ if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+ !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+ value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+ try {
+ for ( ; i < l; i++ ) {
+ elem = this[ i ] || {};
+
+ // Remove element nodes and prevent memory leaks
+ 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 fragment, first, scripts, hasScripts, node, doc,
+ 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 ) {
+ // Support: QtWebKit
+ // jQuery.merge because push.apply(_, arraylike) throws
+ 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 || "" ) &&
+ !data_priv.access( 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.textContent.replace( rcleanScript, "" ) );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return this;
+ }
+});
+
+jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+}, function( name, original ) {
+ jQuery.fn[ name ] = function( selector ) {
+ var elems,
+ ret = [],
+ insert = jQuery( selector ),
+ last = insert.length - 1,
+ i = 0;
+
+ for ( ; i <= last; i++ ) {
+ elems = i === last ? this : this.clone( true );
+ jQuery( insert[ i ] )[ original ]( elems );
+
+ // Support: QtWebKit
+ // .get() because push.apply(_, arraylike) throws
+ 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 optimization) 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 ].contentDocument;
+
+ // Support: IE
+ doc.write();
+ doc.close();
+
+ display = actualDisplay( nodeName, doc );
+ iframe.detach();
+ }
+
+ // Store the correct default display
+ elemdisplay[ nodeName ] = display;
+ }
+
+ return display;
+}
+var rmargin = (/^margin/);
+
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var 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 );
+ };
+
+
+
+function curCSS( elem, name, computed ) {
+ var width, minWidth, maxWidth, ret,
+ style = elem.style;
+
+ computed = computed || getStyles( elem );
+
+ // Support: IE9
+ // getPropertyValue is only needed for .css('filter') (#12537)
+ if ( computed ) {
+ ret = computed.getPropertyValue( name ) || computed[ name ];
+ }
+
+ if ( computed ) {
+
+ if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+ ret = jQuery.style( elem, name );
+ }
+
+ // Support: iOS < 6
+ // A tribute to the "awesome hack by Dean Edwards"
+ // iOS < 6 (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;
+ }
+ }
+
+ return ret !== undefined ?
+ // Support: IE
+ // IE returns zIndex value as an integer.
+ ret + "" :
+ ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+ // Define the hook, we'll check on the first run if it's really needed.
+ return {
+ get: function() {
+ if ( conditionFn() ) {
+ // Hook not needed (or it's not possible to use it due
+ // to missing dependency), remove it.
+ 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() {
+ var pixelPositionVal, boxSizingReliableVal,
+ docElem = document.documentElement,
+ container = document.createElement( "div" ),
+ div = document.createElement( "div" );
+
+ if ( !div.style ) {
+ return;
+ }
+
+ // Support: IE9-11+
+ // Style of cloned element affects source element cloned (#8908)
+ div.style.backgroundClip = "content-box";
+ div.cloneNode( true ).style.backgroundClip = "";
+ support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+ container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" +
+ "position:absolute";
+ container.appendChild( div );
+
+ // Executing both pixelPosition & boxSizingReliable tests require only one layout
+ // so they're executed at the same time to save the second computation.
+ function computePixelPositionAndBoxSizingReliable() {
+ 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";
+ div.innerHTML = "";
+ docElem.appendChild( container );
+
+ var divStyle = window.getComputedStyle( div, null );
+ pixelPositionVal = divStyle.top !== "1%";
+ boxSizingReliableVal = divStyle.width === "4px";
+
+ docElem.removeChild( container );
+ }
+
+ // Support: node.js jsdom
+ // Don't assume that getComputedStyle is a property of the global object
+ if ( window.getComputedStyle ) {
+ jQuery.extend( support, {
+ pixelPosition: function() {
+
+ // This test is executed only once but we still do memoizing
+ // since we can use the boxSizingReliable pre-computing.
+ // No need to check if the test was already performed, though.
+ computePixelPositionAndBoxSizingReliable();
+ return pixelPositionVal;
+ },
+ boxSizingReliable: function() {
+ if ( boxSizingReliableVal == null ) {
+ computePixelPositionAndBoxSizingReliable();
+ }
+ return boxSizingReliableVal;
+ },
+ reliableMarginRight: function() {
+
+ // Support: Android 2.3
+ // Check if 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
+ // This support function is only executed once so no memoizing is needed.
+ var ret,
+ marginDiv = div.appendChild( document.createElement( "div" ) );
+
+ // Reset CSS: box-sizing; display; margin; border; padding
+ marginDiv.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";
+ marginDiv.style.marginRight = marginDiv.style.width = "0";
+ div.style.width = "1px";
+ docElem.appendChild( container );
+
+ ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );
+
+ docElem.removeChild( container );
+ div.removeChild( marginDiv );
+
+ return ret;
+ }
+ });
+ }
+})();
+
+
+// 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
+ // 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[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 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 = 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;
+ }
+
+ // 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";
+}
+
+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 ] = data_priv.get( 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 ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) );
+ }
+ } else {
+ hidden = isHidden( elem );
+
+ if ( display !== "none" || !hidden ) {
+ data_priv.set( 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;
+}
+
+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: {
+ "float": "cssFloat"
+ },
+
+ // 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, then unprefixed version
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+ // Check if we're setting a value
+ if ( value !== undefined ) {
+ type = typeof value;
+
+ // Convert "+=" 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 (#7116)
+ if ( value == null || value !== value ) {
+ return;
+ }
+
+ // If a number, add 'px' to the (except for certain CSS properties)
+ if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+ value += "px";
+ }
+
+ // Support: IE9-11+
+ // background-* props affect original clone's values
+ 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 ) {
+ style[ name ] = value;
+ }
+
+ } 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 val, num, 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 ) );
+
+ // Try prefixed name followed by the unprefixed name
+ 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 ];
+ }
+
+ // Make numeric 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
+ // but it must have a current display style that would benefit
+ 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,
+ jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+ styles
+ ) : 0
+ );
+ }
+ };
+});
+
+// Support: Android 2.3
+jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
+ function( elem, computed ) {
+ if ( computed ) {
+ 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.
+ // 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 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: IE9
+// 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 string for doubling 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(),
+ // break 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,
+ i = 0,
+ attrs = { height: type };
+
+ // If we include width, step value is 1 to do all cssExpand values,
+ // otherwise 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 = data_priv.get( 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() {
+ // Ensure the complete handler is 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 IE9-10 do 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" ?
+ data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
+
+ if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
+ style.display = "inline-block";
+ }
+ }
+
+ if ( opts.overflow ) {
+ style.overflow = "hidden";
+ 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 = data_priv.access( 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;
+
+ data_priv.remove( 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 won't overwrite existing keys.
+ // Reusing 'index' 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 ),
+ // Support: Android 2.3
+ // 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 || data_priv.get( 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 = data_priv.get( 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 = data_priv.get( 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,
+ i = 0,
+ timers = jQuery.timers;
+
+ 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() {
+ var input = document.createElement( "input" ),
+ select = document.createElement( "select" ),
+ opt = select.appendChild( document.createElement( "option" ) );
+
+ input.type = "checkbox";
+
+ // Support: iOS<=5.1, Android<=4.2+
+ // Default value for a checkbox should be "on"
+ support.checkOn = input.value !== "";
+
+ // Support: IE<=11+
+ // Must access selectedIndex to make default options select
+ support.optSelected = opt.selected;
+
+ // Support: Android<=2.3
+ // Options inside disabled selects are incorrectly marked as disabled
+ select.disabled = true;
+ support.optDisabled = !opt.disabled;
+
+ // Support: IE<=11+
+ // An input loses its value after becoming a radio
+ input = document.createElement( "input" );
+ input.value = "t";
+ input.type = "radio";
+ support.radioValue = input.value === "t";
+})();
+
+
+var nodeHook, boolHook,
+ attrHandle = jQuery.expr.attrHandle;
+
+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
+ elem[ propName ] = false;
+ }
+
+ elem.removeAttribute( name );
+ }
+ }
+ },
+
+ attrHooks: {
+ type: {
+ set: function( elem, value ) {
+ if ( !support.radioValue && value === "radio" &&
+ jQuery.nodeName( elem, "input" ) ) {
+ var val = elem.value;
+ elem.setAttribute( "type", value );
+ if ( val ) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ }
+ }
+});
+
+// Hooks for boolean attributes
+boolHook = {
+ set: function( elem, value, name ) {
+ if ( value === false ) {
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr( elem, name );
+ } else {
+ elem.setAttribute( name, name );
+ }
+ return name;
+ }
+};
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+ var getter = attrHandle[ name ] || jQuery.find.attr;
+
+ attrHandle[ 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;
+ };
+});
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i;
+
+jQuery.fn.extend({
+ prop: function( name, value ) {
+ return access( this, jQuery.prop, name, value, arguments.length > 1 );
+ },
+
+ removeProp: function( name ) {
+ return this.each(function() {
+ delete this[ jQuery.propFix[ name ] || name ];
+ });
+ }
+});
+
+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 ) {
+ return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ?
+ elem.tabIndex :
+ -1;
+ }
+ }
+ }
+});
+
+if ( !support.optSelected ) {
+ jQuery.propHooks.selected = {
+ get: function( elem ) {
+ var parent = elem.parentNode;
+ if ( parent && 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;
+});
+
+
+
+
+var rclass = /[\t\r\n\f]/g;
+
+jQuery.fn.extend({
+ addClass: function( value ) {
+ var classes, elem, cur, clazz, j, finalValue,
+ proceed = typeof value === "string" && value,
+ i = 0,
+ len = this.length;
+
+ 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,
+ proceed = arguments.length === 0 || typeof value === "string" && value,
+ i = 0,
+ len = this.length;
+
+ 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
+ data_priv.set( 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 ? "" : data_priv.get( 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;
+ }
+});
+
+
+
+
+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 ];
+
+ // IE6-9 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 ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {
+ optionSet = true;
+ }
+ }
+
+ // Force browsers to behave consistently when non-matching value is set
+ if ( !optionSet ) {
+ elem.selectedIndex = -1;
+ }
+ return values;
+ }
+ }
+ }
+});
+
+// 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 ) {
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ };
+ }
+});
+
+
+
+
+// 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 = (/\?/);
+
+
+
+// Support: Android 2.3
+// Workaround failure to string-cast null input
+jQuery.parseJSON = function( data ) {
+ return JSON.parse( data + "" );
+};
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+ var xml, tmp;
+ if ( !data || typeof data !== "string" ) {
+ return null;
+ }
+
+ // Support: IE9
+ try {
+ tmp = new DOMParser();
+ xml = tmp.parseFromString( data, "text/xml" );
+ } catch ( e ) {
+ xml = undefined;
+ }
+
+ if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+ jQuery.error( "Invalid XML: " + data );
+ }
+ return xml;
+};
+
+
+var
+ rhash = /#.*$/,
+ rts = /([?&])_=[^&]*/,
+ rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+ // #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( "*" ),
+
+ // Document location
+ ajaxLocation = window.location.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[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 key, deep,
+ 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 ct, type, finalDataType, firstDataType,
+ 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 transport,
+ // URL without anti-cache param
+ cacheURL,
+ // Response headers
+ responseHeadersString,
+ responseHeaders,
+ // timeout handle
+ timeoutTimer,
+ // Cross-domain detection vars
+ parts,
+ // To know if global events are to be dispatched
+ fireGlobals,
+ // Loop variable
+ i,
+ // 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 (prefilters might expect it)
+ // 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 {
+ // Extract error from statusText and normalize 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 ) {
+ var wrap;
+
+ 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
+ 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.firstElementChild ) {
+ elem = elem.firstElementChild;
+ }
+
+ 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;
+};
+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();
+ }
+});
+
+
+jQuery.ajaxSettings.xhr = function() {
+ try {
+ return new XMLHttpRequest();
+ } catch( e ) {}
+};
+
+var xhrId = 0,
+ xhrCallbacks = {},
+ xhrSuccessStatus = {
+ // file protocol always yields status code 0, assume 200
+ 0: 200,
+ // Support: IE9
+ // #1450: sometimes IE returns 1223 when it should be 204
+ 1223: 204
+ },
+ xhrSupported = jQuery.ajaxSettings.xhr();
+
+// Support: IE9
+// 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 ]();
+ }
+ });
+}
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport(function( options ) {
+ var callback;
+
+ // Cross domain only allowed if supported through XMLHttpRequest
+ if ( support.cors || xhrSupported && !options.crossDomain ) {
+ return {
+ send: function( headers, complete ) {
+ var i,
+ xhr = options.xhr(),
+ id = ++xhrId;
+
+ 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 ) {
+ xhr.setRequestHeader( i, headers[ i ] );
+ }
+
+ // Callback
+ callback = function( type ) {
+ return function() {
+ if ( callback ) {
+ delete xhrCallbacks[ id ];
+ callback = xhr.onload = xhr.onerror = null;
+
+ if ( type === "abort" ) {
+ xhr.abort();
+ } else if ( type === "error" ) {
+ complete(
+ // file: protocol always yields status 0; see #8605, #14207
+ xhr.status,
+ xhr.statusText
+ );
+ } else {
+ complete(
+ xhrSuccessStatus[ xhr.status ] || xhr.status,
+ xhr.statusText,
+ // Support: IE9
+ // Accessing binary-data responseText throws an exception
+ // (#11426)
+ typeof xhr.responseText === "string" ? {
+ text: xhr.responseText
+ } : undefined,
+ xhr.getAllResponseHeaders()
+ );
+ }
+ }
+ };
+ };
+
+ // Listen to events
+ xhr.onload = callback();
+ xhr.onerror = callback("error");
+
+ // Create the abort callback
+ callback = xhrCallbacks[ id ] = callback("abort");
+
+ try {
+ // Do send the request (this may raise an exception)
+ xhr.send( options.hasContent && options.data || null );
+ } catch ( e ) {
+ // #14683: Only rethrow if this hasn't been notified as an error yet
+ if ( callback ) {
+ throw e;
+ }
+ }
+ },
+
+ abort: function() {
+ if ( callback ) {
+ callback();
+ }
+ }
+ };
+ }
+});
+
+
+
+
+// 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 crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+ if ( s.cache === undefined ) {
+ s.cache = false;
+ }
+ if ( s.crossDomain ) {
+ s.type = "GET";
+ }
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+ // This transport only deals with cross domain requests
+ if ( s.crossDomain ) {
+ var script, callback;
+ return {
+ send: function( _, complete ) {
+ script = jQuery("<script>").prop({
+ async: true,
+ charset: s.scriptCharset,
+ src: s.url
+ }).on(
+ "load error",
+ callback = function( evt ) {
+ script.remove();
+ callback = null;
+ if ( evt ) {
+ complete( evt.type === "error" ? 404 : 200, evt.type );
+ }
+ }
+ );
+ document.head.appendChild( script[ 0 ] );
+ },
+ abort: function() {
+ if ( callback ) {
+ callback();
+ }
+ }
+ };
+ }
+});
+
+
+
+
+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, type, response,
+ self = this,
+ off = url.indexOf(" ");
+
+ if ( off >= 0 ) {
+ selector = jQuery.trim( url.slice( off ) );
+ 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;
+}
+
+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" ) &&
+ ( curCSSTop + curCSSLeft ).indexOf("auto") > -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,
+ elem = this[ 0 ],
+ box = { top: 0, left: 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;
+ }
+
+ // Support: BlackBerry 5, iOS 3 (original iPhone)
+ // If we don't have gBCR, just use 0,0 rather than error
+ if ( typeof elem.getBoundingClientRect !== strundefined ) {
+ box = elem.getBoundingClientRect();
+ }
+ win = getWindow( doc );
+ return {
+ top: box.top + win.pageYOffset - docElem.clientTop,
+ left: box.left + win.pageXOffset - docElem.clientLeft
+ };
+ },
+
+ position: function() {
+ if ( !this[ 0 ] ) {
+ return;
+ }
+
+ var offsetParent, offset,
+ elem = this[ 0 ],
+ parentOffset = { top: 0, left: 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" ) {
+ // Assume getBoundingClientRect is there 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
+ 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 = "pageYOffset" === prop;
+
+ jQuery.fn[ method ] = function( val ) {
+ return access( this, function( elem, method, val ) {
+ var win = getWindow( elem );
+
+ if ( val === undefined ) {
+ return win ? win[ prop ] : elem[ method ];
+ }
+
+ if ( win ) {
+ win.scrollTo(
+ !top ? val : window.pageXOffset,
+ top ? val : window.pageYOffset
+ );
+
+ } else {
+ elem[ method ] = val;
+ }
+ }, method, val, arguments.length, null );
+ };
+});
+
+// Support: Safari<7+, Chrome<37+
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, 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
+ 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-…
+
+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/ui/new-ui-samples/js/vendor/modernizr.js b/ui/new-ui-samples/js/vendor/modernizr.js
new file mode 100644
index 0000000..3365339
--- /dev/null
+++ b/ui/new-ui-samples/js/vendor/modernizr.js
@@ -0,0 +1,1406 @@
+/*!
+ * Modernizr v2.8.3
+ * www.modernizr.com
+ *
+ * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton
+ * Available under the BSD and MIT licenses: www.modernizr.com/license/
+ */
+
+/*
+ * Modernizr tests which native CSS3 and HTML5 features are available in
+ * the current UA and makes the results available to you in two ways:
+ * as properties on a global Modernizr object, and as classes on the
+ * <html> element. This information allows you to progressively enhance
+ * your pages with a granular level of control over the experience.
+ *
+ * Modernizr has an optional (not included) conditional resource loader
+ * called Modernizr.load(), based on Yepnope.js (yepnopejs.com)
+ * To get a build that includes Modernizr.load(), as well as choosing
+ * which tests to include, go to www.modernizr.com/download/
+ *
+ * Authors Faruk Ates, Paul Irish, Alex Sexton
+ * Contributors Ryan Seddon, Ben Alman
+ */
+
+window.Modernizr = (function( window, document, undefined ) {
+
+ var version = '2.8.3',
+
+ Modernizr = {},
+
+ /*>>cssclasses*/
+ // option for enabling the HTML classes to be added
+ enableClasses = true,
+ /*>>cssclasses*/
+
+ docElement = document.documentElement,
+
+ /**
+ * Create our "modernizr" element that we do most feature tests on.
+ */
+ mod = 'modernizr',
+ modElem = document.createElement(mod),
+ mStyle = modElem.style,
+
+ /**
+ * Create the input element for various Web Forms feature tests.
+ */
+ inputElem /*>>inputelem*/ = document.createElement('input') /*>>inputelem*/ ,
+
+ /*>>smile*/
+ smile = ':)',
+ /*>>smile*/
+
+ toString = {}.toString,
+
+ // TODO :: make the prefixes more granular
+ /*>>prefixes*/
+ // List of property values to set for css tests. See ticket #21
+ prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),
+ /*>>prefixes*/
+
+ /*>>domprefixes*/
+ // Following spec is to expose vendor-specific style properties as:
+ // elem.style.WebkitBorderRadius
+ // and the following would be incorrect:
+ // elem.style.webkitBorderRadius
+
+ // Webkit ghosts their properties in lowercase but Opera & Moz do not.
+ // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+
+ // erik.eae.net/archives/2008/03/10/21.48.10/
+
+ // More here: github.com/Modernizr/Modernizr/issues/issue/21
+ omPrefixes = 'Webkit Moz O ms',
+
+ cssomPrefixes = omPrefixes.split(' '),
+
+ domPrefixes = omPrefixes.toLowerCase().split(' '),
+ /*>>domprefixes*/
+
+ /*>>ns*/
+ ns = {'svg': 'http://www.w3.org/2000/svg'},
+ /*>>ns*/
+
+ tests = {},
+ inputs = {},
+ attrs = {},
+
+ classes = [],
+
+ slice = classes.slice,
+
+ featureName, // used in testing loop
+
+
+ /*>>teststyles*/
+ // Inject element with style element and some CSS rules
+ injectElementWithStyles = function( rule, callback, nodes, testnames ) {
+
+ var style, ret, node, docOverflow,
+ div = document.createElement('div'),
+ // After page load injecting a fake body doesn't work so check if body exists
+ body = document.body,
+ // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it.
+ fakeBody = body || document.createElement('body');
+
+ if ( parseInt(nodes, 10) ) {
+ // In order not to give false positives we create a node for each test
+ // This also allows the method to scale for unspecified uses
+ while ( nodes-- ) {
+ node = document.createElement('div');
+ node.id = testnames ? testnames[nodes] : mod + (nodes + 1);
+ div.appendChild(node);
+ }
+ }
+
+ // <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed
+ // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element
+ // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements.
+ // msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx
+ // Documents served as xml will throw if using ­ so use xml friendly encoded version. See issue #277
+ style = ['­','<style id="s', mod, '">', rule, '</style>'].join('');
+ div.id = mod;
+ // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.
+ // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270
+ (body ? div : fakeBody).innerHTML += style;
+ fakeBody.appendChild(div);
+ if ( !body ) {
+ //avoid crashing IE8, if background image is used
+ fakeBody.style.background = '';
+ //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible
+ fakeBody.style.overflow = 'hidden';
+ docOverflow = docElement.style.overflow;
+ docElement.style.overflow = 'hidden';
+ docElement.appendChild(fakeBody);
+ }
+
+ ret = callback(div, rule);
+ // If this is done after page load we don't want to remove the body so check if body exists
+ if ( !body ) {
+ fakeBody.parentNode.removeChild(fakeBody);
+ docElement.style.overflow = docOverflow;
+ } else {
+ div.parentNode.removeChild(div);
+ }
+
+ return !!ret;
+
+ },
+ /*>>teststyles*/
+
+ /*>>mq*/
+ // adapted from matchMedia polyfill
+ // by Scott Jehl and Paul Irish
+ // gist.github.com/786768
+ testMediaQuery = function( mq ) {
+
+ var matchMedia = window.matchMedia || window.msMatchMedia;
+ if ( matchMedia ) {
+ return matchMedia(mq) && matchMedia(mq).matches || false;
+ }
+
+ var bool;
+
+ injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) {
+ bool = (window.getComputedStyle ?
+ getComputedStyle(node, null) :
+ node.currentStyle)['position'] == 'absolute';
+ });
+
+ return bool;
+
+ },
+ /*>>mq*/
+
+
+ /*>>hasevent*/
+ //
+ // isEventSupported determines if a given element supports the given event
+ // kangax.github.com/iseventsupported/
+ //
+ // The following results are known incorrects:
+ // Modernizr.hasEvent("webkitTransitionEnd", elem) // false negative
+ // Modernizr.hasEvent("textInput") // in Webkit. github.com/Modernizr/Modernizr/issues/333
+ // ...
+ isEventSupported = (function() {
+
+ var TAGNAMES = {
+ 'select': 'input', 'change': 'input',
+ 'submit': 'form', 'reset': 'form',
+ 'error': 'img', 'load': 'img', 'abort': 'img'
+ };
+
+ function isEventSupported( eventName, element ) {
+
+ element = element || document.createElement(TAGNAMES[eventName] || 'div');
+ eventName = 'on' + eventName;
+
+ // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize", whereas `in` "catches" those
+ var isSupported = eventName in element;
+
+ if ( !isSupported ) {
+ // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element
+ if ( !element.setAttribute ) {
+ element = document.createElement('div');
+ }
+ if ( element.setAttribute && element.removeAttribute ) {
+ element.setAttribute(eventName, '');
+ isSupported = is(element[eventName], 'function');
+
+ // If property was created, "remove it" (by setting value to `undefined`)
+ if ( !is(element[eventName], 'undefined') ) {
+ element[eventName] = undefined;
+ }
+ element.removeAttribute(eventName);
+ }
+ }
+
+ element = null;
+ return isSupported;
+ }
+ return isEventSupported;
+ })(),
+ /*>>hasevent*/
+
+ // TODO :: Add flag for hasownprop ? didn't last time
+
+ // hasOwnProperty shim by kangax needed for Safari 2.0 support
+ _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;
+
+ if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {
+ hasOwnProp = function (object, property) {
+ return _hasOwnProperty.call(object, property);
+ };
+ }
+ else {
+ hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */
+ return ((property in object) && is(object.constructor.prototype[property], 'undefined'));
+ };
+ }
+
+ // Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js
+ // es5.github.com/#x15.3.4.5
+
+ if (!Function.prototype.bind) {
+ Function.prototype.bind = function bind(that) {
+
+ var target = this;
+
+ if (typeof target != "function") {
+ throw new TypeError();
+ }
+
+ var args = slice.call(arguments, 1),
+ bound = function () {
+
+ if (this instanceof bound) {
+
+ var F = function(){};
+ F.prototype = target.prototype;
+ var self = new F();
+
+ var result = target.apply(
+ self,
+ args.concat(slice.call(arguments))
+ );
+ if (Object(result) === result) {
+ return result;
+ }
+ return self;
+
+ } else {
+
+ return target.apply(
+ that,
+ args.concat(slice.call(arguments))
+ );
+
+ }
+
+ };
+
+ return bound;
+ };
+ }
+
+ /**
+ * setCss applies given styles to the Modernizr DOM node.
+ */
+ function setCss( str ) {
+ mStyle.cssText = str;
+ }
+
+ /**
+ * setCssAll extrapolates all vendor-specific css strings.
+ */
+ function setCssAll( str1, str2 ) {
+ return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));
+ }
+
+ /**
+ * is returns a boolean for if typeof obj is exactly type.
+ */
+ function is( obj, type ) {
+ return typeof obj === type;
+ }
+
+ /**
+ * contains returns a boolean for if substr is found within str.
+ */
+ function contains( str, substr ) {
+ return !!~('' + str).indexOf(substr);
+ }
+
+ /*>>testprop*/
+
+ // testProps is a generic CSS / DOM property test.
+
+ // In testing support for a given CSS property, it's legit to test:
+ // `elem.style[styleName] !== undefined`
+ // If the property is supported it will return an empty string,
+ // if unsupported it will return undefined.
+
+ // We'll take advantage of this quick test and skip setting a style
+ // on our modernizr element, but instead just testing undefined vs
+ // empty string.
+
+ // Because the testing of the CSS property names (with "-", as
+ // opposed to the camelCase DOM properties) is non-portable and
+ // non-standard but works in WebKit and IE (but not Gecko or Opera),
+ // we explicitly reject properties with dashes so that authors
+ // developing in WebKit or IE first don't end up with
+ // browser-specific content by accident.
+
+ function testProps( props, prefixed ) {
+ for ( var i in props ) {
+ var prop = props[i];
+ if ( !contains(prop, "-") && mStyle[prop] !== undefined ) {
+ return prefixed == 'pfx' ? prop : true;
+ }
+ }
+ return false;
+ }
+ /*>>testprop*/
+
+ // TODO :: add testDOMProps
+ /**
+ * testDOMProps is a generic DOM property test; if a browser supports
+ * a certain property, it won't return undefined for it.
+ */
+ function testDOMProps( props, obj, elem ) {
+ for ( var i in props ) {
+ var item = obj[props[i]];
+ if ( item !== undefined) {
+
+ // return the property name as a string
+ if (elem === false) return props[i];
+
+ // let's bind a function
+ if (is(item, 'function')){
+ // default to autobind unless override
+ return item.bind(elem || obj);
+ }
+
+ // return the unbound function or obj or value
+ return item;
+ }
+ }
+ return false;
+ }
+
+ /*>>testallprops*/
+ /**
+ * testPropsAll tests a list of DOM properties we want to check against.
+ * We specify literally ALL possible (known and/or likely) properties on
+ * the element including the non-vendor prefixed one, for forward-
+ * compatibility.
+ */
+ function testPropsAll( prop, prefixed, elem ) {
+
+ var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),
+ props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');
+
+ // did they call .prefixed('boxSizing') or are we just testing a prop?
+ if(is(prefixed, "string") || is(prefixed, "undefined")) {
+ return testProps(props, prefixed);
+
+ // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])
+ } else {
+ props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');
+ return testDOMProps(props, prefixed, elem);
+ }
+ }
+ /*>>testallprops*/
+
+
+ /**
+ * Tests
+ * -----
+ */
+
+ // The *new* flexbox
+ // dev.w3.org/csswg/css3-flexbox
+
+ tests['flexbox'] = function() {
+ return testPropsAll('flexWrap');
+ };
+
+ // The *old* flexbox
+ // www.w3.org/TR/2009/WD-css3-flexbox-20090723/
+
+ tests['flexboxlegacy'] = function() {
+ return testPropsAll('boxDirection');
+ };
+
+ // On the S60 and BB Storm, getContext exists, but always returns undefined
+ // so we actually have to call getContext() to verify
+ // github.com/Modernizr/Modernizr/issues/issue/97/
+
+ tests['canvas'] = function() {
+ var elem = document.createElement('canvas');
+ return !!(elem.getContext && elem.getContext('2d'));
+ };
+
+ tests['canvastext'] = function() {
+ return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));
+ };
+
+ // webk.it/70117 is tracking a legit WebGL feature detect proposal
+
+ // We do a soft detect which may false positive in order to avoid
+ // an expensive context creation: bugzil.la/732441
+
+ tests['webgl'] = function() {
+ return !!window.WebGLRenderingContext;
+ };
+
+ /*
+ * The Modernizr.touch test only indicates if the browser supports
+ * touch events, which does not necessarily reflect a touchscreen
+ * device, as evidenced by tablets running Windows 7 or, alas,
+ * the Palm Pre / WebOS (touch) phones.
+ *
+ * Additionally, Chrome (desktop) used to lie about its support on this,
+ * but that has since been rectified: crbug.com/36415
+ *
+ * We also test for Firefox 4 Multitouch Support.
+ *
+ * For more info, see: modernizr.github.com/Modernizr/touch.html
+ */
+
+ tests['touch'] = function() {
+ var bool;
+
+ if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
+ bool = true;
+ } else {
+ injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {
+ bool = node.offsetTop === 9;
+ });
+ }
+
+ return bool;
+ };
+
+
+ // geolocation is often considered a trivial feature detect...
+ // Turns out, it's quite tricky to get right:
+ //
+ // Using !!navigator.geolocation does two things we don't want. It:
+ // 1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513
+ // 2. Disables page caching in WebKit: webk.it/43956
+ //
+ // Meanwhile, in Firefox < 8, an about:config setting could expose
+ // a false positive that would throw an exception: bugzil.la/688158
+
+ tests['geolocation'] = function() {
+ return 'geolocation' in navigator;
+ };
+
+
+ tests['postmessage'] = function() {
+ return !!window.postMessage;
+ };
+
+
+ // Chrome incognito mode used to throw an exception when using openDatabase
+ // It doesn't anymore.
+ tests['websqldatabase'] = function() {
+ return !!window.openDatabase;
+ };
+
+ // Vendors had inconsistent prefixing with the experimental Indexed DB:
+ // - Webkit's implementation is accessible through webkitIndexedDB
+ // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB
+ // For speed, we don't test the legacy (and beta-only) indexedDB
+ tests['indexedDB'] = function() {
+ return !!testPropsAll("indexedDB", window);
+ };
+
+ // documentMode logic from YUI to filter out IE8 Compat Mode
+ // which false positives.
+ tests['hashchange'] = function() {
+ return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);
+ };
+
+ // Per 1.6:
+ // This used to be Modernizr.historymanagement but the longer
+ // name has been deprecated in favor of a shorter and property-matching one.
+ // The old API is still available in 1.6, but as of 2.0 will throw a warning,
+ // and in the first release thereafter disappear entirely.
+ tests['history'] = function() {
+ return !!(window.history && history.pushState);
+ };
+
+ tests['draganddrop'] = function() {
+ var div = document.createElement('div');
+ return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);
+ };
+
+ // FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10
+ // will be supported until FF19 (2/12/13), at which time, ESR becomes FF17.
+ // FF10 still uses prefixes, so check for it until then.
+ // for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/
+ tests['websockets'] = function() {
+ return 'WebSocket' in window || 'MozWebSocket' in window;
+ };
+
+
+ // css-tricks.com/rgba-browser-support/
+ tests['rgba'] = function() {
+ // Set an rgba() color and check the returned value
+
+ setCss('background-color:rgba(150,255,150,.5)');
+
+ return contains(mStyle.backgroundColor, 'rgba');
+ };
+
+ tests['hsla'] = function() {
+ // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,
+ // except IE9 who retains it as hsla
+
+ setCss('background-color:hsla(120,40%,100%,.5)');
+
+ return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');
+ };
+
+ tests['multiplebgs'] = function() {
+ // Setting multiple images AND a color on the background shorthand property
+ // and then querying the style.background property value for the number of
+ // occurrences of "url(" is a reliable method for detecting ACTUAL support for this!
+
+ setCss('background:url(https://),url(https://),red url(https://)');
+
+ // If the UA supports multiple backgrounds, there should be three occurrences
+ // of the string "url(" in the return value for elemStyle.background
+
+ return (/(url\s*\(.*?){3}/).test(mStyle.background);
+ };
+
+
+
+ // this will false positive in Opera Mini
+ // github.com/Modernizr/Modernizr/issues/396
+
+ tests['backgroundsize'] = function() {
+ return testPropsAll('backgroundSize');
+ };
+
+ tests['borderimage'] = function() {
+ return testPropsAll('borderImage');
+ };
+
+
+ // Super comprehensive table about all the unique implementations of
+ // border-radius: muddledramblings.com/table-of-css3-border-radius-compliance
+
+ tests['borderradius'] = function() {
+ return testPropsAll('borderRadius');
+ };
+
+ // WebOS unfortunately false positives on this test.
+ tests['boxshadow'] = function() {
+ return testPropsAll('boxShadow');
+ };
+
+ // FF3.0 will false positive on this test
+ tests['textshadow'] = function() {
+ return document.createElement('div').style.textShadow === '';
+ };
+
+
+ tests['opacity'] = function() {
+ // Browsers that actually have CSS Opacity implemented have done so
+ // according to spec, which means their return values are within the
+ // range of [0.0,1.0] - including the leading zero.
+
+ setCssAll('opacity:.55');
+
+ // The non-literal . in this regex is intentional:
+ // German Chrome returns this value as 0,55
+ // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632
+ return (/^0.55$/).test(mStyle.opacity);
+ };
+
+
+ // Note, Android < 4 will pass this test, but can only animate
+ // a single property at a time
+ // goo.gl/v3V4Gp
+ tests['cssanimations'] = function() {
+ return testPropsAll('animationName');
+ };
+
+
+ tests['csscolumns'] = function() {
+ return testPropsAll('columnCount');
+ };
+
+
+ tests['cssgradients'] = function() {
+ /**
+ * For CSS Gradients syntax, please see:
+ * webkit.org/blog/175/introducing-css-gradients/
+ * developer.mozilla.org/en/CSS/-moz-linear-gradient
+ * developer.mozilla.org/en/CSS/-moz-radial-gradient
+ * dev.w3.org/csswg/css3-images/#gradients-
+ */
+
+ var str1 = 'background-image:',
+ str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',
+ str3 = 'linear-gradient(left top,#9f9, white);';
+
+ setCss(
+ // legacy webkit syntax (FIXME: remove when syntax not in use anymore)
+ (str1 + '-webkit- '.split(' ').join(str2 + str1) +
+ // standard syntax // trailing 'background-image:'
+ prefixes.join(str3 + str1)).slice(0, -str1.length)
+ );
+
+ return contains(mStyle.backgroundImage, 'gradient');
+ };
+
+
+ tests['cssreflections'] = function() {
+ return testPropsAll('boxReflect');
+ };
+
+
+ tests['csstransforms'] = function() {
+ return !!testPropsAll('transform');
+ };
+
+
+ tests['csstransforms3d'] = function() {
+
+ var ret = !!testPropsAll('perspective');
+
+ // Webkit's 3D transforms are passed off to the browser's own graphics renderer.
+ // It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in
+ // some conditions. As a result, Webkit typically recognizes the syntax but
+ // will sometimes throw a false positive, thus we must do a more thorough check:
+ if ( ret && 'webkitPerspective' in docElement.style ) {
+
+ // Webkit allows this media query to succeed only if the feature is enabled.
+ // `@media (transform-3d),(-webkit-transform-3d){ ... }`
+ injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {
+ ret = node.offsetLeft === 9 && node.offsetHeight === 3;
+ });
+ }
+ return ret;
+ };
+
+
+ tests['csstransitions'] = function() {
+ return testPropsAll('transition');
+ };
+
+
+ /*>>fontface*/
+ // @font-face detection routine by Diego Perini
+ // javascript.nwbox.com/CSSSupport/
+
+ // false positives:
+ // WebOS github.com/Modernizr/Modernizr/issues/342
+ // WP7 github.com/Modernizr/Modernizr/issues/538
+ tests['fontface'] = function() {
+ var bool;
+
+ injectElementWithStyles('@font-face {font-family:"font";src:url("https://")}', function( node, rule ) {
+ var style = document.getElementById('smodernizr'),
+ sheet = style.sheet || style.styleSheet,
+ cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';
+
+ bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;
+ });
+
+ return bool;
+ };
+ /*>>fontface*/
+
+ // CSS generated content detection
+ tests['generatedcontent'] = function() {
+ var bool;
+
+ injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:"',smile,'";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {
+ bool = node.offsetHeight >= 3;
+ });
+
+ return bool;
+ };
+
+
+
+ // These tests evaluate support of the video/audio elements, as well as
+ // testing what types of content they support.
+ //
+ // We're using the Boolean constructor here, so that we can extend the value
+ // e.g. Modernizr.video // true
+ // Modernizr.video.ogg // 'probably'
+ //
+ // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845
+ // thx to NielsLeenheer and zcorpan
+
+ // Note: in some older browsers, "no" was a return value instead of empty string.
+ // It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2
+ // It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5
+
+ tests['video'] = function() {
+ var elem = document.createElement('video'),
+ bool = false;
+
+ // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224
+ try {
+ if ( bool = !!elem.canPlayType ) {
+ bool = new Boolean(bool);
+ bool.ogg = elem.canPlayType('video/ogg; codecs="theora"') .replace(/^no$/,'');
+
+ // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546
+ bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"') .replace(/^no$/,'');
+
+ bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,'');
+ }
+
+ } catch(e) { }
+
+ return bool;
+ };
+
+ tests['audio'] = function() {
+ var elem = document.createElement('audio'),
+ bool = false;
+
+ try {
+ if ( bool = !!elem.canPlayType ) {
+ bool = new Boolean(bool);
+ bool.ogg = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,'');
+ bool.mp3 = elem.canPlayType('audio/mpeg;') .replace(/^no$/,'');
+
+ // Mimetypes accepted:
+ // developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_ele…
+ // bit.ly/iphoneoscodecs
+ bool.wav = elem.canPlayType('audio/wav; codecs="1"') .replace(/^no$/,'');
+ bool.m4a = ( elem.canPlayType('audio/x-m4a;') ||
+ elem.canPlayType('audio/aac;')) .replace(/^no$/,'');
+ }
+ } catch(e) { }
+
+ return bool;
+ };
+
+
+ // In FF4, if disabled, window.localStorage should === null.
+
+ // Normally, we could not test that directly and need to do a
+ // `('localStorage' in window) && ` test first because otherwise Firefox will
+ // throw bugzil.la/365772 if cookies are disabled
+
+ // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem
+ // will throw the exception:
+ // QUOTA_EXCEEDED_ERRROR DOM Exception 22.
+ // Peculiarly, getItem and removeItem calls do not throw.
+
+ // Because we are forced to try/catch this, we'll go aggressive.
+
+ // Just FWIW: IE8 Compat mode supports these features completely:
+ // www.quirksmode.org/dom/html5.html
+ // But IE8 doesn't support either with local files
+
+ tests['localstorage'] = function() {
+ try {
+ localStorage.setItem(mod, mod);
+ localStorage.removeItem(mod);
+ return true;
+ } catch(e) {
+ return false;
+ }
+ };
+
+ tests['sessionstorage'] = function() {
+ try {
+ sessionStorage.setItem(mod, mod);
+ sessionStorage.removeItem(mod);
+ return true;
+ } catch(e) {
+ return false;
+ }
+ };
+
+
+ tests['webworkers'] = function() {
+ return !!window.Worker;
+ };
+
+
+ tests['applicationcache'] = function() {
+ return !!window.applicationCache;
+ };
+
+
+ // Thanks to Erik Dahlstrom
+ tests['svg'] = function() {
+ return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;
+ };
+
+ // specifically for SVG inline in HTML, not within XHTML
+ // test page: paulirish.com/demo/inline-svg
+ tests['inlinesvg'] = function() {
+ var div = document.createElement('div');
+ div.innerHTML = '<svg/>';
+ return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;
+ };
+
+ // SVG SMIL animation
+ tests['smil'] = function() {
+ return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));
+ };
+
+ // This test is only for clip paths in SVG proper, not clip paths on HTML content
+ // demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg
+
+ // However read the comments to dig into applying SVG clippaths to HTML content here:
+ // github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491
+ tests['svgclippaths'] = function() {
+ return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));
+ };
+
+ /*>>webforms*/
+ // input features and input types go directly onto the ret object, bypassing the tests loop.
+ // Hold this guy to execute in a moment.
+ function webforms() {
+ /*>>input*/
+ // Run through HTML5's new input attributes to see if the UA understands any.
+ // We're using f which is the <input> element created early on
+ // Mike Taylr has created a comprehensive resource for testing these attributes
+ // when applied to all input types:
+ // miketaylr.com/code/input-type-attr.html
+ // spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html…
+
+ // Only input placeholder is tested while textarea's placeholder is not.
+ // Currently Safari 4 and Opera 11 have support only for the input placeholder
+ // Both tests are available in feature-detects/forms-placeholder.js
+ Modernizr['input'] = (function( props ) {
+ for ( var i = 0, len = props.length; i < len; i++ ) {
+ attrs[ props[i] ] = !!(props[i] in inputElem);
+ }
+ if (attrs.list){
+ // safari false positive's on datalist: webk.it/74252
+ // see also github.com/Modernizr/Modernizr/issues/146
+ attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);
+ }
+ return attrs;
+ })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));
+ /*>>input*/
+
+ /*>>inputtypes*/
+ // Run through HTML5's new input types to see if the UA understands any.
+ // This is put behind the tests runloop because it doesn't return a
+ // true/false like all the other tests; instead, it returns an object
+ // containing each input type with its corresponding true/false value
+
+ // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/
+ Modernizr['inputtypes'] = (function(props) {
+
+ for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {
+
+ inputElem.setAttribute('type', inputElemType = props[i]);
+ bool = inputElem.type !== 'text';
+
+ // We first check to see if the type we give it sticks..
+ // If the type does, we feed it a textual value, which shouldn't be valid.
+ // If the value doesn't stick, we know there's input sanitization which infers a custom UI
+ if ( bool ) {
+
+ inputElem.value = smile;
+ inputElem.style.cssText = 'position:absolute;visibility:hidden;';
+
+ if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {
+
+ docElement.appendChild(inputElem);
+ defaultView = document.defaultView;
+
+ // Safari 2-4 allows the smiley as a value, despite making a slider
+ bool = defaultView.getComputedStyle &&
+ defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&
+ // Mobile android web browser has false positive, so must
+ // check the height to see if the widget is actually there.
+ (inputElem.offsetHeight !== 0);
+
+ docElement.removeChild(inputElem);
+
+ } else if ( /^(search|tel)$/.test(inputElemType) ){
+ // Spec doesn't define any special parsing or detectable UI
+ // behaviors so we pass these through as true
+
+ // Interestingly, opera fails the earlier test, so it doesn't
+ // even make it here.
+
+ } else if ( /^(url|email)$/.test(inputElemType) ) {
+ // Real url and email support comes with prebaked validation.
+ bool = inputElem.checkValidity && inputElem.checkValidity() === false;
+
+ } else {
+ // If the upgraded input compontent rejects the :) text, we got a winner
+ bool = inputElem.value != smile;
+ }
+ }
+
+ inputs[ props[i] ] = !!bool;
+ }
+ return inputs;
+ })('search tel url email datetime date month week time datetime-local number range color'.split(' '));
+ /*>>inputtypes*/
+ }
+ /*>>webforms*/
+
+
+ // End of test definitions
+ // -----------------------
+
+
+
+ // Run through all tests and detect their support in the current UA.
+ // todo: hypothetically we could be doing an array of tests and use a basic loop here.
+ for ( var feature in tests ) {
+ if ( hasOwnProp(tests, feature) ) {
+ // run the test, throw the return value into the Modernizr,
+ // then based on that boolean, define an appropriate className
+ // and push it into an array of classes we'll join later.
+ featureName = feature.toLowerCase();
+ Modernizr[featureName] = tests[feature]();
+
+ classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);
+ }
+ }
+
+ /*>>webforms*/
+ // input tests need to run.
+ Modernizr.input || webforms();
+ /*>>webforms*/
+
+
+ /**
+ * addTest allows the user to define their own feature tests
+ * the result will be added onto the Modernizr object,
+ * as well as an appropriate className set on the html element
+ *
+ * @param feature - String naming the feature
+ * @param test - Function returning true if feature is supported, false if not
+ */
+ Modernizr.addTest = function ( feature, test ) {
+ if ( typeof feature == 'object' ) {
+ for ( var key in feature ) {
+ if ( hasOwnProp( feature, key ) ) {
+ Modernizr.addTest( key, feature[ key ] );
+ }
+ }
+ } else {
+
+ feature = feature.toLowerCase();
+
+ if ( Modernizr[feature] !== undefined ) {
+ // we're going to quit if you're trying to overwrite an existing test
+ // if we were to allow it, we'd do this:
+ // var re = new RegExp("\\b(no-)?" + feature + "\\b");
+ // docElement.className = docElement.className.replace( re, '' );
+ // but, no rly, stuff 'em.
+ return Modernizr;
+ }
+
+ test = typeof test == 'function' ? test() : test;
+
+ if (typeof enableClasses !== "undefined" && enableClasses) {
+ docElement.className += ' ' + (test ? '' : 'no-') + feature;
+ }
+ Modernizr[feature] = test;
+
+ }
+
+ return Modernizr; // allow chaining.
+ };
+
+
+ // Reset modElem.cssText to nothing to reduce memory footprint.
+ setCss('');
+ modElem = inputElem = null;
+
+ /*>>shiv*/
+ /**
+ * @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+ */
+ ;(function(window, document) {
+ /*jshint evil:true */
+ /** version */
+ var version = '3.7.0';
+
+ /** Preset options */
+ var options = window.html5 || {};
+
+ /** Used to skip problem elements */
+ var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
+
+ /** Not all elements can be cloned in IE **/
+ var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
+
+ /** Detect whether the browser supports default html5 styles */
+ var supportsHtml5Styles;
+
+ /** Name of the expando, to work with multiple documents or to re-shiv one document */
+ var expando = '_html5shiv';
+
+ /** The id for the the documents expando */
+ var expanID = 0;
+
+ /** Cached data for each document */
+ var expandoData = {};
+
+ /** Detect whether the browser supports unknown elements */
+ var supportsUnknownElements;
+
+ (function() {
+ try {
+ var a = document.createElement('a');
+ a.innerHTML = '<xyz></xyz>';
+ //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
+ supportsHtml5Styles = ('hidden' in a);
+
+ supportsUnknownElements = a.childNodes.length == 1 || (function() {
+ // assign a false positive if unable to shiv
+ (document.createElement)('a');
+ var frag = document.createDocumentFragment();
+ return (
+ typeof frag.cloneNode == 'undefined' ||
+ typeof frag.createDocumentFragment == 'undefined' ||
+ typeof frag.createElement == 'undefined'
+ );
+ }());
+ } catch(e) {
+ // assign a false positive if detection fails => unable to shiv
+ supportsHtml5Styles = true;
+ supportsUnknownElements = true;
+ }
+
+ }());
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Creates a style sheet with the given CSS text and adds it to the document.
+ * @private
+ * @param {Document} ownerDocument The document.
+ * @param {String} cssText The CSS text.
+ * @returns {StyleSheet} The style element.
+ */
+ function addStyleSheet(ownerDocument, cssText) {
+ var p = ownerDocument.createElement('p'),
+ parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
+
+ p.innerHTML = 'x<style>' + cssText + '</style>';
+ return parent.insertBefore(p.lastChild, parent.firstChild);
+ }
+
+ /**
+ * Returns the value of `html5.elements` as an array.
+ * @private
+ * @returns {Array} An array of shived element node names.
+ */
+ function getElements() {
+ var elements = html5.elements;
+ return typeof elements == 'string' ? elements.split(' ') : elements;
+ }
+
+ /**
+ * Returns the data associated to the given document
+ * @private
+ * @param {Document} ownerDocument The document.
+ * @returns {Object} An object of data.
+ */
+ function getExpandoData(ownerDocument) {
+ var data = expandoData[ownerDocument[expando]];
+ if (!data) {
+ data = {};
+ expanID++;
+ ownerDocument[expando] = expanID;
+ expandoData[expanID] = data;
+ }
+ return data;
+ }
+
+ /**
+ * returns a shived element for the given nodeName and document
+ * @memberOf html5
+ * @param {String} nodeName name of the element
+ * @param {Document} ownerDocument The context document.
+ * @returns {Object} The shived element.
+ */
+ function createElement(nodeName, ownerDocument, data){
+ if (!ownerDocument) {
+ ownerDocument = document;
+ }
+ if(supportsUnknownElements){
+ return ownerDocument.createElement(nodeName);
+ }
+ if (!data) {
+ data = getExpandoData(ownerDocument);
+ }
+ var node;
+
+ if (data.cache[nodeName]) {
+ node = data.cache[nodeName].cloneNode();
+ } else if (saveClones.test(nodeName)) {
+ node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
+ } else {
+ node = data.createElem(nodeName);
+ }
+
+ // Avoid adding some elements to fragments in IE < 9 because
+ // * Attributes like `name` or `type` cannot be set/changed once an element
+ // is inserted into a document/fragment
+ // * Link elements with `src` attributes that are inaccessible, as with
+ // a 403 response, will cause the tab/window to crash
+ // * Script elements appended to fragments will execute when their `src`
+ // or `text` property is set
+ return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
+ }
+
+ /**
+ * returns a shived DocumentFragment for the given document
+ * @memberOf html5
+ * @param {Document} ownerDocument The context document.
+ * @returns {Object} The shived DocumentFragment.
+ */
+ function createDocumentFragment(ownerDocument, data){
+ if (!ownerDocument) {
+ ownerDocument = document;
+ }
+ if(supportsUnknownElements){
+ return ownerDocument.createDocumentFragment();
+ }
+ data = data || getExpandoData(ownerDocument);
+ var clone = data.frag.cloneNode(),
+ i = 0,
+ elems = getElements(),
+ l = elems.length;
+ for(;i<l;i++){
+ clone.createElement(elems[i]);
+ }
+ return clone;
+ }
+
+ /**
+ * Shivs the `createElement` and `createDocumentFragment` methods of the document.
+ * @private
+ * @param {Document|DocumentFragment} ownerDocument The document.
+ * @param {Object} data of the document.
+ */
+ function shivMethods(ownerDocument, data) {
+ if (!data.cache) {
+ data.cache = {};
+ data.createElem = ownerDocument.createElement;
+ data.createFrag = ownerDocument.createDocumentFragment;
+ data.frag = data.createFrag();
+ }
+
+
+ ownerDocument.createElement = function(nodeName) {
+ //abort shiv
+ if (!html5.shivMethods) {
+ return data.createElem(nodeName);
+ }
+ return createElement(nodeName, ownerDocument, data);
+ };
+
+ ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
+ 'var n=f.cloneNode(),c=n.createElement;' +
+ 'h.shivMethods&&(' +
+ // unroll the `createElement` calls
+ getElements().join().replace(/[\w\-]+/g, function(nodeName) {
+ data.createElem(nodeName);
+ data.frag.createElement(nodeName);
+ return 'c("' + nodeName + '")';
+ }) +
+ ');return n}'
+ )(html5, data.frag);
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Shivs the given document.
+ * @memberOf html5
+ * @param {Document} ownerDocument The document to shiv.
+ * @returns {Document} The shived document.
+ */
+ function shivDocument(ownerDocument) {
+ if (!ownerDocument) {
+ ownerDocument = document;
+ }
+ var data = getExpandoData(ownerDocument);
+
+ if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
+ data.hasCSS = !!addStyleSheet(ownerDocument,
+ // corrects block display not defined in IE6/7/8/9
+ 'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
+ // adds styling not present in IE6/7/8/9
+ 'mark{background:#FF0;color:#000}' +
+ // hides non-rendered elements
+ 'template{display:none}'
+ );
+ }
+ if (!supportsUnknownElements) {
+ shivMethods(ownerDocument, data);
+ }
+ return ownerDocument;
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * The `html5` object is exposed so that more elements can be shived and
+ * existing shiving can be detected on iframes.
+ * @type Object
+ * @example
+ *
+ * // options can be changed before the script is included
+ * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
+ */
+ var html5 = {
+
+ /**
+ * An array or space separated string of node names of the elements to shiv.
+ * @memberOf html5
+ * @type Array|String
+ */
+ 'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',
+
+ /**
+ * current version of html5shiv
+ */
+ 'version': version,
+
+ /**
+ * A flag to indicate that the HTML5 style sheet should be inserted.
+ * @memberOf html5
+ * @type Boolean
+ */
+ 'shivCSS': (options.shivCSS !== false),
+
+ /**
+ * Is equal to true if a browser supports creating unknown/HTML5 elements
+ * @memberOf html5
+ * @type boolean
+ */
+ 'supportsUnknownElements': supportsUnknownElements,
+
+ /**
+ * A flag to indicate that the document's `createElement` and `createDocumentFragment`
+ * methods should be overwritten.
+ * @memberOf html5
+ * @type Boolean
+ */
+ 'shivMethods': (options.shivMethods !== false),
+
+ /**
+ * A string to describe the type of `html5` object ("default" or "default print").
+ * @memberOf html5
+ * @type String
+ */
+ 'type': 'default',
+
+ // shivs the document according to the specified `html5` object options
+ 'shivDocument': shivDocument,
+
+ //creates a shived element
+ createElement: createElement,
+
+ //creates a shived documentFragment
+ createDocumentFragment: createDocumentFragment
+ };
+
+ /*--------------------------------------------------------------------------*/
+
+ // expose html5
+ window.html5 = html5;
+
+ // shiv the document
+ shivDocument(document);
+
+ }(this, document));
+ /*>>shiv*/
+
+ // Assign private properties to the return object with prefix
+ Modernizr._version = version;
+
+ // expose these for the plugin API. Look in the source for how to join() them against your input
+ /*>>prefixes*/
+ Modernizr._prefixes = prefixes;
+ /*>>prefixes*/
+ /*>>domprefixes*/
+ Modernizr._domPrefixes = domPrefixes;
+ Modernizr._cssomPrefixes = cssomPrefixes;
+ /*>>domprefixes*/
+
+ /*>>mq*/
+ // Modernizr.mq tests a given media query, live against the current state of the window
+ // A few important notes:
+ // * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false
+ // * A max-width or orientation query will be evaluated against the current state, which may change later.
+ // * You must specify values. Eg. If you are testing support for the min-width media query use:
+ // Modernizr.mq('(min-width:0)')
+ // usage:
+ // Modernizr.mq('only screen and (max-width:768)')
+ Modernizr.mq = testMediaQuery;
+ /*>>mq*/
+
+ /*>>hasevent*/
+ // Modernizr.hasEvent() detects support for a given event, with an optional element to test on
+ // Modernizr.hasEvent('gesturestart', elem)
+ Modernizr.hasEvent = isEventSupported;
+ /*>>hasevent*/
+
+ /*>>testprop*/
+ // Modernizr.testProp() investigates whether a given style property is recognized
+ // Note that the property names must be provided in the camelCase variant.
+ // Modernizr.testProp('pointerEvents')
+ Modernizr.testProp = function(prop){
+ return testProps([prop]);
+ };
+ /*>>testprop*/
+
+ /*>>testallprops*/
+ // Modernizr.testAllProps() investigates whether a given style property,
+ // or any of its vendor-prefixed variants, is recognized
+ // Note that the property names must be provided in the camelCase variant.
+ // Modernizr.testAllProps('boxSizing')
+ Modernizr.testAllProps = testPropsAll;
+ /*>>testallprops*/
+
+
+ /*>>teststyles*/
+ // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards
+ // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... })
+ Modernizr.testStyles = injectElementWithStyles;
+ /*>>teststyles*/
+
+
+ /*>>prefixed*/
+ // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input
+ // Modernizr.prefixed('boxSizing') // 'MozBoxSizing'
+
+ // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style.
+ // Return values will also be the camelCase variant, if you need to translate that to hypenated style use:
+ //
+ // str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');
+
+ // If you're trying to ascertain which transition end event to bind to, you might do something like...
+ //
+ // var transEndEventNames = {
+ // 'WebkitTransition' : 'webkitTransitionEnd',
+ // 'MozTransition' : 'transitionend',
+ // 'OTransition' : 'oTransitionEnd',
+ // 'msTransition' : 'MSTransitionEnd',
+ // 'transition' : 'transitionend'
+ // },
+ // transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];
+
+ Modernizr.prefixed = function(prop, obj, elem){
+ if(!obj) {
+ return testPropsAll(prop, 'pfx');
+ } else {
+ // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'
+ return testPropsAll(prop, obj, elem);
+ }
+ };
+ /*>>prefixed*/
+
+
+ /*>>cssclasses*/
+ // Remove "no-js" class from <html> element, if it exists:
+ docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') +
+
+ // Add the new classes to the <html> element.
+ (enableClasses ? ' js ' + classes.join(' ') : '');
+ /*>>cssclasses*/
+
+ return Modernizr;
+
+})(this, this.document);
diff --git a/ui/new-ui-samples/manifest.json b/ui/new-ui-samples/manifest.json
new file mode 100644
index 0000000..bbcc45e
--- /dev/null
+++ b/ui/new-ui-samples/manifest.json
@@ -0,0 +1,41 @@
+{
+ "name": "Kimchi",
+ "icons": [
+ {
+ "src": "\/android-chrome-36x36.png",
+ "sizes": "36x36",
+ "type": "image\/png",
+ "density": "0.75"
+ },
+ {
+ "src": "\/android-chrome-48x48.png",
+ "sizes": "48x48",
+ "type": "image\/png",
+ "density": "1.0"
+ },
+ {
+ "src": "\/android-chrome-72x72.png",
+ "sizes": "72x72",
+ "type": "image\/png",
+ "density": "1.5"
+ },
+ {
+ "src": "\/android-chrome-96x96.png",
+ "sizes": "96x96",
+ "type": "image\/png",
+ "density": "2.0"
+ },
+ {
+ "src": "\/android-chrome-144x144.png",
+ "sizes": "144x144",
+ "type": "image\/png",
+ "density": "3.0"
+ },
+ {
+ "src": "\/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image\/png",
+ "density": "4.0"
+ }
+ ]
+}
diff --git a/ui/new-ui-samples/mstile-144x144.png b/ui/new-ui-samples/mstile-144x144.png
new file mode 100644
index 0000000000000000000000000000000000000000..8a8f5ee642cae8225316dfd52f44b3743b6e76ed
GIT binary patch
literal 4103
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
FV1lW#!Yu#*
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/mstile-150x150.png b/ui/new-ui-samples/mstile-150x150.png
new file mode 100644
index 0000000000000000000000000000000000000000..22867370353f63645f87dc45304aeb8f0f66dfd3
GIT binary patch
literal 3891
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
BpiBS&
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/mstile-310x150.png b/ui/new-ui-samples/mstile-310x150.png
new file mode 100644
index 0000000000000000000000000000000000000000..414ca16c30286ff16abffe1ef629199eaae9253f
GIT binary patch
literal 4172
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/mstile-310x310.png b/ui/new-ui-samples/mstile-310x310.png
new file mode 100644
index 0000000000000000000000000000000000000000..94e1537cf844a19328b7e251818b1cf373e3dbc6
GIT binary patch
literal 5531
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/mstile-70x70.png b/ui/new-ui-samples/mstile-70x70.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc6016d0ca97ff28431e94e8b95960cb5cc9ea3f
GIT binary patch
literal 2602
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
literal 0
HcmV?d00001
diff --git a/ui/new-ui-samples/robots.txt b/ui/new-ui-samples/robots.txt
new file mode 100755
index 0000000..3969cb1
--- /dev/null
+++ b/ui/new-ui-samples/robots.txt
@@ -0,0 +1,4 @@
+# robotstxt.org/
+
+User-agent: *
+Disallow:
diff --git a/ui/new-ui-samples/widgets/action_button.html b/ui/new-ui-samples/widgets/action_button.html
new file mode 100644
index 0000000..d0a6d9f
--- /dev/null
+++ b/ui/new-ui-samples/widgets/action_button.html
@@ -0,0 +1,186 @@
+<!--
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<!DOCTYPE html>
+<html class="no-js" lang="">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="description" content="">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Kimchi - Action Button Demo</title>
+ <link rel="apple-touch-icon" sizes="57x57" href="../apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="../apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="../apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="../apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="../apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="../apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="../apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="../apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="../favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="../favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="../favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="../android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="../favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="../manifest.json">
+ <meta name="apple-mobile-web-app-title" content="Kimchi">
+ <meta name="application-name" content="Kimchi">
+ <meta name="msapplication-TileColor" content="#4d4d4d">
+ <meta name="msapplication-TileImage" content="../mstile-144x144.png">
+ <meta name="theme-color" content="#ffffff">
+ <!-- Place favicon.ico in the root directory -->
+ <link rel="stylesheet" href="../css/vendor.css">
+ <link rel="stylesheet" href="../css/fontello.css">
+ <link rel="stylesheet" href="../css/main.css">
+ <script src="../js/vendor/modernizr.js"></script>
+</head>
+
+<body>
+ <nav class="navbar navbar-inverse navbar-static-top">
+ <div class="container">
+ <div class="navbar-header">
+ <a class="navbar-brand" href="#">Action Button (menu-flat.js)</a>
+ </div>
+ </div>
+ </nav>
+ <div class="container">
+ <h2>Bootstrap (static)</h2>
+ <div class="dropdown menu-flat" id="wok-dropdown-menu-x">
+ <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown"><i class="icon-edit-alt"></i>Actions<span class="caret"></span></button>
+ <ul class="dropdown-menu">
+ <li><a id="wok-dropdown-menu-x_0" class="add" href="#add"><i class="icon-plus-circled-1"></i>Add</a></li>
+ <li><a id="wok-dropdown-menu-x_1" class="enable" href="#enable_"><i class="icon-play-circled2"></i>Enable</a></li>
+ <li><a id="wok-dropdown-menu-x_2" class="edit" href="#edit_"><i class="icon-pencil-2"></i>Edit</a></li>
+ <li class="critical"><a id="wok-dropdown-menu-x_0" class="delete" href="#delete_"><i class="icon-minus-circled-1"></i>Delete</a></li>
+ </ul>
+ </div>
+ <h2>jQuery UI Widget (using Bootstrap classes)</h2>
+ <div class="btn-wrapper"></div>
+ <h2>How to use</h2>
+ <pre>
+ <code>
+ $(".btn-wrapper").menuFlat({
+ name: "wok-dropdown-menu-0", // not required
+ icon: "icon-edit-alt", //Set icon of the menu button.
+ label: 'Actions', //Set button text
+ content: [
+ { name: 'Add',
+ action: 'add',
+ icon: 'icon-plus-circled-1',
+ critical: false
+ },
+ { name: 'Enable',
+ action: 'enable',
+ icon: 'icon-play-circled2',
+ critical: false
+ },
+ { name: 'Edit',
+ action: 'edit',
+ icon: 'icon-pencil-2',
+ critical: false
+ },
+ { name: 'Delete',
+ action: 'delete',
+ icon: 'icon-minus-circled-1',
+ critical: true // set this to true if this action should be highlighted
+ }
+ ]
+ });
+
+ // List actions
+
+ // You can set an event to a link based on its ID, css class or href attribute
+
+ $("#wok-dropdown-menu-0_0").on("click", function(event) {
+ event.preventDefault();
+ alert("Add");
+ });
+
+ $("#wok-dropdown-menu-0 a[href='#enable']").on("click", function(event) {
+ event.preventDefault();
+ alert("Enable");
+ });
+
+ $("#wok-dropdown-menu-0 .edit").on("click", function(event) {
+ event.preventDefault();
+ alert("Edit");
+ });
+
+ </code>
+ </pre>
+ </div>
+ <script src="../js/vendor/jquery.js"></script>
+ <script src="../js/vendor/jquery-ui.js"></script>
+ <script src="../js/vendor.js"></script>
+ <script src="../js/vendor/bootstrap.js"></script>
+ <script src="../js/vendor/bootstrap-select.min.js"></script>
+ <script src="../js/main.js"></script>
+ <script>
+ $(document).ready(function() {
+ $(".btn-wrapper").menuFlat({
+ name: "wok-dropdown-menu-0",
+ icon: "icon-edit-alt", //Set icon of the menu button.
+ label: 'Actions', //Set button text
+ content: [{
+ name: 'Add',
+ action: 'add',
+ icon: 'icon-plus-circled-1',
+ critical: false
+ }, {
+ name: 'Enable',
+ action: 'enable',
+ icon: 'icon-play-circled2',
+ critical: false
+ }, {
+ name: 'Edit',
+ action: 'edit',
+ icon: 'icon-pencil-2',
+ critical: false
+ }, {
+ name: 'Delete',
+ action: 'delete',
+ icon: 'icon-minus-circled-1',
+ critical: true
+ }]
+ });
+
+
+ $("#wok-dropdown-menu-0_0").on("click", function(event) {
+ event.preventDefault();
+ alert("Add");
+ });
+
+ $("#wok-dropdown-menu-0 a[href='#enable']").on("click", function(event) {
+ event.preventDefault();
+ alert("Enable");
+ });
+
+ $("#wok-dropdown-menu-0 .edit").on("click", function(event) {
+ event.preventDefault();
+ alert("Edit");
+ });
+
+
+ });
+ </script>
+ <script src="../js/menu-flat.js"></script>
+</body>
+
+</html>
diff --git a/ui/new-ui-samples/widgets/dialog.html b/ui/new-ui-samples/widgets/dialog.html
new file mode 100644
index 0000000..809d70a
--- /dev/null
+++ b/ui/new-ui-samples/widgets/dialog.html
@@ -0,0 +1,78 @@
+<!--
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<!DOCTYPE html>
+<html class="no-js" lang="">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="description" content="">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Kimchi - Action Button Demo</title>
+ <link rel="apple-touch-icon" sizes="57x57" href="../apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="../apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="../apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="../apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="../apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="../apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="../apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="../apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="../favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="../favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="../favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="../android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="../favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="../manifest.json">
+ <meta name="apple-mobile-web-app-title" content="Kimchi">
+ <meta name="application-name" content="Kimchi">
+ <meta name="msapplication-TileColor" content="#4d4d4d">
+ <meta name="msapplication-TileImage" content="../mstile-144x144.png">
+ <meta name="theme-color" content="#ffffff">
+ <!-- Place favicon.ico in the root directory -->
+ <link rel="stylesheet" href="../css/vendor.css">
+ <link rel="stylesheet" href="../css/fontello.css">
+ <link rel="stylesheet" href="../css/main.css">
+ <script src="../js/vendor/modernizr.js"></script>
+ <body>
+ <div class="dialog-demo">Teste</div>
+
+
+
+ <script src="../js/vendor.js"></script>
+
+ <script src="../js/plugins.js"></script>
+
+ <script src="../js/dialog-flat.js"></script>
+ <script>
+ $(document).ready(function() {
+ $(".dialog-demo").dialogFlat({
+ title: "Demo", //Title of the dialog.
+ confirmText: "Ok", //Text of the confirm button, "Ok" is the default value.
+ cancelText: "Cancel", //Text of the cancel button.
+ width: "600", //Width of the dialog, "px" is the default unit.
+ height: "500", //Height of the dialog, "px" is the default unit.
+ confirmFunc: function() {
+ alert("success");//Function after confirm
+ }
+ });
+ });
+ </script>
+ </body>
+</html>
diff --git a/ui/new-ui-samples/widgets/dialog_bootstrap.html b/ui/new-ui-samples/widgets/dialog_bootstrap.html
new file mode 100644
index 0000000..fc857e5
--- /dev/null
+++ b/ui/new-ui-samples/widgets/dialog_bootstrap.html
@@ -0,0 +1,102 @@
+<!--
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<!DOCTYPE html>
+<html class="no-js" lang="">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="description" content="">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Kimchi - Action Button Demo</title>
+ <link rel="apple-touch-icon" sizes="57x57" href="../apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="../apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="../apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="../apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="../apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="../apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="../apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="../apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="../favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="../favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="../favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="../android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="../favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="../manifest.json">
+ <meta name="apple-mobile-web-app-title" content="Kimchi">
+ <meta name="application-name" content="Kimchi">
+ <meta name="msapplication-TileColor" content="#4d4d4d">
+ <meta name="msapplication-TileImage" content="../mstile-144x144.png">
+ <meta name="theme-color" content="#ffffff">
+ <!-- Place favicon.ico in the root directory -->
+ <link rel="stylesheet" href="../css/vendor.css">
+
+ <link rel="stylesheet" href="../css/main.css">
+ <script src="../js/vendor/modernizr.js"></script>
+</head>
+
+<body>
+ <nav class="navbar navbar-inverse navbar-static-top">
+ <div class="container">
+ <div class="navbar-header">
+ <a class="navbar-brand" href="#">Dialog (Bootstrap Modal)</a>
+ </div>
+ </div>
+ </nav>
+ <div class="container hosts">
+ <h2>Bootstrap (static)</h2>
+ <!-- Button trigger modal -->
+ <button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
+ Launch demo modal
+ </button>
+ <!-- Modal -->
+ <div class="modal fade in" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+ <div class="modal-dialog" role="document">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
+ <h4 class="modal-title" id="myModalLabel">Modal title</h4>
+ </div>
+ <div class="modal-body">
+ <select id="userLang" class="col-md-12 col-lg-12 ">
+ <option data-icon="icon-list-add" value="en_US">Add</option>
+ <option data-icon="icon-play-circled" value="zh_CN">Enable</option>
+ <option data-icon="icon-pencil-1" value="pt_BR">Edit</option>
+ <option data-icon="icon-minus-circled-1" value="de_DE">Remove</option>
+ </select>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default">Ok</button>
+ <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <script src="../js/vendor/jquery.js"></script>
+ <script src="../js/vendor/jquery-ui.js"></script>
+ <script src="../js/vendor.js"></script>
+ <script src="../js/vendor/bootstrap.js"></script>
+ <script src="../js/vendor/bootstrap-select.min.js"></script>
+ <script src="../js/main.js"></script>
+ <script src="../js/dialog-flat.js"></script>
+</body>
+
+</html>
diff --git a/ui/new-ui-samples/widgets/gauge-flat.html b/ui/new-ui-samples/widgets/gauge-flat.html
new file mode 100644
index 0000000..92ce07a
--- /dev/null
+++ b/ui/new-ui-samples/widgets/gauge-flat.html
@@ -0,0 +1,53 @@
+<!--Sample code of gauge-->
+<!--
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="UTF-8">
+ <title>Gauge Demo</title>
+ <script src="../../../libs/jquery-1.10.0.min.js"></script>
+ <script src="../../../libs/jquery-ui.min.js"></script>
+ <script src="../gauge-flat.js"></script>
+ <link rel="stylesheet" href="../../../libs/themes/base/jquery-ui.min.css">
+ <link rel="stylesheet" href="../../../css/theme-default/gauge-flat.css">
+ </head>
+ <body>
+ <div class="gauge-demo"></div>
+ <script>
+ $(document).ready(function() {
+ console.log("test started1");
+ var gauged = $(".gauge-demo");
+ gauged.gaugeFlat({
+ value: 25,
+ color: "red"
+ });
+ var gaugeAdd = function() {
+ var gaugeValue = gauged.gaugeFlat("value");
+ gauged.gaugeFlat("value", gaugeValue + 1);
+ if (gaugeValue < 99) {
+ setTimeout(gaugeAdd, 300);
+ }
+ }
+ gaugeAdd();
+ });
+ </script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/ui/new-ui-samples/widgets/grid.html b/ui/new-ui-samples/widgets/grid.html
new file mode 100644
index 0000000..9b92d62
--- /dev/null
+++ b/ui/new-ui-samples/widgets/grid.html
@@ -0,0 +1,80 @@
+<!--
+ *
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+-->
+
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Wok</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+
+<link rel="stylesheet" href="../../../libs/themes/base/jquery-ui.min.css">
+<link rel="stylesheet" href="../../../fontello/css/fontello.css">
+<link rel="stylesheet" href="../../../fontello/css/animation.css">
+<link rel="stylesheet" href="../../../css/theme-default.min.css">
+
+<script src="../../../libs/jquery-1.10.0.min.js"></script>
+<script src="../../../libs/jquery-ui.min.js"></script>
+<script src="../../../libs/jquery-ui-i18n.min.js"></script>
+<script src="../../../js/wok.min.js"></script>
+
+<style type="text/css">
+body {
+ background: none;
+}
+input {
+ float: right;
+}
+.name {
+ width: 30%;
+}
+.project {
+ width: 30%;
+}
+.role {
+ width: 39%;
+}
+</style>
+<script>
+function init(){
+ $('#ibmers').grid({enableSorting: true});
+ $('input').on('keyup', function(){
+ $('#ibmers').grid('filter', ($(this).val()));
+ });
+}
+</script>
+</head>
+<body onload="init()">
+<div style="height: 50px; padding-top: 10px; padding-right: 50px;"><input type='text' placeholder='Filter' style='padding-left: 5px; height: 20px;'></div>
+<div id="ibmers">
+<div><span class="name">Name</span><span class="project">Project</span><span class="role">Role</span></div>
+<div>
+<div><span class="name" val="tify">tify</span><span class="project" val="kimchi">kimchi</span><span class="role" val="designer">designer</span></div>
+<div><span class="name" val="rick">rick</span><span class="project" val="finance">finance</span><span class="role" val="sponsor">sponsor</span></div>
+<div><span class="name" val="icy">icy</span><span class="project" val="human resource">human resource</span><span class="role" val="administrator*">administrator</span></div>
+<div><span class="name" val="paul">paul</span><span class="project" val="tomcat">tomcat</span><span class="role" val="dev lead">dev lead</span></div>
+<div><span class="name" val="kapil">kapil</span><span class="project" val="apache">apache</span><span class="role" val="developer">developer</span></div>
+<div><span class="name" val="adam">adam</span><span class="name" val="mongodb">mongodb</span><span class="role" val="dev lead">dev lead</span></div>
+<div><span class="name" val="shikha">shikha</span><span class="project" val="mysql">mysql</span><span class="role" val="dev lead">dev lead</span></div>
+</div>
+</div>
+</body>
+</html>
diff --git a/ui/new-ui-samples/widgets/line.html b/ui/new-ui-samples/widgets/line.html
new file mode 100644
index 0000000..cc0b738
--- /dev/null
+++ b/ui/new-ui-samples/widgets/line.html
@@ -0,0 +1,168 @@
+<!--
+ *
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+-->
+
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Wok</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+
+<link rel="stylesheet" href="../../../libs/themes/base/jquery-ui.min.css">
+<link rel="stylesheet" href="../../../fontello/css/fontello.css">
+<link rel="stylesheet" href="../../../fontello/css/animation.css">
+<link rel="stylesheet" href="../../../css/theme-default.min.css">
+
+<script src="../../../libs/jquery-1.10.0.min.js"></script>
+<script src="../../../libs/jquery-ui.min.js"></script>
+<script src="../../../libs/jquery-ui-i18n.min.js"></script>
+<script src="../../../js/wok.min.js"></script>
+
+<style type="text/css">
+body {
+ background: none;
+}
+.cell {
+ display: inline-block;
+ width: 49%;
+}
+.monitor {
+ width: 391px;
+ margin: 15px auto;
+}
+.chart {
+ width: 390px;
+ height: 200px;
+ margin-top: 20px;
+}
+.legend {
+ height: 25px;
+ line-height: 25px;
+ padding-left: 8px;
+ margin: 5px 30px 5px 0;
+ border-left: 3px solid;
+ display: inline-block;
+}
+</style>
+<script>
+function init(){
+$('#chart1').line({
+ minVal: 0,
+ maxVal: 500,
+ datasets: [{
+ data: new Array(50),
+ color: "#d9182d"
+ }]
+});
+$('#chart2').line({
+ minVal: 0,
+ maxVal: 500,
+ datasets: [{
+ data: new Array(50),
+ color: "#008abf"
+ }]
+});
+$('#chart3').line({
+ minVal: 0,
+ maxVal: 500,
+ datasets: [{
+ data: new Array(50),
+ color: "#fdb813"
+ }, {
+ data: new Array(50),
+ color: "#00a6a0"
+ }]
+});
+$('#chart4').line({
+ minVal: 0,
+ maxVal: 500,
+ datasets: [{
+ data: new Array(50),
+ color: "#561289"
+ }, {
+ data: new Array(50),
+ color: "#238901"
+ }]
+});
+setInterval(function(){
+ $('#chart1').line('addData', [Math.round(Math.random()*500)]);
+}, 1000);
+setInterval(function(){
+ $('#chart2').line('addData', [Math.round(Math.random()*500)]);
+}, 1000);
+setInterval(function(){
+ $('#chart3').line('addData', [Math.round(Math.random()*500),Math.round(Math.random()*500)]);
+}, 1000);
+setInterval(function(){
+ $('#chart4').line('addData', [Math.round(Math.random()*500),Math.round(Math.random()*500)]);
+}, 1000);
+}
+</script>
+</head>
+<body onload="init()">
+<div>
+<span class='cell'>
+ <div class="monitor">
+ <div class="h1 grey">Processor</div>
+ <div class="c1 dark-grey bold">
+ <span class="legend" style="border-color: #d9182d;">Used: 41%</span>
+ </div>
+ <div class="c1 light-grey">Maximum: 100%</div>
+ <div id="chart1" class='chart'></div>
+ </div>
+</span>
+<span class='cell'>
+ <div class="monitor">
+ <div class="h1 grey">Memory</div>
+ <div class="c1 dark-grey bold">
+ <span class="legend" style="border-color: #008abf;">Available: 49%</span>
+ </div>
+ <div class="c1 light-grey">Maximum: 280GB</div>
+ <div id="chart2" class='chart'></div>
+ </div>
+</span>
+</div>
+<div>
+<span class='cell'>
+ <div class="monitor">
+ <div class="h1 grey">Storage IO</div>
+ <div class="c1 dark-grey bold">
+ <span class="legend" style="border-color: #fdb813">Write: 6KB/S</span>
+ <span class="legend" style="border-color: #00a6a0">Read: 123KB/S</span>
+ </div>
+ <div class="c1 light-grey">Maximum: 79.04KB/S</div>
+ <div id="chart3" class='chart'></div>
+ </div>
+</span>
+<span class='cell'>
+ <div class="monitor">
+ <div class="h1 grey">Network IO</div>
+ <div class="c1 dark-grey bold">
+ <span class="legend" style="border-color: #561289">Received: 2KB/S</span>
+ <span class="legend" style="border-color: #238901">Sent: 1KB/S</span>
+ </div>
+ <div class="c1 light-grey">Maximum: 33.35KB/S</div>
+ <div id="chart4" class='chart'></div>
+ </div>
+</span>
+</div>
+</body>
+</html>
diff --git a/ui/new-ui-samples/widgets/list.html b/ui/new-ui-samples/widgets/list.html
new file mode 100644
index 0000000..850550c
--- /dev/null
+++ b/ui/new-ui-samples/widgets/list.html
@@ -0,0 +1,46 @@
+<!--
+ *
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+-->
+
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="UTF-8">
+ <title>List Demo</title>
+ <script src="../../../libs/jquery-1.10.0.min.js"></script>
+ <script src="../../../libs/jquery-ui.min.js"></script>
+ <script src="../list-flat.js"></script>
+ <link rel="stylesheet" href="../../../libs/themes/base/jquery-ui.min.css">
+ <link rel="stylesheet" href="../../../css/theme-default/list-flat.css">
+ <link rel="stylesheet" href="../../../fontello/css/animation.css">
+ <link rel="stylesheet" href="../../../fontello/css/fontello.css">
+ </head>
+ <body>
+ <div class="list-demo"></div>
+ <script>
+ $(document).ready(function() {
+ $(".list-demo").listFlat({
+ title: "Hello World" //Set title.
+ });
+ $(".list-demo").listFlat("addItem", "Hello", "2015", "icon-user", "button1");
+ //Add one item of the list, parameters are: name, info, icon and button-id
+ });
+ </script>
+ </body>
+</html>
diff --git a/ui/new-ui-samples/widgets/menu-button-radio-checkbox-text-select.html b/ui/new-ui-samples/widgets/menu-button-radio-checkbox-text-select.html
new file mode 100644
index 0000000..242eaf5
--- /dev/null
+++ b/ui/new-ui-samples/widgets/menu-button-radio-checkbox-text-select.html
@@ -0,0 +1,166 @@
+<!--
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<!DOCTYPE html>
+<html class="no-js" lang="">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="description" content="">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Kimchi - Action Button Demo</title>
+ <link rel="apple-touch-icon" sizes="57x57" href="../apple-touch-icon-57x57.png">
+ <link rel="apple-touch-icon" sizes="60x60" href="../apple-touch-icon-60x60.png">
+ <link rel="apple-touch-icon" sizes="72x72" href="../apple-touch-icon-72x72.png">
+ <link rel="apple-touch-icon" sizes="76x76" href="../apple-touch-icon-76x76.png">
+ <link rel="apple-touch-icon" sizes="114x114" href="../apple-touch-icon-114x114.png">
+ <link rel="apple-touch-icon" sizes="120x120" href="../apple-touch-icon-120x120.png">
+ <link rel="apple-touch-icon" sizes="144x144" href="../apple-touch-icon-144x144.png">
+ <link rel="apple-touch-icon" sizes="152x152" href="../apple-touch-icon-152x152.png">
+ <link rel="apple-touch-icon" sizes="180x180" href="../apple-touch-icon-180x180.png">
+ <link rel="icon" type="image/png" href="../favicon-32x32.png" sizes="32x32">
+ <link rel="icon" type="image/png" href="../favicon-194x194.png" sizes="194x194">
+ <link rel="icon" type="image/png" href="../favicon-96x96.png" sizes="96x96">
+ <link rel="icon" type="image/png" href="../android-chrome-192x192.png" sizes="192x192">
+ <link rel="icon" type="image/png" href="../favicon-16x16.png" sizes="16x16">
+ <link rel="manifest" href="../manifest.json">
+ <meta name="apple-mobile-web-app-title" content="Kimchi">
+ <meta name="application-name" content="Kimchi">
+ <meta name="msapplication-TileColor" content="#4d4d4d">
+ <meta name="msapplication-TileImage" content="../mstile-144x144.png">
+ <meta name="theme-color" content="#ffffff">
+ <link rel="stylesheet" href="../css/font-awesome.css">
+ <link rel="stylesheet" href="../css/jquery-ui.css">
+
+ <link rel="stylesheet" href="../css/menu-flat.css">
+ <link rel="stylesheet" href="../css/button-flat.css">
+ <link rel="stylesheet" href="../css/radio-flat.css">
+ <link rel="stylesheet" href="../css/checkbox-flat.css">
+ <link rel="stylesheet" href="../css/textbox-flat.css">
+ <link rel="stylesheet" href="../css/selectmenu-flat.css">
+ <script src="../js/vendor/modernizr.js"></script>
+
+ <link rel="stylesheet" href="../css/fontello.css">
+ <link rel="stylesheet" href="../css/main.css">
+</head>
+
+<body>
+ <nav class="navbar navbar-inverse navbar-static-top">
+ <div class="container">
+ <div class="navbar-header">
+ <a class="navbar-brand" href="#">Action Button (menu-flat.js)</a>
+ </div>
+ </div>
+ </nav>
+ <div class="container">
+ <div id="menu"></div>
+ <div style="height:50px">
+ <div id="select"></div>
+ </div>
+ <div class="radio-demo"></div>
+ <div class="checkbox-demo"></div>
+ <input class="text-demo">
+ <button class="button-demo">submit</button>
+ </div>
+ <script src="../js/vendor/jquery.js"></script>
+ <script src="../js/vendor/jquery-ui.js"></script>
+ <script src="../js/vendor.js"></script>
+ <script src="../js/vendor/bootstrap.js"></script>
+ <script src="../js/vendor/bootstrap-select.min.js"></script>
+
+ <script src="js/menu-flat.js"></script>
+ <script src="js/button-flat.js"></script>
+ <script src="js/radio-flat.js"></script>
+ <script src="js/checkbox-flat.js"></script>
+ <script src="js/textbox-flat.js"></script>
+ <script src="js/selectmenu-flat.js"></script>
+ <script src="js/main.js"></script>
+
+ <script>
+ $(document).ready(function() {
+ $("#menu").menuFlat({
+ name: "wok-dropdown-menu-0",
+ icon: "icon-edit-alt", //Set icon of the menu button.
+ label: 'Actions', //Set button text
+ content: [{
+ name: 'Add',
+ action: 'add',
+ icon: 'icon-plus-circled-1',
+ critical: false
+ }, {
+ name: 'Enable',
+ action: 'enable',
+ icon: 'icon-play-circled2',
+ critical: false
+ }, {
+ name: 'Edit',
+ action: 'edit',
+ icon: 'icon-pencil-2',
+ critical: false
+ }, {
+ name: 'Delete',
+ action: 'delete',
+ icon: 'icon-minus-circled-1',
+ critical: true
+ }]
+ });
+ $("wok-dropdown-menu-0-0").on("click", function() {
+ alert("First option selected");
+ });
+ $("wok-dropdown-menu-0-1").on("click", function() {
+ console.log("Second option selected");
+ });
+ $("#select").selectmenuFlat({
+ content: [1, 2, 3, 4, 5, 6], //Set content of the select menu
+ selected: 2 // set the selected option, starts from "1"
+ });
+ $("#select").selectmenuFlat("value", "4"); //Set value.
+ var t = $("#select").selectmenuFlat("value"); //Get value
+ console.log(t);
+ $(".radio-demo").radioFlat({
+ id: "t", //Base id of the radio set.
+ name: "test", //name of the radio.
+ whichChecked: 2, //First selected position, starts from 1.
+ content: ["apple", "banana", "orange", "cherry"] //set the content array.
+ });
+ $(".radio-demo").click(function() {
+ console.log($(".radio-demo").radioFlat("value")); //this is how to get the value of selected radio value
+ });
+ $(".checkbox-demo").checkboxFlat({
+ id: "t", //Checkbox base id.
+ name: "test", //Checkbox name.
+ content: ["apple", "banana", "orange", "cherry"], //Contents of the checkbox set.
+ checked: [1, 3] //Set the checked item, which starts with number 1.
+ });
+ $(".checkbox-demo").click(function() {
+ console.log($(".selector").checkboxFlat("value")); //Get value of the checked checkbox.
+ });
+ $(".text-demo").textboxFlat({
+ hint: "hint"
+ });
+ $(".text-demo").css({
+ "height": "30px",
+ "width": "200px"
+ });
+ $(".button-demo").buttonFlat();
+ });
+ </script>
+</body>
+
+</html>
diff --git a/ui/new-ui-samples/widgets/message.html b/ui/new-ui-samples/widgets/message.html
new file mode 100644
index 0000000..b8a2cf4
--- /dev/null
+++ b/ui/new-ui-samples/widgets/message.html
@@ -0,0 +1,49 @@
+<!--
+ *
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+-->
+
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="UTF-8">
+ <title>Message Demo</title>
+ <script src="../../../libs/jquery-1.10.0.min.js"></script>
+ <script src="../../../libs/jquery-ui.min.js"></script>
+ <script src="../message-flat.js"></script>
+ <link rel="stylesheet" href="../../../libs/themes/base/jquery-ui.min.css">
+ <link rel="stylesheet" href="../../../css/theme-default/message-flat.css">
+ <link rel="stylesheet" href="../../../fontello/css/animation.css">
+ <link rel="stylesheet" href="../../../fontello/css/fontello.css">
+ </head>
+ <body>
+ <div class="message-demo"></div>
+ <script>
+ $(document).ready(function() {
+ $(".message-demo").messageFlat({
+ contentMain: "This is a test", //Content you are going to add
+ contentConfirm: "Sure?", //Content that inform user whether they want to continue.
+ //Default value is: "Are you sure you want to go on?"
+ confirm: function() {
+ alert("comfirmed")
+ }
+ });
+ });
+ </script>
+ </body>
+</html>
diff --git a/ui/new-ui-samples/widgets/messagebar-flat.html b/ui/new-ui-samples/widgets/messagebar-flat.html
new file mode 100644
index 0000000..fd1417a
--- /dev/null
+++ b/ui/new-ui-samples/widgets/messagebar-flat.html
@@ -0,0 +1,49 @@
+<!--
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the 'License');
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="UTF-8">
+ <title>Sample of messagebar</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <link rel="stylesheet" href="../../../fontello/css/fontello.css">
+ <link rel="stylesheet" href="../../../fontello/css/animation.css">
+ <link rel="stylesheet" href="../../../libs/themes/base/jquery-ui.min.css">
+ <link rel="stylesheet" href="../../../css/theme-default/messagebar-flat.css">
+ <script src="../../../libs/jquery-1.10.0.min.js"></script>
+ <script src="../../../libs/jquery-ui.min.js"></script>
+ <script src="../messagebar-flat.js"></script>
+ </head>
+ <body>
+ <div class="message"></div>
+ <script>
+ $(document).ready(function() {
+ $(".message").messagebarFlat({
+ content: "This is a test",
+ color: "red",
+ dismissTime: 1000
+ });
+ });
+ </script>
+ </body>
+
+</html>
diff --git a/ui/new-ui-samples/widgets/tabs.html b/ui/new-ui-samples/widgets/tabs.html
new file mode 100644
index 0000000..a8c4b4d
--- /dev/null
+++ b/ui/new-ui-samples/widgets/tabs.html
@@ -0,0 +1,68 @@
+<!--
+ *
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2015
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+-->
+
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>Wok</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+
+<link rel="stylesheet" href="../../../libs/themes/base/jquery-ui.min.css">
+<link rel="stylesheet" href="../../../fontello/css/fontello.css">
+<link rel="stylesheet" href="../../../fontello/css/animation.css">
+<link rel="stylesheet" href="../../../css/theme-default.min.css">
+
+<script src="../../../libs/jquery-1.10.0.min.js"></script>
+<script src="../../../libs/jquery-ui.min.js"></script>
+<script src="../../../libs/jquery-ui-i18n.min.js"></script>
+<script src="../../../js/wok.min.js"></script>
+
+<style type="text/css">
+body {
+ background: none;
+}
+</style>
+<script>
+function init(){
+ $( "#tabs" ).tabs();
+}
+</script>
+</head>
+<body onload="init()">
+<div id="tabs">
+ <ul>
+ <li><a href="#tabs-1">Nunc tincidunt</a></li>
+ <li><a href="#tabs-2">Proin dolor</a></li>
+ <li><a href="#tabs-3">Aenean lacinia</a></li>
+ </ul>
+ <div id="tabs-1">
+ <p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
+ </div>
+ <div id="tabs-2">
+ <p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
+ </div>
+ <div id="tabs-3">
+ <p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
+ <p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
+ </div>
+</body>
+</html>
--
1.9.3
1
0
07 Aug '15
From: Daniel Henrique Barboza <dhbarboza82(a)gmail.com>
There are no official Kimchi support for VMs running with under 2048Mb
of RAM in Power systems. This patch set the default memory of templates
created in Power hosts to 2048, instead of 1280.
The 'memory' values were removed from the template_specs dict because
it is no longer supported - the default value will be either '1024' for
x86, '2048' for Power or any value defined in template.conf.
Signed-off-by: Daniel Henrique Barboza <dhbarboza82(a)gmail.com>
---
src/kimchi/osinfo.py | 30 ++++++++++++++++--------------
1 file changed, 16 insertions(+), 14 deletions(-)
diff --git a/src/kimchi/osinfo.py b/src/kimchi/osinfo.py
index 78eb828..4d3e80d 100644
--- a/src/kimchi/osinfo.py
+++ b/src/kimchi/osinfo.py
@@ -44,28 +44,26 @@ template_specs = {'x86': {'old': dict(disk_bus='ide',
cdrom_bus='scsi',
kbd_type="kbd",
kbd_bus='usb', mouse_bus='usb',
- tablet_bus='usb', memory=1280),
+ tablet_bus='usb'),
'modern': dict(disk_bus='virtio',
nic_model='virtio',
cdrom_bus='scsi',
kbd_bus='usb',
kbd_type="kbd",
- mouse_bus='usb', tablet_bus='usb',
- memory=1280)},
+ mouse_bus='usb', tablet_bus='usb')},
'ppc64le': {'old': dict(disk_bus='virtio',
nic_model='virtio',
cdrom_bus='scsi',
kbd_bus='usb',
kbd_type="keyboard",
- mouse_bus='usb', tablet_bus='usb',
- memory=1280),
+ mouse_bus='usb', tablet_bus='usb'),
'modern': dict(disk_bus='virtio',
nic_model='virtio',
cdrom_bus='scsi',
kbd_bus='usb',
kbd_type="keyboard",
- mouse_bus='usb', tablet_bus='usb',
- memory=1280)}}
+ mouse_bus='usb',
+ tablet_bus='usb')}}
custom_specs = {'fedora': {'22': dict(video_model='qxl')}}
@@ -89,6 +87,16 @@ icon_available_distros = [icon[5:-4] for icon in glob.glob1('%s/images/'
% paths.ui_dir, 'icon-*.png')]
+def _get_arch():
+ for arch, sub_archs in SUPPORTED_ARCHS.iteritems():
+ if os.uname()[4] in sub_archs:
+ return arch
+
+
+def _get_default_template_mem():
+ return 1024 if _get_arch() == 'x86' else 2048
+
+
def _get_tmpl_defaults():
"""
ConfigObj returns a dict like below when no changes were made in the
@@ -107,7 +115,7 @@ def _get_tmpl_defaults():
# Create dict with default values
tmpl_defaults = defaultdict(dict)
tmpl_defaults['main']['networks'] = ['default']
- tmpl_defaults['main']['memory'] = 1024
+ tmpl_defaults['main']['memory'] = _get_default_template_mem()
tmpl_defaults['storage']['pool'] = 'default'
tmpl_defaults['storage']['disk.0'] = {'size': 10, 'format': 'qcow2'}
tmpl_defaults['processor']['cpus'] = 1
@@ -157,12 +165,6 @@ def _get_tmpl_defaults():
defaults = _get_tmpl_defaults()
-def _get_arch():
- for arch, sub_archs in SUPPORTED_ARCHS.iteritems():
- if os.uname()[4] in sub_archs:
- return arch
-
-
def get_template_default(template_type, field):
host_arch = _get_arch()
# Assuming 'power' = 'ppc64le' because lookup() does the same,
--
2.4.3
2
2
Re: [Kimchi-devel] Fwd: Proposal for moving functionality from Kimchi to Ginger
by Daniel Henrique Barboza 07 Aug '15
by Daniel Henrique Barboza 07 Aug '15
07 Aug '15
On 08/04/2015 04:56 AM, Walter Niklaus wrote:
> Hi Daniel,
>
> sorry for missing the thread where this topic was discussed.
>
> I can fully understand the point about Basic Information and System
> Statistics being relevant for Virtualization management as well and I
> like the idea of potentially making it part of the base framework
> because they would be very usefull for other plugins, like
> Container-Management as well.
> The interesting question is then if some of the other functions
> wouldn't make sense to be part of the basic framework as well. Debug
> reports would be a classical candidate from my point of view, but
> wouldn't some of the other functions be usefull in the base as well ?
If we're really going in that approach (putting basic features in WoK),
I agree. We would have to
discuss each existing feature and evaluate if it belongs to kimchi,
ginger or wok.
>
> Looking at the problem form a different angle: wouldn't it make sense
> to package and deliver the base framework with the Ginger plugin by
> default because the Host-functionality Ginger is offering would be
> usefull for the other plugins like Virtualization and Containers ?
>
> What I missed in my previous mail is the aspect about platform
> specific functionality. This functionality, like PPC firmware update
> or IO-device management for Linux on z should be made available as
> individual plugins.
At this moment Ginger can handle multi-arch features fairly well. For
example, Firmware
Update does not appear when running the plug-in in an Intel computer.
The feature you mentioned,
IO-device management for Linux on Z, would be available only when
running Ginger in a Linux
for Z host.
There's absolutely nothing holding you from making a brand new plug-in
for the Z features instead
of adding them to Ginger, but it is important to know that Ginger is
designed for these scenarios.
You can even create a new UI tab in Ginger, something like 'Z
management' which would contain all Z related features. This tab would
only appear in a Linux on Z host. From the UI perspective it looks
like a brand new plug-in working together with Ginger common features in
the 'Administration' tab.
>
> Please let me know what you think about this option.
>
> Thanks,
> Walter.
>
>
> On 03.08.2015 18:51, Daniel Henrique Barboza wrote:
>> Hi Walter,
>>
>> We've had this discussion with the community a few months ago in the
>> thread
>>
>> "[RFC] Moving some features of Host tab to Ginger"
>>
>> And we agreed to start it by moving only Software Update,
>> Repositories and
>> Debug Reports from Kimchi to Ginger.
>>
>> The Basic Information and System Statistics can't be taken away from
>> Kimchi because there
>> are relevant information for the creation of VMs there, such as
>> Memory Available. But I agree
>> that these information fits nicely in Ginger too.
>>
>> One alternative (just came in my head now) is to move these "neutral"
>> functions
>> to a "Basic System Info" in WoK. That way both Kimchi and Ginger
>> users can access
>> the information.
>>
>>
>> Thanks,
>>
>>
>> Daniel
>>
>> On 08/03/2015 12:15 PM, Walter Niklaus wrote:
>>>
>>> After separating out Kimchi as an indvidual plugin from the base
>>> framework it would be great to have a clean separation between Host-
>>> and
>>> Virtualization Management functions. I'm planning to work on this topic
>>> in the next few weeks and have prepared a proposal of the
>>> functionsplit.
>>> Plugin functionality:
>>> - Ginger:
>>> - Basic Information
>>> - System Statistics
>>> - Network (Host NICs)
>>> - Storage/SAN (Host Storage)
>>> - User Management
>>> - Configuration Backup
>>> - Software Updates
>>> - Repositories
>>> - Debug Reports
>>> - PPC related functions: Firmware Update & Power Management
>>> - Kimchi:
>>> - Templates
>>> - Guests
>>> - Networks (virtual)
>>> - Storage (Pools for VMs)
>>>
>>> Since there are plans to restructure the UI for one of the next
>>> releases, I'm proposing to do only some minimal investments in
>>> reflecting this new finctionsplit. Therefore I'm proposing to make the
>>> Host tab as the one and only Tab for Ginger and move everything from
>>> the
>>> Administration Tab into the Host Tab. This would be just an
>>> intermediate solution till we implement the new UI design. Please see
>>> the attached PDF.
>>> Thanks in advance for your feedback.
>>>
>>> Walter.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Kimchi-devel mailing list
>>> Kimchi-devel(a)ovirt.org
>>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>
>>
>>
>> _______________________________________________
>> Kimchi-devel mailing list
>> Kimchi-devel(a)ovirt.org
>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>
4
6
Re: [Kimchi-devel] [PATCH 1/1] Enabling help page for wok base. This commit supports en_US only.
by Aline Manera 07 Aug '15
by Aline Manera 07 Aug '15
07 Aug '15
On 07/08/2015 03:33, Suresh Babu14 wrote:
> Hi Aline,
> Current WOK page has "Help" button, which renders blank page. If you
> think we don't need help page for WOK, i suggest we shouldn't have
> Help button. Or going with your line ""I think it is hard to us to
> point the user to any specific plugin like kimchi or ginger, as anyone
> can develop a wok plugin and host anywhere" -- we can always modify
> the help message to exclude what plugins can be installed.
>
I've just replied to other email in this thread about it.
There was a logic to do not display the help when the plugin does not
provide it. I am not sure it was moved to wok or not.
We need to check and do the appropriated fixes.
1
0
Re: [Kimchi-devel] [PATCH 1/1] Enabling help page for wok base. This commit supports en_US only.
by Aline Manera 07 Aug '15
by Aline Manera 07 Aug '15
07 Aug '15
On 06/08/2015 16:53, Harshal Patil wrote:
> If no one else is going to do that, then I don't mind implementing it.
> How are you going to track who is implementing what? Usually a github
> issue is used with tags like 'feature' (e.g.
> https://github.com/docker/distribution/issues/200)
Yeap! Please, open an issue on github and also add a comment there
saying you will do the work and I will assign it to you.
You will not be able to set the tag, but I can do that while assign the
issue to you.
> ----- Original message -----
> From: Aline Manera <alinefm(a)linux.vnet.ibm.com>
> To: Harshal Patil/India/IBM@IBMIN
> Cc: kimchi-devel(a)ovirt.org, sureshab(a)linux.vnet.ibm.com
> Subject: Re: [Kimchi-devel] [PATCH 1/1] Enabling help page for wok
> base. This commit supports en_US only.
> Date: Fri, Aug 7, 2015 1:12 AM
>
>
> On 06/08/2015 16:38, Harshal Patil wrote:
>> Sounds awesome Aline!
>> So we will have wok front page with just basic documentations on
>> API and nothing else?
>
> I thought in a "Welcome to Wok" message and some information about
> plugins install and what else is important.
>
> Are you going to implement it? If so, I suggest you to send
> mockups layouts prior doing the code itself. So we can opine on
> what to add, where to display, etc =)
>> what about host stats or basic info? Just making sure we are on
>> the same page.
>
> They will not be part of wok as they are not related to web server
> configuration.
> Probably creating an other plugin to expose the APIs we want and
> reuse for Kimchi and Ginger when needed.
>>
>> ----- Original message -----
>> From: Aline Manera <alinefm(a)linux.vnet.ibm.com>
>> <mailto:alinefm@linux.vnet.ibm.com>
>> To: Harshal Patil/India/IBM@IBMIN
>> Cc: kimchi-devel(a)ovirt.org <mailto:kimchi-devel@ovirt.org>,
>> sureshab(a)linux.vnet.ibm.com <mailto:sureshab@linux.vnet.ibm.com>
>> Subject: Re: [Kimchi-devel] [PATCH 1/1] Enabling help page
>> for wok base. This commit supports en_US only.
>> Date: Fri, Aug 7, 2015 12:32 AM
>>
>>
>> On 06/08/2015 14:42, Harshal Patil wrote:
>>> If you are looking at wok just as a web framework which
>>> developers can use to write plugins for, then it doesn't
>>> need to have any user facing webpage at all. Developers
>>> would need to interact with wok's API anyway.
>>> Now you can always create a marketplace for the wok plugins
>>> where users can download and install plugins on them on
>>> the fly and that could be the only page wok can serve on
>>> it's own without any plugins. ;-)
>>
>> Yeap!! I have thought about it too.
>>
>> My idea (for future, of course) is adding to wok a
>> "Configuration tab" so user can configure wok settings
>> through UI.
>> For example, which authentication method to use, which
>> plugins to install/uninstall/enable/disable, authorization
>> settings and any other setting related to the web sever config.
>>
>> It is the same approach we have on Jenkins.
>>> But if that's not on the table then wok could only display
>>> basic API usage for its plugin developers on default index
>>> page, probably a button to load bare minimum sample plugin
>>> as a proof of concept.
>>
>> Yeap! I think we should go on that way by now and on future
>> we can implement the "Configuration tab" for wok.
>>
>> Sounds a good plan for you?
>>>
>>> ----- Original message -----
>>> From: Aline Manera <alinefm(a)linux.vnet.ibm.com>
>>> <mailto:alinefm@linux.vnet.ibm.com>
>>> Sent by: kimchi-devel-bounces(a)ovirt.org
>>> <mailto:kimchi-devel-bounces@ovirt.org>
>>> To: sureshab(a)linux.vnet.ibm.com
>>> <mailto:sureshab@linux.vnet.ibm.com>,
>>> kimchi-devel(a)ovirt.org <mailto:kimchi-devel@ovirt.org>
>>> Cc:
>>> Subject: Re: [Kimchi-devel] [PATCH 1/1] Enabling help
>>> page for wok base. This commit supports en_US only.
>>> Date: Thu, Aug 6, 2015 8:02 PM
>>> I don't think we need a help page for Wok framework.
>>>
>>> We have a lot to discuss on that, but the initial idea
>>> was to load a
>>> simple page when running wok without any plugin.
>>> That page would describe the wok proposal - as a web
>>> server framework
>>> based on plugins.
>>>
>>> I think it is hard to us to point the user to any
>>> specific plugin like
>>> kimchi or ginger, as anyone can develop a wok plugin and
>>> host anywhere.
>>>
>>> I am more for a generic simple page and no help.
>>>
>>> More (and different) thoughts on it are more than
>>> welcome. =)
>>>
>>> On 04/08/2015 10:04, sureshab(a)linux.vnet.ibm.com
>>> <mailto:sureshab@linux.vnet.ibm.com> wrote:
>>> > From: Suresh Babu Angadi <sureshab(a)linux.vnet.ibm.com>
>>> <mailto:sureshab@linux.vnet.ibm.com>
>>> >
>>> > Signed-off-by: Suresh Babu Angadi
>>> <sureshab(a)linux.vnet.ibm.com>
>>> <mailto:sureshab@linux.vnet.ibm.com>
>>> > ---
>>> > configure.ac | 2 +
>>> > src/wok/config.py.in | 5 +
>>> > ui/js/src/wok.main.js | 9 +-
>>> > ui/pages/Makefile.am | 2 +-
>>> > ui/pages/help/Makefile.am | 34 +++++++
>>> > ui/pages/help/dita-help.xsl | 26 +++++
>>> > ui/pages/help/en_US/Makefile.am | 23 +++++
>>> > ui/pages/help/en_US/wokhelp.dita | 27 +++++
>>> > ui/pages/help/wok.css | 208
>>> +++++++++++++++++++++++++++++++++++++++
>>> > 9 files changed, 333 insertions(+), 3 deletions(-)
>>> > create mode 100644 ui/pages/help/Makefile.am
>>> > create mode 100644 ui/pages/help/dita-help.xsl
>>> > create mode 100644 ui/pages/help/en_US/Makefile.am
>>> > create mode 100644 ui/pages/help/en_US/wokhelp.dita
>>> > create mode 100644 ui/pages/help/wok.css
>>> >
>>> > diff --git a/configure.ac b/configure.ac
>>> > index 47c2e6c..ee4d793 100644
>>> > --- a/configure.ac
>>> > +++ b/configure.ac
>>> > @@ -115,6 +115,8 @@ AC_CONFIG_FILES([
>>> > ui/libs/themes/base/Makefile
>>> > ui/libs/themes/base/images/Makefile
>>> > ui/pages/Makefile
>>> > + ui/pages/help/Makefile
>>> > + ui/pages/help/en_US/Makefile
>>> > ui/pages/websockify/Makefile
>>> > contrib/Makefile
>>> > contrib/DEBIAN/Makefile
>>> > diff --git a/src/wok/config.py.in b/src/wok/config.py.in
>>> > index 5ffa936..c158a75 100644
>>> > --- a/src/wok/config.py.in
>>> > +++ b/src/wok/config.py.in
>>> > @@ -142,6 +142,11 @@ class WokConfig(dict):
>>> > '/wok-ui.html': {
>>> > 'tools.wokauth.on': True
>>> > },
>>> > + '/help': {
>>> > + 'tools.staticdir.on': True,
>>> > + 'tools.staticdir.dir': '%s/ui/pages/help'
>>> % paths.prefix,
>>> > + 'tools.nocache.on': True
>>> > + }
>>> > }
>>> >
>>> > def __init__(self):
>>> > diff --git a/ui/js/src/wok.main.js b/ui/js/src/wok.main.js
>>> > index f4c9940..3dd76b8 100644
>>> > --- a/ui/js/src/wok.main.js
>>> > +++ b/ui/js/src/wok.main.js
>>> > @@ -349,7 +349,12 @@ wok.checkHelpFile = function(path) {
>>> >
>>> > wok.openHelp = function(e) {
>>> > var tab = $('#nav-menu a.current');
>>> > - var url =
>>> $(tab).parent().find("input[name='helpPath']").val();
>>> > - window.open(url, "Wok Help");
>>> > + if (tab.length == 0 ){
>>> > + window.open("help/en_US/wokhelp.html","Wok Help")
>>> > + }
>>> > + else {
>>> > + var url =
>>> $(tab).parent().find("input[name='helpPath']").val();
>>> > + window.open(url, "Wok Help");
>>> > + }
>>> > e.preventDefault();
>>> > };
>>> > diff --git a/ui/pages/Makefile.am b/ui/pages/Makefile.am
>>> > index 68f4c92..b3f5c2e 100644
>>> > --- a/ui/pages/Makefile.am
>>> > +++ b/ui/pages/Makefile.am
>>> > @@ -15,7 +15,7 @@
>>> > # See the License for the specific language
>>> governing permissions and
>>> > # limitations under the License.
>>> >
>>> > -SUBDIRS = websockify
>>> > +SUBDIRS = websockify help
>>> >
>>> > htmldir = $(datadir)/wok/ui/pages
>>> >
>>> > diff --git a/ui/pages/help/Makefile.am
>>> b/ui/pages/help/Makefile.am
>>> > new file mode 100644
>>> > index 0000000..0dc8d9f
>>> > --- /dev/null
>>> > +++ b/ui/pages/help/Makefile.am
>>> > @@ -0,0 +1,34 @@
>>> > +# Copyright IBM Corp, 2014
>>> > +#
>>> > +# This library is free software; you can redistribute
>>> it and/or
>>> > +# modify it under the terms of the GNU Lesser General
>>> Public
>>> > +# License as published by the Free Software
>>> Foundation; either
>>> > +# version 2.1 of the License, or (at your option) any
>>> later version.
>>> > +#
>>> > +# This library is distributed in the hope that it
>>> will be useful,
>>> > +# but WITHOUT ANY WARRANTY; without even the implied
>>> warranty of
>>> > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR
>>> PURPOSE. See the GNU
>>> > +# Lesser General Public License for more details.
>>> > +#
>>> > +# You should have received a copy of the GNU Lesser
>>> General Public
>>> > +# License along with this library; if not, write to
>>> the Free Software
>>> > +# Foundation, Inc., 51 Franklin Street, Fifth Floor,
>>> Boston, MA 02110-1301 USA
>>> > +
>>> > +SUBDIRS = en_US
>>> > +
>>> > +DITA_HTML_FILES = $(patsubst %.dita,%.html,$(wildcard
>>> */*.dita))
>>> > +HTML_FILES = $(if $(DITA_HTML_FILES),
>>> $(DITA_HTML_FILES), $(wildcard */*.html))
>>> > +DITA_XSL_FILE = dita-help.xsl
>>> > +
>>> > +EXTRA_DIST = $(DITA_XSL_FILE)
>>> > +
>>> > +helpdir = $(datadir)/wok/ui/pages/help
>>> > +
>>> > +dist_help_DATA = wok.css
>>> > +
>>> > +all: $(HTML_FILES) $(wildcard */*.dita)
>>> > +
>>> > +%.html: %.dita $(DITA_XSL_FILE)
>>> > + xsltproc -o $@ $(DITA_XSL_FILE) $<
>>> > +
>>> > +CLEANFILES = $(HTML_FILES)
>>> > \ No newline at end of file
>>> > diff --git a/ui/pages/help/dita-help.xsl
>>> b/ui/pages/help/dita-help.xsl
>>> > new file mode 100644
>>> > index 0000000..fb49855
>>> > --- /dev/null
>>> > +++ b/ui/pages/help/dita-help.xsl
>>> > @@ -0,0 +1,26 @@
>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>> > +<xsl:stylesheet version="1.0"
>>> > +
>>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>>> <http://www.w3.org/1999/XSL/Transform>
>>> > + xmlns="http://www.w3.org/1999/xhtml"
>>> <http://www.w3.org/1999/xhtml>>
>>> > + <xsl:output method="xml" indent="yes"
>>> encoding="UTF-8" />
>>> > +
>>> > + <xsl:template match="/">
>>> > + <html>
>>> > + <head>
>>> > + <title><xsl:value-of select="/cshelp/title" /></title>
>>> > + <meta charset="UTF-8" />
>>> > + <link rel="shortcut icon"
>>> href="https://mail.notes.na.collabserv.com/livemail/0/../images/logo.ico"
>>> <https://mail.notes.na.collabserv.com/livemail/0/../images/logo.ico>
>>> />
>>> > + <link rel="stylesheet"
>>> type="text/css"
>>> href="https://mail.notes.na.collabserv.com/livemail/0/wok.css"
>>> <https://mail.notes.na.collabserv.com/livemail/0/wok.css> />
>>> > + </head>
>>> > + <body>
>>> > + <xsl:apply-templates select="//cshelp" />
>>> > + </body>
>>> > + </html>
>>> > + </xsl:template>
>>> > +
>>> > + <xsl:template match="cshelp">
>>> > + <h1><xsl:value-of select="title" /></h1>
>>> > + <p class="shortdesc"><xsl:value-of
>>> select="shortdesc" /></p>
>>> > + <p class="csbody"><xsl:copy-of
>>> select="csbody/node()" /></p>
>>> > + </xsl:template>
>>> > +</xsl:stylesheet>
>>> > diff --git a/ui/pages/help/en_US/Makefile.am
>>> b/ui/pages/help/en_US/Makefile.am
>>> > new file mode 100644
>>> > index 0000000..b1e807d
>>> > --- /dev/null
>>> > +++ b/ui/pages/help/en_US/Makefile.am
>>> > @@ -0,0 +1,23 @@
>>> > +# Copyright IBM Corp, 2014
>>> > +#
>>> > +# This library is free software; you can redistribute
>>> it and/or
>>> > +# modify it under the terms of the GNU Lesser General
>>> Public
>>> > +# License as published by the Free Software
>>> Foundation; either
>>> > +# version 2.1 of the License, or (at your option) any
>>> later version.
>>> > +#
>>> > +# This library is distributed in the hope that it
>>> will be useful,
>>> > +# but WITHOUT ANY WARRANTY; without even the implied
>>> warranty of
>>> > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR
>>> PURPOSE. See the GNU
>>> > +# Lesser General Public License for more details.
>>> > +#
>>> > +# You should have received a copy of the GNU Lesser
>>> General Public
>>> > +# License along with this library; if not, write to
>>> the Free Software
>>> > +# Foundation, Inc., 51 Franklin Street, Fifth Floor,
>>> Boston, MA 02110-1301 USA
>>> > +
>>> > +en_US_helpdir = $(datadir)/wok/ui/pages/help/en_US
>>> > +
>>> > +dist_en_US_help_DATA = $(wildcard *.html) $(NULL)
>>> > +
>>> > +EXTRA_DIST = $(wildcard *.dita)
>>> > +
>>> > +CLEANFILES = $(wildcard *.html)
>>> > \ No newline at end of file
>>> > diff --git a/ui/pages/help/en_US/wokhelp.dita
>>> b/ui/pages/help/en_US/wokhelp.dita
>>> > new file mode 100644
>>> > index 0000000..582e47b
>>> > --- /dev/null
>>> > +++ b/ui/pages/help/en_US/wokhelp.dita
>>> > @@ -0,0 +1,27 @@
>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>> > +<!--Arbortext, Inc., 1988-2011, v.4002-->
>>> > +<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
>>> > + "..\dtd\cshelp.dtd">
>>> > +<?Pub Sty _display FontColor="red"?>
>>> > +<?Pub Inc?>
>>> > +<!--This DITA specialized document type is not
>>> supported by the Authoring Tools development team.
>>> > +For support please see:
>>> > +https://w3.opensource.ibm.com/projects/dita-cshelp/-->
>>> > +<cshelp id="wokbase" xml:lang="en-us">
>>> > +<title>Wok (Webserver Originated from Kimchi)</title>
>>> > +<shortdesc>Wok is a cherrypy-based web framework with
>>> HTML5 support that is extended by plugins which expose
>>> functionality through REST APIs.</shortdesc>
>>> > +<csbody>
>>> > +<p>Currently available plugins are Kimchi
>>> (Virtualization Management) and Ginger (System
>>> Administration).
>>> > +Wok comes with a sample plugin for education
>>> purposes.<ul>
>>> > +<li><uicontrol>Download Kimchi : </uicontrol>
>>> > +<a
>>> href="https://github.com/kimchi-project/kimchi/tree/wok"
>>> <https://github.com/kimchi-project/kimchi/tree/wok>
>>> > +target="_blank"
>>> >https://github.com/kimchi-project/kimchi/tree/wok</a>
>>> > +</li>
>>> > +<li><uicontrol>Download Ginger : </uicontrol>
>>> > +<a
>>> href="https://github.com/kimchi-project/ginger/tree/ginger_wok"
>>> <https://github.com/kimchi-project/ginger/tree/ginger_wok>
>>> > +target="_blank"
>>> >https://github.com/kimchi-project/ginger/tree/ginger_wok</a>
>>> > +</li>
>>> > +</ul>
>>> > +</p>
>>> > +</csbody>
>>> > +</cshelp>
>>> > diff --git a/ui/pages/help/wok.css b/ui/pages/help/wok.css
>>> > new file mode 100644
>>> > index 0000000..32fae4a
>>> > --- /dev/null
>>> > +++ b/ui/pages/help/wok.css
>>> > @@ -0,0 +1,208 @@
>>> > +/*
>>> > + * Project Kimchi
>>> > + *
>>> > + * Copyright IBM, Corp. 2014
>>> > + *
>>> > + * Licensed under the Apache License, Version 2.0
>>> (the "License");
>>> > + * you may not use this file except in compliance
>>> with the License.
>>> > + * You may obtain a copy of the License at
>>> > + *
>>> > + * http://www.apache.org/licenses/LICENSE-2.0
>>> > + *
>>> > + * Unless required by applicable law or agreed to in
>>> writing, software
>>> > + * distributed under the License is distributed on an
>>> "AS IS" BASIS,
>>> > + * WITHOUT 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 {
>>> > + background: #FFFFFF;
>>> > + margin-bottom: 1em;
>>> > + margin-left: .5em;
>>> > +}
>>> > +
>>> > +bold {
>>> > + font-weight: bold;
>>> > +}
>>> > +
>>> > +boldItalic {
>>> > + font-weight: bold;
>>> > + font-style: italic;
>>> > +}
>>> > +
>>> > +italic {
>>> > + font-style: italic;
>>> > +}
>>> > +
>>> > +underlined {
>>> > + text-decoration: underline;
>>> > +}
>>> > +
>>> > +uicontrol {
>>> > + font-weight: bold;
>>> > +}
>>> > +
>>> > +filepath {
>>> > + font-family: monospace, monospace;
>>> > +}.option {
>>> > + font-family: monospace, monospace;
>>> > +}
>>> > +
>>> > +cmdname {
>>> > + font-weight: bold;
>>> > + font-family: monospace, monospace;
>>> > +}
>>> > +
>>> > +.defparmname {
>>> > + font-weight: bold;
>>> > + text-decoration: underline;
>>> > + font-family: monospace, monospace;
>>> > +}
>>> > +
>>> > +.kwd {
>>> > + font-weight: bold;
>>> > +}
>>> > +
>>> > +.defkwd {
>>> > + font-weight: bold;
>>> > + text-decoration: underline;
>>> > +}
>>> > +
>>> > +var {
>>> > + font-style : italic;
>>> > +}
>>> > +
>>> > +strongwintitle {
>>> > + font-weight : bold;
>>> > +}
>>> > +
>>> > +parmname {
>>> > + font-weight: bold;
>>> > + font-family: monospace, monospace;
>>> > + white-space: nowrap;
>>> > +}
>>> > +
>>> > +code {
>>> > + font-family: monospace, monospace;
>>> > +}
>>> > +
>>> > +pre {
>>> > + font-family: monospace, monospace;
>>> > +}
>>> > +
>>> > +CITE {
>>> > + font-style: italic;
>>> > +}
>>> > +
>>> > +EM {
>>> > + font-style: italic;
>>> > +}
>>> > +
>>> > +STRONG {
>>> > + font-weight: bold;
>>> > +}
>>> > +
>>> > +VAR {
>>> > + font-style: italic;
>>> > +}
>>> > +
>>> > +dt {
>>> > + font-weight: bold;
>>> > +}
>>> > +
>>> >
>>> +/***********************************************************
>>> > + * Basic fonts
>>> > +
>>> ***********************************************************/
>>> > +body,
>>> > +td,
>>> > +th,
>>> > +caption {
>>> > + font-family: Verdana, Arial, Helvetica, sans-serif;
>>> > + font-size: 10pt;
>>> > +}
>>> > +
>>> > +pre, code {
>>> > + font-family: MS Courier New, Courier, monospace;
>>> > +}
>>> > +
>>> > +h1, h2, h3 {
>>> > + font-size: 12pt;
>>> > + font-weight: bold;
>>> > + color: #336699;
>>> > +}
>>> > +
>>> > +h4 {
>>> > + font-size: 10pt;
>>> > + font-weight: bold;
>>> > + color: #336699;
>>> > +}
>>> > +
>>> >
>>> +/***********************************************************
>>> > + * Basic indents, padding, and margin
>>> > +
>>> ***********************************************************/
>>> > +body {
>>> > + color: black;
>>> > + background-color: white;
>>> > + margin: 0;
>>> > + padding-top: 0.2em;
>>> > + padding-left: 0.6em;
>>> > + padding-right: 0.2em;
>>> > + padding-bottom: 1em;
>>> > +}
>>> > +
>>> > +h1,
>>> > +h2,
>>> > +h3,
>>> > +h4,
>>> > +h5,
>>> > +h6 {
>>> > + padding: 0;
>>> > + margin-top: 1em;
>>> > + margin-bottom: 0.75em;
>>> > + margin-left: 0;
>>> > + margin-right: 0;
>>> > +}
>>> > +
>>> > +address,
>>> > +dl,
>>> > +li,
>>> > +p {
>>> > + padding: 0;
>>> > + margin-top: 0.75em;
>>> > + margin-bottom: 0.75em;
>>> > + margin-left: 0;
>>> > + margin-right: 0;
>>> > + line-height: 125%;
>>> > +}
>>> > +
>>> > +td dl {
>>> > + margin-left: 2em;
>>> > +}
>>> > +
>>> > +pre {
>>> > + padding: 0;
>>> > + margin-top: 0.75em;
>>> > + margin-bottom: 0.75em;
>>> > + margin-left: 2em;
>>> > + margin-right: 0;
>>> > +}
>>> > +
>>> > +ol,
>>> > +ul {
>>> > + padding: 0;
>>> > + margin-top: 0.75em;
>>> > + margin-bottom: 0.75em;
>>> > + margin-left: 2.00em;
>>> > + margin-right: 0;
>>> > +}
>>> > +
>>> > +dd {
>>> > + margin-left: 3.00em;
>>> > + margin-top: 0.75em;
>>> > + margin-bottom: 0.75em;
>>> > +}
>>> > +
>>> > +dt {
>>> > + margin-left: 1.00em;
>>> > + margin-top: 0.75em;
>>> > +}
>>>
>>> _______________________________________________
>>> Kimchi-devel mailing list
>>> Kimchi-devel(a)ovirt.org <mailto:Kimchi-devel@ovirt.org>
>>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>>
>
4
6
Re: [Kimchi-devel] [PATCH 1/1] Enabling help page for wok base. This commit supports en_US only.
by Aline Manera 07 Aug '15
by Aline Manera 07 Aug '15
07 Aug '15
Thanks, Harshal!
To get an issue assigned to you, you need to be part of the
Collaborators group in the kimchi-project organization on Github.
Once you get there I will assign it to you.
On 07/08/2015 00:28, Harshal Patil wrote:
> Here it is, https://github.com/kimchi-project/kimchi/issues/718
>
> ----- Original message -----
> From: Aline Manera <alinefm(a)linux.vnet.ibm.com>
> To: Harshal Patil/India/IBM@IBMIN
> Cc: kimchi-devel(a)ovirt.org, sureshab(a)linux.vnet.ibm.com
> Subject: Re: [Kimchi-devel] [PATCH 1/1] Enabling help page for wok
> base. This commit supports en_US only.
> Date: Fri, Aug 7, 2015 1:30 AM
>
>
> On 06/08/2015 16:53, Harshal Patil wrote:
>> If no one else is going to do that, then I don't mind
>> implementing it. How are you going to track who is implementing
>> what? Usually a github issue is used with tags like 'feature'
>> (e.g. https://github.com/docker/distribution/issues/200)
>
> Yeap! Please, open an issue on github and also add a comment there
> saying you will do the work and I will assign it to you.
>
> You will not be able to set the tag, but I can do that while
> assign the issue to you.
>>
>> ----- Original message -----
>> From: Aline Manera <alinefm(a)linux.vnet.ibm.com>
>> <mailto:alinefm@linux.vnet.ibm.com>
>> To: Harshal Patil/India/IBM@IBMIN
>> Cc: kimchi-devel(a)ovirt.org <mailto:kimchi-devel@ovirt.org>,
>> sureshab(a)linux.vnet.ibm.com <mailto:sureshab@linux.vnet.ibm.com>
>> Subject: Re: [Kimchi-devel] [PATCH 1/1] Enabling help page
>> for wok base. This commit supports en_US only.
>> Date: Fri, Aug 7, 2015 1:12 AM
>>
>>
>> On 06/08/2015 16:38, Harshal Patil wrote:
>>> Sounds awesome Aline!
>>> So we will have wok front page with just basic
>>> documentations on API and nothing else?
>>
>> I thought in a "Welcome to Wok" message and some information
>> about plugins install and what else is important.
>>
>> Are you going to implement it? If so, I suggest you to send
>> mockups layouts prior doing the code itself. So we can opine
>> on what to add, where to display, etc =)
>>> what about host stats or basic info? Just making sure we are
>>> on the same page.
>>
>> They will not be part of wok as they are not related to web
>> server configuration.
>> Probably creating an other plugin to expose the APIs we want
>> and reuse for Kimchi and Ginger when needed.
>>>
>>> ----- Original message -----
>>> From: Aline Manera <alinefm(a)linux.vnet.ibm.com>
>>> <mailto:alinefm@linux.vnet.ibm.com>
>>> To: Harshal Patil/India/IBM@IBMIN
>>> Cc: kimchi-devel(a)ovirt.org
>>> <mailto:kimchi-devel@ovirt.org>,
>>> sureshab(a)linux.vnet.ibm.com
>>> <mailto:sureshab@linux.vnet.ibm.com>
>>> Subject: Re: [Kimchi-devel] [PATCH 1/1] Enabling help
>>> page for wok base. This commit supports en_US only.
>>> Date: Fri, Aug 7, 2015 12:32 AM
>>>
>>>
>>> On 06/08/2015 14:42, Harshal Patil wrote:
>>>> If you are looking at wok just as a web framework which
>>>> developers can use to write plugins for, then it
>>>> doesn't need to have any user facing webpage at all.
>>>> Developers would need to interact with wok's API anyway.
>>>> Now you can always create a marketplace for the wok
>>>> plugins where users can download and install plugins on
>>>> them on the fly and that could be the only page wok can
>>>> serve on it's own without any plugins. ;-)
>>>
>>> Yeap!! I have thought about it too.
>>>
>>> My idea (for future, of course) is adding to wok a
>>> "Configuration tab" so user can configure wok settings
>>> through UI.
>>> For example, which authentication method to use, which
>>> plugins to install/uninstall/enable/disable,
>>> authorization settings and any other setting related to
>>> the web sever config.
>>>
>>> It is the same approach we have on Jenkins.
>>>> But if that's not on the table then wok could only
>>>> display basic API usage for its plugin developers
>>>> on default index page, probably a button to load bare
>>>> minimum sample plugin as a proof of concept.
>>>
>>> Yeap! I think we should go on that way by now and on
>>> future we can implement the "Configuration tab" for wok.
>>>
>>> Sounds a good plan for you?
>>>>
>>>> ----- Original message -----
>>>> From: Aline Manera <alinefm(a)linux.vnet.ibm.com>
>>>> <mailto:alinefm@linux.vnet.ibm.com>
>>>> Sent by: kimchi-devel-bounces(a)ovirt.org
>>>> <mailto:kimchi-devel-bounces@ovirt.org>
>>>> To: sureshab(a)linux.vnet.ibm.com
>>>> <mailto:sureshab@linux.vnet.ibm.com>,
>>>> kimchi-devel(a)ovirt.org <mailto:kimchi-devel@ovirt.org>
>>>> Cc:
>>>> Subject: Re: [Kimchi-devel] [PATCH 1/1] Enabling
>>>> help page for wok base. This commit supports en_US
>>>> only.
>>>> Date: Thu, Aug 6, 2015 8:02 PM
>>>> I don't think we need a help page for Wok framework.
>>>>
>>>> We have a lot to discuss on that, but the initial
>>>> idea was to load a
>>>> simple page when running wok without any plugin.
>>>> That page would describe the wok proposal - as a
>>>> web server framework
>>>> based on plugins.
>>>>
>>>> I think it is hard to us to point the user to any
>>>> specific plugin like
>>>> kimchi or ginger, as anyone can develop a wok
>>>> plugin and host anywhere.
>>>>
>>>> I am more for a generic simple page and no help.
>>>>
>>>> More (and different) thoughts on it are more than
>>>> welcome. =)
>>>>
>>>> On 04/08/2015 10:04, sureshab(a)linux.vnet.ibm.com
>>>> <mailto:sureshab@linux.vnet.ibm.com> wrote:
>>>> > From: Suresh Babu Angadi
>>>> <sureshab(a)linux.vnet.ibm.com>
>>>> <mailto:sureshab@linux.vnet.ibm.com>
>>>> >
>>>> > Signed-off-by: Suresh Babu Angadi
>>>> <sureshab(a)linux.vnet.ibm.com>
>>>> <mailto:sureshab@linux.vnet.ibm.com>
>>>> > ---
>>>> > configure.ac | 2 +
>>>> > src/wok/config.py.in | 5 +
>>>> > ui/js/src/wok.main.js | 9 +-
>>>> > ui/pages/Makefile.am | 2 +-
>>>> > ui/pages/help/Makefile.am | 34 +++++++
>>>> > ui/pages/help/dita-help.xsl | 26 +++++
>>>> > ui/pages/help/en_US/Makefile.am | 23 +++++
>>>> > ui/pages/help/en_US/wokhelp.dita | 27 +++++
>>>> > ui/pages/help/wok.css | 208
>>>> +++++++++++++++++++++++++++++++++++++++
>>>> > 9 files changed, 333 insertions(+), 3 deletions(-)
>>>> > create mode 100644 ui/pages/help/Makefile.am
>>>> > create mode 100644 ui/pages/help/dita-help.xsl
>>>> > create mode 100644 ui/pages/help/en_US/Makefile.am
>>>> > create mode 100644 ui/pages/help/en_US/wokhelp.dita
>>>> > create mode 100644 ui/pages/help/wok.css
>>>> >
>>>> > diff --git a/configure.ac b/configure.ac
>>>> > index 47c2e6c..ee4d793 100644
>>>> > --- a/configure.ac
>>>> > +++ b/configure.ac
>>>> > @@ -115,6 +115,8 @@ AC_CONFIG_FILES([
>>>> > ui/libs/themes/base/Makefile
>>>> > ui/libs/themes/base/images/Makefile
>>>> > ui/pages/Makefile
>>>> > + ui/pages/help/Makefile
>>>> > + ui/pages/help/en_US/Makefile
>>>> > ui/pages/websockify/Makefile
>>>> > contrib/Makefile
>>>> > contrib/DEBIAN/Makefile
>>>> > diff --git a/src/wok/config.py.in
>>>> b/src/wok/config.py.in
>>>> > index 5ffa936..c158a75 100644
>>>> > --- a/src/wok/config.py.in
>>>> > +++ b/src/wok/config.py.in
>>>> > @@ -142,6 +142,11 @@ class WokConfig(dict):
>>>> > '/wok-ui.html': {
>>>> > 'tools.wokauth.on': True
>>>> > },
>>>> > + '/help': {
>>>> > + 'tools.staticdir.on': True,
>>>> > + 'tools.staticdir.dir': '%s/ui/pages/help' %
>>>> paths.prefix,
>>>> > + 'tools.nocache.on': True
>>>> > + }
>>>> > }
>>>> >
>>>> > def __init__(self):
>>>> > diff --git a/ui/js/src/wok.main.js
>>>> b/ui/js/src/wok.main.js
>>>> > index f4c9940..3dd76b8 100644
>>>> > --- a/ui/js/src/wok.main.js
>>>> > +++ b/ui/js/src/wok.main.js
>>>> > @@ -349,7 +349,12 @@ wok.checkHelpFile =
>>>> function(path) {
>>>> >
>>>> > wok.openHelp = function(e) {
>>>> > var tab = $('#nav-menu a.current');
>>>> > - var url =
>>>> $(tab).parent().find("input[name='helpPath']").val();
>>>> > - window.open(url, "Wok Help");
>>>> > + if (tab.length == 0 ){
>>>> > + window.open("help/en_US/wokhelp.html","Wok Help")
>>>> > + }
>>>> > + else {
>>>> > + var url =
>>>> $(tab).parent().find("input[name='helpPath']").val();
>>>> > + window.open(url, "Wok Help");
>>>> > + }
>>>> > e.preventDefault();
>>>> > };
>>>> > diff --git a/ui/pages/Makefile.am
>>>> b/ui/pages/Makefile.am
>>>> > index 68f4c92..b3f5c2e 100644
>>>> > --- a/ui/pages/Makefile.am
>>>> > +++ b/ui/pages/Makefile.am
>>>> > @@ -15,7 +15,7 @@
>>>> > # See the License for the specific language
>>>> governing permissions and
>>>> > # limitations under the License.
>>>> >
>>>> > -SUBDIRS = websockify
>>>> > +SUBDIRS = websockify help
>>>> >
>>>> > htmldir = $(datadir)/wok/ui/pages
>>>> >
>>>> > diff --git a/ui/pages/help/Makefile.am
>>>> b/ui/pages/help/Makefile.am
>>>> > new file mode 100644
>>>> > index 0000000..0dc8d9f
>>>> > --- /dev/null
>>>> > +++ b/ui/pages/help/Makefile.am
>>>> > @@ -0,0 +1,34 @@
>>>> > +# Copyright IBM Corp, 2014
>>>> > +#
>>>> > +# This library is free software; you can
>>>> redistribute it and/or
>>>> > +# modify it under the terms of the GNU Lesser
>>>> General Public
>>>> > +# License as published by the Free Software
>>>> Foundation; either
>>>> > +# version 2.1 of the License, or (at your
>>>> option) any later version.
>>>> > +#
>>>> > +# This library is distributed in the hope that
>>>> it will be useful,
>>>> > +# but WITHOUT ANY WARRANTY; without even the
>>>> implied warranty of
>>>> > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR
>>>> PURPOSE. See the GNU
>>>> > +# Lesser General Public License for more details.
>>>> > +#
>>>> > +# You should have received a copy of the GNU
>>>> Lesser General Public
>>>> > +# License along with this library; if not, write
>>>> to the Free Software
>>>> > +# Foundation, Inc., 51 Franklin Street, Fifth
>>>> Floor, Boston, MA 02110-1301 USA
>>>> > +
>>>> > +SUBDIRS = en_US
>>>> > +
>>>> > +DITA_HTML_FILES = $(patsubst
>>>> %.dita,%.html,$(wildcard */*.dita))
>>>> > +HTML_FILES = $(if $(DITA_HTML_FILES),
>>>> $(DITA_HTML_FILES), $(wildcard */*.html))
>>>> > +DITA_XSL_FILE = dita-help.xsl
>>>> > +
>>>> > +EXTRA_DIST = $(DITA_XSL_FILE)
>>>> > +
>>>> > +helpdir = $(datadir)/wok/ui/pages/help
>>>> > +
>>>> > +dist_help_DATA = wok.css
>>>> > +
>>>> > +all: $(HTML_FILES) $(wildcard */*.dita)
>>>> > +
>>>> > +%.html: %.dita $(DITA_XSL_FILE)
>>>> > + xsltproc -o $@ $(DITA_XSL_FILE) $<
>>>> > +
>>>> > +CLEANFILES = $(HTML_FILES)
>>>> > \ No newline at end of file
>>>> > diff --git a/ui/pages/help/dita-help.xsl
>>>> b/ui/pages/help/dita-help.xsl
>>>> > new file mode 100644
>>>> > index 0000000..fb49855
>>>> > --- /dev/null
>>>> > +++ b/ui/pages/help/dita-help.xsl
>>>> > @@ -0,0 +1,26 @@
>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>> > +<xsl:stylesheet version="1.0"
>>>> > +
>>>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>>>> <http://www.w3.org/1999/XSL/Transform>
>>>> > + xmlns="http://www.w3.org/1999/xhtml"
>>>> <http://www.w3.org/1999/xhtml>>
>>>> > + <xsl:output method="xml" indent="yes"
>>>> encoding="UTF-8" />
>>>> > +
>>>> > + <xsl:template match="/">
>>>> > + <html>
>>>> > + <head>
>>>> > + <title><xsl:value-of select="/cshelp/title"
>>>> /></title>
>>>> > + <meta charset="UTF-8" />
>>>> > + <link rel="shortcut icon"
>>>> href="https://mail.notes.na.collabserv.com/livemail/0/../images/logo.ico"
>>>> <https://mail.notes.na.collabserv.com/livemail/0/../images/logo.ico>
>>>> />
>>>> > + <link rel="stylesheet"
>>>> type="text/css"
>>>> href="https://mail.notes.na.collabserv.com/livemail/0/wok.css"
>>>> <https://mail.notes.na.collabserv.com/livemail/0/wok.css>
>>>> />
>>>> > + </head>
>>>> > + <body>
>>>> > + <xsl:apply-templates select="//cshelp" />
>>>> > + </body>
>>>> > + </html>
>>>> > + </xsl:template>
>>>> > +
>>>> > + <xsl:template match="cshelp">
>>>> > + <h1><xsl:value-of select="title" /></h1>
>>>> > + <p class="shortdesc"><xsl:value-of
>>>> select="shortdesc" /></p>
>>>> > + <p class="csbody"><xsl:copy-of
>>>> select="csbody/node()" /></p>
>>>> > + </xsl:template>
>>>> > +</xsl:stylesheet>
>>>> > diff --git a/ui/pages/help/en_US/Makefile.am
>>>> b/ui/pages/help/en_US/Makefile.am
>>>> > new file mode 100644
>>>> > index 0000000..b1e807d
>>>> > --- /dev/null
>>>> > +++ b/ui/pages/help/en_US/Makefile.am
>>>> > @@ -0,0 +1,23 @@
>>>> > +# Copyright IBM Corp, 2014
>>>> > +#
>>>> > +# This library is free software; you can
>>>> redistribute it and/or
>>>> > +# modify it under the terms of the GNU Lesser
>>>> General Public
>>>> > +# License as published by the Free Software
>>>> Foundation; either
>>>> > +# version 2.1 of the License, or (at your
>>>> option) any later version.
>>>> > +#
>>>> > +# This library is distributed in the hope that
>>>> it will be useful,
>>>> > +# but WITHOUT ANY WARRANTY; without even the
>>>> implied warranty of
>>>> > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR
>>>> PURPOSE. See the GNU
>>>> > +# Lesser General Public License for more details.
>>>> > +#
>>>> > +# You should have received a copy of the GNU
>>>> Lesser General Public
>>>> > +# License along with this library; if not, write
>>>> to the Free Software
>>>> > +# Foundation, Inc., 51 Franklin Street, Fifth
>>>> Floor, Boston, MA 02110-1301 USA
>>>> > +
>>>> > +en_US_helpdir = $(datadir)/wok/ui/pages/help/en_US
>>>> > +
>>>> > +dist_en_US_help_DATA = $(wildcard *.html) $(NULL)
>>>> > +
>>>> > +EXTRA_DIST = $(wildcard *.dita)
>>>> > +
>>>> > +CLEANFILES = $(wildcard *.html)
>>>> > \ No newline at end of file
>>>> > diff --git a/ui/pages/help/en_US/wokhelp.dita
>>>> b/ui/pages/help/en_US/wokhelp.dita
>>>> > new file mode 100644
>>>> > index 0000000..582e47b
>>>> > --- /dev/null
>>>> > +++ b/ui/pages/help/en_US/wokhelp.dita
>>>> > @@ -0,0 +1,27 @@
>>>> > +<?xml version="1.0" encoding="UTF-8"?>
>>>> > +<!--Arbortext, Inc., 1988-2011, v.4002-->
>>>> > +<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA
>>>> CSHelp//EN"
>>>> > + "..\dtd\cshelp.dtd">
>>>> > +<?Pub Sty _display FontColor="red"?>
>>>> > +<?Pub Inc?>
>>>> > +<!--This DITA specialized document type is not
>>>> supported by the Authoring Tools development team.
>>>> > +For support please see:
>>>> >
>>>> +https://w3.opensource.ibm.com/projects/dita-cshelp/-->
>>>> > +<cshelp id="wokbase" xml:lang="en-us">
>>>> > +<title>Wok (Webserver Originated from
>>>> Kimchi)</title>
>>>> > +<shortdesc>Wok is a cherrypy-based web framework
>>>> with HTML5 support that is extended by plugins
>>>> which expose functionality through REST
>>>> APIs.</shortdesc>
>>>> > +<csbody>
>>>> > +<p>Currently available plugins are Kimchi
>>>> (Virtualization Management) and Ginger (System
>>>> Administration).
>>>> > +Wok comes with a sample plugin for education
>>>> purposes.<ul>
>>>> > +<li><uicontrol>Download Kimchi : </uicontrol>
>>>> > +<a
>>>> href="https://github.com/kimchi-project/kimchi/tree/wok"
>>>> <https://github.com/kimchi-project/kimchi/tree/wok>
>>>> > +target="_blank"
>>>> >https://github.com/kimchi-project/kimchi/tree/wok</a>
>>>> > +</li>
>>>> > +<li><uicontrol>Download Ginger : </uicontrol>
>>>> > +<a
>>>> href="https://github.com/kimchi-project/ginger/tree/ginger_wok"
>>>> <https://github.com/kimchi-project/ginger/tree/ginger_wok>
>>>> > +target="_blank"
>>>> >https://github.com/kimchi-project/ginger/tree/ginger_wok</a>
>>>> > +</li>
>>>> > +</ul>
>>>> > +</p>
>>>> > +</csbody>
>>>> > +</cshelp>
>>>> > diff --git a/ui/pages/help/wok.css
>>>> b/ui/pages/help/wok.css
>>>> > new file mode 100644
>>>> > index 0000000..32fae4a
>>>> > --- /dev/null
>>>> > +++ b/ui/pages/help/wok.css
>>>> > @@ -0,0 +1,208 @@
>>>> > +/*
>>>> > + * Project Kimchi
>>>> > + *
>>>> > + * Copyright IBM, Corp. 2014
>>>> > + *
>>>> > + * Licensed under the Apache License, Version
>>>> 2.0 (the "License");
>>>> > + * you may not use this file except in
>>>> compliance with the License.
>>>> > + * You may obtain a copy of the License at
>>>> > + *
>>>> > + * http://www.apache.org/licenses/LICENSE-2.0
>>>> > + *
>>>> > + * Unless required by applicable law or agreed
>>>> to in writing, software
>>>> > + * distributed under the License is distributed
>>>> on an "AS IS" BASIS,
>>>> > + * WITHOUT 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 {
>>>> > + background: #FFFFFF;
>>>> > + margin-bottom: 1em;
>>>> > + margin-left: .5em;
>>>> > +}
>>>> > +
>>>> > +bold {
>>>> > + font-weight: bold;
>>>> > +}
>>>> > +
>>>> > +boldItalic {
>>>> > + font-weight: bold;
>>>> > + font-style: italic;
>>>> > +}
>>>> > +
>>>> > +italic {
>>>> > + font-style: italic;
>>>> > +}
>>>> > +
>>>> > +underlined {
>>>> > + text-decoration: underline;
>>>> > +}
>>>> > +
>>>> > +uicontrol {
>>>> > + font-weight: bold;
>>>> > +}
>>>> > +
>>>> > +filepath {
>>>> > + font-family: monospace, monospace;
>>>> > +}.option {
>>>> > + font-family: monospace, monospace;
>>>> > +}
>>>> > +
>>>> > +cmdname {
>>>> > + font-weight: bold;
>>>> > + font-family: monospace, monospace;
>>>> > +}
>>>> > +
>>>> > +.defparmname {
>>>> > + font-weight: bold;
>>>> > + text-decoration: underline;
>>>> > + font-family: monospace, monospace;
>>>> > +}
>>>> > +
>>>> > +.kwd {
>>>> > + font-weight: bold;
>>>> > +}
>>>> > +
>>>> > +.defkwd {
>>>> > + font-weight: bold;
>>>> > + text-decoration: underline;
>>>> > +}
>>>> > +
>>>> > +var {
>>>> > + font-style : italic;
>>>> > +}
>>>> > +
>>>> > +strongwintitle {
>>>> > + font-weight : bold;
>>>> > +}
>>>> > +
>>>> > +parmname {
>>>> > + font-weight: bold;
>>>> > + font-family: monospace, monospace;
>>>> > + white-space: nowrap;
>>>> > +}
>>>> > +
>>>> > +code {
>>>> > + font-family: monospace, monospace;
>>>> > +}
>>>> > +
>>>> > +pre {
>>>> > + font-family: monospace, monospace;
>>>> > +}
>>>> > +
>>>> > +CITE {
>>>> > + font-style: italic;
>>>> > +}
>>>> > +
>>>> > +EM {
>>>> > + font-style: italic;
>>>> > +}
>>>> > +
>>>> > +STRONG {
>>>> > + font-weight: bold;
>>>> > +}
>>>> > +
>>>> > +VAR {
>>>> > + font-style: italic;
>>>> > +}
>>>> > +
>>>> > +dt {
>>>> > + font-weight: bold;
>>>> > +}
>>>> > +
>>>> >
>>>> +/***********************************************************
>>>> > + * Basic fonts
>>>> > +
>>>> ***********************************************************/
>>>> > +body,
>>>> > +td,
>>>> > +th,
>>>> > +caption {
>>>> > + font-family: Verdana, Arial, Helvetica,
>>>> sans-serif;
>>>> > + font-size: 10pt;
>>>> > +}
>>>> > +
>>>> > +pre, code {
>>>> > + font-family: MS Courier New, Courier, monospace;
>>>> > +}
>>>> > +
>>>> > +h1, h2, h3 {
>>>> > + font-size: 12pt;
>>>> > + font-weight: bold;
>>>> > + color: #336699;
>>>> > +}
>>>> > +
>>>> > +h4 {
>>>> > + font-size: 10pt;
>>>> > + font-weight: bold;
>>>> > + color: #336699;
>>>> > +}
>>>> > +
>>>> >
>>>> +/***********************************************************
>>>> > + * Basic indents, padding, and margin
>>>> > +
>>>> ***********************************************************/
>>>> > +body {
>>>> > + color: black;
>>>> > + background-color: white;
>>>> > + margin: 0;
>>>> > + padding-top: 0.2em;
>>>> > + padding-left: 0.6em;
>>>> > + padding-right: 0.2em;
>>>> > + padding-bottom: 1em;
>>>> > +}
>>>> > +
>>>> > +h1,
>>>> > +h2,
>>>> > +h3,
>>>> > +h4,
>>>> > +h5,
>>>> > +h6 {
>>>> > + padding: 0;
>>>> > + margin-top: 1em;
>>>> > + margin-bottom: 0.75em;
>>>> > + margin-left: 0;
>>>> > + margin-right: 0;
>>>> > +}
>>>> > +
>>>> > +address,
>>>> > +dl,
>>>> > +li,
>>>> > +p {
>>>> > + padding: 0;
>>>> > + margin-top: 0.75em;
>>>> > + margin-bottom: 0.75em;
>>>> > + margin-left: 0;
>>>> > + margin-right: 0;
>>>> > + line-height: 125%;
>>>> > +}
>>>> > +
>>>> > +td dl {
>>>> > + margin-left: 2em;
>>>> > +}
>>>> > +
>>>> > +pre {
>>>> > + padding: 0;
>>>> > + margin-top: 0.75em;
>>>> > + margin-bottom: 0.75em;
>>>> > + margin-left: 2em;
>>>> > + margin-right: 0;
>>>> > +}
>>>> > +
>>>> > +ol,
>>>> > +ul {
>>>> > + padding: 0;
>>>> > + margin-top: 0.75em;
>>>> > + margin-bottom: 0.75em;
>>>> > + margin-left: 2.00em;
>>>> > + margin-right: 0;
>>>> > +}
>>>> > +
>>>> > +dd {
>>>> > + margin-left: 3.00em;
>>>> > + margin-top: 0.75em;
>>>> > + margin-bottom: 0.75em;
>>>> > +}
>>>> > +
>>>> > +dt {
>>>> > + margin-left: 1.00em;
>>>> > + margin-top: 0.75em;
>>>> > +}
>>>>
>>>> _______________________________________________
>>>> Kimchi-devel mailing list
>>>> Kimchi-devel(a)ovirt.org <mailto:Kimchi-devel@ovirt.org>
>>>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>>>
>
1
0
On 06/08/2015 17:49, Harshal Patil wrote:
> Cool, my question is when do you think we should have a git repo for
> 'wok' (in kimchi-project org)?
When we get it wok and Kimchi as plugin stable enough to be officially
released.
The idea is to have it by end of Sept, ie, 2 months from now on. And
then the new repository and all proper configuration to make Kimchi and
Ginger as submodules will be done and announced.
> IMHO, we should have it right now and then start working on that repo
> instead of current one.
>
> ----- Original message -----
> From: Aline Manera <alinefm(a)linux.vnet.ibm.com>
> To: Harshal Patil/India/IBM@IBMIN, kimchi-devel(a)ovirt.org
> Cc:
> Subject: Re: [Kimchi-devel] Should wok be a fork of kimchi?
> Date: Fri, Aug 7, 2015 1:25 AM
>
>
> Hi Harshal,
>
> As long as we complete the transition to wok framework, ie, make
> wok framework and Kimchi as plugin stable, 'wok' will be a new git
> repository into kimchi-project organization on github. And Kimchi
> and Ginger will be loaded as submodules.
>
> Regards,
> Aline Manera
> On 06/08/2015 16:46, Harshal Patil wrote:
>> Hi,
>> We are seeing lately how wok is positioned so differently than
>> kimchi is in many aspects. There are talks about changing UI
>> frameworks (bootstrap), and then having separate plugins (kimchi,
>> ginger). Wok is not going to be anything like the way kimchi is
>> today. It even has different name ('wok' instead of kimchi <next
>> version>)
>> Considering that should have wok development in a forked (from
>> existing kimchi) repo, having it as a branch of kimchi master
>> fails to make any sense to me.
>>
>> _______________________________________________
>> Kimchi-devel mailing list
>> Kimchi-devel(a)ovirt.org <mailto:Kimchi-devel@ovirt.org>
>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>
>
1
0
2
2
2
2
1
0
Re: [Kimchi-devel] [PATCH 1/1] Enabling help page for wok base. This commit supports en_US only.
by Aline Manera 06 Aug '15
by Aline Manera 06 Aug '15
06 Aug '15
On 06/08/2015 16:38, Harshal Patil wrote:
> Sounds awesome Aline!
> So we will have wok front page with just basic documentations on API
> and nothing else?
I thought in a "Welcome to Wok" message and some information about
plugins install and what else is important.
Are you going to implement it? If so, I suggest you to send mockups
layouts prior doing the code itself. So we can opine on what to add,
where to display, etc =)
> what about host stats or basic info? Just making sure we are on the
> same page.
They will not be part of wok as they are not related to web server
configuration.
Probably creating an other plugin to expose the APIs we want and reuse
for Kimchi and Ginger when needed.
> ----- Original message -----
> From: Aline Manera <alinefm(a)linux.vnet.ibm.com>
> To: Harshal Patil/India/IBM@IBMIN
> Cc: kimchi-devel(a)ovirt.org, sureshab(a)linux.vnet.ibm.com
> Subject: Re: [Kimchi-devel] [PATCH 1/1] Enabling help page for wok
> base. This commit supports en_US only.
> Date: Fri, Aug 7, 2015 12:32 AM
>
>
> On 06/08/2015 14:42, Harshal Patil wrote:
>> If you are looking at wok just as a web framework which
>> developers can use to write plugins for, then it doesn't need to
>> have any user facing webpage at all. Developers would need to
>> interact with wok's API anyway.
>> Now you can always create a marketplace for the wok plugins where
>> users can download and install plugins on them on the fly and
>> that could be the only page wok can serve on it's own without any
>> plugins. ;-)
>
> Yeap!! I have thought about it too.
>
> My idea (for future, of course) is adding to wok a "Configuration
> tab" so user can configure wok settings through UI.
> For example, which authentication method to use, which plugins to
> install/uninstall/enable/disable, authorization settings and any
> other setting related to the web sever config.
>
> It is the same approach we have on Jenkins.
>> But if that's not on the table then wok could only display basic
>> API usage for its plugin developers on default index page,
>> probably a button to load bare minimum sample plugin as a proof
>> of concept.
>
> Yeap! I think we should go on that way by now and on future we can
> implement the "Configuration tab" for wok.
>
> Sounds a good plan for you?
>>
>> ----- Original message -----
>> From: Aline Manera <alinefm(a)linux.vnet.ibm.com>
>> <mailto:alinefm@linux.vnet.ibm.com>
>> Sent by: kimchi-devel-bounces(a)ovirt.org
>> <mailto:kimchi-devel-bounces@ovirt.org>
>> To: sureshab(a)linux.vnet.ibm.com
>> <mailto:sureshab@linux.vnet.ibm.com>, kimchi-devel(a)ovirt.org
>> <mailto:kimchi-devel@ovirt.org>
>> Cc:
>> Subject: Re: [Kimchi-devel] [PATCH 1/1] Enabling help page
>> for wok base. This commit supports en_US only.
>> Date: Thu, Aug 6, 2015 8:02 PM
>> I don't think we need a help page for Wok framework.
>>
>> We have a lot to discuss on that, but the initial idea was to
>> load a
>> simple page when running wok without any plugin.
>> That page would describe the wok proposal - as a web server
>> framework
>> based on plugins.
>>
>> I think it is hard to us to point the user to any specific
>> plugin like
>> kimchi or ginger, as anyone can develop a wok plugin and host
>> anywhere.
>>
>> I am more for a generic simple page and no help.
>>
>> More (and different) thoughts on it are more than welcome. =)
>>
>> On 04/08/2015 10:04, sureshab(a)linux.vnet.ibm.com
>> <mailto:sureshab@linux.vnet.ibm.com> wrote:
>> > From: Suresh Babu Angadi <sureshab(a)linux.vnet.ibm.com>
>> <mailto:sureshab@linux.vnet.ibm.com>
>> >
>> > Signed-off-by: Suresh Babu Angadi
>> <sureshab(a)linux.vnet.ibm.com>
>> <mailto:sureshab@linux.vnet.ibm.com>
>> > ---
>> > configure.ac | 2 +
>> > src/wok/config.py.in | 5 +
>> > ui/js/src/wok.main.js | 9 +-
>> > ui/pages/Makefile.am | 2 +-
>> > ui/pages/help/Makefile.am | 34 +++++++
>> > ui/pages/help/dita-help.xsl | 26 +++++
>> > ui/pages/help/en_US/Makefile.am | 23 +++++
>> > ui/pages/help/en_US/wokhelp.dita | 27 +++++
>> > ui/pages/help/wok.css | 208
>> +++++++++++++++++++++++++++++++++++++++
>> > 9 files changed, 333 insertions(+), 3 deletions(-)
>> > create mode 100644 ui/pages/help/Makefile.am
>> > create mode 100644 ui/pages/help/dita-help.xsl
>> > create mode 100644 ui/pages/help/en_US/Makefile.am
>> > create mode 100644 ui/pages/help/en_US/wokhelp.dita
>> > create mode 100644 ui/pages/help/wok.css
>> >
>> > diff --git a/configure.ac b/configure.ac
>> > index 47c2e6c..ee4d793 100644
>> > --- a/configure.ac
>> > +++ b/configure.ac
>> > @@ -115,6 +115,8 @@ AC_CONFIG_FILES([
>> > ui/libs/themes/base/Makefile
>> > ui/libs/themes/base/images/Makefile
>> > ui/pages/Makefile
>> > + ui/pages/help/Makefile
>> > + ui/pages/help/en_US/Makefile
>> > ui/pages/websockify/Makefile
>> > contrib/Makefile
>> > contrib/DEBIAN/Makefile
>> > diff --git a/src/wok/config.py.in b/src/wok/config.py.in
>> > index 5ffa936..c158a75 100644
>> > --- a/src/wok/config.py.in
>> > +++ b/src/wok/config.py.in
>> > @@ -142,6 +142,11 @@ class WokConfig(dict):
>> > '/wok-ui.html': {
>> > 'tools.wokauth.on': True
>> > },
>> > + '/help': {
>> > + 'tools.staticdir.on': True,
>> > + 'tools.staticdir.dir': '%s/ui/pages/help' %
>> paths.prefix,
>> > + 'tools.nocache.on': True
>> > + }
>> > }
>> >
>> > def __init__(self):
>> > diff --git a/ui/js/src/wok.main.js b/ui/js/src/wok.main.js
>> > index f4c9940..3dd76b8 100644
>> > --- a/ui/js/src/wok.main.js
>> > +++ b/ui/js/src/wok.main.js
>> > @@ -349,7 +349,12 @@ wok.checkHelpFile = function(path) {
>> >
>> > wok.openHelp = function(e) {
>> > var tab = $('#nav-menu a.current');
>> > - var url =
>> $(tab).parent().find("input[name='helpPath']").val();
>> > - window.open(url, "Wok Help");
>> > + if (tab.length == 0 ){
>> > + window.open("help/en_US/wokhelp.html","Wok Help")
>> > + }
>> > + else {
>> > + var url =
>> $(tab).parent().find("input[name='helpPath']").val();
>> > + window.open(url, "Wok Help");
>> > + }
>> > e.preventDefault();
>> > };
>> > diff --git a/ui/pages/Makefile.am b/ui/pages/Makefile.am
>> > index 68f4c92..b3f5c2e 100644
>> > --- a/ui/pages/Makefile.am
>> > +++ b/ui/pages/Makefile.am
>> > @@ -15,7 +15,7 @@
>> > # See the License for the specific language governing
>> permissions and
>> > # limitations under the License.
>> >
>> > -SUBDIRS = websockify
>> > +SUBDIRS = websockify help
>> >
>> > htmldir = $(datadir)/wok/ui/pages
>> >
>> > diff --git a/ui/pages/help/Makefile.am
>> b/ui/pages/help/Makefile.am
>> > new file mode 100644
>> > index 0000000..0dc8d9f
>> > --- /dev/null
>> > +++ b/ui/pages/help/Makefile.am
>> > @@ -0,0 +1,34 @@
>> > +# Copyright IBM Corp, 2014
>> > +#
>> > +# This library is free software; you can redistribute it
>> and/or
>> > +# modify it under the terms of the GNU Lesser General Public
>> > +# License as published by the Free Software Foundation; either
>> > +# version 2.1 of the License, or (at your option) any
>> later version.
>> > +#
>> > +# This library is distributed in the hope that it will be
>> useful,
>> > +# but WITHOUT ANY WARRANTY; without even the implied
>> warranty of
>> > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>> See the GNU
>> > +# Lesser General Public License for more details.
>> > +#
>> > +# You should have received a copy of the GNU Lesser
>> General Public
>> > +# License along with this library; if not, write to the
>> Free Software
>> > +# Foundation, Inc., 51 Franklin Street, Fifth Floor,
>> Boston, MA 02110-1301 USA
>> > +
>> > +SUBDIRS = en_US
>> > +
>> > +DITA_HTML_FILES = $(patsubst %.dita,%.html,$(wildcard
>> */*.dita))
>> > +HTML_FILES = $(if $(DITA_HTML_FILES), $(DITA_HTML_FILES),
>> $(wildcard */*.html))
>> > +DITA_XSL_FILE = dita-help.xsl
>> > +
>> > +EXTRA_DIST = $(DITA_XSL_FILE)
>> > +
>> > +helpdir = $(datadir)/wok/ui/pages/help
>> > +
>> > +dist_help_DATA = wok.css
>> > +
>> > +all: $(HTML_FILES) $(wildcard */*.dita)
>> > +
>> > +%.html: %.dita $(DITA_XSL_FILE)
>> > + xsltproc -o $@ $(DITA_XSL_FILE) $<
>> > +
>> > +CLEANFILES = $(HTML_FILES)
>> > \ No newline at end of file
>> > diff --git a/ui/pages/help/dita-help.xsl
>> b/ui/pages/help/dita-help.xsl
>> > new file mode 100644
>> > index 0000000..fb49855
>> > --- /dev/null
>> > +++ b/ui/pages/help/dita-help.xsl
>> > @@ -0,0 +1,26 @@
>> > +<?xml version="1.0" encoding="UTF-8"?>
>> > +<xsl:stylesheet version="1.0"
>> > + xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>> <http://www.w3.org/1999/XSL/Transform>
>> > + xmlns="http://www.w3.org/1999/xhtml"
>> <http://www.w3.org/1999/xhtml>>
>> > + <xsl:output method="xml" indent="yes" encoding="UTF-8" />
>> > +
>> > + <xsl:template match="/">
>> > + <html>
>> > + <head>
>> > + <title><xsl:value-of select="/cshelp/title" /></title>
>> > + <meta charset="UTF-8" />
>> > + <link rel="shortcut icon"
>> href="https://mail.notes.na.collabserv.com/livemail/0/../images/logo.ico"
>> <https://mail.notes.na.collabserv.com/livemail/0/../images/logo.ico>
>> />
>> > + <link rel="stylesheet" type="text/css"
>> href="https://mail.notes.na.collabserv.com/livemail/0/wok.css" <https://mail.notes.na.collabserv.com/livemail/0/wok.css>
>> />
>> > + </head>
>> > + <body>
>> > + <xsl:apply-templates select="//cshelp" />
>> > + </body>
>> > + </html>
>> > + </xsl:template>
>> > +
>> > + <xsl:template match="cshelp">
>> > + <h1><xsl:value-of select="title" /></h1>
>> > + <p class="shortdesc"><xsl:value-of
>> select="shortdesc" /></p>
>> > + <p class="csbody"><xsl:copy-of
>> select="csbody/node()" /></p>
>> > + </xsl:template>
>> > +</xsl:stylesheet>
>> > diff --git a/ui/pages/help/en_US/Makefile.am
>> b/ui/pages/help/en_US/Makefile.am
>> > new file mode 100644
>> > index 0000000..b1e807d
>> > --- /dev/null
>> > +++ b/ui/pages/help/en_US/Makefile.am
>> > @@ -0,0 +1,23 @@
>> > +# Copyright IBM Corp, 2014
>> > +#
>> > +# This library is free software; you can redistribute it
>> and/or
>> > +# modify it under the terms of the GNU Lesser General Public
>> > +# License as published by the Free Software Foundation; either
>> > +# version 2.1 of the License, or (at your option) any
>> later version.
>> > +#
>> > +# This library is distributed in the hope that it will be
>> useful,
>> > +# but WITHOUT ANY WARRANTY; without even the implied
>> warranty of
>> > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>> See the GNU
>> > +# Lesser General Public License for more details.
>> > +#
>> > +# You should have received a copy of the GNU Lesser
>> General Public
>> > +# License along with this library; if not, write to the
>> Free Software
>> > +# Foundation, Inc., 51 Franklin Street, Fifth Floor,
>> Boston, MA 02110-1301 USA
>> > +
>> > +en_US_helpdir = $(datadir)/wok/ui/pages/help/en_US
>> > +
>> > +dist_en_US_help_DATA = $(wildcard *.html) $(NULL)
>> > +
>> > +EXTRA_DIST = $(wildcard *.dita)
>> > +
>> > +CLEANFILES = $(wildcard *.html)
>> > \ No newline at end of file
>> > diff --git a/ui/pages/help/en_US/wokhelp.dita
>> b/ui/pages/help/en_US/wokhelp.dita
>> > new file mode 100644
>> > index 0000000..582e47b
>> > --- /dev/null
>> > +++ b/ui/pages/help/en_US/wokhelp.dita
>> > @@ -0,0 +1,27 @@
>> > +<?xml version="1.0" encoding="UTF-8"?>
>> > +<!--Arbortext, Inc., 1988-2011, v.4002-->
>> > +<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
>> > + "..\dtd\cshelp.dtd">
>> > +<?Pub Sty _display FontColor="red"?>
>> > +<?Pub Inc?>
>> > +<!--This DITA specialized document type is not supported
>> by the Authoring Tools development team.
>> > +For support please see:
>> > +https://w3.opensource.ibm.com/projects/dita-cshelp/-->
>> > +<cshelp id="wokbase" xml:lang="en-us">
>> > +<title>Wok (Webserver Originated from Kimchi)</title>
>> > +<shortdesc>Wok is a cherrypy-based web framework with
>> HTML5 support that is extended by plugins which expose
>> functionality through REST APIs.</shortdesc>
>> > +<csbody>
>> > +<p>Currently available plugins are Kimchi (Virtualization
>> Management) and Ginger (System Administration).
>> > +Wok comes with a sample plugin for education purposes.<ul>
>> > +<li><uicontrol>Download Kimchi : </uicontrol>
>> > +<a
>> href="https://github.com/kimchi-project/kimchi/tree/wok"
>> <https://github.com/kimchi-project/kimchi/tree/wok>
>> > +target="_blank"
>> >https://github.com/kimchi-project/kimchi/tree/wok</a>
>> > +</li>
>> > +<li><uicontrol>Download Ginger : </uicontrol>
>> > +<a
>> href="https://github.com/kimchi-project/ginger/tree/ginger_wok"
>> <https://github.com/kimchi-project/ginger/tree/ginger_wok>
>> > +target="_blank"
>> >https://github.com/kimchi-project/ginger/tree/ginger_wok</a>
>> > +</li>
>> > +</ul>
>> > +</p>
>> > +</csbody>
>> > +</cshelp>
>> > diff --git a/ui/pages/help/wok.css b/ui/pages/help/wok.css
>> > new file mode 100644
>> > index 0000000..32fae4a
>> > --- /dev/null
>> > +++ b/ui/pages/help/wok.css
>> > @@ -0,0 +1,208 @@
>> > +/*
>> > + * Project Kimchi
>> > + *
>> > + * Copyright IBM, Corp. 2014
>> > + *
>> > + * Licensed under the Apache License, Version 2.0 (the
>> "License");
>> > + * you may not use this file except in compliance with the
>> License.
>> > + * You may obtain a copy of the License at
>> > + *
>> > + * http://www.apache.org/licenses/LICENSE-2.0
>> > + *
>> > + * Unless required by applicable law or agreed to in
>> writing, software
>> > + * distributed under the License is distributed on an "AS
>> IS" BASIS,
>> > + * WITHOUT 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 {
>> > + background: #FFFFFF;
>> > + margin-bottom: 1em;
>> > + margin-left: .5em;
>> > +}
>> > +
>> > +bold {
>> > + font-weight: bold;
>> > +}
>> > +
>> > +boldItalic {
>> > + font-weight: bold;
>> > + font-style: italic;
>> > +}
>> > +
>> > +italic {
>> > + font-style: italic;
>> > +}
>> > +
>> > +underlined {
>> > + text-decoration: underline;
>> > +}
>> > +
>> > +uicontrol {
>> > + font-weight: bold;
>> > +}
>> > +
>> > +filepath {
>> > + font-family: monospace, monospace;
>> > +}.option {
>> > + font-family: monospace, monospace;
>> > +}
>> > +
>> > +cmdname {
>> > + font-weight: bold;
>> > + font-family: monospace, monospace;
>> > +}
>> > +
>> > +.defparmname {
>> > + font-weight: bold;
>> > + text-decoration: underline;
>> > + font-family: monospace, monospace;
>> > +}
>> > +
>> > +.kwd {
>> > + font-weight: bold;
>> > +}
>> > +
>> > +.defkwd {
>> > + font-weight: bold;
>> > + text-decoration: underline;
>> > +}
>> > +
>> > +var {
>> > + font-style : italic;
>> > +}
>> > +
>> > +strongwintitle {
>> > + font-weight : bold;
>> > +}
>> > +
>> > +parmname {
>> > + font-weight: bold;
>> > + font-family: monospace, monospace;
>> > + white-space: nowrap;
>> > +}
>> > +
>> > +code {
>> > + font-family: monospace, monospace;
>> > +}
>> > +
>> > +pre {
>> > + font-family: monospace, monospace;
>> > +}
>> > +
>> > +CITE {
>> > + font-style: italic;
>> > +}
>> > +
>> > +EM {
>> > + font-style: italic;
>> > +}
>> > +
>> > +STRONG {
>> > + font-weight: bold;
>> > +}
>> > +
>> > +VAR {
>> > + font-style: italic;
>> > +}
>> > +
>> > +dt {
>> > + font-weight: bold;
>> > +}
>> > +
>> > +/***********************************************************
>> > + * Basic fonts
>> > + ***********************************************************/
>> > +body,
>> > +td,
>> > +th,
>> > +caption {
>> > + font-family: Verdana, Arial, Helvetica, sans-serif;
>> > + font-size: 10pt;
>> > +}
>> > +
>> > +pre, code {
>> > + font-family: MS Courier New, Courier, monospace;
>> > +}
>> > +
>> > +h1, h2, h3 {
>> > + font-size: 12pt;
>> > + font-weight: bold;
>> > + color: #336699;
>> > +}
>> > +
>> > +h4 {
>> > + font-size: 10pt;
>> > + font-weight: bold;
>> > + color: #336699;
>> > +}
>> > +
>> > +/***********************************************************
>> > + * Basic indents, padding, and margin
>> > + ***********************************************************/
>> > +body {
>> > + color: black;
>> > + background-color: white;
>> > + margin: 0;
>> > + padding-top: 0.2em;
>> > + padding-left: 0.6em;
>> > + padding-right: 0.2em;
>> > + padding-bottom: 1em;
>> > +}
>> > +
>> > +h1,
>> > +h2,
>> > +h3,
>> > +h4,
>> > +h5,
>> > +h6 {
>> > + padding: 0;
>> > + margin-top: 1em;
>> > + margin-bottom: 0.75em;
>> > + margin-left: 0;
>> > + margin-right: 0;
>> > +}
>> > +
>> > +address,
>> > +dl,
>> > +li,
>> > +p {
>> > + padding: 0;
>> > + margin-top: 0.75em;
>> > + margin-bottom: 0.75em;
>> > + margin-left: 0;
>> > + margin-right: 0;
>> > + line-height: 125%;
>> > +}
>> > +
>> > +td dl {
>> > + margin-left: 2em;
>> > +}
>> > +
>> > +pre {
>> > + padding: 0;
>> > + margin-top: 0.75em;
>> > + margin-bottom: 0.75em;
>> > + margin-left: 2em;
>> > + margin-right: 0;
>> > +}
>> > +
>> > +ol,
>> > +ul {
>> > + padding: 0;
>> > + margin-top: 0.75em;
>> > + margin-bottom: 0.75em;
>> > + margin-left: 2.00em;
>> > + margin-right: 0;
>> > +}
>> > +
>> > +dd {
>> > + margin-left: 3.00em;
>> > + margin-top: 0.75em;
>> > + margin-bottom: 0.75em;
>> > +}
>> > +
>> > +dt {
>> > + margin-left: 1.00em;
>> > + margin-top: 0.75em;
>> > +}
>>
>> _______________________________________________
>> Kimchi-devel mailing list
>> Kimchi-devel(a)ovirt.org <mailto:Kimchi-devel@ovirt.org>
>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>
>
2
1
Re: [Kimchi-devel] [PATCH 1/1] Enabling help page for wok base. This commit supports en_US only.
by Aline Manera 06 Aug '15
by Aline Manera 06 Aug '15
06 Aug '15
On 06/08/2015 14:42, Harshal Patil wrote:
> If you are looking at wok just as a web framework which developers can
> use to write plugins for, then it doesn't need to have any user facing
> webpage at all. Developers would need to interact with wok's API anyway.
> Now you can always create a marketplace for the wok plugins where
> users can download and install plugins on them on the fly and that
> could be the only page wok can serve on it's own without any plugins. ;-)
Yeap!! I have thought about it too.
My idea (for future, of course) is adding to wok a "Configuration tab"
so user can configure wok settings through UI.
For example, which authentication method to use, which plugins to
install/uninstall/enable/disable, authorization settings and any other
setting related to the web sever config.
It is the same approach we have on Jenkins.
> But if that's not on the table then wok could only display basic API
> usage for its plugin developers on default index page, probably a
> button to load bare minimum sample plugin as a proof of concept.
Yeap! I think we should go on that way by now and on future we can
implement the "Configuration tab" for wok.
Sounds a good plan for you?
> ----- Original message -----
> From: Aline Manera <alinefm(a)linux.vnet.ibm.com>
> Sent by: kimchi-devel-bounces(a)ovirt.org
> To: sureshab(a)linux.vnet.ibm.com, kimchi-devel(a)ovirt.org
> Cc:
> Subject: Re: [Kimchi-devel] [PATCH 1/1] Enabling help page for wok
> base. This commit supports en_US only.
> Date: Thu, Aug 6, 2015 8:02 PM
> I don't think we need a help page for Wok framework.
>
> We have a lot to discuss on that, but the initial idea was to load a
> simple page when running wok without any plugin.
> That page would describe the wok proposal - as a web server framework
> based on plugins.
>
> I think it is hard to us to point the user to any specific plugin like
> kimchi or ginger, as anyone can develop a wok plugin and host
> anywhere.
>
> I am more for a generic simple page and no help.
>
> More (and different) thoughts on it are more than welcome. =)
>
> On 04/08/2015 10:04, sureshab(a)linux.vnet.ibm.com wrote:
> > From: Suresh Babu Angadi <sureshab(a)linux.vnet.ibm.com>
> >
> > Signed-off-by: Suresh Babu Angadi <sureshab(a)linux.vnet.ibm.com>
> > ---
> > configure.ac | 2 +
> > src/wok/config.py.in | 5 +
> > ui/js/src/wok.main.js | 9 +-
> > ui/pages/Makefile.am | 2 +-
> > ui/pages/help/Makefile.am | 34 +++++++
> > ui/pages/help/dita-help.xsl | 26 +++++
> > ui/pages/help/en_US/Makefile.am | 23 +++++
> > ui/pages/help/en_US/wokhelp.dita | 27 +++++
> > ui/pages/help/wok.css | 208
> +++++++++++++++++++++++++++++++++++++++
> > 9 files changed, 333 insertions(+), 3 deletions(-)
> > create mode 100644 ui/pages/help/Makefile.am
> > create mode 100644 ui/pages/help/dita-help.xsl
> > create mode 100644 ui/pages/help/en_US/Makefile.am
> > create mode 100644 ui/pages/help/en_US/wokhelp.dita
> > create mode 100644 ui/pages/help/wok.css
> >
> > diff --git a/configure.ac b/configure.ac
> > index 47c2e6c..ee4d793 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -115,6 +115,8 @@ AC_CONFIG_FILES([
> > ui/libs/themes/base/Makefile
> > ui/libs/themes/base/images/Makefile
> > ui/pages/Makefile
> > + ui/pages/help/Makefile
> > + ui/pages/help/en_US/Makefile
> > ui/pages/websockify/Makefile
> > contrib/Makefile
> > contrib/DEBIAN/Makefile
> > diff --git a/src/wok/config.py.in b/src/wok/config.py.in
> > index 5ffa936..c158a75 100644
> > --- a/src/wok/config.py.in
> > +++ b/src/wok/config.py.in
> > @@ -142,6 +142,11 @@ class WokConfig(dict):
> > '/wok-ui.html': {
> > 'tools.wokauth.on': True
> > },
> > + '/help': {
> > + 'tools.staticdir.on': True,
> > + 'tools.staticdir.dir': '%s/ui/pages/help' %
> paths.prefix,
> > + 'tools.nocache.on': True
> > + }
> > }
> >
> > def __init__(self):
> > diff --git a/ui/js/src/wok.main.js b/ui/js/src/wok.main.js
> > index f4c9940..3dd76b8 100644
> > --- a/ui/js/src/wok.main.js
> > +++ b/ui/js/src/wok.main.js
> > @@ -349,7 +349,12 @@ wok.checkHelpFile = function(path) {
> >
> > wok.openHelp = function(e) {
> > var tab = $('#nav-menu a.current');
> > - var url = $(tab).parent().find("input[name='helpPath']").val();
> > - window.open(url, "Wok Help");
> > + if (tab.length == 0 ){
> > + window.open("help/en_US/wokhelp.html","Wok Help")
> > + }
> > + else {
> > + var url =
> $(tab).parent().find("input[name='helpPath']").val();
> > + window.open(url, "Wok Help");
> > + }
> > e.preventDefault();
> > };
> > diff --git a/ui/pages/Makefile.am b/ui/pages/Makefile.am
> > index 68f4c92..b3f5c2e 100644
> > --- a/ui/pages/Makefile.am
> > +++ b/ui/pages/Makefile.am
> > @@ -15,7 +15,7 @@
> > # See the License for the specific language governing
> permissions and
> > # limitations under the License.
> >
> > -SUBDIRS = websockify
> > +SUBDIRS = websockify help
> >
> > htmldir = $(datadir)/wok/ui/pages
> >
> > diff --git a/ui/pages/help/Makefile.am b/ui/pages/help/Makefile.am
> > new file mode 100644
> > index 0000000..0dc8d9f
> > --- /dev/null
> > +++ b/ui/pages/help/Makefile.am
> > @@ -0,0 +1,34 @@
> > +# Copyright IBM Corp, 2014
> > +#
> > +# This library is free software; you can redistribute it and/or
> > +# modify it under the terms of the GNU Lesser General Public
> > +# License as published by the Free Software Foundation; either
> > +# version 2.1 of the License, or (at your option) any later
> version.
> > +#
> > +# This library is distributed in the hope that it will be useful,
> > +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> > +# Lesser General Public License for more details.
> > +#
> > +# You should have received a copy of the GNU Lesser General Public
> > +# License along with this library; if not, write to the Free
> Software
> > +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> 02110-1301 USA
> > +
> > +SUBDIRS = en_US
> > +
> > +DITA_HTML_FILES = $(patsubst %.dita,%.html,$(wildcard */*.dita))
> > +HTML_FILES = $(if $(DITA_HTML_FILES), $(DITA_HTML_FILES),
> $(wildcard */*.html))
> > +DITA_XSL_FILE = dita-help.xsl
> > +
> > +EXTRA_DIST = $(DITA_XSL_FILE)
> > +
> > +helpdir = $(datadir)/wok/ui/pages/help
> > +
> > +dist_help_DATA = wok.css
> > +
> > +all: $(HTML_FILES) $(wildcard */*.dita)
> > +
> > +%.html: %.dita $(DITA_XSL_FILE)
> > + xsltproc -o $@ $(DITA_XSL_FILE) $<
> > +
> > +CLEANFILES = $(HTML_FILES)
> > \ No newline at end of file
> > diff --git a/ui/pages/help/dita-help.xsl
> b/ui/pages/help/dita-help.xsl
> > new file mode 100644
> > index 0000000..fb49855
> > --- /dev/null
> > +++ b/ui/pages/help/dita-help.xsl
> > @@ -0,0 +1,26 @@
> > +<?xml version="1.0" encoding="UTF-8"?>
> > +<xsl:stylesheet version="1.0"
> > + xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> > + xmlns="http://www.w3.org/1999/xhtml">
> > + <xsl:output method="xml" indent="yes" encoding="UTF-8" />
> > +
> > + <xsl:template match="/">
> > + <html>
> > + <head>
> > + <title><xsl:value-of select="/cshelp/title"
> /></title>
> > + <meta charset="UTF-8" />
> > + <link rel="shortcut icon"
> href="https://mail.notes.na.collabserv.com/livemail/0/../images/logo.ico"
> />
> > + <link rel="stylesheet" type="text/css"
> href="https://mail.notes.na.collabserv.com/livemail/0/wok.css" />
> > + </head>
> > + <body>
> > + <xsl:apply-templates select="//cshelp" />
> > + </body>
> > + </html>
> > + </xsl:template>
> > +
> > + <xsl:template match="cshelp">
> > + <h1><xsl:value-of select="title" /></h1>
> > + <p class="shortdesc"><xsl:value-of select="shortdesc"
> /></p>
> > + <p class="csbody"><xsl:copy-of select="csbody/node()"
> /></p>
> > + </xsl:template>
> > +</xsl:stylesheet>
> > diff --git a/ui/pages/help/en_US/Makefile.am
> b/ui/pages/help/en_US/Makefile.am
> > new file mode 100644
> > index 0000000..b1e807d
> > --- /dev/null
> > +++ b/ui/pages/help/en_US/Makefile.am
> > @@ -0,0 +1,23 @@
> > +# Copyright IBM Corp, 2014
> > +#
> > +# This library is free software; you can redistribute it and/or
> > +# modify it under the terms of the GNU Lesser General Public
> > +# License as published by the Free Software Foundation; either
> > +# version 2.1 of the License, or (at your option) any later
> version.
> > +#
> > +# This library is distributed in the hope that it will be useful,
> > +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> > +# Lesser General Public License for more details.
> > +#
> > +# You should have received a copy of the GNU Lesser General Public
> > +# License along with this library; if not, write to the Free
> Software
> > +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> 02110-1301 USA
> > +
> > +en_US_helpdir = $(datadir)/wok/ui/pages/help/en_US
> > +
> > +dist_en_US_help_DATA = $(wildcard *.html) $(NULL)
> > +
> > +EXTRA_DIST = $(wildcard *.dita)
> > +
> > +CLEANFILES = $(wildcard *.html)
> > \ No newline at end of file
> > diff --git a/ui/pages/help/en_US/wokhelp.dita
> b/ui/pages/help/en_US/wokhelp.dita
> > new file mode 100644
> > index 0000000..582e47b
> > --- /dev/null
> > +++ b/ui/pages/help/en_US/wokhelp.dita
> > @@ -0,0 +1,27 @@
> > +<?xml version="1.0" encoding="UTF-8"?>
> > +<!--Arbortext, Inc., 1988-2011, v.4002-->
> > +<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
> > + "..\dtd\cshelp.dtd">
> > +<?Pub Sty _display FontColor="red"?>
> > +<?Pub Inc?>
> > +<!--This DITA specialized document type is not supported by the
> Authoring Tools development team.
> > +For support please see:
> > +https://w3.opensource.ibm.com/projects/dita-cshelp/-->
> > +<cshelp id="wokbase" xml:lang="en-us">
> > +<title>Wok (Webserver Originated from Kimchi)</title>
> > +<shortdesc>Wok is a cherrypy-based web framework with HTML5
> support that is extended by plugins which expose functionality
> through REST APIs.</shortdesc>
> > +<csbody>
> > +<p>Currently available plugins are Kimchi (Virtualization
> Management) and Ginger (System Administration).
> > +Wok comes with a sample plugin for education purposes.<ul>
> > +<li><uicontrol>Download Kimchi : </uicontrol>
> > +<a href="https://github.com/kimchi-project/kimchi/tree/wok"
> > +target="_blank"
> >https://github.com/kimchi-project/kimchi/tree/wok</a>
> > +</li>
> > +<li><uicontrol>Download Ginger : </uicontrol>
> > +<a href="https://github.com/kimchi-project/ginger/tree/ginger_wok"
> > +target="_blank"
> >https://github.com/kimchi-project/ginger/tree/ginger_wok</a>
> > +</li>
> > +</ul>
> > +</p>
> > +</csbody>
> > +</cshelp>
> > diff --git a/ui/pages/help/wok.css b/ui/pages/help/wok.css
> > new file mode 100644
> > index 0000000..32fae4a
> > --- /dev/null
> > +++ b/ui/pages/help/wok.css
> > @@ -0,0 +1,208 @@
> > +/*
> > + * Project Kimchi
> > + *
> > + * Copyright IBM, Corp. 2014
> > + *
> > + * Licensed under the Apache License, Version 2.0 (the "License");
> > + * you may not use this file except in compliance with the License.
> > + * You may obtain a copy of the License at
> > + *
> > + * http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing,
> software
> > + * distributed under the License is distributed on an "AS IS"
> BASIS,
> > + * WITHOUT 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 {
> > + background: #FFFFFF;
> > + margin-bottom: 1em;
> > + margin-left: .5em;
> > +}
> > +
> > +bold {
> > + font-weight: bold;
> > +}
> > +
> > +boldItalic {
> > + font-weight: bold;
> > + font-style: italic;
> > +}
> > +
> > +italic {
> > + font-style: italic;
> > +}
> > +
> > +underlined {
> > + text-decoration: underline;
> > +}
> > +
> > +uicontrol {
> > + font-weight: bold;
> > +}
> > +
> > +filepath {
> > + font-family: monospace, monospace;
> > +}.option {
> > + font-family: monospace, monospace;
> > +}
> > +
> > +cmdname {
> > + font-weight: bold;
> > + font-family: monospace, monospace;
> > +}
> > +
> > +.defparmname {
> > + font-weight: bold;
> > + text-decoration: underline;
> > + font-family: monospace, monospace;
> > +}
> > +
> > +.kwd {
> > + font-weight: bold;
> > +}
> > +
> > +.defkwd {
> > + font-weight: bold;
> > + text-decoration: underline;
> > +}
> > +
> > +var {
> > + font-style : italic;
> > +}
> > +
> > +strongwintitle {
> > + font-weight : bold;
> > +}
> > +
> > +parmname {
> > + font-weight: bold;
> > + font-family: monospace, monospace;
> > + white-space: nowrap;
> > +}
> > +
> > +code {
> > + font-family: monospace, monospace;
> > +}
> > +
> > +pre {
> > + font-family: monospace, monospace;
> > +}
> > +
> > +CITE {
> > + font-style: italic;
> > +}
> > +
> > +EM {
> > + font-style: italic;
> > +}
> > +
> > +STRONG {
> > + font-weight: bold;
> > +}
> > +
> > +VAR {
> > + font-style: italic;
> > +}
> > +
> > +dt {
> > + font-weight: bold;
> > +}
> > +
> > +/***********************************************************
> > + * Basic fonts
> > + ***********************************************************/
> > +body,
> > +td,
> > +th,
> > +caption {
> > + font-family: Verdana, Arial, Helvetica, sans-serif;
> > + font-size: 10pt;
> > +}
> > +
> > +pre, code {
> > + font-family: MS Courier New, Courier, monospace;
> > +}
> > +
> > +h1, h2, h3 {
> > + font-size: 12pt;
> > + font-weight: bold;
> > + color: #336699;
> > +}
> > +
> > +h4 {
> > + font-size: 10pt;
> > + font-weight: bold;
> > + color: #336699;
> > +}
> > +
> > +/***********************************************************
> > + * Basic indents, padding, and margin
> > + ***********************************************************/
> > +body {
> > + color: black;
> > + background-color: white;
> > + margin: 0;
> > + padding-top: 0.2em;
> > + padding-left: 0.6em;
> > + padding-right: 0.2em;
> > + padding-bottom: 1em;
> > +}
> > +
> > +h1,
> > +h2,
> > +h3,
> > +h4,
> > +h5,
> > +h6 {
> > + padding: 0;
> > + margin-top: 1em;
> > + margin-bottom: 0.75em;
> > + margin-left: 0;
> > + margin-right: 0;
> > +}
> > +
> > +address,
> > +dl,
> > +li,
> > +p {
> > + padding: 0;
> > + margin-top: 0.75em;
> > + margin-bottom: 0.75em;
> > + margin-left: 0;
> > + margin-right: 0;
> > + line-height: 125%;
> > +}
> > +
> > +td dl {
> > + margin-left: 2em;
> > +}
> > +
> > +pre {
> > + padding: 0;
> > + margin-top: 0.75em;
> > + margin-bottom: 0.75em;
> > + margin-left: 2em;
> > + margin-right: 0;
> > +}
> > +
> > +ol,
> > +ul {
> > + padding: 0;
> > + margin-top: 0.75em;
> > + margin-bottom: 0.75em;
> > + margin-left: 2.00em;
> > + margin-right: 0;
> > +}
> > +
> > +dd {
> > + margin-left: 3.00em;
> > + margin-top: 0.75em;
> > + margin-bottom: 0.75em;
> > +}
> > +
> > +dt {
> > + margin-left: 1.00em;
> > + margin-top: 0.75em;
> > +}
>
> _______________________________________________
> Kimchi-devel mailing list
> Kimchi-devel(a)ovirt.org
> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>
>
2
2
Re: [Kimchi-devel] [Proposal] Introducing the version in REST API URI for kimchi/ginger plugins
by Aline Manera 06 Aug '15
by Aline Manera 06 Aug '15
06 Aug '15
On 06/08/2015 16:21, Harshal Patil wrote:
> Typical use case... I write a fancy bindings for wok RESTful APIs say,
> in Haskell (because yeah! ;-) ). For the given endpoint (let's say
> /abc) there is a JSON response you get for the GET method. Everything
> is working fine until wok developers figure out that with the changing
> needs may be the JSON sent as a response by /abc GET might need to
> change. At this point if our RESTful API supports versioning poor
> Haskell loving engineers can still be sure that their bindings will
> work properly while giving the flexibility to wok developers to change
> the product with changing requirements.
With version or not, if users want to update to the newer Kimchi/wok
version they will need to update their application to use the new API
otherwise they will keep back on old version.
All that because we don't (and will not!) maintain old versions - as I
said before.
I understand the scenario but it only makes sense while taking track on
different versions simultaneously - which is not our case.
If you need to do that for other matters, you suggest to maintain one
branch per version and keep tracking on which patch to apply on each branch.
> ----- Original message -----
> From: Aline Manera <alinefm(a)linux.vnet.ibm.com>
> Sent by: kimchi-devel-bounces(a)ovirt.org
> To: Chandra Shehkhar Reddy Potula <chandra(a)linux.vnet.ibm.com>,
> kimchi-devel(a)ovirt.org
> Cc:
> Subject: Re: [Kimchi-devel] [Proposal] Introducing the version in
> REST API URI for kimchi/ginger plugins
> Date: Fri, Aug 7, 2015 12:03 AM
>
>
> On 06/08/2015 07:41, Chandra Shehkhar Reddy Potula wrote:
>> Hi Aline,
>>
>> No need to mention explicitly, but this is very useful in case
>> where end users are exploiting functionality via REST API
>> directly and not UI way.
>
> I suppose end users know which version he/she is using, right? =)
>>
>> Regards
>> Chandra
>> On 08/06/2015 01:52 PM, Chandra Shehkhar Reddy Potula wrote:
>>> Hi Aline,
>>>
>>> Versioning helps you iterate faster and prevents invalid
>>> requests from hitting updated endpoints. It also helps smooth
>>> transitions over any major API version as you can continue to
>>> offer old API versions for a period of time. Definitely
>>> supporting the old version of API period of time while offering
>>> new functionality with newer version always give benefits and
>>> extra time for end user to adjust to new one.
>>>
>>> I see lot of products in the market are adapting versioning (see
>>> below link)
>>> http://www.lexicalscope.com/blog/2012/03/12/how-are-rest-apis-versioned/
>>>
>>> I do understand the concern of maintaining the version of the
>>> API endpoints , below are some of the links from Openstack,
>>> which talks about it.
>>> http://developer.openstack.org/api-ref.html
>>> https://wiki.openstack.org/wiki/VersionDiscovery
>>>
>>> Hope it make senses to you.
>>>
>>> Regards
>>> Chandra
>>> On 08/06/2015 12:04 AM, Aline Manera wrote:
>>>>
>>>> Hi Chandra,
>>>>
>>>> I don't see any benefit in adding the version in the URL.
>>>> Instead of that, it scares me on how we will maintain it.
>>>>
>>>> Once we move to wok and Kimchi as plugin, all the APIs will be
>>>> automatically updated so everything will be in the same page.
>>>>
>>>> Regards,
>>>> Aline Manera
>>>> On 17/07/2015 09:47, Chandra Sr Potula wrote:
>>>>>
>>>>> Hi Kimchi/Ginger Devel-Team,
>>>>>
>>>>> Thank you for creating WOK branch to separate the kimchi
>>>>> plugin from the base frame work. It is a great idea.
>>>>>
>>>>> Along with the separation of kimchi plugin looks like there is
>>>>> a transformation of REST API URIs as well. So thinking in
>>>>> those lines will it be good idea even to introduce version to
>>>>> the REST API URIs ?
>>>>>
>>>>> Let me take one REST API URI to convey clear on what I am
>>>>> talking about.
>>>>>
>>>>> To retrieve the host repository information, current URI is:
>>>>> "/plugins/kimchi/host/repositories".
>>>>>
>>>>> *Recommendation*:
>>>>> New host repository URI can look like :
>>>>> *"**/plugins/kimchi/v<version>/host/repositories" , *so that
>>>>> it is easy to maintain REST API future enhancements at the
>>>>> same time do not brake some body who is using the existing URI.
>>>>>
>>>>> Note* Adding version in the URI above is just an example and
>>>>> we could place the version in the URI best possible way.
>>>>>
>>>>> Thanks and Regards,
>>>>> *Chandra Shekhar Reddy Potula*
>>>>> Staff System Software Engineer
>>>>> IBM Systems & Technology Group, Systems Software Development
>>>>> System z Firmware Development
>>>>>
>>>>> ------------------------------------------------------------------------
>>>>> *Phone:* 91-080-4066-0786 | *Mobile:* 91-973-1122-221
>>>>> *E-mail:*_chandra.shekhar@in.ibm.com_
>>>>> <mailto:chandra.shekhar@in.ibm.com>
>>>>> IBM
>>>>>
>>>>> ORR, Manyatha MD3 1F B247
>>>>> Bengaluru, Karnataka 560045
>>>>> India
>>>>>
>>>>> _______________________________________________
>>>>> Kimchi-devel mailing list
>>>>> Kimchi-devel(a)ovirt.org <mailto:Kimchi-devel@ovirt.org>
>>>>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>>>
>>>> _______________________________________________
>>>> Kimchi-devel mailing list
>>>> Kimchi-devel(a)ovirt.org <mailto:Kimchi-devel@ovirt.org>
>>>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>>
>>> _______________________________________________
>>> Kimchi-devel mailing list
>>> Kimchi-devel(a)ovirt.org <mailto:Kimchi-devel@ovirt.org>
>>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
> _______________________________________________
> Kimchi-devel mailing list
> Kimchi-devel(a)ovirt.org
> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>
>
1
1
Re: [Kimchi-devel] Fwd: Proposal for moving functionality from Kimchi to Ginger
by Aline Manera 06 Aug '15
by Aline Manera 06 Aug '15
06 Aug '15
On 06/08/2015 14:49, Harshal Patil wrote:
> About 2) Basic info and 3)host stats below, do you think wok should
> actually display that info in tab or should it be just available only
> through API so that plugin developers can decide to display it in
> whichever way they prefer?
I have thought about it initially, but I don't agree any more as it
would break the idea of having on wok only what is needed to provide a
web server based on plugins.
Because that I proposed the common-host plugin to expose the APIs.
> ----- Original message -----
> From: Aline Manera <alinefm(a)linux.vnet.ibm.com>
> Sent by: kimchi-devel-bounces(a)ovirt.org
> To: Walter Niklaus <niklaus(a)linux.vnet.ibm.com>, Daniel Henrique
> Barboza <danielhb(a)linux.vnet.ibm.com>, Kimchi Devel
> <kimchi-devel(a)ovirt.org>
> Cc:
> Subject: Re: [Kimchi-devel] Fwd: Proposal for moving functionality
> from Kimchi to Ginger
> Date: Thu, Aug 6, 2015 9:01 PM
>
>
> Thanks, Walter, to send the scrum meeting summary here!
>
> Here are my thoughts on all that.
>
> First, let me clarify the proposal of each piece of cake! =)
>
> A) Wok is a *generic web server framework based on plugins*.
> By generic, I mean it should only expose APIs and
> functionalities required for a web server. Login, logout, plugins
> support, i18n support, message error handling and much more.
>
> B) Kimchi is a wok plugin for virtual machine management.
> And it is independent system platform: x86, Power or Z.
>
> C) Ginger is a wok plugin for host management.
> And it is independent system platform: x86, Power or Z.
>
> By now, it is all we have. So I'd like to concentrate our effort
> on it.
>
> Now thinking about which features from Kimchi Host tab can be
> moved to Ginger.
> Let do it item by item. The Host Tab is composed by:
>
> 1) Restart, Shutdown, Connect operations
> I don't see those functionalities close related to virtual
> machines management. So for me, it is fine and good to move them
> to Ginger.
>
> 2) Basic Information
> The kind of information may be very useful to user while
> manage virtual machine. Specially by the amount of memory and
> number of CPUs.
> With that information the user can properly balance his/her
> virtual machines configuration to have better system performance.
>
> 3) Host statistics
> The same I described on item 2.
>
> 4) Software Update
> I don't see this functionality close related to virtual
> machines management. So for me, it is fine and good to move them
> to Ginger.
>
> 5) Repository management
> I don't see this functionality close related to virtual
> machines management. So for me, it is fine and good to move them
> to Ginger.
>
> 6) Debug reports
> This functionality may be interesting for virtual machine
> management when some of them represents a problem or bad performance.
> So user can easily grab the system logs to check what is going
> wrong.
>
> So if no one opposes, we can start moving 1, 4 and 5 to Ginger.
> As we have 2 different open source communities we need to
> coordinate that work. Initially the patch for Kimchi will be for
> removing those features and to Ginger to add them.
> The Kimchi patch must be simpler but it will require more work on
> Ginger side.
>
> About 2, 3 and 6: I really understand how those information are
> important for virtual machine management and also for host
> management, i.e, Kimchi and Ginger.
> (And I hope you all do the same :-) )
>
> So in my mind, we are discussing a solution to expose those
> information on both, Kimchi and Ginger, without making it
> duplicated somehow to user.
>
> As per discussion (see item A), wok is a generic framework and
> should not handle those kind of APIs. (Agree?)
> And also it should not have any default plugin (otherwise, we
> could continue having Kimchi as default without the need to have
> the wok framework)
> While loading wok without any plugin, it should display a simple
> page "Welcome to wok" or something like that but without any
> functionality.
>
> So my proposal is to create a new and simple plugin (let's call it
> as common-host plugin) that expose those APIs without any UI.
>
> Kimchi and Ginger will have a dependency on this common-host
> plugin and will provide the proper UI for it.
>
> To do not duplicate information while loading Kimchi and Ginger
> together, I propose to add a smart logic for it:
>
> - Kimchi will always load the Host tab with the common-host plugin
> (as it is today).
> - Ginger will load the common-host plugin *only and if only* it is
> running standalone.
>
> What do you think about it?
>
> Regards,
> Aline Manera
> On 06/08/2015 11:15, Walter Niklaus wrote:
>> Picking up the discussion from the Scrum meeting about where
>> (which plugin) certain functionalities should be.
>>
>> To make sure we don't miss this aspect, I'm re-iterating on the
>> high level use cases.
>> Currently I see the following major usecases now and in the near
>> future (next year):
>> 1. A user wants to perform base Linux management only.
>> - here he needs all the generic Host-Management
>> functionality + the platform specific stuff like:
>> Power-FW code update, Energy Management on Power or
>> IO-Device Management on System z
>> 2. A user wants to manage KVM Virtual Machines.
>> - his primary scope are VMs. How much of the Host and
>> Platform specific Management functionality is required here ?
>> 3. A user wants to manage Containers.
>> - his primary scope are Container. How much of the Host
>> and Platform specific Management functionality is required here ?
>> 4. A user wants to manage Containers and KVM Virtual Machines .
>> - his primary scope are Container and VMs. How much of the
>> Host and Platform specific Management functionality is required
>> here ?
>>
>> Our current discussion now is for the usecases 2,3 and 4: How
>> much of the Host and Platform specific Management functionality
>> is required and what's the best way to organize and package it.
>> One possibility could be to have all Host-Management
>> functionality looked at being part of the default/basic
>> functionset and delivery and have the Platform specifc
>> functionality as optional plugins. The disadvantage of this
>> approach would be that all the following functionality:
>> Basic Information, System Statistics, Network (Host NICs,DNS
>> ...), Storage/SAN (Host Storage), User Management, Configuration
>> Backup, Software Updates, Repositories, Debug Reports would be
>> present in the Container and VM usecases by default.
>> Do we know what a user really needs and wants in the usecases 2,3
>> and 4 ? I guess this depends to a large degree of the toolset
>> she/he is using beside Kimchi and Ginger. If there is no other
>> tooling available she/he may be happy about the shipped
>> functionset, but for sure there are other situation where she/he
>> may not be interested in some of the functionality.
>>
>> What could be the reasons a user would want to pick selectively ?
>> a. functionality not required or maybe even conflicting with
>> some other tooling: for example Software Updates
>> are managed from some central instance
>> b. installing a reduced functionset could reduce the external
>> package dependencies and could reduce the amount of updates
>> c. simplification on the UI by eliminating unrequired stuff
>>
>> Ideally the user could choose on an individual functionality base
>> and configure the tool based on his needs.
>> I guess satisfying the reasons a. and c. from above could be
>> implemented via UI customisation even on an individual
>> Kimchi/Ginger user base.
>> Reason b. can be probably achieved only by segregating the set of
>> fuctionality in separate plugins.
>>
>>
>> On 04.08.2015 17:26, Walter Niklaus wrote:
>>> ... Daniel sorry for the duplicate send, I missed to reply to
>>> all so the mail didn't go to the mailing list.
>>> On 04.08.2015 14:39, Daniel Henrique Barboza wrote:
>>>>
>>>> On 08/04/2015 04:56 AM, Walter Niklaus wrote:
>>>>> Hi Daniel,
>>>>>
>>>>> sorry for missing the thread where this topic was discussed.
>>>>>
>>>>> I can fully understand the point about Basic Information and
>>>>> System Statistics being relevant for Virtualization management
>>>>> as well and I like the idea of potentially making it part of
>>>>> the base framework because they would be very usefull for
>>>>> other plugins, like Container-Management as well.
>>>>> The interesting question is then if some of the other
>>>>> functions wouldn't make sense to be part of the basic
>>>>> framework as well. Debug reports would be a classical
>>>>> candidate from my point of view, but wouldn't some of the
>>>>> other functions be usefull in the base as well ?
>>>>
>>>> If we're really going in that approach (putting basic features
>>>> in WoK), I agree. We would have to
>>>> discuss each existing feature and evaluate if it belongs to
>>>> kimchi, ginger or wok.
>>>
>>> I guess we really need to have a discussion on the individual
>>> features but I would like to start this one from a user
>>> requirements point of view.
>>> Currently I see the following major usecases now and in the near
>>> feature:
>>> 1. A user wants to perform base Linux management only.
>>> 2. A user wants to manage KVM Virtual Machines.
>>> 3. A user wants to manage Containers.
>>> 4. A user wants to manage Containers and KVM Virtual Machines .
>>>
>>> For the usecases 2, 3 and 4 the user needs usecase 1 as well in
>>> order to prepare and manage the Host machine.
>>>
>>> I'm not proposing to make the Linux Host Management part of the
>>> base framework because we just separated out Kimchi of it, but I
>>> think it makes a lot of sense to deliver the Host Management
>>> plugin by default with the base framework.
>>>>>
>>>>> Looking at the problem form a different angle: wouldn't it
>>>>> make sense to package and deliver the base framework with the
>>>>> Ginger plugin by default because the Host-functionality Ginger
>>>>> is offering would be usefull for the other plugins like
>>>>> Virtualization and Containers ?
>>>>>
>>>>> What I missed in my previous mail is the aspect about platform
>>>>> specific functionality. This functionality, like PPC firmware
>>>>> update or IO-device management for Linux on z should be made
>>>>> available as individual plugins.
>>>>
>>>> At this moment Ginger can handle multi-arch features fairly
>>>> well. For example, Firmware
>>>> Update does not appear when running the plug-in in an Intel
>>>> computer. The feature you mentioned,
>>>> IO-device management for Linux on Z, would be available only
>>>> when running Ginger in a Linux
>>>> for Z host.
>>>>
>>>> There's absolutely nothing holding you from making a brand new
>>>> plug-in for the Z features instead
>>>> of adding them to Ginger, but it is important to know that
>>>> Ginger is designed for these scenarios.
>>>> You can even create a new UI tab in Ginger, something like 'Z
>>>> management' which would contain all Z related features. This
>>>> tab would only appear in a Linux on Z host. From the UI
>>>> perspective it looks
>>>> like a brand new plug-in working together with Ginger common
>>>> features in the 'Administration' tab.
>>>>>
>>>>> Please let me know what you think about this option.
>>>>>
>>>>> Thanks,
>>>>> Walter.
>>>>>
>>>>> On 03.08.2015 18:51, Daniel Henrique Barboza wrote:
>>>>>> Hi Walter,
>>>>>>
>>>>>> We've had this discussion with the community a few months ago
>>>>>> in the thread
>>>>>>
>>>>>> "[RFC] Moving some features of Host tab to Ginger"
>>>>>>
>>>>>> And we agreed to start it by moving only Software Update,
>>>>>> Repositories and
>>>>>> Debug Reports from Kimchi to Ginger.
>>>>>>
>>>>>> The Basic Information and System Statistics can't be taken
>>>>>> away from Kimchi because there
>>>>>> are relevant information for the creation of VMs there, such
>>>>>> as Memory Available. But I agree
>>>>>> that these information fits nicely in Ginger too.
>>>>>>
>>>>>> One alternative (just came in my head now) is to move these
>>>>>> "neutral" functions
>>>>>> to a "Basic System Info" in WoK. That way both Kimchi and
>>>>>> Ginger users can access
>>>>>> the information.
>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>>
>>>>>> Daniel
>>>>>> On 08/03/2015 12:15 PM, Walter Niklaus wrote:
>>>>>>>
>>>>>>> After separating out Kimchi as an indvidual plugin from the base
>>>>>>> framework it would be great to have a clean separation
>>>>>>> between Host- and
>>>>>>> Virtualization Management functions. I'm planning to work on
>>>>>>> this topic
>>>>>>> in the next few weeks and have prepared a proposal of the
>>>>>>> functionsplit.
>>>>>>> Plugin functionality:
>>>>>>> - Ginger:
>>>>>>> - Basic Information
>>>>>>> - System Statistics
>>>>>>> - Network (Host NICs)
>>>>>>> - Storage/SAN (Host Storage)
>>>>>>> - User Management
>>>>>>> - Configuration Backup
>>>>>>> - Software Updates
>>>>>>> - Repositories
>>>>>>> - Debug Reports
>>>>>>> - PPC related functions: Firmware Update & Power
>>>>>>> Management
>>>>>>> - Kimchi:
>>>>>>> - Templates
>>>>>>> - Guests
>>>>>>> - Networks (virtual)
>>>>>>> - Storage (Pools for VMs)
>>>>>>>
>>>>>>> Since there are plans to restructure the UI for one of the next
>>>>>>> releases, I'm proposing to do only some minimal investments in
>>>>>>> reflecting this new finctionsplit. Therefore I'm proposing
>>>>>>> to make the
>>>>>>> Host tab as the one and only Tab for Ginger and move
>>>>>>> everything from the
>>>>>>> Administration Tab into the Host Tab. This would be just an
>>>>>>> intermediate solution till we implement the new UI design.
>>>>>>> Please see
>>>>>>> the attached PDF.
>>>>>>> Thanks in advance for your feedback.
>>>>>>>
>>>>>>> Walter.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Kimchi-devel mailing list
>>>>>>> Kimchi-devel(a)ovirt.org <mailto:Kimchi-devel@ovirt.org>
>>>>>>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>>>>>
>>>>>> _______________________________________________
>>>>>> Kimchi-devel mailing list
>>>>>> Kimchi-devel(a)ovirt.org <mailto:Kimchi-devel@ovirt.org>
>>>>>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>
>> _______________________________________________
>> Kimchi-devel mailing list
>> Kimchi-devel(a)ovirt.org <mailto:Kimchi-devel@ovirt.org>
>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
> _______________________________________________
> Kimchi-devel mailing list
> Kimchi-devel(a)ovirt.org
> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>
>
1
0
On 06/08/2015 14:27, Harshal Patil wrote:
> This is all cool. So when you talk about wok being the base web
> framework where it provides basic services like login, logout, plugin
> support, i18n etc. to plugin developers do you think adding 'auth' as
> another service provided by wok to plugin developers makes any sense?
> Like you mentioned on IRC during scrum meeting, someone might even
> write a wok plugin for makeup tips and you are totally fine with it.
> Do you think if we provide an easy way for that developer to
> authenticate his/her plugin's users quickly and easily? Something
> other python web frameworks like flask already provide
> (http://flask.pocoo.org/snippets/category/authentication/) or even
> cherrypy for that matter
> (http://tools.cherrypy.org/wiki/AuthenticationAndAccessRestrictions)
> They provide nice decorators which plugin developers can use in their
> handlers (exposed in the language of cherrypy) methods.
> We could provide a nice wrapper around those ideas for authentication
> using say, PAM, NIS+, LDAP etc.
> What do you say?
Wait! Wait! We are talking on different topics.
Wok already supports PAM and LDAP authentication. You can properly
configure which method to use in your wok.conf file.
To do the authentication on server side we have the APIs /login and
/logout - to initialize and finalize a web server session to an user.
If we are talking about authentication methods, the API already exists.
What I and Lucio were talking is how to check user has a valid session
for each AJAX request - for that you should add the 'wok'-robot' header
to your AJAX calls.
> ----- Original message -----
> From: Aline Manera <alinefm(a)linux.vnet.ibm.com>
> To: luciojhc(a)linux.vnet.ibm.com, Harshal Patil/India/IBM@IBMIN,
> kimchi-devel(a)ovirt.org
> Cc:
> Subject: Re: [Kimchi-devel] adding '/auth' for authentication
> Date: Thu, Aug 6, 2015 6:27 PM
>
> On 05/08/2015 18:02, Lucio Correia wrote:
> > On 08/05/2015 04:27 PM, Aline Manera wrote:
> >>
> >>
> >> On 05/08/2015 14:56, Lucio Correia wrote:
> >>> Hi Harshal,
> >>>
> >>> On 08/02/2015 01:45 PM, Harshal Patil wrote:
> >>>> Hi,
> >>>> In the 'wok' branch there isn't anything to detect if the
> session has
> >>>> timed out on the browser side. On the other hand, on master
> (kimchi)
> >>>> there is '/vms' endpoint called every 5 seconds which kinda
> takes care
> >>>> of making sure the user is indeed logged in.
> >>>> So I was wondering, if no one is already working on it, to
> introduce a
> >>>> '/auth' endpoint which we can poll every 5 seconds using ajax and
> >>>> based
> >>>> on the response status code we can either redirect to login
> page or
> >>>> just
> >>>> stay on the same page. This is useful in 'wok' because there
> isn't any
> >>>> '/vms' endpoint which existed in master (kimchi) by default.
> >>>> I can submit a patch for review if this sounds good so far.
> Also, if
> >>>> there is a better way of doing it, I would love to hear about it.
> >>>> Harshal
> >>>>
> >>>>
> >>>
> >>> The 10-minutes time out is still working with wok branch. But
> it is
> >>> only verified if you leave it in "Host" or "Guests" tab. Other
> tabs'
> >>> APIs don't send "wok-robot" in headers.
> >>>
> >>> Your proposal is good, you will need to send "wok-robot" in
> '/auth'
> >>> headers, and remove the "wok-robot" from kimchi plugin's Host and
> >>> Guests API headers.
> >>
> >> Why do you need a API /auth to check the user is logged?
> Shouldn't the
> >> "wok-robot" header be enough to do that?
> >> Otherwise, we will increase significantly the number of the
> requests, as
> >> the real request would be send after a /auth request.
> >>
> >
> > Good point Aline, we really don't need /auth. If we want timeout
> > checked for every request, I see two alternatives:
> > * drop wok-robot verification from check_auth_session() in
> > src/wok/auth.py.
> > * add wok-robot headers to requestJSON() in wok.api.js.
>
> I prefer the second alternative. The 'wok-robot' header was created to
> distinguish AJAX requests from user requests.
>
> >
> > But I don't know why currently only hosts and guests tab use
> wok-robot.
> >
>
> Because only those tabs have logic to pool the request every X
> seconds.
> In fact, we need to add this to every tab to keep consistence and
> automatically logout user when session expires.
>
>
1
0
[PATCH 1/1] Enabling help page for wok base. This commit supports en_US only.
by sureshab@linux.vnet.ibm.com 06 Aug '15
by sureshab@linux.vnet.ibm.com 06 Aug '15
06 Aug '15
From: Suresh Babu Angadi <sureshab(a)linux.vnet.ibm.com>
Signed-off-by: Suresh Babu Angadi <sureshab(a)linux.vnet.ibm.com>
---
configure.ac | 2 +
src/wok/config.py.in | 5 +
ui/js/src/wok.main.js | 9 +-
ui/pages/Makefile.am | 2 +-
ui/pages/help/Makefile.am | 34 +++++++
ui/pages/help/dita-help.xsl | 26 +++++
ui/pages/help/en_US/Makefile.am | 23 +++++
ui/pages/help/en_US/wokhelp.dita | 27 +++++
ui/pages/help/wok.css | 208 +++++++++++++++++++++++++++++++++++++++
9 files changed, 333 insertions(+), 3 deletions(-)
create mode 100644 ui/pages/help/Makefile.am
create mode 100644 ui/pages/help/dita-help.xsl
create mode 100644 ui/pages/help/en_US/Makefile.am
create mode 100644 ui/pages/help/en_US/wokhelp.dita
create mode 100644 ui/pages/help/wok.css
diff --git a/configure.ac b/configure.ac
index 47c2e6c..ee4d793 100644
--- a/configure.ac
+++ b/configure.ac
@@ -115,6 +115,8 @@ AC_CONFIG_FILES([
ui/libs/themes/base/Makefile
ui/libs/themes/base/images/Makefile
ui/pages/Makefile
+ ui/pages/help/Makefile
+ ui/pages/help/en_US/Makefile
ui/pages/websockify/Makefile
contrib/Makefile
contrib/DEBIAN/Makefile
diff --git a/src/wok/config.py.in b/src/wok/config.py.in
index 5ffa936..c158a75 100644
--- a/src/wok/config.py.in
+++ b/src/wok/config.py.in
@@ -142,6 +142,11 @@ class WokConfig(dict):
'/wok-ui.html': {
'tools.wokauth.on': True
},
+ '/help': {
+ 'tools.staticdir.on': True,
+ 'tools.staticdir.dir': '%s/ui/pages/help' % paths.prefix,
+ 'tools.nocache.on': True
+ }
}
def __init__(self):
diff --git a/ui/js/src/wok.main.js b/ui/js/src/wok.main.js
index f4c9940..3dd76b8 100644
--- a/ui/js/src/wok.main.js
+++ b/ui/js/src/wok.main.js
@@ -349,7 +349,12 @@ wok.checkHelpFile = function(path) {
wok.openHelp = function(e) {
var tab = $('#nav-menu a.current');
- var url = $(tab).parent().find("input[name='helpPath']").val();
- window.open(url, "Wok Help");
+ if (tab.length == 0 ){
+ window.open("help/en_US/wokhelp.html","Wok Help")
+ }
+ else {
+ var url = $(tab).parent().find("input[name='helpPath']").val();
+ window.open(url, "Wok Help");
+ }
e.preventDefault();
};
diff --git a/ui/pages/Makefile.am b/ui/pages/Makefile.am
index 68f4c92..b3f5c2e 100644
--- a/ui/pages/Makefile.am
+++ b/ui/pages/Makefile.am
@@ -15,7 +15,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-SUBDIRS = websockify
+SUBDIRS = websockify help
htmldir = $(datadir)/wok/ui/pages
diff --git a/ui/pages/help/Makefile.am b/ui/pages/help/Makefile.am
new file mode 100644
index 0000000..0dc8d9f
--- /dev/null
+++ b/ui/pages/help/Makefile.am
@@ -0,0 +1,34 @@
+# Copyright IBM Corp, 2014
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+SUBDIRS = en_US
+
+DITA_HTML_FILES = $(patsubst %.dita,%.html,$(wildcard */*.dita))
+HTML_FILES = $(if $(DITA_HTML_FILES), $(DITA_HTML_FILES), $(wildcard */*.html))
+DITA_XSL_FILE = dita-help.xsl
+
+EXTRA_DIST = $(DITA_XSL_FILE)
+
+helpdir = $(datadir)/wok/ui/pages/help
+
+dist_help_DATA = wok.css
+
+all: $(HTML_FILES) $(wildcard */*.dita)
+
+%.html: %.dita $(DITA_XSL_FILE)
+ xsltproc -o $@ $(DITA_XSL_FILE) $<
+
+CLEANFILES = $(HTML_FILES)
\ No newline at end of file
diff --git a/ui/pages/help/dita-help.xsl b/ui/pages/help/dita-help.xsl
new file mode 100644
index 0000000..fb49855
--- /dev/null
+++ b/ui/pages/help/dita-help.xsl
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:output method="xml" indent="yes" encoding="UTF-8" />
+
+ <xsl:template match="/">
+ <html>
+ <head>
+ <title><xsl:value-of select="/cshelp/title" /></title>
+ <meta charset="UTF-8" />
+ <link rel="shortcut icon" href="../../images/logo.ico" />
+ <link rel="stylesheet" type="text/css" href="../wok.css" />
+ </head>
+ <body>
+ <xsl:apply-templates select="//cshelp" />
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template match="cshelp">
+ <h1><xsl:value-of select="title" /></h1>
+ <p class="shortdesc"><xsl:value-of select="shortdesc" /></p>
+ <p class="csbody"><xsl:copy-of select="csbody/node()" /></p>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/ui/pages/help/en_US/Makefile.am b/ui/pages/help/en_US/Makefile.am
new file mode 100644
index 0000000..b1e807d
--- /dev/null
+++ b/ui/pages/help/en_US/Makefile.am
@@ -0,0 +1,23 @@
+# Copyright IBM Corp, 2014
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+en_US_helpdir = $(datadir)/wok/ui/pages/help/en_US
+
+dist_en_US_help_DATA = $(wildcard *.html) $(NULL)
+
+EXTRA_DIST = $(wildcard *.dita)
+
+CLEANFILES = $(wildcard *.html)
\ No newline at end of file
diff --git a/ui/pages/help/en_US/wokhelp.dita b/ui/pages/help/en_US/wokhelp.dita
new file mode 100644
index 0000000..582e47b
--- /dev/null
+++ b/ui/pages/help/en_US/wokhelp.dita
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Arbortext, Inc., 1988-2011, v.4002-->
+<!DOCTYPE cshelp PUBLIC "-//IBM//DTD DITA CSHelp//EN"
+ "..\dtd\cshelp.dtd">
+<?Pub Sty _display FontColor="red"?>
+<?Pub Inc?>
+<!--This DITA specialized document type is not supported by the Authoring Tools development team.
+For support please see:
+https://w3.opensource.ibm.com/projects/dita-cshelp/-->
+<cshelp id="wokbase" xml:lang="en-us">
+<title>Wok (Webserver Originated from Kimchi)</title>
+<shortdesc>Wok is a cherrypy-based web framework with HTML5 support that is extended by plugins which expose functionality through REST APIs.</shortdesc>
+<csbody>
+<p>Currently available plugins are Kimchi (Virtualization Management) and Ginger (System Administration).
+Wok comes with a sample plugin for education purposes.<ul>
+<li><uicontrol>Download Kimchi : </uicontrol>
+<a href="https://github.com/kimchi-project/kimchi/tree/wok"
+target="_blank" >https://github.com/kimchi-project/kimchi/tree/wok</a>
+</li>
+<li><uicontrol>Download Ginger : </uicontrol>
+<a href="https://github.com/kimchi-project/ginger/tree/ginger_wok"
+target="_blank" >https://github.com/kimchi-project/ginger/tree/ginger_wok</a>
+</li>
+</ul>
+</p>
+</csbody>
+</cshelp>
diff --git a/ui/pages/help/wok.css b/ui/pages/help/wok.css
new file mode 100644
index 0000000..32fae4a
--- /dev/null
+++ b/ui/pages/help/wok.css
@@ -0,0 +1,208 @@
+/*
+ * Project Kimchi
+ *
+ * Copyright IBM, Corp. 2014
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 {
+ background: #FFFFFF;
+ margin-bottom: 1em;
+ margin-left: .5em;
+}
+
+bold {
+ font-weight: bold;
+}
+
+boldItalic {
+ font-weight: bold;
+ font-style: italic;
+}
+
+italic {
+ font-style: italic;
+}
+
+underlined {
+ text-decoration: underline;
+}
+
+uicontrol {
+ font-weight: bold;
+}
+
+filepath {
+ font-family: monospace, monospace;
+}.option {
+ font-family: monospace, monospace;
+}
+
+cmdname {
+ font-weight: bold;
+ font-family: monospace, monospace;
+}
+
+.defparmname {
+ font-weight: bold;
+ text-decoration: underline;
+ font-family: monospace, monospace;
+}
+
+.kwd {
+ font-weight: bold;
+}
+
+.defkwd {
+ font-weight: bold;
+ text-decoration: underline;
+}
+
+var {
+ font-style : italic;
+}
+
+strongwintitle {
+ font-weight : bold;
+}
+
+parmname {
+ font-weight: bold;
+ font-family: monospace, monospace;
+ white-space: nowrap;
+}
+
+code {
+ font-family: monospace, monospace;
+}
+
+pre {
+ font-family: monospace, monospace;
+}
+
+CITE {
+ font-style: italic;
+}
+
+EM {
+ font-style: italic;
+}
+
+STRONG {
+ font-weight: bold;
+}
+
+VAR {
+ font-style: italic;
+}
+
+dt {
+ font-weight: bold;
+}
+
+/***********************************************************
+ * Basic fonts
+ ***********************************************************/
+body,
+td,
+th,
+caption {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10pt;
+}
+
+pre, code {
+ font-family: MS Courier New, Courier, monospace;
+}
+
+h1, h2, h3 {
+ font-size: 12pt;
+ font-weight: bold;
+ color: #336699;
+}
+
+h4 {
+ font-size: 10pt;
+ font-weight: bold;
+ color: #336699;
+}
+
+/***********************************************************
+ * Basic indents, padding, and margin
+ ***********************************************************/
+body {
+ color: black;
+ background-color: white;
+ margin: 0;
+ padding-top: 0.2em;
+ padding-left: 0.6em;
+ padding-right: 0.2em;
+ padding-bottom: 1em;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ padding: 0;
+ margin-top: 1em;
+ margin-bottom: 0.75em;
+ margin-left: 0;
+ margin-right: 0;
+}
+
+address,
+dl,
+li,
+p {
+ padding: 0;
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+ margin-left: 0;
+ margin-right: 0;
+ line-height: 125%;
+}
+
+td dl {
+ margin-left: 2em;
+}
+
+pre {
+ padding: 0;
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+ margin-left: 2em;
+ margin-right: 0;
+}
+
+ol,
+ul {
+ padding: 0;
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+ margin-left: 2.00em;
+ margin-right: 0;
+}
+
+dd {
+ margin-left: 3.00em;
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+}
+
+dt {
+ margin-left: 1.00em;
+ margin-top: 0.75em;
+}
--
2.1.0
3
3
06 Aug '15
From: Daniel Henrique Barboza <dhbarboza82(a)gmail.com>
There are no official Kimchi support for VMs running with under 2048Mb
of RAM in Power systems. This patch set the default memory of templates
created in Power hosts to 2048, instead of 1280.
This patch also adds the default memory for x86_64 arch to the
template_specs dict of osinfo.py instead of hardcoding the value in the
_get_tmpl_defaults() function.
Signed-off-by: Daniel Henrique Barboza <dhbarboza82(a)gmail.com>
---
src/kimchi/osinfo.py | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/src/kimchi/osinfo.py b/src/kimchi/osinfo.py
index 78eb828..f8ab7da 100644
--- a/src/kimchi/osinfo.py
+++ b/src/kimchi/osinfo.py
@@ -35,37 +35,39 @@ SUPPORTED_ARCHS = {'x86': ('i386', 'i686', 'x86_64'),
template_specs = {'x86': {'old': dict(disk_bus='ide',
- nic_model='e1000', sound_model='ich6'),
+ nic_model='e1000', sound_model='ich6',
+ memory=1024),
'modern': dict(disk_bus='virtio',
nic_model='virtio',
- sound_model='ich6')},
+ sound_model='ich6',
+ memory=1024)},
'power': {'old': dict(disk_bus='scsi',
nic_model='spapr-vlan',
cdrom_bus='scsi',
kbd_type="kbd",
kbd_bus='usb', mouse_bus='usb',
- tablet_bus='usb', memory=1280),
+ tablet_bus='usb', memory=2048),
'modern': dict(disk_bus='virtio',
nic_model='virtio',
cdrom_bus='scsi',
kbd_bus='usb',
kbd_type="kbd",
mouse_bus='usb', tablet_bus='usb',
- memory=1280)},
+ memory=2048)},
'ppc64le': {'old': dict(disk_bus='virtio',
nic_model='virtio',
cdrom_bus='scsi',
kbd_bus='usb',
kbd_type="keyboard",
mouse_bus='usb', tablet_bus='usb',
- memory=1280),
+ memory=2048),
'modern': dict(disk_bus='virtio',
nic_model='virtio',
cdrom_bus='scsi',
kbd_bus='usb',
kbd_type="keyboard",
mouse_bus='usb', tablet_bus='usb',
- memory=1280)}}
+ memory=2048)}}
custom_specs = {'fedora': {'22': dict(video_model='qxl')}}
@@ -107,7 +109,6 @@ def _get_tmpl_defaults():
# Create dict with default values
tmpl_defaults = defaultdict(dict)
tmpl_defaults['main']['networks'] = ['default']
- tmpl_defaults['main']['memory'] = 1024
tmpl_defaults['storage']['pool'] = 'default'
tmpl_defaults['storage']['disk.0'] = {'size': 10, 'format': 'qcow2'}
tmpl_defaults['processor']['cpus'] = 1
--
2.4.3
1
0
3
5
From: Daniel Henrique Barboza <dhbarboza82(a)gmail.com>
At this moment Kimchi for Power systems does not support guests
created with less that 2Gb of RAM. This patch set the default
Power template to reflect it.
Any user defined setting in template.conf will overwrite this
default. This is intended. The user must have the final
word in the customization of his/her VM templates.
Signed-off-by: Daniel Henrique Barboza <dhbarboza82(a)gmail.com>
---
src/kimchi/osinfo.py | 26 +++++++++++++++-----------
1 file changed, 15 insertions(+), 11 deletions(-)
diff --git a/src/kimchi/osinfo.py b/src/kimchi/osinfo.py
index 78eb828..6506f2d 100644
--- a/src/kimchi/osinfo.py
+++ b/src/kimchi/osinfo.py
@@ -44,28 +44,28 @@ template_specs = {'x86': {'old': dict(disk_bus='ide',
cdrom_bus='scsi',
kbd_type="kbd",
kbd_bus='usb', mouse_bus='usb',
- tablet_bus='usb', memory=1280),
+ tablet_bus='usb', memory=2048),
'modern': dict(disk_bus='virtio',
nic_model='virtio',
cdrom_bus='scsi',
kbd_bus='usb',
kbd_type="kbd",
mouse_bus='usb', tablet_bus='usb',
- memory=1280)},
+ memory=2048)},
'ppc64le': {'old': dict(disk_bus='virtio',
nic_model='virtio',
cdrom_bus='scsi',
kbd_bus='usb',
kbd_type="keyboard",
mouse_bus='usb', tablet_bus='usb',
- memory=1280),
+ memory=2048),
'modern': dict(disk_bus='virtio',
nic_model='virtio',
cdrom_bus='scsi',
kbd_bus='usb',
kbd_type="keyboard",
mouse_bus='usb', tablet_bus='usb',
- memory=1280)}}
+ memory=2048)}}
custom_specs = {'fedora': {'22': dict(video_model='qxl')}}
@@ -89,6 +89,16 @@ icon_available_distros = [icon[5:-4] for icon in glob.glob1('%s/images/'
% paths.ui_dir, 'icon-*.png')]
+def _get_arch():
+ for arch, sub_archs in SUPPORTED_ARCHS.iteritems():
+ if os.uname()[4] in sub_archs:
+ return arch
+
+
+def _get_default_template_mem(host_arch):
+ return template_specs[host_arch]['modern'].get('memory', 1024)
+
+
def _get_tmpl_defaults():
"""
ConfigObj returns a dict like below when no changes were made in the
@@ -107,7 +117,7 @@ def _get_tmpl_defaults():
# Create dict with default values
tmpl_defaults = defaultdict(dict)
tmpl_defaults['main']['networks'] = ['default']
- tmpl_defaults['main']['memory'] = 1024
+ tmpl_defaults['main']['memory'] = _get_default_template_mem(_get_arch())
tmpl_defaults['storage']['pool'] = 'default'
tmpl_defaults['storage']['disk.0'] = {'size': 10, 'format': 'qcow2'}
tmpl_defaults['processor']['cpus'] = 1
@@ -157,12 +167,6 @@ def _get_tmpl_defaults():
defaults = _get_tmpl_defaults()
-def _get_arch():
- for arch, sub_archs in SUPPORTED_ARCHS.iteritems():
- if os.uname()[4] in sub_archs:
- return arch
-
-
def get_template_default(template_type, field):
host_arch = _get_arch()
# Assuming 'power' = 'ppc64le' because lookup() does the same,
--
2.4.3
3
2
Hi,
did anyone hit an issue using kimchi inside a VNC session?
I tried to use Kimchi inside it, and i can't type on the novnc console.
--
Ramon Nunes Medeiros
Kimchi Developer
Linux Technology Center Brazil
IBM Systems & Technology Group
Phone : +55 19 2132 7878
ramonn(a)br.ibm.com
3
3
Hi Kimchi Devel-team,
There was good amount of discussion on using of bootstrap or foundation 5
for the new-ui development for WOK branch in the IRC (on 2015-07-08).
Question I have on this topic:
1. Are we experimenting with bootstrap and decide in the near future on
technology for new-ui development or bootstrap is the way to go for UI ?
2. Also are we applying the design thinking as well when it comes to new-ui
development for kimchi?
3. Do we have time line to accomplish this transformation ?
We have seen few UI issues in the WOK branch after separation of kimchi
plugin from base frame work (Issues #704-709). I see all of them labeled as
'wok' now. So for short time is it worth while to fix these issues ? If so,
is there a way assign these to my team members or some body help us in
fixing these issues ?
Thanks in advance,
Regards
Chandra
3
3
Hi team,
i was trying to cache 2 objects, but they came from a HTTP request, and
took some time to download it. I was unable to use the function
setTimeout while calling this function:
kimchi.getPCIDeviceCompanions(kimchi.hostPCIs[i].name,
setTimeout(function(result) {
kimchi.deviceCompanions[kimchi.hostPCIs[i].name] = result;
},5000));
}
The function kimchi.getPCIDeviceCompanions usually takes 2s to finish.
--
Ramon Nunes Medeiros
Kimchi Developer
Linux Technology Center Brazil
IBM Systems & Technology Group
Phone : +55 19 2132 7878
ramonn(a)br.ibm.com
3
5
05 Aug '15
v3 changes:
* Rebased with new-ui
* Reorganized UI files and removed unnecessary duplicated ones
* Added patch 01 to fix new-ui branch
* Added patch 33 to split error messages
* Added patch 34 to move small specific css code to plugin
Github branch URL:
https://github.com/lcorreia/kimchi/tree/lcorreia/wok-v3
This patchset splits code into web server framework (Wok) and virtualization
layer functionality (Kimchi, made a plugin). Wok stands for Webserver Originated
from Kimchi.
It's now stable and working.
Despite the size of patchset, the review will be straightforward. The biggest
patches have only repetitive changes, like file/variable renames or URI changes.
Patches organization:
* 02 to 04: just renames, no code changes.
* 05: just duplications of files
* 06 to 14: initial changes - mostly repetitive stuff like renames
* 15 and 16: core changes - a good summary of reorganization done to the code
* 17 to 29: small fixes necessary for the reorganization to work
* 30 to 34: additional fixes
Patches 02 to 29 should be applied as a single commit in order to not break
functionality. They are separated here to easy the reviewers work.
Thanks,
Signed-off-by: Lucio Correia <luciojhc(a)linux.vnet.ibm.com>
Signed-off-by: Gustavo Y. Ribeiro <gyr(a)linux.vnet.ibm.com>
Lucio Correia (34):
Add makefiles for fontello
Create kimchi plugin
Rename src/kimchi to src/wok
Rename kimchi-named files to wok
Duplicate some files
Update wok docs
Update kimchi plugin docs
Update wok build files
Update kimchi plugin makefiles
Update wok daemon and specs
Update kimchi plugin rpm specs
Adapt imports to the new plugin structure
Update server references to wok
Use plugin relative URLs
Setup wok
Setup kimchi plugin
Use InternalRedirect for all plugin redirects
Dynamically add authed URLs to plugin conf
Do not use tabs dir for kimchi plugin html templates
Refer to kimchi plugin specific js/css in htmls
Do not generate help index
Fix import_module
Make render_cheetah_file() plugin-aware
Make cachebust's href() plugin-aware
Default to first tab of first plugin
Fix storage pool URI split
Correctly join help pathes for plugins case
Install plugin .mo files to default locale dir
Adapt automated tests to the new plugin structure
Use pool_uri to avoid case pool_name is not defined
Fix Fedora RPM build issue
Organize imports in all .py files
Split error messages between wok and kimchi plugin
Move kimchi-specific CSS to plugin
.gitignore | 18 +-
COPYING | 8 +-
Makefile.am | 91 +-
config/Makefile.am | 18 -
config/ui/Makefile.am | 22 -
config/ui/tabs.xml | 38 -
configure.ac | 41 +-
contrib/DEBIAN/control.in | 15 +-
contrib/DEBIAN/postrm | 4 +-
contrib/Makefile.am | 12 +-
contrib/kimchi.spec.fedora.in | 189 --
contrib/kimchi.spec.suse.in | 150 -
contrib/kimchid-upstart.conf.debian | 34 -
contrib/kimchid-upstart.conf.fedora | 33 -
contrib/kimchid.service.fedora | 13 -
contrib/kimchid.sysvinit | 104 -
contrib/make-deb.sh.in | 2 +-
contrib/wok.spec.fedora.in | 159 +
contrib/wok.spec.suse.in | 133 +
contrib/wokd-upstart.conf.debian | 28 +
contrib/wokd-upstart.conf.fedora | 28 +
contrib/wokd.service.fedora | 13 +
contrib/wokd.sysvinit | 104 +
docs/API.md | 1123 +-------
docs/Makefile.am | 9 +-
docs/README-federation.md | 60 -
docs/README.md | 202 +--
docs/{kimchid.8.in => wokd.8.in} | 0
plugins/Makefile.am | 2 +-
plugins/kimchi/.gitignore | 37 +
plugins/kimchi/API.json | 836 ++++++
plugins/kimchi/INSTALL | 369 +++
plugins/kimchi/Makefile.am | 159 +
plugins/kimchi/README.md | 1 +
plugins/kimchi/VERSION | 1 +
plugins/kimchi/__init__.py | 21 +
plugins/kimchi/autogen.sh | 21 +
plugins/kimchi/build-aux/config.rpath | 672 +++++
plugins/kimchi/build-aux/genChangelog | 25 +
plugins/kimchi/build-aux/pkg-version | 59 +
plugins/kimchi/config.py.in | 139 +
plugins/kimchi/config.rpath | 672 +++++
plugins/kimchi/configure.ac | 119 +
plugins/kimchi/contrib/DEBIAN/Makefile.am | 17 +
plugins/kimchi/contrib/DEBIAN/control.in | 36 +
plugins/kimchi/contrib/Makefile.am | 34 +
plugins/kimchi/contrib/check_i18n.py | 82 +
plugins/kimchi/contrib/kimchi.spec.fedora.in | 124 +
plugins/kimchi/contrib/kimchi.spec.suse.in | 113 +
{contrib => plugins/kimchi/contrib}/make-deb.sh.in | 0
plugins/kimchi/control/Makefile.am | 27 +
plugins/kimchi/control/__init__.py | 26 +
plugins/kimchi/control/config.py | 57 +
plugins/kimchi/control/cpuinfo.py | 37 +
plugins/kimchi/control/debugreports.py | 61 +
plugins/kimchi/control/groups.py | 28 +
plugins/kimchi/control/host.py | 157 +
plugins/kimchi/control/interfaces.py | 46 +
plugins/kimchi/control/networks.py | 54 +
plugins/kimchi/control/peers.py | 29 +
plugins/kimchi/control/storagepools.py | 116 +
plugins/kimchi/control/storageservers.py | 60 +
plugins/kimchi/control/storagevolumes.py | 83 +
plugins/kimchi/control/tasks.py | 37 +
plugins/kimchi/control/templates.py | 58 +
plugins/kimchi/control/users.py | 35 +
plugins/kimchi/control/vm/Makefile.am | 26 +
plugins/kimchi/control/vm/__init__.py | 26 +
plugins/kimchi/control/vm/hostdevs.py | 43 +
plugins/kimchi/control/vm/ifaces.py | 45 +
plugins/kimchi/control/vm/snapshots.py | 58 +
plugins/kimchi/control/vm/storages.py | 45 +
plugins/kimchi/control/vms.py | 67 +
plugins/kimchi/disks.py | 196 ++
plugins/kimchi/distroloader.py | 67 +
{src => plugins/kimchi}/distros.d/Makefile.am | 0
{src => plugins/kimchi}/distros.d/debian.json | 0
{src => plugins/kimchi}/distros.d/fedora.json | 0
{src => plugins/kimchi}/distros.d/gentoo.json | 0
{src => plugins/kimchi}/distros.d/opensuse.json | 0
{src => plugins/kimchi}/distros.d/ubuntu.json | 0
plugins/kimchi/docs/API.md | 1147 +++++++
plugins/kimchi/docs/Makefile.am | 28 +
plugins/kimchi/docs/README-federation.md | 60 +
plugins/kimchi/docs/README.md | 247 ++
{docs => plugins/kimchi/docs}/kimchi-guest.png | Bin 192281 -> 192281 bytes
{docs => plugins/kimchi/docs}/kimchi-login.png | Bin 318041 -> 318041 bytes
{docs => plugins/kimchi/docs}/kimchi-templates.png | Bin 329678 -> 329678 bytes
plugins/kimchi/i18n.py | 336 +++
plugins/kimchi/imageinfo.py | 72 +
plugins/kimchi/iscsi.py | 88 +
plugins/kimchi/isoinfo.py | 506 ++++
plugins/kimchi/kimchi.conf | 45 +
plugins/kimchi/kvmusertests.py | 79 +
plugins/kimchi/m4/ac_python_module.m4 | 30 +
plugins/kimchi/m4/gettext.m4 | 383 +++
plugins/kimchi/m4/iconv.m4 | 214 ++
plugins/kimchi/m4/intlmacosx.m4 | 51 +
plugins/kimchi/m4/lib-ld.m4 | 110 +
plugins/kimchi/m4/lib-link.m4 | 774 +++++
plugins/kimchi/m4/lib-prefix.m4 | 224 ++
plugins/kimchi/m4/nls.m4 | 32 +
plugins/kimchi/m4/po.m4 | 449 +++
plugins/kimchi/m4/progtest.m4 | 92 +
plugins/kimchi/mockmodel.py | 624 ++++
plugins/kimchi/model/Makefile.am | 25 +
{src => plugins}/kimchi/model/__init__.py | 0
plugins/kimchi/model/config.py | 176 ++
plugins/kimchi/model/cpuinfo.py | 126 +
plugins/kimchi/model/debugreports.py | 213 ++
plugins/kimchi/model/diskutils.py | 75 +
plugins/kimchi/model/featuretests.py | 259 ++
plugins/kimchi/model/groups.py | 67 +
plugins/kimchi/model/host.py | 476 +++
plugins/kimchi/model/hostdev.py | 324 ++
plugins/kimchi/model/interfaces.py | 44 +
plugins/kimchi/model/libvirtconnection.py | 136 +
plugins/kimchi/model/libvirtstoragepool.py | 264 ++
plugins/kimchi/model/model.py | 52 +
plugins/kimchi/model/networks.py | 381 +++
plugins/kimchi/model/peers.py | 72 +
plugins/kimchi/model/storagepools.py | 491 +++
plugins/kimchi/model/storageservers.py | 81 +
plugins/kimchi/model/storagetargets.py | 122 +
plugins/kimchi/model/storagevolumes.py | 541 ++++
plugins/kimchi/model/tasks.py | 64 +
plugins/kimchi/model/templates.py | 303 ++
plugins/kimchi/model/users.py | 90 +
plugins/kimchi/model/utils.py | 161 +
plugins/kimchi/model/vmhostdevs.py | 336 +++
plugins/kimchi/model/vmifaces.py | 186 ++
plugins/kimchi/model/vms.py | 1303 ++++++++
plugins/kimchi/model/vmsnapshots.py | 204 ++
plugins/kimchi/model/vmstorages.py | 252 ++
plugins/kimchi/osinfo.py | 214 ++
plugins/kimchi/po/LINGUAS | 11 +
plugins/kimchi/po/Makefile.in.in | 398 +++
{po => plugins/kimchi/po}/Makevars | 0
plugins/kimchi/po/POTFILES.in | 3 +
plugins/kimchi/po/de_DE.po | 2288 ++++++++++++++
plugins/kimchi/po/en_US.po | 2075 +++++++++++++
plugins/kimchi/po/es_ES.po | 2305 ++++++++++++++
plugins/kimchi/po/fr_FR.po | 2338 +++++++++++++++
{po => plugins/kimchi/po}/gen-pot.in | 0
plugins/kimchi/po/it_IT.po | 2274 ++++++++++++++
plugins/kimchi/po/ja_JP.po | 2269 ++++++++++++++
plugins/kimchi/po/kimchi.pot | 2074 +++++++++++++
plugins/kimchi/po/ko_KR.po | 2197 ++++++++++++++
plugins/kimchi/po/pt_BR.po | 2369 +++++++++++++++
plugins/kimchi/po/ru_RU.po | 2198 ++++++++++++++
plugins/kimchi/po/zh_CN.po | 2186 ++++++++++++++
plugins/kimchi/po/zh_TW.po | 2138 +++++++++++++
plugins/kimchi/repositories.py | 529 ++++
plugins/kimchi/root.py | 70 +
plugins/kimchi/scan.py | 89 +
plugins/kimchi/screenshot.py | 184 ++
plugins/kimchi/swupdate.py | 263 ++
{src => plugins/kimchi}/template.conf | 0
plugins/kimchi/tests/Makefile.am | 50 +
plugins/kimchi/tests/iso_gen.py | 212 ++
plugins/kimchi/tests/run_tests.sh.in | 55 +
plugins/kimchi/tests/test_authorization.py | 166 +
plugins/kimchi/tests/test_config.py.in | 195 ++
plugins/kimchi/tests/test_exception.py | 113 +
plugins/kimchi/tests/test_host.py | 200 ++
plugins/kimchi/tests/test_mock_network.py | 71 +
plugins/kimchi/tests/test_mock_storagepool.py | 141 +
plugins/kimchi/tests/test_mock_storagevolume.py | 94 +
plugins/kimchi/tests/test_mockmodel.py | 139 +
plugins/kimchi/tests/test_model.py | 1240 ++++++++
plugins/kimchi/tests/test_model_network.py | 145 +
plugins/kimchi/tests/test_model_storagepool.py | 115 +
plugins/kimchi/tests/test_model_storagevolume.py | 272 ++
plugins/kimchi/tests/test_networkxml.py | 172 ++
plugins/kimchi/tests/test_objectstore.py | 97 +
plugins/kimchi/tests/test_osinfo.py | 69 +
plugins/kimchi/tests/test_plugin.py | 127 +
plugins/kimchi/tests/test_rest.py | 1221 ++++++++
plugins/kimchi/tests/test_rollbackcontext.py | 99 +
plugins/kimchi/tests/test_server.py | 289 ++
plugins/kimchi/tests/test_storagepoolxml.py | 171 ++
plugins/kimchi/tests/test_template.py | 362 +++
plugins/kimchi/tests/test_utils.py | 69 +
plugins/kimchi/tests/test_vmtemplate.py | 116 +
plugins/kimchi/tests/test_yumparser.py | 162 +
plugins/kimchi/tests/utils.py | 260 ++
plugins/kimchi/ui/Makefile.am | 20 +
plugins/kimchi/ui/config/Makefile.am | 22 +
plugins/kimchi/ui/config/tab-ext.xml | 38 +
plugins/kimchi/ui/css/Makefile.am | 26 +
plugins/kimchi/ui/css/theme-default/guest-edit.css | 424 +++
.../ui}/css/theme-default/guest-storage-add.css | 0
plugins/kimchi/ui/css/theme-default/host.css | 287 ++
plugins/kimchi/ui/css/theme-default/icon.css | 106 +
plugins/kimchi/ui/css/theme-default/list.css | 326 ++
plugins/kimchi/ui/css/theme-default/network.css | 267 ++
.../kimchi/ui}/css/theme-default/report-add.css | 0
.../kimchi/ui/css/theme-default/report-rename.css | 39 +
.../ui}/css/theme-default/repository-add.css | 0
.../ui}/css/theme-default/repository-edit.css | 0
plugins/kimchi/ui/css/theme-default/storage.css | 550 ++++
.../css/theme-default/storagepool-add-volume.css | 0
.../kimchi/ui}/css/theme-default/template-edit.css | 0
.../kimchi/ui}/css/theme-default/template.css | 0
.../kimchi/ui/css/theme-default/template_add.css | 317 ++
.../kimchi/ui}/css/theme-default/template_list.css | 0
plugins/kimchi/ui/images/Makefile.am | 22 +
{ui => plugins/kimchi/ui}/images/icon-centos.png | Bin 4734 -> 4734 bytes
{ui => plugins/kimchi/ui}/images/icon-debian.png | Bin 4239 -> 4239 bytes
{ui => plugins/kimchi/ui}/images/icon-fedora.png | Bin 4449 -> 4449 bytes
{ui => plugins/kimchi/ui}/images/icon-gentoo.png | Bin 15307 -> 15307 bytes
{ui => plugins/kimchi/ui}/images/icon-opensuse.png | Bin 3046 -> 3046 bytes
{ui => plugins/kimchi/ui}/images/icon-ubuntu.png | Bin 4818 -> 4818 bytes
{ui => plugins/kimchi/ui}/images/icon-vm.png | Bin 2976 -> 2976 bytes
plugins/kimchi/ui/images/logo.ico | Bin 0 -> 1214 bytes
plugins/kimchi/ui/images/theme-default/Makefile.am | 20 +
.../kimchi/ui}/images/theme-default/ac22_pause.png | Bin 1219 -> 1219 bytes
.../ui}/images/theme-default/ac22_pause_grey.png | Bin 1175 -> 1175 bytes
.../ui}/images/theme-default/ac24_resume.png | Bin 1341 -> 1341 bytes
.../ui}/images/theme-default/ac24_resume_grey.png | Bin 1282 -> 1282 bytes
.../ui/images/theme-default/arrow-down-black.png | Bin 0 -> 2942 bytes
.../images/theme-default/arrow-down-disable.png | Bin 472 -> 472 bytes
.../kimchi/ui/images/theme-default/arrow-down.png | Bin 0 -> 537 bytes
.../kimchi/ui}/images/theme-default/arrow-up.png | Bin 510 -> 510 bytes
.../kimchi/ui}/images/theme-default/arrow_out.png | Bin 3048 -> 3048 bytes
.../kimchi/ui}/images/theme-default/group.png | Bin 1703 -> 1703 bytes
.../ui}/images/theme-default/host-icon-sprite.png | Bin 1034 -> 1034 bytes
.../kimchi/ui}/images/theme-default/icon-back.png | Bin 244 -> 244 bytes
.../ui}/images/theme-default/icon-camera.png | Bin 4860 -> 4860 bytes
.../ui}/images/theme-default/icon-design.png | Bin 4562 -> 4562 bytes
.../ui}/images/theme-default/icon-detail.png | Bin 3079 -> 3079 bytes
.../kimchi/ui}/images/theme-default/icon-iso.png | Bin 4188 -> 4188 bytes
.../kimchi/ui}/images/theme-default/icon-list.png | Bin 2983 -> 2983 bytes
.../kimchi/ui}/images/theme-default/icon-load.png | Bin 3678 -> 3678 bytes
.../kimchi/ui}/images/theme-default/icon-local.png | Bin 425 -> 425 bytes
.../ui}/images/theme-default/icon-power-down.png | Bin 4372 -> 4372 bytes
.../ui}/images/theme-default/icon-power-up.png | Bin 4367 -> 4367 bytes
.../kimchi/ui}/images/theme-default/icon-qcow2.png | Bin 4684 -> 4684 bytes
.../kimchi/ui}/images/theme-default/icon-raw.png | Bin 4679 -> 4679 bytes
.../ui}/images/theme-default/icon-remote.png | Bin 1005 -> 1005 bytes
.../kimchi/ui}/images/theme-default/icon-reset.png | Bin 4576 -> 4576 bytes
.../ui}/images/theme-default/icon-search.png | Bin 4197 -> 4197 bytes
.../kimchi/ui}/images/theme-default/icon-sort.png | Bin 3421 -> 3421 bytes
.../kimchi/ui}/images/theme-default/icon-tree.png | Bin 3526 -> 3526 bytes
.../kimchi/ui}/images/theme-default/icon-user.png | Bin 5366 -> 5366 bytes
.../images/theme-default/icon-volume-default.png | Bin 4265 -> 4265 bytes
.../images/theme-default/kimchi-loading15x15.gif | Bin 1653 -> 1653 bytes
.../kimchi/ui}/images/theme-default/loading.gif | Bin 2190 -> 2190 bytes
.../kimchi/ui}/images/theme-default/user.png | Bin 1322 -> 1322 bytes
plugins/kimchi/ui/js/Makefile.am | 27 +
plugins/kimchi/ui/js/src/kimchi.api.js | 1355 +++++++++
plugins/kimchi/ui/js/src/kimchi.guest_add_main.js | 86 +
plugins/kimchi/ui/js/src/kimchi.guest_edit_main.js | 759 +++++
plugins/kimchi/ui/js/src/kimchi.guest_main.js | 511 ++++
.../kimchi/ui/js/src/kimchi.guest_media_main.js | 56 +
.../ui/js/src/kimchi.guest_storage_add.main.js | 199 ++
plugins/kimchi/ui/js/src/kimchi.host.js | 858 ++++++
plugins/kimchi/ui/js/src/kimchi.main.js | 26 +
plugins/kimchi/ui/js/src/kimchi.network.js | 442 +++
plugins/kimchi/ui/js/src/kimchi.report_add_main.js | 72 +
.../kimchi/ui/js/src/kimchi.report_rename_main.js | 66 +
.../kimchi/ui/js/src/kimchi.repository_add_main.js | 96 +
.../ui/js/src/kimchi.repository_edit_main.js | 74 +
plugins/kimchi/ui/js/src/kimchi.storage_main.js | 428 +++
.../ui/js/src/kimchi.storagepool_add_main.js | 414 +++
.../js/src/kimchi.storagepool_add_volume_main.js | 179 ++
.../kimchi/ui/js/src/kimchi.template_add_main.js | 441 +++
.../kimchi/ui/js/src/kimchi.template_edit_main.js | 343 +++
plugins/kimchi/ui/js/src/kimchi.template_main.js | 111 +
plugins/kimchi/ui/pages/Makefile.am | 22 +
plugins/kimchi/ui/pages/guest-add.html.tmpl | 98 +
.../kimchi/ui}/pages/guest-edit.html.tmpl | 0
.../kimchi/ui/pages/guest-storage-add.html.tmpl | 103 +
plugins/kimchi/ui/pages/guest.html.tmpl | 77 +
plugins/kimchi/ui/pages/guests.html.tmpl | 65 +
plugins/kimchi/ui/pages/help/Makefile.am | 34 +
plugins/kimchi/ui/pages/help/de_DE/Makefile.am | 23 +
.../kimchi/ui}/pages/help/de_DE/guests.dita | 0
.../kimchi/ui}/pages/help/de_DE/host.dita | 0
.../kimchi/ui}/pages/help/de_DE/network.dita | 0
.../kimchi/ui}/pages/help/de_DE/storage.dita | 0
.../kimchi/ui}/pages/help/de_DE/templates.dita | 0
{ui => plugins/kimchi/ui}/pages/help/dita-help.xsl | 0
plugins/kimchi/ui/pages/help/en_US/Makefile.am | 23 +
.../kimchi/ui}/pages/help/en_US/guests.dita | 0
.../kimchi/ui}/pages/help/en_US/host.dita | 0
.../kimchi/ui}/pages/help/en_US/network.dita | 0
.../kimchi/ui}/pages/help/en_US/storage.dita | 0
.../kimchi/ui}/pages/help/en_US/templates.dita | 0
plugins/kimchi/ui/pages/help/es_ES/Makefile.am | 23 +
.../kimchi/ui}/pages/help/es_ES/guests.dita | 0
.../kimchi/ui}/pages/help/es_ES/host.dita | 0
.../kimchi/ui}/pages/help/es_ES/network.dita | 0
.../kimchi/ui}/pages/help/es_ES/storage.dita | 0
.../kimchi/ui}/pages/help/es_ES/templates.dita | 0
plugins/kimchi/ui/pages/help/fr_FR/Makefile.am | 23 +
.../kimchi/ui}/pages/help/fr_FR/guests.dita | 0
.../kimchi/ui}/pages/help/fr_FR/host.dita | 0
.../kimchi/ui}/pages/help/fr_FR/network.dita | 0
.../kimchi/ui}/pages/help/fr_FR/storage.dita | 0
.../kimchi/ui}/pages/help/fr_FR/templates.dita | 0
plugins/kimchi/ui/pages/help/it_IT/Makefile.am | 23 +
.../kimchi/ui}/pages/help/it_IT/guests.dita | 0
.../kimchi/ui}/pages/help/it_IT/host.dita | 0
.../kimchi/ui}/pages/help/it_IT/network.dita | 0
.../kimchi/ui}/pages/help/it_IT/storage.dita | 0
.../kimchi/ui}/pages/help/it_IT/templates.dita | 0
plugins/kimchi/ui/pages/help/ja_JP/Makefile.am | 23 +
.../kimchi/ui}/pages/help/ja_JP/guests.dita | 0
.../kimchi/ui}/pages/help/ja_JP/host.dita | 0
.../kimchi/ui}/pages/help/ja_JP/network.dita | 0
.../kimchi/ui}/pages/help/ja_JP/storage.dita | 0
.../kimchi/ui}/pages/help/ja_JP/templates.dita | 0
{ui => plugins/kimchi/ui}/pages/help/kimchi.css | 0
plugins/kimchi/ui/pages/help/ko_KR/Makefile.am | 23 +
.../kimchi/ui}/pages/help/ko_KR/guests.dita | 0
.../kimchi/ui}/pages/help/ko_KR/host.dita | 0
.../kimchi/ui}/pages/help/ko_KR/network.dita | 0
.../kimchi/ui}/pages/help/ko_KR/storage.dita | 0
.../kimchi/ui}/pages/help/ko_KR/templates.dita | 0
plugins/kimchi/ui/pages/help/pt_BR/Makefile.am | 23 +
.../kimchi/ui}/pages/help/pt_BR/guests.dita | 0
.../kimchi/ui}/pages/help/pt_BR/host.dita | 0
.../kimchi/ui}/pages/help/pt_BR/network.dita | 0
.../kimchi/ui}/pages/help/pt_BR/storage.dita | 0
.../kimchi/ui}/pages/help/pt_BR/templates.dita | 0
plugins/kimchi/ui/pages/help/ru_RU/Makefile.am | 23 +
.../kimchi/ui}/pages/help/ru_RU/guests.dita | 0
.../kimchi/ui}/pages/help/ru_RU/host.dita | 0
.../kimchi/ui}/pages/help/ru_RU/network.dita | 0
.../kimchi/ui}/pages/help/ru_RU/storage.dita | 0
.../kimchi/ui}/pages/help/ru_RU/templates.dita | 0
plugins/kimchi/ui/pages/help/zh_CN/Makefile.am | 23 +
.../kimchi/ui}/pages/help/zh_CN/guests.dita | 0
.../kimchi/ui}/pages/help/zh_CN/host.dita | 0
.../kimchi/ui}/pages/help/zh_CN/network.dita | 0
.../kimchi/ui}/pages/help/zh_CN/storage.dita | 0
.../kimchi/ui}/pages/help/zh_CN/templates.dita | 0
plugins/kimchi/ui/pages/help/zh_TW/Makefile.am | 23 +
.../kimchi/ui}/pages/help/zh_TW/guests.dita | 0
.../kimchi/ui}/pages/help/zh_TW/host.dita | 0
.../kimchi/ui}/pages/help/zh_TW/network.dita | 0
.../kimchi/ui}/pages/help/zh_TW/storage.dita | 0
.../kimchi/ui}/pages/help/zh_TW/templates.dita | 0
plugins/kimchi/ui/pages/host.html.tmpl | 177 ++
plugins/kimchi/ui/pages/i18n.json.tmpl | 187 ++
plugins/kimchi/ui/pages/network.html.tmpl | 133 +
plugins/kimchi/ui/pages/report-add.html.tmpl | 56 +
plugins/kimchi/ui/pages/report-rename.html.tmpl | 56 +
plugins/kimchi/ui/pages/repository-add.html.tmpl | 113 +
plugins/kimchi/ui/pages/repository-edit.html.tmpl | 117 +
plugins/kimchi/ui/pages/storage.html.tmpl | 143 +
.../ui/pages/storagepool-add-volume.html.tmpl | 79 +
plugins/kimchi/ui/pages/storagepool-add.html.tmpl | 186 ++
plugins/kimchi/ui/pages/template-add.html.tmpl | 233 ++
plugins/kimchi/ui/pages/template-edit.html.tmpl | 193 ++
plugins/kimchi/ui/pages/templates.html.tmpl | 77 +
plugins/kimchi/ui/robots.txt | 2 +
plugins/kimchi/ui/spice-html5/Makefile.am | 25 +
.../kimchi/ui}/spice-html5/atKeynames.js | 0
{ui => plugins/kimchi/ui}/spice-html5/bitmap.js | 0
plugins/kimchi/ui/spice-html5/css/Makefile.am | 20 +
.../kimchi/ui}/spice-html5/css/spice.css | 0
{ui => plugins/kimchi/ui}/spice-html5/cursor.js | 0
{ui => plugins/kimchi/ui}/spice-html5/display.js | 0
{ui => plugins/kimchi/ui}/spice-html5/enums.js | 0
{ui => plugins/kimchi/ui}/spice-html5/inputs.js | 0
{ui => plugins/kimchi/ui}/spice-html5/lz.js | 0
{ui => plugins/kimchi/ui}/spice-html5/main.js | 0
plugins/kimchi/ui/spice-html5/pages/Makefile.am | 20 +
.../kimchi/ui/spice-html5/pages/spice_auto.html | 200 ++
{ui => plugins/kimchi/ui}/spice-html5/playback.js | 0
{ui => plugins/kimchi/ui}/spice-html5/png.js | 0
{ui => plugins/kimchi/ui}/spice-html5/quic.js | 0
{ui => plugins/kimchi/ui}/spice-html5/resize.js | 0
.../kimchi/ui}/spice-html5/simulatecursor.js | 0
.../kimchi/ui}/spice-html5/spicearraybuffer.js | 0
{ui => plugins/kimchi/ui}/spice-html5/spiceconn.js | 0
.../kimchi/ui}/spice-html5/spicedataview.js | 0
{ui => plugins/kimchi/ui}/spice-html5/spicemsg.js | 0
{ui => plugins/kimchi/ui}/spice-html5/spicetype.js | 0
.../kimchi/ui/spice-html5/thirdparty/Makefile.am | 20 +
.../kimchi/ui}/spice-html5/thirdparty/jsbn.js | 0
.../kimchi/ui}/spice-html5/thirdparty/prng4.js | 0
.../kimchi/ui}/spice-html5/thirdparty/rng.js | 0
.../kimchi/ui}/spice-html5/thirdparty/rsa.js | 0
.../kimchi/ui}/spice-html5/thirdparty/sha1.js | 0
{ui => plugins/kimchi/ui}/spice-html5/ticket.js | 0
{ui => plugins/kimchi/ui}/spice-html5/utils.js | 0
{ui => plugins/kimchi/ui}/spice-html5/webm.js | 0
{ui => plugins/kimchi/ui}/spice-html5/wire.js | 0
plugins/kimchi/utils.py | 40 +
plugins/kimchi/vmtemplate.py | 431 +++
plugins/kimchi/xmlutils/Makefile.am | 25 +
{src => plugins}/kimchi/xmlutils/__init__.py | 0
{src => plugins}/kimchi/xmlutils/cpu.py | 0
plugins/kimchi/xmlutils/disk.py | 164 +
plugins/kimchi/xmlutils/graphics.py | 45 +
plugins/kimchi/xmlutils/interface.py | 61 +
plugins/kimchi/xmlutils/network.py | 122 +
{src => plugins}/kimchi/xmlutils/qemucmdline.py | 0
plugins/kimchi/yumparser.py | 283 ++
plugins/sample/API.json | 2 +-
plugins/sample/__init__.py | 14 +-
plugins/sample/model.py | 4 +-
plugins/sample/sample.conf.in | 12 +-
plugins/sample/ui/js/util.js | 6 +-
.../sample/ui/pages/help/en_US/sample-tab1.html | 2 +-
.../sample/ui/pages/help/en_US/sample-tab2.html | 2 +-
plugins/sample/ui/pages/i18n.json.tmpl | 2 +-
po/Makevars | 2 +-
po/POTFILES.in | 3 +-
po/de_DE.po | 2737 +++++++-----------
po/en_US.po | 1686 +----------
po/es_ES.po | 2763 +++++++-----------
po/fr_FR.po | 2997 ++++++++-----------
po/gen-pot.in | 2 +-
po/it_IT.po | 2706 +++++++-----------
po/ja_JP.po | 2694 +++++++-----------
po/kimchi.pot | 2162 --------------
po/ko_KR.po | 2558 ++++++----------
po/pt_BR.po | 3140 +++++++++-----------
po/ru_RU.po | 2558 ++++++----------
po/wok.pot | 553 ++++
po/zh_CN.po | 2816 ++++++++----------
po/zh_TW.po | 2442 ++++++----------
src/Makefile.am | 24 +-
src/firewalld.xml | 4 +-
src/kimchi.conf.in | 65 -
src/kimchi/API.json | 836 ------
src/kimchi/Makefile.am | 61 -
src/kimchi/asynctask.py | 74 -
src/kimchi/auth.py | 352 ---
src/kimchi/cachebust.py | 30 -
src/kimchi/config.py.in | 324 --
src/kimchi/control/Makefile.am | 27 -
src/kimchi/control/__init__.py | 26 -
src/kimchi/control/base.py | 381 ---
src/kimchi/control/config.py | 57 -
src/kimchi/control/cpuinfo.py | 37 -
src/kimchi/control/debugreports.py | 61 -
src/kimchi/control/groups.py | 28 -
src/kimchi/control/host.py | 156 -
src/kimchi/control/interfaces.py | 46 -
src/kimchi/control/networks.py | 54 -
src/kimchi/control/peers.py | 29 -
src/kimchi/control/plugins.py | 27 -
src/kimchi/control/storagepools.py | 115 -
src/kimchi/control/storageservers.py | 60 -
src/kimchi/control/storagevolumes.py | 83 -
src/kimchi/control/tasks.py | 37 -
src/kimchi/control/templates.py | 58 -
src/kimchi/control/users.py | 35 -
src/kimchi/control/utils.py | 149 -
src/kimchi/control/vm/Makefile.am | 26 -
src/kimchi/control/vm/__init__.py | 26 -
src/kimchi/control/vm/hostdevs.py | 43 -
src/kimchi/control/vm/ifaces.py | 45 -
src/kimchi/control/vm/snapshots.py | 58 -
src/kimchi/control/vm/storages.py | 45 -
src/kimchi/control/vms.py | 66 -
src/kimchi/disks.py | 197 --
src/kimchi/distroloader.py | 66 -
src/kimchi/exception.py | 102 -
src/kimchi/i18n.py | 354 ---
src/kimchi/imageinfo.py | 72 -
src/kimchi/iscsi.py | 88 -
src/kimchi/isoinfo.py | 506 ----
src/kimchi/kvmusertests.py | 79 -
src/kimchi/mockmodel.py | 625 ----
src/kimchi/model/Makefile.am | 25 -
src/kimchi/model/config.py | 175 --
src/kimchi/model/cpuinfo.py | 126 -
src/kimchi/model/debugreports.py | 211 --
src/kimchi/model/diskutils.py | 75 -
src/kimchi/model/featuretests.py | 259 --
src/kimchi/model/groups.py | 67 -
src/kimchi/model/host.py | 476 ---
src/kimchi/model/hostdev.py | 323 --
src/kimchi/model/interfaces.py | 43 -
src/kimchi/model/libvirtconnection.py | 137 -
src/kimchi/model/libvirtstoragepool.py | 264 --
src/kimchi/model/model.py | 51 -
src/kimchi/model/networks.py | 382 ---
src/kimchi/model/peers.py | 72 -
src/kimchi/model/plugins.py | 28 -
src/kimchi/model/storagepools.py | 489 ---
src/kimchi/model/storageservers.py | 80 -
src/kimchi/model/storagetargets.py | 121 -
src/kimchi/model/storagevolumes.py | 541 ----
src/kimchi/model/tasks.py | 64 -
src/kimchi/model/templates.py | 303 --
src/kimchi/model/users.py | 90 -
src/kimchi/model/utils.py | 160 -
src/kimchi/model/vmhostdevs.py | 336 ---
src/kimchi/model/vmifaces.py | 186 --
src/kimchi/model/vms.py | 1300 --------
src/kimchi/model/vmsnapshots.py | 204 --
src/kimchi/model/vmstorages.py | 251 --
src/kimchi/objectstore.py | 133 -
src/kimchi/osinfo.py | 213 --
src/kimchi/proxy.py | 105 -
src/kimchi/repositories.py | 529 ----
src/kimchi/root.py | 149 -
src/kimchi/scan.py | 89 -
src/kimchi/screenshot.py | 184 --
src/kimchi/server.py | 188 --
src/kimchi/sslcert.py | 91 -
src/kimchi/swupdate.py | 262 --
src/kimchi/template.py | 111 -
src/kimchi/utils.py | 549 ----
src/kimchi/vmtemplate.py | 430 ---
src/kimchi/vnc.py | 78 -
src/kimchi/xmlutils/Makefile.am | 25 -
src/kimchi/xmlutils/disk.py | 164 -
src/kimchi/xmlutils/graphics.py | 46 -
src/kimchi/xmlutils/interface.py | 62 -
src/kimchi/xmlutils/network.py | 123 -
src/kimchi/yumparser.py | 283 --
src/kimchid.in | 99 -
src/nginx/Makefile.am | 6 +-
src/nginx/kimchi.conf.in | 78 -
src/nginx/wok.conf.in | 78 +
src/wok.conf.in | 65 +
src/wok/API.json | 6 +
src/wok/Makefile.am | 61 +
src/{kimchi => wok}/__init__.py | 0
src/wok/asynctask.py | 74 +
src/wok/auth.py | 352 +++
src/{kimchi => wok}/basemodel.py | 0
src/wok/cachebust.py | 35 +
src/wok/config.py.in | 202 ++
src/wok/control/Makefile.am | 25 +
src/wok/control/__init__.py | 26 +
src/wok/control/base.py | 381 +++
src/wok/control/plugins.py | 27 +
src/wok/control/utils.py | 147 +
src/wok/exception.py | 102 +
src/wok/i18n.py | 47 +
src/wok/model/Makefile.am | 25 +
src/{kimchi => wok}/model/__init__.py | 0
src/wok/model/model.py | 49 +
src/wok/model/plugins.py | 28 +
src/{kimchi => wok}/netinfo.py | 0
src/{kimchi => wok}/network.py | 0
src/wok/objectstore.py | 132 +
src/wok/proxy.py | 105 +
src/{kimchi => wok}/rollbackcontext.py | 0
src/wok/root.py | 148 +
src/wok/server.py | 203 ++
src/wok/sslcert.py | 89 +
src/wok/template.py | 112 +
src/wok/utils.py | 533 ++++
src/wok/vnc.py | 77 +
src/wok/xmlutils/Makefile.am | 25 +
src/{kimchi/model => wok/xmlutils}/__init__.py | 0
src/{kimchi => wok}/xmlutils/utils.py | 0
src/wokd.in | 99 +
tests/Makefile.am | 50 -
tests/iso_gen.py | 211 --
tests/run_tests.sh.in | 55 -
tests/test_authorization.py | 166 -
tests/test_config.py.in | 196 --
tests/test_exception.py | 112 -
tests/test_host.py | 192 --
tests/test_mock_network.py | 71 -
tests/test_mock_storagepool.py | 141 -
tests/test_mock_storagevolume.py | 94 -
tests/test_mockmodel.py | 138 -
tests/test_model.py | 1228 --------
tests/test_model_network.py | 144 -
tests/test_model_storagepool.py | 114 -
tests/test_model_storagevolume.py | 269 --
tests/test_networkxml.py | 171 --
tests/test_objectstore.py | 96 -
tests/test_osinfo.py | 70 -
tests/test_plugin.py | 128 -
tests/test_rest.py | 1208 --------
tests/test_rollbackcontext.py | 99 -
tests/test_server.py | 287 --
tests/test_storagepoolxml.py | 171 --
tests/test_template.py | 362 ---
tests/test_utils.py | 69 -
tests/test_vmtemplate.py | 116 -
tests/test_yumparser.py | 161 -
tests/utils.py | 260 --
ui/Makefile.am | 4 +-
ui/css/Makefile.am | 2 +-
ui/css/theme-default/button.css | 85 -
ui/css/theme-default/grid.css | 2 +-
ui/css/theme-default/guest-edit.css | 424 ---
ui/css/theme-default/host.css | 287 --
ui/css/theme-default/list.css | 326 --
ui/css/theme-default/network.css | 267 --
ui/css/theme-default/report-rename.css | 39 -
ui/css/theme-default/storage.css | 554 ----
ui/css/theme-default/template_add.css | 317 --
ui/css/theme-default/topbar.css | 4 +
ui/fontello/Makefile.am | 22 +
ui/fontello/css/Makefile.am | 20 +
ui/fontello/font/Makefile.am | 20 +
ui/images/Makefile.am | 4 +-
ui/images/theme-default/Makefile.am | 2 +-
.../{kimchi-loading.gif => wok-loading.gif} | Bin 6181 -> 6181 bytes
ui/js/Makefile.am | 8 +-
ui/js/src/kimchi.api.js | 1411 ---------
ui/js/src/kimchi.cookie.js | 40 -
ui/js/src/kimchi.grid.js | 528 ----
ui/js/src/kimchi.guest_add_main.js | 86 -
ui/js/src/kimchi.guest_edit_main.js | 759 -----
ui/js/src/kimchi.guest_main.js | 511 ----
ui/js/src/kimchi.guest_media_main.js | 56 -
ui/js/src/kimchi.guest_storage_add.main.js | 199 --
ui/js/src/kimchi.host.js | 856 ------
ui/js/src/kimchi.lang.js | 50 -
ui/js/src/kimchi.line-chart.js | 202 --
ui/js/src/kimchi.login.js | 72 -
ui/js/src/kimchi.main.js | 366 ---
ui/js/src/kimchi.message.js | 116 -
ui/js/src/kimchi.network.js | 442 ---
ui/js/src/kimchi.popable.js | 34 -
ui/js/src/kimchi.report_add_main.js | 72 -
ui/js/src/kimchi.report_rename_main.js | 66 -
ui/js/src/kimchi.repository_add_main.js | 96 -
ui/js/src/kimchi.repository_edit_main.js | 74 -
ui/js/src/kimchi.select.js | 50 -
ui/js/src/kimchi.storage_main.js | 428 ---
ui/js/src/kimchi.storagepool_add_main.js | 414 ---
ui/js/src/kimchi.storagepool_add_volume_main.js | 179 --
ui/js/src/kimchi.substitute.js | 45 -
ui/js/src/kimchi.template_add_main.js | 441 ---
ui/js/src/kimchi.template_edit_main.js | 343 ---
ui/js/src/kimchi.template_main.js | 111 -
ui/js/src/kimchi.topic.js | 48 -
ui/js/src/kimchi.user.js | 43 -
ui/js/src/kimchi.utils.js | 193 --
ui/js/src/kimchi.window.js | 70 -
ui/js/src/wok.api.js | 91 +
ui/js/src/wok.cookie.js | 40 +
ui/js/src/{kimchi.form.js => wok.form.js} | 0
ui/js/src/wok.grid.js | 528 ++++
ui/js/src/wok.lang.js | 50 +
ui/js/src/wok.line-chart.js | 202 ++
ui/js/src/wok.login.js | 72 +
ui/js/src/wok.main.js | 355 +++
ui/js/src/wok.message.js | 116 +
ui/js/src/{kimchi.object.js => wok.object.js} | 0
ui/js/src/wok.popable.js | 34 +
ui/js/src/wok.select.js | 50 +
ui/js/src/{kimchi.string.js => wok.string.js} | 0
ui/js/src/wok.substitute.js | 45 +
ui/js/src/wok.topic.js | 48 +
ui/js/src/wok.user.js | 43 +
ui/js/src/wok.utils.js | 193 ++
ui/js/src/wok.window.js | 70 +
ui/js/widgets/button-dropDown.js | 2 +-
ui/js/widgets/button-flat.js | 2 +-
ui/js/widgets/checkbox-flat.js | 4 +-
ui/js/widgets/circleGauge.js | 4 +-
ui/js/widgets/combobox.js | 2 +-
ui/js/widgets/dialog-flat.js | 4 +-
ui/js/widgets/filter-select.js | 2 +-
ui/js/widgets/gauge-flat.js | 2 +-
ui/js/widgets/grid.js | 2 +-
ui/js/widgets/line.js | 2 +-
ui/js/widgets/list-flat.js | 4 +-
ui/js/widgets/menu-flat.js | 4 +-
ui/js/widgets/message-flat.js | 4 +-
ui/js/widgets/messagebar-flat.js | 4 +-
ui/js/widgets/radio-flat.js | 4 +-
ui/js/widgets/samples/grid.html | 4 +-
ui/js/widgets/samples/line.html | 4 +-
ui/js/widgets/samples/tabs.html | 4 +-
ui/js/widgets/select-menu.js | 2 +-
ui/js/widgets/selectmenu-flat.js | 4 +-
ui/js/widgets/textbox-flat.js | 4 +-
ui/libs/Makefile.am | 2 +-
ui/libs/themes/base/Makefile.am | 2 +-
ui/libs/themes/base/images/Makefile.am | 2 +-
ui/pages/Makefile.am | 4 +-
ui/pages/error.html.tmpl | 8 +-
ui/pages/guest-add.html.tmpl | 98 -
ui/pages/guest-storage-add.html.tmpl | 103 -
ui/pages/guest.html.tmpl | 77 -
ui/pages/help/Makefile.am | 35 -
ui/pages/help/de_DE/Makefile.am | 23 -
ui/pages/help/en_US/Makefile.am | 23 -
ui/pages/help/es_ES/Makefile.am | 23 -
ui/pages/help/fr_FR/Makefile.am | 23 -
ui/pages/help/gen-index.py | 63 -
ui/pages/help/it_IT/Makefile.am | 23 -
ui/pages/help/ja_JP/Makefile.am | 23 -
ui/pages/help/ko_KR/Makefile.am | 23 -
ui/pages/help/pt_BR/Makefile.am | 23 -
ui/pages/help/ru_RU/Makefile.am | 23 -
ui/pages/help/zh_CN/Makefile.am | 23 -
ui/pages/help/zh_TW/Makefile.am | 23 -
ui/pages/i18n.json.tmpl | 2 +-
ui/pages/kimchi-ui.html.tmpl | 143 -
ui/pages/login.html.tmpl | 8 +-
ui/pages/report-add.html.tmpl | 56 -
ui/pages/report-rename.html.tmpl | 56 -
ui/pages/repository-add.html.tmpl | 113 -
ui/pages/repository-edit.html.tmpl | 117 -
ui/pages/storagepool-add-volume.html.tmpl | 79 -
ui/pages/storagepool-add.html.tmpl | 186 --
ui/pages/tabs/Makefile.am | 20 -
ui/pages/tabs/guests.html.tmpl | 56 -
ui/pages/tabs/host.html.tmpl | 168 --
ui/pages/tabs/network.html.tmpl | 129 -
ui/pages/tabs/storage.html.tmpl | 139 -
ui/pages/tabs/templates.html.tmpl | 73 -
ui/pages/template-add.html.tmpl | 233 --
ui/pages/template-edit.html.tmpl | 193 --
ui/pages/websockify/Makefile.am | 2 +-
ui/pages/websockify/console.html | 12 +-
ui/pages/wok-ui.html.tmpl | 143 +
ui/spice-html5/Makefile.am | 25 -
ui/spice-html5/css/Makefile.am | 20 -
ui/spice-html5/pages/Makefile.am | 20 -
ui/spice-html5/pages/spice_auto.html | 200 --
ui/spice-html5/thirdparty/Makefile.am | 20 -
722 files changed, 82954 insertions(+), 58514 deletions(-)
delete mode 100644 config/Makefile.am
delete mode 100644 config/ui/Makefile.am
delete mode 100644 config/ui/tabs.xml
delete mode 100644 contrib/kimchi.spec.fedora.in
delete mode 100644 contrib/kimchi.spec.suse.in
delete mode 100644 contrib/kimchid-upstart.conf.debian
delete mode 100644 contrib/kimchid-upstart.conf.fedora
delete mode 100644 contrib/kimchid.service.fedora
delete mode 100644 contrib/kimchid.sysvinit
create mode 100644 contrib/wok.spec.fedora.in
create mode 100644 contrib/wok.spec.suse.in
create mode 100644 contrib/wokd-upstart.conf.debian
create mode 100644 contrib/wokd-upstart.conf.fedora
create mode 100644 contrib/wokd.service.fedora
create mode 100644 contrib/wokd.sysvinit
delete mode 100644 docs/README-federation.md
rename docs/{kimchid.8.in => wokd.8.in} (100%)
create mode 100644 plugins/kimchi/.gitignore
create mode 100644 plugins/kimchi/API.json
create mode 100644 plugins/kimchi/INSTALL
create mode 100644 plugins/kimchi/Makefile.am
create mode 120000 plugins/kimchi/README.md
create mode 100644 plugins/kimchi/VERSION
create mode 100644 plugins/kimchi/__init__.py
create mode 100755 plugins/kimchi/autogen.sh
create mode 100644 plugins/kimchi/build-aux/config.rpath
create mode 100755 plugins/kimchi/build-aux/genChangelog
create mode 100755 plugins/kimchi/build-aux/pkg-version
create mode 100644 plugins/kimchi/config.py.in
create mode 100644 plugins/kimchi/config.rpath
create mode 100644 plugins/kimchi/configure.ac
create mode 100644 plugins/kimchi/contrib/DEBIAN/Makefile.am
create mode 100644 plugins/kimchi/contrib/DEBIAN/control.in
create mode 100644 plugins/kimchi/contrib/Makefile.am
create mode 100755 plugins/kimchi/contrib/check_i18n.py
create mode 100644 plugins/kimchi/contrib/kimchi.spec.fedora.in
create mode 100644 plugins/kimchi/contrib/kimchi.spec.suse.in
copy {contrib => plugins/kimchi/contrib}/make-deb.sh.in (100%)
create mode 100644 plugins/kimchi/control/Makefile.am
create mode 100644 plugins/kimchi/control/__init__.py
create mode 100644 plugins/kimchi/control/config.py
create mode 100644 plugins/kimchi/control/cpuinfo.py
create mode 100644 plugins/kimchi/control/debugreports.py
create mode 100644 plugins/kimchi/control/groups.py
create mode 100644 plugins/kimchi/control/host.py
create mode 100644 plugins/kimchi/control/interfaces.py
create mode 100644 plugins/kimchi/control/networks.py
create mode 100644 plugins/kimchi/control/peers.py
create mode 100644 plugins/kimchi/control/storagepools.py
create mode 100644 plugins/kimchi/control/storageservers.py
create mode 100644 plugins/kimchi/control/storagevolumes.py
create mode 100644 plugins/kimchi/control/tasks.py
create mode 100644 plugins/kimchi/control/templates.py
create mode 100644 plugins/kimchi/control/users.py
create mode 100644 plugins/kimchi/control/vm/Makefile.am
create mode 100644 plugins/kimchi/control/vm/__init__.py
create mode 100644 plugins/kimchi/control/vm/hostdevs.py
create mode 100644 plugins/kimchi/control/vm/ifaces.py
create mode 100644 plugins/kimchi/control/vm/snapshots.py
create mode 100644 plugins/kimchi/control/vm/storages.py
create mode 100644 plugins/kimchi/control/vms.py
create mode 100644 plugins/kimchi/disks.py
create mode 100644 plugins/kimchi/distroloader.py
rename {src => plugins/kimchi}/distros.d/Makefile.am (100%)
rename {src => plugins/kimchi}/distros.d/debian.json (100%)
rename {src => plugins/kimchi}/distros.d/fedora.json (100%)
rename {src => plugins/kimchi}/distros.d/gentoo.json (100%)
rename {src => plugins/kimchi}/distros.d/opensuse.json (100%)
rename {src => plugins/kimchi}/distros.d/ubuntu.json (100%)
create mode 100644 plugins/kimchi/docs/API.md
create mode 100644 plugins/kimchi/docs/Makefile.am
create mode 100644 plugins/kimchi/docs/README-federation.md
create mode 100644 plugins/kimchi/docs/README.md
rename {docs => plugins/kimchi/docs}/kimchi-guest.png (100%)
rename {docs => plugins/kimchi/docs}/kimchi-login.png (100%)
rename {docs => plugins/kimchi/docs}/kimchi-templates.png (100%)
create mode 100644 plugins/kimchi/i18n.py
create mode 100644 plugins/kimchi/imageinfo.py
create mode 100644 plugins/kimchi/iscsi.py
create mode 100644 plugins/kimchi/isoinfo.py
create mode 100644 plugins/kimchi/kimchi.conf
create mode 100644 plugins/kimchi/kvmusertests.py
create mode 100644 plugins/kimchi/m4/ac_python_module.m4
create mode 100644 plugins/kimchi/m4/gettext.m4
create mode 100644 plugins/kimchi/m4/iconv.m4
create mode 100644 plugins/kimchi/m4/intlmacosx.m4
create mode 100644 plugins/kimchi/m4/lib-ld.m4
create mode 100644 plugins/kimchi/m4/lib-link.m4
create mode 100644 plugins/kimchi/m4/lib-prefix.m4
create mode 100644 plugins/kimchi/m4/nls.m4
create mode 100644 plugins/kimchi/m4/po.m4
create mode 100644 plugins/kimchi/m4/progtest.m4
create mode 100644 plugins/kimchi/mockmodel.py
create mode 100644 plugins/kimchi/model/Makefile.am
copy {src => plugins}/kimchi/model/__init__.py (100%)
create mode 100644 plugins/kimchi/model/config.py
create mode 100644 plugins/kimchi/model/cpuinfo.py
create mode 100644 plugins/kimchi/model/debugreports.py
create mode 100644 plugins/kimchi/model/diskutils.py
create mode 100644 plugins/kimchi/model/featuretests.py
create mode 100644 plugins/kimchi/model/groups.py
create mode 100644 plugins/kimchi/model/host.py
create mode 100644 plugins/kimchi/model/hostdev.py
create mode 100644 plugins/kimchi/model/interfaces.py
create mode 100644 plugins/kimchi/model/libvirtconnection.py
create mode 100644 plugins/kimchi/model/libvirtstoragepool.py
create mode 100644 plugins/kimchi/model/model.py
create mode 100644 plugins/kimchi/model/networks.py
create mode 100644 plugins/kimchi/model/peers.py
create mode 100644 plugins/kimchi/model/storagepools.py
create mode 100644 plugins/kimchi/model/storageservers.py
create mode 100644 plugins/kimchi/model/storagetargets.py
create mode 100644 plugins/kimchi/model/storagevolumes.py
create mode 100644 plugins/kimchi/model/tasks.py
create mode 100644 plugins/kimchi/model/templates.py
create mode 100644 plugins/kimchi/model/users.py
create mode 100644 plugins/kimchi/model/utils.py
create mode 100644 plugins/kimchi/model/vmhostdevs.py
create mode 100644 plugins/kimchi/model/vmifaces.py
create mode 100644 plugins/kimchi/model/vms.py
create mode 100644 plugins/kimchi/model/vmsnapshots.py
create mode 100644 plugins/kimchi/model/vmstorages.py
create mode 100644 plugins/kimchi/osinfo.py
create mode 100644 plugins/kimchi/po/LINGUAS
create mode 100644 plugins/kimchi/po/Makefile.in.in
copy {po => plugins/kimchi/po}/Makevars (100%)
create mode 100644 plugins/kimchi/po/POTFILES.in
create mode 100644 plugins/kimchi/po/de_DE.po
create mode 100644 plugins/kimchi/po/en_US.po
create mode 100644 plugins/kimchi/po/es_ES.po
create mode 100644 plugins/kimchi/po/fr_FR.po
copy {po => plugins/kimchi/po}/gen-pot.in (100%)
create mode 100644 plugins/kimchi/po/it_IT.po
create mode 100644 plugins/kimchi/po/ja_JP.po
create mode 100755 plugins/kimchi/po/kimchi.pot
create mode 100644 plugins/kimchi/po/ko_KR.po
create mode 100644 plugins/kimchi/po/pt_BR.po
create mode 100644 plugins/kimchi/po/ru_RU.po
create mode 100644 plugins/kimchi/po/zh_CN.po
create mode 100644 plugins/kimchi/po/zh_TW.po
create mode 100644 plugins/kimchi/repositories.py
create mode 100644 plugins/kimchi/root.py
create mode 100644 plugins/kimchi/scan.py
create mode 100644 plugins/kimchi/screenshot.py
create mode 100644 plugins/kimchi/swupdate.py
rename {src => plugins/kimchi}/template.conf (100%)
create mode 100644 plugins/kimchi/tests/Makefile.am
create mode 100644 plugins/kimchi/tests/iso_gen.py
create mode 100644 plugins/kimchi/tests/run_tests.sh.in
create mode 100644 plugins/kimchi/tests/test_authorization.py
create mode 100644 plugins/kimchi/tests/test_config.py.in
create mode 100644 plugins/kimchi/tests/test_exception.py
create mode 100644 plugins/kimchi/tests/test_host.py
create mode 100644 plugins/kimchi/tests/test_mock_network.py
create mode 100644 plugins/kimchi/tests/test_mock_storagepool.py
create mode 100644 plugins/kimchi/tests/test_mock_storagevolume.py
create mode 100644 plugins/kimchi/tests/test_mockmodel.py
create mode 100644 plugins/kimchi/tests/test_model.py
create mode 100644 plugins/kimchi/tests/test_model_network.py
create mode 100644 plugins/kimchi/tests/test_model_storagepool.py
create mode 100644 plugins/kimchi/tests/test_model_storagevolume.py
create mode 100644 plugins/kimchi/tests/test_networkxml.py
create mode 100644 plugins/kimchi/tests/test_objectstore.py
create mode 100644 plugins/kimchi/tests/test_osinfo.py
create mode 100644 plugins/kimchi/tests/test_plugin.py
create mode 100644 plugins/kimchi/tests/test_rest.py
create mode 100644 plugins/kimchi/tests/test_rollbackcontext.py
create mode 100644 plugins/kimchi/tests/test_server.py
create mode 100644 plugins/kimchi/tests/test_storagepoolxml.py
create mode 100644 plugins/kimchi/tests/test_template.py
create mode 100644 plugins/kimchi/tests/test_utils.py
create mode 100644 plugins/kimchi/tests/test_vmtemplate.py
create mode 100644 plugins/kimchi/tests/test_yumparser.py
create mode 100644 plugins/kimchi/tests/utils.py
create mode 100644 plugins/kimchi/ui/Makefile.am
create mode 100644 plugins/kimchi/ui/config/Makefile.am
create mode 100644 plugins/kimchi/ui/config/tab-ext.xml
create mode 100644 plugins/kimchi/ui/css/Makefile.am
create mode 100644 plugins/kimchi/ui/css/theme-default/guest-edit.css
rename {ui => plugins/kimchi/ui}/css/theme-default/guest-storage-add.css (100%)
create mode 100644 plugins/kimchi/ui/css/theme-default/host.css
create mode 100644 plugins/kimchi/ui/css/theme-default/icon.css
create mode 100644 plugins/kimchi/ui/css/theme-default/list.css
create mode 100644 plugins/kimchi/ui/css/theme-default/network.css
rename {ui => plugins/kimchi/ui}/css/theme-default/report-add.css (100%)
create mode 100644 plugins/kimchi/ui/css/theme-default/report-rename.css
rename {ui => plugins/kimchi/ui}/css/theme-default/repository-add.css (100%)
rename {ui => plugins/kimchi/ui}/css/theme-default/repository-edit.css (100%)
create mode 100644 plugins/kimchi/ui/css/theme-default/storage.css
rename {ui => plugins/kimchi/ui}/css/theme-default/storagepool-add-volume.css (100%)
rename {ui => plugins/kimchi/ui}/css/theme-default/template-edit.css (100%)
rename {ui => plugins/kimchi/ui}/css/theme-default/template.css (100%)
create mode 100644 plugins/kimchi/ui/css/theme-default/template_add.css
rename {ui => plugins/kimchi/ui}/css/theme-default/template_list.css (100%)
create mode 100644 plugins/kimchi/ui/images/Makefile.am
rename {ui => plugins/kimchi/ui}/images/icon-centos.png (100%)
rename {ui => plugins/kimchi/ui}/images/icon-debian.png (100%)
rename {ui => plugins/kimchi/ui}/images/icon-fedora.png (100%)
rename {ui => plugins/kimchi/ui}/images/icon-gentoo.png (100%)
rename {ui => plugins/kimchi/ui}/images/icon-opensuse.png (100%)
rename {ui => plugins/kimchi/ui}/images/icon-ubuntu.png (100%)
rename {ui => plugins/kimchi/ui}/images/icon-vm.png (100%)
create mode 100644 plugins/kimchi/ui/images/logo.ico
create mode 100644 plugins/kimchi/ui/images/theme-default/Makefile.am
rename {ui => plugins/kimchi/ui}/images/theme-default/ac22_pause.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/ac22_pause_grey.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/ac24_resume.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/ac24_resume_grey.png (100%)
create mode 100644 plugins/kimchi/ui/images/theme-default/arrow-down-black.png
rename {ui => plugins/kimchi/ui}/images/theme-default/arrow-down-disable.png (100%)
create mode 100644 plugins/kimchi/ui/images/theme-default/arrow-down.png
rename {ui => plugins/kimchi/ui}/images/theme-default/arrow-up.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/arrow_out.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/group.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/host-icon-sprite.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-back.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-camera.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-design.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-detail.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-iso.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-list.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-load.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-local.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-power-down.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-power-up.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-qcow2.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-raw.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-remote.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-reset.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-search.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-sort.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-tree.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-user.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/icon-volume-default.png (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/kimchi-loading15x15.gif (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/loading.gif (100%)
rename {ui => plugins/kimchi/ui}/images/theme-default/user.png (100%)
create mode 100644 plugins/kimchi/ui/js/Makefile.am
create mode 100644 plugins/kimchi/ui/js/src/kimchi.api.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.guest_add_main.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.guest_edit_main.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.guest_main.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.guest_media_main.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.guest_storage_add.main.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.host.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.main.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.network.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.report_add_main.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.report_rename_main.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.repository_add_main.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.storage_main.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.storagepool_add_main.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.storagepool_add_volume_main.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.template_add_main.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.template_edit_main.js
create mode 100644 plugins/kimchi/ui/js/src/kimchi.template_main.js
create mode 100644 plugins/kimchi/ui/pages/Makefile.am
create mode 100644 plugins/kimchi/ui/pages/guest-add.html.tmpl
rename {ui => plugins/kimchi/ui}/pages/guest-edit.html.tmpl (100%)
create mode 100644 plugins/kimchi/ui/pages/guest-storage-add.html.tmpl
create mode 100644 plugins/kimchi/ui/pages/guest.html.tmpl
create mode 100644 plugins/kimchi/ui/pages/guests.html.tmpl
create mode 100644 plugins/kimchi/ui/pages/help/Makefile.am
create mode 100644 plugins/kimchi/ui/pages/help/de_DE/Makefile.am
rename {ui => plugins/kimchi/ui}/pages/help/de_DE/guests.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/de_DE/host.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/de_DE/network.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/de_DE/storage.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/de_DE/templates.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/dita-help.xsl (100%)
create mode 100644 plugins/kimchi/ui/pages/help/en_US/Makefile.am
rename {ui => plugins/kimchi/ui}/pages/help/en_US/guests.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/en_US/host.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/en_US/network.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/en_US/storage.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/en_US/templates.dita (100%)
create mode 100644 plugins/kimchi/ui/pages/help/es_ES/Makefile.am
rename {ui => plugins/kimchi/ui}/pages/help/es_ES/guests.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/es_ES/host.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/es_ES/network.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/es_ES/storage.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/es_ES/templates.dita (100%)
create mode 100644 plugins/kimchi/ui/pages/help/fr_FR/Makefile.am
rename {ui => plugins/kimchi/ui}/pages/help/fr_FR/guests.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/fr_FR/host.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/fr_FR/network.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/fr_FR/storage.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/fr_FR/templates.dita (100%)
create mode 100644 plugins/kimchi/ui/pages/help/it_IT/Makefile.am
rename {ui => plugins/kimchi/ui}/pages/help/it_IT/guests.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/it_IT/host.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/it_IT/network.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/it_IT/storage.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/it_IT/templates.dita (100%)
create mode 100644 plugins/kimchi/ui/pages/help/ja_JP/Makefile.am
rename {ui => plugins/kimchi/ui}/pages/help/ja_JP/guests.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/ja_JP/host.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/ja_JP/network.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/ja_JP/storage.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/ja_JP/templates.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/kimchi.css (100%)
create mode 100644 plugins/kimchi/ui/pages/help/ko_KR/Makefile.am
rename {ui => plugins/kimchi/ui}/pages/help/ko_KR/guests.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/ko_KR/host.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/ko_KR/network.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/ko_KR/storage.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/ko_KR/templates.dita (100%)
create mode 100644 plugins/kimchi/ui/pages/help/pt_BR/Makefile.am
rename {ui => plugins/kimchi/ui}/pages/help/pt_BR/guests.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/pt_BR/host.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/pt_BR/network.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/pt_BR/storage.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/pt_BR/templates.dita (100%)
create mode 100644 plugins/kimchi/ui/pages/help/ru_RU/Makefile.am
rename {ui => plugins/kimchi/ui}/pages/help/ru_RU/guests.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/ru_RU/host.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/ru_RU/network.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/ru_RU/storage.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/ru_RU/templates.dita (100%)
create mode 100644 plugins/kimchi/ui/pages/help/zh_CN/Makefile.am
rename {ui => plugins/kimchi/ui}/pages/help/zh_CN/guests.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/zh_CN/host.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/zh_CN/network.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/zh_CN/storage.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/zh_CN/templates.dita (100%)
create mode 100644 plugins/kimchi/ui/pages/help/zh_TW/Makefile.am
rename {ui => plugins/kimchi/ui}/pages/help/zh_TW/guests.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/zh_TW/host.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/zh_TW/network.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/zh_TW/storage.dita (100%)
rename {ui => plugins/kimchi/ui}/pages/help/zh_TW/templates.dita (100%)
create mode 100644 plugins/kimchi/ui/pages/host.html.tmpl
create mode 100644 plugins/kimchi/ui/pages/i18n.json.tmpl
create mode 100644 plugins/kimchi/ui/pages/network.html.tmpl
create mode 100644 plugins/kimchi/ui/pages/report-add.html.tmpl
create mode 100644 plugins/kimchi/ui/pages/report-rename.html.tmpl
create mode 100644 plugins/kimchi/ui/pages/repository-add.html.tmpl
create mode 100644 plugins/kimchi/ui/pages/repository-edit.html.tmpl
create mode 100644 plugins/kimchi/ui/pages/storage.html.tmpl
create mode 100644 plugins/kimchi/ui/pages/storagepool-add-volume.html.tmpl
create mode 100644 plugins/kimchi/ui/pages/storagepool-add.html.tmpl
create mode 100644 plugins/kimchi/ui/pages/template-add.html.tmpl
create mode 100644 plugins/kimchi/ui/pages/template-edit.html.tmpl
create mode 100644 plugins/kimchi/ui/pages/templates.html.tmpl
create mode 100644 plugins/kimchi/ui/robots.txt
create mode 100644 plugins/kimchi/ui/spice-html5/Makefile.am
rename {ui => plugins/kimchi/ui}/spice-html5/atKeynames.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/bitmap.js (100%)
create mode 100644 plugins/kimchi/ui/spice-html5/css/Makefile.am
rename {ui => plugins/kimchi/ui}/spice-html5/css/spice.css (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/cursor.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/display.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/enums.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/inputs.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/lz.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/main.js (100%)
create mode 100644 plugins/kimchi/ui/spice-html5/pages/Makefile.am
create mode 100644 plugins/kimchi/ui/spice-html5/pages/spice_auto.html
rename {ui => plugins/kimchi/ui}/spice-html5/playback.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/png.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/quic.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/resize.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/simulatecursor.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/spicearraybuffer.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/spiceconn.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/spicedataview.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/spicemsg.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/spicetype.js (100%)
create mode 100644 plugins/kimchi/ui/spice-html5/thirdparty/Makefile.am
rename {ui => plugins/kimchi/ui}/spice-html5/thirdparty/jsbn.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/thirdparty/prng4.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/thirdparty/rng.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/thirdparty/rsa.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/thirdparty/sha1.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/ticket.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/utils.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/webm.js (100%)
rename {ui => plugins/kimchi/ui}/spice-html5/wire.js (100%)
create mode 100644 plugins/kimchi/utils.py
create mode 100644 plugins/kimchi/vmtemplate.py
create mode 100644 plugins/kimchi/xmlutils/Makefile.am
rename {src => plugins}/kimchi/xmlutils/__init__.py (100%)
rename {src => plugins}/kimchi/xmlutils/cpu.py (100%)
create mode 100644 plugins/kimchi/xmlutils/disk.py
create mode 100644 plugins/kimchi/xmlutils/graphics.py
create mode 100644 plugins/kimchi/xmlutils/interface.py
create mode 100644 plugins/kimchi/xmlutils/network.py
rename {src => plugins}/kimchi/xmlutils/qemucmdline.py (100%)
create mode 100644 plugins/kimchi/yumparser.py
delete mode 100755 po/kimchi.pot
create mode 100755 po/wok.pot
delete mode 100644 src/kimchi.conf.in
delete mode 100644 src/kimchi/API.json
delete mode 100644 src/kimchi/Makefile.am
delete mode 100644 src/kimchi/asynctask.py
delete mode 100644 src/kimchi/auth.py
delete mode 100644 src/kimchi/cachebust.py
delete mode 100644 src/kimchi/config.py.in
delete mode 100644 src/kimchi/control/Makefile.am
delete mode 100644 src/kimchi/control/__init__.py
delete mode 100644 src/kimchi/control/base.py
delete mode 100644 src/kimchi/control/config.py
delete mode 100644 src/kimchi/control/cpuinfo.py
delete mode 100644 src/kimchi/control/debugreports.py
delete mode 100644 src/kimchi/control/groups.py
delete mode 100644 src/kimchi/control/host.py
delete mode 100644 src/kimchi/control/interfaces.py
delete mode 100644 src/kimchi/control/networks.py
delete mode 100644 src/kimchi/control/peers.py
delete mode 100644 src/kimchi/control/plugins.py
delete mode 100644 src/kimchi/control/storagepools.py
delete mode 100644 src/kimchi/control/storageservers.py
delete mode 100644 src/kimchi/control/storagevolumes.py
delete mode 100644 src/kimchi/control/tasks.py
delete mode 100644 src/kimchi/control/templates.py
delete mode 100644 src/kimchi/control/users.py
delete mode 100644 src/kimchi/control/utils.py
delete mode 100644 src/kimchi/control/vm/Makefile.am
delete mode 100644 src/kimchi/control/vm/__init__.py
delete mode 100644 src/kimchi/control/vm/hostdevs.py
delete mode 100644 src/kimchi/control/vm/ifaces.py
delete mode 100644 src/kimchi/control/vm/snapshots.py
delete mode 100644 src/kimchi/control/vm/storages.py
delete mode 100644 src/kimchi/control/vms.py
delete mode 100644 src/kimchi/disks.py
delete mode 100644 src/kimchi/distroloader.py
delete mode 100644 src/kimchi/exception.py
delete mode 100644 src/kimchi/i18n.py
delete mode 100644 src/kimchi/imageinfo.py
delete mode 100644 src/kimchi/iscsi.py
delete mode 100644 src/kimchi/isoinfo.py
delete mode 100644 src/kimchi/kvmusertests.py
delete mode 100644 src/kimchi/mockmodel.py
delete mode 100644 src/kimchi/model/Makefile.am
delete mode 100644 src/kimchi/model/config.py
delete mode 100644 src/kimchi/model/cpuinfo.py
delete mode 100644 src/kimchi/model/debugreports.py
delete mode 100644 src/kimchi/model/diskutils.py
delete mode 100644 src/kimchi/model/featuretests.py
delete mode 100644 src/kimchi/model/groups.py
delete mode 100644 src/kimchi/model/host.py
delete mode 100644 src/kimchi/model/hostdev.py
delete mode 100644 src/kimchi/model/interfaces.py
delete mode 100644 src/kimchi/model/libvirtconnection.py
delete mode 100644 src/kimchi/model/libvirtstoragepool.py
delete mode 100644 src/kimchi/model/model.py
delete mode 100644 src/kimchi/model/networks.py
delete mode 100644 src/kimchi/model/peers.py
delete mode 100644 src/kimchi/model/plugins.py
delete mode 100644 src/kimchi/model/storagepools.py
delete mode 100644 src/kimchi/model/storageservers.py
delete mode 100644 src/kimchi/model/storagetargets.py
delete mode 100644 src/kimchi/model/storagevolumes.py
delete mode 100644 src/kimchi/model/tasks.py
delete mode 100644 src/kimchi/model/templates.py
delete mode 100644 src/kimchi/model/users.py
delete mode 100644 src/kimchi/model/utils.py
delete mode 100644 src/kimchi/model/vmhostdevs.py
delete mode 100644 src/kimchi/model/vmifaces.py
delete mode 100644 src/kimchi/model/vms.py
delete mode 100644 src/kimchi/model/vmsnapshots.py
delete mode 100644 src/kimchi/model/vmstorages.py
delete mode 100644 src/kimchi/objectstore.py
delete mode 100644 src/kimchi/osinfo.py
delete mode 100644 src/kimchi/proxy.py
delete mode 100644 src/kimchi/repositories.py
delete mode 100644 src/kimchi/root.py
delete mode 100644 src/kimchi/scan.py
delete mode 100644 src/kimchi/screenshot.py
delete mode 100644 src/kimchi/server.py
delete mode 100644 src/kimchi/sslcert.py
delete mode 100644 src/kimchi/swupdate.py
delete mode 100644 src/kimchi/template.py
delete mode 100644 src/kimchi/utils.py
delete mode 100644 src/kimchi/vmtemplate.py
delete mode 100644 src/kimchi/vnc.py
delete mode 100644 src/kimchi/xmlutils/Makefile.am
delete mode 100644 src/kimchi/xmlutils/disk.py
delete mode 100644 src/kimchi/xmlutils/graphics.py
delete mode 100644 src/kimchi/xmlutils/interface.py
delete mode 100644 src/kimchi/xmlutils/network.py
delete mode 100644 src/kimchi/yumparser.py
delete mode 100644 src/kimchid.in
delete mode 100644 src/nginx/kimchi.conf.in
create mode 100644 src/nginx/wok.conf.in
create mode 100644 src/wok.conf.in
create mode 100644 src/wok/API.json
create mode 100644 src/wok/Makefile.am
rename src/{kimchi => wok}/__init__.py (100%)
create mode 100644 src/wok/asynctask.py
create mode 100644 src/wok/auth.py
rename src/{kimchi => wok}/basemodel.py (100%)
create mode 100644 src/wok/cachebust.py
create mode 100644 src/wok/config.py.in
create mode 100644 src/wok/control/Makefile.am
create mode 100644 src/wok/control/__init__.py
create mode 100644 src/wok/control/base.py
create mode 100644 src/wok/control/plugins.py
create mode 100644 src/wok/control/utils.py
create mode 100644 src/wok/exception.py
create mode 100644 src/wok/i18n.py
create mode 100644 src/wok/model/Makefile.am
copy src/{kimchi => wok}/model/__init__.py (100%)
create mode 100644 src/wok/model/model.py
create mode 100644 src/wok/model/plugins.py
rename src/{kimchi => wok}/netinfo.py (100%)
rename src/{kimchi => wok}/network.py (100%)
create mode 100644 src/wok/objectstore.py
create mode 100644 src/wok/proxy.py
rename src/{kimchi => wok}/rollbackcontext.py (100%)
create mode 100644 src/wok/root.py
create mode 100644 src/wok/server.py
create mode 100644 src/wok/sslcert.py
create mode 100644 src/wok/template.py
create mode 100644 src/wok/utils.py
create mode 100644 src/wok/vnc.py
create mode 100644 src/wok/xmlutils/Makefile.am
rename src/{kimchi/model => wok/xmlutils}/__init__.py (100%)
rename src/{kimchi => wok}/xmlutils/utils.py (100%)
create mode 100644 src/wokd.in
delete mode 100644 tests/Makefile.am
delete mode 100644 tests/iso_gen.py
delete mode 100644 tests/run_tests.sh.in
delete mode 100644 tests/test_authorization.py
delete mode 100644 tests/test_config.py.in
delete mode 100644 tests/test_exception.py
delete mode 100644 tests/test_host.py
delete mode 100644 tests/test_mock_network.py
delete mode 100644 tests/test_mock_storagepool.py
delete mode 100644 tests/test_mock_storagevolume.py
delete mode 100644 tests/test_mockmodel.py
delete mode 100644 tests/test_model.py
delete mode 100644 tests/test_model_network.py
delete mode 100644 tests/test_model_storagepool.py
delete mode 100644 tests/test_model_storagevolume.py
delete mode 100644 tests/test_networkxml.py
delete mode 100644 tests/test_objectstore.py
delete mode 100644 tests/test_osinfo.py
delete mode 100644 tests/test_plugin.py
delete mode 100644 tests/test_rest.py
delete mode 100644 tests/test_rollbackcontext.py
delete mode 100644 tests/test_server.py
delete mode 100644 tests/test_storagepoolxml.py
delete mode 100644 tests/test_template.py
delete mode 100644 tests/test_utils.py
delete mode 100644 tests/test_vmtemplate.py
delete mode 100644 tests/test_yumparser.py
delete mode 100644 tests/utils.py
delete mode 100644 ui/css/theme-default/guest-edit.css
delete mode 100644 ui/css/theme-default/host.css
delete mode 100644 ui/css/theme-default/list.css
delete mode 100644 ui/css/theme-default/network.css
delete mode 100644 ui/css/theme-default/report-rename.css
delete mode 100644 ui/css/theme-default/storage.css
delete mode 100644 ui/css/theme-default/template_add.css
create mode 100644 ui/fontello/Makefile.am
create mode 100644 ui/fontello/css/Makefile.am
create mode 100644 ui/fontello/font/Makefile.am
rename ui/images/theme-default/{kimchi-loading.gif => wok-loading.gif} (100%)
delete mode 100644 ui/js/src/kimchi.api.js
delete mode 100644 ui/js/src/kimchi.cookie.js
delete mode 100644 ui/js/src/kimchi.grid.js
delete mode 100644 ui/js/src/kimchi.guest_add_main.js
delete mode 100644 ui/js/src/kimchi.guest_edit_main.js
delete mode 100644 ui/js/src/kimchi.guest_main.js
delete mode 100644 ui/js/src/kimchi.guest_media_main.js
delete mode 100644 ui/js/src/kimchi.guest_storage_add.main.js
delete mode 100644 ui/js/src/kimchi.host.js
delete mode 100644 ui/js/src/kimchi.lang.js
delete mode 100644 ui/js/src/kimchi.line-chart.js
delete mode 100644 ui/js/src/kimchi.login.js
delete mode 100644 ui/js/src/kimchi.main.js
delete mode 100644 ui/js/src/kimchi.message.js
delete mode 100644 ui/js/src/kimchi.network.js
delete mode 100644 ui/js/src/kimchi.popable.js
delete mode 100644 ui/js/src/kimchi.report_add_main.js
delete mode 100644 ui/js/src/kimchi.report_rename_main.js
delete mode 100644 ui/js/src/kimchi.repository_add_main.js
delete mode 100644 ui/js/src/kimchi.repository_edit_main.js
delete mode 100644 ui/js/src/kimchi.select.js
delete mode 100644 ui/js/src/kimchi.storage_main.js
delete mode 100644 ui/js/src/kimchi.storagepool_add_main.js
delete mode 100644 ui/js/src/kimchi.storagepool_add_volume_main.js
delete mode 100644 ui/js/src/kimchi.substitute.js
delete mode 100644 ui/js/src/kimchi.template_add_main.js
delete mode 100644 ui/js/src/kimchi.template_edit_main.js
delete mode 100644 ui/js/src/kimchi.template_main.js
delete mode 100644 ui/js/src/kimchi.topic.js
delete mode 100644 ui/js/src/kimchi.user.js
delete mode 100644 ui/js/src/kimchi.utils.js
delete mode 100644 ui/js/src/kimchi.window.js
create mode 100644 ui/js/src/wok.api.js
create mode 100644 ui/js/src/wok.cookie.js
rename ui/js/src/{kimchi.form.js => wok.form.js} (100%)
create mode 100644 ui/js/src/wok.grid.js
create mode 100644 ui/js/src/wok.lang.js
create mode 100644 ui/js/src/wok.line-chart.js
create mode 100644 ui/js/src/wok.login.js
create mode 100644 ui/js/src/wok.main.js
create mode 100644 ui/js/src/wok.message.js
rename ui/js/src/{kimchi.object.js => wok.object.js} (100%)
create mode 100644 ui/js/src/wok.popable.js
create mode 100644 ui/js/src/wok.select.js
rename ui/js/src/{kimchi.string.js => wok.string.js} (100%)
create mode 100644 ui/js/src/wok.substitute.js
create mode 100644 ui/js/src/wok.topic.js
create mode 100644 ui/js/src/wok.user.js
create mode 100644 ui/js/src/wok.utils.js
create mode 100644 ui/js/src/wok.window.js
delete mode 100644 ui/pages/guest-add.html.tmpl
delete mode 100644 ui/pages/guest-storage-add.html.tmpl
delete mode 100644 ui/pages/guest.html.tmpl
delete mode 100644 ui/pages/help/Makefile.am
delete mode 100644 ui/pages/help/de_DE/Makefile.am
delete mode 100644 ui/pages/help/en_US/Makefile.am
delete mode 100644 ui/pages/help/es_ES/Makefile.am
delete mode 100644 ui/pages/help/fr_FR/Makefile.am
delete mode 100755 ui/pages/help/gen-index.py
delete mode 100644 ui/pages/help/it_IT/Makefile.am
delete mode 100644 ui/pages/help/ja_JP/Makefile.am
delete mode 100644 ui/pages/help/ko_KR/Makefile.am
delete mode 100644 ui/pages/help/pt_BR/Makefile.am
delete mode 100644 ui/pages/help/ru_RU/Makefile.am
delete mode 100644 ui/pages/help/zh_CN/Makefile.am
delete mode 100644 ui/pages/help/zh_TW/Makefile.am
delete mode 100644 ui/pages/kimchi-ui.html.tmpl
delete mode 100644 ui/pages/report-add.html.tmpl
delete mode 100644 ui/pages/report-rename.html.tmpl
delete mode 100644 ui/pages/repository-add.html.tmpl
delete mode 100644 ui/pages/repository-edit.html.tmpl
delete mode 100644 ui/pages/storagepool-add-volume.html.tmpl
delete mode 100644 ui/pages/storagepool-add.html.tmpl
delete mode 100644 ui/pages/tabs/Makefile.am
delete mode 100644 ui/pages/tabs/guests.html.tmpl
delete mode 100644 ui/pages/tabs/host.html.tmpl
delete mode 100644 ui/pages/tabs/network.html.tmpl
delete mode 100644 ui/pages/tabs/storage.html.tmpl
delete mode 100644 ui/pages/tabs/templates.html.tmpl
delete mode 100644 ui/pages/template-add.html.tmpl
delete mode 100644 ui/pages/template-edit.html.tmpl
create mode 100644 ui/pages/wok-ui.html.tmpl
delete mode 100644 ui/spice-html5/Makefile.am
delete mode 100644 ui/spice-html5/css/Makefile.am
delete mode 100644 ui/spice-html5/pages/Makefile.am
delete mode 100644 ui/spice-html5/pages/spice_auto.html
delete mode 100644 ui/spice-html5/thirdparty/Makefile.am
2
36
Signed-off-by: Lucio Correia <luciojhc(a)linux.vnet.ibm.com>
Signed-off-by: Gustavo Y. Ribeiro <gyr(a)linux.vnet.ibm.com>
---
Makefile.am | 2 +-
configure.ac | 2 +-
contrib/DEBIAN/postrm | 2 +-
contrib/Makefile.am | 2 +-
contrib/wokd-upstart.conf.debian | 2 +-
contrib/wokd-upstart.conf.fedora | 2 +-
contrib/wokd.sysvinit | 2 +-
docs/Makefile.am | 2 +-
plugins/Makefile.am | 2 +-
plugins/kimchi/Makefile.am | 2 +-
plugins/kimchi/__init__.py | 2 +-
plugins/kimchi/configure.ac | 2 +-
plugins/kimchi/contrib/DEBIAN/Makefile.am | 2 +-
plugins/kimchi/contrib/Makefile.am | 2 +-
plugins/kimchi/control/Makefile.am | 2 +-
plugins/kimchi/control/__init__.py | 2 +-
plugins/kimchi/control/config.py | 2 +-
plugins/kimchi/control/cpuinfo.py | 2 +-
plugins/kimchi/control/groups.py | 2 +-
plugins/kimchi/control/interfaces.py | 2 +-
plugins/kimchi/control/peers.py | 2 +-
plugins/kimchi/control/storageservers.py | 2 +-
plugins/kimchi/control/tasks.py | 2 +-
plugins/kimchi/control/users.py | 2 +-
plugins/kimchi/control/vm/Makefile.am | 2 +-
plugins/kimchi/control/vm/__init__.py | 2 +-
plugins/kimchi/control/vm/hostdevs.py | 2 +-
plugins/kimchi/control/vm/snapshots.py | 2 +-
plugins/kimchi/distros.d/Makefile.am | 2 +-
plugins/kimchi/docs/Makefile.am | 2 +-
plugins/kimchi/imageinfo.py | 2 +-
plugins/kimchi/iscsi.py | 2 +-
plugins/kimchi/model/Makefile.am | 2 +-
plugins/kimchi/model/__init__.py | 2 +-
plugins/kimchi/model/groups.py | 2 +-
plugins/kimchi/model/hostdev.py | 2 +-
plugins/kimchi/model/interfaces.py | 2 +-
plugins/kimchi/model/libvirtconnection.py | 2 +-
plugins/kimchi/model/libvirtstoragepool.py | 2 +-
plugins/kimchi/model/storageservers.py | 2 +-
plugins/kimchi/model/storagetargets.py | 2 +-
plugins/kimchi/model/tasks.py | 2 +-
plugins/kimchi/model/users.py | 2 +-
plugins/kimchi/scan.py | 2 +-
plugins/kimchi/screenshot.py | 2 +-
plugins/kimchi/tests/Makefile.am | 2 +-
plugins/kimchi/tests/test_exception.py | 2 +-
plugins/kimchi/tests/test_networkxml.py | 2 +-
plugins/kimchi/tests/test_plugin.py | 2 +-
plugins/kimchi/tests/test_rollbackcontext.py | 2 +-
plugins/kimchi/ui/Makefile.am | 2 +-
plugins/kimchi/ui/config/Makefile.am | 2 +-
plugins/kimchi/ui/css/Makefile.am | 2 +-
.../ui/css/theme-default/guest-storage-add.css | 2 +-
plugins/kimchi/ui/css/theme-default/host.css | 2 +-
.../css/theme-default/storagepool-add-volume.css | 2 +-
plugins/kimchi/ui/css/theme-default/template.css | 2 +-
.../kimchi/ui/css/theme-default/template_list.css | 2 +-
plugins/kimchi/ui/images/Makefile.am | 2 +-
plugins/kimchi/ui/images/theme-default/Makefile.am | 2 +-
plugins/kimchi/ui/js/Makefile.am | 2 +-
plugins/kimchi/ui/js/src/kimchi.guest_add_main.js | 2 +-
.../kimchi/ui/js/src/kimchi.guest_media_main.js | 2 +-
plugins/kimchi/ui/js/src/kimchi.host.js | 2 +-
plugins/kimchi/ui/js/src/kimchi.main.js | 2 +-
plugins/kimchi/ui/js/src/kimchi.report_add_main.js | 2 +-
.../kimchi/ui/js/src/kimchi.report_rename_main.js | 2 +-
.../kimchi/ui/js/src/kimchi.repository_add_main.js | 2 +-
.../ui/js/src/kimchi.repository_edit_main.js | 2 +-
plugins/kimchi/ui/js/src/kimchi.template_main.js | 2 +-
plugins/kimchi/ui/pages/Makefile.am | 2 +-
.../kimchi/ui/pages/guest-storage-add.html.tmpl | 2 +-
plugins/kimchi/ui/pages/guests.html.tmpl | 2 +-
plugins/kimchi/ui/pages/help/Makefile.am | 2 +-
plugins/kimchi/ui/pages/help/de_DE/Makefile.am | 2 +-
plugins/kimchi/ui/pages/help/en_US/Makefile.am | 2 +-
plugins/kimchi/ui/pages/help/es_ES/Makefile.am | 2 +-
plugins/kimchi/ui/pages/help/fr_FR/Makefile.am | 2 +-
plugins/kimchi/ui/pages/help/it_IT/Makefile.am | 2 +-
plugins/kimchi/ui/pages/help/ja_JP/Makefile.am | 2 +-
plugins/kimchi/ui/pages/help/kimchi.css | 2 +-
plugins/kimchi/ui/pages/help/ko_KR/Makefile.am | 2 +-
plugins/kimchi/ui/pages/help/pt_BR/Makefile.am | 2 +-
plugins/kimchi/ui/pages/help/ru_RU/Makefile.am | 2 +-
plugins/kimchi/ui/pages/help/zh_CN/Makefile.am | 2 +-
plugins/kimchi/ui/pages/help/zh_TW/Makefile.am | 2 +-
plugins/kimchi/ui/pages/templates.html.tmpl | 2 +-
plugins/kimchi/ui/spice-html5/Makefile.am | 2 +-
plugins/kimchi/ui/spice-html5/css/Makefile.am | 2 +-
plugins/kimchi/ui/spice-html5/pages/Makefile.am | 2 +-
.../kimchi/ui/spice-html5/thirdparty/Makefile.am | 2 +-
plugins/kimchi/xmlutils/Makefile.am | 2 +-
plugins/kimchi/xmlutils/__init__.py | 2 +-
plugins/kimchi/xmlutils/disk.py | 2 +-
plugins/kimchi/xmlutils/graphics.py | 2 +-
plugins/kimchi/xmlutils/network.py | 2 +-
plugins/kimchi/xmlutils/qemucmdline.py | 2 +-
plugins/sample/__init__.py | 2 +-
plugins/sample/model.py | 2 +-
plugins/sample/ui/js/util.js | 2 +-
plugins/sample/ui/pages/i18n.json.tmpl | 2 +-
src/Makefile.am | 2 +-
src/nginx/Makefile.am | 2 +-
src/wok/Makefile.am | 2 +-
src/wok/__init__.py | 2 +-
src/wok/asynctask.py | 2 +-
src/wok/basemodel.py | 2 +-
src/wok/cachebust.py | 2 +-
src/wok/control/Makefile.am | 2 +-
src/wok/control/__init__.py | 2 +-
src/wok/control/plugins.py | 2 +-
src/wok/control/utils.py | 2 +-
src/wok/exception.py | 2 +-
src/wok/model/Makefile.am | 2 +-
src/wok/model/__init__.py | 2 +-
src/wok/model/plugins.py | 2 +-
src/wok/network.py | 2 +-
src/wok/objectstore.py | 2 +-
src/wok/rollbackcontext.py | 2 +-
src/wok/server.py | 2 +-
src/wok/sslcert.py | 2 +-
src/wok/template.py | 2 +-
src/wok/xmlutils/Makefile.am | 2 +-
src/wok/xmlutils/__init__.py | 2 +-
src/wok/xmlutils/utils.py | 2 +-
ui/Makefile.am | 2 +-
ui/css/Makefile.am | 2 +-
ui/css/theme-default/circleGauge.css | 2 +-
ui/css/theme-default/grid.css | 2 +-
ui/css/theme-default/jquery-ui.custom.css | 2 +-
ui/css/theme-default/line-chart.css | 2 +-
ui/css/theme-default/tile-check.css | 2 +-
ui/css/theme-default/toolbar.css | 2 +-
ui/images/Makefile.am | 2 +-
ui/images/theme-default/Makefile.am | 2 +-
ui/js/Makefile.am | 2 +-
ui/js/src/wok.form.js | 2 +-
ui/js/src/wok.line-chart.js | 2 +-
ui/js/src/wok.select.js | 2 +-
ui/js/widgets/button-dropDown.js | 2 +-
ui/js/widgets/circleGauge.js | 2 +-
ui/js/widgets/combobox.js | 2 +-
ui/js/widgets/filter-select.js | 2 +-
ui/js/widgets/select-menu.js | 2 +-
ui/libs/Makefile.am | 2 +-
ui/libs/themes/base/Makefile.am | 2 +-
ui/libs/themes/base/images/Makefile.am | 2 +-
ui/pages/Makefile.am | 2 +-
ui/pages/error.html.tmpl | 2 +-
ui/pages/websockify/Makefile.am | 2 +-
150 files changed, 150 insertions(+), 150 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index dfc7576..b15fd2c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/configure.ac b/configure.ac
index 47c2e6c..9eba840 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2013-2015
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/contrib/DEBIAN/postrm b/contrib/DEBIAN/postrm
index 256a234..3d6bb5d 100755
--- a/contrib/DEBIAN/postrm
+++ b/contrib/DEBIAN/postrm
@@ -2,7 +2,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/contrib/Makefile.am b/contrib/Makefile.am
index b537df5..1dce25d 100644
--- a/contrib/Makefile.am
+++ b/contrib/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright IBM Corp, 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/contrib/wokd-upstart.conf.debian b/contrib/wokd-upstart.conf.debian
index 82e9156..9e8e77e 100644
--- a/contrib/wokd-upstart.conf.debian
+++ b/contrib/wokd-upstart.conf.debian
@@ -1,7 +1,7 @@
#
# wokd - Wok Web Server
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/contrib/wokd-upstart.conf.fedora b/contrib/wokd-upstart.conf.fedora
index f02ce34..32def4b 100644
--- a/contrib/wokd-upstart.conf.fedora
+++ b/contrib/wokd-upstart.conf.fedora
@@ -1,7 +1,7 @@
#
# wokd - Wok Web Server
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/contrib/wokd.sysvinit b/contrib/wokd.sysvinit
index 10680ee..53c0a34 100644
--- a/contrib/wokd.sysvinit
+++ b/contrib/wokd.sysvinit
@@ -2,7 +2,7 @@
#
# wokd Wok Web Server
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# Author: Aline Manera <alinefm(a)br.ibm.com>
#
diff --git a/docs/Makefile.am b/docs/Makefile.am
index db23721..3de2730 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index 21a6ece..d2f5d3a 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/Makefile.am b/plugins/kimchi/Makefile.am
index faef341..0425e00 100644
--- a/plugins/kimchi/Makefile.am
+++ b/plugins/kimchi/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/__init__.py b/plugins/kimchi/__init__.py
index 9330044..f89b3ff 100644
--- a/plugins/kimchi/__init__.py
+++ b/plugins/kimchi/__init__.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/configure.ac b/plugins/kimchi/configure.ac
index adab45b..b4cec37 100644
--- a/plugins/kimchi/configure.ac
+++ b/plugins/kimchi/configure.ac
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2013-2015
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/contrib/DEBIAN/Makefile.am b/plugins/kimchi/contrib/DEBIAN/Makefile.am
index ca89552..870f67d 100644
--- a/plugins/kimchi/contrib/DEBIAN/Makefile.am
+++ b/plugins/kimchi/contrib/DEBIAN/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright IBM Corp, 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/contrib/Makefile.am b/plugins/kimchi/contrib/Makefile.am
index 5001191..e24d2a6 100644
--- a/plugins/kimchi/contrib/Makefile.am
+++ b/plugins/kimchi/contrib/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright IBM Corp, 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/control/Makefile.am b/plugins/kimchi/control/Makefile.am
index 33118ca..e8aaf39 100644
--- a/plugins/kimchi/control/Makefile.am
+++ b/plugins/kimchi/control/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/control/__init__.py b/plugins/kimchi/control/__init__.py
index 4ad9459..14bfb8e 100644
--- a/plugins/kimchi/control/__init__.py
+++ b/plugins/kimchi/control/__init__.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/control/config.py b/plugins/kimchi/control/config.py
index 15df68f..294722f 100644
--- a/plugins/kimchi/control/config.py
+++ b/plugins/kimchi/control/config.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/control/cpuinfo.py b/plugins/kimchi/control/cpuinfo.py
index 31f316c..e2df5a9 100644
--- a/plugins/kimchi/control/cpuinfo.py
+++ b/plugins/kimchi/control/cpuinfo.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/control/groups.py b/plugins/kimchi/control/groups.py
index 649ff09..05c1d76 100644
--- a/plugins/kimchi/control/groups.py
+++ b/plugins/kimchi/control/groups.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/control/interfaces.py b/plugins/kimchi/control/interfaces.py
index d698b7a..220e372 100644
--- a/plugins/kimchi/control/interfaces.py
+++ b/plugins/kimchi/control/interfaces.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/control/peers.py b/plugins/kimchi/control/peers.py
index 21e9f13..30172e4 100644
--- a/plugins/kimchi/control/peers.py
+++ b/plugins/kimchi/control/peers.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/control/storageservers.py b/plugins/kimchi/control/storageservers.py
index 654ab47..07851c0 100644
--- a/plugins/kimchi/control/storageservers.py
+++ b/plugins/kimchi/control/storageservers.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/control/tasks.py b/plugins/kimchi/control/tasks.py
index b25d892..356afec 100644
--- a/plugins/kimchi/control/tasks.py
+++ b/plugins/kimchi/control/tasks.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/control/users.py b/plugins/kimchi/control/users.py
index 756a2f7..8d79739 100644
--- a/plugins/kimchi/control/users.py
+++ b/plugins/kimchi/control/users.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/control/vm/Makefile.am b/plugins/kimchi/control/vm/Makefile.am
index b17c68a..01bc46e 100644
--- a/plugins/kimchi/control/vm/Makefile.am
+++ b/plugins/kimchi/control/vm/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/control/vm/__init__.py b/plugins/kimchi/control/vm/__init__.py
index a311045..a58a6da 100644
--- a/plugins/kimchi/control/vm/__init__.py
+++ b/plugins/kimchi/control/vm/__init__.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/control/vm/hostdevs.py b/plugins/kimchi/control/vm/hostdevs.py
index a43b9d8..1beb8fd 100644
--- a/plugins/kimchi/control/vm/hostdevs.py
+++ b/plugins/kimchi/control/vm/hostdevs.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/control/vm/snapshots.py b/plugins/kimchi/control/vm/snapshots.py
index dd17b85..9df90ed 100644
--- a/plugins/kimchi/control/vm/snapshots.py
+++ b/plugins/kimchi/control/vm/snapshots.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/distros.d/Makefile.am b/plugins/kimchi/distros.d/Makefile.am
index 684fe60..b54cf68 100644
--- a/plugins/kimchi/distros.d/Makefile.am
+++ b/plugins/kimchi/distros.d/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/docs/Makefile.am b/plugins/kimchi/docs/Makefile.am
index 679aa18..515374a 100644
--- a/plugins/kimchi/docs/Makefile.am
+++ b/plugins/kimchi/docs/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/imageinfo.py b/plugins/kimchi/imageinfo.py
index 8a22495..12d26d0 100644
--- a/plugins/kimchi/imageinfo.py
+++ b/plugins/kimchi/imageinfo.py
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/iscsi.py b/plugins/kimchi/iscsi.py
index 02886ac..5de9f51 100644
--- a/plugins/kimchi/iscsi.py
+++ b/plugins/kimchi/iscsi.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/model/Makefile.am b/plugins/kimchi/model/Makefile.am
index f4f4750..ad28f29 100644
--- a/plugins/kimchi/model/Makefile.am
+++ b/plugins/kimchi/model/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/model/__init__.py b/plugins/kimchi/model/__init__.py
index ca7ede4..771bf68 100644
--- a/plugins/kimchi/model/__init__.py
+++ b/plugins/kimchi/model/__init__.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/model/groups.py b/plugins/kimchi/model/groups.py
index fc63d68..9d96ba7 100644
--- a/plugins/kimchi/model/groups.py
+++ b/plugins/kimchi/model/groups.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/model/hostdev.py b/plugins/kimchi/model/hostdev.py
index c411d0b..8f9d70b 100644
--- a/plugins/kimchi/model/hostdev.py
+++ b/plugins/kimchi/model/hostdev.py
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/model/interfaces.py b/plugins/kimchi/model/interfaces.py
index 81b379a..768b8be 100644
--- a/plugins/kimchi/model/interfaces.py
+++ b/plugins/kimchi/model/interfaces.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/model/libvirtconnection.py b/plugins/kimchi/model/libvirtconnection.py
index ef4a4ce..1d08996 100644
--- a/plugins/kimchi/model/libvirtconnection.py
+++ b/plugins/kimchi/model/libvirtconnection.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/model/libvirtstoragepool.py b/plugins/kimchi/model/libvirtstoragepool.py
index b22856b..71e45a4 100644
--- a/plugins/kimchi/model/libvirtstoragepool.py
+++ b/plugins/kimchi/model/libvirtstoragepool.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/model/storageservers.py b/plugins/kimchi/model/storageservers.py
index accc5f5..02d1e8b 100644
--- a/plugins/kimchi/model/storageservers.py
+++ b/plugins/kimchi/model/storageservers.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/model/storagetargets.py b/plugins/kimchi/model/storagetargets.py
index 4090b45..3f100ce 100644
--- a/plugins/kimchi/model/storagetargets.py
+++ b/plugins/kimchi/model/storagetargets.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/model/tasks.py b/plugins/kimchi/model/tasks.py
index 678fdc2..f5d475e 100644
--- a/plugins/kimchi/model/tasks.py
+++ b/plugins/kimchi/model/tasks.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/model/users.py b/plugins/kimchi/model/users.py
index 2fa65dd..98c96a4 100644
--- a/plugins/kimchi/model/users.py
+++ b/plugins/kimchi/model/users.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/scan.py b/plugins/kimchi/scan.py
index b475c46..af322c9 100644
--- a/plugins/kimchi/scan.py
+++ b/plugins/kimchi/scan.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/screenshot.py b/plugins/kimchi/screenshot.py
index 7c2347c..d724bc7 100644
--- a/plugins/kimchi/screenshot.py
+++ b/plugins/kimchi/screenshot.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/tests/Makefile.am b/plugins/kimchi/tests/Makefile.am
index c1f6784..fd0476e 100644
--- a/plugins/kimchi/tests/Makefile.am
+++ b/plugins/kimchi/tests/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/tests/test_exception.py b/plugins/kimchi/tests/test_exception.py
index f1b81ba..7f9c8b1 100644
--- a/plugins/kimchi/tests/test_exception.py
+++ b/plugins/kimchi/tests/test_exception.py
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/tests/test_networkxml.py b/plugins/kimchi/tests/test_networkxml.py
index a64b6c2..ed1a058 100644
--- a/plugins/kimchi/tests/test_networkxml.py
+++ b/plugins/kimchi/tests/test_networkxml.py
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/tests/test_plugin.py b/plugins/kimchi/tests/test_plugin.py
index ebc4a39..cf8ef9a 100644
--- a/plugins/kimchi/tests/test_plugin.py
+++ b/plugins/kimchi/tests/test_plugin.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/tests/test_rollbackcontext.py b/plugins/kimchi/tests/test_rollbackcontext.py
index 6eac6d0..ea10fe0 100644
--- a/plugins/kimchi/tests/test_rollbackcontext.py
+++ b/plugins/kimchi/tests/test_rollbackcontext.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/ui/Makefile.am b/plugins/kimchi/ui/Makefile.am
index 21fe703..aa13b7a 100644
--- a/plugins/kimchi/ui/Makefile.am
+++ b/plugins/kimchi/ui/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/config/Makefile.am b/plugins/kimchi/ui/config/Makefile.am
index e3b3d19..5f8f6a3 100644
--- a/plugins/kimchi/ui/config/Makefile.am
+++ b/plugins/kimchi/ui/config/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/css/Makefile.am b/plugins/kimchi/ui/css/Makefile.am
index 5071d29..c16af7e 100644
--- a/plugins/kimchi/ui/css/Makefile.am
+++ b/plugins/kimchi/ui/css/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/css/theme-default/guest-storage-add.css b/plugins/kimchi/ui/css/theme-default/guest-storage-add.css
index 9cc41e8..25b8a9c 100644
--- a/plugins/kimchi/ui/css/theme-default/guest-storage-add.css
+++ b/plugins/kimchi/ui/css/theme-default/guest-storage-add.css
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2014
+ * Copyright IBM, Corp. 2014-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/css/theme-default/host.css b/plugins/kimchi/ui/css/theme-default/host.css
index a0cccb1..a7618d6 100644
--- a/plugins/kimchi/ui/css/theme-default/host.css
+++ b/plugins/kimchi/ui/css/theme-default/host.css
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/css/theme-default/storagepool-add-volume.css b/plugins/kimchi/ui/css/theme-default/storagepool-add-volume.css
index 6e8a551..6aa5e96 100644
--- a/plugins/kimchi/ui/css/theme-default/storagepool-add-volume.css
+++ b/plugins/kimchi/ui/css/theme-default/storagepool-add-volume.css
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2014
+ * Copyright IBM, Corp. 2014-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/css/theme-default/template.css b/plugins/kimchi/ui/css/theme-default/template.css
index 27fe404..fbab23f 100644
--- a/plugins/kimchi/ui/css/theme-default/template.css
+++ b/plugins/kimchi/ui/css/theme-default/template.css
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/css/theme-default/template_list.css b/plugins/kimchi/ui/css/theme-default/template_list.css
index 3161a33..4de4704 100644
--- a/plugins/kimchi/ui/css/theme-default/template_list.css
+++ b/plugins/kimchi/ui/css/theme-default/template_list.css
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
-* Copyright IBM, Corp. 2013-2014
+* Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/images/Makefile.am b/plugins/kimchi/ui/images/Makefile.am
index 0562e6a..361c219 100644
--- a/plugins/kimchi/ui/images/Makefile.am
+++ b/plugins/kimchi/ui/images/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/images/theme-default/Makefile.am b/plugins/kimchi/ui/images/theme-default/Makefile.am
index 7e11d75..ba1398d 100644
--- a/plugins/kimchi/ui/images/theme-default/Makefile.am
+++ b/plugins/kimchi/ui/images/theme-default/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/js/Makefile.am b/plugins/kimchi/ui/js/Makefile.am
index c9d1218..4bc4861 100644
--- a/plugins/kimchi/ui/js/Makefile.am
+++ b/plugins/kimchi/ui/js/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/js/src/kimchi.guest_add_main.js b/plugins/kimchi/ui/js/src/kimchi.guest_add_main.js
index 6be6f9a..d269eeb 100644
--- a/plugins/kimchi/ui/js/src/kimchi.guest_add_main.js
+++ b/plugins/kimchi/ui/js/src/kimchi.guest_add_main.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/js/src/kimchi.guest_media_main.js b/plugins/kimchi/ui/js/src/kimchi.guest_media_main.js
index b920527..61b5918 100644
--- a/plugins/kimchi/ui/js/src/kimchi.guest_media_main.js
+++ b/plugins/kimchi/ui/js/src/kimchi.guest_media_main.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2014
+ * Copyright IBM, Corp. 2014-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/js/src/kimchi.host.js b/plugins/kimchi/ui/js/src/kimchi.host.js
index e2d2511..bcff58e 100644
--- a/plugins/kimchi/ui/js/src/kimchi.host.js
+++ b/plugins/kimchi/ui/js/src/kimchi.host.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/js/src/kimchi.main.js b/plugins/kimchi/ui/js/src/kimchi.main.js
index 2fdeb85..79d46ea 100644
--- a/plugins/kimchi/ui/js/src/kimchi.main.js
+++ b/plugins/kimchi/ui/js/src/kimchi.main.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/js/src/kimchi.report_add_main.js b/plugins/kimchi/ui/js/src/kimchi.report_add_main.js
index 5f098d3..2c3ca57 100644
--- a/plugins/kimchi/ui/js/src/kimchi.report_add_main.js
+++ b/plugins/kimchi/ui/js/src/kimchi.report_add_main.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/js/src/kimchi.report_rename_main.js b/plugins/kimchi/ui/js/src/kimchi.report_rename_main.js
index 1bdb8d9..c3f039e 100644
--- a/plugins/kimchi/ui/js/src/kimchi.report_rename_main.js
+++ b/plugins/kimchi/ui/js/src/kimchi.report_rename_main.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2014
+ * Copyright IBM, Corp. 2014-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/js/src/kimchi.repository_add_main.js b/plugins/kimchi/ui/js/src/kimchi.repository_add_main.js
index 656306b..70a71fe 100644
--- a/plugins/kimchi/ui/js/src/kimchi.repository_add_main.js
+++ b/plugins/kimchi/ui/js/src/kimchi.repository_add_main.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2014
+ * Copyright IBM, Corp. 2014-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js b/plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js
index 5bfc51e..e18ea91 100644
--- a/plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js
+++ b/plugins/kimchi/ui/js/src/kimchi.repository_edit_main.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2014
+ * Copyright IBM, Corp. 2014-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/js/src/kimchi.template_main.js b/plugins/kimchi/ui/js/src/kimchi.template_main.js
index b09fe12..948a4bf 100644
--- a/plugins/kimchi/ui/js/src/kimchi.template_main.js
+++ b/plugins/kimchi/ui/js/src/kimchi.template_main.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/pages/Makefile.am b/plugins/kimchi/ui/pages/Makefile.am
index 56288e3..3c50f31 100644
--- a/plugins/kimchi/ui/pages/Makefile.am
+++ b/plugins/kimchi/ui/pages/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/pages/guest-storage-add.html.tmpl b/plugins/kimchi/ui/pages/guest-storage-add.html.tmpl
index a26e0f9..901178f 100644
--- a/plugins/kimchi/ui/pages/guest-storage-add.html.tmpl
+++ b/plugins/kimchi/ui/pages/guest-storage-add.html.tmpl
@@ -1,7 +1,7 @@
#*
* Project Kimchi
*
- * Copyright IBM, Corp. 2014
+ * Copyright IBM, Corp. 2014-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/pages/guests.html.tmpl b/plugins/kimchi/ui/pages/guests.html.tmpl
index b8a1259..975a05a 100644
--- a/plugins/kimchi/ui/pages/guests.html.tmpl
+++ b/plugins/kimchi/ui/pages/guests.html.tmpl
@@ -1,7 +1,7 @@
#*
* Project Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/pages/help/Makefile.am b/plugins/kimchi/ui/pages/help/Makefile.am
index a4ee361..c356520 100644
--- a/plugins/kimchi/ui/pages/help/Makefile.am
+++ b/plugins/kimchi/ui/pages/help/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright IBM Corp, 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/ui/pages/help/de_DE/Makefile.am b/plugins/kimchi/ui/pages/help/de_DE/Makefile.am
index 3d99aae..3952fa4 100644
--- a/plugins/kimchi/ui/pages/help/de_DE/Makefile.am
+++ b/plugins/kimchi/ui/pages/help/de_DE/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright IBM Corp, 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/ui/pages/help/en_US/Makefile.am b/plugins/kimchi/ui/pages/help/en_US/Makefile.am
index d37f03a..c312ebb 100644
--- a/plugins/kimchi/ui/pages/help/en_US/Makefile.am
+++ b/plugins/kimchi/ui/pages/help/en_US/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright IBM Corp, 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/ui/pages/help/es_ES/Makefile.am b/plugins/kimchi/ui/pages/help/es_ES/Makefile.am
index 29c596f..b31785f 100644
--- a/plugins/kimchi/ui/pages/help/es_ES/Makefile.am
+++ b/plugins/kimchi/ui/pages/help/es_ES/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright IBM Corp, 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/ui/pages/help/fr_FR/Makefile.am b/plugins/kimchi/ui/pages/help/fr_FR/Makefile.am
index 11ce394..4c5d5df 100644
--- a/plugins/kimchi/ui/pages/help/fr_FR/Makefile.am
+++ b/plugins/kimchi/ui/pages/help/fr_FR/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright IBM Corp, 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/ui/pages/help/it_IT/Makefile.am b/plugins/kimchi/ui/pages/help/it_IT/Makefile.am
index 62e2f29..5717cc8 100644
--- a/plugins/kimchi/ui/pages/help/it_IT/Makefile.am
+++ b/plugins/kimchi/ui/pages/help/it_IT/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright IBM Corp, 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/ui/pages/help/ja_JP/Makefile.am b/plugins/kimchi/ui/pages/help/ja_JP/Makefile.am
index f9c2f33..e0632cd 100644
--- a/plugins/kimchi/ui/pages/help/ja_JP/Makefile.am
+++ b/plugins/kimchi/ui/pages/help/ja_JP/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright IBM Corp, 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/ui/pages/help/kimchi.css b/plugins/kimchi/ui/pages/help/kimchi.css
index 32fae4a..1ac5942 100644
--- a/plugins/kimchi/ui/pages/help/kimchi.css
+++ b/plugins/kimchi/ui/pages/help/kimchi.css
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2014
+ * Copyright IBM, Corp. 2014-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/pages/help/ko_KR/Makefile.am b/plugins/kimchi/ui/pages/help/ko_KR/Makefile.am
index e441955..d2f920b 100644
--- a/plugins/kimchi/ui/pages/help/ko_KR/Makefile.am
+++ b/plugins/kimchi/ui/pages/help/ko_KR/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright IBM Corp, 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/ui/pages/help/pt_BR/Makefile.am b/plugins/kimchi/ui/pages/help/pt_BR/Makefile.am
index 7fc2cb0..65a1061 100644
--- a/plugins/kimchi/ui/pages/help/pt_BR/Makefile.am
+++ b/plugins/kimchi/ui/pages/help/pt_BR/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright IBM Corp, 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/ui/pages/help/ru_RU/Makefile.am b/plugins/kimchi/ui/pages/help/ru_RU/Makefile.am
index 85ca27a..f5a2e9e 100644
--- a/plugins/kimchi/ui/pages/help/ru_RU/Makefile.am
+++ b/plugins/kimchi/ui/pages/help/ru_RU/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright IBM Corp, 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/ui/pages/help/zh_CN/Makefile.am b/plugins/kimchi/ui/pages/help/zh_CN/Makefile.am
index e785048..426c5b0 100644
--- a/plugins/kimchi/ui/pages/help/zh_CN/Makefile.am
+++ b/plugins/kimchi/ui/pages/help/zh_CN/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright IBM Corp, 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/ui/pages/help/zh_TW/Makefile.am b/plugins/kimchi/ui/pages/help/zh_TW/Makefile.am
index 9c8ac26..b5ee387 100644
--- a/plugins/kimchi/ui/pages/help/zh_TW/Makefile.am
+++ b/plugins/kimchi/ui/pages/help/zh_TW/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright IBM Corp, 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/ui/pages/templates.html.tmpl b/plugins/kimchi/ui/pages/templates.html.tmpl
index af1cf3f..337084c 100644
--- a/plugins/kimchi/ui/pages/templates.html.tmpl
+++ b/plugins/kimchi/ui/pages/templates.html.tmpl
@@ -1,7 +1,7 @@
#*
* Project Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/spice-html5/Makefile.am b/plugins/kimchi/ui/spice-html5/Makefile.am
index c43f1ef..fc46351 100644
--- a/plugins/kimchi/ui/spice-html5/Makefile.am
+++ b/plugins/kimchi/ui/spice-html5/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/spice-html5/css/Makefile.am b/plugins/kimchi/ui/spice-html5/css/Makefile.am
index ed51972..5005974 100644
--- a/plugins/kimchi/ui/spice-html5/css/Makefile.am
+++ b/plugins/kimchi/ui/spice-html5/css/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/spice-html5/pages/Makefile.am b/plugins/kimchi/ui/spice-html5/pages/Makefile.am
index 431ec6c..2c354a4 100644
--- a/plugins/kimchi/ui/spice-html5/pages/Makefile.am
+++ b/plugins/kimchi/ui/spice-html5/pages/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/ui/spice-html5/thirdparty/Makefile.am b/plugins/kimchi/ui/spice-html5/thirdparty/Makefile.am
index 474478d..79cd1f5 100644
--- a/plugins/kimchi/ui/spice-html5/thirdparty/Makefile.am
+++ b/plugins/kimchi/ui/spice-html5/thirdparty/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/plugins/kimchi/xmlutils/Makefile.am b/plugins/kimchi/xmlutils/Makefile.am
index 207ad7f..5667443 100644
--- a/plugins/kimchi/xmlutils/Makefile.am
+++ b/plugins/kimchi/xmlutils/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/xmlutils/__init__.py b/plugins/kimchi/xmlutils/__init__.py
index ca7ede4..771bf68 100644
--- a/plugins/kimchi/xmlutils/__init__.py
+++ b/plugins/kimchi/xmlutils/__init__.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/xmlutils/disk.py b/plugins/kimchi/xmlutils/disk.py
index 126ce77..54e6763 100644
--- a/plugins/kimchi/xmlutils/disk.py
+++ b/plugins/kimchi/xmlutils/disk.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/xmlutils/graphics.py b/plugins/kimchi/xmlutils/graphics.py
index 2b4346a..8bf83a9 100644
--- a/plugins/kimchi/xmlutils/graphics.py
+++ b/plugins/kimchi/xmlutils/graphics.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/xmlutils/network.py b/plugins/kimchi/xmlutils/network.py
index c73aad9..c454224 100644
--- a/plugins/kimchi/xmlutils/network.py
+++ b/plugins/kimchi/xmlutils/network.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/kimchi/xmlutils/qemucmdline.py b/plugins/kimchi/xmlutils/qemucmdline.py
index 66238a7..bcafd75 100644
--- a/plugins/kimchi/xmlutils/qemucmdline.py
+++ b/plugins/kimchi/xmlutils/qemucmdline.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/sample/__init__.py b/plugins/sample/__init__.py
index a3a8f05..b8299b8 100644
--- a/plugins/sample/__init__.py
+++ b/plugins/sample/__init__.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/sample/model.py b/plugins/sample/model.py
index 4ada648..8a093a1 100644
--- a/plugins/sample/model.py
+++ b/plugins/sample/model.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/plugins/sample/ui/js/util.js b/plugins/sample/ui/js/util.js
index 7689a81..75240c0 100644
--- a/plugins/sample/ui/js/util.js
+++ b/plugins/sample/ui/js/util.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2014
+ * Copyright IBM, Corp. 2014-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/plugins/sample/ui/pages/i18n.json.tmpl b/plugins/sample/ui/pages/i18n.json.tmpl
index 737bb39..24f7eca 100644
--- a/plugins/sample/ui/pages/i18n.json.tmpl
+++ b/plugins/sample/ui/pages/i18n.json.tmpl
@@ -1,7 +1,7 @@
#*
* Kimchi
*
- * Copyright IBM, Corp. 2014
+ * Copyright IBM, Corp. 2014-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/src/Makefile.am b/src/Makefile.am
index 2fed7d5..a730574 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2013-2015
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/nginx/Makefile.am b/src/nginx/Makefile.am
index 0f36b44..b1098e1 100644
--- a/src/nginx/Makefile.am
+++ b/src/nginx/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2015
+# Copyright IBM, Corp. 2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/Makefile.am b/src/wok/Makefile.am
index 6e00907..c7f8825 100644
--- a/src/wok/Makefile.am
+++ b/src/wok/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/__init__.py b/src/wok/__init__.py
index edf8e5d..ee98092 100644
--- a/src/wok/__init__.py
+++ b/src/wok/__init__.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/asynctask.py b/src/wok/asynctask.py
index 1e0ec4b..0e19e16 100644
--- a/src/wok/asynctask.py
+++ b/src/wok/asynctask.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/basemodel.py b/src/wok/basemodel.py
index 096c66b..57059f1 100644
--- a/src/wok/basemodel.py
+++ b/src/wok/basemodel.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/cachebust.py b/src/wok/cachebust.py
index d04b2c6..50e68f1 100644
--- a/src/wok/cachebust.py
+++ b/src/wok/cachebust.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/control/Makefile.am b/src/wok/control/Makefile.am
index d6cb3f0..f68badf 100644
--- a/src/wok/control/Makefile.am
+++ b/src/wok/control/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/control/__init__.py b/src/wok/control/__init__.py
index 4ad9459..14bfb8e 100644
--- a/src/wok/control/__init__.py
+++ b/src/wok/control/__init__.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/control/plugins.py b/src/wok/control/plugins.py
index 1cc1d5a..9488e2f 100644
--- a/src/wok/control/plugins.py
+++ b/src/wok/control/plugins.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/control/utils.py b/src/wok/control/utils.py
index 496320c..3988ba9 100644
--- a/src/wok/control/utils.py
+++ b/src/wok/control/utils.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/exception.py b/src/wok/exception.py
index 6f5e9d9..f36ff77 100644
--- a/src/wok/exception.py
+++ b/src/wok/exception.py
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/model/Makefile.am b/src/wok/model/Makefile.am
index 8f0f102..ee31167 100644
--- a/src/wok/model/Makefile.am
+++ b/src/wok/model/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2013
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/model/__init__.py b/src/wok/model/__init__.py
index ca7ede4..771bf68 100644
--- a/src/wok/model/__init__.py
+++ b/src/wok/model/__init__.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/model/plugins.py b/src/wok/model/plugins.py
index e350f1e..f568d42 100644
--- a/src/wok/model/plugins.py
+++ b/src/wok/model/plugins.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/network.py b/src/wok/network.py
index 1433b8a..80b2cc1 100644
--- a/src/wok/network.py
+++ b/src/wok/network.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/objectstore.py b/src/wok/objectstore.py
index 107b568..4c0b024 100644
--- a/src/wok/objectstore.py
+++ b/src/wok/objectstore.py
@@ -1,6 +1,6 @@
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/rollbackcontext.py b/src/wok/rollbackcontext.py
index 2f3e8bc..1d93181 100644
--- a/src/wok/rollbackcontext.py
+++ b/src/wok/rollbackcontext.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/server.py b/src/wok/server.py
index 5b48049..9d2c27b 100644
--- a/src/wok/server.py
+++ b/src/wok/server.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/sslcert.py b/src/wok/sslcert.py
index 6b64796..792a8a3 100644
--- a/src/wok/sslcert.py
+++ b/src/wok/sslcert.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
# Copyright (C) 2004-2005 OSAF. All Rights Reserved.
#
# Portions of this file were derived from the python-m2crypto unit tests:
diff --git a/src/wok/template.py b/src/wok/template.py
index c743f73..41e5c91 100644
--- a/src/wok/template.py
+++ b/src/wok/template.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2013-2014
+# Copyright IBM, Corp. 2013-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/xmlutils/Makefile.am b/src/wok/xmlutils/Makefile.am
index 69aa524..a355541 100644
--- a/src/wok/xmlutils/Makefile.am
+++ b/src/wok/xmlutils/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM Corp, 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/xmlutils/__init__.py b/src/wok/xmlutils/__init__.py
index ca7ede4..771bf68 100644
--- a/src/wok/xmlutils/__init__.py
+++ b/src/wok/xmlutils/__init__.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/src/wok/xmlutils/utils.py b/src/wok/xmlutils/utils.py
index be08a14..cb0dbcd 100644
--- a/src/wok/xmlutils/utils.py
+++ b/src/wok/xmlutils/utils.py
@@ -1,7 +1,7 @@
#
# Project Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
diff --git a/ui/Makefile.am b/ui/Makefile.am
index 6be27ed..3c34391 100644
--- a/ui/Makefile.am
+++ b/ui/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/ui/css/Makefile.am b/ui/css/Makefile.am
index 29ddb26..bffff55 100644
--- a/ui/css/Makefile.am
+++ b/ui/css/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/ui/css/theme-default/circleGauge.css b/ui/css/theme-default/circleGauge.css
index 48ef1d3..6966d80 100644
--- a/ui/css/theme-default/circleGauge.css
+++ b/ui/css/theme-default/circleGauge.css
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2014
+ * Copyright IBM, Corp. 2014-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/ui/css/theme-default/grid.css b/ui/css/theme-default/grid.css
index dfc20ff..c607691 100644
--- a/ui/css/theme-default/grid.css
+++ b/ui/css/theme-default/grid.css
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/ui/css/theme-default/jquery-ui.custom.css b/ui/css/theme-default/jquery-ui.custom.css
index 56f7e06..9353422 100644
--- a/ui/css/theme-default/jquery-ui.custom.css
+++ b/ui/css/theme-default/jquery-ui.custom.css
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2014
+ * Copyright IBM, Corp. 2014-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/ui/css/theme-default/line-chart.css b/ui/css/theme-default/line-chart.css
index 15d9bb8..edf34f5 100644
--- a/ui/css/theme-default/line-chart.css
+++ b/ui/css/theme-default/line-chart.css
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/ui/css/theme-default/tile-check.css b/ui/css/theme-default/tile-check.css
index 5e802ca..bbf5da0 100644
--- a/ui/css/theme-default/tile-check.css
+++ b/ui/css/theme-default/tile-check.css
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/ui/css/theme-default/toolbar.css b/ui/css/theme-default/toolbar.css
index ea2a039..76372b8 100644
--- a/ui/css/theme-default/toolbar.css
+++ b/ui/css/theme-default/toolbar.css
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/ui/images/Makefile.am b/ui/images/Makefile.am
index 297c0bd..5e944bb 100644
--- a/ui/images/Makefile.am
+++ b/ui/images/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/ui/images/theme-default/Makefile.am b/ui/images/theme-default/Makefile.am
index 336729c..5b15aff 100644
--- a/ui/images/theme-default/Makefile.am
+++ b/ui/images/theme-default/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/ui/js/Makefile.am b/ui/js/Makefile.am
index 2549846..1529ee9 100644
--- a/ui/js/Makefile.am
+++ b/ui/js/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/ui/js/src/wok.form.js b/ui/js/src/wok.form.js
index 0bb7c4b..fc434c6 100644
--- a/ui/js/src/wok.form.js
+++ b/ui/js/src/wok.form.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/ui/js/src/wok.line-chart.js b/ui/js/src/wok.line-chart.js
index 8b40288..66b819a 100644
--- a/ui/js/src/wok.line-chart.js
+++ b/ui/js/src/wok.line-chart.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/ui/js/src/wok.select.js b/ui/js/src/wok.select.js
index 60830a5..0b2a4ce 100644
--- a/ui/js/src/wok.select.js
+++ b/ui/js/src/wok.select.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/ui/js/widgets/button-dropDown.js b/ui/js/widgets/button-dropDown.js
index ec6bd2a..0209c7b 100644
--- a/ui/js/widgets/button-dropDown.js
+++ b/ui/js/widgets/button-dropDown.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2014
+ * Copyright IBM, Corp. 2014-2015
*
* Licensed under the Apache License, Version 2.0 (the 'License');
* you may not use this file except in compliance with the License.
diff --git a/ui/js/widgets/circleGauge.js b/ui/js/widgets/circleGauge.js
index 52ec027..bfbebf6 100644
--- a/ui/js/widgets/circleGauge.js
+++ b/ui/js/widgets/circleGauge.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2014
+ * Copyright IBM, Corp. 2014-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/ui/js/widgets/combobox.js b/ui/js/widgets/combobox.js
index 92244a2..8b79086 100644
--- a/ui/js/widgets/combobox.js
+++ b/ui/js/widgets/combobox.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2014
+ * Copyright IBM, Corp. 2014-2015
*
* Licensed under the Apache License, Version 2.0 (the 'License');
* you may not use this file except in compliance with the License.
diff --git a/ui/js/widgets/filter-select.js b/ui/js/widgets/filter-select.js
index db6b4b0..fff566f 100644
--- a/ui/js/widgets/filter-select.js
+++ b/ui/js/widgets/filter-select.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2014
+ * Copyright IBM, Corp. 2014-2015
*
* Licensed under the Apache License, Version 2.0 (the 'License');
* you may not use this file except in compliance with the License.
diff --git a/ui/js/widgets/select-menu.js b/ui/js/widgets/select-menu.js
index bd7a207..54b9a0b 100644
--- a/ui/js/widgets/select-menu.js
+++ b/ui/js/widgets/select-menu.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2014
+ * Copyright IBM, Corp. 2014-2015
*
* Licensed under the Apache License, Version 2.0 (the 'License');
* you may not use this file except in compliance with the License.
diff --git a/ui/libs/Makefile.am b/ui/libs/Makefile.am
index 49ad3bb..5951fad 100644
--- a/ui/libs/Makefile.am
+++ b/ui/libs/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/ui/libs/themes/base/Makefile.am b/ui/libs/themes/base/Makefile.am
index 1bbaa50..483306a 100644
--- a/ui/libs/themes/base/Makefile.am
+++ b/ui/libs/themes/base/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/ui/libs/themes/base/images/Makefile.am b/ui/libs/themes/base/images/Makefile.am
index dd619c8..b117bd9 100644
--- a/ui/libs/themes/base/images/Makefile.am
+++ b/ui/libs/themes/base/images/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/ui/pages/Makefile.am b/ui/pages/Makefile.am
index 68f4c92..b979444 100644
--- a/ui/pages/Makefile.am
+++ b/ui/pages/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2013
+# Copyright IBM, Corp. 2013-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/ui/pages/error.html.tmpl b/ui/pages/error.html.tmpl
index eea1179..3b7fbbe 100644
--- a/ui/pages/error.html.tmpl
+++ b/ui/pages/error.html.tmpl
@@ -1,7 +1,7 @@
#*
* Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/ui/pages/websockify/Makefile.am b/ui/pages/websockify/Makefile.am
index 5321562..6add3e3 100644
--- a/ui/pages/websockify/Makefile.am
+++ b/ui/pages/websockify/Makefile.am
@@ -1,7 +1,7 @@
#
# Kimchi
#
-# Copyright IBM, Corp. 2014
+# Copyright IBM, Corp. 2014-2015
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
--
1.7.1
2
2
I created a very simple CentOS 6 compatible init script. Its a little
hacky but it does work. I know I am supposed to make a patch but perhaps
someone can evaluate and decide if you want to include it:
#!/bin/sh
#
# Name: Kimchi init script for CentOS 6
# Author: Michael Sole
# Email: michael.sole(at)soledevelopment.com
#
# Description: Very simple init script to start, stop and restart the
Kimchi control panel
#
# Usage: /etc/init.d/kimchid start|stop|restart
### BEGIN INIT INFO
# Provides: kimchid
# Required-Start: $local_fs $syslog
# Required-Stop: $local_fs $syslog
# Default-Start: 2345
# Default-Stop: 90
# Short-Description: run kimchi daemon
# Description: Very simple init script to start, stop and restart the
Kimchi control panel
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
exec="/usr/bin/kimchid"
prog="kimchid"
lockfile=/var/lock/subsys/$prog
start() {
if [ -f "$lockfile" ]
then
echo "Lock file found, is the daemon already running?"
exit 5
fi
echo -n $"Starting $prog: "
nohup $exec > /dev/null 2>&1 &
echo "OK"
touch $lockfile
return 0
}
stop() {
echo -n $"Stopping $prog: "
rm -f $lockfile
ps aux | grep -ie $prog | awk '{print $2}' | xargs kill -9 > /dev/null
2>&1
return 0
}
restart() {
stop
start
}
case "$1" in
start)
$1
;;
stop)
$1
;;
restart)
$1
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 2
esac
exit $?
3
2
From: Frederic Bonnard <frediz(a)linux.vnet.ibm.com>
Escape minus for options so they don't get interpreted as hyphens.
---
docs/kimchid.8.in | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/docs/kimchid.8.in b/docs/kimchid.8.in
index 08e96e5..d715e87 100644
--- a/docs/kimchid.8.in
+++ b/docs/kimchid.8.in
@@ -17,35 +17,35 @@ supports HTML5.
.SH OPTIONS
The following options are supported:
.TP
-\fB-h\fP , \fB--help\fP
+\fB\-h\fP , \fB\-\-help\fP
Show this help message and exit.
.TP
-\fB--host\fP \fIhost\fP
+\fB\-\-host\fP \fIhost\fP
Specify the hostname or IP to listen on.
.TP
-\fB--port\fP \fIport\fP
+\fB\-\-port\fP \fIport\fP
Specify the HTTP port (default \fI8000\fP).
.TP
-\fB--ssl-port\fP \fIssl_port\fP
+\fB\-\-ssl-port\fP \fIssl_port\fP
Specify the HTTPS port (default \fI8001\fP).
.TP
-\fB--cherrypy_port\fP \fIcherrypy_port\fP
+\fB\-\-cherrypy_port\fP \fIcherrypy_port\fP
Specify the Cherrypy server port (default \fI8010\fP).
.TP
-\fB--log-level\fP [\fIdebug\fP | \fIinfo\fP | \fIwarning\fP | \fIerror\fP | \fIcritical\fP]
+\fB\-\-log-level\fP [\fIdebug\fP | \fIinfo\fP | \fIwarning\fP | \fIerror\fP | \fIcritical\fP]
Specify the log level (default \fIdebug\fP).
.TP
-\fB--access-log\fP \fIaccess_log\fP
+\fB\-\-access-log\fP \fIaccess_log\fP
Specify the access log location where kimchi should create the access log file.
.TP
-\fB--environment\fP [\fIdevelopment\fP | \fIproduction\fP]
+\fB\-\-environment\fP [\fIdevelopment\fP | \fIproduction\fP]
Specify the running environment of kimchi server. Check cherrypy documentation for more details (default \fIproduction\fP).
.TP
-\fB--federation\fP [\fIon\fP | \fIoff\fP]
+\fB\-\-federation\fP [\fIon\fP | \fIoff\fP]
Register and discover Kimchi peers in the same network using OpenSLP. Check
below the \fBFEDERATION\fP section for more details (default \fIoff\fP).
.TP
-\fB--test\fP
+\fB\-\-test\fP
Run kimchi on a mock version that does not affect the system. For testing proposals.
.SH FEDERATION
Federation feature is a mechanism to discover Kimchi peers in the same network.
@@ -63,23 +63,23 @@ To enable it, do the following:
ports in your firewall configuration
For system using firewalld, do:
- sudo firewall-cmd --permanent --add-port=427/udp
- sudo firewall-cmd --permanent --add-port=427/tcp
- sudo firewall-cmd --reload
+ sudo firewall-cmd \-\-permanent \-\-add-port=427/udp
+ sudo firewall-cmd \-\-permanent \-\-add-port=427/tcp
+ sudo firewall-cmd \-\-reload
For openSUSE systems, do:
sudo /sbin/SuSEfirewall2 open EXT TCP 427
sudo /sbin/SuSEfirewall2 open EXT UDP 427
For system using iptables, do:
- sudo iptables -A INPUT -p tcp --dport 427 -j ACCEPT
- sudo iptables -A INPUT -p udp --dport 427 -j ACCEPT
+ sudo iptables \-A INPUT \-p tcp \-\-dport 427 \-j ACCEPT
+ sudo iptables \-A INPUT \-p udp \-\-dport 427 \-j ACCEPT
3. In addition to the OpenSLP ports, you also need to allow multicast in the
firewall configuration
For system using firewalld, do:
- sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -s <subnet> -j ACCEPT
+ sudo firewall-cmd \-\-direct \-\-add-rule ipv4 filter INPUT 0 \-s <subnet> \-j ACCEPT
For openSUSE systems, do:
Add the subnet to the trusted networks listed on FW_TRUSTED_NETS in
@@ -87,7 +87,7 @@ To enable it, do the following:
Make sure to restart /sbin/SuSEfirewall2 after modifying /etc/sysconfig/SuSEfirewall2
For system using iptables, do:
- sudo iptables -A INPUT -s <subnet> -j ACCEPT
+ sudo iptables \-A INPUT \-s <subnet> \-j ACCEPT
4. Start slpd service and make sure it is up while running Kimchi
sudo service slpd start
--
2.1.4
3
3
05 Aug '15
v2:
- Added a new test case;
Power system requires an USB XHCI controller in order to allow PCI
hotplug. This patch adds such controller by default when creating a new
VM and inform the users if a VM currently doesn't have the controller.
Jose Ricardo Ziviani (4):
Add a new error code for pci hotplug
Check for usb xhci controller in Power platform
Define the USB xhci controller in the template for Power Systems
Add a new test case for pci hotplug on Power
src/kimchi/i18n.py | 1 +
src/kimchi/model/vmhostdevs.py | 28 +++++++++++++++++++++-
src/kimchi/vmtemplate.py | 17 +++++++++++++
tests/test_model.py | 54 ++++++++++++++++++++++++++++++++++++++++++
4 files changed, 99 insertions(+), 1 deletion(-)
--
1.9.1
2
5
'undefined' value displayed in url and page was getting refreshed after logged into wok page
Signed-off-by: Atreyee <atreyee(a)linux.vnet.ibm.com>
---
ui/css/theme-default/message.css | 10 ++++++++++
ui/js/src/wok.main.js | 15 +++++++++++++--
2 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/ui/css/theme-default/message.css b/ui/css/theme-default/message.css
index 28c392b..7cce15b 100644
--- a/ui/css/theme-default/message.css
+++ b/ui/css/theme-default/message.css
@@ -133,3 +133,13 @@
border: 2px solid #444;
color: #444;
}
+
+.noPluginMessage{
+ font-size: 18px;
+ height: 48px;
+ line-height: 48px;
+ text-shadow: -1px -1px 1px #ccc, 1px 1px 1px #fff;
+ padding-left: 10px;
+ padding-top:10px;
+
+}
diff --git a/ui/js/src/wok.main.js b/ui/js/src/wok.main.js
index f4c9940..0d9baec 100644
--- a/ui/js/src/wok.main.js
+++ b/ui/js/src/wok.main.js
@@ -102,10 +102,15 @@ wok.main = function() {
var defaultTab = tabs[0]
var defaultTabPath = defaultTab && defaultTab['path']
+
+ //redirect to empty page when no plugin installed
+ if(tabs.length===0){
+ DEFAULT_HASH = 'wok-empty';
+ }else{
// Remove file extension from 'defaultTabPath'
DEFAULT_HASH = defaultTabPath &&
defaultTabPath.substring(0, defaultTabPath.lastIndexOf('.'))
-
+ }
$('#nav-menu').append(genTabs(tabs));
callback && callback();
@@ -136,11 +141,16 @@ wok.main = function() {
* and clear location.hash to jump to home page.
*/
var tab = $('#nav-menu a[href="' + url + '"]');
- if (tab.length === 0) {
+ if (tab.length === 0 && url!='wok-empty.html') {
location.hash = '';
return;
}
+ //Remove the tab arrow indicator for no plugin
+ if(url=='wok-empty.html'){
+ $('.menu-arrow').hide();
+ $('#main').html('No plugins installed currently.You can download the available plugins <a href="https://github.com/kimchi-project/kimchi">Kimchi</a> and <a href="https://github.com/kimchi-project/ginger">Ginger</a> from Github').addClass('noPluginMessage');
+ }else{
// Animate arrow indicator.
var left = $(tab).parent().position().left;
var width = $(tab).parent().width();
@@ -163,6 +173,7 @@ wok.main = function() {
}
// Load page content.
loadPage(url);
+ }
};
/**
--
2.1.0
1
0
From: Stephan Conrad <stephan.conrad(a)gmail.com>
Hi,
I have change the patch, so that it should work with older psutils versions.
Regards Stephan
Stephan Conrad (1):
Patched kimchi for psutils 3.0.1
src/kimchi/model/host.py | 17 ++++++++++++++---
src/kimchi/osinfo.py | 6 ++++--
2 files changed, 18 insertions(+), 5 deletions(-)
--
2.2.1
3
3
04 Aug '15
From: Daniel Henrique Barboza <dhbarboza82(a)gmail.com>
This patch set adds a new API to retrieve only the available devices
from the host. 'available' means only the devices that weren't
attached to any other VM.
The backend is generic and can work with all devices, but the API
provided here is made for 'PCI' devices only as we do not provide
official support for USB and SCSI passthrough yet.
Usage:
get all available devices:
$ curl -u danielhb -H "Content-Type: application/json" -H "Accept: application/json" -X GET "http://localhost:8010/host/devices?_passthrough=true&_available_only=true"
get all available PCI devices:
$ curl -u danielhb -H "Content-Type: application/json" -H "Accept: application/json" -X GET "http://localhost:8010/host/devices?_passthrough=true&_available_only=true&_…"
Daniel Henrique Barboza (3):
Get available host passthrough devices: model changes
Adding new API in the UI APIs and docs
Mockmodel and test changes for the new API
docs/API.md | 2 +
src/kimchi/API.json | 6 +++
src/kimchi/i18n.py | 1 +
src/kimchi/mockmodel.py | 3 +-
src/kimchi/model/host.py | 105 ++++++++++++++++++++++++++++++++++++++++-
src/kimchi/model/vmhostdevs.py | 75 ++---------------------------
tests/test_host.py | 11 +++++
ui/js/src/kimchi.api.js | 14 ++++++
8 files changed, 144 insertions(+), 73 deletions(-)
--
2.4.3
5
7
From: Daniel Henrique Barboza <dhbarboza82(a)gmail.com>
Kimchi does not obey the value set by the template, always
creating a disk of format 'qcow2' even if the user set another
format.
This patchset fixes this issue by:
- always set the disk format with the value the user set, unless there
is a storagepool restrition
- getting the default disk format type in template.conf. This value
is optional and will be used in the case the user does not provide
any other value.
- if there is no user choice and no default set in template.conf, the
default disk format will be 'qcow2'.
See the code and unit tests for more info.
Daniel Henrique Barboza (2):
Getting default disk format from template.conf
New unit tests to check disk creation behavior
src/kimchi/vmtemplate.py | 19 +++++++--
tests/test_model.py | 106 ++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 120 insertions(+), 5 deletions(-)
--
2.4.3
4
5
[PATCH] Detach group of PCI Devices from host before attaching to guest
by Jose Ricardo Ziviani 04 Aug '15
by Jose Ricardo Ziviani 04 Aug '15
04 Aug '15
- A PCI device can have more than one function. In this case each
function must be detached from host before attaching to the vm.
Signed-off-by: Jose Ricardo Ziviani <joserz(a)linux.vnet.ibm.com>
---
src/kimchi/model/vmhostdevs.py | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/src/kimchi/model/vmhostdevs.py b/src/kimchi/model/vmhostdevs.py
index ea75fce..76033f0 100644
--- a/src/kimchi/model/vmhostdevs.py
+++ b/src/kimchi/model/vmhostdevs.py
@@ -196,6 +196,22 @@ class VMHostDevsModel(object):
pci_infos = [dev_model.lookup(dev_name) for dev_name in group_names]
pci_infos.append(dev_info)
+ # all devices in the group that is going to be attached to the vm
+ # must be detached from the host first
+ with RollbackContext() as rollback:
+ for pci_info in pci_infos:
+ try:
+ dev = self.conn.get().nodeDeviceLookupByName(
+ pci_info['name'])
+ dev.dettach()
+ except Exception:
+ raise OperationFailed('KCHVMHDEV0005E',
+ {'name': pci_info['name']})
+ else:
+ rollback.prependDefer(dev.reAttach)
+
+ rollback.commitAll()
+
device_flags = get_vm_config_flag(dom, mode='all')
with RollbackContext() as rollback:
--
1.9.1
4
3
The last path was removed in the server.
Signed-off-by: Ramon Medeiros <ramonn(a)linux.vnet.ibm.com>
---
src/distros.d/fedora.json | 2 +-
tests/test_rest.py | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/distros.d/fedora.json b/src/distros.d/fedora.json
index bce72d6..164415d 100644
--- a/src/distros.d/fedora.json
+++ b/src/distros.d/fedora.json
@@ -4,7 +4,7 @@
"os_distro": "fedora",
"os_arch": "x86_64",
"os_version": "20",
- "path": "http://fedora.mirrors.tds.net/pub/fedora/releases/20/Live/x86_64/Fedora-Liv…"
+ "path": "http://mirrors.kernel.org/fedora/releases/21/Live/x86_64/Fedora-Live-KDE-x8…"
},
{
"name": "Fedora 18 (PPC64)",
diff --git a/tests/test_rest.py b/tests/test_rest.py
index c2d142f..a969942 100644
--- a/tests/test_rest.py
+++ b/tests/test_rest.py
@@ -645,8 +645,8 @@ class RestTests(unittest.TestCase):
os.remove('/tmp/existent.iso')
# Change path of storage cdrom
- cdrom = u'http://fedora.mirrors.tds.net/pub/fedora/releases/20/'\
- 'Live/x86_64/Fedora-Live-Desktop-x86_64-20-1.iso'
+ cdrom = u'http://mirrors.kernel.org/fedora/releases/21/Live/x86_64/'\
+ 'Fedora-Live-KDE-x86_64-21-5.iso'
req = json.dumps({'path': cdrom})
resp = self.request('/vms/test-vm/storages/' + cd_dev, req, 'PUT')
self.assertEquals(200, resp.status)
--
2.1.0
3
3
On hostdev.py, device parent was being search 2 times. First, a xml was
parsed, where the parent device can be found. When device parent not
present, calling the function .parent() (which is not necessary) will raise
an error on libvirt. To avoid this, the call for .parent() was removed,
and parent device is set as None if not present.
Signed-off-by: Ramon Medeiros <ramonn(a)linux.vnet.ibm.com>
---
src/kimchi/model/hostdev.py | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/kimchi/model/hostdev.py b/src/kimchi/model/hostdev.py
index 2a4a311..e898d77 100644
--- a/src/kimchi/model/hostdev.py
+++ b/src/kimchi/model/hostdev.py
@@ -169,14 +169,15 @@ def get_dev_info(node_dev):
scsi_target is not documented in libvirt official website. Try to
parse scsi_target according to the libvirt commit db19834a0a.
'''
-
xmlstr = node_dev.XMLDesc(0)
info = dictize(xmlstr)['device']
dev_type = info['capability'].pop('type')
info['device_type'] = dev_type
cap_dict = info.pop('capability')
info.update(cap_dict)
- info['parent'] = node_dev.parent()
+
+ # parent device not found: set as None
+ info["parent"] = info.get("parent")
if dev_type in ('scsi', 'scsi_generic', 'scsi_target', 'system', 'usb'):
return info
--
2.1.0
3
3
From: Daniel Henrique Barboza <dhbarboza82(a)gmail.com>
Unit tests must consider the scenario where the user set
a default disk format other than 'qcow2'.
Signed-off-by: Daniel Henrique Barboza <dhbarboza82(a)gmail.com>
---
src/kimchi/vmtemplate.py | 7 ++++---
tests/test_model.py | 5 ++++-
tests/test_template.py | 4 +++-
3 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py
index 28c6448..2646573 100644
--- a/src/kimchi/vmtemplate.py
+++ b/src/kimchi/vmtemplate.py
@@ -159,7 +159,8 @@ class VMTemplate(object):
dev, xml = get_disk_xml(params)
return xml
- def _get_default_disk0_format(self):
+ @staticmethod
+ def get_default_disk0_format():
config_file = os.path.join(paths.conf_dir, 'template.conf')
config = ConfigObj(config_file)
@@ -174,7 +175,7 @@ class VMTemplate(object):
base_disk_params = {'type': 'disk', 'disk': 'file',
'bus': self.info['disk_bus'],
- 'format': self._get_default_disk0_format()}
+ 'format': self.get_default_disk0_format()}
logical_disk_params = {'format': 'raw'}
iscsi_disk_params = {'disk': 'block', 'format': 'raw'}
@@ -202,7 +203,7 @@ class VMTemplate(object):
return unicode(disks_xml, 'utf-8')
def to_volume_list(self, vm_uuid):
- default_vol_format = self._get_default_disk0_format()
+ default_vol_format = self.get_default_disk0_format()
storage_path = self._get_storage_path()
ret = []
for i, d in enumerate(self.info['disks']):
diff --git a/tests/test_model.py b/tests/test_model.py
index bc71c50..717b9bc 100644
--- a/tests/test_model.py
+++ b/tests/test_model.py
@@ -738,8 +738,11 @@ class ModelTests(unittest.TestCase):
inst = model.Model(None,
objstore_loc=self.tmp_store)
+ # template disk format must be qcow2 because vmsnapshot
+ # only supports this format
orig_params = {'name': 'test', 'memory': 1024, 'cpus': 1,
- 'cdrom': UBUNTU_ISO}
+ 'cdrom': UBUNTU_ISO,
+ 'disks': [{'size': 1, 'format': 'qcow2'}]}
inst.templates_create(orig_params)
with RollbackContext() as rollback:
diff --git a/tests/test_template.py b/tests/test_template.py
index acdb7c6..83561c1 100644
--- a/tests/test_template.py
+++ b/tests/test_template.py
@@ -24,6 +24,7 @@ import unittest
from functools import partial
+from kimchi.vmtemplate import VMTemplate
from kimchi.config import READONLY_POOL_TYPE
from kimchi.mockmodel import MockModel
from utils import get_free_port, patch_auth, request, run_server
@@ -87,7 +88,8 @@ class TemplateTests(unittest.TestCase):
self.assertEquals(sorted(tmpl.keys()), sorted(keys))
# Verify if default disk format was configured
- self.assertEquals(tmpl['disks'][0]['format'], 'qcow2')
+ default_disk_format = VMTemplate.get_default_disk0_format()
+ self.assertEquals(tmpl['disks'][0]['format'], default_disk_format)
# Clone a template
resp = self.request('/templates/test/clone', '{}', 'POST')
--
2.4.3
3
2
From: Daniel Henrique Barboza <dhbarboza82(a)gmail.com>
This patch includes updated translation strings for several languages
that Kimchi supports.
Signed-off-by: Daniel Henrique Barboza <dhbarboza82(a)gmail.com>
---
po/de_DE.po | 1485 +++++++++++++++++++----------
po/es_ES.po | 1474 ++++++++++++++++++----------
po/fr_FR.po | 1671 ++++++++++++++++++++------------
po/it_IT.po | 1467 +++++++++++++++++++---------
po/ko_KR.po | 1507 ++++++++++++++++++++---------
po/ru_RU.po | 1503 ++++++++++++++++++++---------
po/zh_CN.po | 1843 ++++++++++++++++++++++++------------
po/zh_TW.po | 1541 +++++++++++++++++++++---------
ui/pages/help/de_DE/guests.dita | 106 +--
ui/pages/help/de_DE/host.dita | 16 +-
ui/pages/help/de_DE/network.dita | 6 +-
ui/pages/help/de_DE/storage.dita | 41 +-
ui/pages/help/de_DE/templates.dita | 77 +-
ui/pages/help/es_ES/guests.dita | 105 +-
ui/pages/help/es_ES/host.dita | 16 +-
ui/pages/help/es_ES/network.dita | 6 +-
ui/pages/help/es_ES/storage.dita | 39 +-
ui/pages/help/es_ES/templates.dita | 79 +-
ui/pages/help/fr_FR/guests.dita | 110 +--
ui/pages/help/fr_FR/host.dita | 19 +-
ui/pages/help/fr_FR/network.dita | 7 +-
ui/pages/help/fr_FR/storage.dita | 43 +-
ui/pages/help/fr_FR/templates.dita | 89 +-
ui/pages/help/it_IT/guests.dita | 107 +--
ui/pages/help/it_IT/host.dita | 16 +-
ui/pages/help/it_IT/network.dita | 6 +-
ui/pages/help/it_IT/storage.dita | 45 +-
ui/pages/help/it_IT/templates.dita | 83 +-
ui/pages/help/ko_KR/guests.dita | 119 +--
ui/pages/help/ko_KR/host.dita | 20 +-
ui/pages/help/ko_KR/network.dita | 6 +-
ui/pages/help/ko_KR/storage.dita | 43 +-
ui/pages/help/ko_KR/templates.dita | 81 +-
ui/pages/help/ru_RU/guests.dita | 113 ++-
ui/pages/help/ru_RU/host.dita | 16 +-
ui/pages/help/ru_RU/network.dita | 6 +-
ui/pages/help/ru_RU/storage.dita | 43 +-
ui/pages/help/ru_RU/templates.dita | 80 +-
ui/pages/help/zh_CN/guests.dita | 106 +--
ui/pages/help/zh_CN/host.dita | 16 +-
ui/pages/help/zh_CN/network.dita | 6 +-
ui/pages/help/zh_CN/storage.dita | 39 +-
ui/pages/help/zh_CN/templates.dita | 82 +-
ui/pages/help/zh_TW/guests.dita | 117 +--
ui/pages/help/zh_TW/host.dita | 17 +-
ui/pages/help/zh_TW/network.dita | 7 +-
ui/pages/help/zh_TW/storage.dita | 42 +-
ui/pages/help/zh_TW/templates.dita | 82 +-
48 files changed, 9535 insertions(+), 5013 deletions(-)
diff --git a/po/de_DE.po b/po/de_DE.po
index bfd82d0..1347df6 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -1,5 +1,6 @@
# English translations for kimchi package.
# Copyright (C) 2013 ORGANIZATION
+# Adam Litke <agl(a)us.ibm.com>, 2013.
#
msgid ""
msgstr ""
@@ -9,44 +10,53 @@ msgstr ""
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
-"Language: de_DE\n"
+"Language: en_US\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=2; plural=n != 1;"
#, python-format
msgid "Unknown parameter %(value)s"
msgstr ""
+"Unbekannter Parameter %(value)s"
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr "Löschen ist nicht zulässig für %(resource)s"
+msgstr ""
+"Löschen ist nicht zulässig für %(resource)s"
#, python-format
msgid "%(resource)s does not implement update method"
-msgstr "%(resource)s implementiert keine Aktualisierungsmethode"
+msgstr ""
+"%(resource)s implementiert keine Aktualisierungsmethode"
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr "Erstellen ist nicht zulässig für %(resource)s"
+msgstr ""
+"Erstellen ist nicht zulässig für %(resource)s"
msgid "Unable to parse JSON request"
-msgstr "JSON-Anfrage konnte nicht analysiert werden"
+msgstr ""
+"JSON-Anfrage konnte nicht analysiert werden"
msgid "This API only supports JSON"
-msgstr "Diese API unterstützt nur JSON"
+msgstr ""
+"Diese API unterstützt nur JSON"
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
msgstr ""
+"Parameter entsprechen nicht der Anforderung im Schema: %(err)s"
msgid "You don't have permission to perform this operation."
msgstr ""
+"Sie verfügen nicht über die Berechtigung zur Ausführung dieser Operation."
msgid "Datastore is not initiated in the model object."
-msgstr "Datenspeicher wird nicht im Modellobjekt initialisiert."
+msgstr ""
+"Datenspeicher wird nicht im Modellobjekt initialisiert."
#, python-format
msgid "Unable to start task due error: %(err)s"
@@ -56,83 +66,99 @@ msgstr ""
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
msgstr ""
+"Zeitlimit von %(seconds)s Sekunden ist während der Ausführung von Task '%(task)s' abgelaufen."
#, python-format
msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
msgstr ""
-"Authentifizierung für Benutzer '%(username)s' fehlgeschlagen. [Fehlercode: "
-"%(code)s]"
+"Authentifizierung für Benutzer '%(username)s' fehlgeschlagen. [Fehlercode: %(code)s]"
msgid "You are not authorized to access Kimchi"
-msgstr "Sie sind nicht berechtigt, auf Kimchi zuzugreifen"
+msgstr ""
+"Sie sind nicht berechtigt, auf Kimchi zuzugreifen"
#, python-format
msgid "Specify %(item)s to login into Kimchi"
-msgstr "Geben Sie %(item)s an, um sich bei Kimchi anzumelden"
+msgstr ""
+"Geben Sie %(item)s an, um sich bei Kimchi anzumelden"
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
msgstr ""
+"Benutzer %(user_id)s mit den angegebenen LDAP-Einstellungen wurde nicht gefunden."
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
msgstr ""
+"Ungültige LDAP-Konfiguration: %(item)s : %(value)s"
msgid "Unknown \"_cap\" specified"
msgstr ""
+"Unbekanntes Element \"_cap\" angegeben"
msgid "\"_passthrough\" should be \"true\" or \"false\""
msgstr ""
+"Für \"_passthrough\" muss \"true\" oder \"false\" angegeben werden"
msgid "\"_passthrough_affected_by\" should be a device name string"
msgstr ""
+"Für \"_passthrough_affected_by\" muss eine Einheitennamenszeichenfolge angegeben werden"
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
-msgstr "Fehler beim Abrufen von Blockeinheiten. Details: %(err)s"
+msgstr ""
+"Fehler beim Abrufen von Blockeinheiten. Details: %(err)s"
#, python-format
msgid "Error while getting block device information for %(device)s."
-msgstr "Fehler beim Abrufen von Blockeinheitinformationen für %(device)s."
+msgstr ""
+"Fehler beim Abrufen von Blockeinheiteninformationen für %(device)s."
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr "Distro-Datei konnte nicht gefunden werden: %(filename)s"
+msgstr ""
+"Distro-Datei konnte nicht gefunden werden: %(filename)s"
#, python-format
msgid ""
"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
msgstr ""
-"Distro-Datei konnte nicht analysiert werden: %(filename)s. Stellen Sie "
-"sicher, dass es sich um eine JSON-Datei handelt."
+"Distro-Datei konnte nicht analysiert werden: %(filename)s. Stellen Sie sicher, dass es sich um eine JSON-Datei handelt."
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
-msgstr "Fehler beim Anmelden bei iSCSI-Hostziel %(portal)s. Details: %(err)s"
+msgstr ""
+"Fehler beim Anmelden bei iSCSI-Hostziel %(portal)s. Details: %(err)s"
#, python-format
msgid "Unable to login to iSCSI host %(host)s target %(target)s"
-msgstr "Anmeldung bei iSCSI-Host %(host)s Ziel %(target)s nicht möglich"
+msgstr ""
+"Anmeldung bei iSCSI-Host %(host)s Ziel %(target)s nicht möglich"
#, python-format
msgid "Unable to find ISO file %(filename)s"
msgstr ""
+"ISO-Datei %(filename)s konnte nicht gefunden werden"
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr "Die ISO-Datei %(filename)s ist nicht bootfähig"
+msgstr ""
+"Die ISO-Datei %(filename)s ist nicht bootfähig"
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
-msgstr "Die ISO-Datei %(filename)s hat keinen gültigen El Torito-Bootsatz"
+msgstr ""
+"Die ISO-Datei %(filename)s hat keinen gültigen El Torito-Bootsatz"
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
-msgstr "Ungültiger El Torito-Prüfeintrag in ISO-Datei %(filename)s"
+msgstr ""
+"Ungültiger El Torito-Prüfeintrag in ISO-Datei %(filename)s"
#, python-format
msgid "Invalid El Torito boot indicator in ISO %(filename)s"
-msgstr "Ungültiger El Torito-Boot-Indikator in ISO-Datei %(filename)s"
+msgstr ""
+"Ungültiger El Torito-Boot-Indikator in ISO-Datei %(filename)s"
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
@@ -142,8 +168,7 @@ msgstr ""
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
msgstr ""
-"Ungültiges Format beim Lesen des Datenträgerdeskriptors in ISO-Datei "
-"%(filename)s"
+"Ungültiges Format beim Lesen des Datenträgerdeskriptors in ISO-Datei %(filename)s"
#, python-format
msgid ""
@@ -153,54 +178,64 @@ msgid ""
"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
"'path_to_iso'.Details: %(err)s"
msgstr ""
-"Der Hypervisor hat nicht die Berechtigung, die ISO-Datei %(filename)s zu "
-"verwenden. Verschieben Sie sie entweder nach /var/lib/libvirt oder setzen "
-"Sie, sofern möglich, die Suchberechtigung auf Dateizugriffssteuerungslisten "
-"für den Benutzer '%(user)s' oder fügen Sie '%(user)s' der ISO-Pfadgruppe "
-"hinzu oder (nicht empfohlen) 'chmod -R o+x 'path_to_iso'. Details: %(err)s"
+"Der Hypervisor hat nicht die Berechtigung, die ISO-Datei %(filename)s zu verwenden."
+"Verschieben Sie sie entweder nach /var/lib/libvirt oder setzen Sie, sofern möglich, die Suchberechtigung "
+"auf Dateizugriffssteuerungslisten für den Benutzer '%(user)s' oder fügen Sie "
+"'%(user)s' der ISO-Pfadgruppe hinzu oder (nicht empfohlen) 'chmod -R o+x "
+"'path_to_iso'. Details: %(err)s"
msgid "An error occurred when probing image OS information."
msgstr ""
+"Beim Prüfen der OS-Informationen des Image ist ein Fehler aufgetreten."
msgid "No OS information found in given image."
msgstr ""
+"Im angegebenen Image wurden keine OS-Informationen gefunden."
#, python-format
msgid "Unable to read image file %(filename)s"
msgstr ""
+"Die Imagedatei %(filename)s konnte nicht gelesen werden"
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
msgstr ""
+"Bei der Imagedatei muss es sich um eine auf dem System vorhandene Datei handeln. %(filename)s ist keine gültige "
+"Eingabe."
#, python-format
msgid "Virtual machine %(name)s already exists"
-msgstr "Virtuelle Maschine %(name)s ist bereits vorhanden"
+msgstr ""
+"Virtuelle Maschine %(name)s ist bereits vorhanden"
#, python-format
msgid "Virtual machine %(name)s does not exist"
-msgstr "Virtuelle Maschine %(name)s ist nicht vorhanden"
+msgstr ""
+"Virtuelle Maschine %(name)s ist nicht vorhanden"
#, python-format
msgid ""
"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
"in use or the virtual machine is not powered off."
msgstr ""
+"Virtuelle Maschine %(name)s konnte nicht umbenannt werden. Der Name %(new_name)s ist bereits belegt "
+"oder die virtuelle Maschine wurde nicht ausgeschaltet."
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
msgstr ""
-"Screenshot für gestoppte virtuelle Maschine %(name)s konnte nicht abgerufen "
-"werden"
+"Screenshot für gestoppte virtuelle Maschine %(name)s konnte nicht abgerufen werden"
msgid "Remote ISO image is not supported by this server."
-msgstr "Fernes ISO-Image wird von diesem Server nicht unterstützt."
+msgstr ""
+"Fernes ISO-Image wird von diesem Server nicht unterstützt."
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
msgstr ""
+"Screenshot wird auf virtueller Maschine %(name)s nicht unterstützt"
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
@@ -210,7 +245,7 @@ msgstr ""
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Virtuelle Maschine %(name)s konnte nicht erstellt werden. Details: %(err)s"
+"Virtuelle Maschine %(name)s konnte nicht aktualisiert werden. Details: %(err)s"
#, python-format
msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
@@ -220,28 +255,33 @@ msgstr ""
#, python-format
msgid "Unable to connect to powered off virtual machine %(name)s."
msgstr ""
-"Verbindung zur abgeschalteten Maschine %(name)s konnte nicht hergestellt "
-"werden."
+"Verbindung zu ausgeschalteter virtueller Maschine %(name)s konnte nicht hergestellt werden."
msgid "Virtual machine name must be a string without slashes (/)"
msgstr ""
+"Name der virtuellen Maschine muss eine Zeichenfolge ohne Schrägstriche (/) sein"
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
msgstr ""
+"Ungültiger Vorlagen-URI %(value)s für virtuelle Maschine angegeben"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for virtual machine"
msgstr ""
+"Ungültiger Speicherpool-URI %(value)s für virtuelle Maschine angegeben"
msgid "Supported virtual machine graphics are Spice or VNC"
msgstr ""
+"Unterstützte Grafiken für virtuelle Maschine sind Spice oder VNC"
msgid "Graphics address to listen on must be IPv4 or IPv6"
-msgstr "Zu überwachende Grafikadresse muss IPv4 oder IPv6 sein"
+msgstr ""
+"Zu überwachende Grafikadresse muss IPv4 oder IPv6 sein"
msgid "Specify a template to create a virtual machine from"
-msgstr "Vorlage angeben, aus der eine virtuelle Maschine erstellt werden soll"
+msgstr ""
+"Vorlage angeben, aus der eine virtuelle Maschine erstellt werden soll"
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
@@ -251,7 +291,7 @@ msgstr ""
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Virtuelle Maschine %(name)s konnte nicht gestoppt werden. Details: %(err)s"
+"Virtuelle Maschine %(name)s konnte nicht ausgeschaltet werden. Details: %(err)s"
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
@@ -261,114 +301,142 @@ msgstr ""
#, python-format
msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Virtuelle Maschine %(name)s konnte nicht umbenannt werden. Details: %(err)s"
+"Virtuelle Maschine %(name)s konnte nicht zurückgesetzt werden. Details: %(err)s"
msgid "User name list must be an array"
msgstr ""
+"Benutzernamensliste muss ein Array sein"
msgid "User name must be a string"
-msgstr "Netzname muss eine Zeichenfolge sein"
+msgstr ""
+"Benutzername muss eine Zeichenfolge sein"
msgid "Group name list must be an array"
msgstr ""
+"Gruppennamensliste muss ein Array sein"
msgid "Group name must be a string"
-msgstr "Netzname muss eine Zeichenfolge sein"
+msgstr ""
+"Gruppenname muss eine Zeichenfolge sein"
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr "Benutzer '%(users)s' ist nicht vorhanden."
+msgstr ""
+"Benutzer '%(users)s' nicht vorhanden"
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr "Benutzer '%(groups)s' ist nicht vorhanden."
+msgstr ""
+"Gruppe(n) '%(groups)s' nicht vorhanden"
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Virtuelle Maschine %(name)s konnte nicht gestoppt werden. Details: %(err)s"
+"Virtuelle Maschine %(name)s konnte nicht heruntergefahren werden. Details: %(err)s"
#, python-format
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Virtuelle Maschine %(name)s konnte nicht gestartet werden. Details: %(err)s"
+"Zugriff auf die Metadaten der virtuellen Maschine %(name)s nicht möglich. Details: %(err)s"
msgid "The guest console password must be a string."
msgstr ""
+"Das Konsolenkennwort des Gastes muss eine Zeichenfolge sein."
msgid "The life time for the guest console password must be a number."
msgstr ""
+"Die Lebensdauer für das Konsolenkennwort des Gastes muss eine Zahl sein."
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
msgstr ""
+"Die virtuelle Maschine '%(name)s' muss vor dem Klonen gestoppt werden."
#, python-format
msgid "Insufficient disk space to clone virtual machine '%(name)s'"
msgstr ""
+"Nicht genügend Plattenspeicherplatz zum Klonen der virtuellen Maschine '%(name)s' vorhanden"
#, python-format
msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
msgstr ""
+"Virtuelle Maschine '%(name)s' konnte nicht geklont werden. Details: %(err)s"
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
msgstr ""
+"Ungültige Operation für nicht permanente virtuelle Maschine %(name)s"
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
msgstr ""
+"Die virtuelle Maschine '%(name)s' kann nicht ausgesetzt werden, weil sie momentan nicht aktiv ist."
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
msgstr ""
+"Virtuelle Maschine '%(name)s' konnte nicht ausgesetzt werden. Details: %(err)s"
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
msgstr ""
+"Die virtuelle Maschine '%(name)s' kann nicht fortgesetzt werden, weil sie nicht angehalten wurde."
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
msgstr ""
+"Virtuelle Maschine '%(name)s' konnte nicht fortgesetzt werden. Details: %(err)s"
msgid "Memory assigned is higher then the maximum allowed in the host."
msgstr ""
+"Der zugewiesene Speicher überschreitet den auf dem Host zulässigen Maximalwert."
#, python-format
msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
+"Die Live-Speicheraktualisierung wird von der virtuellen Maschine '%(name)s' nicht unterstützt. Aktualisieren Sie den Speicher mit "
+"der Maschine im Offlinemodus, um diese Funktion zu aktivieren."
msgid "Only increase memory is allowed in active VMs"
msgstr ""
+"Die Speichervergrößerung ist nur in aktiven virtuellen Maschinen zulässig"
msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
msgstr ""
+"Für die Live-Speicheraktualisierung muss der neue Speicherwert gleich dem alten Speicherwert plus "
+"ein Vielfaches von 1024 Mebibyte sein"
msgid "There are not enough free slots of 1024 Mib in the guest."
msgstr ""
+"Auf dem Gast sind nicht genügend freie Slots mit 1024 Mebibyte vorhanden."
msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
msgstr ""
+"Die libvirt-Version des Hosts unterstützt keine Speichereinheiten. Für libvirt muss >= "
+"1.2.14 angegeben sein"
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
msgstr ""
+"Fehler beim Anschließen der Speichereinheit. Details: %(error)s"
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
+"VM %(vmid)s enthält die direkt zugewiesene Hosteinheit %(dev_name)s nicht."
#, python-format
msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
msgstr ""
+"Die Hosteinheit %(dev_name)s darf nicht direkt einer VM zugewiesen werden."
msgid ""
"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
@@ -377,15 +445,23 @@ msgid ""
"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
"iommu=1."
msgstr ""
+"Keine IOMMU-Gruppen gefunden. Für den Host-PCI-Durchgriff muss die IOMMU-Gruppe "
+"ordnungsgemäß funktionieren. Aktivieren Sie Intel VT-d oder AMD IOMMU in Ihrem BIOS "
+"und prüfen Sie dann, ob der Kernel mit IOMMU-Unterstützung kompiliert wurde. Fügen Sie "
+"Ihrem Kernelparameter für die Intel-CPU intel_iommu=on in /boot/grub2/grub.conf hinzu. "
+"Für AMD-CPU müssen Sie iommu=pt iommu=1 hinzufügen."
msgid "\"name\" should be a device name string"
msgstr ""
+"Für \"name\" muss eine Einheitennamenszeichenfolge angegeben werden"
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
msgstr ""
+"Die Einheit %(name)s wird vermutlich vom Host benutzt. Es kann keine Verbindung der Einheit zum "
+"Gast hergestellt werden."
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
@@ -396,110 +472,122 @@ msgstr ""
msgid ""
"Network %(network)s specified for virtual machine %(name)s does not exist"
msgstr ""
-"Das für die virtuelle Maschine %(name)s angegebene Netz %(network)s ist "
-"nicht vorhanden"
+"Das Netz %(network)s, das für die virtuelle Maschine %(name)s angegeben wurde, ist nicht vorhanden"
msgid "Supported virtual machine interfaces type is only network"
-msgstr "Unterstützter Schnittstellentyp einer virtuellen Maschine ist nur Netz"
+msgstr ""
+"Unterstützter Schnittstellentyp einer virtuellen Maschine ist nur Netz"
msgid "Network name for virtual machine interface must be a string"
msgstr ""
-"Netzname für Schnittstelle einer virtuellen Maschine muss eine Zeichenfolge "
-"sein"
+"Netzname für Schnittstelle einer virtuellen Maschine muss eine Zeichenfolge sein"
msgid "Invalid network model card specified for virtual machine interface"
msgstr ""
-"Ungültige Netzmodellkarte für Schnittstelle einer virtuellen Maschine "
-"angegeben"
+"Ungültige Netzmodellkarte für Schnittstelle einer virtuellen Maschine angegeben"
msgid "Specify type and network to add a new virtual machine interface"
msgstr ""
-"Geben Sie Typ und Netz an, um eine neue Schnittstelle für eine virtuelle "
-"Maschine hinzuzufügen"
+"Geben Sie Typ und Netz an, um eine neue Schnittstelle für eine virtuelle Maschine hinzuzufügen"
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
msgstr ""
+"MAC-Adresse muss folgendes Format verwenden: FF:FF:FF:FF:FF:FF"
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
msgstr ""
+"MAC-Adresse %(mac)s ist in virtueller Maschine %(name)s bereits vorhanden"
msgid "Invalid MAC Address"
msgstr ""
+"Ungültige MAC-Adresse"
msgid "Cannot change MAC address of a running virtual machine"
msgstr ""
+"MAC-Adresse einer aktiven virtuellen Maschine kann nicht geändert werden"
#, python-format
msgid "Template %(name)s already exists"
-msgstr "Vorlage %(name)s ist bereits vorhanden"
+msgstr ""
+"Vorlage %(name)s ist bereits vorhanden"
#, python-format
msgid ""
"Network '%(network)s' specified for template %(template)s does not exist"
msgstr ""
-"Das für Vorlage %(template)s angegebene Netz '%(network)s' ist nicht "
-"vorhanden"
+"Netz '%(network)s', das für Vorlage %(template)s angegeben wurde, ist nicht vorhanden"
#, python-format
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
msgstr ""
-"Der für Vorlage %(template)s angegebene Speicherpool '%(pool)s' ist nicht "
-"vorhanden"
+"Speicherpool %(pool)s, der für Vorlage %(template)s angegeben wurde, ist nicht vorhanden"
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
msgstr ""
-"Der für Vorlage %(template)s angegebene Speicherpool '%(pool)s' ist nicht "
-"aktiv"
+"Speicherpool %(pool)s, der für Vorlage %(template)s angegeben wurde, ist nicht aktiv"
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr "Ungültiger Parameter '%(param)s' für CD-ROM angegeben."
+msgstr ""
+"Ungültiger Parameter '%(param)s' für CD-ROM angegeben."
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
msgstr ""
-"Das für Vorlage %(template)s angegebene Netz %(network)s ist nicht aktiv"
+"Netz %(network)s, das für Vorlage %(template)s angegeben wurde, ist nicht aktiv"
msgid "Template name must be a string"
-msgstr "Vorlagenname muss eine Zeichenfolge sein"
+msgstr ""
+"Vorlagenname muss eine Zeichenfolge sein"
msgid "Template icon must be a path to the image"
-msgstr "Vorlagensymbol muss ein Pfad zum Image sein"
+msgstr ""
+"Vorlagensymbol muss ein Pfad zum Image sein"
msgid "Template distribution must be a string"
-msgstr "Vorlagenverteilung muss eine Zeichenfolge sein"
+msgstr ""
+"Vorlagenverteilung muss eine Zeichenfolge sein"
msgid "Template distribution version must be a string"
-msgstr "Vorlagenverteilungsversion muss eine Zeichenfolge sein"
+msgstr ""
+"Vorlagenverteilungsversion muss eine Zeichenfolge sein"
msgid "The number of CPUs must be an integer greater than 0"
-msgstr "Die Anzahl der CPUs muss eine Ganzzahl sein"
+msgstr ""
+"Die Anzahl der CPUs muss eine Ganzzahl größer als 0 sein"
msgid "Amount of memory (MB) must be an integer greater than 512"
-msgstr "Speicherkapazität (MB) muss eine Ganzzahl größer als 512 sein"
+msgstr ""
+"Speicherkapazität (MB) muss eine Ganzzahl größer als 512 sein"
msgid "Template CDROM must be a local or remote ISO file"
-msgstr "Vorlagen-CD-ROM muss eine lokale oder ferne ISO-Datei sein"
+msgstr ""
+"Vorlagen-CD-ROM muss eine lokale oder ferne ISO-Datei sein"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for template"
-msgstr "Ungültiger Speicherpool-URI %(value)s für Vorlage angegeben"
+msgstr ""
+"Ungültiger Speicherpool-URI %(value)s für Vorlage angegeben"
msgid "Specify an ISO image as CDROM or a base image to create a template"
-msgstr "Geben Sie ein ISO-Image als CD-ROM an, um eine Vorlage zu erstellen"
+msgstr ""
+"Geben Sie ein ISO-Image als CD-ROM oder ein Basisimage an, um eine Vorlage zu erstellen"
msgid "All networks for the template must be specified in a list."
-msgstr "Alle Netze für die Vorlage müssen in einer Liste angegeben werden."
+msgstr ""
+"Alle Netze für die Vorlage müssen in einer Liste angegeben werden."
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
msgstr ""
+"Geben Sie einen Datenträger für eine Vorlage an, wenn der Speicherpool iSCSI oder SCSI ist"
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
msgstr ""
+"Der Datenträger %(volume)s ist nicht im Speicherpool %(pool)s vorhanden"
#, python-format
msgid "Unable to create template due error: %(err)s"
@@ -513,64 +601,80 @@ msgstr ""
msgid "Disk size must be an integer greater than 1GB."
msgstr ""
+"Plattengröße muss eine Ganzzahl größer als 1 GB sein."
msgid "Template base image must be a valid local image file"
-msgstr "Vorlagen-CD-ROM muss eine lokale oder ferne ISO-Datei sein"
+msgstr ""
+"Basisimage der Vorlage muss eine gültige lokale Imagedatei sein"
#, python-format
msgid "Cannot identify base image %(path)s format"
msgstr ""
+"Format für %(path)s des Basisimage kann nicht ermittelt werden"
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
msgstr ""
+"Bei der Angabe der CPU-Topologie müssen VCPUs ein Produkt der Sockets, Kerne und "
+"Threads sein."
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
"zero."
msgstr ""
+"Bei Angabe der CPU-Topologie muss jedes Element eine Ganzzahl größer als "
+"null sein."
msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
+"Ungültiges Plattenimageformat. Gültige Formate: bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc."
#, python-format
msgid "Storage pool %(name)s already exists"
-msgstr "Speicherpool %(name)s ist bereits vorhanden"
+msgstr ""
+"Speicherpool %(name)s ist bereits vorhanden"
#, python-format
msgid "Storage pool %(name)s does not exist"
-msgstr "Speicherpool %(name)s ist nicht vorhanden"
+msgstr ""
+"Speicherpool %(name)s ist nicht vorhanden"
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
-msgstr "Geben Sie %(item)s an, um den Speicherpool %(name)s zu erstellen"
+msgstr ""
+"Geben Sie %(item)s an, um den Speicherpool %(name)s zu erstellen"
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr "Aktiver Speicherpool %(name)s konnte nicht gelöscht werden"
+msgstr ""
+"Aktiver Speicherpool %(name)s konnte nicht gelöscht werden"
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
-msgstr "Speicherpools konnten nicht aufgelistet werden. Details: %(err)s"
+msgstr ""
+"Speicherpools konnten nicht aufgelistet werden. Details: %(err)s"
#, python-format
msgid "Unable to create storage pool %(name)s. Details: %(err)s"
-msgstr "Speicherpool %(name)s konnte nicht erstellt werden. Details: %(err)s"
+msgstr ""
+"Speicherpool %(name)s konnte nicht erstellt werden. Details: %(err)s"
#, python-format
msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
msgstr ""
-"Anzahl der Speicherdatenträger im Speicherpool %(name)s konnte nicht "
-"abgerufen werden. Details: %(err)s"
+"Anzahl der Speicherdatenträger im Speicherpool %(name)s konnte nicht abgerufen werden. Details: "
+"%(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
-msgstr "Speicherpool %(name)s konnte nicht aktiviert werden. Details: %(err)s"
+msgstr ""
+"Speicherpool %(name)s konnte nicht aktiviert werden. Details: %(err)s"
#, python-format
msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
@@ -579,135 +683,146 @@ msgstr ""
#, python-format
msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
-msgstr "Speicherpool %(name)s konnte nicht gelöscht werden. Details: %(err)s"
+msgstr ""
+"Speicherpool %(name)s konnte nicht gelöscht werden. Details: %(err)s"
#, python-format
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
msgstr ""
-"NFS-Pool konnte nicht erstellt werden, weil Exportpfad %(path)s beim Mounten "
-"blockieren kann"
+"NFS-Pool konnte nicht erstellt werden, weil Exportpfad %(path)s beim Mounten blockieren kann"
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
msgstr ""
-"NFS-Pool konnte nicht erstellt werden, weil das Mounten des Exportpfads"
-"%(path)s fehlgeschlagen ist"
+"NFS-Pool konnte nicht erstellt werden, weil das Mounten des Exportpfads %(path)s fehlgeschlagen ist"
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr "Nicht unterstützter Speicherpooltyp: %(type)s"
+msgstr ""
+"Nicht unterstützter Speicherpooltyp: %(type)s"
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
msgstr ""
+"Fehler beim Abrufen der XML für Speicherpool in %(pool)s"
msgid "Storage pool name must be a string without slashes (/)"
msgstr ""
+"Name des Speicherpools muss eine Zeichenfolge ohne Schrägstriche (/) sein"
msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
"iso"
msgstr ""
+"Unterstützte Speicherpooltypen sind dir, netfs, logical, iscsi, isci und kimchi-"
+"iso"
msgid "Storage pool path must be a string"
-msgstr "Speicherpoolpfad muss eine Zeichenfolge sein"
+msgstr ""
+"Speicherpoolpfad muss eine Zeichenfolge sein"
msgid "Storage pool host must be a IP or hostname"
-msgstr "Speicherpoolhost muss eine IP oder ein Hostname sein"
+msgstr ""
+"Speicherpoolhost muss eine IP oder ein Hostname sein"
msgid "Storage pool device must be the absolute path to the block device"
msgstr ""
+"Speicherpooleinheit muss den absoluten Pfad zur Blockeinheit angeben"
msgid "Storage pool devices parameter must be a list"
-msgstr "Einheitenparameter des Speicherpools muss eine Liste sein"
+msgstr ""
+"Einheitenparameter des Speicherpools muss eine Liste sein"
msgid "Target IQN of an iSCSI pool must be a string"
-msgstr "Ziel-IQN eines iSCSI-Pools muss eine Zeichenfolge sein"
+msgstr ""
+"Ziel-IQN eines iSCSI-Pools muss eine Zeichenfolge sein"
msgid "Port of a remote storage server must be an integer between 1 and 65535"
msgstr ""
-"Port eines fernen Speicherservers muss eine Ganzzahl zwischen 1 und 65535 "
-"sein"
+"Port eines fernen Speicherservers muss eine Ganzzahl zwischen 1 und 65535 sein"
msgid "iSCSI target username must be a string"
msgstr ""
+"Benutzername des iSCSI-Ziels muss eine Zeichenfolge sein"
msgid "iSCSI target password must be a string"
msgstr ""
+"Kennwort des iSCSI-Ziels muss eine Zeichenfolge sein"
msgid "Specify name and type to create a storage pool"
-msgstr "Geben Sie Name und Typ an, um einen Speicherpool zu erstellen"
+msgstr ""
+"Geben Sie Name und Typ an, um einen Speicherpool zu erstellen"
#, python-format
msgid ""
"%(disk)s is not a valid disk/partition. Could not add it to the pool "
"%(pool)s."
msgstr ""
-"%(disk)s ist keine gültige Platte/Partition. Sie konnte nicht hinzugefügt "
-"werden zum Pool %(pool)s."
+"%(disk)s ist keine gültige Platte/Partition. Sie konnte nicht hinzugefügt werden zum Pool "
+"%(pool)s."
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
msgstr ""
+"Logischer Pool %(pool)s konnte nicht erweitert werden. Details: %(err)s"
msgid "The parameter disks only can be updated for logical storage pool."
msgstr ""
-"Die Parameterplatten können nur für den logischen Speicherpool aktualisiert "
-"werden."
+"Die Parameterplatten können nur für den logischen Speicherpool aktualisiert werden."
msgid "The SCSI host adapter name must be a string."
-msgstr "Der Name des SCSI-Hostadapters muss eine Zeichenfolge sein."
+msgstr ""
+"Der Name des SCSI-Hostadapters muss eine Zeichenfolge sein."
msgid "The storage pool kimchi_isos is reserved for internal use"
-msgstr "Der Speicherpool kimchi_isos ist für die interne Verwendung reserviert"
+msgstr ""
+"Der Speicherpool kimchi_isos ist für die interne Verwendung reserviert"
#, python-format
msgid ""
"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"Der NFS-Speicherpool %(name)s konnte nicht aktiviert werden. NFS-Server "
-"%(server)s ist nicht erreichbar."
+"NFS-Speicherpool %(name)s konnte nicht aktiviert werden. NFS-Server %(server)s ist "
+"nicht erreichbar."
#, python-format
msgid ""
"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"Der NFS-Speicherpool %(name)s konnte nicht inaktiviert werden. NFS-Server "
-"%(server)s ist nicht erreichbar."
+"NFS-Speicherpool %(name)s konnte nicht inaktiviert werden. NFS-Server %(server)s ist "
+"nicht erreichbar."
#, python-format
msgid ""
"Unable to deactivate pool %(name)s as it is associated with some templates"
msgstr ""
-"Pool %(name)s konnte nicht inaktiviert werden, weil er einigen Vorlagen "
-"zugeordnet ist"
+"Pool %(name)s konnte nicht inaktiviert werden, weil er einigen Vorlagen zugeordnet ist"
#, python-format
msgid "Unable to delete pool %(name)s as it is associated with some templates"
msgstr ""
-"Pool %(name)s konnte nicht gelöscht werden, weil er einigen Vorlagen "
-"zugeordnet ist"
+"Pool %(name)s konnte nicht gelöscht werden, weil er einigen Vorlagen zugeordnet ist"
#, python-format
msgid ""
"A volume group named '%(name)s' already exists. Please, choose another name "
"to create the logical pool."
msgstr ""
-"Eine Datenträgergruppe mit dem Namen '%(name)s' ist bereits vorhanden. "
-"Wählen Sie einen anderen Namen aus, um den logischen Pool zu erstellen."
+"Eine Datenträgergruppe mit dem Namen '%(name)s' ist bereits vorhanden. Wählen Sie einen anderen Namen aus, "
+"um den logischen Pool zu erstellen."
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
msgstr ""
-"Datenbank mit Tiefenscaninformationen kann aufgrund des folgenden Fehlers "
-"nicht aktualisiert werden: %(err)s"
+"Datenbank mit Tiefenscaninformationen kann aufgrund des folgenden Fehlers nicht aktualisiert werden: %(err)s"
#, python-format
msgid "Storage volume %(name)s already exists"
-msgstr "Speicherdatenträger %(name)s ist bereits vorhanden"
+msgstr ""
+"Speicherdatenträger %(name)s ist bereits vorhanden"
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
@@ -719,32 +834,33 @@ msgid ""
"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
"not active"
msgstr ""
+"Speicherdatenträger %(volume)s konnte nicht erstellt werden, weil Speicherpool %(pool)s "
+"nicht aktiv ist"
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
-msgstr "Geben Sie %(item)s an, um Speicherdatenträger %(volume)s zu erstellen"
+msgstr ""
+"Geben Sie %(item)s an, um den Speicherdatenträger %(volume)s zu erstellen"
#, python-format
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
msgstr ""
-"Speicherdatenträger konnten nicht aufgelistet werden, weil Speicherpool "
-"%(pool)s nicht aktiv ist"
+"Speicherdatenträger konnten nicht aufgelistet werden, weil Speicherpool %(pool)s nicht aktiv ist"
#, python-format
msgid ""
"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
"%(err)s"
msgstr ""
-"Speicherdatenträger %(name)s konnte nicht in Speicherpool %(pool)s erstellt "
-"werden. Details: %(err)s"
+"Speicherdatenträger %(name)s konnte im Speicherpool %(pool)s nicht erstellt werden. Details: "
+"%(err)s"
#, python-format
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
msgstr ""
-"Speicherdatenträger konnten nicht in Speicherpool %(pool)s aufgelistet "
-"werden. Details: %(err)s"
+"Speicherdatenträger im Speicherpool %(pool)s konnten nicht aufgelistet werden. Details: %(err)s"
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
@@ -759,419 +875,493 @@ msgstr ""
#, python-format
msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
msgstr ""
-"Größe des Speicherdatenträgers %(name)s konnte nicht geändert werden. "
-"Details: %(err)s"
+"Größe des Speicherdatenträgers %(name)s konnte nicht geändert werden. Details: %(err)s"
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
msgstr ""
-"Speichertyp %(type)s unterstützt nicht das Erstellen und Löschen von "
-"Datenträgern"
+"Speichertyp %(type)s unterstützt nicht das Erstellen und Löschen von Datenträgern"
msgid "Storage volume name must be a string"
-msgstr "Name des Speicherdatenträgers muss eine Zeichenfolge sein"
+msgstr ""
+"Name des Speicherdatenträgers muss eine Zeichenfolge sein"
msgid "Storage volume allocation must be an integer number"
-msgstr "Zuordnung des Speicherdatenträgers muss eine Ganzzahl sein"
+msgstr ""
+"Zuordnung des Speicherdatenträgers muss eine Ganzzahl sein"
msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
+"Format des Speicherdatenträgers wird nicht unterstützt. Gültige Formate: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
msgid "Storage volume requires a volume name"
-msgstr "Speicherdatenträger erfordert einen Datenträgernamen"
+msgstr ""
+"Speicherdatenträger erfordert einen Datenträgernamen"
#, python-format
msgid ""
"Unable to update database with storage volume information due error: %(err)s"
msgstr ""
-"Datenbank mit Datenträgerinformationen kann aufgrund des folgenden Fehlers "
-"nicht aktualisiert werden: %(err)s"
+"Datenbank mit Datenträgerinformationen kann aufgrund des folgenden Fehlers nicht aktualisiert werden: %(err)s"
#, python-format
msgid "Only one of parameter %(param)s can be specified"
msgstr ""
+"Der Parameter %(param)s kann nur einmal angegeben werden"
#, python-format
msgid "Create volume from %(param)s is not supported"
msgstr ""
+"Erstellung des Datenträgers aus %(param)s wird nicht unterstützt"
msgid "Storage volume capacity must be an integer number."
msgstr ""
+"Kapazität des Speicherdatenträgers muss eine Ganzzahl sein."
msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
msgstr ""
+"Speicherdatenträger-URL muss eine http://-, https://-, ftp://- oder ftps://-URL sein."
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
msgstr ""
+"Zugriff auf Datei %(url)s konnte nicht ausgeführt werden. Überprüfen Sie die Datei."
#, python-format
msgid ""
"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
"%(err)s"
msgstr ""
+"Speicherdatenträger '%(name)s' im Pool '%(pool)s' konnte nicht geklont werden. Details: "
+"%(err)s"
msgid "Specify chunk data and its size to upload a file."
msgstr ""
+"Geben Sie Chunkdaten und deren Größe an, um eine Datei hochzuladen."
msgid "In order to upload a storage volume, specify the 'upload' parameter."
msgstr ""
+"Um einen Speicherdatenträger hochzuladen, müssen Sie den Parameter 'upload' angeben."
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
msgstr ""
+"Chunkdaten konnten nicht hochgeladen werden, da sie nicht mit der angeforderten Chunkgröße übereinstimmen."
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
msgstr ""
+"Der Speicherdatenträger %(vol)s befindet sich nicht in einem Uploadprozess."
msgid "The upload chunk data will exceed the storage volume size."
msgstr ""
+"Die Chunkdaten für den Upload überschreiten die Größe des Speicherdatenträgers."
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
msgstr ""
+"Chunkdaten konnten nicht auf Speicherdatenträger hochgeladen werden. Details: %(err)s."
#, python-format
msgid "Interface %(name)s does not exist"
-msgstr "Schnittstelle %(name)s ist nicht vorhanden"
+msgstr ""
+"Schnittstelle %(name)s ist nicht vorhanden"
#, python-format
msgid "Network %(name)s already exists"
-msgstr "Netz %(name)s ist bereits vorhanden"
+msgstr ""
+"Netz %(name)s ist bereits vorhanden"
#, python-format
msgid "Network %(name)s does not exist"
-msgstr "Netz %(name)s ist nicht vorhanden"
+msgstr ""
+"Netz %(name)s ist nicht vorhanden"
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
msgstr ""
-"Das für das Netz %(network)s angegebene Teilnetz %(subnet)s ist nicht gültig."
+"Das Teilnetz %(subnet)s, das für das Netz %(network)s angegeben wurde, ist nicht gültig."
#, python-format
msgid "Specify a network interface to create bridged network %(name)s"
msgstr ""
-"Geben Sie eine Netzschnittstelle an, um überbrücktes Netz %(name)s zu "
-"erstellen"
+"Geben Sie eine Netzschnittstelle an, um das überbrückte Netz %(name)s zu erstellen"
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr "Aktives Netz %(name)s konnte nicht gelöscht werden"
+msgstr ""
+"Aktives Netz %(name)s konnte nicht gelöscht werden"
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
msgstr ""
-"Die für das Netz %(network)s angegebene Schnittstelle %(iface)s wird bereits "
-"verwendet"
+"Die Schnittstelle %(iface)s, die für das Netz %(network)s angegeben wurde, ist bereits belegt"
msgid "Interface should be bare NIC, bonding or bridge device."
-msgstr "Schnittstelle sollte bloßes NIC, Bonding oder Brückeneinheit sein."
+msgstr ""
+"Schnittstelle sollte bloßes NIC, Bonding oder Brückeneinheit sein."
#, python-format
msgid "Unable to create network %(name)s. Details: %(err)s"
-msgstr "Netz %(name)s konnte nicht erstellt werden. Details: %(err)s"
+msgstr ""
+"Netz %(name)s konnte nicht erstellt werden. Details: %(err)s"
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
-msgstr "Es konnte keine freie IP-Adresse für Netz '%(name)s' gefunden werden"
+msgstr ""
+"Es konnte keine freie IP-Adresse für Netz '%(name)s' gefunden werden"
#, python-format
msgid "The interface %(iface)s already exists."
msgstr ""
+"Schnittstelle %(iface)s ist bereits vorhanden."
msgid "Network name must be a string without slashes (/) or quotes (\")"
msgstr ""
+"Netzname muss eine Zeichenfolge ohne Schrägstriche (/) oder Anführungszeichen (\") sein"
msgid "Supported network types are isolated, NAT and bridge"
-msgstr "Unterstützte Netztypen sind Isoliert, NAT und Brücke"
+msgstr ""
+"Unterstützte Netztypen sind Isoliert, NAT und Brücke"
msgid "Network subnet must be a string with IP address and prefix or netmask"
msgstr ""
-"Teilnetz des Netzes muss eine Zeichenfolge mit IP-Adresse und Präfix oder "
-"Netzmaske sein"
+"Teilnetz des Netzes muss eine Zeichenfolge mit IP-Adresse und Präfix oder Netzmaske sein"
msgid "Network interface must be a string"
-msgstr "Netzschnittstelle muss eine Zeichenfolge sein"
+msgstr ""
+"Netzschnittstelle muss eine Zeichenfolge sein"
msgid "Network VLAN ID must be an integer between 1 and 4094"
-msgstr "Netz-VLAN-ID muss eine Ganzzahl zwischen 1 und 4094 sein"
+msgstr ""
+"Netz-VLAN-ID muss eine Ganzzahl zwischen 1 und 4094 sein"
msgid "Specify name and type to create a Network"
-msgstr "Geben Sie Name und Typ an, um ein Netz zu erstellen"
+msgstr ""
+"Geben Sie Name und Typ an, um ein Netz zu erstellen"
#, python-format
msgid ""
"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
"and/or templates linked to this network."
msgstr ""
-"Netz %(name)s konnte nicht inaktiviert werden. Es sind einige virtuellen "
-"Maschinen %(vms)s und/oder Vorlagen mit diesem Netz verknüpft."
+"Netz %(name)s konnte nicht gelöscht werden. Mit diesem Netz sind einige virtuelle Maschinen %(vms)s "
+"und/oder Vorlagen verlinkt."
#, python-format
msgid ""
"Unable to deactivate network %(name)s. There are some virtual machines "
"%(vms)s and/or templates linked to this network."
msgstr ""
-"Netz %(name)s konnte nicht inaktiviert werden. Es sind einige virtuellen "
-"Maschinen %(vms)s und/oder Vorlagen mit diesem Netz verknüpft."
+"Netz %(name)s konnte nicht inaktiviert werden. Mit diesem Netz sind einige virtuelle Maschinen "
+"%(vms)s und/oder Vorlagen verlinkt."
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
-msgstr "Brückeneinheit %(name)s kann nicht die Trunkeinheit eines VLAN sein."
+msgstr ""
+"Brückeneinheit %(name)s kann nicht die Trunkeinheit eines VLAN sein."
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr "Schnittstelle %(iface)s konnte nicht aktiviert werden: %(err)s."
+msgstr ""
+"Schnittstelle %(iface)s konnte nicht aktiviert werden: %(err)s."
#, python-format
msgid ""
"Failed to activate interface %(iface)s. Please check the physical link "
"status."
msgstr ""
-"Schnittstelle %(iface)s konnte nicht aktiviert werden. Bitte überprüfen Sie "
-"den Status der physischen Verbindung."
+"Schnittstelle %(iface)s konnte nicht aktiviert werden. Überprüfen Sie den Status der "
+"physischen Verbindung."
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
msgstr ""
+"Netz %(name)s konnte nicht gestartet werden. Details: %(err)s"
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr "Debugbericht %(name)s ist nicht vorhanden"
+msgstr ""
+"Debugbericht %(name)s ist nicht vorhanden"
msgid "Debug report tool not found in system"
-msgstr "Debugberichtstool nicht im System gefunden"
+msgstr ""
+"Debugberichtstool nicht im System gefunden"
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
-msgstr "Debugbericht %(name)s konnte nicht erstellt werden. Details: %(err)s."
+msgstr ""
+"Debugbericht %(name)s konnte nicht erstellt werden. Details: %(err)s."
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
msgstr ""
+"Ein Debugbericht mit dem angegebenen Namen %(name)s konnte nicht gefunden werden"
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
-msgstr "Debugbericht %(name)s konnte nicht generiert werden. Details: %(err)s"
+msgstr ""
+"Debugbericht %(name)s konnte nicht generiert werden. Details: %(err)s"
msgid "You should give a name for the debug report file."
msgstr ""
+"Sie müssen einen Namen für die Debugberichtsdatei angeben."
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
+"Der Name des Debugberichts muss eine Zeichenfolge sein. Nur Buchstaben, Ziffern, Unterstreichungszeichen ('_') "
+"und Bindestriche ('-') sind zulässig."
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
msgstr ""
-"Eine Datenträgergruppe mit dem Namen '%(name)s' ist bereits vorhanden. "
-"Wählen Sie einen anderen Namen aus, um den logischen Pool zu erstellen."
+"Der Debugbericht mit dem Namen \"%(name)s\" ist bereits vorhanden. Verwenden Sie "
+"einen anderen Namen."
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr "Speicherserver %(server)s wurde nicht von Kimchi verwendet"
+msgstr ""
+"Speicherserver %(server)s wurde nicht von Kimchi verwendet"
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr "Distro '%(name)s' ist nicht vorhanden"
+msgstr ""
+"Distro '%(name)s' ist nicht vorhanden"
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr "Partition %(name)s ist nicht im Host vorhanden"
+msgstr ""
+"Partition %(name)s ist im Host nicht vorhanden"
msgid "Unable to shutdown host machine as there are running virtual machines"
msgstr ""
-"Hostmaschine konnte nicht heruntergefahren werden, weil virtuelle Maschinen "
-"ausgeführt werden"
+"Hostmaschine konnte nicht heruntergefahren werden, weil virtuelle Maschinen ausgeführt werden"
msgid "Unable to reboot host machine as there are running virtual machines"
msgstr ""
-"Hostmaschine konnte nicht neu gestartet werden, weil virtuelle Maschinen "
-"ausgeführt werden"
+"Hostmaschine konnte nicht neu gestartet werden, weil virtuelle Maschinen ausgeführt werden"
#, python-format
msgid "Node device '%(name)s' not found"
-msgstr "Knoteneinheit '%(name)s' nicht gefunden"
+msgstr ""
+"Knoteneinheit '%(name)s' nicht gefunden"
msgid "Conflicting flag filters specified."
msgstr ""
+"In Konflikt stehende Flagfilter angegeben."
msgid "No packages marked for update"
-msgstr "Keine Pakete für Aktualisierung markiert"
+msgstr ""
+"Keine Pakete für Aktualisierung markiert"
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr "Paket %(name)s ist nicht für Aktualisierung markiert."
+msgstr ""
+"Paket %(name)s ist nicht für Aktualisierung markiert."
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
msgstr ""
-"Fehler beim Abrufen von Paketen, die für die Aktualsierung markiert sind. "
-"Details: %(err)s"
+"Fehler beim Abrufen von Paketen, die für die Aktualisierung markiert sind. Details: %(err)s"
msgid "There is no compatible package manager for this system."
-msgstr "Es gibt keinen kompatiblen Paketmanager für dieses System."
+msgstr ""
+"Es gibt keinen kompatiblen Paketmanager für dieses System."
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr "%(item)s konnten nicht im Datenspeicher gefunden werden"
+msgstr ""
+"%(item)s konnten nicht im Datenspeicher gefunden werden"
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr "Ungültiger URI %(uri)s"
+msgstr ""
+"Ungültiger URI %(uri)s"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
msgstr ""
-"Zeitlimitüberschreitung beim Ausführen des Befehls '%(cmd)s' nach "
-"%(seconds)s Sekunden"
+"Zeitlimitüberschreitung bei Ausführung des Befehls '%(cmd)s' nach %(seconds)s Sekunden"
msgid "Unable to choose a virtual machine name"
msgstr ""
+"Name der virtuellen Maschine konnte nicht ausgewählt werden"
#, python-format
msgid "Invalid data value '%(value)s'"
msgstr ""
+"Ungültiger Datenwert '%(value)s'"
#, python-format
msgid "Invalid data unit '%(unit)s'"
msgstr ""
+"Ungültige Dateneinheit '%(unit)s'"
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
-msgstr "Ungültiger Speichertyp. Unterstützte Typen: 'cdrom'"
+msgstr ""
+"Ungültiger Speichertyp. Unterstützte Typen: 'cdrom', 'disk'"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
msgstr ""
+"Der Pfad '%(value)s' ist kein gültiger lokaler/ferner Pfad für die Einheit"
msgid "Only CDROM path can be update."
msgstr ""
+"Nur der CD-ROM-Pfad kann aktualisiert werden."
#, python-format
msgid ""
"The storage device %(dev_name)s does not exist in the virtual machine "
"%(vm_name)s"
msgstr ""
+"Die Speichereinheit %(dev_name)s ist in der virtuellen Maschine "
+"%(vm_name)s nicht vorhanden"
#, python-format
msgid "Error while creating new storage device: %(error)s"
-msgstr "Fehler beim Erstellen einer neuen Speichereinheit: %(error)s"
+msgstr ""
+"Fehler beim Erstellen einer neuen Speichereinheit: %(error)s"
#, python-format
msgid "Error while updating storage device: %(error)s"
-msgstr "Fehler beim Aktualisieren einer Speichereinheit: %(error)s"
+msgstr ""
+"Fehler beim Aktualisieren einer Speichereinheit: %(error)s"
#, python-format
msgid "Error while removing storage device: %(error)s"
-msgstr "Fehler beim Entfernen einer Speichereinheit: %(error)s"
+msgstr ""
+"Fehler beim Entfernen einer Speichereinheit: %(error)s"
msgid "Do not support IDE device hot plug"
msgstr ""
+"Hot Plug für IDE-Einheit nicht unterstützen"
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
"disk"
msgstr ""
-"Geben Sie Typ und Pfad an, um einen neuen Datenträger für eine virtuelle "
-"Maschine hinzuzfügen"
+"Geben Sie Typ und Pfad oder Typ und Pool/Datenträger an, um eine neue "
+"Platte für eine virtuelle Maschine hinzuzufügen"
msgid "Specify path to update virtual machine disk"
msgstr ""
-"Geben Sie einen Pfad an, um die Platte der virtuellen Maschine zu "
-"aktualisieren"
+"Geben Sie einen Pfad an, um die Platte der virtuellen Maschine zu aktualisieren"
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
msgstr ""
+"Begrenzung von %(limit)s Einheiten bei Controllertyp %(type)s erreicht"
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
msgstr ""
+"Plattenpfadinformationen für angegebenen Pool/Datenträger können nicht abgerufen werden: %(error)s"
msgid "Volume already in use by other virtual machine."
msgstr ""
+"Datenträger wird bereits von einer anderen virtuellen Maschine verwendet."
msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
msgstr ""
-"Geben Sie Typ und Pfad an, um einen neuen Datenträger für eine virtuelle "
-"Maschine hinzuzfügen"
+"Es kann nur ein Pfad oder ein Pool/Datenträger angegeben werden, um eine neue "
+"Platte für die virtuelle Maschine hinzuzufügen"
#, python-format
msgid ""
"Volume chosen with format %(format)s does not fit in the storage type "
"%(type)s"
msgstr ""
+"Ausgewählter Datenträger mit Format %(format)s passt nicht in Speichertyp "
+"%(type)s"
msgid "YUM Repository ID must be one word only string."
msgstr ""
"YUM-Repository-ID darf nur ein aus einer Zeichenfolge bestehendes Wort sein."
msgid "Repository URL must be an http://, ftp:// or file:// URL."
-msgstr "Repository-URL muss ein http://-, ftp://- oder file://-URL sein."
+msgstr ""
+"Repository-URL muss eine http://-, ftp://- oder file://-URL sein."
msgid ""
"Repository configuration is a dictionary with specific values according to "
"repository type."
msgstr ""
-"Repository-Konfiguration ist ein Wörterbuch mit bestimmten Werten "
-"hinsichtlich Repository-Typ."
+"Repository-Konfiguration ist ein Wörterbuch mit bestimmten Werten hinsichtlich "
+"Repository-Typ."
msgid "Distribution to DEB repository must be a string"
-msgstr "Verteilung an DEB-Repository muss eine Zeichenfolge sein"
+msgstr ""
+"Verteilung an DEB-Repository muss eine Zeichenfolge sein"
msgid "Components to DEB repository must be listed in a array"
-msgstr "Komponenten für DEB-Repository müssen in einem Array aufgelistet sein"
+msgstr ""
+"Komponenten für DEB-Repository müssen in einem Array aufgelistet sein"
msgid "Components to DEB repository must be a string"
-msgstr "Komponenten für DEB-Repository müssen eine Zeichenfolge sein"
+msgstr ""
+"Komponenten für DEB-Repository müssen eine Zeichenfolge sein"
msgid "Mirror list to repository must be a string"
msgstr ""
+"Spiegelliste für Repository muss eine Zeichenfolge sein"
msgid "YUM Repository name must be string."
-msgstr "Name des YUM-Repositorys muss eine Zeichenfolge sein."
+msgstr ""
+"Name des YUM-Repositorys muss eine Zeichenfolge sein."
msgid "GPG check must be a boolean value."
-msgstr "GPG-Prüfung muss ein boolescher Wert sein."
+msgstr ""
+"GPG-Prüfung muss ein boolescher Wert sein."
msgid "GPG key must be a URL pointing to the ASCII-armored file."
-msgstr "GPG-Schlüssel muss ein URL sein, der auf die ASCII-Armor-Datei zeigt."
+msgstr ""
+"GPG-Schlüssel muss eine URL sein, die auf die ASCII-Armor-Datei verweist."
#, python-format
msgid "Could not update repository %(repo_id)s."
-msgstr "Repository %(repo_id)s konnte nicht aktualisiert werden."
+msgstr ""
+"Repository %(repo_id)s konnte nicht aktualisiert werden."
#, python-format
msgid "Repository %(repo_id)s does not exist."
-msgstr "Repository %(repo_id)s ist nicht vorhanden."
+msgstr ""
+"Repository %(repo_id)s ist nicht vorhanden."
msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
"update a YUM repository."
msgstr ""
+"Geben Sie die Basis-URL, die Spiegelliste oder den Metalink des Repositorys an, um ein "
+"YUM-Repository zu erstellen oder zu aktualisieren."
msgid "Repository management tool was not recognized for your system."
-msgstr "Repository-Verwaltungstool wurde für Ihr System nicht erkannt."
+msgstr ""
+"Repository-Verwaltungstool wurde für Ihr System nicht erkannt."
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr "Repository %(repo_id)s ist bereits aktiviert."
+msgstr ""
+"Repository %(repo_id)s ist bereits aktiviert."
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr "Repository %(repo_id)s ist bereits inaktiviert."
+msgstr ""
+"Repository %(repo_id)s ist bereits inaktiviert."
#, python-format
msgid "Could not remove repository %(repo_id)s."
-msgstr "Repository %(repo_id)s konnte nicht entfernt werden."
+msgstr ""
+"Repository %(repo_id)s konnte nicht entfernt werden."
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
@@ -1184,21 +1374,26 @@ msgstr ""
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr "Repository %(repo_id)s konnte nicht aktiviert werden."
+msgstr ""
+"Repository %(repo_id)s konnte nicht aktiviert werden."
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr "Repository %(repo_id)s konnte nicht inaktiviert werden."
+msgstr ""
+"Repository %(repo_id)s konnte nicht inaktiviert werden."
msgid "YUM Repository ID already exists"
-msgstr "YUM-Repository-ID ist bereits vorhanden"
+msgstr ""
+"YUM-Repository-ID ist bereits vorhanden"
msgid "YUM Repository name must be a string"
-msgstr "YUM-Repository-Name muss eine Zeichenfolge sein"
+msgstr ""
+"YUM-Repository-Name muss eine Zeichenfolge sein"
#, python-format
msgid "Unable to list repositories. Details: '%(err)s'"
-msgstr "Repositorys konnten nicht aufgelistet werden. Details: '%(err)s'"
+msgstr ""
+"Repositorys konnten nicht aufgelistet werden. Details: '%(err)s'"
#, python-format
msgid "Unable to retrieve repository information. Details: '%(err)s'"
@@ -1207,638 +1402,819 @@ msgstr ""
#, python-format
msgid "Unable to add repository. Details: '%(err)s'"
-msgstr "Repository konnte nicht hinzugefügt werden. Details: '%(err)s'"
+msgstr ""
+"Repository konnte nicht hinzugefügt werden. Details: '%(err)s'"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr "Repository konnte nicht entfernt werden. Details: '%(err)s'"
+msgstr ""
+"Repository konnte nicht entfernt werden. Details: '%(err)s'"
#, python-format
msgid ""
"Configuration items: '%(items)s' are not supported by repository manager"
msgstr ""
+"Konfigurationselemente: '%(items)s' werden vom Repository-Manager nicht unterstützt"
msgid "Repository metalink must be an http://, ftp:// or file:// URL."
msgstr ""
+"Repository-Metalink muss eine http://-, ftp://- oder file://-URL sein."
msgid "Cannot specify mirrorlist and metalink at the same time."
msgstr ""
+"Spiegelliste und Metalink können nicht gleichzeitig angegeben werden."
#, python-format
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
msgstr ""
+"Die virtuelle Maschine '%(vm)s' muss vor dem Erstellen eines Snapshots gestoppt werden."
#, python-format
msgid ""
"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"Snapshot '%(name)s' kann auf virtueller Maschine '%(vm)s' nicht erstellt werden. Details: "
+"%(err)s"
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
msgstr ""
+"Snapshot '%(name)s' ist auf virtueller Maschine '%(vm)s' nicht vorhanden."
#, python-format
msgid ""
"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"Snapshot '%(name)s' kann auf virtueller Maschine '%(vm)s' nicht abgerufen werden. Details: "
+"%(err)s"
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
msgstr ""
+"Snapshots können auf virtueller Maschine '%(vm)s' nicht aufgelistet werden. Details: %(err)s"
#, python-format
msgid ""
"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"Snapshot '%(name)s' kann auf virtueller Maschine '%(vm)s' nicht gelöscht werden. Details: "
+"%(err)s"
#, python-format
msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"Aktueller Snapshot der virtuellen Maschine '%(vm)s' kann nicht abgerufen werden. Details: "
+"%(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
msgstr ""
+"Virtuelle Maschine '%(vm)s' kann nicht auf Snapshot '%(name)s' zurückgesetzt werden. Details: "
+"%(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
+"Snapshot der virtuellen Maschine '%(vm)s' kann nicht erstellt werden, weil er eine "
+"Platte im Format '%(format)s' enthält. Nur 'qcow2' wird unterstützt."
msgid "The number of vCPUs is too large for this system."
msgstr ""
+"Die Anzahl der vCPUs ist für dieses System zu groß."
msgid "Invalid vCPU/topology combination."
msgstr ""
+"Ungültige Kombination aus vCPU und Topologie."
msgid "This host (or current configuration) does not allow CPU topology."
msgstr ""
+"Dieser Host (oder die aktuelle Konfiguration) erlaubt keine CPU-Topologie."
msgid "ERROR CODE"
-msgstr "FEHLERCODE"
+msgstr ""
+"FEHLERCODE"
msgid "REASON"
-msgstr "GRUND"
+msgstr ""
+"GRUND"
msgid "STACK"
-msgstr "STACK"
+msgstr ""
+"STACK"
msgid "Go to Homepage"
-msgstr "Gehe zu Homepage"
+msgstr ""
+"Gehe zu Homepage"
msgid "Create a New Virtual Machine"
-msgstr "Neue virtuelle Maschine erstellen"
+msgstr ""
+"Neue virtuelle Maschine erstellen"
msgid "Virtual Machine Name"
-msgstr "Name der virtuellen Maschine"
+msgstr ""
+"Name der virtuellen Maschine"
msgid ""
"The name used to identify the virtual machine. If omitted, a name will be "
"chosen based on the template used."
msgstr ""
-"Der für die Kennzeichnung der virtuellen Maschine verwendete Name. Falls er "
-"ausgelassen wird, wird ein Name anhand der verwendeten Vorlage ausgewählt."
+"Der für die Kennzeichnung der virtuellen Maschine verwendete Name. Falls er ausgelassen wird, wird ein Name "
+"anhand der verwendeten Vorlage ausgewählt."
msgid "Template"
-msgstr "Vorlage"
+msgstr ""
+"Vorlage"
msgid "Please create a template first."
-msgstr "Erstellen Sie zunächst eine Vorlage."
+msgstr ""
+"Erstellen Sie zunächst eine Vorlage."
msgid "Create a Template"
-msgstr "Vorlage erstellen"
+msgstr ""
+"Vorlage erstellen"
msgid "Please choose a template."
-msgstr "Wählen Sie eine Vorlage aus."
+msgstr ""
+"Wählen Sie eine Vorlage aus."
msgid "OS"
-msgstr "BS"
+msgstr ""
+"BS"
msgid "OS Version"
-msgstr "BS-Version"
+msgstr ""
+"BS-Version"
msgid "CPUS"
-msgstr "CPUS"
+msgstr ""
+"CPUS"
msgid "Memory"
-msgstr "Speicher"
+msgstr ""
+"Speicher"
msgid "Create"
-msgstr "Erstellen"
+msgstr ""
+"Erstellen"
msgid "Creating..."
msgstr ""
+"Wird erstellt..."
msgid "Edit Guest"
-msgstr "Gast bearbeiten"
+msgstr ""
+"Gast bearbeiten"
msgid "General"
-msgstr "Allgemein"
+msgstr ""
+"Allgemein"
msgid "Storage"
-msgstr "Speicher"
+msgstr ""
+"Speicher"
msgid "Interface"
-msgstr "Schnittstelle"
+msgstr ""
+"Schnittstelle"
msgid "Permission"
-msgstr "Version"
+msgstr ""
+"Berechtigung"
msgid "Host PCI Device"
msgstr ""
+"PCI-Einheit für Host"
msgid "Snapshot"
msgstr ""
+"Snapshot"
msgid "Name"
-msgstr "Name"
+msgstr ""
+"Name"
msgid "CPUs"
-msgstr "CPUs"
+msgstr ""
+"CPUs"
msgid "Memory (MB)"
-msgstr "Speicher"
+msgstr ""
+"Speicher (MB)"
msgid "Icon"
-msgstr "Symbol"
+msgstr ""
+"Symbol"
msgid "Device"
-msgstr "Einheitenname"
+msgstr ""
+"Einheit"
msgid "Path"
-msgstr "NFS-Pfad"
+msgstr ""
+"Pfad"
msgid "Network"
-msgstr "Netz"
+msgstr ""
+"Netz"
msgid "Type"
-msgstr "Typ"
+msgstr ""
+"Typ"
msgid "MAC Address"
msgstr ""
+"MAC-Adresse"
msgid "Available system users and groups"
msgstr ""
+"Verfügbare Systembenutzer und -gruppen"
msgid "Selected system users and groups"
msgstr ""
+"Ausgewählte Systembenutzer und -gruppen"
msgid "User"
msgstr ""
+"Benutzer"
msgid "All"
-msgstr "Alle"
+msgstr ""
+"Alle"
msgid "To Add"
msgstr ""
+"Hinzuzufügen"
msgid "Added"
msgstr ""
+"Hinzugefügt"
msgid "filter"
msgstr ""
+"Filter"
msgid "Product"
msgstr ""
+"Produkt"
msgid "Vendor"
-msgstr "Anbieter"
+msgstr ""
+"Anbieter"
msgid "Created"
msgstr ""
+"Erstellt"
msgid "Save"
-msgstr "Speichern"
+msgstr ""
+"Speichern"
msgid "Replace"
-msgstr "Ersetzen"
+msgstr ""
+"Ersetzen"
msgid "Detach"
-msgstr "Abhängen"
+msgstr ""
+"Abhängen"
msgid "Cancel"
-msgstr "Abbrechen"
+msgstr ""
+"Abbrechen"
msgid "revert"
msgstr ""
+"zurücksetzen"
msgid "Add a Storage Device to VM"
-msgstr "Speichereinheit zur virtuellen Maschine hinzufügen"
+msgstr ""
+"Speichereinheit zur virtuellen Maschine hinzufügen"
msgid "Device Type"
-msgstr "Einheitentyp"
+msgstr ""
+"Einheitentyp"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "Der Einheitentyp. Derzeit wird nur \"cdrom\" unterstützt."
+msgstr ""
+"Der Einheitentyp. Derzeit werden nur \"cdrom\" und \"disk\" unterstützt."
msgid "Storage Pool"
-msgstr "Speicherpool"
+msgstr ""
+"Speicherpool"
msgid "Storage pool which volume located in"
-msgstr "Speicherpoolpfad muss eine Zeichenfolge sein"
+msgstr ""
+"Speicherpool, in dem sich der Datenträger befindet"
msgid "Storage Volume"
-msgstr "Speicherpoolname"
+msgstr ""
+"Speicherdatenträger"
msgid "Storage volume to be attached"
-msgstr "Name des Speicherdatenträgers muss eine Zeichenfolge sein"
+msgstr ""
+"Anzuhängender Speicherdatenträger"
msgid "File Path"
-msgstr "Dateipfad"
+msgstr ""
+"Dateipfad"
msgid "The ISO file path in the server for CDROM."
-msgstr "Der ISO-Dateipfad auf dem Server für die CD-ROM."
+msgstr ""
+"Der ISO-Dateipfad auf dem Server für die CD-ROM."
msgid "Attach"
-msgstr "Anhängen"
+msgstr ""
+"Anhängen"
msgid "Start"
-msgstr "Starten"
+msgstr ""
+"Starten"
msgid "Reset"
-msgstr "Zurücksetzen"
+msgstr ""
+"Zurücksetzen"
msgid "Pause"
msgstr ""
+"Anhalten"
msgid "Resume"
msgstr ""
+"Fortsetzen"
msgid "Power Off"
msgstr ""
+"Ausschalten"
msgid "Actions"
-msgstr "Aktionen"
+msgstr ""
+"Aktionen"
msgid "Connect"
-msgstr "Verbinden"
+msgstr ""
+"Verbinden"
msgid "Clone"
msgstr ""
+"Klonen"
msgid "Edit"
-msgstr "Bearbeiten"
+msgstr ""
+"Bearbeiten"
msgid "Shut Down"
-msgstr "Herunterfahren"
+msgstr ""
+"Herunterfahren"
msgid "Delete"
-msgstr "Löschen"
+msgstr ""
+"Löschen"
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
-"Der Benutzername oder das Kennwort, den bzw. das Sie eingegeben haben, ist "
-"falsch. Versuchen Sie es bitte erneut."
+"Der Benutzername oder das Kennwort, den bzw. das Sie eingegeben haben, ist falsch. Versuchen Sie es bitte erneut."
msgid "This field is required."
-msgstr "Dieses Feld ist erforderlich."
+msgstr ""
+"Dieses Feld ist erforderlich."
msgid "Log in"
-msgstr "Anmelden"
+msgstr ""
+"Anmelden"
msgid "Logging in..."
-msgstr "Wird angemeldet..."
+msgstr ""
+"Wird angemeldet..."
msgid "Host"
-msgstr "Host"
+msgstr ""
+"Host"
msgid "Guests"
-msgstr "Gäste"
+msgstr ""
+"Gäste"
msgid "Templates"
-msgstr "Vorlagen"
+msgstr ""
+"Vorlagen"
msgid "Failed to get application configuration"
-msgstr "Anwendungskonfiguration konnte nicht abgerufen werden"
+msgstr ""
+"Anwendungskonfiguration konnte nicht abgerufen werden"
msgid "This is not a valid Linux path"
-msgstr "Dies ist kein gültiger Linux-Pfad"
+msgstr ""
+"Dies ist kein gültiger Linux-Pfad"
msgid "This is not a valid URL."
-msgstr "Dies ist kein gültiger URL."
+msgstr ""
+"Dies ist keine gültige URL."
msgid "No such data available."
-msgstr "Keine solchen Daten verfügbar."
+msgstr ""
+"Keine solchen Daten verfügbar."
msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"Hostsystem kann nicht kontaktiert werden. Prüfen Sie, ob das Hostsystem "
-"aktiv ist und obNetzkonnektivität besteht. HTTP-Anforderungsantwort %1. "
+"Hostsystem kann nicht kontaktiert werden. Prüfen Sie, ob das Hostsystem aktiv ist und ob"
+"Netzkonnektivität besteht. HTTP-Anforderungsantwort %1."
msgid "Unable to read file."
msgstr ""
+"Datei konnte nicht gelesen werden."
msgid "Error while uploading file."
msgstr ""
+"Fehler beim Hochladen der Datei."
msgid "Delete Confirmation"
-msgstr "Löschbestätigung"
+msgstr ""
+"Löschbestätigung"
msgid "OK"
-msgstr "OK"
+msgstr ""
+"OK"
msgid "Confirm"
-msgstr "Bestätigen"
+msgstr ""
+"Bestätigen"
msgid "Warning"
-msgstr "Warnung"
+msgstr ""
+"Warnung"
msgid "Cloning..."
msgstr ""
+"Wird geklont..."
msgid "Loading..."
-msgstr "Wird geladen..."
+msgstr ""
+"Wird geladen..."
msgid "An error occurred while retrieving system information."
msgstr ""
+"Beim Abrufen der Systeminformationen ist ein Fehler aufgetreten."
msgid "Retry"
-msgstr "Wiederholen"
+msgstr ""
+"Wiederholen"
msgid "Detailed message:"
-msgstr "Detaillierte Meldung:"
+msgstr ""
+"Detaillierte Meldung:"
msgid "No ISO found"
msgstr ""
+"Keine ISO-Datei gefunden"
msgid "This is not a valid ISO file."
-msgstr "Dies ist keine gültige ISO-Datei."
+msgstr ""
+"Dies ist keine gültige ISO-Datei."
msgid "This may take a long time. Do you want to continue?"
-msgstr "Dies wird einige Zeit dauern. Möchten Sie fortfahren?"
+msgstr ""
+"Dieser Vorgang kann lange dauern. Möchten Sie fortfahren?"
msgid "This will permanently delete the template. Would you like to continue?"
-msgstr "Hiermit wird die Vorlage dauerhaft gelöscht. Möchten Sie fortfahren?"
+msgstr ""
+"Hiermit wird die Vorlage dauerhaft gelöscht. Möchten Sie fortfahren?"
msgid "Unable to shut down system as there are some virtual machines running!"
msgstr ""
-"System konnte nicht heruntergefahren werden, weil einige virtuellen "
-"Maschinen ausgeführt werden!"
+"System konnte nicht heruntergefahren werden, weil einige virtuellen Maschinen ausgeführt werden!"
msgid "Max:"
-msgstr "Max:"
+msgstr ""
+"Max:"
msgid "Utilization"
-msgstr "Auslastung"
+msgstr ""
+"Auslastung"
msgid "Available"
-msgstr "Verfügbar"
+msgstr ""
+"Verfügbar"
msgid "Read Rate"
-msgstr "Leserate"
+msgstr ""
+"Leserate"
msgid "Write Rate"
-msgstr "Schreibrate"
+msgstr ""
+"Schreibrate"
msgid "Received"
-msgstr "Empfangen"
+msgstr ""
+"Empfangen"
msgid "Sent"
-msgstr "Gesendet"
+msgstr ""
+"Gesendet"
msgid ""
"Shutting down or restarting host will cause unsaved work lost. Continue to "
"shut down/restarting?"
msgstr ""
-"Durch das Herunterfahren oder Neustarten des Hosts können ungesicherte "
-"Arbeiten verloren gehen. Möchten Sie mit dem Herunterfahren/Neustarten "
+"Durch das Herunterfahren oder Neustarten des Hosts können ungesicherte Arbeiten verloren gehen. Möchten Sie mit dem Herunterfahren/Neustarten "
"fortfahren?"
msgid ""
"Repository will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"Repository wird dauerhaft entfernt und kann nicht wiederhergestellt werden. "
-"Möchten Sie fortfahren?"
+"Repository wird dauerhaft entfernt und kann nicht wiederhergestellt werden. Möchten Sie "
+"fortfahren?"
msgid "Repositories"
-msgstr "Repositorys"
+msgstr ""
+"Repositorys"
msgid "ID"
-msgstr "ID"
+msgstr ""
+"ID"
msgid "Base URL"
-msgstr "Basis-URL"
+msgstr ""
+"Basis-URL"
msgid "Is Mirror"
-msgstr "Ist Spiegel"
+msgstr ""
+"Ist Spiegel"
msgid "URL Args"
-msgstr "URL-Args"
+msgstr ""
+"URL-Args"
msgid "Enabled"
-msgstr "Aktiviert"
+msgstr ""
+"Aktiviert"
msgid "GPG Check"
-msgstr "GPG-Prüfung"
+msgstr ""
+"GPG-Prüfung"
msgid "GPG Key"
-msgstr "GPG-Schlüssel"
+msgstr ""
+"GPG-Schlüssel"
msgid "Add"
-msgstr "Hinzufügen"
+msgstr ""
+"Hinzufügen"
msgid "Remove"
-msgstr "Entfernen"
+msgstr ""
+"Entfernen"
msgid "Enable"
-msgstr "Aktivieren"
+msgstr ""
+"Aktivieren"
msgid "Disable"
-msgstr "Inaktivieren"
+msgstr ""
+"Inaktivieren"
msgid "Software Updates"
-msgstr "Software-Updates"
+msgstr ""
+"Software-Updates"
msgid "Package Name"
-msgstr "Paketname"
+msgstr ""
+"Paketname"
msgid "Version"
-msgstr "Version"
+msgstr ""
+"Version"
msgid "Architecture"
-msgstr "Architektur"
+msgstr ""
+"Architektur"
msgid "Repository"
-msgstr "Repository"
+msgstr ""
+"Repository"
msgid "Update All"
-msgstr "Alle aktualisieren"
+msgstr ""
+"Alle aktualisieren"
msgid "Updating..."
-msgstr "Wird aktualisiert..."
+msgstr ""
+"Wird aktualisiert..."
msgid "Failed to retrieve packages update information."
msgstr ""
+"Updateinformationen für Pakete konnten nicht abgerufen werden."
msgid "Failed to update package(s)."
-msgstr "Pakete konnten nicht aktualisiert werden."
+msgstr ""
+"Pakete konnten nicht aktualisiert werden."
msgid ""
"Debug report will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"Debugbericht wird dauerhaft entfernt und kann nicht wiederhergestellt "
-"werden. Möchten Sie fortfahren?"
+"Debugbericht wird dauerhaft entfernt und kann nicht wiederhergestellt werden. Möchten Sie "
+"fortfahren?"
msgid "Debug Reports"
-msgstr "Debugberichte"
+msgstr ""
+"Debugberichte"
msgid "Generated Time"
-msgstr "Generierte Zeit"
+msgstr ""
+"Generierte Zeit"
msgid "Generate"
-msgstr "Generieren"
+msgstr ""
+"Generieren"
msgid "Generating..."
-msgstr "Wird generiert..."
+msgstr ""
+"Wird generiert..."
msgid "Rename"
-msgstr "Umbenennen"
+msgstr ""
+"Umbenennen"
msgid "Download"
-msgstr "Herunterladen"
+msgstr ""
+"Herunterladen"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
"hyphen ('-')."
msgstr ""
-"Berichtsname darf nur Buchstaben, Zahlen und/oder Bindestriche ('-') "
-"enthalten."
+"Der Berichtsname darf nur Buchstaben, Ziffern, Unterstreichungszeichen ('_') und/oder "
+"Bindestriche ('-') enthalten."
msgid "Pending..."
-msgstr "Wird geladen..."
+msgstr ""
+"Anstehend..."
msgid "Report name is the same as the original one."
msgstr ""
+"Der Berichtsname stimmt mit dem ursprünglichen Namen überein."
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
"cannot be undone. Would you like to continue?"
msgstr ""
-"Hiermit werden die virtuelle Maschine und deren virtuellen Platten gelöscht. "
-"Diese Operation kann nicht rückgängig gemacht werden. Möchten Sie fortfahren?"
+"Hiermit werden die virtuelle Maschine und deren virtuellen Platten gelöscht. Diese Operation "
+"kann nicht rückgängig gemacht werden. Möchten Sie fortfahren?"
msgid "Power off Confirmation"
-msgstr "Löschbestätigung"
+msgstr ""
+"Ausschalten bestätigen"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
"cache in the guest. Would you like to continue?"
msgstr ""
+"Diese Aktion kann zu nicht gewünschten Ergebnissen führen, beispielsweise zu "
+"einem nicht geleerten Plattencache beim Gast. Möchten Sie fortfahren?"
msgid "Reset Confirmation"
-msgstr "Löschbestätigung"
+msgstr ""
+"Zurücksetzung bestätigen"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
"Would you like to continue?"
msgstr ""
+"Bei einer Zurücksetzung ohne Herunterfahren des Gastbetriebssystems besteht "
+"das Risiko eines Datenverlusts. Möchten Sie fortfahren?"
msgid "Shut Down Confirmation"
-msgstr "Löschbestätigung"
+msgstr ""
+"Herunterfahren bestätigen"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
-msgstr "Hiermit wird die Vorlage dauerhaft gelöscht. Möchten Sie fortfahren?"
+msgstr ""
+"Hinweis: Diese Anforderung wird vom Gastbetriebssystem möglicherweise ignoriert. Möchten Sie fortfahren?"
msgid "Virtual Machine delete Confirmation"
msgstr ""
+"Löschbestätigung für virtuelle Maschine"
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
msgstr ""
+"Diese virtuelle Maschine ist nicht permanent. Wenn Sie das System ausschalten, wird sie gelöscht. Möchten Sie fortfahren?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
"default storage pool. The same will happen when the target pool does not "
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
+"Wenn der Zielgast über SCSI- oder iSCSI-Datenträger verfügt, dann werden sie im Standardspeicherpool "
+"geklont. Derselbe Vorgang wird ausgeführt, wenn der Zielpool nicht über genügend "
+"Speicherplatz zum Klonen der Datenträger verfügt. Möchten Sie fortfahren?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
msgstr ""
-"Diese CD-ROM wird dauerhaft abgehängt und Sie können sie neu anhängen. "
-"Möchten Sie mit dem Abhängen fortfahren?"
+"Diese CD-ROM wird dauerhaft abgehängt und Sie können sie neu anhängen. Möchten Sie "
+"mit dem Abhängen fortfahren?"
msgid "Attaching..."
-msgstr "Wird angehängt..."
+msgstr ""
+"Wird angehängt..."
msgid "Replacing..."
-msgstr "Wird ersetzt..."
+msgstr ""
+"Wird ersetzt..."
msgid "Successfully attached!"
-msgstr "Erfolgreich angehängt!"
+msgstr ""
+"Erfolgreich angehängt!"
msgid "Successfully replaced!"
-msgstr "Erfolgreich ersetzt!"
+msgstr ""
+"Erfolgreich ersetzt!"
msgid "Successfully detached!"
-msgstr "Erfolgreich abgehängt!"
+msgstr ""
+"Erfolgreich abgehängt!"
msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
msgstr ""
+"Diese Platte wird dauerhaft abgehängt und Sie können sie neu anhängen. Möchten Sie "
+"mit dem Abhängen fortfahren?"
msgid "interface:"
msgstr ""
+"Schnittstelle:"
msgid "address:"
msgstr ""
+"Adresse:"
msgid "link_type:"
msgstr ""
+"Linktyp:"
msgid "block:"
msgstr ""
+"Block:"
msgid "drive_type:"
msgstr ""
+"Laufwerkstyp:"
msgid "model:"
msgstr ""
+"Modell:"
msgid "Affected devices:"
msgstr ""
+"Betroffene Einheiten:"
msgid "The VLAN id must be between 1 and 4094."
-msgstr "Die VLAN-ID muss zwischen 1 und 4094 liegen."
+msgstr ""
+"Die VLAN-ID muss zwischen 1 und 4094 liegen."
msgid "unavailable"
-msgstr "nicht verfügbar"
+msgstr ""
+"nicht verfügbar"
msgid ""
"This action will interrupt network connectivity for any virtual machine that "
"depend on this network."
msgstr ""
-"Diese Aktion unterbricht die Netzkonnektivität für jede virtuelle Maschine, "
-"die von diesem Netz abhängt."
+"Diese Aktion unterbricht die Netzkonnektivität für jede virtuelle Maschine, die "
+"von diesem Netz abhängt."
msgid "Create a network"
-msgstr "Netz erstellen"
+msgstr ""
+"Netz erstellen"
msgid ""
"This network is not persistent. Instead of stop, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Dieser Speicherpool ist nicht permanent. Durch diese Aktion wird er nicht "
-"inaktiviert, sondern permanent gelöscht. Möchten Sie fortfahren?"
+"Dieses Netz ist nicht permanent. Durch diese Aktion wird es nicht gestoppt, sondern "
+"permanent gelöscht. Möchten Sie fortfahren?"
msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
+"Der überbrückte VLAN-Tag arbeitet möglicherweise nicht korrekt, wenn der Netzmanager aktiviert ist. Sie "
+"sollten ihn eventuell inaktivieren."
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
@@ -1846,423 +2222,539 @@ msgstr ""
"Hiermit wird der Speicherpool dauerhaft gelöscht. Möchten Sie fortfahren?"
msgid "This storage pool is empty."
-msgstr "Dieser Speicherpool ist leer."
+msgstr ""
+"Dieser Speicherpool ist leer."
msgid ""
"It will format your disk and you will loose any data in there, are you sure "
"to continue? "
msgstr ""
-"Hiermit wird Ihre Platte formatiert und Sie verlieren sämtliche Daten "
-"darauf. Sind Sie sicher, dass Sie fortfahren möchten? "
+"Hiermit wird Ihre Platte formatiert und Sie verlieren sämtliche Daten darauf. Sind Sie sicher, dass "
+"Sie fortfahren möchten? "
msgid "SCSI Fibre Channel"
-msgstr "SCSI-Fibre Channel"
+msgstr ""
+"SCSI-Fibre Channel"
msgid "No SCSI adapters found."
-msgstr "Keine SCSI-Adapter gefunden."
+msgstr ""
+"Keine SCSI-Adapter gefunden."
msgid "Loading iSCSI targets..."
msgstr ""
+"iSCSI-Ziele werden geladen..."
msgid "No iSCSI found. Please input one."
msgstr ""
+"iSCSI wurde nicht gefunden. Nehmen Sie die iSCSI-Eingabe vor."
msgid "Failed to load iSCSI targets."
msgstr ""
+"iSCSI-Ziele konnten nicht geladen werden."
msgid "The storage pool name can not be blank."
-msgstr "Der Speicherpoolname darf nicht leer sein."
+msgstr ""
+"Der Speicherpoolname darf nicht leer sein."
msgid "The storage pool path can not be blank."
-msgstr "Der Speicherpoolpfad darf nicht leer sein."
+msgstr ""
+"Der Speicherpoolpfad darf nicht leer sein."
msgid "NFS server mount path can not be blank."
-msgstr "Der Mountpfad des NFS-Servers darf nicht leer sein."
+msgstr ""
+"Der Mountpfad des NFS-Servers darf nicht leer sein."
msgid "Invalid NFS mount path."
-msgstr "Ungültiger NFS-Mountpfad."
+msgstr ""
+"Ungültiger NFS-Mountpfad."
msgid "No logical device selected."
-msgstr "Keine logische Einheit ausgewählt."
+msgstr ""
+"Keine logische Einheit ausgewählt."
msgid "The iSCSI target can not be blank."
-msgstr "Das iSCSI-Ziel darf nicht leer sein."
+msgstr ""
+"Das iSCSI-Ziel darf nicht leer sein."
msgid "Server name can not be blank."
-msgstr "Servername darf nicht leer sein."
+msgstr ""
+"Servername darf nicht leer sein."
msgid "This is not a valid Server Name or IP. Please, modify it."
msgstr ""
+"Dies ist kein gültiger Servername oder keine gültige IP. Ändern Sie den Servernamen oder die IP."
msgid "Looking for available partitions ..."
-msgstr "Es wird nach verfügbaren Partitionen gesucht..."
+msgstr ""
+"Es wird nach verfügbaren Partitionen gesucht..."
msgid "No available partitions found."
-msgstr "Keine gültigen Partitionen gefunden."
+msgstr ""
+"Keine gültigen Partitionen gefunden."
msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Dieser Speicherpool ist nicht permanent. Durch diese Aktion wird er nicht "
-"inaktiviert, sondern permanent gelöscht. Möchten Sie fortfahren?"
+"Dieser Speicherpool ist nicht permanent. Durch diese Aktion wird er nicht inaktiviert, sondern "
+"permanent gelöscht. Möchten Sie fortfahren?"
msgid "Unable to retrieve partitions information."
msgstr ""
-"Repository-Informationen konnten nicht abgerufen werden. Details: '%(err)s'"
+"Partitionsinformationen konnten nicht abgerufen werden."
msgid "In progress..."
msgstr ""
+"In Bearbeitung..."
msgid "Failed!"
msgstr ""
+"Fehlgeschlagen!"
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
msgstr ""
+"Der CD-ROM-Pfad muss ein gültiger lokaler/ferner Pfad sein. Er darf nicht leer sein."
msgid "Disk pool or volume cannot be blank."
-msgstr "Der Speicherpoolname darf nicht leer sein."
+msgstr ""
+"Der Plattenpool oder Datenträger darf nicht leer sein."
msgid "Peers"
msgstr ""
+"Peers"
msgid "Searching"
msgstr ""
+"Suche wird durchgeführt"
msgid "No peers found."
msgstr ""
+"Keine Peers gefunden."
msgid "Help"
-msgstr "Hilfe"
+msgstr ""
+"Hilfe"
msgid "About"
-msgstr "Informationen"
+msgstr ""
+"Informationen"
msgid "Log out"
-msgstr "Abmelden"
+msgstr ""
+"Abmelden"
msgid "Version:"
-msgstr "Version:"
+msgstr ""
+"Version:"
msgid "Session timeout, please re-login."
msgstr ""
+"Sitzungszeitlimitüberschreitung, melden Sie sich erneut an."
msgid "User Name"
-msgstr "Benutzername"
+msgstr ""
+"Benutzername"
msgid "Password"
-msgstr "Kennwort"
+msgstr ""
+"Kennwort"
msgid "Generate a New Debug Report"
-msgstr "Neuen Debugbericht erstellen"
+msgstr ""
+"Neuen Debugbericht erstellen"
msgid "Report Name"
-msgstr "Berichtsname"
+msgstr ""
+"Berichtsname"
msgid ""
"The name used to identify the report. If omitted, a name will be chosen "
"based on current time. Name can contain: letters, digits, underscore (\"_\") "
"and hyphen (\"-\")."
msgstr ""
-"Der Name, mit dem der Bericht gekennzeichnet wird. Falls er ausgelassen "
-"wird, wird ein Name basierend auf der aktuellen Zeit ausgewählt. Der Name "
-"darf Buchstaben, Zahlen und Bindestriche (\"-\") enthalten."
+"Der Name, mit dem der Bericht angegeben wird. Falls keine Angabe erfolgt, wird ein Name "
+"auf Basis der aktuellen Uhrzeit ausgewählt. Der Name kann Buchstaben, Ziffern, Unterstreichungszeichen (\"_\") "
+"und Bindestriche (\"-\") enthalten."
msgid "Rename a Debug Report"
-msgstr "Neuen Debugbericht erstellen"
+msgstr ""
+"Debugbericht umbenennen"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
"hyphen (\"-\")."
msgstr ""
-"Der Name, mit dem der Bericht gekennzeichnet wird. Falls er ausgelassen "
-"wird, wird ein Name basierend auf der aktuellen Zeit ausgewählt. Der Name "
-"darf Buchstaben, Zahlen und Bindestriche (\"-\") enthalten."
+"Der Name, mit dem der Bericht angegeben wird. Der Name kann Buchstaben, Ziffern und "
+"Bindestriche (\"-\") enthalten."
msgid "Submit"
msgstr ""
+"Übergeben"
msgid "Add a Repository"
-msgstr "Repository hinzufügen"
+msgstr ""
+"Repository hinzufügen"
msgid "Identifier"
-msgstr "Kennung"
+msgstr ""
+"Kennung"
msgid "Single word, unique identifier for the repository."
-msgstr "Einzelnes Wort, eindeutige Kennung für das Repository."
+msgstr ""
+"Einzelnes Wort, eindeutige Kennung für das Repository."
msgid "Textual name for the repository."
-msgstr "Textname für das Repository."
+msgstr ""
+"Textname für das Repository."
msgid "URL"
-msgstr "URL"
+msgstr ""
+"URL"
msgid "Required Field"
-msgstr "Erforderliches Feld"
+msgstr ""
+"Erforderliches Feld"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
-msgstr "URL zum Repository. Unterstützte Protokolle sind http, ftp und file."
+msgstr ""
+"URL zum Repository. Unterstützte Protokolle sind http, ftp und file."
msgid "Repository is a mirror"
-msgstr "Repository ist ein Spiegel."
+msgstr ""
+"Repository ist ein Spiegel"
msgid "Distribution"
-msgstr "Verteilung"
+msgstr ""
+"Verteilung"
msgid "Distribution of the DEB repository."
-msgstr "Verteilung des DEB-Repositorys."
+msgstr ""
+"Verteilung des DEB-Repositorys."
msgid "Components"
-msgstr "Komponenten"
+msgstr ""
+"Komponenten"
msgid "List of components in DEB repository."
-msgstr "Liste der Komponenten im DEB-Repository."
+msgstr ""
+"Liste der Komponenten im DEB-Repository."
msgid "Edit Repository"
-msgstr "Repository bearbeiten"
+msgstr ""
+"Repository bearbeiten"
msgid "Mirror List URL"
-msgstr "Spiegellisten-URL"
+msgstr ""
+"Spiegellisten-URL"
msgid "Yes"
-msgstr "Ja"
+msgstr ""
+"Ja"
msgid "No"
-msgstr "Nein"
+msgstr ""
+"Nein"
msgid "Add a Volume to Storage Pool"
msgstr ""
+"Datenträger zu Speicherpool hinzufügen"
msgid "Fetch from remote URL"
msgstr ""
+"Über Remote URL abrufen"
msgid "Enter the remote URL here."
msgstr ""
+"Remote URL hier eingeben."
msgid "Upload a file"
msgstr ""
+"Datei hochladen"
msgid "Choose the file you want to upload."
msgstr ""
+"Wählen Sie die hochzuladende Datei aus."
msgid "Define a New Storage Pool"
-msgstr "Neuen Speicherpool definieren"
+msgstr ""
+"Neuen Speicherpool definieren"
msgid "Storage Pool Name"
-msgstr "Speicherpoolname"
+msgstr ""
+"Speicherpoolname"
msgid ""
"The name used to identify the storage pools, and it should not be empty."
msgstr ""
-"Der Name, mit dem die Speicherpools gekennzeichnet werden. Er darf nicht "
-"leer sein."
+"Der Name, mit dem die Speicherpools gekennzeichnet werden. Er darf nicht leer sein."
msgid "Storage Pool Type"
-msgstr "Speicherpooltyp"
+msgstr ""
+"Speicherpooltyp"
msgid "Storage Path"
-msgstr "Speicherpfad"
+msgstr ""
+"Speicherpfad"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
msgstr ""
-"Der Pfad des Speicherpools. Jeder Speicherpool muss einen eindeutigen Pfad "
-"haben."
+"Der Pfad des Speicherpools. Jeder Speicherpool muss einen eindeutigen Pfad haben."
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
"your system."
msgstr ""
-"Kimchi versucht, das Verzeichnis zu erstellen, wenn es noch nicht in Ihrem "
-"System vorhanden ist."
+"Kimchi versucht, das Verzeichnis zu erstellen, wenn es noch nicht in Ihrem System "
+"vorhanden ist."
msgid "NFS Server IP"
-msgstr "NFS-Server-IP"
+msgstr ""
+"NFS-Server-IP"
msgid "NFS server IP or hostname. It can be input or chosen from history."
msgstr ""
-"IP oder Hostname des NFS-Servers. Diese(r) kann eingegeben oder aus dem "
-"Verlauf ausgewählt werden."
+"IP oder Hostname des NFS-Servers. Diese(r) kann eingegeben oder aus dem Verlauf ausgewählt werden."
msgid "NFS Path"
-msgstr "NFS-Pfad"
+msgstr ""
+"NFS-Pfad"
msgid "The NFS exported path on NFS server."
-msgstr "Der NFS-Exportpfad auf dem NFS-Server."
+msgstr ""
+"Der NFS-Exportpfad auf dem NFS-Server."
msgid "Device path"
-msgstr "Einheitenpfad"
+msgstr ""
+"Einheitenpfad"
msgid "iSCSI Server"
-msgstr "iSCSI-Server"
+msgstr ""
+"iSCSI-Server"
msgid "iSCSI server IP or hostname. It should not be empty."
-msgstr "IP oder Hostname des iSCSI-Servers. Diese(r) darf nicht leer sein."
+msgstr ""
+"IP oder Hostname des iSCSI-Servers. Diese(r) darf nicht leer sein."
msgid "Server"
-msgstr "Server"
+msgstr ""
+"Server"
msgid "Port"
-msgstr "Port"
+msgstr ""
+"Port"
msgid "Target"
-msgstr "Ziel"
+msgstr ""
+"Ziel"
msgid "The iSCSI target on iSCSI server"
-msgstr "Das iSCSI-Ziel auf dem iSCSI-Server"
+msgstr ""
+"Das iSCSI-Ziel auf dem iSCSI-Server"
msgid "Add iSCSI Authentication"
-msgstr "iSCSI-Authentifizierung hinzufügen"
+msgstr ""
+"iSCSI-Authentifizierung hinzufügen"
msgid "iSCSI Authentication"
-msgstr "iSCSI-Authentifizierung"
+msgstr ""
+"iSCSI-Authentifizierung"
msgid "SCSI Adapter"
-msgstr "SCSI-Adapter"
+msgstr ""
+"SCSI-Adapter"
msgid "Please, wait..."
-msgstr "Bitte warten..."
+msgstr ""
+"Bitte warten..."
msgid "Add Template"
-msgstr "Vorlage hinzufügen"
+msgstr ""
+"Vorlage hinzufügen"
msgid "Where is the source media for this template? "
-msgstr "Wo ist der Quellendatenträger für diese Vorlage?"
+msgstr ""
+"Wo ist der Quellendatenträger für diese Vorlage?"
msgid "Local ISO Image"
-msgstr "Lokales ISO-Image"
+msgstr ""
+"Lokales ISO-Image"
msgid "Local Image File"
msgstr ""
+"Lokale Imagedatei"
msgid "Remote ISO Image"
-msgstr "Fernes ISO-Image"
+msgstr ""
+"Fernes ISO-Image"
msgid "Search ISOs"
-msgstr "ISOs suchen"
+msgstr ""
+"ISOs suchen"
msgid "The following ISOs are available:"
-msgstr "Die folgenden ISOs sind verfügbar:"
+msgstr ""
+"Die folgenden ISOs sind verfügbar:"
msgid "OS: "
-msgstr "BS: "
+msgstr ""
+"BS: "
msgid "Version: "
-msgstr "Version: "
+msgstr ""
+"Version: "
msgid "Size: "
-msgstr "Größe: "
+msgstr ""
+"Größe: "
msgid "Search more ISOs"
-msgstr "Weitere ISOs suchen"
+msgstr ""
+"Weitere ISOs suchen"
msgid "Create Templates from Selected ISO"
-msgstr "Vorlagen aus ausgewähltem ISO erstellen"
+msgstr ""
+"Vorlagen aus ausgewähltem ISO erstellen"
msgid "I want to use a specific ISO file"
-msgstr "Ich möchte eine bestimmte ISO-Datei verwenden"
+msgstr ""
+"Ich möchte eine bestimmte ISO-Datei verwenden"
msgid "Loading default remote ISOs ..."
-msgstr "Standardmäßige ferne ISOs werden geladen ..."
+msgstr ""
+"Standardmäßige ferne ISOs werden geladen..."
msgid "Arch: "
-msgstr "Arch: "
+msgstr ""
+"Arch: "
msgid "I want to use a custom URL"
-msgstr "Ich möchte einen benutzerdefinierten URL verwenden"
+msgstr ""
+"Ich möchte eine benutzerdefinierte URL verwenden"
msgid "Edit Template"
-msgstr "Vorlage bearbeiten"
+msgstr ""
+"Vorlage bearbeiten"
msgid "Processor"
-msgstr "Prozessor"
+msgstr ""
+"Prozessor"
msgid "CDROM"
-msgstr "CD-ROM"
+msgstr ""
+"CD-ROM"
msgid "Image File"
msgstr ""
+"Imagedatei"
msgid "Graphics"
-msgstr "Grafik"
+msgstr ""
+"Grafik"
msgid "Disk(GB)"
msgstr ""
+"Festplatte (GB)"
msgid "Disk Format"
msgstr ""
+"Plattenformat"
msgid "CPU Number"
-msgstr "CPU-Anzahl"
+msgstr ""
+"CPU-Anzahl"
msgid "Manually set CPU topology"
msgstr ""
+"CPU-Topologie manuell festlegen"
msgid "Cores"
msgstr ""
+"Kerne"
msgid "Threads"
msgstr ""
+"Threads"
msgid "CPU"
-msgstr "CPU"
+msgstr ""
+"CPU"
msgid "Disk I/O"
-msgstr "Platten-E/A"
+msgstr ""
+"Platten-E/A"
msgid "Network I/O"
-msgstr "Netz-E/A"
+msgstr ""
+"Netz-E/A"
msgid "Livetile"
-msgstr "Live Tile"
+msgstr ""
+"Live Tile"
msgid "No guests found."
-msgstr "Keine Gäste gefunden."
+msgstr ""
+"Keine Gäste gefunden."
msgid "Shut down"
-msgstr "Herunterfahren"
+msgstr ""
+"Herunterfahren"
msgid "Restart"
-msgstr "Erneut starten"
+msgstr ""
+"Erneut starten"
msgid "Basic Information"
-msgstr "Basisinformationen"
+msgstr ""
+"Basisinformationen"
msgid "OS Distro"
-msgstr "BS-Distro"
+msgstr ""
+"BS-Distro"
msgid "OS Code Name"
-msgstr "BS-Codename"
+msgstr ""
+"BS-Codename"
msgid "CPU(s)"
msgstr ""
+"CPU(s)"
msgid "System Statistics"
-msgstr "Systemstatistik"
+msgstr ""
+"Systemstatistik"
msgid "Update Progress"
-msgstr "Aktualisierungsfortschritt"
+msgstr ""
+"Aktualisierungsfortschritt"
msgid "Network Name"
-msgstr "Netzname"
+msgstr ""
+"Netzname"
msgid "State"
-msgstr "Status"
+msgstr ""
+"Status"
msgid "Network Type"
-msgstr "Netztyp"
+msgstr ""
+"Netztyp"
msgid "Address Space"
-msgstr "Adressraum"
+msgstr ""
+"Adressraum"
msgid "Name should not contain '/' and '\"'."
-msgstr "Ungültiger Speicherpoolname. Er darf nicht '/' enthalten."
+msgstr ""
+"Der Name darf weder '/' noch '\"' enthalten."
msgid "Isolated: no external network connection"
-msgstr "Isolatiert: keine physisische Netzverbindung"
+msgstr ""
+"Isoliert: keine externe Netzverbindung"
msgid "NAT: outbound physical network connection only"
-msgstr "NAT: nur ausgehende physische Netzverbindung"
+msgstr ""
+"NAT: nur ausgehende physische Netzverbindung"
msgid "Bridged: Virtual machines are connected to physical network directly"
msgstr ""
@@ -2270,57 +2762,80 @@ msgstr ""
msgid "(No interfaces found)"
msgstr ""
+"(Keine Schnittstellen gefunden)"
msgid "Destination"
-msgstr "Ziel:"
+msgstr ""
+"Zieladresse"
msgid "Enable VLAN"
-msgstr "Virtuelles LAN (VLAN) aktivieren:"
+msgstr ""
+"VLAN aktivieren"
msgid "VLAN ID"
-msgstr "VLAN-ID:"
+msgstr ""
+"VLAN-ID"
msgid "Stop"
-msgstr "Stoppen"
+msgstr ""
+"Stoppen"
msgid "%Used"
msgstr ""
+"% belegt"
msgid "Location"
-msgstr "Position"
+msgstr ""
+"Position"
msgid "Capacity"
-msgstr "Kapazität"
+msgstr ""
+"Kapazität"
msgid "Allocated"
-msgstr "Zugeordnet"
+msgstr ""
+"Zugeordnet"
msgid "active"
-msgstr "aktiv"
+msgstr ""
+"aktiv"
msgid "inactive"
-msgstr "inaktiv"
+msgstr ""
+"inaktiv"
msgid "Deactivate"
-msgstr "Inaktivieren"
+msgstr ""
+"Inaktivieren"
msgid "Activate"
-msgstr "Aktivieren"
+msgstr ""
+"Aktivieren"
msgid "Add Volume"
msgstr ""
+"Datenträger hinzufügen"
msgid "Extend"
msgstr ""
+"Erweitern"
msgid "Undefine"
-msgstr "Definition aufheben"
+msgstr ""
+"Definition aufheben"
msgid "Format"
-msgstr "Format:"
+msgstr ""
+"Format"
msgid "Allocation"
-msgstr "Zuordnung:"
+msgstr ""
+"Zuordnung"
msgid "No templates found."
-msgstr "Keine Vorlagen gefunden."
+msgstr ""
+"Keine Vorlagen gefunden."
+
+# ENGL1SH_VERS10N 28617_40 DO NOT REMOVE OR CHANGE THIS LINE
+# T9N_SRC_ID 92
+# T9N_SH1P_STR1NG KV310AAP001 1
diff --git a/po/es_ES.po b/po/es_ES.po
index 5389718..f97760d 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -1,5 +1,6 @@
# English translations for kimchi package.
# Copyright (C) 2013 ORGANIZATION
+# Adam Litke <agl(a)us.ibm.com>, 2013.
#
msgid ""
msgstr ""
@@ -9,138 +10,155 @@ msgstr ""
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
-"Language: es_ES\n"
+"Language: en_US\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=2; plural=n != 1;"
#, python-format
msgid "Unknown parameter %(value)s"
msgstr ""
+"Parámetro %(value)s desconocido"
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr "Suprimir no está permitido para %(resource)s"
+msgstr ""
+"No se permite la supresión para %(resource)s"
#, python-format
msgid "%(resource)s does not implement update method"
-msgstr "%(resource)s no implementa método de actualización"
+msgstr ""
+"%(resource)s no implementa el método de actualización"
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr "Crear no está permitido para %(resource)s"
+msgstr ""
+"No se permite la creación para %(resource)s"
msgid "Unable to parse JSON request"
-msgstr "No se puede analizar la solicitud JSON"
+msgstr ""
+"No se puede analizar la solicitud JSON"
msgid "This API only supports JSON"
-msgstr "Esta API sólo da soporte a JSON"
+msgstr ""
+"Esta API sólo da soporte a JSON"
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
msgstr ""
+"Los parámetros no coinciden con el requisito en el esquema: %(err)s"
msgid "You don't have permission to perform this operation."
msgstr ""
+"No dispone de permiso para llevar a cabo esta operación."
msgid "Datastore is not initiated in the model object."
-msgstr "El almacén de datos no se ha iniciado en el objeto de modelo."
+msgstr ""
+"El almacén de datos no se ha iniciado en el objeto de modelo."
#, python-format
msgid "Unable to start task due error: %(err)s"
-msgstr "No se puede iniciar la tarea debido a un error: %(err)s"
+msgstr ""
+"No se puede iniciar la tarea debido a un error: %(err)s"
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
msgstr ""
+"El tiempo de espera de %(seconds)s segundos se ha agotado al ejecutar la tarea '%(task)s."
#, python-format
msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
msgstr ""
-"La autenticación ha fallado para el usuario '%(username)s'. [Código de "
-"error: %(code)s]"
+"Error en la autenticación para el usuario '%(username)s'. [Código de error: %(code)s]"
msgid "You are not authorized to access Kimchi"
-msgstr "No tiene autorización para acceder a Kimchi"
+msgstr ""
+"No tiene autorización para acceder a Kimchi"
#, python-format
msgid "Specify %(item)s to login into Kimchi"
-msgstr "Especifique %(item)s para iniciar la sesión en Kimchi"
+msgstr ""
+"Especifique %(item)s para iniciar sesión en Kimchi"
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
msgstr ""
+"No se ha encontrado el usuario %(user_id)s con los valores LDAP indicados."
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
msgstr ""
+"Configuración LDAP no válida: %(item)s : %(value)s"
msgid "Unknown \"_cap\" specified"
msgstr ""
+"Se ha especificado un valor \"_cap\" desconocido"
msgid "\"_passthrough\" should be \"true\" or \"false\""
msgstr ""
+"\"_passthrough\" debería ser \"true\" o \"false\""
msgid "\"_passthrough_affected_by\" should be a device name string"
msgstr ""
+"\"_passthrough_affected_by\" debería ser una cadena de nombre de dispositivo"
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
msgstr ""
-"Se ha producido un error al obtener dispositivos de bloque. Detalles: %(err)s"
+"Error al obtener dispositivos de bloque. Detalles: %(err)s"
#, python-format
msgid "Error while getting block device information for %(device)s."
msgstr ""
-"Se ha producido un error al obtener información de dispositivo de bloque "
-"para %(device)s."
+"Error al obtener información de dispositivos de bloque para %(device)s."
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr "No se puede encontrar el archivo distro: %(filename)s"
+msgstr ""
+"No se ha podido encontrar el archivo distro: %(filename)s"
#, python-format
msgid ""
"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
msgstr ""
-"No se puede analizar el archivo distro: %(filename)s. Asegúrese de que es un "
-"archivo JSON."
+"No se ha podido analizar el archivo distro: %(filename)s. Asegúrese de que se trate de un archivo JSON. "
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
msgstr ""
-"No se puede iniciar la sesión en %(portal)s del destino de host iSCSI. "
-"Detalles: %(err)s"
+"No se puede iniciar sesión en el %(portal)s de destino de host iSCSI. Detalles: %(err)s"
#, python-format
msgid "Unable to login to iSCSI host %(host)s target %(target)s"
msgstr ""
-"No se puede iniciar la sesión en el destino %(target)s del %(host)s host de "
-"iSCSI"
+"No se puede iniciar sesión en el host iSCSI %(host)s de destino %(target)s"
#, python-format
msgid "Unable to find ISO file %(filename)s"
msgstr ""
+"No se puede encontrar el archivo ISO %(filename)s"
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr "El archivo ISO %(filename)s no es arrancable"
+msgstr ""
+"El archivo ISO %(filename)s no se puede arrancar"
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
msgstr ""
-"El archivo ISO %(filename)s no tiene un registro de arranque de El Torito "
-"válido"
+"El archivo ISO %(filename)s no tiene un registro de arranque El Torito válido"
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
-msgstr "Entrada de validación de El Torito no válida en ISO %(filename)s"
+msgstr ""
+"La entrada de validación de El Torito no es válida en ISO %(filename)s"
#, python-format
msgid "Invalid El Torito boot indicator in ISO %(filename)s"
-msgstr "Indicador de arranque de El Torito no válido en ISO %(filename)s"
+msgstr ""
+"El indicador de arranque de El Torito no es válido en ISO %(filename)s"
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
@@ -150,8 +168,7 @@ msgstr ""
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
msgstr ""
-"Formato incorrecto mientras se leía el descriptor de volumen en ISO "
-"%(filename)s"
+"Formato erróneo al leer el descriptor de volúmenes en ISO %(filename)s"
#, python-format
msgid ""
@@ -163,87 +180,104 @@ msgid ""
msgstr ""
"El hipervisor no tiene permiso para utilizar este ISO %(filename)s. "
"Considere moverlo a /var/lib/libvirt, o establezca el permiso de búsqueda en "
-"listas de control de accesos de archivo para el usuario '%(user)s' si es "
-"posible, o añada el '%(user)s' al grupo de vías de acceso ISO, o (no "
-"recomendado) 'chmod -R o+x 'path_to_iso'.Detalles: %(err)s"
+"las listas de control de acceso de archivos para el usuario '%(user)s', si es posible, o añada el "
+"'%(user)s' al grupo de vías de acceso ISO o (no recomendado) 'chmod -R o+x "
+"'path_to_iso'. Detalles: %(err)s"
msgid "An error occurred when probing image OS information."
msgstr ""
+"Se ha producido un error al analizar la información de sistema operativo de las imágenes. "
msgid "No OS information found in given image."
msgstr ""
+"No se ha encontrado información de sistema operativo en una imagen especificada. "
#, python-format
msgid "Unable to read image file %(filename)s"
msgstr ""
+"No se puede leer el archivo de imágenes %(filename)s"
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
msgstr ""
+"El archivo de imágenes debe ser un archivo existente en el sistema. %(filename)s no es una entrada"
+"válida. "
#, python-format
msgid "Virtual machine %(name)s already exists"
-msgstr "La máquina virtual %(name)s ya existe"
+msgstr ""
+"Ya existe la máquina virtual %(name)s"
#, python-format
msgid "Virtual machine %(name)s does not exist"
-msgstr "La máquina virtual %(name)s no existe"
+msgstr ""
+"No existe la máquina virtual %(name)s"
#, python-format
msgid ""
"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
"in use or the virtual machine is not powered off."
msgstr ""
+"No se puede renombrar la máquina virtual %(name)s. El nombre %(new_name)s ya "
+"se está utilizando o la máquina virtual no se ha apagado. "
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
msgstr ""
-"No se puede recuperar la captura de pantalla para la máquina virtual "
-"detenida %(name)s"
+"No se puede recuperar la captura de pantalla para la máquina virtual detenida %(name)s"
msgid "Remote ISO image is not supported by this server."
-msgstr "La imagen ISO remota no está soportada por este servidor."
+msgstr ""
+"La imagen ISO remota no está soportada por este servidor."
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
msgstr ""
+"No se acepta la captura de pantalla en la máquina virtual %(name)s"
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
-msgstr "No se puede crear la máquina virtual %(name)s. Detalles: %(err)s"
+msgstr ""
+"No se puede crear la máquina virtual %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
-msgstr "No se puede crear la máquina virtual %(name)s. Detalles: %(err)s"
+msgstr ""
+"No se puede actualizar la máquina virtual %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
-msgstr "No se puede recuperar la máquina virtual %(name)s. Detalles: %(err)s"
+msgstr ""
+"No se puede recuperar la máquina virtual %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to connect to powered off virtual machine %(name)s."
msgstr ""
+"No se puede conectar a la máquina virtual %(name)s apagada. "
msgid "Virtual machine name must be a string without slashes (/)"
msgstr ""
+"El nombre de la máquina virtual debe ser una serie sin barras inclinadas (/)"
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
msgstr ""
+"Se ha especificado un URI de plantilla %(value)s no válido para la máquina virtual"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for virtual machine"
msgstr ""
+"Se ha especificado un URI de agrupación de almacenamiento %(value)s no válido para la máquina virtual"
msgid "Supported virtual machine graphics are Spice or VNC"
msgstr ""
+"Los gráficos de la máquina virtual soportados son Spice o VNC"
msgid "Graphics address to listen on must be IPv4 or IPv6"
msgstr ""
-"La dirección de gráficos en que hay que estar a la escucha debe ser IPv4 o "
-"IPv6"
+"La dirección de gráficos en que hay que estar a la escucha debe ser IPv4 o IPv6"
msgid "Specify a template to create a virtual machine from"
msgstr ""
@@ -251,124 +285,158 @@ msgstr ""
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
-msgstr "No se puede iniciar la máquina virtual %(name)s. Detalles: %(err)s"
+msgstr ""
+"No se puede iniciar la máquina virtual %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
-msgstr "No se puede detener la máquina virtual %(name)s. Detalles: %(err)s"
+msgstr ""
+"No se puede apagar la máquina virtual %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
-msgstr "No se puede suprimir la máquina virtual %(name)s. Detalles: %(err)s"
+msgstr ""
+"No se puede suprimir la máquina virtual %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
-msgstr "No se puede redenominar la máquina virtual %(name)s. Detalles: %(err)s"
+msgstr ""
+"No se puede restablecer la máquina virtual %(name)s. Detalles: %(err)s"
msgid "User name list must be an array"
msgstr ""
+"La lista de nombres de usuarios debe ser una matriz"
msgid "User name must be a string"
-msgstr "El nombre de red debe ser una serie"
+msgstr ""
+"El nombre de usuario debe ser una serie"
msgid "Group name list must be an array"
msgstr ""
+"La lista de nombres de grupos debe ser una matriz"
msgid "Group name must be a string"
-msgstr "El nombre de red debe ser una serie"
+msgstr ""
+"El nombre de grupo debe ser una serie"
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr "El usuario '%(users)s' no existe."
+msgstr ""
+"No existe el usuario (o usuarios) '%(users)s'"
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr "El usuario '%(groups)s' no existe."
+msgstr ""
+"No existe el grupo (o grupos) '%(groups)s'"
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
-msgstr "No se puede detener la máquina virtual %(name)s. Detalles: %(err)s"
+msgstr ""
+"No se puede apagar la máquina virtual %(name)s. Detalles: %(err)s"
#, python-format
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr "No se puede iniciar la máquina virtual %(name)s. Detalles: %(err)s"
+msgstr ""
+"No se puede obtener acceso a los metadatos de la máquina virtual %(name)s. Detalles: %(err)s"
msgid "The guest console password must be a string."
msgstr ""
+"La contraseña de la consola del invitado debe ser una serie. "
msgid "The life time for the guest console password must be a number."
msgstr ""
+"El tiempo de vida para la contraseña de la consola del invitado debe ser un número. "
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
msgstr ""
+"La máquina virtual '%(name)s' se debe detener antes de clonarla."
#, python-format
msgid "Insufficient disk space to clone virtual machine '%(name)s'"
msgstr ""
+"No hay espacio de disco suficiente para clonar la máquina virtual '%(name)s'"
#, python-format
msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
msgstr ""
+"No se puede clonar la máquina virtual '%(name)s'. Detalles: %(err)s"
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
msgstr ""
+"Operación no válida para la máquina virtual no persistente %(name)s"
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
msgstr ""
+"No se puede suspender la máquina virtual '%(name)s' porque no se está ejecutando."
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
msgstr ""
+"No se puede suspender la máquina virtual '%(name)s'. Detalles: %(err)s"
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
msgstr ""
+"No se puede reanudar la máquina virtual '%(name)s' porque no se ha puesto en pausa. "
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
msgstr ""
+"No se puede reanudar la máquina virtual '%(name)s'. Detalles: %(err)s"
msgid "Memory assigned is higher then the maximum allowed in the host."
msgstr ""
+"La memoria asignada es superior al máximo asignado en el host."
#, python-format
msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
+"La máquina virtual '%(name)s' no admite la actualización de memoria activa. Actualice la memoria con "
+"la máquina fuera de línea para habilitar esta característica. "
msgid "Only increase memory is allowed in active VMs"
msgstr ""
+"Solamente se permite aumentar la memoria en las máquinas virtuales activas"
msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
msgstr ""
+"Para la actualización de memoria en directo, el valor de memoria nuevo debe ser igual al valor anterior de la memoria más "
+"múltiplos de 1024 Mib"
msgid "There are not enough free slots of 1024 Mib in the guest."
msgstr ""
+"No hay suficientes ranuras libres de 1024 Mib en el invitado. "
msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
msgstr ""
+"La versión libvirt del host no admite dispositivos de memoria. Libvirt debe ser >= "
+"1.2.14"
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
msgstr ""
+"Error al conectar el dispositivo de memoria. Detalles: %(error)s"
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
+"La máquina virtual %(vmid)s no contiene el dispositivo de host asignado directamente %(dev_name)s."
#, python-format
msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
msgstr ""
+"El dispositivo de host %(dev_name)s no se permite para asignarlo directamente a la máquina virtual. "
msgid ""
"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
@@ -377,19 +445,28 @@ msgid ""
"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
"iommu=1."
msgstr ""
+"No se han encontrado grupos IOMMU. El paso a través de PCI de host necesita el grupo IOMMU para funcionar "
+"correctamente. Habilite Intel VT-d o AMD IOMMU en el BIOS y, a continuación, verifique "
+"que el Kernel se ha compilado con soporte IOMMU. Para Intel CPU, añada intel_iommu=on "
+"al parámetro de Kernel en /boot/grub2/grub.conf. Para AMD CPU, añada iommu=pt "
+"iommu=1."
msgid "\"name\" should be a device name string"
msgstr ""
+"\"name\" debe ser una serie de nombre de dispositivo"
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
msgstr ""
+"El dispositivo %(name)s lo está utilizando probablemente el host. No se puede conectar al "
+"invitado. "
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
-msgstr "La interfaz %(iface)s no existe en la máquina virtual %(name)s"
+msgstr ""
+"La interfaz %(iface)s no existe en la máquina virtual %(name)s"
#, python-format
msgid ""
@@ -398,7 +475,8 @@ msgstr ""
"La red %(network)s especificada para la máquina virtual %(name)s no existe"
msgid "Supported virtual machine interfaces type is only network"
-msgstr "El tipo de interfaces de máquina virtual soportado es de red solamente"
+msgstr ""
+"El tipo de interfaces de máquina virtual soportado es de red solamente"
msgid "Network name for virtual machine interface must be a string"
msgstr ""
@@ -406,30 +484,33 @@ msgstr ""
msgid "Invalid network model card specified for virtual machine interface"
msgstr ""
-"Especificada tarjeta de modelo de red no válida para la interfaz de máquina "
-"virtual"
+"Especificada tarjeta de modelo de red no válida para la interfaz de máquina virtual"
msgid "Specify type and network to add a new virtual machine interface"
msgstr ""
-"Especifique el tipo y la red para añadir una interfaz de máquina virtual "
-"nueva"
+"Especifique el tipo y la red para añadir una interfaz de máquina virtual nueva"
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
msgstr ""
+"La dirección MAC debe respetar este formato FF:FF:FF:FF:FF:FF"
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
msgstr ""
+"La dirección MAC %(mac)s ya existe en la máquina virtual %(name)s"
msgid "Invalid MAC Address"
msgstr ""
+"Dirección MAC no válida"
msgid "Cannot change MAC address of a running virtual machine"
msgstr ""
+"No se puede cambiar la dirección MAC de una máquina virtual en ejecución"
#, python-format
msgid "Template %(name)s already exists"
-msgstr "La plantilla %(name)s ya existe"
+msgstr ""
+"La plantilla %(name)s ya existe"
#, python-format
msgid ""
@@ -441,118 +522,141 @@ msgstr ""
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
msgstr ""
-"La agrupación de almacenamiento %(pool)s especificada para la plantilla "
-"%(template)s no existe"
+"La agrupación de almacenamiento %(pool)s especificada para la plantilla %(template)s no existe"
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
msgstr ""
-"La agrupación de almacenamiento %(pool)s especificada para la plantilla "
-"%(template)s no está activa"
+"La agrupación de almacenamiento %(pool)s especificada para la plantilla %(template)s no está activa"
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr "Parámetro no válido '%(param)s' especificado para CDROM."
+msgstr ""
+"Parámetro no válido '%(param)s' especificado para CDROM."
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
msgstr ""
-"La red %(network)s especificada para la plantilla %(template)s no está activa"
+"La red %(network)s que se ha especificado para la plantilla %(template)s no está activa"
msgid "Template name must be a string"
-msgstr "El nombre de plantilla debe ser una serie"
+msgstr ""
+"El nombre de plantilla debe ser una serie"
msgid "Template icon must be a path to the image"
-msgstr "El icono de plantilla debe ser una vía de acceso a la imagen"
+msgstr ""
+"El icono de plantilla debe ser una vía de acceso a la imagen"
msgid "Template distribution must be a string"
-msgstr "La distribución de plantilla debe ser una serie"
+msgstr ""
+"La distribución de plantilla debe ser una serie"
msgid "Template distribution version must be a string"
-msgstr "La versión de distribución de plantilla debe ser una serie"
+msgstr ""
+"La versión de distribución de plantilla debe ser una serie"
msgid "The number of CPUs must be an integer greater than 0"
-msgstr "El número de CPUs debe ser un entero"
+msgstr ""
+"El número de CPU debe ser un entero mayor que 0"
msgid "Amount of memory (MB) must be an integer greater than 512"
-msgstr "La cantidad de memoria (MB) debe ser un entero mayor que 512"
+msgstr ""
+"La cantidad de memoria (MB) debe ser un entero mayor que 512"
msgid "Template CDROM must be a local or remote ISO file"
-msgstr "El CDROM de plantilla debe ser un archivo ISO local o remoto"
+msgstr ""
+"El CDROM de plantilla debe ser un archivo ISO local o remoto"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for template"
msgstr ""
-"URI de agrupación de almacenamiento no válido %(value)s especificado para la "
-"plantilla"
+"Se ha especificado un URI de agrupación de almacenamiento %(value)s no válido para la plantilla"
msgid "Specify an ISO image as CDROM or a base image to create a template"
-msgstr "Especifique una imagen de ISO como CDROM para crear una plantilla"
+msgstr ""
+"Especifique una imagen ISO como CDROM o una imagen base para crear una plantilla"
msgid "All networks for the template must be specified in a list."
-msgstr "Todas las redes para la plantilla deben especificarse en una lista."
+msgstr ""
+"Todas las redes para la plantilla deben especificarse en una lista."
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
msgstr ""
+"Especifique un volumen para una plantilla cuando la agrupación de almacenamiento sea iSCSI o SCSI"
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
msgstr ""
+"El volumen %(volume)s no se halla en la agrupación de almacenamiento %(pool)s"
#, python-format
msgid "Unable to create template due error: %(err)s"
-msgstr "No se puede crear la plantilla debido a un error: %(err)s"
+msgstr ""
+"No se ha podido crear la plantilla debido al error: %(err)s"
#, python-format
msgid "Unable to delete template due error: %(err)s"
-msgstr "No se puede suprimir la plantilla debido a un error: %(err)s"
+msgstr ""
+"No se ha podido suprimir la plantilla debido a un error: %(err)s"
msgid "Disk size must be an integer greater than 1GB."
msgstr ""
+"El tamaño del disco debe ser un entero mayor que 1 GB."
msgid "Template base image must be a valid local image file"
-msgstr "El CDROM de plantilla debe ser un archivo ISO local o remoto"
+msgstr ""
+"La imagen base de la plantilla debe ser un archivo de imagen base local válido"
#, python-format
msgid "Cannot identify base image %(path)s format"
msgstr ""
+"No se puede identificar el formato de la imagen base %(path)s"
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
msgstr ""
+"Cuando se especifique la topología de CPU, las VCPU deben ser un producto de sockets, núcleos y "
+"hebras. "
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
"zero."
msgstr ""
+"Cuando se especifica la topología de CPU, cada elemento debe ser un entero mayor que "
+"cero."
msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
+"formato de imagen de disco no válido. Formatos válidos: bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc."
#, python-format
msgid "Storage pool %(name)s already exists"
-msgstr "La agrupación de almacenamiento %(name)s ya existe"
+msgstr ""
+"Ya existe la agrupación de almacenamiento %(name)s"
#, python-format
msgid "Storage pool %(name)s does not exist"
-msgstr "La agrupación de almacenamiento %(name)s no existe"
+msgstr ""
+"No existe la agrupación de almacenamiento %(name)s"
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
msgstr ""
-"Especifique %(item)s para poder crear la agrupación de almacenamiento "
-"%(name)s"
+"Especifique %(item)s para crear la agrupación de almacenamiento %(name)s"
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr "No se puede suprimir la agrupación de almacenamiento activa %(name)s"
+msgstr ""
+"No se puede suprimir la agrupación de almacenamiento activo %(name)s"
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
-msgstr "No se pueden listar agrupaciones de almacenamiento. Detalles: %(err)s"
+msgstr ""
+"No se pueden listar las agrupaciones de almacenamiento. Detalles: %(err)s"
#, python-format
msgid "Unable to create storage pool %(name)s. Details: %(err)s"
@@ -564,58 +668,59 @@ msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
msgstr ""
-"No se puede obtener el número de volúmenes de almacenamiento en la "
-"agrupación de almacenamiento %(name)s. Detalles: %(err)s"
+"No se puede obtener el número de volúmenes de almacenamiento en la agrupación de almacenamiento %(name)s. Detalles: "
+"%(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
msgstr ""
-"No se puede activar la agrupación de almacenamiento %(name)s. Detalles: "
-"%(err)s"
+"No se puede activar la agrupación de almacenamiento %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
msgstr ""
-"No se puede desactivar la agrupación de almacenamiento %(name)s. Detalles: "
-"%(err)s"
+"No se puede desactivar la agrupación de almacenamiento %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
msgstr ""
-"No se puede suprimir la agrupación de almacenamiento %(name)s. Detalles: "
-"%(err)s"
+"No se puede suprimir la agrupación de almacenamiento %(name)s. Detalles: %(err)s"
#, python-format
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
msgstr ""
-"No se puede crear la agrupación de NFS ya que la vía de acceso de "
-"exportación %(path)s podría bloquearse durante el montaje"
+"No se puede crear la agrupación de NFS ya que la vía de acceso de exportación %(path)s podría bloquearse durante el montaje"
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
msgstr ""
-"No se puede crear la agrupación de NFS ya que el montaje de la vía de acceso "
-"de exportación %(path)s ha fallado"
+"No se puede crear la agrupación de NFS ya que ha fallado el montaje de la vía de acceso de exportación %(path)s"
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr "Tipo de agrupación de almacenamiento no soportado: %(type)s"
+msgstr ""
+"Tipo de agrupación de almacenamiento no admitido: %(type)s"
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
msgstr ""
+"Error al recuperar el XML de la agrupación de almacenamiento en %(pool)s"
msgid "Storage pool name must be a string without slashes (/)"
msgstr ""
+"El nombre de la agrupación de almacenamiento debe ser una serie sin barras inclinadas (/)"
msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
"iso"
msgstr ""
+"Los tipos de agrupación de almacenamiento admitidos son dir, netfs, logical, iscsi, isci y kimchi-"
+"iso"
msgid "Storage pool path must be a string"
-msgstr "La vía de acceso de la agrupación de almacenamiento debe ser una serie"
+msgstr ""
+"La vía de acceso de la agrupación de almacenamiento debe ser una serie"
msgid "Storage pool host must be a IP or hostname"
msgstr ""
@@ -623,25 +728,27 @@ msgstr ""
msgid "Storage pool device must be the absolute path to the block device"
msgstr ""
+"El dispositivo de la agrupación de almacenamiento debe ser la vía de acceso absoluta al dispositivo de bloque"
msgid "Storage pool devices parameter must be a list"
msgstr ""
-"El parámetro de los dispositivos de agrupación de almacenamiento debe ser "
-"una lista"
+"El parámetro de los dispositivos de agrupación de almacenamiento debe ser una lista"
msgid "Target IQN of an iSCSI pool must be a string"
-msgstr "El IQN destino de una agrupación de iSCSI debe ser una serie"
+msgstr ""
+"El IQN destino de una agrupación de iSCSI debe ser una serie"
msgid "Port of a remote storage server must be an integer between 1 and 65535"
msgstr ""
-"El puerto de un servidor de almacenamiento remoto debe ser un entero entre 1 "
-"y 65535"
+"El puerto de un servidor de almacenamiento remoto debe ser un entero entre 1 y 65535"
msgid "iSCSI target username must be a string"
msgstr ""
+"El nombre de usuario de destino de iSCSI debe ser una serie"
msgid "iSCSI target password must be a string"
msgstr ""
+"La contraseña de destino de iSCSI debe ser una serie"
msgid "Specify name and type to create a storage pool"
msgstr ""
@@ -652,20 +759,21 @@ msgid ""
"%(disk)s is not a valid disk/partition. Could not add it to the pool "
"%(pool)s."
msgstr ""
-"%(disk)s no es un disco/partición. No se ha podido añadir a la agrupación "
+"%(disk)s no es un disco/partición válido. No se ha podido añadir a la agrupación "
"%(pool)s."
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
msgstr ""
+"No se puede ampliar la agrupación lógica %(pool)s. Detalles: %(err)s"
msgid "The parameter disks only can be updated for logical storage pool."
msgstr ""
-"Los discos de parámetro sólo pueden actualizarse para la agrupación de "
-"almacenamiento lógico."
+"Los discos de parámetro sólo pueden actualizarse para la agrupación de almacenamiento lógico."
msgid "The SCSI host adapter name must be a string."
-msgstr "El nombre del adaptador de host SCSI debe ser una serie."
+msgstr ""
+"El nombre del adaptador de host SCSI debe ser una serie."
msgid "The storage pool kimchi_isos is reserved for internal use"
msgstr ""
@@ -676,92 +784,88 @@ msgid ""
"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"No se puede activar la agrupación de almacenamiento NFS %(name)s. El "
-"servidor NFS %(server)s está fuera de alcance."
+"No se puede activar la agrupación de almacenamiento NFS %(name)s. El servidor NFS %(server)s "
+"está fuera de alcance."
#, python-format
msgid ""
"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"No se puede desactivar la agrupación de almacenamiento NFS %(name)s. El "
-"servidor NFS %(server)s está fuera de alcance."
+"No se puede desactivar la agrupación de almacenamiento NFS %(name)s. El servidor NFS %(server)s "
+"está fuera de alcance."
#, python-format
msgid ""
"Unable to deactivate pool %(name)s as it is associated with some templates"
msgstr ""
-"No se puede desactivar la agrupación %(name)s ya que está asociada con "
-"algunas plantillas"
+"No se puede desactivar la agrupación %(name)s ya que está asociada con algunas plantillas"
#, python-format
msgid "Unable to delete pool %(name)s as it is associated with some templates"
msgstr ""
-"No se puede suprimir la agrupación %(name)s ya que está asociada con algunas "
-"plantillas"
+"No se puede suprimir la agrupación %(name)s ya que está asociada con algunas plantillas"
#, python-format
msgid ""
"A volume group named '%(name)s' already exists. Please, choose another name "
"to create the logical pool."
msgstr ""
-"Un grupo de volúmenes denominado '%(name)s' ya existe. Elija otro nombre "
+"Ya existe un grupo de volúmenes denominado '%(name)s'. Elija otro nombre "
"para crear la agrupación lógica."
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
msgstr ""
-"No se puede actualizar la base de datos con la información de exploración "
-"profunda debido a un error: %(err)s"
+"No se puede actualizar la base de datos con la información de exploración profunda debido a un error: %(err)s"
#, python-format
msgid "Storage volume %(name)s already exists"
-msgstr "El volumen de almacenamiento %(name)s ya existe"
+msgstr ""
+"Ya existe el volumen de almacenamiento %(name)s"
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
msgstr ""
-"El volumen de almacenamiento %(name)s no existe en la agrupación de "
-"almacenamiento %(pool)s"
+"No existe el volumen de almacenamiento %(name)s en la agrupación de almacenamiento %(pool)s"
#, python-format
msgid ""
"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
"not active"
msgstr ""
+"No se puede crear el volumen de almacenamiento %(volume)s porque la agrupación de almacenamiento %(pool)s "
+"no está activa"
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
msgstr ""
-"Especifique %(item)s para poder crear el volumen de almacenamiento %(volume)s"
+"Especifique %(item)s para crear el volumen de almacenamiento %(volume)s"
#, python-format
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
msgstr ""
-"No se pueden listar los volúmenes de almacenamiento porque la agrupación de "
-"almacenamiento %(pool)s no está activa"
+"No se pueden listar los volúmenes de almacenamiento porque la agrupación de almacenamiento %(pool)s no está activa"
#, python-format
msgid ""
"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
"%(err)s"
msgstr ""
-"No se puede crear el volumen de almacenamiento %(name)s en la agrupación de "
-"almacenamiento %(pool)s. Detalles: %(err)s"
+"No se puede crear el volumen de almacenamiento %(name)s en la agrupación de almacenamiento %(pool)s. Detalles: "
+"%(err)s"
#, python-format
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
msgstr ""
-"No se pueden listar volúmenes de almacenamiento en la agrupación de "
-"almacenamiento %(pool)s. Detalles: %(err)s"
+"No se pueden listar los volúmenes de almacenamiento en la agrupación de almacenamiento %(pool)s. Detalles: %(err)s"
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
msgstr ""
-"No se pueden borrar los volúmenes de almacenamiento %(name)s. Detalles: "
-"%(err)s"
+"No se pueden limpiar los volúmenes de almacenamiento %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
@@ -771,91 +875,110 @@ msgstr ""
#, python-format
msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
msgstr ""
-"No se puede redimensionar el volumen de almacenamiento %(name)s. Detalles: "
-"%(err)s"
+"No se puede redimensionar el volumen de almacenamiento %(name)s. Detalles: %(err)s"
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
msgstr ""
-"El tipo de almacenamiento %(type)s no da soporte a crear y suprimir volúmenes"
+"El tipo de almacenamiento %(type)s no admite la creación y supresión del volumen"
msgid "Storage volume name must be a string"
-msgstr "El nombre de volumen de almacenamiento debe ser una serie"
+msgstr ""
+"El nombre de volumen de almacenamiento debe ser una serie"
msgid "Storage volume allocation must be an integer number"
-msgstr "La asignación de volumen de almacenamiento debe ser un número entero"
+msgstr ""
+"La asignación de volumen de almacenamiento debe ser un número entero"
msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
+"Formato de volumen de almacenamiento no admitido. Formatos válidos: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
msgid "Storage volume requires a volume name"
-msgstr "El volumen de almacenamiento requiere un nombre de volumen"
+msgstr ""
+"El volumen de almacenamiento requiere un nombre de volumen"
#, python-format
msgid ""
"Unable to update database with storage volume information due error: %(err)s"
msgstr ""
-"No se puede actualizar la base de datos con la información de volumen de "
-"almacenamiento debido a un error: %(err)s"
+"No se puede actualizar la base de datos con la información del volumen de almacenamiento debido a un error: %(err)s"
#, python-format
msgid "Only one of parameter %(param)s can be specified"
msgstr ""
+"Sólo se puede especificar uno de los parámetros %(param)s"
#, python-format
msgid "Create volume from %(param)s is not supported"
msgstr ""
+"No se admite la creación del volumen de %(param)s"
msgid "Storage volume capacity must be an integer number."
msgstr ""
+"La capacidad del volumen de almacenamiento debe ser un número entero. "
msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
msgstr ""
+"El URL del volumen de almacenamiento debe ser http://, https://, ftp:// o ftps://."
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
msgstr ""
+"No se puede acceder al archivo %(url)s. Por favor, compruébelo. "
#, python-format
msgid ""
"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
"%(err)s"
msgstr ""
+"No se puede clonar el volumen de almacenamiento '%(name)s' en la agrupación '%(pool)s'. Detalles: "
+"%(err)s"
msgid "Specify chunk data and its size to upload a file."
msgstr ""
+"Especifique datos de fragmento y su tamaño para cargar un archivo. "
msgid "In order to upload a storage volume, specify the 'upload' parameter."
msgstr ""
+"Para cargar un volumen de almacenamiento, especifique el parámetro 'upload'. "
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
msgstr ""
+"No se pueden cargar datos de fragmento porque no coinciden con el tamaño de fragmento solicitado. "
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
msgstr ""
+"El volumen de almacenamiento %(vol)s no está bajo un proceso de carga. "
msgid "The upload chunk data will exceed the storage volume size."
msgstr ""
+"Los datos de fragmento de carga superarán el tamaño del volumen de almacenamiento. "
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
msgstr ""
+"No se pueden cargar datos de fragmento al volumen de almacenamiento. Detalles: %(err)s."
#, python-format
msgid "Interface %(name)s does not exist"
-msgstr "La interfaz %(name)s no existe"
+msgstr ""
+"No existe la interfaz %(name)s"
#, python-format
msgid "Network %(name)s already exists"
-msgstr "La red %(name)s ya existe"
+msgstr ""
+"Ya existe la red %(name)s"
#, python-format
msgid "Network %(name)s does not exist"
-msgstr "La red %(name)s no existe"
+msgstr ""
+"No existe la red %(name)s"
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
@@ -864,51 +987,61 @@ msgstr ""
#, python-format
msgid "Specify a network interface to create bridged network %(name)s"
-msgstr "Especifique una interfaz de red para crear una red puenteada %(name)s"
+msgstr ""
+"Especifique una interfaz de red para crear una red puenteada %(name)s"
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr "No se puede suprimir la red activa %(name)s"
+msgstr ""
+"No se puede suprimir la red activa %(name)s"
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
msgstr ""
-"La interfaz %(iface)s especificada para la red %(network)s ya está en uso"
+"La interfaz %(iface)s especificada para la red %(network)s ya se está utilizando"
msgid "Interface should be bare NIC, bonding or bridge device."
-msgstr "La interfaz debe ser dispositivo de puente, enlazado o NIC simple."
+msgstr ""
+"La interfaz debe ser dispositivo de puente, enlazado o NIC simple."
#, python-format
msgid "Unable to create network %(name)s. Details: %(err)s"
-msgstr "No se puede crear la red %(name)s. Detalles: %(err)s"
+msgstr ""
+"No se puede crear la red %(name)s. Detalles: %(err)s"
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
-msgstr "No se puede encontrar una dirección IP libre para la red '%(name)s'"
+msgstr ""
+"No se puede encontrar una dirección IP libre para la red '%(name)s'"
#, python-format
msgid "The interface %(iface)s already exists."
-msgstr "La interfaz %(iface)s ya existe"
+msgstr ""
+"La interfaz %(iface)s ya existe."
msgid "Network name must be a string without slashes (/) or quotes (\")"
msgstr ""
+"El nombre de red debe ser una serie sin barras inclinadas (/) ni comillas (\")"
msgid "Supported network types are isolated, NAT and bridge"
-msgstr "Los tipos de red soportados son aislada, NAT y puente"
+msgstr ""
+"Los tipos de red soportados son aislada, NAT y puente"
msgid "Network subnet must be a string with IP address and prefix or netmask"
msgstr ""
-"La subred de red debe ser una serie con dirección IP y prefijo o máscara de "
-"red"
+"La subred de red debe ser una serie con dirección IP y prefijo o máscara de red"
msgid "Network interface must be a string"
-msgstr "La interfaz de red debe ser una serie"
+msgstr ""
+"La interfaz de red debe ser una serie"
msgid "Network VLAN ID must be an integer between 1 and 4094"
-msgstr "El ID de VLAN de red debe ser un entero entre 1 y 4094"
+msgstr ""
+"El ID de VLAN de red debe ser un entero entre 1 y 4094"
msgid "Specify name and type to create a Network"
-msgstr "Especifique el nombre y el tipo para crear una red"
+msgstr ""
+"Especifique el nombre y el tipo para crear una red"
#, python-format
msgid ""
@@ -929,31 +1062,34 @@ msgstr ""
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
msgstr ""
-"El dispositivo de puente %(name)s no puede ser el dispositivo de conexión "
-"troncal de una VLAN."
+"El dispositivo en puente %(name)s no puede ser el dispositivo de conexión troncal de una VLAN."
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr "No se puede activar la interfaz %(iface)s: %(err)s."
+msgstr ""
+"No se ha podido activar la interfaz %(iface)s: %(err)s."
#, python-format
msgid ""
"Failed to activate interface %(iface)s. Please check the physical link "
"status."
msgstr ""
-"No se puede activar la interfaz %(iface)s. Compruebe el estado del enlace "
-"físico."
+"No se ha podido activar la interfaz %(iface)s. Compruebe el estado del enlace "
+"físico. "
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
msgstr ""
+"No se ha podido iniciar la red %(name)s. Detalles: %(err)s"
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr "El informe de depuración %(name)s no existe"
+msgstr ""
+"El informe de depuración %(name)s no existe"
msgid "Debug report tool not found in system"
-msgstr "Herramienta de informes de depuración no encontrada en el sistema"
+msgstr ""
+"Herramienta de informes de depuración no encontrada en el sistema"
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
@@ -963,6 +1099,7 @@ msgstr ""
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
msgstr ""
+"No se puede encontrar ningún informe de depuración con el nombre indicado %(name)s"
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
@@ -971,133 +1108,148 @@ msgstr ""
msgid "You should give a name for the debug report file."
msgstr ""
+"Debería dar un nombre al archivo de informe de depuración."
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
+"El nombre del informe de depuración debe ser una serie. Solamente se permiten letras, dígitos, carácter de subrayado ('_') "
+"y guión ('-'). "
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
msgstr ""
-"Un grupo de volúmenes denominado '%(name)s' ya existe. Elija otro nombre "
-"para crear la agrupación lógica."
+"El informe de depuración con el nombre especificado \"%(name)s\" ya existe. Utilice "
+"otro."
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr "Kimchi no utilizaba el servidor de almacenamiento %(server)s"
+msgstr ""
+"El servidor de almacenamiento %(server)s no lo ha utilizado Kimchi"
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr "Distro '%(name)s' no existe"
+msgstr ""
+"No existe Distro '%(name)s'"
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr "La partición %(name)s no existe en el host"
+msgstr ""
+"La partición %(name)s no existe en el host"
msgid "Unable to shutdown host machine as there are running virtual machines"
msgstr ""
-"No se puede concluir la máquina host ya que hay máquinas virtuales en "
-"ejecución"
+"No se puede concluir la máquina host ya que hay máquinas virtuales en ejecución"
msgid "Unable to reboot host machine as there are running virtual machines"
msgstr ""
-"No se puede rearrancar la máquina host ya que hay máquinas virtuales en "
-"ejecución"
+"No se puede rearrancar la máquina host ya que hay máquinas virtuales en ejecución"
#, python-format
msgid "Node device '%(name)s' not found"
-msgstr "No se ha encontrado el dispositivo de nodo '%(name)s'"
+msgstr ""
+"No se encuentra el dispositivo de nodos '%(name)s'"
msgid "Conflicting flag filters specified."
msgstr ""
+"Se han especificado filtros de distintivos en conflicto."
msgid "No packages marked for update"
-msgstr "No hay paquetes marcados para su actualización"
+msgstr ""
+"No hay paquetes marcados para su actualización"
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr "El paquete %(name)s no está marcado para su actualización."
+msgstr ""
+"El paquete %(name)s no se ha marcado para actualizarlo."
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
msgstr ""
-"Se ha producido un error al obtener paquetes marcados para su actualización. "
-"Detalles: %(err)s"
+"Error al obtener paquetes marcados para su actualización. Detalles: %(err)s"
msgid "There is no compatible package manager for this system."
-msgstr "No hay ningún gestor de paquetes compatible para este sistema."
+msgstr ""
+"No hay ningún gestor de paquetes compatible para este sistema."
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr "No se puede encontrar %(item)s en el almacén de datos"
+msgstr ""
+"No se puede encontrar %(item)s en el almacén de datos"
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr "URI %(uri)s no válido"
+msgstr ""
+"URI %(uri)s no válido"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
msgstr ""
-"Tiempo de espera excedido al ejecutar el mandato '%(cmd)s' después de "
-"%(seconds)s segundos"
+"Tiempo de espera excedido al ejecutar el mandato '%(cmd)s' después de %(seconds)s segundos"
msgid "Unable to choose a virtual machine name"
msgstr ""
+"No se puede elegir un nombre de máquina virtual"
#, python-format
msgid "Invalid data value '%(value)s'"
msgstr ""
+"Valor de datos '%(value)s' no válido"
#, python-format
msgid "Invalid data unit '%(unit)s'"
msgstr ""
+"Unidad de datos '%(unit)s' no válida"
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
-msgstr "Tipo de almacenamiento no válido. Tipos soportados: 'cdrom'"
+msgstr ""
+"Tipo de almacenamiento no válido. Tipos soportados: 'cdrom', 'disk'"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
msgstr ""
+"La vía de acceso '%(value)s' no es una vía de acceso local/remota válida para el dispositivo"
msgid "Only CDROM path can be update."
msgstr ""
+"Solamente se puede actualizar la vía de acceso de CDROM. "
#, python-format
msgid ""
"The storage device %(dev_name)s does not exist in the virtual machine "
"%(vm_name)s"
msgstr ""
+"El dispositivo de almacenamiento %(dev_name)s no existe en la máquina virtual. "
+"%(vm_name)s"
#, python-format
msgid "Error while creating new storage device: %(error)s"
msgstr ""
-"Se ha producido un error al crear el nuevo dispositivo de almacenamiento: "
-"%(error)s"
+"Error al crear el dispositivo de almacenamiento nuevo: %(error)s"
#, python-format
msgid "Error while updating storage device: %(error)s"
msgstr ""
-"Se ha producido un error al actualizar el dispositivo de almacenamiento: "
-"%(error)s"
+"Error al actualizar el dispositivo de almacenamiento: %(error)s"
#, python-format
msgid "Error while removing storage device: %(error)s"
msgstr ""
-"Se ha producido un error al eliminar el dispositivo de almacenamiento: "
-"%(error)s"
+"Error al eliminar el dispositivo de almacenamiento: %(error)s"
msgid "Do not support IDE device hot plug"
msgstr ""
+"No se admite la conexión en caliente del IDE"
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
"disk"
msgstr ""
-"Especifique el tipo y la vía de acceso para añadir un disco de máquina "
-"virtual nuevo"
+"Especifique el tipo y la vía de acceso y la agrupación/volumen para añadir "
+"un nuevo disco de máquina virtual"
msgid "Specify path to update virtual machine disk"
msgstr ""
@@ -1106,73 +1258,91 @@ msgstr ""
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
msgstr ""
+"Se ha alcanzado el límite de tipo de controlador %(type)s de %(limit)s dispositivos"
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
msgstr ""
+"No se puede recuperar la información de vía de acceso de disco para la agrupación o el volumen que se ha especificado: %(error)s"
msgid "Volume already in use by other virtual machine."
msgstr ""
+"El volumen ya lo está utilizando otra máquina virtual. "
msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
msgstr ""
-"Especifique el tipo y la vía de acceso para añadir un disco de máquina "
-"virtual nuevo"
+"Solo se puede especificar uno de vía de acceso o agrupación/volumen "
+"para añadir un nuevo disco de máquina virtual"
#, python-format
msgid ""
"Volume chosen with format %(format)s does not fit in the storage type "
"%(type)s"
msgstr ""
+"El volumen elegido con el formato %(format)s no se ajusta al tipo de almacenamiento"
+"%(type)s"
msgid "YUM Repository ID must be one word only string."
-msgstr "El ID de repositorio YUM debe ser una serie de una sola palabra."
+msgstr ""
+"El ID de repositorio YUM debe ser una serie de una sola palabra."
msgid "Repository URL must be an http://, ftp:// or file:// URL."
-msgstr "El URL de repositorio debe ser http://, ftp:// o archivo:// URL."
+msgstr ""
+"El URL de repositorio debe ser http://, ftp:// o archivo:// URL."
msgid ""
"Repository configuration is a dictionary with specific values according to "
"repository type."
msgstr ""
-"La configuración de repositorio es un diccionario con valores específicos "
-"según el tipo de repositorio."
+"La configuración de repositorio es un diccionario con valores específicos según "
+"el tipo de repositorio."
msgid "Distribution to DEB repository must be a string"
-msgstr "El repositorio de Distribución a DEB debe ser una serie"
+msgstr ""
+"El repositorio de Distribución a DEB debe ser una serie"
msgid "Components to DEB repository must be listed in a array"
-msgstr "El repositorio de Componentes a DEB debe estar listado en una matriz"
+msgstr ""
+"El repositorio de Componentes a DEB debe estar listado en una matriz"
msgid "Components to DEB repository must be a string"
-msgstr "El repositorio de Componentes a DEB debe ser una serie"
+msgstr ""
+"El repositorio de Componentes a DEB debe ser una serie"
msgid "Mirror list to repository must be a string"
msgstr ""
+"La lista de duplicados en el repositorios debe ser una serie"
msgid "YUM Repository name must be string."
-msgstr "El nombre del repositorio YUM debe ser una serie."
+msgstr ""
+"El nombre del repositorio YUM debe ser una serie."
msgid "GPG check must be a boolean value."
-msgstr "La comprobación de GPG debe ser un valor booleano."
+msgstr ""
+"La comprobación de GPG debe ser un valor booleano."
msgid "GPG key must be a URL pointing to the ASCII-armored file."
-msgstr "La clave GPG debe ser un URL que apunta al archivo blindado por ASCII."
+msgstr ""
+"La clave GPG debe ser un URL que apunta al archivo blindado por ASCII."
#, python-format
msgid "Could not update repository %(repo_id)s."
-msgstr "No se ha podido actualizar el repositorio %(repo_id)s."
+msgstr ""
+"No se puede actualizar el repositorio %(repo_id)s."
#, python-format
msgid "Repository %(repo_id)s does not exist."
-msgstr "El repositorio %(repo_id)s no existe."
+msgstr ""
+"El repositorio %(repo_id)s no existe. "
msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
"update a YUM repository."
msgstr ""
+"Especifique el URL base de repositorio, la lista de duplicados o el metaenlace para crear o "
+"actualizar un repositorio YUM. "
msgid "Repository management tool was not recognized for your system."
msgstr ""
@@ -1180,21 +1350,23 @@ msgstr ""
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr "El repositorio %(repo_id)s ya está habilitado."
+msgstr ""
+"El repositorio %(repo_id)s ya está habilitado."
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr "El repositorio %(repo_id)s ya está inhabilitado."
+msgstr ""
+"El repositorio %(repo_id)s ya está inhabilitado. "
#, python-format
msgid "Could not remove repository %(repo_id)s."
-msgstr "No se ha podido eliminar el repositorio %(repo_id)s."
+msgstr ""
+"No se ha podido eliminar el repositorio %(repo_id)s."
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
msgstr ""
-"No se ha podido grabar el archivo de configuración del repositorio "
-"%(repo_file)s"
+"No se ha podido escribir en el archivo de configuración del repositorio %(repo_file)s"
msgid "Specify repository distribution in order to create a DEB repository."
msgstr ""
@@ -1202,668 +1374,856 @@ msgstr ""
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr "No se ha podido habilitar el repositorio %(repo_id)s."
+msgstr ""
+"No se ha podido habilitar el repositorio %(repo_id)s."
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr "No se ha podido inhabilitar el repositorio %(repo_id)s."
+msgstr ""
+"No se ha podido inhabilitar el repositorio %(repo_id)s."
msgid "YUM Repository ID already exists"
-msgstr "El ID de repositorio de YUM ya existe"
+msgstr ""
+"El ID de repositorio de YUM ya existe"
msgid "YUM Repository name must be a string"
-msgstr "El nombre del repositorio de YUM debe ser una serie"
+msgstr ""
+"El nombre del repositorio de YUM debe ser una serie"
#, python-format
msgid "Unable to list repositories. Details: '%(err)s'"
-msgstr "No se pueden listar repositorios. Detalles: '%(err)s'"
+msgstr ""
+"No se pueden listar los repositorios. Detalles: '%(err)s'"
#, python-format
msgid "Unable to retrieve repository information. Details: '%(err)s'"
-msgstr "No se puede recuperar información del repositorio. Detalles: '%(err)s'"
+msgstr ""
+"No se puede recuperar información de repositorios. Detalles: '%(err)s'"
#, python-format
msgid "Unable to add repository. Details: '%(err)s'"
-msgstr "No se puede añadir el repositorio. Detalles: '%(err)s'"
+msgstr ""
+"No se puede añadir el repositorio. Detalles: '%(err)s'"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr "No se puede eliminar el repositorio. Detalles: '%(err)s'"
+msgstr ""
+"No se puede eliminar el repositorio. Detalles: '%(err)s'"
#, python-format
msgid ""
"Configuration items: '%(items)s' are not supported by repository manager"
msgstr ""
+"Elementos de configuración: el gestor de repositorios no admite '%(items)s'"
msgid "Repository metalink must be an http://, ftp:// or file:// URL."
msgstr ""
+"El metaenlace de repositorio debe ser http://, ftp:// o el archivo:// URL."
msgid "Cannot specify mirrorlist and metalink at the same time."
msgstr ""
+"No se puede especificar la lista de duplicados y el metaenlace a la vez. "
#, python-format
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
msgstr ""
+"Se ha de detener la máquina virtual '%(vm)s' antes de crear una instantánea de la misma. "
#, python-format
msgid ""
"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"No se puede crear la instantánea '%(name)s' en la máquina virtual '%(vm)s'. Detalles: "
+"%(err)s"
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
msgstr ""
+"La instantánea '%(name)s' no existe en la máquina virtual '%(vm)s'."
#, python-format
msgid ""
"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"No se puede recuperar la instantánea '%(name)s' en la máquina virtual '%(vm)s'. Detalles: "
+"%(err)s"
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
msgstr ""
+"No se pueden listar las instantáneas en la máquina virtual '%(vm)s'. Detalles: %(err)s"
#, python-format
msgid ""
"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"No se puede suprimir la instantánea '%(name)s' en la máquina virtual '%(vm)s'. Detalles: "
+"%(err)s"
#, python-format
msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"No se puede recuperar la instantánea actual de la máquina virtual '%(vm)s'. Detalles: "
+"%(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
msgstr ""
+"No se puede revertir la máquina virtual '%(vm)s' en la instantánea '%(name)s'. Detalles: "
+"%(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
+"No se puede crear la instantánea de la máquina virtual '%(vm)s' porque contiene un "
+"disco con el formato '%(format)s'; sólo se admite 'qcow2'. "
msgid "The number of vCPUs is too large for this system."
msgstr ""
+"El número de vCPUs es demasiado grande para este sistema. "
msgid "Invalid vCPU/topology combination."
msgstr ""
+"Combinación de vCPU/topología no válida."
msgid "This host (or current configuration) does not allow CPU topology."
msgstr ""
+"Este host (o la configuración actual) no permite la topología de CPU. "
msgid "ERROR CODE"
-msgstr "CÓDIGO DE ERROR"
+msgstr ""
+"CÓDIGO DE ERROR"
msgid "REASON"
-msgstr "RAZÓN"
+msgstr ""
+"RAZÓN"
msgid "STACK"
-msgstr "PILA"
+msgstr ""
+"PILA"
msgid "Go to Homepage"
-msgstr "Ir a la página inicial"
+msgstr ""
+"Ir a la página inicial"
msgid "Create a New Virtual Machine"
-msgstr "Crear una nueva máquina virtual"
+msgstr ""
+"Crear una nueva máquina virtual"
msgid "Virtual Machine Name"
-msgstr "Nombre de máquina virtual"
+msgstr ""
+"Nombre de máquina virtual"
msgid ""
"The name used to identify the virtual machine. If omitted, a name will be "
"chosen based on the template used."
msgstr ""
-"El nombre que se utiliza para identificar la máquina virtual. Si se omite, "
-"se elegirá un nombre basándose en la plantilla utilizada."
+"El nombre que se utiliza para identificar la máquina virtual. Si se omite, se "
+"elegirá un nombre basándose en la plantilla utilizada."
msgid "Template"
-msgstr "Plantilla"
+msgstr ""
+"Plantilla"
msgid "Please create a template first."
-msgstr "Cree una plantilla primero."
+msgstr ""
+"Cree una plantilla primero."
msgid "Create a Template"
-msgstr "Crear una plantilla"
+msgstr ""
+"Crear una plantilla"
msgid "Please choose a template."
-msgstr "Elija una plantilla."
+msgstr ""
+"Elija una plantilla."
msgid "OS"
-msgstr "SO"
+msgstr ""
+"SO"
msgid "OS Version"
-msgstr "Versión del SO"
+msgstr ""
+"Versión del SO"
msgid "CPUS"
-msgstr "CPUS"
+msgstr ""
+"CPUS"
msgid "Memory"
-msgstr "Memoria"
+msgstr ""
+"Memoria"
msgid "Create"
-msgstr "Crear"
+msgstr ""
+"Crear"
msgid "Creating..."
msgstr ""
+"Creando..."
msgid "Edit Guest"
-msgstr "Editar invitado"
+msgstr ""
+"Editar invitado"
msgid "General"
-msgstr "General"
+msgstr ""
+"General"
msgid "Storage"
-msgstr "Almacenamiento"
+msgstr ""
+"Almacenamiento"
msgid "Interface"
-msgstr "Interfaz"
+msgstr ""
+"Interfaz"
msgid "Permission"
-msgstr "Versión"
+msgstr ""
+"Permiso"
msgid "Host PCI Device"
msgstr ""
+"Dispositivo PCI de host"
msgid "Snapshot"
msgstr ""
+"Instantánea"
msgid "Name"
-msgstr "Nombre"
+msgstr ""
+"Nombre"
msgid "CPUs"
-msgstr "CPUs"
+msgstr ""
+"CPUs"
msgid "Memory (MB)"
-msgstr "Memoria"
+msgstr ""
+"Memoria (MB)"
msgid "Icon"
-msgstr "Icono"
+msgstr ""
+"Icono"
msgid "Device"
-msgstr "Nombre de dispositivo"
+msgstr ""
+"Dispositivo"
msgid "Path"
-msgstr "Vía de acceso NFS"
+msgstr ""
+"Vía de acceso"
msgid "Network"
-msgstr "Red"
+msgstr ""
+"Red"
msgid "Type"
-msgstr "Tipo"
+msgstr ""
+"Tipo"
msgid "MAC Address"
msgstr ""
+"Dirección MAC"
msgid "Available system users and groups"
msgstr ""
+"Usuarios y grupos del sistema disponibles"
msgid "Selected system users and groups"
msgstr ""
+"Usuarios y grupos del sistema seleccionados"
msgid "User"
msgstr ""
+"Usuario"
msgid "All"
-msgstr "Todo"
+msgstr ""
+"Todo"
msgid "To Add"
msgstr ""
+"A añadir"
msgid "Added"
msgstr ""
+"Añadido"
msgid "filter"
msgstr ""
+"filtrar"
msgid "Product"
msgstr ""
+"Producto"
msgid "Vendor"
-msgstr "Proveedor"
+msgstr ""
+"Proveedor"
msgid "Created"
msgstr ""
+"Creado"
msgid "Save"
-msgstr "Guardar"
+msgstr ""
+"Guardar"
msgid "Replace"
-msgstr "Sustituir"
+msgstr ""
+"Sustituir"
msgid "Detach"
-msgstr "Desconectar"
+msgstr ""
+"Desconectar"
msgid "Cancel"
-msgstr "Cancelar"
+msgstr ""
+"Cancelar"
msgid "revert"
msgstr ""
+"revertir"
msgid "Add a Storage Device to VM"
-msgstr "Añadir un dispositivo de almacenamiento a VM"
+msgstr ""
+"Añadir un dispositivo de almacenamiento a VM"
msgid "Device Type"
-msgstr "Tipo de dispositivo"
+msgstr ""
+"Tipo de dispositivo"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "El tipo de dispositivo. Actualmente sólo está soportado \"cdrom\"."
+msgstr ""
+"El tipo de dispositivo. Actualmente se da soporte a \"cdrom\" y \"disk\"."
msgid "Storage Pool"
-msgstr "Agrupación de almacenamiento"
+msgstr ""
+"Agrupación de almacenamiento"
msgid "Storage pool which volume located in"
-msgstr "La vía de acceso de la agrupación de almacenamiento debe ser una serie"
+msgstr ""
+"Agrupación de almacenamiento con volumen ubicado en"
msgid "Storage Volume"
-msgstr "Nombre de agrupación de almacenamiento"
+msgstr ""
+"Volumen de almacenamiento"
msgid "Storage volume to be attached"
-msgstr "El nombre de volumen de almacenamiento debe ser una serie"
+msgstr ""
+"Volumen de almacenamiento que se va a adjuntar"
msgid "File Path"
-msgstr "Vía de acceso de archivo"
+msgstr ""
+"Vía de acceso de archivo"
msgid "The ISO file path in the server for CDROM."
-msgstr "La vía de acceso del archivo ISO en el servidor para el CDROM."
+msgstr ""
+"La vía de acceso del archivo ISO en el servidor para el CDROM."
msgid "Attach"
-msgstr "Conectar"
+msgstr ""
+"Conectar"
msgid "Start"
-msgstr "Iniciar"
+msgstr ""
+"Iniciar"
msgid "Reset"
-msgstr "Restablecer"
+msgstr ""
+"Restablecer"
msgid "Pause"
msgstr ""
+"Poner en pausa"
msgid "Resume"
msgstr ""
+"Reanudar"
msgid "Power Off"
msgstr ""
+"Apagar"
msgid "Actions"
-msgstr "Acciones"
+msgstr ""
+"Acciones"
msgid "Connect"
-msgstr "Conectar"
+msgstr ""
+"Conectar"
msgid "Clone"
msgstr ""
+"Clonar"
msgid "Edit"
-msgstr "Editar"
+msgstr ""
+"Editar"
msgid "Shut Down"
-msgstr "Concluir"
+msgstr ""
+"Concluir"
msgid "Delete"
-msgstr "Suprimir"
+msgstr ""
+"Suprimir"
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
-"El nombre de usuario o contraseña que ha especificado es incorrecto. Por "
-"favor, vuelva a intentarlo."
+"El nombre de usuario o contraseña que ha especificado es incorrecto. Por favor, vuelva a intentarlo."
msgid "This field is required."
-msgstr "Este campo es obligatorio."
+msgstr ""
+"Este campo es obligatorio."
msgid "Log in"
-msgstr "Iniciar sesión"
+msgstr ""
+"Iniciar sesión"
msgid "Logging in..."
-msgstr "Iniciando sesión..."
+msgstr ""
+"Iniciando sesión..."
msgid "Host"
-msgstr "Host"
+msgstr ""
+"Host"
msgid "Guests"
-msgstr "Invitados"
+msgstr ""
+"Invitados"
msgid "Templates"
-msgstr "Plantillas"
+msgstr ""
+"Plantillas"
msgid "Failed to get application configuration"
-msgstr "No se ha podido obtener la configuración de la aplicación"
+msgstr ""
+"No se ha podido obtener la configuración de la aplicación"
msgid "This is not a valid Linux path"
-msgstr "No es una vía de acceso de Linux válida"
+msgstr ""
+"No es una vía de acceso de Linux válida"
msgid "This is not a valid URL."
-msgstr "No es un URL válido."
+msgstr ""
+"No es un URL válido."
msgid "No such data available."
-msgstr "No hay datos de ese tipo disponibles."
+msgstr ""
+"No hay datos de ese tipo disponibles."
msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"No se puede contactar con el sistema host, Verifique que el sistema host "
-"está activo y que tiene conectividad de red con él. Respuesta de solicitud "
-"HTTP %1. "
+"No se puede contactar con el sistema host. Verifique que el sistema host está activo y que "
+"tiene conectividad de red con él. Respuesta de solicitud HTTP %1. "
msgid "Unable to read file."
msgstr ""
+"No se puede leer el archivo. "
msgid "Error while uploading file."
msgstr ""
+"Error al actualizar el archivo. "
msgid "Delete Confirmation"
-msgstr "Confirmación de supresión"
+msgstr ""
+"Confirmación de supresión"
msgid "OK"
-msgstr "Aceptar"
+msgstr ""
+"Aceptar"
msgid "Confirm"
-msgstr "Confirmar"
+msgstr ""
+"Confirmar"
msgid "Warning"
-msgstr "Aviso"
+msgstr ""
+"Aviso"
msgid "Cloning..."
msgstr ""
+"Clonación..."
msgid "Loading..."
-msgstr "Cargando..."
+msgstr ""
+"Cargando..."
msgid "An error occurred while retrieving system information."
msgstr ""
+"Se ha producido un error al recuperar la información del sistema."
msgid "Retry"
-msgstr "Reintentar"
+msgstr ""
+"Reintentar"
msgid "Detailed message:"
-msgstr "Mensaje detallado:"
+msgstr ""
+"Mensaje detallado:"
msgid "No ISO found"
msgstr ""
+"No se ha encontrado ningún ISO"
msgid "This is not a valid ISO file."
-msgstr "No es un archivo ISO válido."
+msgstr ""
+"No es un archivo ISO válido."
msgid "This may take a long time. Do you want to continue?"
-msgstr "Tardará mucho tiempo. ¿Desea continuar?"
+msgstr ""
+"Esta operación puede necesitar mucho tiempo. ¿Desea continuar?"
msgid "This will permanently delete the template. Would you like to continue?"
-msgstr "Esto suprimirá permanentemente la plantilla. ¿Desea continuar?"
+msgstr ""
+"Así se suprimirá la plantilla de forma permanente. ¿Desea continuar?"
msgid "Unable to shut down system as there are some virtual machines running!"
msgstr ""
-"No se puede concluir el sistema ya que hay algunas máquinas virtuales en "
-"ejecución."
+"No se puede concluir el sistema ya que hay algunas máquinas virtuales en ejecución."
msgid "Max:"
-msgstr "Máx.:"
+msgstr ""
+"Máx.:"
msgid "Utilization"
-msgstr "Utilización"
+msgstr ""
+"Utilización"
msgid "Available"
-msgstr "Disponible"
+msgstr ""
+"Disponible"
msgid "Read Rate"
-msgstr "Velocidad de lectura"
+msgstr ""
+"Velocidad de lectura"
msgid "Write Rate"
-msgstr "Velocidad de escritura"
+msgstr ""
+"Velocidad de escritura"
msgid "Received"
-msgstr "Recibido"
+msgstr ""
+"Recibido"
msgid "Sent"
-msgstr "Enviado"
+msgstr ""
+"Enviado"
msgid ""
"Shutting down or restarting host will cause unsaved work lost. Continue to "
"shut down/restarting?"
msgstr ""
-"Concluir o reiniciar el host hará que se pierda el trabajo no guardado. "
-"¿Desea continuar para concluir/reiniciar?"
+"Concluir o reiniciar el host hará que se pierda el trabajo no guardado. ¿Desea continuar "
+"para concluir/reiniciar?"
msgid ""
"Repository will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"El repositorio se eliminará de forma permanente y no se puede recuperar. "
-"¿Desea continuar?"
+"El repositorio se eliminará de forma permanente y no se puede recuperar. ¿Desea "
+"continuar?"
msgid "Repositories"
-msgstr "Repositorios"
+msgstr ""
+"Repositorios"
msgid "ID"
-msgstr "ID"
+msgstr ""
+"ID"
msgid "Base URL"
-msgstr "URL base"
+msgstr ""
+"URL base"
msgid "Is Mirror"
-msgstr "Es duplicado"
+msgstr ""
+"Es duplicado"
msgid "URL Args"
-msgstr "Args de URL"
+msgstr ""
+"Args de URL"
msgid "Enabled"
-msgstr "Habilitado"
+msgstr ""
+"Habilitado"
msgid "GPG Check"
-msgstr "Comprobación GPG"
+msgstr ""
+"Comprobación GPG"
msgid "GPG Key"
-msgstr "Clave GPG"
+msgstr ""
+"Clave GPG"
msgid "Add"
-msgstr "Añadir"
+msgstr ""
+"Añadir"
msgid "Remove"
-msgstr "Eliminar"
+msgstr ""
+"Eliminar"
msgid "Enable"
-msgstr "Habilitar"
+msgstr ""
+"Habilitar"
msgid "Disable"
-msgstr "Inhabilitar"
+msgstr ""
+"Inhabilitar"
msgid "Software Updates"
-msgstr "Actualizaciones de software"
+msgstr ""
+"Actualizaciones de software"
msgid "Package Name"
-msgstr "Nombre de paquete"
+msgstr ""
+"Nombre de paquete"
msgid "Version"
-msgstr "Versión"
+msgstr ""
+"Versión"
msgid "Architecture"
-msgstr "Arquitectura"
+msgstr ""
+"Arquitectura"
msgid "Repository"
-msgstr "Repositorio"
+msgstr ""
+"Repositorio"
msgid "Update All"
-msgstr "Actualizar todo"
+msgstr ""
+"Actualizar todo"
msgid "Updating..."
-msgstr "Actualizando..."
+msgstr ""
+"Actualizando..."
msgid "Failed to retrieve packages update information."
msgstr ""
+"No se ha podido recuperar la información de actualización de paquetes. "
msgid "Failed to update package(s)."
-msgstr "No se han podido actualizar paquetes."
+msgstr ""
+"No se han podido actualizar paquetes."
msgid ""
"Debug report will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"El informe de depuración se eliminará permanentemente y no se puede "
-"recuperar. ¿Desea continuar?"
+"El informe de depuración se eliminará permanentemente y no se puede recuperar. ¿Desea "
+"continuar?"
msgid "Debug Reports"
-msgstr "Informes de depuración"
+msgstr ""
+"Informes de depuración"
msgid "Generated Time"
-msgstr "Tiempo generado"
+msgstr ""
+"Tiempo generado"
msgid "Generate"
-msgstr "Generar"
+msgstr ""
+"Generar"
msgid "Generating..."
-msgstr "Generando..."
+msgstr ""
+"Generando..."
msgid "Rename"
-msgstr "Redenominar"
+msgstr ""
+"Redenominar"
msgid "Download"
-msgstr "Descargar"
+msgstr ""
+"Descargar"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
"hyphen ('-')."
msgstr ""
-"El nombre de informe debe contener sólo letras, dígitos y/o guión ('-')."
+"El nombre de informe debe contener solamente letras, dígitos, el carácter de subrayado ('_') y/o "
+"de guión ('-')."
msgid "Pending..."
-msgstr "Cargando..."
+msgstr ""
+"Pendiente..."
msgid "Report name is the same as the original one."
msgstr ""
+"El nombre de informe es el mismo que el original. "
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
"cannot be undone. Would you like to continue?"
msgstr ""
-"Esto suprimirá la máquina virtual y sus discos virtuales. Esta operación no "
-"puede deshacerse. ¿Desea continuar?"
+"Esto suprimirá la máquina virtual y sus discos virtuales. Esta operación "
+"no se puede deshacer. ¿Desea continuar?"
msgid "Power off Confirmation"
-msgstr "Confirmación de supresión"
+msgstr ""
+"Confirmación de apagado"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
"cache in the guest. Would you like to continue?"
msgstr ""
+"Esta acción puede producir resultados no deseables, por ejemplo almacenamiento de memoria caché en disco "
+"sin vaciar en el invitado. ¿Desea continuar?"
msgid "Reset Confirmation"
-msgstr "Confirmación de supresión"
+msgstr ""
+"Confirmación de restablecimiento"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
"Would you like to continue?"
msgstr ""
+"Existe un riesgo de pérdida de datos causado por el restablecimiento sin la conclusión del sistema operativo invitado. "
+"¿Desea continuar?"
msgid "Shut Down Confirmation"
-msgstr "Confirmación de supresión"
+msgstr ""
+"Confirmación de conclusión"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
-msgstr "Esto suprimirá permanentemente la plantilla. ¿Desea continuar?"
+msgstr ""
+"Tenga en cuenta que el sistema operativo del invitado puede ignorar esta solicitud. ¿Desea continuar?"
msgid "Virtual Machine delete Confirmation"
msgstr ""
+"Confirmación de supresión de la máquina virtual "
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
msgstr ""
+"Esta máquina virtual no es persistente. Con la acción Apagar se suprimirá. ¿Desea continuar?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
"default storage pool. The same will happen when the target pool does not "
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
+"Cuando el invitado de destino tiene volúmenes SCSI o iSCSI, se clonarán en "
+"la agrupación de almacenamiento predeterminada. Ocurrirá lo mismo cuando la agrupación de destino no "
+"tenga espacio suficiente para clonar los volúmenes. ¿Desea continuar?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
msgstr ""
-"Este CDROM se desconectará de forma permanente pero puede volver a "
-"conectarlo. ¿Desea continuar para desconectarlo?"
+"Este CDROM se desconectará de forma permanente pero puede volver a conectarlo. ¿Desea "
+"continuar para desconectarlo?"
msgid "Attaching..."
-msgstr "Conectando..."
+msgstr ""
+"Conectando..."
msgid "Replacing..."
-msgstr "Sustituyendo..."
+msgstr ""
+"Sustituyendo..."
msgid "Successfully attached!"
-msgstr "¡Conectado correctamente!"
+msgstr ""
+"¡Conectado correctamente!"
msgid "Successfully replaced!"
-msgstr "¡Sustituido correctamente!"
+msgstr ""
+"¡Sustituido correctamente!"
msgid "Successfully detached!"
-msgstr "¡Desconectado correctamente!"
+msgstr ""
+"¡Desconectado correctamente!"
msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
msgstr ""
+"Este disco se desconectará de forma permanente y podrá volver a conectarlo. ¿Desea continuar"
+"desconectándolo?"
msgid "interface:"
msgstr ""
+"interfaz: "
msgid "address:"
msgstr ""
+"dirección:"
msgid "link_type:"
msgstr ""
+"link_type:"
msgid "block:"
msgstr ""
+"bloque:"
msgid "drive_type:"
msgstr ""
+"drive_type:"
msgid "model:"
msgstr ""
+"modelo:"
msgid "Affected devices:"
msgstr ""
+"Dispositivos afectados:"
msgid "The VLAN id must be between 1 and 4094."
-msgstr "El ID de VLAN debe estar entre 1 y 4094."
+msgstr ""
+"El ID de VLAN debe estar entre 1 y 4094."
msgid "unavailable"
-msgstr "no disponible"
+msgstr ""
+"no disponible"
msgid ""
"This action will interrupt network connectivity for any virtual machine that "
"depend on this network."
msgstr ""
-"Esta acción interrumpirá la conectividad de red para cualquier máquina "
-"virtual que dependa de esta red."
+"Esta acción interrumpirá la conectividad de red para cualquier máquina virtual que "
+"dependa de esta red."
msgid "Create a network"
-msgstr "Crear una red"
+msgstr ""
+"Crear una red"
msgid ""
"This network is not persistent. Instead of stop, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Esta agrupación de almacenamiento no es persistente. En lugar de desactivar, "
-"esta acción la suprimirá permanentemente. ¿Desea continuar?"
+"Esta red no es persistente. En lugar de detenerla, esta acción "
+"la suprimirá de forma permanente. ¿Desea continuar?"
msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
+"Es posible que el código VLAN ponteado no funcione bien si NetworkManager está habilitado. Debería "
+"considerar la posibilidad de inhabilitarlo. "
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
msgstr ""
-"Esto suprimirá permanentemente la agrupación de almacenamiento. ¿Desea "
-"continuar?"
+"Así se suprimirá la agrupación de almacenamiento de forma permanente. ¿Desea continuar?"
msgid "This storage pool is empty."
-msgstr "Esta agrupación de almacenamiento está vacía."
+msgstr ""
+"Esta agrupación de almacenamiento está vacía."
msgid ""
"It will format your disk and you will loose any data in there, are you sure "
@@ -1873,471 +2233,609 @@ msgstr ""
"de que desea continuar? "
msgid "SCSI Fibre Channel"
-msgstr "Canal de fibra de SCSI"
+msgstr ""
+"Canal de fibra de SCSI"
msgid "No SCSI adapters found."
-msgstr "No se han encontrado adaptadores SCSI."
+msgstr ""
+"No se han encontrado adaptadores SCSI."
msgid "Loading iSCSI targets..."
msgstr ""
+"Se están cargando los destinos iSCSI..."
msgid "No iSCSI found. Please input one."
msgstr ""
+"No se ha encontrado el iSCSI. Indique uno. "
msgid "Failed to load iSCSI targets."
msgstr ""
+"No se han podido cargar los destinos iSCSI. "
msgid "The storage pool name can not be blank."
-msgstr "El nombre de la agrupación de almacenamiento no puede estar en blanco."
+msgstr ""
+"El nombre de la agrupación de almacenamiento no puede estar en blanco."
msgid "The storage pool path can not be blank."
msgstr ""
"La vía de acceso de la agrupación de almacenamiento no puede estar en blanco."
msgid "NFS server mount path can not be blank."
-msgstr "La vía de acceso de montaje del servidor NFS no puede estar en blanco."
+msgstr ""
+"La vía de acceso de montaje del servidor NFS no puede estar en blanco."
msgid "Invalid NFS mount path."
-msgstr "Vía de acceso de montaje de NFS no válida."
+msgstr ""
+"Vía de acceso de montaje de NFS no válida."
msgid "No logical device selected."
-msgstr "No se ha seleccionado ningún dispositivo lógico."
+msgstr ""
+"No se ha seleccionado ningún dispositivo lógico."
msgid "The iSCSI target can not be blank."
-msgstr "El destino iSCSI no puede estar en blanco."
+msgstr ""
+"El destino iSCSI no puede estar en blanco."
msgid "Server name can not be blank."
-msgstr "El nombre de servidor no puede estar en blanco."
+msgstr ""
+"El nombre de servidor no puede estar en blanco."
msgid "This is not a valid Server Name or IP. Please, modify it."
msgstr ""
+"No es un nombre de servidor válido o IP válida. Modifique el valor. "
msgid "Looking for available partitions ..."
-msgstr "Buscando particiones disponibles..."
+msgstr ""
+"Buscando particiones disponibles..."
msgid "No available partitions found."
-msgstr "No se han encontrado particiones disponibles."
+msgstr ""
+"No se han encontrado particiones disponibles."
msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Esta agrupación de almacenamiento no es persistente. En lugar de desactivar, "
-"esta acción la suprimirá permanentemente. ¿Desea continuar?"
+"Esta agrupación de almacenamiento no es persistente. En lugar de desactivar, esta acción "
+"la suprimirá de forma permanente. ¿Desea continuar?"
msgid "Unable to retrieve partitions information."
-msgstr "No se puede recuperar información del repositorio. Detalles: '%(err)s'"
+msgstr ""
+"No se puede recuperar la información de particiones. "
msgid "In progress..."
msgstr ""
+"En curso..."
msgid "Failed!"
msgstr ""
+"Error"
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
msgstr ""
+"La vía de acceso de CDROM ha de ser una vía de acceso local/remota válida y no puede dejarse en blanco. "
msgid "Disk pool or volume cannot be blank."
-msgstr "El nombre de la agrupación de almacenamiento no puede estar en blanco."
+msgstr ""
+"El volumen o la agrupación de discos no puede estar en blanco."
msgid "Peers"
msgstr ""
+"Homólogos"
msgid "Searching"
msgstr ""
+"Buscando"
msgid "No peers found."
msgstr ""
+"No se han encontrado homólogos."
msgid "Help"
-msgstr "Ayuda"
+msgstr ""
+"Ayuda"
msgid "About"
-msgstr "Acerca de"
+msgstr ""
+"Acerca de"
msgid "Log out"
-msgstr "Finalizar sesión"
+msgstr ""
+"Finalizar sesión"
msgid "Version:"
-msgstr "Versión:"
+msgstr ""
+"Versión:"
msgid "Session timeout, please re-login."
msgstr ""
+"Se ha excedido el tiempo de espera de sesión; vuelva a iniciar la sesión."
msgid "User Name"
-msgstr "Nombre de usuario"
+msgstr ""
+"Nombre de usuario"
msgid "Password"
-msgstr "Contraseña"
+msgstr ""
+"Contraseña"
msgid "Generate a New Debug Report"
-msgstr "Generar un Informe de depuración nuevo"
+msgstr ""
+"Generar un Informe de depuración nuevo"
msgid "Report Name"
-msgstr "Nombre de informe"
+msgstr ""
+"Nombre de informe"
msgid ""
"The name used to identify the report. If omitted, a name will be chosen "
"based on current time. Name can contain: letters, digits, underscore (\"_\") "
"and hyphen (\"-\")."
msgstr ""
-"El nombre que se utiliza para identificar el informe. Si se omite, se "
-"elegirá un nombre basándose en la hora actual. El nombre puede contener: "
-"letras, dígitos y guión (\"-\")."
+"El nombre que se utiliza para identificar el informe. Si se omite, se elegirá un nombre "
+"en base a la hora actual. El nombre puede contener: letras, dígitos, carácter de subrayado (\"_\") "
+"y de guión (\"-\")."
msgid "Rename a Debug Report"
-msgstr "Generar un Informe de depuración nuevo"
+msgstr ""
+"Renombre un informe de depuración"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
"hyphen (\"-\")."
msgstr ""
-"El nombre que se utiliza para identificar el informe. Si se omite, se "
-"elegirá un nombre basándose en la hora actual. El nombre puede contener: "
-"letras, dígitos y guión (\"-\")."
+"El nombre utilizado para identificar el informe. El nombre puede contener: letras, dígitos y "
+"el carácter de guión (\"-\")."
msgid "Submit"
msgstr ""
+"Enviar"
msgid "Add a Repository"
-msgstr "Añadir un repositorio"
+msgstr ""
+"Añadir un repositorio"
msgid "Identifier"
-msgstr "Identificador"
+msgstr ""
+"Identificador"
msgid "Single word, unique identifier for the repository."
-msgstr "Identificador exclusivo de una sola palabra para el repositorio."
+msgstr ""
+"Identificador exclusivo de una sola palabra para el repositorio."
msgid "Textual name for the repository."
-msgstr "Nombre textual para el repositorio."
+msgstr ""
+"Nombre textual para el repositorio."
msgid "URL"
-msgstr "URL"
+msgstr ""
+"URL"
msgid "Required Field"
-msgstr "Campo obligatorio"
+msgstr ""
+"Campo obligatorio"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
-msgstr "URL al repositorio. Los protocolos soportados son http, ftp y archivo."
+msgstr ""
+"URL al repositorio. Los protocolos soportados son http, ftp y archivo."
msgid "Repository is a mirror"
-msgstr "El repositorio es un duplicado."
+msgstr ""
+"El repositorio es un duplicado"
msgid "Distribution"
-msgstr "Distribución"
+msgstr ""
+"Distribución"
msgid "Distribution of the DEB repository."
-msgstr "Distribución del repositorio DEB."
+msgstr ""
+"Distribución del repositorio DEB."
msgid "Components"
-msgstr "Componentes"
+msgstr ""
+"Componentes"
msgid "List of components in DEB repository."
-msgstr "Lista de componentes en el repositorio DEB."
+msgstr ""
+"Lista de componentes en el repositorio DEB."
msgid "Edit Repository"
-msgstr "Editar repositorio"
+msgstr ""
+"Editar repositorio"
msgid "Mirror List URL"
-msgstr "URL de lista duplicada"
+msgstr ""
+"URL de lista duplicada"
msgid "Yes"
-msgstr "Sí"
+msgstr ""
+"Sí"
msgid "No"
-msgstr "No"
+msgstr ""
+"No"
msgid "Add a Volume to Storage Pool"
msgstr ""
+"Añadir un volumen a la agrupación de almacenamiento"
msgid "Fetch from remote URL"
msgstr ""
+"Captar de URL remoto"
msgid "Enter the remote URL here."
msgstr ""
+"Escriba el URL remoto aquí. "
msgid "Upload a file"
msgstr ""
+"Cargar un archivo"
msgid "Choose the file you want to upload."
msgstr ""
+"Elija el archivo que desee cargar. "
msgid "Define a New Storage Pool"
-msgstr "Definir una agrupación de almacenamiento nueva"
+msgstr ""
+"Definir una agrupación de almacenamiento nueva"
msgid "Storage Pool Name"
-msgstr "Nombre de agrupación de almacenamiento"
+msgstr ""
+"Nombre de agrupación de almacenamiento"
msgid ""
"The name used to identify the storage pools, and it should not be empty."
msgstr ""
-"El nombre que se utiliza para identificar las agrupaciones de almacenamiento "
-"y no debe estar vacío."
+"El nombre que se utiliza para identificar las agrupaciones de almacenamiento y no debe estar vacío."
msgid "Storage Pool Type"
-msgstr "Tipo de agrupación de almacenamiento"
+msgstr ""
+"Tipo de agrupación de almacenamiento"
msgid "Storage Path"
-msgstr "Vía de acceso de almacenamiento"
+msgstr ""
+"Vía de acceso de almacenamiento"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
msgstr ""
-"La vía de acceso de la agrupación de almacenamiento. Cada agrupación de "
-"almacenamiento debe tener una vía de acceso exclusiva."
+"La vía de acceso de la agrupación de almacenamiento. Cada agrupación de almacenamiento debe tener una vía de acceso exclusiva."
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
"your system."
-msgstr "Kimchi intentará crear el directorio cuando no existe en el sistema."
+msgstr ""
+"Kimchi intentará crear el directorio cuando no existe en "
+"el sistema."
msgid "NFS Server IP"
-msgstr "IP de Servidor NFS"
+msgstr ""
+"IP de Servidor NFS"
msgid "NFS server IP or hostname. It can be input or chosen from history."
msgstr ""
-"IP o nombre de host de servidor NFS. Puede especificarse o elegirse del "
-"historial."
+"IP o nombre de host de servidor NFS. Puede especificarse o elegirse del historial."
msgid "NFS Path"
-msgstr "Vía de acceso NFS"
+msgstr ""
+"Vía de acceso NFS"
msgid "The NFS exported path on NFS server."
-msgstr "La vía de acceso exportada de NFS en el servidor NFS."
+msgstr ""
+"La vía de acceso exportada de NFS en el servidor NFS."
msgid "Device path"
-msgstr "Vía de acceso del dispositivo"
+msgstr ""
+"Vía de acceso del dispositivo"
msgid "iSCSI Server"
-msgstr "Servidor iSCSI"
+msgstr ""
+"Servidor iSCSI"
msgid "iSCSI server IP or hostname. It should not be empty."
-msgstr "IP o nombre de host de servidor iSCSI. No debe estar vacío."
+msgstr ""
+"IP o nombre de host de servidor iSCSI. No debe estar vacío."
msgid "Server"
-msgstr "Servidor"
+msgstr ""
+"Servidor"
msgid "Port"
-msgstr "Puerto"
+msgstr ""
+"Puerto"
msgid "Target"
-msgstr "Destino"
+msgstr ""
+"Destino"
msgid "The iSCSI target on iSCSI server"
-msgstr "El destino iSCSI en el servidor iSCSI"
+msgstr ""
+"El destino iSCSI en el servidor iSCSI"
msgid "Add iSCSI Authentication"
-msgstr "Añadir Autenticación iSCSI"
+msgstr ""
+"Añadir Autenticación iSCSI"
msgid "iSCSI Authentication"
-msgstr "Autenticación iSCSI"
+msgstr ""
+"Autenticación iSCSI"
msgid "SCSI Adapter"
-msgstr "Adaptador SCSI"
+msgstr ""
+"Adaptador SCSI"
msgid "Please, wait..."
-msgstr "Por favor, espere..."
+msgstr ""
+"Por favor, espere..."
msgid "Add Template"
-msgstr "Añadir plantilla"
+msgstr ""
+"Añadir plantilla"
msgid "Where is the source media for this template? "
-msgstr "¿Dónde está el soporte de origen para esta plantilla?"
+msgstr ""
+"¿Dónde está el soporte de origen para esta plantilla?"
msgid "Local ISO Image"
-msgstr "Imagen ISO local"
+msgstr ""
+"Imagen ISO local"
msgid "Local Image File"
msgstr ""
+"Archivo de imagen local"
msgid "Remote ISO Image"
-msgstr "Imagen ISO remota"
+msgstr ""
+"Imagen ISO remota"
msgid "Search ISOs"
-msgstr "Buscar ISOs"
+msgstr ""
+"Buscar ISOs"
msgid "The following ISOs are available:"
-msgstr "Las siguientes ISO están disponibles:"
+msgstr ""
+"Las siguientes ISO están disponibles:"
msgid "OS: "
-msgstr "SO: "
+msgstr ""
+"SO: "
msgid "Version: "
-msgstr "Versión: "
+msgstr ""
+"Versión: "
msgid "Size: "
-msgstr "Tamaño: "
+msgstr ""
+"Tamaño: "
msgid "Search more ISOs"
-msgstr "Buscar más ISO"
+msgstr ""
+"Buscar más ISO"
msgid "Create Templates from Selected ISO"
-msgstr "Crear plantillas a partir de ISO seleccionadas"
+msgstr ""
+"Crear plantillas a partir de ISO seleccionadas"
msgid "I want to use a specific ISO file"
-msgstr "Deseo utilizar un archivo ISO específico"
+msgstr ""
+"Deseo utilizar un archivo ISO específico"
msgid "Loading default remote ISOs ..."
-msgstr "Cargando ISO remotas predeterminadas ..."
+msgstr ""
+"Cargando ISO remotas predeterminadas ..."
msgid "Arch: "
-msgstr "Arch: "
+msgstr ""
+"Arch: "
msgid "I want to use a custom URL"
-msgstr "Deseo utilizar un URL personalizado"
+msgstr ""
+"Deseo utilizar un URL personalizado"
msgid "Edit Template"
-msgstr "Editar plantilla"
+msgstr ""
+"Editar plantilla"
msgid "Processor"
-msgstr "Procesador"
+msgstr ""
+"Procesador"
msgid "CDROM"
-msgstr "CDROM"
+msgstr ""
+"CDROM"
msgid "Image File"
msgstr ""
+"Archivo de imagen"
msgid "Graphics"
-msgstr "Gráficos"
+msgstr ""
+"Gráficos"
msgid "Disk(GB)"
msgstr ""
+"Disco (GB)"
msgid "Disk Format"
msgstr ""
+"Formato de disco"
msgid "CPU Number"
-msgstr "Número de CPU"
+msgstr ""
+"Número de CPU"
msgid "Manually set CPU topology"
msgstr ""
+"Establezca manualmente la topología de CPU"
msgid "Cores"
msgstr ""
+"Núcleos"
msgid "Threads"
msgstr ""
+"Hebras"
msgid "CPU"
-msgstr "CPU"
+msgstr ""
+"CPU"
msgid "Disk I/O"
-msgstr "E/S de disco"
+msgstr ""
+"E/S de disco"
msgid "Network I/O"
-msgstr "E/S de red"
+msgstr ""
+"E/S de red"
msgid "Livetile"
-msgstr "Livetile"
+msgstr ""
+"Livetile"
msgid "No guests found."
-msgstr "No se ha encontrado invitados."
+msgstr ""
+"No se ha encontrado invitados."
msgid "Shut down"
-msgstr "Concluir"
+msgstr ""
+"Concluir"
msgid "Restart"
-msgstr "Reiniciar"
+msgstr ""
+"Reiniciar"
msgid "Basic Information"
-msgstr "Información básica"
+msgstr ""
+"Información básica"
msgid "OS Distro"
-msgstr "Distro de SO"
+msgstr ""
+"Distro de SO"
msgid "OS Code Name"
-msgstr "Nombre de código de SO"
+msgstr ""
+"Nombre de código de SO"
msgid "CPU(s)"
msgstr ""
+"CPU(s)"
msgid "System Statistics"
-msgstr "Estadísticas del sistema"
+msgstr ""
+"Estadísticas del sistema"
msgid "Update Progress"
-msgstr "Actualizar progreso"
+msgstr ""
+"Actualizar progreso"
msgid "Network Name"
-msgstr "Nombre de red"
+msgstr ""
+"Nombre de red"
msgid "State"
-msgstr "Estado"
+msgstr ""
+"Estado"
msgid "Network Type"
-msgstr "Tipo de red"
+msgstr ""
+"Tipo de red"
msgid "Address Space"
-msgstr "Espacio de direcciones"
+msgstr ""
+"Espacio de direcciones"
msgid "Name should not contain '/' and '\"'."
msgstr ""
-"Nombre de agrupación de almacenamiento no válido. No debe contener '/'."
+"El nombre no debe contener '/' y '\"'."
msgid "Isolated: no external network connection"
-msgstr "Aislado: no hay conexión de red física"
+msgstr ""
+"Aislado: no hay conexión de red externa"
msgid "NAT: outbound physical network connection only"
-msgstr "NAT: conexión de red física saliente solamente"
+msgstr ""
+"NAT: conexión de red física saliente solamente"
msgid "Bridged: Virtual machines are connected to physical network directly"
msgstr ""
-"Puenteado: Las máquinas virtuales están conectadas a la red física "
-"directamente"
+"Puenteado: Las máquinas virtuales están conectadas a la red física directamente"
msgid "(No interfaces found)"
msgstr ""
+"(No se han encontrado interfaces) "
msgid "Destination"
-msgstr "Destino:"
+msgstr ""
+"Destino"
msgid "Enable VLAN"
-msgstr "Habilitar VLAN:"
+msgstr ""
+"Habilitar VLAN"
msgid "VLAN ID"
-msgstr "ID de VLAN:"
+msgstr ""
+"ID de VLAN"
msgid "Stop"
-msgstr "Detener"
+msgstr ""
+"Detener"
msgid "%Used"
msgstr ""
+"% Utilizado"
msgid "Location"
-msgstr "Ubicación"
+msgstr ""
+"Ubicación"
msgid "Capacity"
-msgstr "Capacidad"
+msgstr ""
+"Capacidad"
msgid "Allocated"
-msgstr "Asignado"
+msgstr ""
+"Asignado"
msgid "active"
-msgstr "activo"
+msgstr ""
+"activo"
msgid "inactive"
-msgstr "inactivo"
+msgstr ""
+"inactivo"
msgid "Deactivate"
-msgstr "Desactivar"
+msgstr ""
+"Desactivar"
msgid "Activate"
-msgstr "Activar"
+msgstr ""
+"Activar"
msgid "Add Volume"
msgstr ""
+"Añadir volumen"
msgid "Extend"
msgstr ""
+"Ampliar"
msgid "Undefine"
-msgstr "No definir"
+msgstr ""
+"No definir"
msgid "Format"
-msgstr "Formato:"
+msgstr ""
+"Formato"
msgid "Allocation"
-msgstr "Asignado:"
+msgstr ""
+"Asignación"
msgid "No templates found."
-msgstr "No se han encontrado plantillas."
+msgstr ""
+"No se han encontrado plantillas."
+
+# ENGL1SH_VERS10N 28617_40 DO NOT REMOVE OR CHANGE THIS LINE
+# T9N_SRC_ID 92
+# T9N_SH1P_STR1NG KV310AAP001 1
diff --git a/po/fr_FR.po b/po/fr_FR.po
index 5bfc492..7418acc 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -1,155 +1,174 @@
# English translations for kimchi package.
# Copyright (C) 2013 ORGANIZATION
+# Adam Litke <agl(a)us.ibm.com>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-06-24 09:39-0300\n"
-"PO-Revision-Date: 2014-08-27 21:30+0000\n"
-"Last-Translator: BobSynfig\n"
-"Language-Team: French (http://www.transifex.com/projects/p/kimchi/language/"
-"fr/)\n"
-"Language: fr_FR\n"
+"PO-Revision-Date: 2013-07-11 17:32-0400\n"
+"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
+"Language-Team: English\n"
+"Language: en_US\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=2; plural=n>1;"
#, python-format
msgid "Unknown parameter %(value)s"
-msgstr "Paramètre inconnu %(value)s"
+msgstr ""
+"Paramètre inconnu %(value)s"
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr "La suppression n'est pas autorisée pour %(resource)s"
+msgstr ""
+"La suppression n'est pas autorisée pour %(resource)s"
#, python-format
msgid "%(resource)s does not implement update method"
-msgstr "%(resource)s n'implémente pas de méthode de mise à jour"
+msgstr ""
+"%(resource)s n'implémente pas la méthode de mise à jour"
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr "La création n'est pas autorisée pour %(resource)s"
+msgstr ""
+"La création n'est pas autorisée pour %(resource)s"
msgid "Unable to parse JSON request"
-msgstr "Impossible de parser la requête JSON"
+msgstr ""
+"Impossible d'analyser la demande JSON"
msgid "This API only supports JSON"
-msgstr "Cette API supporte uniquement le JSON"
+msgstr ""
+"L'API prend uniquement en charge la notation JSON"
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
msgstr ""
-"Les paramètres ne correspondent pas à ce qui est requis dans le schéma: "
-"%(err)s"
+"Les paramètres ne correspondent pas aux exigences du schéma : %(err)s"
msgid "You don't have permission to perform this operation."
-msgstr "Vous n'avez pas la permission d'effectuer cette opération."
+msgstr ""
+"Vous ne disposez pas des droits pour effectuer cette opération."
msgid "Datastore is not initiated in the model object."
-msgstr "Le magasin de données n'est pas initié dans l'objet modèle."
+msgstr ""
+"Le magasin de données n'est pas initié dans l'objet de modèle."
#, python-format
msgid "Unable to start task due error: %(err)s"
-msgstr "Impossible de démarrer la tâche à cause de l'erreur: %(err)s"
+msgstr ""
+"Impossible de démarrer la tâche en raison de l'erreur : %(err)s"
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
msgstr ""
+"Expiration du délai d'attente de %(seconds)s lors de l'exécution de la tâche '%(task)s."
#, python-format
msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
msgstr ""
-"L'authentification a échoué pour l'utilisateur '%(username)s'. [Code "
-"d'Erreur: %(code)s]"
+"Echec d'authentification pour l'utilisateur '%(username)s'. [Code d'erreur : %(code)s]"
msgid "You are not authorized to access Kimchi"
-msgstr "Vous n'êtes pas autorisé à accéder à Kimchi"
+msgstr ""
+"Vous n'êtes pas autorisé à accéder à Kimchi"
#, python-format
msgid "Specify %(item)s to login into Kimchi"
-msgstr "Spécifiez %(item)s pour vous logguer dans Kimchi"
+msgstr ""
+"Indiquez %(item)s pour la connexion à Kimchi"
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
msgstr ""
+"L'utilisateur %(user_id)s est introuvable avec les paramètres LDAP donnés."
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
msgstr ""
+"Configuration LDAP non valide : %(item)s : %(value)s"
msgid "Unknown \"_cap\" specified"
-msgstr "\"_cap\" spécifiée inconnue"
+msgstr ""
+"\"_cap\" inconnu spécifié"
msgid "\"_passthrough\" should be \"true\" or \"false\""
-msgstr "\"_passthrough\" doit être \"true\" ou \"false\""
+msgstr ""
+"\"_passthrough\" doit avoir la valeur \"true\" ou \"false\""
msgid "\"_passthrough_affected_by\" should be a device name string"
-msgstr "\"_passthrough_affected_by\" doit être un nom de périphérique"
+msgstr ""
+"\"_passthrough_affected_by\" doit être une chaîne de nom d'unité"
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
-msgstr "Erreur durant l'accès aux périphériques de bloc. Détails: %(err)s"
+msgstr ""
+"Erreur lors de l'obtention d'unités par bloc. Détails : %(err)s"
#, python-format
msgid "Error while getting block device information for %(device)s."
msgstr ""
-"Erreur durant l'obtention de l'information sur le périphérique de bloc "
-"%(device)s."
+"Erreur lors de l'obtention des informations d'unité par bloc pour %(device)s."
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr "Impossible de trouver le fichier de distro: %(filename)s"
+msgstr ""
+"Fichier de distribution introuvable : %(filename)s"
#, python-format
msgid ""
"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
msgstr ""
-"Impossible de parser le fichier de distro: %(filename)s. Veuillez vous "
-"assurer qu'il s'agit d'un fichier JSON."
+"Impossible d'analyser le fichier de distribution : %(filename)s. Vérifiez qu'il s'agit d'un fichier JSON."
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
msgstr ""
-"Impossible de se connecter à l'hôte cible iSCSI %(portal)s. Détails: %(err)s "
+"Impossible de se connecter à la cible hôte iSCSI %(portal)s. Détails : %(err)s"
#, python-format
msgid "Unable to login to iSCSI host %(host)s target %(target)s"
-msgstr "Impossible de se connecter à l'hôte iSCSI %(host)s cible %(target)s"
+msgstr ""
+"Impossible de se connecter à la cible hôte %(host)s iSCSI %(target)s"
#, python-format
msgid "Unable to find ISO file %(filename)s"
-msgstr "Impossible de trouver le fichier ISO %(filename)s"
+msgstr ""
+"Fichier ISO introuvable : %(filename)s"
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr "Le fichier ISO %(filename)s n'est pas bootable"
+msgstr ""
+"Le fichier ISO %(filename)s n'est pas amorçable"
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
msgstr ""
-"Le fichier ISO %(filename)s n'a pas d'enregistrement de boot El Torito valide"
+"Le fichier ISO %(filename)s ne possède pas d'enregistrement d'amorçage El Torito valide"
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
-msgstr "Entrée de validation El Torito invalide dans l'ISO %(filename)s"
+msgstr ""
+"Entrée de validation El Torito non valide dans le fichier ISO %(filename)s"
#, python-format
msgid "Invalid El Torito boot indicator in ISO %(filename)s"
-msgstr "Indicateur de boot El Torito invalide dans l'ISO %(filename)s"
+msgstr ""
+"Indicateur d'amorçage El Torito non valide dans le fichier ISO %(filename)s"
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
msgstr ""
-"Type de volume inattendu pour le volume primaire dans l'ISO %(filename)s"
+"Type de volume inattendu pour le volume principal dans le fichier ISO %(filename)s"
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
msgstr ""
-"Mauvais format durant la lecture du descripteur de volume dans l'ISO "
-"%(filename)s"
+"Format incorrect lors de la lecture du descripteur de volume dans le fichier ISO %(filename)s"
#, python-format
msgid ""
@@ -159,230 +178,265 @@ msgid ""
"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
"'path_to_iso'.Details: %(err)s"
msgstr ""
-"L'hyperviseur n'a pas la permission d'utiliser cet ISO %(filename)s. "
-"Veuillez considérer de le déplacer sous /var/lib/libvirt,, ou de définir la "
-"permission de recherche sur les listes de contrpole d'accès fichier pour "
-"l'utilisateur '%(user)s' si possible, ou ajouter le '%(user)s' au groupe de "
-"chemins d'ISO, ou (non recommandé) 'chmod -R o+x 'chemin_vers_iso'.Détails: "
-"%(err)s"
+"L'hyperviseur ne dispose pas des droits pour utiliser ce fichier ISO %(filename)s. "
+"placez-le dans /var/lib/libvirt, ou définissez le droit de recherche sur "
+"les listes de contrôle d'accès d'accès aux fichiers pour l'utilisateur '%(user)s', si possible, ou ajoutez "
+"'%(user)s' au groupe de chemins d'accès ISO ou (non recommandé) 'chmod -R o+x "
+"'path_to_iso'.Détails : %(err)s"
msgid "An error occurred when probing image OS information."
msgstr ""
-"Une erreur est survenue lors de la détection de l'information d'OS de "
-"l'image."
+"Une erreur s'est produite lors de l'application d'une sonde aux informations de système d'exploitation d'image."
msgid "No OS information found in given image."
-msgstr "Aucune information d'OS trouvée sur l'image donnée."
+msgstr ""
+"Aucune information relative au système d'exploitation n'a été trouvée dans l'image donnée."
#, python-format
msgid "Unable to read image file %(filename)s"
-msgstr "Impossible de lire le fichier image %(filename)s"
+msgstr ""
+"Impossible de lire le fichier image %(filename)s"
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
msgstr ""
-"Le fichier image doit être un fichier existant sur le système. %(filename)s "
-"n'est pas une donnée valide."
+"Le fichier image doit être un fichier existant sur le système. %(filename)s n'est pas une entrée "
+"valide."
#, python-format
msgid "Virtual machine %(name)s already exists"
-msgstr "La machine virtuelle %(name)s existe déjà"
+msgstr ""
+"La machine virtuelle %(name)s existe déjà"
#, python-format
msgid "Virtual machine %(name)s does not exist"
-msgstr "La machine virtuelle %(name)s n'existe pas"
+msgstr ""
+"La machine virtuelle nommée %(name)s n'existe pas"
#, python-format
msgid ""
"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
"in use or the virtual machine is not powered off."
msgstr ""
-"Impossible de renommer la machine virtuelle %(name)s. Le nom %(new_name)s "
-"est déja utilisé ou la machine virtuelle n'est pas éteinte."
+"Impossible de renommer la machine virtuelle %(name)s. Le nom %(new_name)s est déjà "
+"utilisé ou la machine virtuelle n'est pas hors tension."
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
msgstr ""
-"Impossible de récupérer une capture d'écran pour la machine virtuelle "
-"stoppée %(name)s"
+"Impossible d'extraire la capture d'écran pour la machine virtuelle arrêtée %(name)s"
msgid "Remote ISO image is not supported by this server."
-msgstr "L'image ISO distante n'est pas supportée par le serveur."
+msgstr ""
+"L'image ISO distante n'est pas prise en charge par ce serveur."
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
-msgstr "Copie d'écran non supportée par la machine virtuelle %(name)s"
+msgstr ""
+"La capture d'écran n'est pas prise en charge sur la machine virtuelle %(name)s"
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
-msgstr "Impossible de créer la machine virtuelle %(name)s. Détails: %(err)s"
+msgstr ""
+"Impossible de créer la machine virtuelle %(name)s. Détails : %(err)s"
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Impossible de mettre à jour la machine virtuelle %(name)s. Détails: %(err)s"
+"Impossible de mettre à jour la machine virtuelle %(name)s. Détails : %(err)s"
#, python-format
msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Impossible de récupérer la machine virtuelle %(name)s. Détails: %(err)s"
+"Impossible de récupérer la machine virtuelle %(name)s. Détails : %(err)s"
#, python-format
msgid "Unable to connect to powered off virtual machine %(name)s."
-msgstr "Impossible de se connecter à la machine virtuelle éteinte %(name)s."
+msgstr ""
+"Impossible de se connecter à la machine virtuelle hors tension %(name)s."
msgid "Virtual machine name must be a string without slashes (/)"
msgstr ""
+"Le nom de la machine virtuelle doit être une chaîne sans barre oblique (/)"
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
msgstr ""
+"URI du modèle non valide %(value)s indiqué pour la machine virtuelle"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for virtual machine"
msgstr ""
+"URI du pool de stockage non valide %(value)s indiqué pour la machine virtuelle"
msgid "Supported virtual machine graphics are Spice or VNC"
msgstr ""
+"Graphiques de machine virtuelle pris en charge : Spice ou VNC"
msgid "Graphics address to listen on must be IPv4 or IPv6"
-msgstr "L'adresse d'écoute du graphics doit être IPv4 ou IPv6"
+msgstr ""
+"L'adresse des graphiques pour l'écoute doit être IPv4 ou IPv6"
msgid "Specify a template to create a virtual machine from"
-msgstr "Spécifier un modèle à partir duquel créer une machine virtuelle"
+msgstr ""
+"Indiquez un modèle pour créer une machine virtuelle depuis"
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
-msgstr "Impossible de démarrer la machine virtuelle %(name)s. Détails: %(err)s"
+msgstr ""
+"Impossible de démarrer la machine virtuelle %(name)s. Détails : %(err)s"
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Impossible de mettre hors tension la machine virtuelle %(name)s. Détails: "
-"%(err)s"
+"Impossible de mettre hors tension la machine virtuelle %(name)s. Détails : %(err)s"
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Impossible de supprimer la machine virtuelle %(name)s. Détails: %(err)s"
+"Impossible de supprimer la machine virtuelle %(name)s. Détails : %(err)s"
#, python-format
msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Impossible de réinitrialiser la machine virtuelle %(name)s. Détails: %(err)s"
+"Impossible de réinitialiser la machine virtuelle %(name)s. Détails : %(err)s"
msgid "User name list must be an array"
msgstr ""
+"La liste de noms d'utilisateur doit être un tableau"
msgid "User name must be a string"
-msgstr "Le nom d'utilisateur doit être une chaîne de caractères"
+msgstr ""
+"Le nom d'utilisateur doit être une chaîne"
msgid "Group name list must be an array"
msgstr ""
+"La liste de noms de groupe doit être un tableau"
msgid "Group name must be a string"
-msgstr "Le nom de groupe doit être une chaîne de caractères"
+msgstr ""
+"Le nom de groupe doit être une chaîne"
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr "Le(s) utilisateur(s) '%(users)s' n'existe(nt) pas"
+msgstr ""
+"Le ou les utilisateurs '%(users)s' n'existent pas"
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr "Le(s) groupe(s) '%(groups)s' n'existe(nt) pas"
+msgstr ""
+"Le ou les groupes '%(groups)s' n'existent pas"
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
-msgstr "Impossible d'éteindre la machine virtuelle %(name)s. Détails: %(err)s"
+msgstr ""
+"Impossible d'arrêter la machine virtuelle %(name)s. Détails : %(err)s"
#, python-format
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Impossible d'accéder aux metadata de la machine virtuelle %(name)s. Détails: "
-"%(err)s"
+"Impossible d'obtenir l'accès aux métadonnées de la machine virtuelle %(name)s. Détails : %(err)s"
msgid "The guest console password must be a string."
-msgstr "Le mot de passe de console invitée doit être une chaîne de caractères."
+msgstr ""
+"Le mot de passe de la console invité doit être une chaîne."
msgid "The life time for the guest console password must be a number."
-msgstr "La durée de vie du mot de passe de console invitée doit être un nombre"
+msgstr ""
+"La durée de vie du mot de passe de console invité doit être une valeur numérique."
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
msgstr ""
+"La machine virtuelle '%(name)s' doit être arrêtée avant d'être clonée."
#, python-format
msgid "Insufficient disk space to clone virtual machine '%(name)s'"
msgstr ""
+"Espace disque insuffisant pour cloner la machine virtuelle '%(name)s'"
#, python-format
msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
msgstr ""
+"Impossible de cloner la machine virtuelle '%(name)s'. Détails : %(err)s"
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
msgstr ""
+"Opération non valide pour la machine virtuelle non permanente %(name)s"
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
msgstr ""
+"Impossible d'interrompre la machine virtuelle '%(name)s' car elle n'est pas en cours d'exécution."
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
msgstr ""
+"Impossible d'interrompre la machine virtuelle '%(name)s'. Détails : %(err)s"
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
msgstr ""
+"Impossible de reprendre la machine virtuelle '%(name)s' car elle n'est pas interrompue."
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
msgstr ""
+"Impossible de reprendre la machine virtuelle '%(name)s'. Détails : %(err)s"
msgid "Memory assigned is higher then the maximum allowed in the host."
msgstr ""
+"La mémoire affectée est supérieure à la quantité maximale autorisée sur l'hôte."
#, python-format
msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
+"La machine virtuelle '%(name)s' ne prend pas en charge la mise à jour dynamique de la mémoire. Mettez à jour la mémoire avec "
+"la machine hors ligne pour activer cette fonction."
msgid "Only increase memory is allowed in active VMs"
msgstr ""
+"Seule une augmentation de la mémoire est autorisée sur les machines virtuelles actives"
msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
msgstr ""
+"Pour la mise à jour dynamique de la mémoire, la nouvelle valeur de mémoire doit être égale à l'ancienne valeur plus "
+"des multiples de 1024 Mib"
msgid "There are not enough free slots of 1024 Mib in the guest."
msgstr ""
+"Il n'existe pas assez d'emplacements disponibles de 1024 Mib sur l'invité."
msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
msgstr ""
+"La version libvirt de l'hôte ne prend pas en charge les unités de mémoire. Libvirt doit être >= "
+"1.2.14"
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
msgstr ""
+"Erreur d'attachement de l'unité de mémoire. Détails : %(error)s"
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
-"La machine virtuelle %(vmid)s ne peut pas contenir le périphérique hôte "
-"directement assigné %(dev_name)s."
+"La machine virtuelle VM %(vmid)s ne contient pas l'unité hôte affectée directement %(dev_name)s."
#, python-format
msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
msgstr ""
-"The périphérique hôte %(dev_name)s ne peut être directement assigné à la "
-"machine virtuelle"
+"L'unité hôte %(dev_name)s n'est pas autorisée à être affectée directement à la machine virtuelle."
msgid ""
"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
@@ -391,342 +445,384 @@ msgid ""
"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
"iommu=1."
msgstr ""
+"Aucun groupe IOMMU trouvé. Le passe-système PCI hôte a besoin d'un groupe IOMMU pour "
+"fonctionner correctement. Activez Intel VT-d ou AMD IOMMU dans votre BIOS, puis vérifiez "
+"que le noyau est compilé avec le support IOMMU. Pour l'UC Intel, ajoutez intel_iommu=on "
+"pour le paramètre de noyau dans /boot/grub2/grub.conf. Pour l'UC AMD, ajoutez iommu=pt "
+"iommu=1."
msgid "\"name\" should be a device name string"
-msgstr "\"name\" doit être un nom de périphérique"
+msgstr ""
+"\"name\" doit être une chaîne de nom d'unité"
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
msgstr ""
+"L'unité %(name)s est probablement utilisée par l'hôte. Impossible de l'attacher à "
+"l'hôte."
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
-msgstr "L'interface %(iface)s n'existe pas dans la machine virtuelle %(name)s"
+msgstr ""
+"L'interface %(iface)s n'existe pas sur la machine virtuelle %(name)s"
#, python-format
msgid ""
"Network %(network)s specified for virtual machine %(name)s does not exist"
msgstr ""
-"Le réseau %(network)s spécifié pour la machine virtuelle %(name)s n'existe "
-"pas"
+"Le réseau %(network)s indiqué pour la machine virtuelle %(name)s n'existe pas"
msgid "Supported virtual machine interfaces type is only network"
msgstr ""
-"Le type d'interface de machine virtuelle supporté est réseau uniquement"
+"Type d'interface de machine virtuelle pris en charge : réseau uniquement"
msgid "Network name for virtual machine interface must be a string"
msgstr ""
-"Le nom de réseau pour l'interface de la machine virtuelle doit être une "
-"chaîne de caractères"
+"Le nom de réseau pour l'interface de la machine virtuelle doit être une chaîne"
msgid "Invalid network model card specified for virtual machine interface"
msgstr ""
-"Modèle de carte réseau spécifié invalide pour l'interface de machine "
-"virtuelle"
+"La carte de modèle réseau spécifiée pour l'interface de la machine virtuelle n'est pas valide"
msgid "Specify type and network to add a new virtual machine interface"
msgstr ""
-"Spécifier le type et le réseau à ajouter à la nouvelle interface de la "
-"machine virtuelle"
+"Spécifiez un type et un réseau à ajouter à une nouvelle interface de machine virtuelle"
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
msgstr ""
+"L'adresse MAC doit être conforme au format FF:FF:FF:FF:FF:FF"
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
msgstr ""
+"L'adresse MAC %(mac)s existe déjà sur la machine virtuelle %(name)s"
msgid "Invalid MAC Address"
msgstr ""
+"Adresse MAC non valide"
msgid "Cannot change MAC address of a running virtual machine"
msgstr ""
+"Impossible de modifier l'adresse MAC d'une machine virtuelle en cours d'exécution"
#, python-format
msgid "Template %(name)s already exists"
-msgstr "Le modèle %(name)s existe déjà"
+msgstr ""
+"Le modèle %(name)s existe déjà"
#, python-format
msgid ""
"Network '%(network)s' specified for template %(template)s does not exist"
msgstr ""
-"Le réseau '%(network)s' spécifié pour le modèle %(template)s n'existe pas"
+"Le réseau '%(network)s' indiqué pour le modèle %(template)s n'existe pas"
#, python-format
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
msgstr ""
-"Le pool de stockage spécifié %(pool)s pour le modèle %(template)s n'existe "
-"pas"
+"Le pool de stockage '%(pool)s' indiqué pour le modèle %(template)s n'existe pas"
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
msgstr ""
-"Le pool de stockage spécifié %(pool)s pour le modèle %(template)s n'est pas "
-"actif"
+"Le pool de stockage '%(pool)s' indiqué pour le modèle %(template)s n'est pas actif"
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr "Paramètres '%(param)s' spécifié invalide pour le CDROM"
+msgstr ""
+"Paramètre non valide '%(param)s' spécifié pour le CD-ROM."
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
msgstr ""
-"Le réseau %(network)s spécifié pour le modèle %(template)s n'est pas actif"
+"Le réseau '%(network)s' indiqué pour le modèle %(template)s n'est pas actif"
msgid "Template name must be a string"
-msgstr "Le modèle de nom doit être une chaîne de caractères"
+msgstr ""
+"Le nom du modèle doit être une chaîne"
msgid "Template icon must be a path to the image"
-msgstr "Le modèle d'icone doit être un chemin vers l'image"
+msgstr ""
+"L'icône de modèle doit être un chemin d'accès à l'image"
msgid "Template distribution must be a string"
-msgstr "Le modèle de distribution doit être une chaîne de caractères"
+msgstr ""
+"La distribution du modèle doit être une chaîne"
msgid "Template distribution version must be a string"
msgstr ""
-"Le modèle de version de distribution doit être une chaîne de caractères"
+"La version de distribution du modèle doit être une chaîne"
msgid "The number of CPUs must be an integer greater than 0"
-msgstr "Le nombre de CPU doit être un nombre entier supérieur à 0"
+msgstr ""
+"Le nombre d'UC doit être un entier supérieur à 0"
msgid "Amount of memory (MB) must be an integer greater than 512"
-msgstr "La quantité de mémoire (Mo) doit être un nombre entier supérieur à 512"
+msgstr ""
+"La quantité de mémoire (Mo) doit être un entier supérieur à 512"
msgid "Template CDROM must be a local or remote ISO file"
-msgstr "Le CDROM modèle doit être un fichier ISO local ou distant"
+msgstr ""
+"Le CD-ROM modèle doit être un fichier ISO local ou distant"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for template"
-msgstr "URI %(value)s du pool de stockage spécifiée invalide pour le modèle"
+msgstr ""
+"URI du pool de stockage non valide %(value)s indiqué pour le modèle"
msgid "Specify an ISO image as CDROM or a base image to create a template"
msgstr ""
-"Spécifiez une image ISO comme CDROM ou une image de base pour créer un modèle"
+"Indiquez une image ISO comme CD-ROM ou image de base pour créer un modèle"
msgid "All networks for the template must be specified in a list."
-msgstr "Tous les réseaux pour le modèle doivent être spécifiés dans une liste"
+msgstr ""
+"Tous les réseaux du modèle doivent être spécifiés dans une liste."
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
msgstr ""
+"Spécifiez un volume sur un modèle lorsque le pool de stockage est iSCSI ou SCSI"
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
-msgstr "Le volume %(volume)s n'est pas dans le pool de stockage %(pool)s"
+msgstr ""
+"Le volume %(volume)s n'est pas dans le pool de stockage %(pool)s"
#, python-format
msgid "Unable to create template due error: %(err)s"
-msgstr "Impossible de créer le modèle à cause de l'erreur: %(err)s"
+msgstr ""
+"Impossible de créer le modèle en raison de l'erreur suivante : %(err)s"
#, python-format
msgid "Unable to delete template due error: %(err)s"
-msgstr "Impossilbe de supprimer le modèle à cause de l'erreur: %(err)s"
+msgstr ""
+"Impossible de supprimer le modèle en raison de l'erreur suivante : %(err)s"
msgid "Disk size must be an integer greater than 1GB."
-msgstr "La taille de disque doit être un entier supérieur à 1Go."
+msgstr ""
+"La taille du disque doit être un entier supérieur à 1 Go."
msgid "Template base image must be a valid local image file"
-msgstr "L'image de base de modèle doit petre un fichier image local valide"
+msgstr ""
+"L'image de base du modèle doit être un fichier image local valide"
#, python-format
msgid "Cannot identify base image %(path)s format"
-msgstr "Ne peut identifier le format de l'image de base %(path)s"
+msgstr ""
+"Impossible d'identifier le format %(path)s de l'image de base"
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
msgstr ""
+"Lors de la spécification de la topologie d'UC, les UC virtuelles doivent être un produit des sockets, coeurs et "
+"unités d'exécution."
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
"zero."
msgstr ""
-"Dans la topologie de CPU, chaque élément doit être un entier strictement "
-"positif."
+"Lors de la spécification de la topologie d'UC, chaque élément doit être un entier supérieur à "
+"zéro."
msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
+"Format d'image de disque non valide. Formats valides : bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc."
#, python-format
msgid "Storage pool %(name)s already exists"
-msgstr "Le pool de stockage %(name)s existe déjà"
+msgstr ""
+"Le pool de stockage %(name)s existe déjà"
#, python-format
msgid "Storage pool %(name)s does not exist"
-msgstr "Le pool de stockage %(name)s n'existe pas"
+msgstr ""
+"Le pool de stockage %(name)s n'existe pas"
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
-msgstr "Spécifier %(item)s afin de créer le pool de stockage %(name)s"
+msgstr ""
+"Spécifiez %(item)s pour créer le pool de stockage %(name)s"
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr "Impossible de supprimer le pool de stockage actif %(name)s"
+msgstr ""
+"Impossible de supprimer le pool de stockage actif %(name)s"
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
-msgstr "Impossible de lister les pools de stockage. Détails: %(err)s"
+msgstr ""
+"Impossible de répertorier les pools de stockage. Détails : %(err)s"
#, python-format
msgid "Unable to create storage pool %(name)s. Details: %(err)s"
-msgstr "Impossilble de créer le pool de stockage %(name)s. Détails: %(err)s"
+msgstr ""
+"Impossible de créer le pool de stockage %(name)s. Détails : %(err)s"
#, python-format
msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
msgstr ""
-"Impossible d'obtenir le nombre de volumes de stockage dans le pool de "
-"stockage%(name)s. Détails: %(err)s"
+"Impossible d'obtenir le nombre de volumes de stockage dans le pool de stockage %(name)s. Détails : "
+"%(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
-msgstr "Impossible d'activer le pool de stockage %(name)s. Détails: %(err)s"
+msgstr ""
+"Impossible d'activer le pool de stockage %(name)s. Détails : %(err)s"
#, python-format
msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
msgstr ""
-"Impossible de désactiver le pool de stockage %(name)s. Détails: %(err)s"
+"Impossible de désactiver le pool de stockage %(name)s. Détails : %(err)s"
#, python-format
msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
msgstr ""
-"Impossible de supprimer le pool de stockage %(name)s. Détails: %(err)s "
+"Impossible de supprimer le pool de stockage %(name)s. Détails : %(err)s"
#, python-format
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
msgstr ""
-"Impossible de créer le Pool NFS du fait que le chemin d'export %(path)s "
-"pourrait se bloquer durant le montage"
+"Impossible de créer le pool NFS car le chemin d'exportation %(path)s risque de bloquer lors du montage"
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
msgstr ""
-"Impossible de créer le pool NFS du fait que le montage du chemin d'export "
-"%(path)s a échoué"
+"Impossible de créer le pool NFS car le montage du chemin d'exportation %(path)s a échoué"
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr "Type de pool de stockage non supporté: %(type)s"
+msgstr ""
+"Type de pool de stockage non pris en charge : %(type)s"
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
msgstr ""
+"Erreur d'extraction du fichier XML du pool de stockage dans %(pool)s"
msgid "Storage pool name must be a string without slashes (/)"
msgstr ""
+"Le nom du pool de stockage doit être une chaîne sans barre oblique (/)"
msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
"iso"
msgstr ""
-"Les types de pool de stockage supportés sont: dir, netfs, logical, iscsi, "
-"isci et kimchi-iso"
+"Types de pool de stockage pris en charge : dir, netfs, logical, iscsi, isci et kimchi-"
+"iso"
msgid "Storage pool path must be a string"
-msgstr "Le chemin du pool de stockage doit être une chaîne de caractères"
+msgstr ""
+"Le chemin du pool de stockage doit être une chaîne"
msgid "Storage pool host must be a IP or hostname"
-msgstr "L'hôte du pool de stockage doit être une IP ou un nom d'hôte"
+msgstr ""
+"L'hôte du pool de stockage doit être une adresse IP ou un nom d'hôte"
msgid "Storage pool device must be the absolute path to the block device"
msgstr ""
+"L'unité du pool de stockage doit correspondre au chemin d'accès absolu à l'unité par bloc"
msgid "Storage pool devices parameter must be a list"
-msgstr "Le paramètre de périphérique de pool de stockage doit être une list"
+msgstr ""
+"Le paramètre des unités du pool de stockage doivent constituer une liste"
msgid "Target IQN of an iSCSI pool must be a string"
-msgstr "La cible IQN d'un pool iSCSI doit être une chaîne de caractères"
+msgstr ""
+"Le nom qualifié iSCSI (IQN) cible d'un pool iSCSI doit être une chaîne"
msgid "Port of a remote storage server must be an integer between 1 and 65535"
msgstr ""
-"Le port d'un serveur de stockage distant doit être un nombre entier entre 1 "
-"et 65535"
+"Le port d'un serveur de stockage distant doit être un entier compris entre 1 et 65535"
msgid "iSCSI target username must be a string"
msgstr ""
-"Le nom d'utilisateur de la cible iSCSI doit être une chaîne de caractères"
+"Le nom d'utilisateur cible iSCSI doit être une chaîne"
msgid "iSCSI target password must be a string"
-msgstr "Le mot de passe de la cible iSCSI doit être une chaîne de caractères"
+msgstr ""
+"Le mot de passe cible iSCSI doit être une chaîne"
msgid "Specify name and type to create a storage pool"
-msgstr "Spécifier un nom et un type pour créer un pool de stockage"
+msgstr ""
+"Indiquez le nom et le type pour créer un pool de stockage"
#, python-format
msgid ""
"%(disk)s is not a valid disk/partition. Could not add it to the pool "
"%(pool)s."
msgstr ""
-"%(disk)s n'est pas un(e) disque/partition valide. N'a pu l'ajouter au pool "
+"%(disk)s n'est pas un disque/une partition valide. Impossible de l'ajouter au pool "
"%(pool)s."
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
-msgstr "Impossible d'agrandir le pool logique %(pool)s. Détails: %(err)s"
+msgstr ""
+"Impossible d'étendre le pool logique %(pool)s. Détails : %(err)s"
msgid "The parameter disks only can be updated for logical storage pool."
msgstr ""
-"Les disques en paramètre peuvent seulement être mis à jour pour un pool de "
-"stockage logique."
+"Les disques de paramètre peuvent être mis à jour uniquement pour le pool de stockage logique."
msgid "The SCSI host adapter name must be a string."
-msgstr "Le nom d'adaptateur de l'hôte SCSI doit être une chapine de caractères"
+msgstr ""
+"Le nom de l'adaptateur hôte SCSI doit être une chaîne."
msgid "The storage pool kimchi_isos is reserved for internal use"
-msgstr "Le pool de stockage kimchi_isos est réservé à un usage interne"
+msgstr ""
+"Le pool de stockage kimchi_isos est réservé à un usage interne"
#, python-format
msgid ""
"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"Impossible d'activer le pool de stockage NFS%(name)s. Le serveur NFS "
-"%(server)s n'est pas joignable."
+"Impossible d'activer le pool de stockage NFS %(name)s. Le serveur NFS %(server)s est "
+"inaccessible."
#, python-format
msgid ""
"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"Impossible de désactiver le pool de stockage NFS%(name)s. Le serveur NFS "
-"%(server)s n'est pas joignable."
+"Impossible de désactiver le pool de stockage NFS %(name)s. Le serveur NFS %(server)s est "
+"inaccessible."
#, python-format
msgid ""
"Unable to deactivate pool %(name)s as it is associated with some templates"
msgstr ""
-"Impossible de désactiver le pool %(name)s du fait qu'il est associé à des "
-"modèles"
+"Impossible de désactiver le pool %(name)s car il est associé à plusieurs modèles"
#, python-format
msgid "Unable to delete pool %(name)s as it is associated with some templates"
msgstr ""
-"Impossible de supprimer le pool %(name)s du fait qu'il est associé à des "
-"modèles"
+"Impossible de supprimer le pool %(name)s car il est associé à plusieurs modèles"
#, python-format
msgid ""
"A volume group named '%(name)s' already exists. Please, choose another name "
"to create the logical pool."
msgstr ""
-"Un groupe de volume appelé '%(name)s' existe déjà. Veuillez choisir un autre "
-"nom pour créer le pool logique."
+"Un groupe de volumes nommé '%(name)s' existe déjà. Choisissez un autre nom "
+"pour créer le pool logique."
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
msgstr ""
-"Impossible de mettre à jour la base de données avec les informations de scan "
-"profond à cause de l'erreur: %(err)s"
+"Impossible de mettre à jour la base de données avec des informations d'analyse approfondie en raison de l'erreur suivante : %(err)s"
#, python-format
msgid "Storage volume %(name)s already exists"
-msgstr "Le volume de stockage %(name)s existe déjà"
+msgstr ""
+"Le volume de stockage %(name)s existe déjà"
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
@@ -738,86 +834,92 @@ msgid ""
"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
"not active"
msgstr ""
-"Impossible de créer le volume de stockage %(volume)s car le pool de stockage "
-"%(pool)s n'est pas actif"
+"Impossible de créer le volume de stockage %(volume)s car le pool de stockage %(pool)s "
+"n'est pas actif"
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
-msgstr "Spécifier %(item)s afin de créer le volume de stockage %(volume)s"
+msgstr ""
+"Spécifiez %(item)s afin de créer le volume de stockage %(volume)s"
#, python-format
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
msgstr ""
-"Impossible de lister les volumes de stockage car le pool de stockage "
-"%(pool)s n'est pas actif"
+"Impossible de répertorier les volumes de stockage car le pool de stockage %(pool)s n'est pas actif"
#, python-format
msgid ""
"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
"%(err)s"
msgstr ""
-"Impossible de créer le volume de stockage %(name)s dans le pool de stockage "
-"%(pool)s. Détails: %(err)s"
+"Impossible de créer le volume de stockage %(name)s dans le pool de stockage %(pool)s. Détails : "
+"%(err)s"
#, python-format
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
msgstr ""
-"Impossible de lister les volumes de stockage dans le pool de stockage "
-"%(pool)s. Détails: %(err)s"
+"Impossible de répertorier les volumes de stockage dans le pool de stockage %(pool)s. Détails : %(err)s"
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
-msgstr "Impossible de wiper les volumes de stockage %(name)s. Détails: %(err)s"
+msgstr ""
+"Impossible d'effacer les volumes de stockage %(name)s. Détails : %(err)s"
#, python-format
msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
msgstr ""
-"Impossible de supprimer le volume de stockage %(name)s. Détails: %(err)s "
+"Impossible de supprimer le volume de stockage %(name)s. Détails : %(err)s"
#, python-format
msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
msgstr ""
-"Impossible de redimensionner le volume de stockage %(name)s. Détails: %(err)s"
+"Impossible de redimensionner le volume de stockage %(name)s. Détails : %(err)s"
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
msgstr ""
-"Le type de stockage %(type)s ne supporte pas ni la création ni la "
-"suppression de volume"
+"Le type de stockage %(type)s ne prend pas en charge la création et la suppression de volume"
msgid "Storage volume name must be a string"
-msgstr "Le nom de volume de stockage doit être une chaîne de caractères"
+msgstr ""
+"Le nom du volume de stockage doit être une chaîne"
msgid "Storage volume allocation must be an integer number"
-msgstr "L'allocation de volume de stockage doit être une nombre entier"
+msgstr ""
+"L'allocation de volume de stockage doit être un nombre entier"
msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
+"Format du volume de stockage non pris en charge. Formats valides : bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
msgid "Storage volume requires a volume name"
-msgstr "Le volume de stockage requiert un nom de volume"
+msgstr ""
+"Le volume de stockage requiert un nom de volume"
#, python-format
msgid ""
"Unable to update database with storage volume information due error: %(err)s"
msgstr ""
-"Impossible de mettre à jour la base de données avec les informations du "
-"volume de stockage à cause de l'erreur: %(err)s"
+"Impossible de mettre à jour la base de données avec des informations de volume de stockage en raison de l'erreur suivante : %(err)s"
#, python-format
msgid "Only one of parameter %(param)s can be specified"
-msgstr "Seulement un seul des paramêtre %(param)s peut être spécifié"
+msgstr ""
+"Un seul paramètre %(param)s peut être spécifié"
#, python-format
msgid "Create volume from %(param)s is not supported"
-msgstr "La création de volume avec %(param)s n'est pas supportée"
+msgstr ""
+"La création d'un volume à partir de %(param)s n'est pas prise en charge"
msgid "Storage volume capacity must be an integer number."
-msgstr "La capacité du volume de stockage doit être un nombre entier."
+msgstr ""
+"La capacité du volume de stockage doit correspondre à un nombre entier."
msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
msgstr ""
@@ -825,1542 +927,1915 @@ msgstr ""
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
-msgstr "Impossible d'accéder au fichier %(url)s. Veuillez le vérifier."
+msgstr ""
+"Impossible d'accéder au fichier %(url)s. Vérifiez ce dernier."
#, python-format
msgid ""
"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
"%(err)s"
msgstr ""
+"Impossible de cloner le volume de stockage '%(name)s' dans le pool '%(pool)s'. Détails : "
+"%(err)s"
msgid "Specify chunk data and its size to upload a file."
msgstr ""
+"Spécifiez les données de bloc et leur taille pour télécharger un fichier."
msgid "In order to upload a storage volume, specify the 'upload' parameter."
msgstr ""
+"Pour télécharger un volume de stockage, spécifiez le paramètre 'upload'."
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
msgstr ""
+"Impossible de télécharger les données de bloc car elles ne correspondent pas à la taille de bloc."
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
msgstr ""
+"Le volume de stockage %(vol)s n'est pas soumis à un processus de téléchargement."
msgid "The upload chunk data will exceed the storage volume size."
msgstr ""
+"Le téléchargement des données de bloc dépasse la taille du volume de stockage."
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
msgstr ""
+"Impossible de télécharger les données de bloc dans le volume de stockage. Détails : %(err)s."
#, python-format
msgid "Interface %(name)s does not exist"
-msgstr "L'interface %(name)s n'existe pas"
+msgstr ""
+"L'interface %(name)s n'existe pas"
#, python-format
msgid "Network %(name)s already exists"
-msgstr "Le réseau %(name)s existe déjà"
+msgstr ""
+"Le réseau %(name)s existe déjà"
#, python-format
msgid "Network %(name)s does not exist"
-msgstr "Le réseau %(name)s n'existe pas"
+msgstr ""
+"Le réseau %(name)s n'existe pas"
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
msgstr ""
-"Le sous-réseau %(subnet)s spécifié pour le réseau %(network)s n'est pas "
-"valide"
+"Le sous-réseau %(subnet)s indiqué pour le réseau %(network)s n'est pas valide."
#, python-format
msgid "Specify a network interface to create bridged network %(name)s"
-msgstr "Spécifier une interface réseau pour créer le réseau bridge %(name)s"
+msgstr ""
+"Indiquez une interface réseau pour créer le réseau routé %(name)s"
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr "Impossible de supprimer le réseau actif %(name)s"
+msgstr ""
+"Impossible de supprimer le réseau actif %(name)s"
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
msgstr ""
-"L'interface %(iface)s spécifiée pour le réseau %(network)s est déjà utilisée"
+"L'interface %(iface)s indiquée pour le réseau %(network)s est déjà utilisée"
msgid "Interface should be bare NIC, bonding or bridge device."
-msgstr "L'interface doit être un périphérique NIC vide, bonding ou bridgé."
+msgstr ""
+"L'interface doit être un contrôleur NIC nu, une unité de pontage ou de liaison."
#, python-format
msgid "Unable to create network %(name)s. Details: %(err)s"
-msgstr "Impossible de créer le réseau %(name)s. Détails: %(err)s"
+msgstr ""
+"Impossible de créer le réseau %(name)s. Détails : %(err)s"
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
-msgstr "Impossible de trouver une adresse IP libre pour le réseau '%(name)s'"
+msgstr ""
+"Impossible de trouver une adresse IP disponible pour le réseau '%(name)s'"
#, python-format
msgid "The interface %(iface)s already exists."
-msgstr "L'interface %(iface)s existe déjà"
+msgstr ""
+"L'interface %(iface)s existe déjà."
msgid "Network name must be a string without slashes (/) or quotes (\")"
msgstr ""
+"Le nom du réseau doit être une chaîne sans barre oblique (/) ni guillemet (\")"
msgid "Supported network types are isolated, NAT and bridge"
-msgstr "Les types de réseaux supportés sont isolated, NAT et bridge"
+msgstr ""
+"Les types de réseau pris en charge sont isolé, NAT et routé"
msgid "Network subnet must be a string with IP address and prefix or netmask"
msgstr ""
-"Le sous-réseau doit être une chaine de caractères avec une adresse IP et un "
-"préfixe ou un masque de réseau"
+"Le sous-réseau du réseau doit être une chaîne avec adresse IP et préfixe ou masque de réseau"
msgid "Network interface must be a string"
-msgstr "L'interface de réseau doit être une chaîne de caractères"
+msgstr ""
+"L'interface réseau doit être une chaîne"
msgid "Network VLAN ID must be an integer between 1 and 4094"
-msgstr "L'ID de VLAN du réseau doit être un nombre entier entre 1 et 4094"
+msgstr ""
+"L'ID réseau local virtuel du réseau doit être un entier compris entre 1 et 4094"
msgid "Specify name and type to create a Network"
-msgstr "Spécifiez un nom et un type pour créer un réseau"
+msgstr ""
+"Indiquez le nom et le type pour créer un réseau"
#, python-format
msgid ""
"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
"and/or templates linked to this network."
msgstr ""
-"Impossible de supprimer le réseau %(name)s. Il y a des machines virtuelles "
-"%(vms)s et/ou des modèles liés à ce réseau. "
+"Impossible de supprimer le réseau %(name)s. Il existe plusieurs machines virtuelles %(vms)s "
+"et/ou modèles liés à ce réseau."
#, python-format
msgid ""
"Unable to deactivate network %(name)s. There are some virtual machines "
"%(vms)s and/or templates linked to this network."
msgstr ""
-"Impossible de désactiver réseau %(name)s. Il y a des machines virtuelles"
-"%(vms)s et/ou des modèles liés à ce réseau. "
+"Impossible de désactiver le réseau %(name)s. Il existe plusieurs machines virtuelles "
+"%(vms)s et/ou modèles liés à ce réseau."
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
msgstr ""
-"Le périphérique bridge %(name)s ne peut être le périphérique tronc d'un VLAN."
+"L'unité de pontage %(name)s ne peut pas être l'unité de liaison d'un réseau local virtuel."
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr "Échec durant l'activation de l'interface %(iface)s: %(err)s."
+msgstr ""
+"Echec de l'activation de l'interface %(iface)s: %(err)s."
#, python-format
msgid ""
"Failed to activate interface %(iface)s. Please check the physical link "
"status."
msgstr ""
-"Échec durant l'activation de l'interface %(iface)s. Veuillez vérifier le "
-"statut du lien physique."
+"Echec de l'activation de l'interface %(iface)s. Vérifiez l'état de "
+"la liaison physique."
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
msgstr ""
+"Echec du démarrage du réseau %(name)s. Détails : %(err)s"
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr "Le rapport de déboggage %(name)s n'existe pas"
+msgstr ""
+"Le rapport de débogage %(name)s n'existe pas"
msgid "Debug report tool not found in system"
-msgstr "L'outil de rapport de déboggage n'a pas été trouvé dans le système"
+msgstr ""
+"Outil de génération de rapports de débogage introuvable sur le système"
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
msgstr ""
-"Impossible de créer le rapport de déboggage %(name)s. Détails: %(err)s."
+"Impossible de créer le rapport de débogage %(name)s. Détails : %(err)s."
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
msgstr ""
-"Impossible de trouver un rapport de déboggage avec le nom fourni %(name)s"
+"Aucun rapport de débogage nommé %(name)s n'a été trouvé"
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
msgstr ""
-"Impossible de générer le rapport de déboggage %(name)s. Détails: %(err)s"
+"Impossible de générer le rapport de débogage %(name)s. Détails : %(err)s"
msgid "You should give a name for the debug report file."
-msgstr "Vous devriez donner un nom au fichier de rapport de déboggage."
+msgstr ""
+"Vous devez indiquer un nom pour le fichier du rapport de débogage."
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
-"Le nom du rapport de déboggage doit être une chaîne de caractères. Seulement "
-"les lettres, chiffres, blanc souligné ('_') et tirets ('-') sont acceptés."
+"Le nom du rapport de débogage doit être une chaîne. Seuls des lettres, chiffres, trait de soulignement ('_') "
+"et tiret ('-') sont autorisés."
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
msgstr ""
-"Le rapport de déboggage avec le nom spécifié \"%(name)s\" existe déjà. "
-"Veuillez en utiliser un autre."
+"Le rapport de débogage nommé \"%(name)s\" existe déjà. Veuillez utiliser "
+"un autre nom."
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr "Le server de stockage %(server)s n'était pas utilisé par Kimchi"
+msgstr ""
+"Le serveur de stockage %(server)s n'a pas été utilisé par Kimchi"
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr "La distro '%(name)s' n'existe pas"
+msgstr ""
+"La distribution '%(name)s' n'existe pas"
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr "La partition %(name)s n'existe pas sur cet hôte"
+msgstr ""
+"La partition %(name)s n'existe pas sur l'hôte"
msgid "Unable to shutdown host machine as there are running virtual machines"
msgstr ""
-"Impossible d'éteindre la machine hôte car des machines virtuelles en sont "
-"cours d'exécution"
+"Impossible d'arrêter la machine hôte car des machines virtuelles sont en cours d'exécution"
msgid "Unable to reboot host machine as there are running virtual machines"
msgstr ""
-"Impossible de redémarrer la machine hôte car des machines virtuelles en sont "
-"cours d'exécution"
+"Impossible de réamorcer la machine hôte car des machines virtuelles sont en cours d'exécution"
#, python-format
msgid "Node device '%(name)s' not found"
-msgstr "Périphérique de noeud '%(name)s' non trouvé"
+msgstr ""
+"Unité de noeud '%(name)s' introuvable"
msgid "Conflicting flag filters specified."
-msgstr "Filtres incompatibles spécifiés."
+msgstr ""
+"Filtres d'indicateur en conflit spécifiés."
msgid "No packages marked for update"
-msgstr "Aucun paquet marqué pour mise à jour"
+msgstr ""
+"Aucun module marqué pour mise à jour"
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr "Le paquet %(name)s n'est pas marqué pour mise à jour"
+msgstr ""
+"Le module %(name)s n'est pas marqué pour mise à jour."
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
msgstr ""
-"Erreur durant la récupération des paquets marqués pour la miseà jour. "
-"Détails: %(err)s"
+"Erreur lors de l'obtention des modules marqués pour mise à jour. Détails : %(err)s"
msgid "There is no compatible package manager for this system."
-msgstr "Il n'y a pas de gestionnaire de paquets compatible avec ce système."
+msgstr ""
+"Aucun gestionnaire de modules compatible pour ce système."
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr "Impossible de trouver %(item)s dans le magasin de données"
+msgstr ""
+"%(item)s introuvable dans le magasin de données"
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr "URI %(uri)s invalide"
+msgstr ""
+"URI %(uri)s non valide"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
msgstr ""
-"Timeout durant l'exécution de la commande '%(cmd)s' après %(seconds)s "
-"secondes"
+"Dépassement de délai lors de l'exécution de la commande '%(cmd)s' après %(seconds)s secondes"
msgid "Unable to choose a virtual machine name"
-msgstr "Impossible de sélectionner un nom de machine virtuelle"
+msgstr ""
+"Impossible de sélectionner un nom de machine virtuelle"
#, python-format
msgid "Invalid data value '%(value)s'"
msgstr ""
+"Valeur de données '%(value)s' non valide"
#, python-format
msgid "Invalid data unit '%(unit)s'"
msgstr ""
+"Unité de données '%(unit)s' non valide"
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
-msgstr "Type de stockage invalide. Les Types supportés sont: 'cdrom', 'disk'"
+msgstr ""
+"Type de stockage non valide. Types pris en charge : 'cdrom', 'disk'"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
msgstr ""
+"Le chemin '%(value)s' n'est pas un chemin local/distant valide pour l'unité"
msgid "Only CDROM path can be update."
-msgstr "Seulement le chemin d'un CDROM peut être modifié."
+msgstr ""
+"Seul le chemin du CD-ROM peut être mis à jour."
#, python-format
msgid ""
"The storage device %(dev_name)s does not exist in the virtual machine "
"%(vm_name)s"
msgstr ""
-"Le périphérique de stockage %(dev_name)s n'existe pas dans la machine "
-"virtuelle %(vm_name)s"
+"L'unité de stockage %(dev_name)s n'existe pas sur la machine virtuelle "
+"%(vm_name)s"
#, python-format
msgid "Error while creating new storage device: %(error)s"
msgstr ""
-"Erreur durant la création du nouveau périphérique de stockage: %(error)s"
+"Erreur lors de la création de l'unité de stockage : %(error)s"
#, python-format
msgid "Error while updating storage device: %(error)s"
-msgstr "Erreur durant la mise à jour du périphérique de stockage: %(error)s"
+msgstr ""
+"Erreur lors de la mise à jour de l'unité de stockage : %(error)s"
#, python-format
msgid "Error while removing storage device: %(error)s"
-msgstr "Erreur durant le retrait du périphérique de stockage: %(error)s"
+msgstr ""
+"Erreur lors du retrait de l'unité de stockage : %(error)s"
msgid "Do not support IDE device hot plug"
-msgstr "Ne pas supporter le branchement à chaud de périphérique IDE"
+msgstr ""
+"Pas de prise en charge du remplacement à chaud d'unité IDE"
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
"disk"
msgstr ""
-"Spécifier le type et le chemin ou le type et le pool/volume pour ajouter un "
-"nouveau disque de machine virtuelle."
+"Spécifiez un type et un chemin pour ajouter un nouveau disque "
+"de machine virtuelle"
msgid "Specify path to update virtual machine disk"
-msgstr "Spécifier un chemin pour mettre à jour le disque de machine virtuelle"
+msgstr ""
+"Indiquez le chemin pour mettre à jour le disque de machine virtuelle"
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
msgstr ""
-"La limitation de %(limit)s périphériques a été atteinte pour le contrôleur "
-"de type %(type)s "
+"Le type de contrôleur %(type)s a atteint sa limite de %(limit)s unités"
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
msgstr ""
+"Impossible d'extraire les informations de chemin d'accès au disque pour le pool/volume donné : %(error)s"
msgid "Volume already in use by other virtual machine."
msgstr ""
+"Le volume est déjà utilisé par une autre machine virtuelle."
msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
msgstr ""
-"Seul un chemin ou pool/volume peut être spécifié pour ajouter un nouveau "
-"disque de machine virtuelle"
+"Soit le chemin, soit le pool/volume peut être spécifié pour ajouter un nouveau disque "
+"de machine virtuelle"
#, python-format
msgid ""
"Volume chosen with format %(format)s does not fit in the storage type "
"%(type)s"
msgstr ""
-"Le volume de format %(format)s sélectionné ne correspond pas au type de "
-"stockage %(type)s"
+"Le volume choisi avec le format %(format)s n'est pas adapté au type de stockage "
+"%(type)s"
msgid "YUM Repository ID must be one word only string."
msgstr ""
-"L'ID du dépôt YUM doit être une chaîne de caractères ne comportant qu'un "
-"seul mot"
+"L'ID référentiel YUM doit être une chaîne d'un seul mot."
msgid "Repository URL must be an http://, ftp:// or file:// URL."
-msgstr "L'URL du dépôt doit être une URL en http://, ftp:// ou file://."
+msgstr ""
+"L'URL du référentiel doit être de type http://, ftp:// ou file://."
msgid ""
"Repository configuration is a dictionary with specific values according to "
"repository type."
msgstr ""
-"La configuration du dépôt est un dictionaire avec des valeurs spécifiques en "
-"accord avec le type de dépôt."
+"La configuration de référentiel est un dictionnaire avec des valeurs spécifiques en fonction "
+"du type de référentiel."
msgid "Distribution to DEB repository must be a string"
msgstr ""
-"La distribution dans le nom de dépôt DEB doit être une chaîne de caractères"
+"La distribution sur le référentiel DEB doit être une chaîne"
msgid "Components to DEB repository must be listed in a array"
-msgstr "Les composants dans le dépôt DEB doivent être listés dans un tableau"
+msgstr ""
+"Les composants du référentiel DEB doivent être répertoriés dans un tableau"
msgid "Components to DEB repository must be a string"
-msgstr "Les composants dans le dépôt DEB doivent être une chaîne de caractères"
+msgstr ""
+"Les composants du référentiel DEB doivent être une chaîne"
msgid "Mirror list to repository must be a string"
msgstr ""
+"La liste miroir du référentiel doit être une chaîne"
msgid "YUM Repository name must be string."
-msgstr "Le nom du dépôt YUM doit être une chaîne de caractères"
+msgstr ""
+"Le nom de référentiel YUM doit être une chaîne."
msgid "GPG check must be a boolean value."
-msgstr "La vérification GPG doit être une valeur booléenne."
+msgstr ""
+"Le contrôle GPG doit être une valeur booléenne."
msgid "GPG key must be a URL pointing to the ASCII-armored file."
-msgstr "La clé GPG doit être une URL pointant vers un fichier ASCII non armé."
+msgstr ""
+"La clé GPG doit être une URL pointant sur le fichier ASCII."
#, python-format
msgid "Could not update repository %(repo_id)s."
-msgstr "Ne peut mettre à jour le dépôt %(repo_id)s."
+msgstr ""
+"Impossible de mettre à jour le référentiel %(repo_id)s."
#, python-format
msgid "Repository %(repo_id)s does not exist."
-msgstr "Le dépôt %(repo_id)s n'existe pas."
+msgstr ""
+"Le référentiel %(repo_id)s n'existe pas."
msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
"update a YUM repository."
msgstr ""
+"Indiquez l'URL de base du référentiel, la liste miroir ou le lien afin de créer ou "
+"mettre à jour un référentiel YUM."
msgid "Repository management tool was not recognized for your system."
-msgstr "L'outil de gestion de dépôt n'a pas été reconnu pour votre système."
+msgstr ""
+"L'outil de gestion de référentiel n'a pas été reconnu pour votre système."
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr "Le dépôt %(repo_id)s est déjà activé."
+msgstr ""
+"Le référentiel %(repo_id)s est déjà activé."
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr "Le dépôt %(repo_id)s est déjà désactivé."
+msgstr ""
+"Le référentiel %(repo_id)s est déjà désactivé."
#, python-format
msgid "Could not remove repository %(repo_id)s."
-msgstr "Ne peut supprimer le dépôt %(repo_id)s. "
+msgstr ""
+"Impossible de supprimer le référentiel %(repo_id)s."
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
-msgstr "Ne peut écrire le fichier de configuration du dépôt %(repo_file)s"
+msgstr ""
+"Impossible d'écrire dans le fichier de configuration du référentiel %(repo_file)s"
msgid "Specify repository distribution in order to create a DEB repository."
-msgstr "Spécifier la distribution du dépôt afin de créer un dépôt DEB."
+msgstr ""
+"Indiquez une distribution de référentiel pour créer un référentiel DEB."
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr "Ne peut activer le dépôt %(repo_id)s."
+msgstr ""
+"Impossible d'activer le référentiel %(repo_id)s."
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr "Ne peut désactiver le dépôt %(repo_id)s."
+msgstr ""
+"Impossible de désactiver le référentiel %(repo_id)s."
msgid "YUM Repository ID already exists"
-msgstr "L'ID du dépôt YUM existe déjà"
+msgstr ""
+"L'ID référentiel YUM existe déjà"
msgid "YUM Repository name must be a string"
-msgstr "Le nom du dépôt YUM doit être une chaîne de caractères"
+msgstr ""
+"Le nom de référentiel YUM doit être une chaîne."
#, python-format
msgid "Unable to list repositories. Details: '%(err)s'"
-msgstr "Impossible de lister les dépôts. Détails: '%(err)s'"
+msgstr ""
+"Impossible de répertorier les référentiels. Détails : '%(err)s'"
#, python-format
msgid "Unable to retrieve repository information. Details: '%(err)s'"
-msgstr "Impossible de récupérer les informations du dépôt. Détails: '%(err)s'"
+msgstr ""
+"Impossible d'extraire les informations relatives au référentiel. Détails : '%(err)s'"
#, python-format
msgid "Unable to add repository. Details: '%(err)s'"
-msgstr "Impossible d'ajouter un dépôt. Détails: '%(err)s'"
+msgstr ""
+"Impossible d'ajouter le référentiel. Détails : '%(err)s'"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr "Impossible de supprimer un dépôt. Détails: '%(err)s'"
+msgstr ""
+"Impossible de supprimer le référentiel. Détails : '%(err)s'"
#, python-format
msgid ""
"Configuration items: '%(items)s' are not supported by repository manager"
msgstr ""
-"Éléments de configurations: %(items)s ne sont pas supportés par le "
-"gestionnaire de dépôt"
+"Les éléments de configuration '%(items)s' ne sont pas pris en charge par le gestionnaire de référentiel"
msgid "Repository metalink must be an http://, ftp:// or file:// URL."
msgstr ""
+"Le lien du référentiel doit être une URL http://, ftp:// ou file://."
msgid "Cannot specify mirrorlist and metalink at the same time."
msgstr ""
+"Impossible de spécifier à la fois la liste miroir et le lien."
#, python-format
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
msgstr ""
+"La machine virtuelle '%(vm)s' doit être arrêtée avant la création d'une image instantanée de celle-ci."
#, python-format
msgid ""
"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"Impossible de créer l'image instantanée '%(name)s' sur la machine virtuelle '%(vm)s'. Détails : "
+"%(err)s"
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
msgstr ""
+"L'image instantanée '%(name)s' n'existe pas sur la machine virtuelle '%(vm)s'."
#, python-format
msgid ""
"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"Impossible d'extraire l'image instantanée '%(name)s' sur la machine virtuelle '%(vm)s'. Détails : "
+"%(err)s"
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
msgstr ""
+"Impossible de répertorier les images instantanées sur la machine virtuelle '%(vm)s'. Détails : %(err)s"
#, python-format
msgid ""
"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"Impossible de supprimer l'image instantanée '%(name)s' sur la machine virtuelle '%(vm)s'. Détails : "
+"%(err)s"
#, python-format
msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"Impossible d'extraire l'image instantanée en cours de la machine virtuelle '%(vm)s'. Détails : "
+"%(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
msgstr ""
+"Impossible de rétablir la machine virtuelle '%(vm)s' à l'image instantanée '%(name)s'. Détails : "
+"%(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
+"Impossible de créer l'image instantanée de la machine virtuelle '%(vm)s' car elle contient un "
+"disque au format '%(format)s' ; seul 'qcow2' est pris en charge."
msgid "The number of vCPUs is too large for this system."
msgstr ""
+"Le nombre d'UC virtuelles est trop élevé pour ce système."
msgid "Invalid vCPU/topology combination."
msgstr ""
+"Combinaison d'UC virtuelle/topologie non valide."
msgid "This host (or current configuration) does not allow CPU topology."
msgstr ""
+"Cet hôte (ou configuration actuelle) n'autorise pas la topologie d'UC."
msgid "ERROR CODE"
-msgstr "ERROR CODE"
+msgstr ""
+"CODE D'ERREUR"
msgid "REASON"
-msgstr "REASON"
+msgstr ""
+"MOTIF"
msgid "STACK"
-msgstr "STACK"
+msgstr ""
+"PILE"
msgid "Go to Homepage"
-msgstr "Aller à la page d'accueil"
+msgstr ""
+"Accéder à la page d'accueil"
msgid "Create a New Virtual Machine"
-msgstr "Créer une nouvelle Machine Virtuelle"
+msgstr ""
+"Créer une machine virtuelle"
msgid "Virtual Machine Name"
-msgstr "Nom de Machine Virtuelle"
+msgstr ""
+"Nom de la machine virtuelle"
msgid ""
"The name used to identify the virtual machine. If omitted, a name will be "
"chosen based on the template used."
msgstr ""
-"Le nm est utilisé pour identifier une machine virtuelle. Si omis, un nom "
-"sera choisi en se basant sur le modèle utilisé."
+"Nom utilisé pour identifier la machine virtuelle. S'il est omis, un nom sera "
+"choisi en fonction du modèle utilisé."
msgid "Template"
-msgstr "Modèle"
+msgstr ""
+"Modèle"
msgid "Please create a template first."
-msgstr "Veuillez d'abord créer un modèle."
+msgstr ""
+"Commencez par créer un modèle."
msgid "Create a Template"
-msgstr "Créer un modèle"
+msgstr ""
+"Créer un modèle"
msgid "Please choose a template."
-msgstr "Veuillez choisir un modèle"
+msgstr ""
+"Sélectionnez un modèle."
msgid "OS"
-msgstr "OS"
+msgstr ""
+"SE"
msgid "OS Version"
-msgstr "Version de l'OS"
+msgstr ""
+"Version SE"
msgid "CPUS"
-msgstr "CPUS"
+msgstr ""
+"Unités centrales"
msgid "Memory"
-msgstr "Mémoire"
+msgstr ""
+"Mémoire"
msgid "Create"
-msgstr "Créer"
+msgstr ""
+"Créer"
msgid "Creating..."
-msgstr "Création en cours..."
+msgstr ""
+"Création..."
msgid "Edit Guest"
-msgstr "Éditer l'Invité"
+msgstr ""
+"Editer l'invité"
msgid "General"
-msgstr "Général"
+msgstr ""
+"Général"
msgid "Storage"
-msgstr "Stockage"
+msgstr ""
+"Stockage"
msgid "Interface"
-msgstr "Interface"
+msgstr ""
+"Interface"
msgid "Permission"
-msgstr "Permission"
+msgstr ""
+"Droits"
msgid "Host PCI Device"
-msgstr "Périphérique PCI Hôte"
+msgstr ""
+"Unité PCI hôte"
msgid "Snapshot"
msgstr ""
+"Image instantanée"
msgid "Name"
-msgstr "Nom"
+msgstr ""
+"Nom"
msgid "CPUs"
-msgstr "CPUs"
+msgstr ""
+"UC"
msgid "Memory (MB)"
-msgstr "Mémoire (Mo)"
+msgstr ""
+"Mémoire (Mo)"
msgid "Icon"
-msgstr "Icone"
+msgstr ""
+"Icône"
msgid "Device"
-msgstr "Périphérique"
+msgstr ""
+"Unité"
msgid "Path"
-msgstr "Chemin"
+msgstr ""
+"Chemin"
msgid "Network"
-msgstr "Réseau"
+msgstr ""
+"Réseau"
msgid "Type"
-msgstr "Type"
+msgstr ""
+"Type"
msgid "MAC Address"
msgstr ""
+"Adresse MAC"
msgid "Available system users and groups"
-msgstr "Utilisateurs et groupes systèmes disponibles"
+msgstr ""
+"Groupes et utilisateurs système disponibles"
msgid "Selected system users and groups"
-msgstr "Utilisateurs et groupes systèmes sélectionnés"
+msgstr ""
+"Groupes et utilisateurs système sélectionnés"
msgid "User"
msgstr ""
+"Utilisateur"
msgid "All"
-msgstr "Tous"
+msgstr ""
+"Tout"
msgid "To Add"
-msgstr "À Ajouter"
+msgstr ""
+"A ajouter"
msgid "Added"
-msgstr "Ajouter"
+msgstr ""
+"Ajouté"
msgid "filter"
-msgstr "Filtre"
+msgstr ""
+"filtre"
msgid "Product"
-msgstr "Produit"
+msgstr ""
+"Produit"
msgid "Vendor"
-msgstr "Vendeur"
+msgstr ""
+"Fournisseur"
msgid "Created"
msgstr ""
+"Créé"
msgid "Save"
-msgstr "Enregistrer"
+msgstr ""
+"Sauvegarder"
msgid "Replace"
-msgstr "Remplacer"
+msgstr ""
+"Remplacer"
msgid "Detach"
-msgstr "Détacher"
+msgstr ""
+"Détacher"
msgid "Cancel"
-msgstr "Annuler"
+msgstr ""
+"Annuler"
msgid "revert"
msgstr ""
+"rétablir"
msgid "Add a Storage Device to VM"
-msgstr "Ajouter un Périphérique de Stockage à la VM"
+msgstr ""
+"Ajouter une unité de stockage à la machine virtuelle"
msgid "Device Type"
-msgstr "Type de Périphérique"
+msgstr ""
+"Type d'unité"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
msgstr ""
-"Le type de périphérique. Actuellement, \"cdrom\" et \"disk\" sont supportés."
+"Type d'unité. Actuellement, \"cdrom\" et \"disk\" seulement sont pris en charge."
msgid "Storage Pool"
-msgstr "Pool de Stockage"
+msgstr ""
+"Pool de stockage"
msgid "Storage pool which volume located in"
-msgstr "Pool de Stockage dans lequel le volume est situé"
+msgstr ""
+"Pool de stockage dans lequel le volume est situé"
msgid "Storage Volume"
-msgstr "Volume de Stockage"
+msgstr ""
+"Volume de stockage"
msgid "Storage volume to be attached"
-msgstr "Le volume de stockage à attacher"
+msgstr ""
+"Volume de stockage à attacher"
msgid "File Path"
-msgstr "Chemin de Fichier"
+msgstr ""
+"Chemin d'accès au fichier"
msgid "The ISO file path in the server for CDROM."
-msgstr "Le chemin de fichier ISO sur le serveur comme CDROM."
+msgstr ""
+"Chemin d'accès au fichier ISO sur le serveur pour le CD-ROM."
msgid "Attach"
-msgstr "Attacher"
+msgstr ""
+"Attacher"
msgid "Start"
-msgstr "Démarrer"
+msgstr ""
+"Démarrer"
msgid "Reset"
-msgstr "Réinitialiser"
+msgstr ""
+"Réinitialiser"
msgid "Pause"
msgstr ""
+"Pause"
msgid "Resume"
msgstr ""
+"Reprendre"
msgid "Power Off"
-msgstr "Mettre hors tension"
+msgstr ""
+"Mettre hors tension"
msgid "Actions"
-msgstr "Actions"
+msgstr ""
+"Actions"
msgid "Connect"
-msgstr "Connecter"
+msgstr ""
+"Se connecter"
msgid "Clone"
-msgstr "Cloner"
+msgstr ""
+"Cloner"
msgid "Edit"
-msgstr "Éditer"
+msgstr ""
+"Editer"
msgid "Shut Down"
-msgstr "Éteindre"
+msgstr ""
+"Arrêter"
msgid "Delete"
-msgstr "Supprimer"
+msgstr ""
+"Supprimer"
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
-"Le nom d'utilisateur ou le mot de passe que vous avez entré est incorrect. "
-"Veuillez essayer à nouveau."
+"Le nom d'utilisateur ou le mot de passe entré est incorrect. Veuillez recommencer."
msgid "This field is required."
-msgstr "Ce champ est requis."
+msgstr ""
+"Cette zone est obligatoire."
msgid "Log in"
-msgstr "Se connecter"
+msgstr ""
+"Connexion"
msgid "Logging in..."
-msgstr "En cours de connexion..."
+msgstr ""
+"Connexion en cours..."
msgid "Host"
-msgstr "Hôte"
+msgstr ""
+"Hôte"
msgid "Guests"
-msgstr "Invités"
+msgstr ""
+"Invités"
msgid "Templates"
-msgstr "Modèles"
+msgstr ""
+"Modèles"
msgid "Failed to get application configuration"
-msgstr "Échec lors de l'obtention de la configuration de l'application"
+msgstr ""
+"Echec d'obtention de la configuration d'application"
msgid "This is not a valid Linux path"
-msgstr "Ce n'est pas un chemin Linux valide"
+msgstr ""
+"Ce chemin Linux n'est pas valide"
msgid "This is not a valid URL."
-msgstr "Ce n'est pas une URL valide."
+msgstr ""
+"Cette URL n'est pas valide."
msgid "No such data available."
-msgstr "De telles données ne sont pas disponibles."
+msgstr ""
+"Aucune donnée de ce type disponible."
msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"Ne peut contacter le système hôte. Vérifiez que le système hôte est allumé "
-"et que vous avez une connectivité réseau avec lui. Réponse de requête HTTP "
-"%1."
+"Impossible de contacter le système hôte. Vérifiez que celui-ci est démarré et "
+"que vous disposez d'une connectivité au système hôte. Réponse à la demande HTTP %1. "
msgid "Unable to read file."
msgstr ""
+"Impossible de lire le fichier."
msgid "Error while uploading file."
msgstr ""
+"Erreur lors du téléchargement du fichier."
msgid "Delete Confirmation"
-msgstr "Confirmation de Suppression"
+msgstr ""
+"Confirmation de suppression"
msgid "OK"
-msgstr "OK"
+msgstr ""
+"OK"
msgid "Confirm"
-msgstr "Confirmer"
+msgstr ""
+"Confirmer"
msgid "Warning"
-msgstr "Avertissement"
+msgstr ""
+"Avertissement"
msgid "Cloning..."
msgstr ""
+"Clonage en cours..."
msgid "Loading..."
-msgstr "Chargement en cours..."
+msgstr ""
+"Chargement en cours..."
msgid "An error occurred while retrieving system information."
msgstr ""
+"Une erreur s'est produite lors de l'extraction des informations système."
msgid "Retry"
-msgstr "Essayer à nouveau"
+msgstr ""
+"Nouvelle tentative"
msgid "Detailed message:"
-msgstr "Message détaillé:"
+msgstr ""
+"Message détaillé :"
msgid "No ISO found"
-msgstr "Aucune ISO détectée"
+msgstr ""
+"ISO introuvable"
msgid "This is not a valid ISO file."
-msgstr "Ce n'est pas un fichier ISO valide."
+msgstr ""
+"Ceci n'est pas un fichier ISO valide."
msgid "This may take a long time. Do you want to continue?"
-msgstr "Cela va prendre un long moment. Voulez-vous continuer ?"
+msgstr ""
+"Cette opération peut être assez longue. Voulez-vous continuer ?"
msgid "This will permanently delete the template. Would you like to continue?"
msgstr ""
-"Cela va supprimer de manière permanent le modèle. Souhaites-vous continuer ?"
+"Le modèle va être supprimé définitivement. Voulez-vous continuer ?"
msgid "Unable to shut down system as there are some virtual machines running!"
msgstr ""
-"Impossible d'éteindre le système du fait que certaines machines virtuelles "
-"sont lancées !"
+"Impossible d'arrêter le système car certaines machines virtuelles sont en cours d'exécution !"
msgid "Max:"
-msgstr "Max:"
+msgstr ""
+"Maximum :"
msgid "Utilization"
-msgstr "Utilisation"
+msgstr ""
+"Utilisation"
msgid "Available"
-msgstr "Disponible"
+msgstr ""
+"Disponible"
msgid "Read Rate"
-msgstr "Taux en Lecture"
+msgstr ""
+"Vitesse de lecture"
msgid "Write Rate"
-msgstr "Taux en Écriture"
+msgstr ""
+"Vitesse d'écriture"
msgid "Received"
-msgstr "Reçu"
+msgstr ""
+"Reçu"
msgid "Sent"
-msgstr "Envoyé"
+msgstr ""
+"Envoyé"
msgid ""
"Shutting down or restarting host will cause unsaved work lost. Continue to "
"shut down/restarting?"
msgstr ""
-"Éteindre ou redémarrer l'hôte causera la perte de tout travail non "
-"enregistré. Continuer à éteindre/redémarrer ?"
+"L'arrêt ou le redémarrage de l'hôte va entraîner la perte du travail non sauvegardé. Poursuivre "
+"l'arrêt/le redémarrage ?"
msgid ""
"Repository will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"Le dépôt sera retiré de façon permanente et ne pourra être rétabli. Voulez-"
-"vous continuer ?"
+"Le référentiel va être retiré définitivement et ne pourra pas être récupéré. Voulez-vous "
+"continuer ?"
msgid "Repositories"
-msgstr "Dépôts"
+msgstr ""
+"Référentiels"
msgid "ID"
-msgstr "ID"
+msgstr ""
+"ID"
msgid "Base URL"
-msgstr "URL de base"
+msgstr ""
+"URL de base"
msgid "Is Mirror"
-msgstr "Est un miroir"
+msgstr ""
+"Est un miroir"
msgid "URL Args"
-msgstr "Arguments d'URL"
+msgstr ""
+"Arguments d'URL"
msgid "Enabled"
-msgstr "Activé"
+msgstr ""
+"Activé"
msgid "GPG Check"
-msgstr "Vérification GPG"
+msgstr ""
+"Contrôle GPG"
msgid "GPG Key"
-msgstr "Clé GPG"
+msgstr ""
+"Clé GPG"
msgid "Add"
-msgstr "Ajouter"
+msgstr ""
+"Ajouter"
msgid "Remove"
-msgstr "Retirer"
+msgstr ""
+"Retirer"
msgid "Enable"
-msgstr "Activer"
+msgstr ""
+"Activer"
msgid "Disable"
-msgstr "Désactiver"
+msgstr ""
+"Désactiver"
msgid "Software Updates"
-msgstr "Mises à jour Logiciel"
+msgstr ""
+"Mises à jour logicielles"
msgid "Package Name"
-msgstr "Nom de paquet"
+msgstr ""
+"Nom du module"
msgid "Version"
-msgstr "Version"
+msgstr ""
+"Version"
msgid "Architecture"
-msgstr "Architecture"
+msgstr ""
+"Architecture"
msgid "Repository"
-msgstr "Dépôt"
+msgstr ""
+"Référentiel"
msgid "Update All"
-msgstr "Tout mettre à jour"
+msgstr ""
+"Tout mettre à jour"
msgid "Updating..."
-msgstr "En cours de mise à jour..."
+msgstr ""
+"Mise à jour en cours..."
msgid "Failed to retrieve packages update information."
-msgstr "Échec de récupération des informations de mise-à-jour des paquets."
+msgstr ""
+"Echec de l'extraction des informations de mise à jour des modules."
msgid "Failed to update package(s)."
-msgstr "Échec durant la mise à jour du/des paquet(s)"
+msgstr ""
+"Echec de mise à jour du ou des modules."
msgid ""
"Debug report will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"Le rapport de déboggage sera enlevé de façon permanente et ne pourra être "
-"rétabli. Voulez-vous continuer ?"
+"Le rapport de débogage va être retiré définitivement et ne pourra pas être récupéré. Voulez-vous "
+"continuer ?"
msgid "Debug Reports"
-msgstr "Rapports de Déboggage"
+msgstr ""
+"Rapports de débogage"
msgid "Generated Time"
-msgstr "Horodatage de génération"
+msgstr ""
+"Heure génération"
msgid "Generate"
-msgstr "Générer"
+msgstr ""
+"Générer"
msgid "Generating..."
-msgstr "En cours de génération..."
+msgstr ""
+"Génération en cours..."
msgid "Rename"
-msgstr "Renommer"
+msgstr ""
+"Renommer"
msgid "Download"
-msgstr "Télécharger"
+msgstr ""
+"Télécharger"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
"hyphen ('-')."
msgstr ""
-"Le nom de rapport devrait contenir uniquement des lettres, nombres, "
-"soulignement ('_') et/ou tiret ('-')."
+"Le nom du rapport doit comporter uniquement des lettres, chiffres, trait de soulignement ('_') et/ou "
+"tiret ('-')."
msgid "Pending..."
-msgstr "En attente..."
+msgstr ""
+"En attente..."
msgid "Report name is the same as the original one."
-msgstr "Le nom du rapport est le même que celui d'origine."
+msgstr ""
+"Le nom du rapport est identique au nom d'origine."
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
"cannot be undone. Would you like to continue?"
msgstr ""
-"Cela va supprimer la machine virtuelle et tous ses disques virtuels. Cette "
-"opération est irréversible. Voulez-vous continuer ?"
+"Cette opération va supprimer la machine virtuelle et ses disques virtuels. L'opération "
+"ne peut pas être annulée. Voulez-vous continuer ?"
msgid "Power off Confirmation"
-msgstr "Confirmation de mise hors tension"
+msgstr ""
+"Confirmation de mise hors tension"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
"cache in the guest. Would you like to continue?"
msgstr ""
-"Cette action pourrait produire des résultats indésirables, par exemple un "
-"cache disque non flushé dans l'invité. Voulez-vous continuer ?"
+"Cette action peut produire des résultats indésirables, par exemple, "
+"un cache de disque non vidé sur le système invité. Voulez-vous continuer ?"
msgid "Reset Confirmation"
-msgstr "Confirmation de Réinitialisation"
+msgstr ""
+"Confirmation de réinitialisation"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
"Would you like to continue?"
msgstr ""
-"Il y a un risque de perte de données causées par une réinitialisation sans "
-"extinction de l'OS invité. Voulez-vous continuer ?"
+"Risque de perte de données suite à une réinitialisation sans arrêt du système d'exploitation invité. "
+"Voulez-vous continuer ?"
msgid "Shut Down Confirmation"
-msgstr "Confirmation d'Extinction"
+msgstr ""
+"Confirmation d'arrêt"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
msgstr ""
-"Noter que l'OS invité pourrait ignorer cette requête. Voulez-vous continuer ?"
+"Notez que le système d'exploitation invité peut ignorer cette demande. Voulez-vous continuer ?"
msgid "Virtual Machine delete Confirmation"
-msgstr "Confirmation de suppression de Machine Virtuelle"
+msgstr ""
+"Confirmation de la suppression de la machine virtuelle"
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
msgstr ""
+"Cette machine virtuelle n'est pas permanente. Elle sera supprimée lors de la mise hors tension. Continuer ?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
"default storage pool. The same will happen when the target pool does not "
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
+"Lorsque l'invité cible comporte des volumes SCSI ou iSCSI, ces derniers sont clonés dans le "
+"pool de stockage par défaut. Cela se produit également lorsque le pool cible ne comporte "
+"pas suffisamment d'espace pour cloner les volumes. Voulez-vous continuer ?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
msgstr ""
-"Ce CDROM sera détaché de façon permanente et vous pourrez le ré-attacher. "
-"Continuer le détachement ?"
+"Ce CD-ROM va être détaché définitivement et ne pourra pas être attaché à nouveau. Continuer "
+"le détachement ?"
msgid "Attaching..."
-msgstr "En cours d'attachement..."
+msgstr ""
+"Attachement en cours..."
msgid "Replacing..."
-msgstr "En cours de Remplacement..."
+msgstr ""
+"Remplacement en cours..."
msgid "Successfully attached!"
-msgstr "Attaché avec succès !"
+msgstr ""
+"L'attachement a abouti."
msgid "Successfully replaced!"
-msgstr "Remplacé avec succès !"
+msgstr ""
+"Le remplacement a abouti."
msgid "Successfully detached!"
-msgstr "Détaché avec Succès !"
+msgstr ""
+"Le détachement a abouti."
msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
msgstr ""
-"Ce disque sera définitivement détaché et peut être ré-attaché. Continuer à "
-"le détacher ?"
+"Ce disque va être détaché définitivement et ne pourra pas être attaché à nouveau. Continuer "
+"le détachement ?"
msgid "interface:"
msgstr ""
+"interface :"
msgid "address:"
msgstr ""
+"adresse :"
msgid "link_type:"
msgstr ""
+"type_lien :"
msgid "block:"
msgstr ""
+"bloc :"
msgid "drive_type:"
msgstr ""
+"type_lecteur :"
msgid "model:"
msgstr ""
+"modèle :"
msgid "Affected devices:"
msgstr ""
+"Unités concernées :"
msgid "The VLAN id must be between 1 and 4094."
-msgstr "L'id du VLAN doit être entre 1 et 4094."
+msgstr ""
+"L'ID réseau local virtuel doit être compris entre 1 et 4094."
msgid "unavailable"
-msgstr "non disponible"
+msgstr ""
+"non disponible"
msgid ""
"This action will interrupt network connectivity for any virtual machine that "
"depend on this network."
msgstr ""
-"Cette action va interrompre la connectivité réseau pour tout machine "
-"virtuelle qui dépend de ce réseau."
+"Cette action va interrompre la connectivité réseau pour toute machine virtuelle "
+"dépendant de ce réseau."
msgid "Create a network"
-msgstr "Créer un réseau"
+msgstr ""
+"Créer un réseau"
msgid ""
"This network is not persistent. Instead of stop, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Ce réseau n'est pas persistant. Au lieu de s'arrêter, cette actionva le "
-"suppromer de manière permanente. Voulez-vous continuer ?"
+"Il ne s'agit pas d'un réseau permanent. Au lieu de l'arrêter, cette action va "
+"le supprimer de manière permanente. Voulez-vous continuer ?"
msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
+"Il se peut que l'étiquette Réseau local virtuel local routé ne fonctionne pas correctement lorsque NetworkManager est activé. Vous "
+"devez envisager de désactiver ce dernier."
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
msgstr ""
-"Cela va effacer de manière permanente le pool de stockage. Voulez-vous "
-"continuer ?"
+"Le pool de stockage va être supprimé définitivement. Voulez-vous continuer ?"
msgid "This storage pool is empty."
-msgstr "Ce pool de stockage est vide."
+msgstr ""
+"Ce pool de stockage est vide."
msgid ""
"It will format your disk and you will loose any data in there, are you sure "
"to continue? "
msgstr ""
-"Cela va formater votre disque et vous allez perdre toutes les données qui "
-"s'y trouvent, êtes-vous sûr de continuer ?"
+"Le disque va être formaté et vous perdrez toutes les données qu'il contient. Voulez-vous vraiment "
+"continuer ? "
msgid "SCSI Fibre Channel"
-msgstr "Canal Fibre SCSI"
+msgstr ""
+"Fibre Channel SCSI"
msgid "No SCSI adapters found."
-msgstr "Aucun adaptateur SCSI trouvé."
+msgstr ""
+"Aucun adaptateur SCSI trouvé."
msgid "Loading iSCSI targets..."
msgstr ""
+"Chargement des cibles iSCSI..."
msgid "No iSCSI found. Please input one."
msgstr ""
+"iSCSI introuvable. Spécifiez-le."
msgid "Failed to load iSCSI targets."
msgstr ""
+"Echec du chargement des cibles iSCSI."
msgid "The storage pool name can not be blank."
-msgstr "Le nom de pool de stockage ne peut être vierge."
+msgstr ""
+"Le nom du pool de stockage ne peut pas être vide."
msgid "The storage pool path can not be blank."
-msgstr "Le chemin de pool de stockage ne peut être vierge."
+msgstr ""
+"Le chemin du pool de stockage ne peut pas être vide."
msgid "NFS server mount path can not be blank."
-msgstr "Le chemin de montage du serveur NFS ne peut être vierge."
+msgstr ""
+"Le chemin de montage du serveur NFS ne peut pas être vide."
msgid "Invalid NFS mount path."
-msgstr "Chemin de montage NFS invalide."
+msgstr ""
+"Chemin de montage NFS non valide."
msgid "No logical device selected."
-msgstr "Aucun périphérique logique sélectionné."
+msgstr ""
+"Aucune unité logique sélectionnée."
msgid "The iSCSI target can not be blank."
-msgstr "La cible iSCSI ne peut être vierge."
+msgstr ""
+"La cible iSCSI ne peut pas être vide."
msgid "Server name can not be blank."
-msgstr "Le nom de serveur ne peut être vierge."
+msgstr ""
+"Le nom du serveur ne peut pas être vide."
msgid "This is not a valid Server Name or IP. Please, modify it."
msgstr ""
+"Il ne s'agit pas d'un nom de serveur ou d'une adresse IP valide. Modifiez cet élément."
msgid "Looking for available partitions ..."
-msgstr "En cours de recherche de partitions disponibles..."
+msgstr ""
+"Recherche des partitions disponibles..."
msgid "No available partitions found."
-msgstr "Aucune partition disponible trouvée."
+msgstr ""
+"Aucune partition disponible trouvée."
msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Le pool de stockage n'est pas persistent. Au lieu de le désactiver, cette "
-"action va le supprimer de manière permanente. Voulez-vous continuer ?"
+"Il ne s'agit pas d'un pool de stockage permanent. Au lieu de le désactiver, cette action va "
+"le supprimer de manière permanente. Voulez-vous continuer ?"
msgid "Unable to retrieve partitions information."
-msgstr "Impossible de récupérer les informations des partitions."
+msgstr ""
+"Impossible d'extraire les informations relatives aux partitions. "
msgid "In progress..."
-msgstr "En cours..."
+msgstr ""
+"En cours..."
msgid "Failed!"
-msgstr "Échec!"
+msgstr ""
+"Echec !"
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
msgstr ""
-"Le chemin de CDROM doit être un chemin local/distant valide et ne peut être "
-"virge."
+"Le chemin de CD-ROM doit être un chemin local/distant et ne peut pas être à blanc."
msgid "Disk pool or volume cannot be blank."
-msgstr "Le pool de disque ou le volume ne peut être vierge."
+msgstr ""
+"Le pool de stockage sur disque ou le volume ne peut pas être à blanc."
msgid "Peers"
msgstr ""
+"Homologues"
msgid "Searching"
msgstr ""
+"Recherche"
msgid "No peers found."
msgstr ""
+"Homologue introuvable."
msgid "Help"
-msgstr "Aide"
+msgstr ""
+"Aide"
msgid "About"
-msgstr "A propos..."
+msgstr ""
+"A propos de"
msgid "Log out"
-msgstr "Se déconnecter"
+msgstr ""
+"Déconnexion"
msgid "Version:"
-msgstr "Version:"
+msgstr ""
+"Version :"
msgid "Session timeout, please re-login."
-msgstr "Session expirée, veuillez vous reconnecter."
+msgstr ""
+"Délai d'attente de session dépassé, veuillez vous reconnecter."
msgid "User Name"
-msgstr "Nom d'Utilisateur"
+msgstr ""
+"Nom d'utilisateur"
msgid "Password"
-msgstr "Mot de Passe"
+msgstr ""
+"Mot de passe"
msgid "Generate a New Debug Report"
-msgstr "Générer un Nouveau Rapport de Déboggage"
+msgstr ""
+"Générer un nouveau rapport de débogage"
msgid "Report Name"
-msgstr "Nom du Rapport"
+msgstr ""
+"Nom du rapport"
msgid ""
"The name used to identify the report. If omitted, a name will be chosen "
"based on current time. Name can contain: letters, digits, underscore (\"_\") "
"and hyphen (\"-\")."
msgstr ""
-"Le nom utilisé pour identifier le rapport. Si omis, un nom sera choisi basé "
-"sur l'heure courante. Le nom peut contenir des lettres, des nombres, le "
-"soulignement (\"_\") et le tiret (\"-\")."
+"Nom utilisé pour identifier le rapport. S'il est omis, un nom sera choisi "
+"en fonction de l'heure en cours. Le nom peut contenir : des lettres, chiffres, trait de soulignement (\"_\") "
+"et tiret (\"-\")."
msgid "Rename a Debug Report"
-msgstr "Renommer un Rapport de Déboggage"
+msgstr ""
+"Renommer un rapport de débogage"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
"hyphen (\"-\")."
msgstr ""
-"Le nom utilisé pour identifer le rapport. Le nom peut contenir des lettres, "
-"nombres et tirets (\"-\")."
+"Nom utilisé pour identifier le rapport. Il peut contenir : des lettres, chiffres et "
+"tiret (\"-\")."
msgid "Submit"
-msgstr "Soumettre"
+msgstr ""
+"Soumettre"
msgid "Add a Repository"
-msgstr "Ajouter un Dépôt"
+msgstr ""
+"Ajouter un référentiel"
msgid "Identifier"
-msgstr "Identificateur"
+msgstr ""
+"Identificateur"
msgid "Single word, unique identifier for the repository."
-msgstr "Mot unique, identifiant unique pour le dépôt."
+msgstr ""
+"Mot unique, identificateur unique pour le référentiel."
msgid "Textual name for the repository."
-msgstr "Nom textuel pour le dépôt."
+msgstr ""
+"Nom textuel pour le référentiel."
msgid "URL"
-msgstr "URL"
+msgstr ""
+"URL"
msgid "Required Field"
-msgstr "Champ requis"
+msgstr ""
+"Zone obligatoire"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
-msgstr "URL du dépôt. Les protocoles supportés sont http, ftp et ficheir."
+msgstr ""
+"Adresse URL pour le référentiel. Les protocoles pris en charge sont http, ftp, et file."
msgid "Repository is a mirror"
-msgstr "Le dépôt est un miroir"
+msgstr ""
+"Le référentiel est un miroir"
msgid "Distribution"
-msgstr "Distribution"
+msgstr ""
+"Distribution"
msgid "Distribution of the DEB repository."
-msgstr "Distribution du dépôt DEB."
+msgstr ""
+"Distribution du référentiel DEB."
msgid "Components"
-msgstr "Composants"
+msgstr ""
+"Composants"
msgid "List of components in DEB repository."
-msgstr "Liste des composants dans le dépôt DEB."
+msgstr ""
+"Liste des composants dans le référentiel DEB."
msgid "Edit Repository"
-msgstr "Editer le Dépôt"
+msgstr ""
+"Editer le référentiel"
msgid "Mirror List URL"
-msgstr "URL de Liste de Miroir"
+msgstr ""
+"URL liste miroir"
msgid "Yes"
-msgstr "Oui"
+msgstr ""
+"Oui"
msgid "No"
-msgstr "Non"
+msgstr ""
+"Non"
msgid "Add a Volume to Storage Pool"
-msgstr "iAjouter un Volume au Pool de Stockage"
+msgstr ""
+"Ajouter un volume au pool de stockage"
msgid "Fetch from remote URL"
msgstr ""
+"Extraire de l'URL distante"
msgid "Enter the remote URL here."
-msgstr "Saisir une URL distante ici"
+msgstr ""
+"Indiquez ici l'URL distante."
msgid "Upload a file"
-msgstr "Charger un fichier"
+msgstr ""
+"Télécharger un fichier"
msgid "Choose the file you want to upload."
msgstr ""
+"Sélectionnez le fichier à télécharger."
msgid "Define a New Storage Pool"
-msgstr "Définir un Nouveau Pool de Stockage"
+msgstr ""
+"Définir un nouveau pool de stockage"
msgid "Storage Pool Name"
-msgstr "Nom de Pool de Stockage"
+msgstr ""
+"Nom du pool de stockage"
msgid ""
"The name used to identify the storage pools, and it should not be empty."
msgstr ""
-"Le nom utilisé pour identifier les pools de stockage, et il ne doit pas être "
-"vide."
+"Nom utilisé pour identifier les pools de stockage. Ne doit pas être vide."
msgid "Storage Pool Type"
-msgstr "Type de Pool de Stockage"
+msgstr ""
+"Type de pool de stockage"
msgid "Storage Path"
-msgstr "Chemin de Stockage"
+msgstr ""
+"Chemin de stockage"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
msgstr ""
-"Le chemin du Pool de Stockage. Chaque Pool de Stockage doit avoir un chemin "
-"unique."
+"Chemin du pool de stockage. Chaque pool de stockage doit avoir un chemin unique."
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
"your system."
msgstr ""
-"Kimchi va essayer de créer un répertoire quand il n'existe pas déjà dans "
-"votre système."
+"Kimchi va tenter de créer le répertoire s'il n'en existe pas déjà un "
+"sur votre système."
msgid "NFS Server IP"
-msgstr "IP du Serveur NFS"
+msgstr ""
+"IP du serveur NFS"
msgid "NFS server IP or hostname. It can be input or chosen from history."
msgstr ""
-"IP du Serveur NFS ou nom d'hôte. Il peut être saisi ou entré à partir de "
-"l'historique."
+"IP ou nom d'hôte du serveur NFS. Peut être entré ou sélectionné depuis l'historique."
msgid "NFS Path"
-msgstr "Chemin NFS"
+msgstr ""
+"Chemin NFS"
msgid "The NFS exported path on NFS server."
-msgstr "Le chemin NFS exporté sur le serveur NFS."
+msgstr ""
+"Chemin NFS exporté ou serveur NFS."
msgid "Device path"
-msgstr "Chemin du Périphérique"
+msgstr ""
+"Chemin d'unité"
msgid "iSCSI Server"
-msgstr "Serveur iSCSI"
+msgstr ""
+"Serveur iSCSI"
msgid "iSCSI server IP or hostname. It should not be empty."
-msgstr "IP du Serveur iSCSI ou nom d'hôte. Il ne devrait pas être vide."
+msgstr ""
+"IP ou nom d'hôte du serveur iSCSI. Ne doit pas être vide."
msgid "Server"
-msgstr "Serveur"
+msgstr ""
+"Serveur"
msgid "Port"
-msgstr "Port"
+msgstr ""
+"Port"
msgid "Target"
-msgstr "Cible"
+msgstr ""
+"Cible"
msgid "The iSCSI target on iSCSI server"
-msgstr "La cible iSCSI sur le serveur iSCSI"
+msgstr ""
+"Cible iSCSI sur le serveur iSCSI"
msgid "Add iSCSI Authentication"
-msgstr "Ajouter l'Authentification iSCSI"
+msgstr ""
+"Ajouter l'authentification iSCSI"
msgid "iSCSI Authentication"
-msgstr "Authentification iSCSI"
+msgstr ""
+"Authentification iSCSI"
msgid "SCSI Adapter"
-msgstr "Adaptateur SCSI"
+msgstr ""
+"Adaptateur SCSI"
msgid "Please, wait..."
-msgstr "Veuillez patienter..."
+msgstr ""
+"Veuillez patienter..."
msgid "Add Template"
-msgstr "Ajouter un Modèle"
+msgstr ""
+"Ajouter un modèle"
msgid "Where is the source media for this template? "
-msgstr "Où se trouve le media source pour le modèle ?"
+msgstr ""
+"Où se trouve le support source pour ce modèle ? "
msgid "Local ISO Image"
-msgstr "Image ISO Locale"
+msgstr ""
+"Image ISO locale"
msgid "Local Image File"
-msgstr "Fichier Image Local"
+msgstr ""
+"Fichier image local"
msgid "Remote ISO Image"
-msgstr "Image ISO Distante"
+msgstr ""
+"Image ISO distante"
msgid "Search ISOs"
-msgstr "Rechercher des ISOs"
+msgstr ""
+"Recherche d'ISO"
msgid "The following ISOs are available:"
-msgstr "Les ISOs suivants sont disponibles:"
+msgstr ""
+"Les images ISO suivantes sont disponibles :"
msgid "OS: "
-msgstr "OS: "
+msgstr ""
+"SE : "
msgid "Version: "
-msgstr "Version: "
+msgstr ""
+"Version : "
msgid "Size: "
-msgstr "Taille: "
+msgstr ""
+"Taille : "
msgid "Search more ISOs"
-msgstr "Chercher plus d'ISOs"
+msgstr ""
+"Rechercher d'autres images ISO"
msgid "Create Templates from Selected ISO"
-msgstr "Créer des modèles depuis l'ISO sélectionné"
+msgstr ""
+"Créer des modèles à partir de l'image ISO sélectionnée"
msgid "I want to use a specific ISO file"
-msgstr "Je veux utiliser un fichier ISO spécifique"
+msgstr ""
+"Je souhaite utiliser un fichier ISO spécifique"
msgid "Loading default remote ISOs ..."
-msgstr "Chargement des ISOs distants par défaut en cours..."
+msgstr ""
+"Chargement d'ISO distants par défaut..."
msgid "Arch: "
-msgstr "Arch: "
+msgstr ""
+"Arch : "
msgid "I want to use a custom URL"
-msgstr "Je veux utiliser une URL personnalisée"
+msgstr ""
+"Je souhaite utiliser une URL personnalisée"
msgid "Edit Template"
-msgstr "Éditer un Modèle"
+msgstr ""
+"Editer le modèle"
msgid "Processor"
-msgstr "Processeur"
+msgstr ""
+"Processeur"
msgid "CDROM"
-msgstr "CDROM"
+msgstr ""
+"CD-ROM"
msgid "Image File"
-msgstr "Fichier Image"
+msgstr ""
+"Fichier image"
msgid "Graphics"
-msgstr "Graphiques"
+msgstr ""
+"Graphiques"
msgid "Disk(GB)"
msgstr ""
+"Disque (Go)"
msgid "Disk Format"
msgstr ""
+"Format de disque"
msgid "CPU Number"
-msgstr "Nombre de CPU"
+msgstr ""
+"Nombre d'UC"
msgid "Manually set CPU topology"
msgstr ""
+"Définir manuellement la topologie d'UC"
msgid "Cores"
msgstr ""
+"Coeurs"
msgid "Threads"
msgstr ""
+"Unités d'exécution"
msgid "CPU"
-msgstr "CPU"
+msgstr ""
+"UC"
msgid "Disk I/O"
-msgstr "E/S Disque"
+msgstr ""
+"E-S disque"
msgid "Network I/O"
-msgstr "E/S Réseau"
+msgstr ""
+"E-S réseau"
msgid "Livetile"
-msgstr "Livetile"
+msgstr ""
+"Livetile"
msgid "No guests found."
-msgstr "Aucun invité trouvé."
+msgstr ""
+"Aucun invité trouvé."
msgid "Shut down"
-msgstr "Éteindre"
+msgstr ""
+"Arrêter"
msgid "Restart"
-msgstr "Redémarrer"
+msgstr ""
+"Redémarrer"
msgid "Basic Information"
-msgstr "Informations de Base"
+msgstr ""
+"Informations de base"
msgid "OS Distro"
-msgstr "Distro de l'OS"
+msgstr ""
+"SE distribution"
msgid "OS Code Name"
-msgstr "Nom de code de l'OS"
+msgstr ""
+"Nom de code SE"
msgid "CPU(s)"
msgstr ""
+"UC"
msgid "System Statistics"
-msgstr "Statistiques Système"
+msgstr ""
+"Statistiques système"
msgid "Update Progress"
-msgstr "Progrès de la Mise à Jour"
+msgstr ""
+"Progression de la mise à jour"
msgid "Network Name"
-msgstr "Nom de Réseau"
+msgstr ""
+"Nom du réseau"
msgid "State"
-msgstr "État"
+msgstr ""
+"Etat"
msgid "Network Type"
-msgstr "Type de Réseau"
+msgstr ""
+"Type de réseau"
msgid "Address Space"
-msgstr "Espace d'adressage"
+msgstr ""
+"Espace adresse"
msgid "Name should not contain '/' and '\"'."
-msgstr "Le nom ne devrait pas contenir '/' et '\"'."
+msgstr ""
+"Le nom ne doit pas contenir '/' et '\"'."
msgid "Isolated: no external network connection"
-msgstr "Isolé: pas de connexion à un réseau externe"
+msgstr ""
+"Isolé : aucune connexion réseau externe"
msgid "NAT: outbound physical network connection only"
-msgstr "NAT: connexion physique au réseau sortant uniquement"
+msgstr ""
+"NAT : connexion réseau physique sortante uniquement"
msgid "Bridged: Virtual machines are connected to physical network directly"
msgstr ""
-"Bridgé: Les macines virtuelles sont connectées directement au réseau physique"
+"Routé : machines virtuelles directement connectées au réseau physique"
msgid "(No interfaces found)"
-msgstr "(Aucune interface trouvée)"
+msgstr ""
+"(Interface introuvable)"
msgid "Destination"
-msgstr "Destination"
+msgstr ""
+"Destination"
msgid "Enable VLAN"
-msgstr "Activer le VLAN"
+msgstr ""
+"Activer le réseau local virtuel"
msgid "VLAN ID"
-msgstr "ID de VLAN"
+msgstr ""
+"ID réseau local virtuel"
msgid "Stop"
-msgstr "Arrêter"
+msgstr ""
+"Arrêter"
msgid "%Used"
msgstr ""
+"%Util"
msgid "Location"
-msgstr "Emplacement"
+msgstr ""
+"Emplacement"
msgid "Capacity"
-msgstr "Capacité"
+msgstr ""
+"Capacité"
msgid "Allocated"
-msgstr "Alloué"
+msgstr ""
+"Alloué"
msgid "active"
-msgstr "actif"
+msgstr ""
+"actif"
msgid "inactive"
-msgstr "inactif"
+msgstr ""
+"inactif"
msgid "Deactivate"
-msgstr "Désactiver"
+msgstr ""
+"Désactiver"
msgid "Activate"
-msgstr "Activer"
+msgstr ""
+"Activer"
msgid "Add Volume"
-msgstr "Ajouter un Volume"
+msgstr ""
+"Ajouter un volume"
msgid "Extend"
-msgstr "Étendre"
+msgstr ""
+"Extension"
msgid "Undefine"
-msgstr "Supprimer"
+msgstr ""
+"Annuler définition"
msgid "Format"
-msgstr "Format"
+msgstr ""
+"Format"
msgid "Allocation"
-msgstr "Allocation"
+msgstr ""
+"Allocation"
msgid "No templates found."
-msgstr "Aucun modèle trouvé."
+msgstr ""
+"Aucun modèle trouvé."
+
+# ENGL1SH_VERS10N 28617_40 DO NOT REMOVE OR CHANGE THIS LINE
+# T9N_SRC_ID 92
+# T9N_SH1P_STR1NG KV310AAP001 1
diff --git a/po/it_IT.po b/po/it_IT.po
index bfc1a84..50dc7c8 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -1,5 +1,6 @@
# English translations for kimchi package.
# Copyright (C) 2013 ORGANIZATION
+# Adam Litke <agl(a)us.ibm.com>, 2013.
#
msgid ""
msgstr ""
@@ -9,82 +10,99 @@ msgstr ""
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
-"Language: it_IT\n"
+"Language: en_US\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=2; plural=n != 1;"
#, python-format
msgid "Unknown parameter %(value)s"
msgstr ""
+"Parametro sconosciuto %(value)s"
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr "Eliminazione non consentita per %(resource)s"
+msgstr ""
+"Eliminazione non consentita per %(resource)s"
#, python-format
msgid "%(resource)s does not implement update method"
-msgstr "%(resource)s non implementa il metodo di aggiornamento"
+msgstr ""
+"%(resource)s non implementa il metodo di aggiornamento"
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr "Creazione non consentita per %(resource)s"
+msgstr ""
+"Creazione non consentita per %(resource)s"
msgid "Unable to parse JSON request"
-msgstr "Impossibile analizzare la richiesta JSON"
+msgstr ""
+"Impossibile analizzare la richiesta JSON"
msgid "This API only supports JSON"
-msgstr "L'API supporta solo JSON"
+msgstr ""
+"L'API supporta solo JSON"
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
msgstr ""
+"I parametri non corrispondono ai requisiti nello schema: %(err)s"
msgid "You don't have permission to perform this operation."
msgstr ""
+"Non si dispone dell'autorizzazione per eseguire questa operazione. "
msgid "Datastore is not initiated in the model object."
-msgstr "Archivio dati non inizializzato nell'oggetto modello."
+msgstr ""
+"Archivio dati non inizializzato nell'oggetto modello."
#, python-format
msgid "Unable to start task due error: %(err)s"
-msgstr "Impossibile avviare l'attività a causa dell'errore: %(err)s"
+msgstr ""
+"Impossibile avviare l'attività a causa dell'errore: %(err)s"
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
msgstr ""
+"È stato raggiunto il timeout di %(seconds)s secondi durante l'esecuzione dell'attività '%(task)s."
#, python-format
msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
msgstr ""
-"Autenticazione non riuscita per l'utente '%(username)s'. [Codice di errore: "
-"%(code)s]"
+"Autenticazione non riuscita per l'utente '%(username)s'. [Codice di errore: %(code)s]"
msgid "You are not authorized to access Kimchi"
-msgstr "Non si dispone dell'autorizzazione ad accedere a Kimchi"
+msgstr ""
+"Non si dispone dell'autorizzazione ad accedere a Kimchi"
#, python-format
msgid "Specify %(item)s to login into Kimchi"
-msgstr "Specificare %(item)s per accedere a Kimchi"
+msgstr ""
+"Specificare %(item)s per accedere a Kimchi"
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
msgstr ""
+"Utente %(user_id)s non trovato con le impostazioni LDAP fornite. "
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
msgstr ""
+"Configurazione LDAP non valida: %(item)s : %(value)s"
msgid "Unknown \"_cap\" specified"
msgstr ""
+"Specificato \"_cap\" sconosciuto"
msgid "\"_passthrough\" should be \"true\" or \"false\""
msgstr ""
+"\"_passthrough\" deve essere \"true\" o \"false\""
msgid "\"_passthrough_affected_by\" should be a device name string"
msgstr ""
+"\"_passthrough_affected_by\" deve essere una stringa nome dispositivo"
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
@@ -94,59 +112,63 @@ msgstr ""
#, python-format
msgid "Error while getting block device information for %(device)s."
msgstr ""
-"Errore durante il richiamo delle informazioni sul dispositivo del blocco per "
-"%(device)s."
+"Errore durante il richiamo delle informazioni sul dispositivo del blocco per %(device)s."
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr "Impossibile trovare il file distro: %(filename)s"
+msgstr ""
+"Impossibile trovare il file distro: %(filename)s"
#, python-format
msgid ""
"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
msgstr ""
-"Impossibile analizzare il file distro: %(filename)s. Verificare che sia un "
-"file JSON."
+"Impossibile analizzare il file distro: %(filename)s. Verificare che sia un file JSON."
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
msgstr ""
-"Impossibile accedere a %(portal)s di destinazione host iSCSI. Dettagli: "
-"%(err)s"
+"Impossibile accedere alla destinazione host iSCSI %(portal)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to login to iSCSI host %(host)s target %(target)s"
-msgstr "Impossibile accedere alla destinazione %(target)s host %(host)s iSCSI"
+msgstr ""
+"Impossibile accedere alla destinazione %(target)s host %(host)s iSCSI"
#, python-format
msgid "Unable to find ISO file %(filename)s"
msgstr ""
+"Impossibile trovare il file ISO %(filename)s"
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr "Il file ISO %(filename)s non è avviabile"
+msgstr ""
+"Il file ISO %(filename)s non è avviabile"
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
-msgstr "Il file ISO %(filename)s non ha un record di avvio El Torito valido"
+msgstr ""
+"Il file ISO %(filename)s non ha un record di avvio El Torito valido"
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
-msgstr "Voce di convalida El Torito non valida in ISO %(filename)s"
+msgstr ""
+"Voce di convalida El Torito non valida in ISO %(filename)s"
#, python-format
msgid "Invalid El Torito boot indicator in ISO %(filename)s"
-msgstr "Indicatore di avvio El Torito non valido in ISO %(filename)s"
+msgstr ""
+"Indicatore di avvio El Torito non valido in ISO %(filename)s"
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
-msgstr "Tipo di volume imprevisto per il volume primario in ISO %(filename)s"
+msgstr ""
+"Tipo di volume imprevisto per il volume primario in ISO %(filename)s"
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
msgstr ""
-"Formato non corretto durante la lettura del descrittore volume in ISO "
-"%(filename)s"
+"Formato non corretto durante la lettura del descrittore volume in ISO %(filename)s"
#, python-format
msgid ""
@@ -156,41 +178,50 @@ msgid ""
"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
"'path_to_iso'.Details: %(err)s"
msgstr ""
-"L'hypervisor non dispone dell'autorizzazione per utilizzare questo ISO "
-"%(filename)s. Spostarlo in /var/lib/libvirt o impostare l'autorizzazione di "
-"ricerca per gli elenchi di controllo accesso ai file per l'utente "
-"'%(user)s', se possibile, o aggiungere '%(user)s' al gruppo percorso ISO o "
-"(non consigliato) 'chmod -R o+x 'path_to_iso'. Dettagli: %(err)s"
+"L'hypervisor non dispone dell'autorizzazione per utilizzare questo ISO %(filename)s. "
+"Spostarlo in /var/lib/libvirt o impostare l'autorizzazione di ricerca "
+"sugli elenchi di controllo di accesso file per l'utente '%(user)s' se possibile, oppure aggiungere "
+"'%(user)s' al gruppo percorso ISO oppure (non consigliato) 'chmod -R o+x "
+"'path_to_iso'. Dettagli: %(err)s"
msgid "An error occurred when probing image OS information."
msgstr ""
+"Si è verificato un errore durante l'analisi delle informazioni SO immagine."
msgid "No OS information found in given image."
msgstr ""
+"Nessuna informazione SO trovata nell'immagine fornita."
#, python-format
msgid "Unable to read image file %(filename)s"
msgstr ""
+"Impossibile leggere il file immagine %(filename)s"
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
msgstr ""
+"Il file immagine deve essere un file esistente sul sistema. %(filename)s non è un valido "
+"input."
#, python-format
msgid "Virtual machine %(name)s already exists"
-msgstr "Macchina virtuale %(name)s già esistente"
+msgstr ""
+"Macchina virtuale %(name)s già esistente"
#, python-format
msgid "Virtual machine %(name)s does not exist"
-msgstr "La macchina virtuale %(name)s non esiste"
+msgstr ""
+"La macchina virtuale %(name)s non esiste"
#, python-format
msgid ""
"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
"in use or the virtual machine is not powered off."
msgstr ""
+"Impossibile ridenominare la macchina virtuale %(name)s. Il nome %(new_name)s è già "
+"in uso o la macchina virtuale non è spenta."
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
@@ -198,19 +229,23 @@ msgstr ""
"Impossibile richiamare l'immagine per la macchina virtuale arrestata %(name)s"
msgid "Remote ISO image is not supported by this server."
-msgstr "L'immagine ISO remota non è supportata da questo server."
+msgstr ""
+"L'immagine ISO remota non è supportata da questo server."
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
msgstr ""
+"L'esecuzione di un'immagine non è supportata sulla macchina virtuale %(name)s"
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
-msgstr "Impossibile creare la macchina virtuale %(name)s. Dettagli: %(err)s"
+msgstr ""
+"Impossibile creare la macchina virtuale %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
-msgstr "Impossibile creare la macchina virtuale %(name)s. Dettagli: %(err)s"
+msgstr ""
+"Impossibile aggiornare la macchina virtuale %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
@@ -220,149 +255,188 @@ msgstr ""
#, python-format
msgid "Unable to connect to powered off virtual machine %(name)s."
msgstr ""
+"Impossibile connettere la macchina virtuale %(name)s."
msgid "Virtual machine name must be a string without slashes (/)"
msgstr ""
+"Il nome della macchina virtuale deve essere una stringa senza barre (/)"
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
msgstr ""
+"URI modello non valido %(value)s specificato per la macchina virtuale"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for virtual machine"
msgstr ""
+"URI pool di memoria non valido %(value)s specificato per la macchina virtuale"
msgid "Supported virtual machine graphics are Spice or VNC"
msgstr ""
+"I grafici macchina virtuale supportati sono Spice o VNC"
msgid "Graphics address to listen on must be IPv4 or IPv6"
msgstr ""
"L'indirizzo dei grafici su cui rimanere in ascolto deve essere IPv4 o IPv6"
msgid "Specify a template to create a virtual machine from"
-msgstr "Specificare un modello da cui creare una macchina virtuale"
+msgstr ""
+"Specificare un modello da cui creare una macchina virtuale"
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
-msgstr "Impossibile avviare la macchina virtuale %(name)s. Dettagli: %(err)s"
+msgstr ""
+"Impossibile avviare la macchina virtuale %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
-msgstr "Impossibile arrestare la macchina virtuale %(name)s. Dettagli: %(err)s"
+msgstr ""
+"Impossibile spegnere la macchina virtuale %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
-msgstr "Impossibile eliminare la macchina virtuale %(name)s. Dettagli: %(err)s"
+msgstr ""
+"Impossibile eliminare la macchina virtuale %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Impossibile ridenominare la macchina virtuale %(name)s. Dettagli: %(err)s"
+"Impossibile reimpostare la macchina virtuale %(name)s. Dettagli: %(err)s"
msgid "User name list must be an array"
msgstr ""
+"L'elenco di nomi utente deve essere un array"
msgid "User name must be a string"
-msgstr "Il nome della rete deve essere una stringa"
+msgstr ""
+"Il nome utente deve essere una stringa"
msgid "Group name list must be an array"
msgstr ""
+"L'elenco di nomi gruppo deve essere un array"
msgid "Group name must be a string"
-msgstr "Il nome della rete deve essere una stringa"
+msgstr ""
+"Il nome gruppo deve essere una stringa"
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr "L'utente '%(users)s' non esiste."
+msgstr ""
+"L'utente o gli utenti '%(users)s' non esistono"
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr "L'utente '%(groups)s' non esiste."
+msgstr ""
+"Il gruppo o i gruppi '%(groups)s' non esistono"
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
-msgstr "Impossibile arrestare la macchina virtuale %(name)s. Dettagli: %(err)s"
+msgstr ""
+"Impossibile arrestare la macchina virtuale %(name)s. Dettagli: %(err)s"
#, python-format
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr "Impossibile avviare la macchina virtuale %(name)s. Dettagli: %(err)s"
+msgstr ""
+"Impossibile ottenere i metadati di accesso della macchina virtuale %(name)s. Dettagli: %(err)s"
msgid "The guest console password must be a string."
msgstr ""
+"La password della console della macchina guest deve essere una stringa. "
msgid "The life time for the guest console password must be a number."
msgstr ""
+"La durata per la password della console della macchina guest deve essere un numero. "
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
msgstr ""
+"La macchina virtuale '%(name)s' deve essere arrestata prima di poterla clonare. "
#, python-format
msgid "Insufficient disk space to clone virtual machine '%(name)s'"
msgstr ""
+"Spazio su disco insufficiente per clonare la macchina virtuale '%(name)s'"
#, python-format
msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
msgstr ""
+"Impossibile clonare la VM '%(name)s'. Dettagli: %(err)s"
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
msgstr ""
+"Operazione non valida per la macchina virtuale non persistente %(name)s"
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
msgstr ""
+"Impossibile sospendere la VM '%(name)s' perché non è in esecuzione. "
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
msgstr ""
+"Impossibile sospendere la VM '%(name)s'. Dettagli: %(err)s"
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
msgstr ""
+"Impossibile riprendere la VM '%(name)s' perché non è in pausa. "
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
msgstr ""
+"Impossibile riprendere la VM '%(name)s'. Dettagli: %(err)s"
msgid "Memory assigned is higher then the maximum allowed in the host."
msgstr ""
+"La memoria assegnata è superiore al massimo consentito nell'host. "
#, python-format
msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
+"La VM '%(name)s' non supporta l'aggiornamento della memoria live. Aggiornare la memoria con"
+"la macchina fuori linea per abilitare questa funzione. "
msgid "Only increase memory is allowed in active VMs"
msgstr ""
+"Nelle VM attive è consentito solo aumentare la memoria. "
msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
msgstr ""
+"Per l'aggiornamento della memoria live, il nuovo valore di memoria deve essere uguale al vecchio più"
+"multipli di 1024 Mib"
msgid "There are not enough free slots of 1024 Mib in the guest."
msgstr ""
+"Non sono presenti sufficienti slot liberi di 1024 Mib nella macchina guest."
msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
msgstr ""
+"La versione libvirt dell'host non supporta dispositivi di memoria. Libvirt deve essere >= "
+"1.2.14"
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
msgstr ""
+"Errore durante il collegamento del dispositivo di memoria. Dettagli: %(error)s"
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
+"La VM %(vmid)s non contiene un dispositivo host assegnato direttamente %(dev_name)s."
#, python-format
msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
msgstr ""
+"Il dispositivo host %(dev_name)s non consente di assegnare direttamente al VM."
msgid ""
"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
@@ -371,19 +445,28 @@ msgid ""
"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
"iommu=1."
msgstr ""
+"Non è stato trovato alcun gruppo IOMMU. Per funzionare correttamente il pass-through PCI host "
+"ha bisogno del gruppo IOMMU. Abilitare Intel VT-d o AMD IOMMU nel BIOS e verificare quindi che "
+"il Kernel sia compilato con il supporto IOMMU. per la CPU Intel, aggiungere intel_iommu=on "
+"al parametro Kernel in /boot/grub2/grub.conf. Per la CPU AMD, aggiungere iommu=pt "
+"iommu=1."
msgid "\"name\" should be a device name string"
msgstr ""
+"\"name\" deve essere una stringa nome dispositivo"
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
msgstr ""
+"Il dispositivo %(name)s è probabilmente utilizzato dall'host. Impossibile collegarlo"
+"alla macchina guest."
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
-msgstr "L'interfaccia %(iface)s non esiste nella macchina virtuale %(name)s"
+msgstr ""
+"L'interfaccia %(iface)s non esiste nella macchina virtuale %(name)s"
#, python-format
msgid ""
@@ -397,8 +480,7 @@ msgstr ""
msgid "Network name for virtual machine interface must be a string"
msgstr ""
-"Il nome di rete per l'interfaccia della macchina virtuale deve essere una "
-"stringa"
+"Il nome di rete per l'interfaccia della macchina virtuale deve essere una stringa"
msgid "Invalid network model card specified for virtual machine interface"
msgstr ""
@@ -406,25 +488,29 @@ msgstr ""
msgid "Specify type and network to add a new virtual machine interface"
msgstr ""
-"Specificare il tipo e la rete per aggiungere una nuova interfaccia della "
-"macchina virtuale"
+"Specificare il tipo e la rete per aggiungere una nuova interfaccia della macchina virtuale"
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
msgstr ""
+"L'indirizzo MAC deve rispettare il formato FF:FF:FF:FF:FF:FF"
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
msgstr ""
+"L'indirizzo MAC %(mac)s esiste già nella macchina virtuale %(name)s"
msgid "Invalid MAC Address"
msgstr ""
+"Indirizzo MAC non valido"
msgid "Cannot change MAC address of a running virtual machine"
msgstr ""
+"Impossibile modificare l'indirizzo MAC di una macchina virtuale in esecuzione"
#, python-format
msgid "Template %(name)s already exists"
-msgstr "Modello %(name)s già esistente"
+msgstr ""
+"Modello %(name)s già esistente"
#, python-format
msgid ""
@@ -436,18 +522,17 @@ msgstr ""
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
msgstr ""
-"Il pool di memoria %(pool)s specificato per il modello %(template)s non "
-"esiste"
+"Il pool di memoria %(pool)s specificato per il modello %(template)s non esiste"
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
msgstr ""
-"Il pool di memoria %(pool)s specificato per il modello %(template)s non è "
-"attivo"
+"Il pool di memoria %(pool)s specificato per il modello %(template)s non è attivo"
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr "Parametro non valido %(param)s' specificato per CDROM."
+msgstr ""
+"Parametro non valido '%(param)s' specificato per CDROM."
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
@@ -455,216 +540,260 @@ msgstr ""
"La rete %(network)s specificata per il modello %(template)s non è attiva"
msgid "Template name must be a string"
-msgstr "Il nome del modello deve essere una stringa"
+msgstr ""
+"Il nome del modello deve essere una stringa"
msgid "Template icon must be a path to the image"
-msgstr "L'icona del modello deve essere un percorso all'immagine"
+msgstr ""
+"L'icona del modello deve essere un percorso all'immagine"
msgid "Template distribution must be a string"
-msgstr "La distribuzione del modello deve essere una stringa"
+msgstr ""
+"La distribuzione del modello deve essere una stringa"
msgid "Template distribution version must be a string"
-msgstr "La versione della distribuzione del modello deve essere una stringa"
+msgstr ""
+"La versione della distribuzione del modello deve essere una stringa"
msgid "The number of CPUs must be an integer greater than 0"
-msgstr "Il numero di CPU deve essere un numero intero"
+msgstr ""
+"Il numero di CPU deve essere un numero intero maggiore di 0"
msgid "Amount of memory (MB) must be an integer greater than 512"
msgstr ""
"La quantità di memoria (MB) deve essere un numero intero maggiore di 512"
msgid "Template CDROM must be a local or remote ISO file"
-msgstr "Il CDROM del modello deve essere un file ISO locale o remoto"
+msgstr ""
+"Il CDROM del modello deve essere un file ISO locale o remoto"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for template"
-msgstr "URI pool di memoria non valido: %(value)s specificato per il modello"
+msgstr ""
+"URI pool di memoria non valido %(value)s specificato per il modello"
msgid "Specify an ISO image as CDROM or a base image to create a template"
-msgstr "Specificare un'immagine ISO come CDROM per creare un modello"
+msgstr ""
+"Specificare un'immagine ISO come CDROM o un'immagine di base per creare un modello"
msgid "All networks for the template must be specified in a list."
-msgstr "Tutte le reti per il modello devono essere specificate in un elenco."
+msgstr ""
+"Tutte le reti per il modello devono essere specificate in un elenco."
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
msgstr ""
+"Se il pool di memoria è iSCSI o SCSI specificare un volume per un modello"
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
msgstr ""
+"Il volume %(volume)s non è nel pool di memoria %(pool)s"
#, python-format
msgid "Unable to create template due error: %(err)s"
-msgstr "Impossibile creare il modello a causa dell'errore: %(err)s"
+msgstr ""
+"Impossibile creare il modello a causa dell'errore: %(err)s"
#, python-format
msgid "Unable to delete template due error: %(err)s"
-msgstr "Impossibile eliminare il modello a causa dell'errore: %(err)s"
+msgstr ""
+"Impossibile eliminare il modello a causa dell'errore: %(err)s"
msgid "Disk size must be an integer greater than 1GB."
msgstr ""
+"La dimensione del disco deve essere un numero intero maggiore di 1GB."
msgid "Template base image must be a valid local image file"
-msgstr "Il CDROM del modello deve essere un file ISO locale o remoto"
+msgstr ""
+"L'immagine di base del modello deve essere un file immagine locale valido"
#, python-format
msgid "Cannot identify base image %(path)s format"
msgstr ""
+"Impossibile identificare il formato %(path)s dell'immagine di base"
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
msgstr ""
+"Quando si specifica la topologia CPU, le VCPU devono essere composte da socket, core e"
+"thread."
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
"zero."
msgstr ""
+"Quando si specifica la topologia CPU, ogni elemento deve essere un numero intero maggiore di"
+"zero."
msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
+"Formato immagine disco non valido. Formati validi: bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc."
#, python-format
msgid "Storage pool %(name)s already exists"
-msgstr "Pool di memoria %(name)s già esistente"
+msgstr ""
+"Pool di memoria %(name)s già esistente"
#, python-format
msgid "Storage pool %(name)s does not exist"
-msgstr "Il pool di memoria %(name)s non esiste"
+msgstr ""
+"Il pool di memoria %(name)s non esiste"
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
-msgstr "Specificare %(item)s per poter creare il pool di memoria %(name)s"
+msgstr ""
+"Specificare %(item)s per poter creare il pool di memoria %(name)s"
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr "Impossibile eliminare il pool di memoria attivo %(name)s"
+msgstr ""
+"Impossibile eliminare il pool di memoria attivo %(name)s"
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
-msgstr "Impossibile elencare i pool di memoria. Dettagli: %(err)s"
+msgstr ""
+"Impossibile elencare i pool di memoria. Dettagli: %(err)s"
#, python-format
msgid "Unable to create storage pool %(name)s. Details: %(err)s"
-msgstr "Impossibile creare il pool di memoria %(name)s. Dettagli: %(err)s"
+msgstr ""
+"Impossibile creare il pool di memoria %(name)s. Dettagli: %(err)s"
#, python-format
msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
msgstr ""
-"Impossibile ottenere il numero di volumi di memoria nel pool di memoria "
-"%(name)s. Dettagli: %(err)s"
+"Impossibile ottenere il numero di volumi di memoria nel pool di memoria %(name)s. Dettagli: "
+"%(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
-msgstr "Impossibile attivare il pool di memoria %(name)s. Dettagli: %(err)s"
+msgstr ""
+"Impossibile attivare il pool di memoria %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
-msgstr "Impossibile disattivare il pool di memoria %(name)s. Dettagli: %(err)s"
+msgstr ""
+"Impossibile disattivare il pool di memoria %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
-msgstr "Impossibile eliminare il pool di memoria %(name)s. Dettagli: %(err)s"
+msgstr ""
+"Impossibile eliminare il pool di memoria %(name)s. Dettagli: %(err)s"
#, python-format
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
msgstr ""
-"Impossibile creare il pool NFS poiché il percorso di esportazione %(path)s "
-"potrebbe bloccarsi durante il montaggio"
+"Impossibile creare il pool NFS poiché il percorso di esportazione %(path)s potrebbe bloccarsi durante il montaggio"
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
msgstr ""
-"Impossibile creare il pool NFS poiché il montaggio del percorso di "
-"esportazione %(path)s ha avuto esito negativo"
+"Impossibile creare il pool NFS poiché il montaggio del percorso di esportazione %(path)s ha avuto esito negativo"
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr "Tipo di pool di memoria non supportato: %(type)s"
+msgstr ""
+"Tipo di pool di memoria non supportato: %(type)s"
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
msgstr ""
+"Errore durante il richiamo dell'XML del pool di memoria per %(pool)s"
msgid "Storage pool name must be a string without slashes (/)"
msgstr ""
+"Il nome del pool di memoria deve essere una stringa senza barre (/)"
msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
"iso"
msgstr ""
+"I tipi di pool di memoria supportati sono dir, netfs, logico, iscsi, isci e kimchi-"
+"iso"
msgid "Storage pool path must be a string"
-msgstr "Il percorso del pool di memoria deve essere una stringa"
+msgstr ""
+"Il percorso del pool di memoria deve essere una stringa"
msgid "Storage pool host must be a IP or hostname"
-msgstr "L'host del pool di memoria deve essere un nome host o IP"
+msgstr ""
+"L'host del pool di memoria deve essere un nome host o IP"
msgid "Storage pool device must be the absolute path to the block device"
msgstr ""
+"Il dispositivo pool di memoria deve essere il percorso assoluto al dispositivo del blocco"
msgid "Storage pool devices parameter must be a list"
-msgstr "Il parametro dispositivi pool di memoria deve essere un elenco"
+msgstr ""
+"Il parametro dispositivi pool di memoria deve essere un elenco"
msgid "Target IQN of an iSCSI pool must be a string"
-msgstr "L'IQN di destinazione di un pool iSCSI deve essere una stringa"
+msgstr ""
+"L'IQN di destinazione di un pool iSCSI deve essere una stringa"
msgid "Port of a remote storage server must be an integer between 1 and 65535"
msgstr ""
-"La porta di un server di memoria remoto deve essere un numero intero tra 1 e "
-"65535"
+"La porta di un server di memoria remoto deve essere un numero intero tra 1 e 65535"
msgid "iSCSI target username must be a string"
msgstr ""
+"Il nome utente della destinazione iSCSI deve essere una stringa"
msgid "iSCSI target password must be a string"
msgstr ""
+"La password della destinazione iSCSI deve essere una stringa"
msgid "Specify name and type to create a storage pool"
-msgstr "Specificare nome e tipo per creare un pool di memoria"
+msgstr ""
+"Specificare nome e tipo per creare un pool di memoria"
#, python-format
msgid ""
"%(disk)s is not a valid disk/partition. Could not add it to the pool "
"%(pool)s."
msgstr ""
-"%(disk)s non è un disco/partizione valido. Impossibile aggiungerlo al pool "
+"%(disk)s non è un disco/partizione valido. Impossibile aggiungerlo al pool"
"%(pool)s."
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
msgstr ""
+"Impossibile estendere il pool logico %(pool)s. Dettagli: %(err)s"
msgid "The parameter disks only can be updated for logical storage pool."
msgstr ""
"Solo il parametro dischi può essere aggiornato per il pool di memoria logico."
msgid "The SCSI host adapter name must be a string."
-msgstr "Il nome adattatore host SCSI deve essere una stringa."
+msgstr ""
+"Il nome adattatore host SCSI deve essere una stringa."
msgid "The storage pool kimchi_isos is reserved for internal use"
-msgstr "Il pool di memoria kimchi_isos è riservato per uso interno"
+msgstr ""
+"Il pool di memoria kimchi_isos è riservato per uso interno"
#, python-format
msgid ""
"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"Impossibile attivare il pool di memoria NFS %(name)s. Il server NFS "
-"%(server)s è irraggiungibile."
+"Impossibile attivare il pool di memoria NFS %(name)s. Il server NFS %(server)s è "
+"irraggiungibile."
#, python-format
msgid ""
"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"Impossibile disattivare il pool di memoria NFS %(name)s. Il server NFS "
-"%(server)s è irraggiungibile."
+"Impossibile disattivare il pool di memoria NFS %(name)s. Il server NFS %(server)s è "
+"irraggiungibile."
#, python-format
msgid ""
@@ -682,62 +811,66 @@ msgid ""
"A volume group named '%(name)s' already exists. Please, choose another name "
"to create the logical pool."
msgstr ""
-"Un gruppo di volumi denominato '%(name)s' esiste già. Scegliere un altro "
-"nome per creare il pool logico."
+"Un gruppo di volumi denominato '%(name)s' esiste già. Scegliere un altro nome "
+"per creare il pool logico."
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
msgstr ""
-"Impossibile aggiornare il database con informazioni approfondite sulla "
-"scansione a causa dell'errore: %(err)s"
+"Impossibile aggiornare il database con informazioni approfondite sulla scansione a causa dell'errore: %(err)s"
#, python-format
msgid "Storage volume %(name)s already exists"
-msgstr "Volume di memoria %(name)s già esistente"
+msgstr ""
+"Volume di memoria %(name)s già esistente"
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
-msgstr "Il volume di memoria %(name)s non esiste nel pool di memoria %(pool)s"
+msgstr ""
+"Il volume di memoria %(name)s non esiste nel pool di memoria %(pool)s"
#, python-format
msgid ""
"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
"not active"
msgstr ""
+"Impossibile creare il volume di memoria %(volume)s perché il pool di memoria %(pool)s "
+"non è attivo"
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
-msgstr "Specificare %(item)s per poter creare il volume di memoria %(volume)s"
+msgstr ""
+"Specificare %(item)s per poter creare il volume di memoria %(volume)s"
#, python-format
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
msgstr ""
-"Impossibile elencare i volumi di memoria poiché il pool di memoria %(pool)s "
-"non è attivo"
+"Impossibile elencare i volumi di memoria poiché il pool di memoria %(pool)s non è attivo"
#, python-format
msgid ""
"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
"%(err)s"
msgstr ""
-"Impossibile creare il volume di memoria %(name)s nel pool di memoria "
-"%(pool)s. Dettagli: %(err)s"
+"Impossibile creare il volume di memoria %(name)s nel pool di memoria %(pool)s. Dettagli: "
+"%(err)s"
#, python-format
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
msgstr ""
-"Impossibile elencare i volumi di memoria nel pool di memoria %(pool)s. "
-"Dettagli: %(err)s"
+"Impossibile elencare i volumi di memoria nel pool di memoria %(pool)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
-msgstr "Impossibile ripulire i volumi di memoria %(name)s. Dettagli: %(err)s"
+msgstr ""
+"Impossibile ripulire i volumi di memoria %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
-msgstr "Impossibile eliminare il volume di memoria %(name)s. Dettagli: %(err)s"
+msgstr ""
+"Impossibile eliminare il volume di memoria %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
@@ -747,91 +880,110 @@ msgstr ""
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
msgstr ""
-"Il tipo di memoria %(type)s non supporta la creazione ed eliminazione del "
-"volume"
+"Il tipo di memoria %(type)s non supporta la creazione ed eliminazione del volume"
msgid "Storage volume name must be a string"
-msgstr "Il nome del volume di memoria deve essere una stringa"
+msgstr ""
+"Il nome del volume di memoria deve essere una stringa"
msgid "Storage volume allocation must be an integer number"
-msgstr "L'assegnazione del volume di memoria deve essere un numero intero"
+msgstr ""
+"L'assegnazione del volume di memoria deve essere un numero intero"
msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
+"Formato del volume di memoria non supportato. Formati validi: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
msgid "Storage volume requires a volume name"
-msgstr "Il volume di memoria richiede un nome volume"
+msgstr ""
+"Il volume di memoria richiede un nome volume"
#, python-format
msgid ""
"Unable to update database with storage volume information due error: %(err)s"
msgstr ""
-"Impossibile aggiornare il database con informazioni sul volume di memoria a "
-"causa dell'errore: %(err)s"
+"Impossibile aggiornare il database con informazioni sul volume di memoria a causa dell'errore: %(err)s"
#, python-format
msgid "Only one of parameter %(param)s can be specified"
msgstr ""
+"È possibile specificare solo un parametro %(param)s"
#, python-format
msgid "Create volume from %(param)s is not supported"
msgstr ""
+"La creazione del volume da %(param)s non è supportata"
msgid "Storage volume capacity must be an integer number."
msgstr ""
+"La capacità del volume di memoria deve essere un numero intero."
msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
msgstr ""
+"L'URL del volume di memoria deve essere http://, https://, ftp:// o ftps://."
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
msgstr ""
+"Impossibile accedere al file %(url)s. Verificare."
#, python-format
msgid ""
"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
"%(err)s"
msgstr ""
+"Impossibile clonare il volume di memoria '%(name)s' nel pool '%(pool)s'. Dettagli: "
+"%(err)s"
msgid "Specify chunk data and its size to upload a file."
msgstr ""
+"Specificare dati sezione e dimensioni per caricare un file. "
msgid "In order to upload a storage volume, specify the 'upload' parameter."
msgstr ""
+"Per caricare un volume di memoria, specificare il parametro 'upload'. "
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
msgstr ""
+"Impossibile caricare i dati sezione perché non corrispondono con la dimensione sezione richiesta. "
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
msgstr ""
+"Il volume di memoria %(vol)s non è sottoposto a un processo di caricamento. "
msgid "The upload chunk data will exceed the storage volume size."
msgstr ""
+"I dati sezione da caricare supereranno la dimensione del volume di memoria. "
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
msgstr ""
+"Impossibile caricare i dati sezione nel volume di memoria. Dettagli: %(err)s. "
#, python-format
msgid "Interface %(name)s does not exist"
-msgstr "L'interfaccia %(name)s non esiste"
+msgstr ""
+"L'interfaccia %(name)s non esiste"
#, python-format
msgid "Network %(name)s already exists"
-msgstr "Rete %(name)s già esistente"
+msgstr ""
+"Rete %(name)s già esistente"
#, python-format
msgid "Network %(name)s does not exist"
-msgstr "La rete %(name)s non esiste"
+msgstr ""
+"La rete %(name)s non esiste"
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
msgstr ""
-"La sottorete %(subnet)s specificata per la rete %(network)s non è valida ."
+"La sottorete %(subnet)s specificata per la rete %(network)s non è valida."
#, python-format
msgid "Specify a network interface to create bridged network %(name)s"
@@ -840,7 +992,8 @@ msgstr ""
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr "Impossibile eliminare la rete attiva %(name)s"
+msgstr ""
+"Impossibile eliminare la rete attiva %(name)s"
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
@@ -849,66 +1002,72 @@ msgstr ""
msgid "Interface should be bare NIC, bonding or bridge device."
msgstr ""
-"L'interfaccia deve essere un dispositivo bridge o di collegamento NIC bare-"
-"metal."
+"L'interfaccia deve essere un dispositivo bridge o di collegamento NIC bare-metal."
#, python-format
msgid "Unable to create network %(name)s. Details: %(err)s"
-msgstr "Impossibile creare la rete %(name)s. Dettagli: %(err)s"
+msgstr ""
+"Impossibile creare la rete %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
-msgstr "Impossibile trovare un indirizzo IP libero per la rete '%(name)s'"
+msgstr ""
+"Impossibile trovare un indirizzo IP libero per la rete '%(name)s'"
#, python-format
msgid "The interface %(iface)s already exists."
-msgstr "L'interfaccia %(iface)s già esistente."
+msgstr ""
+"Interfaccia %(iface)s già esistente."
msgid "Network name must be a string without slashes (/) or quotes (\")"
msgstr ""
+"Il nome della rete deve essere una stringa senza barre (/) o virgolette (\")"
msgid "Supported network types are isolated, NAT and bridge"
-msgstr "I tipi di rete supportati sono isolata, NAT e bridge"
+msgstr ""
+"I tipi di rete supportati sono isolata, NAT e bridge"
msgid "Network subnet must be a string with IP address and prefix or netmask"
msgstr ""
-"La sottorete della rete deve essere una stringa con indirizzo IP e prefisso "
-"o maschera di rete"
+"La sottorete della rete deve essere una stringa con indirizzo IP e prefisso o maschera di rete"
msgid "Network interface must be a string"
-msgstr "L'interfaccia di rete deve essere una stringa"
+msgstr ""
+"L'interfaccia di rete deve essere una stringa"
msgid "Network VLAN ID must be an integer between 1 and 4094"
-msgstr "L'ID VLAN di rete deve essere un numero intero tra 1 e 4094"
+msgstr ""
+"L'ID VLAN di rete deve essere un numero intero tra 1 e 4094"
msgid "Specify name and type to create a Network"
-msgstr "Specificare nome e tipo per creare una rete"
+msgstr ""
+"Specificare nome e tipo per creare una rete"
#, python-format
msgid ""
"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
"and/or templates linked to this network."
msgstr ""
-"Impossibile eliminare la rete %(name)s. Ci sono alcune macchine virtuali "
-"%(vms)s e/o modelli collegati a tale rete."
+"Impossibile eliminare la rete %(name)s. Ci sono alcune macchine virtuali %(vms)s "
+"e/o modelli collegati a tale rete."
#, python-format
msgid ""
"Unable to deactivate network %(name)s. There are some virtual machines "
"%(vms)s and/or templates linked to this network."
msgstr ""
-"Impossibile disattivare la rete %(name)s. Ci sono alcune macchine virtualie "
+"Impossibile disattivare la rete %(name)s. Ci sono alcune macchine virtuali "
"%(vms)s e/o modelli collegati a tale rete."
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
msgstr ""
-"Il dispositivo bridge %(name)s non può essere il dispositivo trunk di una "
-"VLAN."
+"Il dispositivo bridge %(name)s non può essere il dispositivo trunk di una VLAN."
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr "Impossibile attivare l'interfaccia %(iface)s: %(err)s."
+msgstr ""
+"Impossibile attivare l'interfaccia %(iface)s: %(err)s."
#, python-format
msgid ""
@@ -921,127 +1080,150 @@ msgstr ""
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
msgstr ""
+"Impossibile avviare la rete %(name)s. Dettagli: %(err)s"
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr "Il report di debug %(name)s non esiste"
+msgstr ""
+"Il report di debug %(name)s non esiste"
msgid "Debug report tool not found in system"
-msgstr "Strumento report di debug non trovato nel sistema"
+msgstr ""
+"Strumento report di debug non trovato nel sistema"
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
-msgstr "Impossibile creare il report di debug %(name)s. Dettagli: %(err)s."
+msgstr ""
+"Impossibile creare il report di debug %(name)s. Dettagli: %(err)s. "
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
msgstr ""
+"Impossibile trovare un report di debug con il nome fornito %(name)s"
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
-msgstr "Impossibile generare il report di debug %(name)s. Dettagli: %(err)s"
+msgstr ""
+"Impossibile generare il report di debug %(name)s. Dettagli: %(err)s"
msgid "You should give a name for the debug report file."
msgstr ""
+"È necessario fornire un nome per il file report di debug. "
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
+"Il nome report di debug deve essere una stringa. Sono consentiti solo lettere, cifre, sottolineature ('_') "
+"e trattini ('-')."
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
msgstr ""
-"Un gruppo di volumi denominato '%(name)s' esiste già. Scegliere un altro "
-"nome per creare il pool logico."
+"Il report di debug con il nome specificato \"%(name)s\" già esiste. Utilizzare "
+"un altro."
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr "Il server di memoria %(server)s non è stato utilizzato da Kimchi"
+msgstr ""
+"Il server di memoria %(server)s non è stato utilizzato da Kimchi"
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr "Distro '%(name)s' non esistente"
+msgstr ""
+"Distro '%(name)s' non esistente"
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr "La partizione %(name)s non esiste nell'host"
+msgstr ""
+"La partizione %(name)s non esiste nell'host"
msgid "Unable to shutdown host machine as there are running virtual machines"
msgstr ""
-"Impossibile arrestare la macchina host poiché sono presenti macchine "
-"virtuali in esecuzione"
+"Impossibile arrestare la macchina host poiché sono presenti macchine virtuali in esecuzione"
msgid "Unable to reboot host machine as there are running virtual machines"
msgstr ""
-"Impossibile riavviare la macchina host poiché sono presenti macchine "
-"virtuali in esecuzione"
+"Impossibile riavviare la macchina host poiché sono presenti macchine virtuali in esecuzione"
#, python-format
msgid "Node device '%(name)s' not found"
-msgstr "Dispositivo nodo '%(name)s' non trovato"
+msgstr ""
+"Dispositivo nodo '%(name)s' non trovato"
msgid "Conflicting flag filters specified."
msgstr ""
+"Sono stati specificati dei filtri indicatore in conflitto."
msgid "No packages marked for update"
-msgstr "Nessun pacchetto contrassegnato per l'aggiornamento"
+msgstr ""
+"Nessun pacchetto contrassegnato per l'aggiornamento"
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr "Il pacchetto %(name)s non è contrassegnato per l'aggiornamento."
+msgstr ""
+"Il pacchetto %(name)s non è contrassegnato per l'aggiornamento. "
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
msgstr ""
-"Errore durante il richiamo dei pacchetti contrassegnati per l'aggiornamento. "
-"Dettagli: %(err)s"
+"Errore durante il richiamo dei pacchetti contrassegnati per l'aggiornamento. Dettagli: %(err)s"
msgid "There is no compatible package manager for this system."
-msgstr "Non è presente un gestore pacchetti compatibile per questo sistema."
+msgstr ""
+"Non è presente un gestore pacchetti compatibile per questo sistema."
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr "Impossibile trovare %(item)s nell'archivio dati"
+msgstr ""
+"Impossibile trovare %(item)s nell'archivio dati"
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr "URI %(uri)s non valido"
+msgstr ""
+"URI non valido %(uri)s"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
msgstr ""
-"È stato raggiunto il timeout durante l'esecuzione del comando '%(cmd)s' dopo "
-"%(seconds)s secondi"
+"Timeout durante l'esecuzione del comando '%(cmd)s' dopo %(seconds)s secondi"
msgid "Unable to choose a virtual machine name"
msgstr ""
+"Impossibile scegliere un nome di macchina virtuale"
#, python-format
msgid "Invalid data value '%(value)s'"
msgstr ""
+"Valore dati non valido '%(value)s'"
#, python-format
msgid "Invalid data unit '%(unit)s'"
msgstr ""
+"Unità dati non valida '%(unit)s'"
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
-msgstr "Tipo di memoria non valido. I tipi supportati sono: 'cdrom'"
+msgstr ""
+"Tipo di memoria non valido. Tipi supportati: 'cdrom', 'disk'"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
msgstr ""
+"Il percorso '%(value)s' non è un percorso locale/remoto valido per il dispositivo"
msgid "Only CDROM path can be update."
msgstr ""
+"È possibile aggiornare solo il percorso CDROM."
#, python-format
msgid ""
"The storage device %(dev_name)s does not exist in the virtual machine "
"%(vm_name)s"
msgstr ""
+"Il dispositivo di memoria %(dev_name)s non esiste nella macchina virtuale"
+"%(vm_name)s"
#, python-format
msgid "Error while creating new storage device: %(error)s"
@@ -1050,20 +1232,23 @@ msgstr ""
#, python-format
msgid "Error while updating storage device: %(error)s"
-msgstr "Errore durante l'aggiornamento del dispositivo di memoria: %(error)s"
+msgstr ""
+"Errore durante l'aggiornamento del dispositivo di memoria: %(error)s"
#, python-format
msgid "Error while removing storage device: %(error)s"
-msgstr "Errore durante la rimozione del dispositivo di memoria: %(error)s"
+msgstr ""
+"Errore durante la rimozione del dispositivo di memoria: %(error)s"
msgid "Do not support IDE device hot plug"
msgstr ""
+"Non supportare hot plug dispositivo IDE"
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
"disk"
msgstr ""
-"Specificare tipo e percorso per aggiungere un nuovo disco della macchina "
+"Specificare il tipo e il percorso oppure il tipo e il pool/volume per aggiungere un nuovo disco di macchina "
"virtuale"
msgid "Specify path to update virtual machine disk"
@@ -1073,90 +1258,110 @@ msgstr ""
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
msgstr ""
+"Il tipo di controller %(type)s ha raggiunto il limite di %(limit)s dispositivi"
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
msgstr ""
+"Impossibile richiamare le informazioni del percorso disco per il pool/volume fornito: %(error)s"
msgid "Volume already in use by other virtual machine."
msgstr ""
+"Il volume è già utilizzato da un'altra macchina virtuale."
msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
msgstr ""
-"Specificare tipo e percorso per aggiungere un nuovo disco della macchina "
-"virtuale"
+"È possibile specificare solo uno tra percorso o pool/volume per aggiungere un nuovo"
+"disco di macchina virtuale"
#, python-format
msgid ""
"Volume chosen with format %(format)s does not fit in the storage type "
"%(type)s"
msgstr ""
+"Il volume scelto con il formato %(format)s non si adatta nel tipo di memoria "
+"%(type)s"
msgid "YUM Repository ID must be one word only string."
-msgstr "L'ID repository YUM deve essere una stringa di una sola parola."
+msgstr ""
+"L'ID repository YUM deve essere una stringa di una sola parola."
msgid "Repository URL must be an http://, ftp:// or file:// URL."
-msgstr "L'URL del repository deve essere http://, ftp:// o file:// URL."
+msgstr ""
+"L'URL del repository deve essere http://, ftp:// o file:// URL."
msgid ""
"Repository configuration is a dictionary with specific values according to "
"repository type."
msgstr ""
-"La configurazione del repository è un dizionario con valori specifici in "
-"base al tipo di repository."
+"La configurazione del repository è un dizionario con valori specifici in base al "
+"tipo di repository."
msgid "Distribution to DEB repository must be a string"
-msgstr "La distribuzione al repository DEB deve essere una stringa"
+msgstr ""
+"La distribuzione al repository DEB deve essere una stringa"
msgid "Components to DEB repository must be listed in a array"
-msgstr "I componenti per il repository DEB devono essere elencati in un array"
+msgstr ""
+"I componenti per il repository DEB devono essere elencati in un array"
msgid "Components to DEB repository must be a string"
-msgstr "I componenti per il repository DEB devono essere una stringa"
+msgstr ""
+"I componenti per il repository DEB devono essere una stringa"
msgid "Mirror list to repository must be a string"
msgstr ""
+"L'elenco di elementi speculari per il repository deve essere una stringa"
msgid "YUM Repository name must be string."
-msgstr "Il nome del repository YUM deve essere una stringa."
+msgstr ""
+"Il nome del repository YUM deve essere una stringa."
msgid "GPG check must be a boolean value."
-msgstr "Il controllo GPG deve essere un valore booleano."
+msgstr ""
+"Il controllo GPG deve essere un valore booleano."
msgid "GPG key must be a URL pointing to the ASCII-armored file."
-msgstr "La chiave GPG deve essere un URL che punta al file blindato ASCII."
+msgstr ""
+"La chiave GPG deve essere un URL che punta al file blindato ASCII."
#, python-format
msgid "Could not update repository %(repo_id)s."
-msgstr "Impossibile aggiornare il repository %(repo_id)s."
+msgstr ""
+"Impossibile aggiornare il repository %(repo_id)s."
#, python-format
msgid "Repository %(repo_id)s does not exist."
-msgstr "Il repository %(repo_id)s non esiste."
+msgstr ""
+"Il repository %(repo_id)s non esiste."
msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
"update a YUM repository."
msgstr ""
+"Specificare l'URL di base del repository, l'elenco di elementi speculari o metalink per poter creare o "
+"aggiornare un repository YUM."
msgid "Repository management tool was not recognized for your system."
msgstr ""
-"Lo strumento di gestione del repository non è stato riconosciuto per il "
-"sistema."
+"Lo strumento di gestione del repository non è stato riconosciuto per il sistema."
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr "Il repository %(repo_id)s è già abilitato."
+msgstr ""
+"Il repository %(repo_id)s è già abilitato."
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr "Il repository %(repo_id)s è già disabilitato."
+msgstr ""
+"Il repository %(repo_id)s è già disabilitato."
#, python-format
msgid "Could not remove repository %(repo_id)s."
-msgstr "Impossibile rimuovere il repository %(repo_id)s."
+msgstr ""
+"Impossibile rimuovere il repository %(repo_id)s."
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
@@ -1165,26 +1370,30 @@ msgstr ""
msgid "Specify repository distribution in order to create a DEB repository."
msgstr ""
-"Specificare la distribuzione del repository per poter creare un repository "
-"DEB."
+"Specificare la distribuzione del repository per poter creare un repository DEB."
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr "Impossibile abilitare il repository %(repo_id)s."
+msgstr ""
+"Impossibile abilitare il repository %(repo_id)s."
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr "Impossibile disabilitare il repository %(repo_id)s."
+msgstr ""
+"Impossibile disabilitare il repository %(repo_id)s."
msgid "YUM Repository ID already exists"
-msgstr "ID repository YUM già esistente"
+msgstr ""
+"ID repository YUM già esistente"
msgid "YUM Repository name must be a string"
-msgstr "Il nome del repository YUM deve essere una stringa"
+msgstr ""
+"Il nome del repository YUM deve essere una stringa"
#, python-format
msgid "Unable to list repositories. Details: '%(err)s'"
-msgstr "Impossibile elencare i repository. Dettagli: '%(err)s'"
+msgstr ""
+"Impossibile elencare i repository. Dettagli: '%(err)s'"
#, python-format
msgid "Unable to retrieve repository information. Details: '%(err)s'"
@@ -1193,1062 +1402,1359 @@ msgstr ""
#, python-format
msgid "Unable to add repository. Details: '%(err)s'"
-msgstr "Impossibile aggiungere il repository. Dettagli: '%(err)s'"
+msgstr ""
+"Impossibile aggiungere il repository. Dettagli: '%(err)s'"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr "Impossibile rimuovere il repository. Dettagli: '%(err)s'"
+msgstr ""
+"Impossibile rimuovere il repository. Dettagli: '%(err)s'"
#, python-format
msgid ""
"Configuration items: '%(items)s' are not supported by repository manager"
msgstr ""
+"Elementi di configurazione: '%(items)s' non supportati dal gestore repository "
msgid "Repository metalink must be an http://, ftp:// or file:// URL."
msgstr ""
+"Il metalink del repository deve essere http://, ftp:// o file:// URL."
msgid "Cannot specify mirrorlist and metalink at the same time."
msgstr ""
+"Impossibile specificare contemporaneamente elenco di elementi speculari e metalink. "
#, python-format
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
msgstr ""
+"La macchina virtuale '%(vm)s' deve essere arrestata prima di poterne creare l'istantanea. "
#, python-format
msgid ""
"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"Impossibile creare l'istantanea '%(name)s' sulla macchina virtuale '%(vm)s'. Dettagli: "
+"%(err)s"
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
msgstr ""
+"L'istantanea '%(name)s' non esiste sulla macchina virtuale '%(vm)s'."
#, python-format
msgid ""
"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"Impossibile richiamare l'istantanea '%(name)s' sulla macchina virtuale '%(vm)s'. Dettagli: "
+"%(err)s"
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
msgstr ""
+"Impossibile elencare le istantanee sulla macchina virtuale '%(vm)s'. Dettagli: %(err)s"
#, python-format
msgid ""
"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"Impossibile eliminare l'istantanea '%(name)s' sulla macchina virtuale '%(vm)s'. Dettagli: "
+"%(err)s"
#, python-format
msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"Impossibile richiamare l'istantanea corrente sulla macchina virtuale '%(vm)s'. Dettagli: "
+"%(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
msgstr ""
+"Impossibile invertire la macchina virtuale '%(vm)s' alla istantanea '%(name)s'. Dettagli: "
+"%(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
+"Impossibile creare l'istantanea della macchina virtuale '%(vm)s' perché contiene un "
+"disco con formato '%(format)s'; solo 'qcow2' è supportato."
msgid "The number of vCPUs is too large for this system."
msgstr ""
+"Il numero di vCPU è troppo grande per questo sistema. "
msgid "Invalid vCPU/topology combination."
msgstr ""
+"Combinazione vCPU/topologia non valida. "
msgid "This host (or current configuration) does not allow CPU topology."
msgstr ""
+"Questo host (o configurazione corrente) non consente la topologia CPU."
msgid "ERROR CODE"
-msgstr "CODICE DI ERRORE"
+msgstr ""
+"CODICE DI ERRORE"
msgid "REASON"
-msgstr "CAUSA"
+msgstr ""
+"CAUSA"
msgid "STACK"
-msgstr "STACK"
+msgstr ""
+"STACK"
msgid "Go to Homepage"
-msgstr "Vai alla home page"
+msgstr ""
+"Vai alla home page"
msgid "Create a New Virtual Machine"
-msgstr "Crea una nuova macchina virtuale"
+msgstr ""
+"Crea una nuova macchina virtuale"
msgid "Virtual Machine Name"
-msgstr "Nome macchina virtuale"
+msgstr ""
+"Nome macchina virtuale"
msgid ""
"The name used to identify the virtual machine. If omitted, a name will be "
"chosen based on the template used."
msgstr ""
-"Il nome utilizzato per identificare la macchina virtuale. Se il nome viene "
-"omesso ne verrà scelto uno in base al modello utilizzato."
+"Il nome utilizzato per identificare la macchina virtuale. Se il nome viene omesso "
+"ne verrà scelto uno in base al modello utilizzato."
msgid "Template"
-msgstr "Modello"
+msgstr ""
+"Modello"
msgid "Please create a template first."
-msgstr "Creare prima un modello."
+msgstr ""
+"Creare prima un modello."
msgid "Create a Template"
-msgstr "Crea un modello"
+msgstr ""
+"Crea un modello"
msgid "Please choose a template."
-msgstr "Scegliere un modello."
+msgstr ""
+"Scegliere un modello."
msgid "OS"
-msgstr "SO"
+msgstr ""
+"SO"
msgid "OS Version"
-msgstr "Versione SO"
+msgstr ""
+"Versione SO"
msgid "CPUS"
-msgstr "CPUS"
+msgstr ""
+"CPUS"
msgid "Memory"
-msgstr "Memoria"
+msgstr ""
+"Memoria"
msgid "Create"
-msgstr "Crea"
+msgstr ""
+"Crea"
msgid "Creating..."
msgstr ""
+"Creazione..."
msgid "Edit Guest"
-msgstr "Modifica guest"
+msgstr ""
+"Modifica macchina guest"
msgid "General"
-msgstr "Generale"
+msgstr ""
+"Generale"
msgid "Storage"
-msgstr "Memoria"
+msgstr ""
+"Memoria"
msgid "Interface"
-msgstr "Interfaccia"
+msgstr ""
+"Interfaccia"
msgid "Permission"
-msgstr "Versione"
+msgstr ""
+"Autorizzazione"
msgid "Host PCI Device"
msgstr ""
+"Dispositivo PCI host"
msgid "Snapshot"
msgstr ""
+"Istantanea"
msgid "Name"
-msgstr "Nome"
+msgstr ""
+"Nome"
msgid "CPUs"
-msgstr "CPU"
+msgstr ""
+"CPU"
msgid "Memory (MB)"
-msgstr "Memoria"
+msgstr ""
+"Memoria (MB)"
msgid "Icon"
-msgstr "Icona"
+msgstr ""
+"Icona"
msgid "Device"
-msgstr "Nome dispositivo"
+msgstr ""
+"Unità"
msgid "Path"
-msgstr "Percorso NFS"
+msgstr ""
+"Percorso"
msgid "Network"
-msgstr "Rete"
+msgstr ""
+"Rete"
msgid "Type"
-msgstr "Tipo"
+msgstr ""
+"Tipo"
msgid "MAC Address"
msgstr ""
+"Indirizzo MAC"
msgid "Available system users and groups"
msgstr ""
+"Utenti e gruppi di sistema disponibili"
msgid "Selected system users and groups"
msgstr ""
+"Utenti e gruppi di sistema selezionati"
msgid "User"
msgstr ""
+"Utente "
msgid "All"
-msgstr "Tutti"
+msgstr ""
+"Tutti"
msgid "To Add"
msgstr ""
+"Da aggiungere"
msgid "Added"
msgstr ""
+"Aggiunto"
msgid "filter"
msgstr ""
+"filtro"
msgid "Product"
msgstr ""
+"Prodotto"
msgid "Vendor"
-msgstr "Fornitore"
+msgstr ""
+"Fornitore"
msgid "Created"
msgstr ""
+"Creato"
msgid "Save"
-msgstr "Salva"
+msgstr ""
+"Salva"
msgid "Replace"
-msgstr "Sostituisci"
+msgstr ""
+"Sostituisci"
msgid "Detach"
-msgstr "Scollega"
+msgstr ""
+"Scollega"
msgid "Cancel"
-msgstr "Annulla"
+msgstr ""
+"Annulla"
msgid "revert"
msgstr ""
+"Inverti"
msgid "Add a Storage Device to VM"
-msgstr "Aggiungi un dispositivo di memoria alla VM"
+msgstr ""
+"Aggiungi un dispositivo di memoria alla VM"
msgid "Device Type"
-msgstr "Tipo dispositivo"
+msgstr ""
+"Tipo dispositivo"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "Il tipo di dispositivo. Attualmente, è supportato solo \"cdrom\"."
+msgstr ""
+"Il tipo di dispositivo. Attualmente, sono supportati \"cdrom\" e \"disk\"."
msgid "Storage Pool"
-msgstr "Pool di memoria"
+msgstr ""
+"Pool di memoria"
msgid "Storage pool which volume located in"
-msgstr "Il percorso del pool di memoria deve essere una stringa"
+msgstr ""
+"Pool di memoria in cui si trova il volume"
msgid "Storage Volume"
-msgstr "Nome pool di memoria"
+msgstr ""
+"Volume di memoria"
msgid "Storage volume to be attached"
-msgstr "Il nome del volume di memoria deve essere una stringa"
+msgstr ""
+"Volume di memoria oggetto del collegamento"
msgid "File Path"
-msgstr "Percorso file"
+msgstr ""
+"Percorso file"
msgid "The ISO file path in the server for CDROM."
-msgstr "Il percorso file ISO nel server per CDROM."
+msgstr ""
+"Il percorso file ISO nel server per CDROM."
msgid "Attach"
-msgstr "Allega"
+msgstr ""
+"Allega"
msgid "Start"
-msgstr "Avvia"
+msgstr ""
+"Avvia"
msgid "Reset"
-msgstr "Reimposta"
+msgstr ""
+"Reimposta"
msgid "Pause"
msgstr ""
+"In pausa"
msgid "Resume"
msgstr ""
+"Riprendi"
msgid "Power Off"
msgstr ""
+"Spegni"
msgid "Actions"
-msgstr "Azioni"
+msgstr ""
+"Azioni"
msgid "Connect"
-msgstr "Connetti"
+msgstr ""
+"Connetti"
msgid "Clone"
msgstr ""
+"Clona"
msgid "Edit"
-msgstr "Modifica"
+msgstr ""
+"Modifica"
msgid "Shut Down"
-msgstr "Arresta"
+msgstr ""
+"Arresta"
msgid "Delete"
-msgstr "Elimina"
+msgstr ""
+"Elimina"
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
-"Il nome utente o la password immessi non sono corretti. Ripetere "
-"l'operazione."
+"Il nome utente o la password immessi non sono corretti. Ripetere l'operazione."
msgid "This field is required."
-msgstr "Questo campo è obbligatorio."
+msgstr ""
+"Questo campo è obbligatorio."
msgid "Log in"
-msgstr "Accedi"
+msgstr ""
+"Accedi"
msgid "Logging in..."
-msgstr "Accesso in corso..."
+msgstr ""
+"Accesso in corso..."
msgid "Host"
-msgstr "Host"
+msgstr ""
+"Host"
msgid "Guests"
-msgstr "Guest"
+msgstr ""
+"Guest"
msgid "Templates"
-msgstr "Modelli"
+msgstr ""
+"Modelli"
msgid "Failed to get application configuration"
-msgstr "Richiamo della configurazione dell'applicazione non riuscito"
+msgstr ""
+"Richiamo della configurazione dell'applicazione non riuscito"
msgid "This is not a valid Linux path"
-msgstr "Non è un percorso Linux valido"
+msgstr ""
+"Non è un percorso Linux valido"
msgid "This is not a valid URL."
-msgstr "Non è un URL valido."
+msgstr ""
+"Non è un URL valido."
msgid "No such data available."
-msgstr "Dati indicati non disponibili."
+msgstr ""
+"Dati indicati non disponibili."
msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"Impossibile contattare il sistema host. Verificare che il sistema host sia "
-"attivo e che si disponga della connettività di rete per tale sistema. "
-"Risposta alla richiesta HTTP %1. "
+"Impossibile contattare il sistema host. Verificare che il sistema host sia attivo e che "
+"abbia la connettività di rete. Risposta alla richiesta HTTP %1. "
msgid "Unable to read file."
msgstr ""
+"Impossibile leggere il file."
msgid "Error while uploading file."
msgstr ""
+"Errore durante il caricamento del file."
msgid "Delete Confirmation"
-msgstr "Conferma eliminazione"
+msgstr ""
+"Conferma eliminazione"
msgid "OK"
-msgstr "OK"
+msgstr ""
+"OK"
msgid "Confirm"
-msgstr "Conferma"
+msgstr ""
+"Conferma"
msgid "Warning"
-msgstr "Avvertenza"
+msgstr ""
+"Avvertenza"
msgid "Cloning..."
msgstr ""
+"Clonazione..."
msgid "Loading..."
-msgstr "Caricamento in corso..."
+msgstr ""
+"Caricamento in corso..."
msgid "An error occurred while retrieving system information."
msgstr ""
+"Si è verificato un errore durante il richiamo delle informazioni di sistema. "
msgid "Retry"
-msgstr "Riprova"
+msgstr ""
+"Riprova"
msgid "Detailed message:"
-msgstr "Messaggio dettagliato:"
+msgstr ""
+"Messaggio dettagliato:"
msgid "No ISO found"
msgstr ""
+"Nessun file ISO trovato"
msgid "This is not a valid ISO file."
-msgstr "Non è un file ISO valido."
+msgstr ""
+"Non è un file ISO valido."
msgid "This may take a long time. Do you want to continue?"
-msgstr "Richiederà molto tempo. Continuare?"
+msgstr ""
+"Questa operazione può richiedere del tempo. Si desidera continuare?"
msgid "This will permanently delete the template. Would you like to continue?"
-msgstr "L'azione eliminerà permanentemente il modello. Continuare?"
+msgstr ""
+"L'azione eliminerà permanentemente il modello. Si desidera continuare?"
msgid "Unable to shut down system as there are some virtual machines running!"
msgstr ""
-"Impossibile arrestare il sistema poiché sono in esecuzione alcune macchine "
-"virtuali."
+"Impossibile arrestare il sistema poiché sono in esecuzione alcune macchine virtuali."
msgid "Max:"
-msgstr "Massimo:"
+msgstr ""
+"Massimo:"
msgid "Utilization"
-msgstr "Utilizzo"
+msgstr ""
+"Utilizzo"
msgid "Available"
-msgstr "Disponibile"
+msgstr ""
+"Disponibile"
msgid "Read Rate"
-msgstr "Velocità di lettura"
+msgstr ""
+"Velocità di lettura"
msgid "Write Rate"
-msgstr "Velocità di scrittura"
+msgstr ""
+"Velocità di scrittura"
msgid "Received"
-msgstr "Ricevuti"
+msgstr ""
+"Ricevuti"
msgid "Sent"
-msgstr "Inviati"
+msgstr ""
+"Inviati"
msgid ""
"Shutting down or restarting host will cause unsaved work lost. Continue to "
"shut down/restarting?"
msgstr ""
-"L'arresto o il riavvio dell'host provocherà la perdita del lavoro non "
-"salvato. Continuare con l'arresto o il riavvio?"
+"L'arresto o il riavvio dell'host provocherà la perdita del lavoro non salvato. Continuare con "
+"l'arresto o il riavvio?"
msgid ""
"Repository will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"Il repository verrà rimosso permanentemente e non potrà essere ripristinato. "
-"Si desidera continuare?"
+"Il repository verrà rimosso permanentemente e non potrà essere ripristinato. Si desidera "
+"continuare?"
msgid "Repositories"
-msgstr "Repository"
+msgstr ""
+"Repository"
msgid "ID"
-msgstr "ID"
+msgstr ""
+"ID"
msgid "Base URL"
-msgstr "URL di base"
+msgstr ""
+"URL di base"
msgid "Is Mirror"
-msgstr "È speculare"
+msgstr ""
+"È speculare"
msgid "URL Args"
-msgstr "Argomenti URL"
+msgstr ""
+"Argomenti URL"
msgid "Enabled"
-msgstr "Abilitato"
+msgstr ""
+"Abilitato"
msgid "GPG Check"
-msgstr "Controllo GPG"
+msgstr ""
+"Controllo GPG"
msgid "GPG Key"
-msgstr "Chiave GPG"
+msgstr ""
+"Chiave GPG"
msgid "Add"
-msgstr "Aggiungi"
+msgstr ""
+"Aggiungi"
msgid "Remove"
-msgstr "Rimuovi"
+msgstr ""
+"Rimuovi"
msgid "Enable"
-msgstr "Abilita"
+msgstr ""
+"Abilita"
msgid "Disable"
-msgstr "Disabilita"
+msgstr ""
+"Disabilita"
msgid "Software Updates"
-msgstr "Aggiornamenti del software"
+msgstr ""
+"Aggiornamenti del software"
msgid "Package Name"
-msgstr "Nome pacchetto"
+msgstr ""
+"Nome pacchetto"
msgid "Version"
-msgstr "Versione"
+msgstr ""
+"Versione"
msgid "Architecture"
-msgstr "Architettura"
+msgstr ""
+"Architettura"
msgid "Repository"
-msgstr "Repository"
+msgstr ""
+"Repository"
msgid "Update All"
-msgstr "Aggiorna tutto"
+msgstr ""
+"Aggiorna tutto"
msgid "Updating..."
-msgstr "Aggiornamento in corso..."
+msgstr ""
+"Aggiornamento in corso..."
msgid "Failed to retrieve packages update information."
msgstr ""
+"Richiamo delle informazioni di aggiornamento dei pacchetti non riuscito."
msgid "Failed to update package(s)."
-msgstr "Aggiornamento dei pacchetti non riuscito."
+msgstr ""
+"Aggiornamento dei pacchetti non riuscito."
msgid ""
"Debug report will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"Il report del debug verrà rimosso permanentemente e non potrà essere "
-"ripristinato. Si desidera continuare?"
+"Il report del debug verrà rimosso permanentemente e non potrà essere ripristinato. Si desidera "
+"continuare?"
msgid "Debug Reports"
-msgstr "Report di debug"
+msgstr ""
+"Report di debug"
msgid "Generated Time"
-msgstr "Ora di creazione"
+msgstr ""
+"Ora di creazione"
msgid "Generate"
-msgstr "Crea"
+msgstr ""
+"Crea"
msgid "Generating..."
-msgstr "Creazione in corso..."
+msgstr ""
+"Creazione in corso..."
msgid "Rename"
-msgstr "Ridenomina"
+msgstr ""
+"Ridenomina"
msgid "Download"
-msgstr "Scarica"
+msgstr ""
+"Scarica"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
"hyphen ('-')."
msgstr ""
-"Il nome del report può contenere solo lettere, cifre e/o trattini ('-')."
+"Il nome del report può contenere solo lettere, cifre, sottolineature ('_') e/o "
+"trattini ('-')."
msgid "Pending..."
-msgstr "Caricamento in corso..."
+msgstr ""
+"In sospeso..."
msgid "Report name is the same as the original one."
msgstr ""
+"Il nome report è uguale a quello originale. "
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
"cannot be undone. Would you like to continue?"
msgstr ""
"L'operazione eliminerà la macchina virtuale e i relativi dischi virtuali e "
-"non è reversibile. Continuare?"
+"non è reversibile. Si desidera continuare?"
msgid "Power off Confirmation"
-msgstr "Conferma eliminazione"
+msgstr ""
+"Conferma spegnimento"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
"cache in the guest. Would you like to continue?"
msgstr ""
+"Questa azione può produrre dei risultati indesiderabili, ad esempio una cache di disco "
+"non ripulita nella macchina guest. Si desidera continuare?"
msgid "Reset Confirmation"
-msgstr "Conferma eliminazione"
+msgstr ""
+"Conferma reimpostazione"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
"Would you like to continue?"
msgstr ""
+"C'è un rischio di perdita di dati causato dalla reimpostazione senza l'arresto del sistema operativo della macchina guest. "
+"Si desidera continuare?"
msgid "Shut Down Confirmation"
-msgstr "Conferma eliminazione"
+msgstr ""
+"Conferma dell'arresto"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
-msgstr "L'azione eliminerà permanentemente il modello. Continuare?"
+msgstr ""
+"Notare che il sistema operativo della macchina guest può ignorare questa richiesta. Si desidera continuare?"
msgid "Virtual Machine delete Confirmation"
msgstr ""
+"Conferma di eliminazione della macchina virtuale"
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
msgstr ""
+"Questa macchina virtuale non è persistente. Lo spegnimento la eliminerà. Continuare?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
"default storage pool. The same will happen when the target pool does not "
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
+"Quando la macchina guest di destinazione ha volumi SCSI o iSCSI, essi verranno clonati sul"
+"pool di memoria predefinito. Lo stesso accadrà se il pool di destinazione non"
+"ha spazio sufficiente per clonare i volumi. Si desidera continuare?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
msgstr ""
-"Il CDROM verrà scollegato permanentemente e non sarà possibile ricollegarlo. "
-"Continuare con lo scollegamento?"
+"Il CDROM verrà scollegato permanentemente e non sarà possibile ricollegarlo. Continuare con "
+"lo scollegamento?"
msgid "Attaching..."
-msgstr "Collegamento in corso..."
+msgstr ""
+"Collegamento in corso..."
msgid "Replacing..."
-msgstr "Sostituzione in corso..."
+msgstr ""
+"Sostituzione in corso..."
msgid "Successfully attached!"
-msgstr "Collegamento riuscito."
+msgstr ""
+"Collegamento riuscito."
msgid "Successfully replaced!"
-msgstr "Sostituzione riuscita."
+msgstr ""
+"Sostituzione riuscita."
msgid "Successfully detached!"
-msgstr "Scollegamento riuscito."
+msgstr ""
+"Scollegamento riuscito."
msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
msgstr ""
+"Il disco verrà scollegato permanentemente e sarà possibile ricollegarlo. Continuare con "
+"lo scollegamento?"
msgid "interface:"
msgstr ""
+"interfaccia:"
msgid "address:"
msgstr ""
+"indirizzo:"
msgid "link_type:"
msgstr ""
+"tipo_link:"
msgid "block:"
msgstr ""
+"blocco:"
msgid "drive_type:"
msgstr ""
+"tipo_drive:"
msgid "model:"
msgstr ""
+"modello:"
msgid "Affected devices:"
msgstr ""
+"Dispositivi influenzati:"
msgid "The VLAN id must be between 1 and 4094."
-msgstr "L'ID VLAN deve essere compreso tra 1 e 4094."
+msgstr ""
+"L'ID VLAN deve essere compreso tra 1 e 4094."
msgid "unavailable"
-msgstr "non disponibile"
+msgstr ""
+"non disponibile"
msgid ""
"This action will interrupt network connectivity for any virtual machine that "
"depend on this network."
msgstr ""
-"L'azione interromperà la connettività di rete per qualsiasi macchina "
-"virtuale che dipende da questa rete."
+"L'azione interromperà la connettività di rete per qualsiasi macchina virtuale che "
+"dipende da questa rete."
msgid "Create a network"
-msgstr "Crea una rete"
+msgstr ""
+"Crea una rete"
msgid ""
"This network is not persistent. Instead of stop, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Il pool di memoria non è permanente. Invece di disattivarlo, l'azione lo "
-"eliminerà permanentemente. Continuare?"
+"Questa rete non è permanente. Invece di arrestarla, questa azione la "
+"eliminerà permanentemente. Si desidera continuare?"
msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
+"La tag VLAN con bridge potrebbe non funzionare bene con NetworkManager abilitato. Si "
+"dovrebbe prendere in considerazione la sua disabilitazione. "
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
-msgstr "L'azione eliminerà permanentemente il pool di memoria. Continuare?"
+msgstr ""
+"L'azione eliminerà permanentemente il pool di memoria. Si desidera continuare?"
msgid "This storage pool is empty."
-msgstr "Il pool di memoria è vuoto."
+msgstr ""
+"Il pool di memoria è vuoto."
msgid ""
"It will format your disk and you will loose any data in there, are you sure "
"to continue? "
msgstr ""
-"Il disco verrà formattato e tutti i dati su di esso andranno persi, sicuri "
-"di voler continuare? "
+"Il disco verrà formattato e tutti i dati su di esso andranno persi, sicuri di voler "
+"continuare? "
msgid "SCSI Fibre Channel"
-msgstr "Canale a fibre ottiche SCSI"
+msgstr ""
+"Canale a fibre ottiche SCSI"
msgid "No SCSI adapters found."
-msgstr "Nessun adattatore SCSI trovato."
+msgstr ""
+"Nessun adattatore SCSI trovato."
msgid "Loading iSCSI targets..."
msgstr ""
+"Caricamento delle destinazioni iSCSI..."
msgid "No iSCSI found. Please input one."
msgstr ""
+"iSCSI non trovato. Immetterne uno."
msgid "Failed to load iSCSI targets."
msgstr ""
+"Impossibile caricare le destinazioni iSCSI."
msgid "The storage pool name can not be blank."
-msgstr "Il campo per il nome del pool di memoria non può essere vuoto."
+msgstr ""
+"Il campo per il nome del pool di memoria non può essere vuoto."
msgid "The storage pool path can not be blank."
-msgstr "Il campo per il percorso del pool di memoria non può essere vuoto."
+msgstr ""
+"Il campo per il percorso del pool di memoria non può essere vuoto."
msgid "NFS server mount path can not be blank."
msgstr ""
"Il campo per il percorso di montaggio del server NFS non può essere vuoto."
msgid "Invalid NFS mount path."
-msgstr "Percorso di montaggio NFS non valido."
+msgstr ""
+"Percorso di montaggio NFS non valido."
msgid "No logical device selected."
-msgstr "Nessun dispositivo logico selezionato."
+msgstr ""
+"Nessun dispositivo logico selezionato."
msgid "The iSCSI target can not be blank."
-msgstr "Il campo per la destinazione iSCSI non può essere vuoto."
+msgstr ""
+"Il campo per la destinazione iSCSI non può essere vuoto."
msgid "Server name can not be blank."
-msgstr "Il campo per il nome del server non può essere vuoto."
+msgstr ""
+"Il campo per il nome del server non può essere vuoto."
msgid "This is not a valid Server Name or IP. Please, modify it."
msgstr ""
+"Nome server o IP non validi. Modificarli."
msgid "Looking for available partitions ..."
-msgstr "Ricerca di partizioni disponibili in corso..."
+msgstr ""
+"Ricerca di partizioni disponibili in corso..."
msgid "No available partitions found."
-msgstr "Nessuna partizione disponibile trovata."
+msgstr ""
+"Nessuna partizione disponibile trovata."
msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
"Il pool di memoria non è permanente. Invece di disattivarlo, l'azione lo "
-"eliminerà permanentemente. Continuare?"
+"eliminerà permanentemente. Si desidera continuare?"
msgid "Unable to retrieve partitions information."
msgstr ""
-"Impossibile richiamare le informazioni sul repository. Dettagli: '%(err)s'"
+"Impossibile caricare le informazioni sulla partizione. "
msgid "In progress..."
msgstr ""
+"In corso..."
msgid "Failed!"
msgstr ""
+"Non riuscito."
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
msgstr ""
+"Il percorso CDROM deve essere un percorso locale/remoto valido e non può essere vuoto."
msgid "Disk pool or volume cannot be blank."
-msgstr "Il campo per il nome del pool di memoria non può essere vuoto."
+msgstr ""
+"Il volume o il pool di dischi non può essere vuoto."
msgid "Peers"
msgstr ""
+"Peer"
msgid "Searching"
msgstr ""
+"Ricerca "
msgid "No peers found."
msgstr ""
+"Nessun peer trovato. "
msgid "Help"
-msgstr "Guida"
+msgstr ""
+"Guida"
msgid "About"
-msgstr "Info su"
+msgstr ""
+"Info su"
msgid "Log out"
-msgstr "Disconnetti"
+msgstr ""
+"Disconnetti"
msgid "Version:"
-msgstr "Versione:"
+msgstr ""
+"Versione:"
msgid "Session timeout, please re-login."
msgstr ""
+"Timeout della sessione; rieseguire l'accesso."
msgid "User Name"
-msgstr "Nome utente"
+msgstr ""
+"Nome utente"
msgid "Password"
-msgstr "Password"
+msgstr ""
+"Password"
msgid "Generate a New Debug Report"
-msgstr "Crea un nuovo report di debug"
+msgstr ""
+"Crea un nuovo report di debug"
msgid "Report Name"
-msgstr "Nome report"
+msgstr ""
+"Nome report"
msgid ""
"The name used to identify the report. If omitted, a name will be chosen "
"based on current time. Name can contain: letters, digits, underscore (\"_\") "
"and hyphen (\"-\")."
msgstr ""
-"Il nome utilizzato per identificare il report. Se il nome viene omesso, ne "
-"viene scelto uno in base all'ora corrente. Il nome può contenere lettere, "
-"cifre e trattini (\"-\")."
+"Il nome utilizzato per identificare il report. Se il nome viene omesso, ne viene scelto uno "
+"in base all'ora corrente. Il nome può contenere lettere, cifre, sottolineature (\"_\") "
+"e trattini (\"-\")."
msgid "Rename a Debug Report"
-msgstr "Crea un nuovo report di debug"
+msgstr ""
+"Ridenomina un report di debug"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
"hyphen (\"-\")."
msgstr ""
-"Il nome utilizzato per identificare il report. Se il nome viene omesso, ne "
-"viene scelto uno in base all'ora corrente. Il nome può contenere lettere, "
-"cifre e trattini (\"-\")."
+"Il nome utilizzato per identificare il report. Il nome può contenere lettere, cifre e"
+"trattini (\"-\")."
msgid "Submit"
msgstr ""
+"Inoltra"
msgid "Add a Repository"
-msgstr "Aggiungi un repository"
+msgstr ""
+"Aggiungi un repository"
msgid "Identifier"
-msgstr "Identificativo"
+msgstr ""
+"Identificativo"
msgid "Single word, unique identifier for the repository."
-msgstr "Identificativo univoco di una sola parola per il repository."
+msgstr ""
+"Identificativo univoco di una sola parola per il repository."
msgid "Textual name for the repository."
-msgstr "Nome in formato testo per il repository."
+msgstr ""
+"Nome in formato testo per il repository."
msgid "URL"
-msgstr "URL"
+msgstr ""
+"URL"
msgid "Required Field"
-msgstr "Campo obbligatorio"
+msgstr ""
+"Campo obbligatorio"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
-msgstr "URL al repository. I protocolli supportati sono http, ftp e file."
+msgstr ""
+"URL al repository. I protocolli supportati sono http, ftp e file."
msgid "Repository is a mirror"
-msgstr "Il repository è un elemento speculare."
+msgstr ""
+"Il repository è un elemento speculare"
msgid "Distribution"
-msgstr "Distribuzione"
+msgstr ""
+"Distribuzione"
msgid "Distribution of the DEB repository."
-msgstr "Distribuzione del repository DEB."
+msgstr ""
+"Distribuzione del repository DEB."
msgid "Components"
-msgstr "Componenti"
+msgstr ""
+"Componenti"
msgid "List of components in DEB repository."
-msgstr "Elenco di componenti nel repository DEB."
+msgstr ""
+"Elenco di componenti nel repository DEB."
msgid "Edit Repository"
-msgstr "Modifica repository"
+msgstr ""
+"Modifica repository"
msgid "Mirror List URL"
-msgstr "URL elenco elementi speculari"
+msgstr ""
+"URL elenco elementi speculari"
msgid "Yes"
-msgstr "Sì"
+msgstr ""
+"Sì"
msgid "No"
-msgstr "No"
+msgstr ""
+"No"
msgid "Add a Volume to Storage Pool"
msgstr ""
+"Aggiungi un volume al pool di memoria"
msgid "Fetch from remote URL"
msgstr ""
+"Richiama da URL remoto"
msgid "Enter the remote URL here."
msgstr ""
+"Immettere qui l'URL remoto. "
msgid "Upload a file"
msgstr ""
+"Carica un file"
msgid "Choose the file you want to upload."
msgstr ""
+"Selezionare il file da caricare. "
msgid "Define a New Storage Pool"
-msgstr "Definisci un nuovo pool di memoria"
+msgstr ""
+"Definisci un nuovo pool di memoria"
msgid "Storage Pool Name"
-msgstr "Nome pool di memoria"
+msgstr ""
+"Nome pool di memoria"
msgid ""
"The name used to identify the storage pools, and it should not be empty."
msgstr ""
-"Il nome utilizzato per identificare i pool di memoria; il campo non deve "
-"essere vuoto."
+"Il nome utilizzato per identificare i pool di memoria; il campo non deve essere vuoto."
msgid "Storage Pool Type"
-msgstr "Tipo di pool di memoria"
+msgstr ""
+"Tipo di pool di memoria"
msgid "Storage Path"
-msgstr "Percorso di memoria"
+msgstr ""
+"Percorso di memoria"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
msgstr ""
-"Il percorso del pool di memoria. Ogni pool di memoria deve avere un percorso "
-"univoco."
+"Il percorso del pool di memoria. Ogni pool di memoria deve avere un percorso univoco."
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
"your system."
msgstr ""
-"Kimchi tenterà di creare la directory nel caso non esista ancora sul sistema."
+"Kimchi tenterà di creare la directory nel caso non esista ancora sul "
+"sistema."
msgid "NFS Server IP"
-msgstr "IP server NFS"
+msgstr ""
+"IP server NFS"
msgid "NFS server IP or hostname. It can be input or chosen from history."
msgstr ""
-"Il nome host o l'indirizzo IP del server NFS. È possibile immetterlo o "
-"sceglierlo dalla cronologia."
+"Il nome host o l'indirizzo IP del server NFS. È possibile immetterlo o sceglierlo dalla cronologia."
msgid "NFS Path"
-msgstr "Percorso NFS"
+msgstr ""
+"Percorso NFS"
msgid "The NFS exported path on NFS server."
-msgstr "Il percorso esportato NFS sul server NFS."
+msgstr ""
+"Il percorso esportato NFS sul server NFS."
msgid "Device path"
-msgstr "Percorso dispositivo"
+msgstr ""
+"Percorso dispositivo"
msgid "iSCSI Server"
-msgstr "Server iSCSI"
+msgstr ""
+"Server iSCSI"
msgid "iSCSI server IP or hostname. It should not be empty."
msgstr ""
-"Il nome host o l'indirizzo IP del server iSCSI. Il campo non deve essere "
-"vuoto."
+"Il nome host o l'indirizzo IP del server iSCSI. Il campo non deve essere vuoto."
msgid "Server"
-msgstr "Server"
+msgstr ""
+"Server"
msgid "Port"
-msgstr "Porta"
+msgstr ""
+"Porta"
msgid "Target"
-msgstr "Destinazione"
+msgstr ""
+"Destinazione"
msgid "The iSCSI target on iSCSI server"
-msgstr "La destinazione iSCSI sul server iSCSI"
+msgstr ""
+"La destinazione iSCSI sul server iSCSI"
msgid "Add iSCSI Authentication"
-msgstr "Aggiungi autenticazione iSCSI"
+msgstr ""
+"Aggiungi autenticazione iSCSI"
msgid "iSCSI Authentication"
-msgstr "Autenticazione iSCSI"
+msgstr ""
+"Autenticazione iSCSI"
msgid "SCSI Adapter"
-msgstr "Adattatore SCSI"
+msgstr ""
+"Adattatore SCSI"
msgid "Please, wait..."
-msgstr "Attendere..."
+msgstr ""
+"Attendere..."
msgid "Add Template"
-msgstr "Aggiungi modello"
+msgstr ""
+"Aggiungi modello"
msgid "Where is the source media for this template? "
-msgstr "Dov'è il supporto di origine per questo modello?"
+msgstr ""
+"Dov'è il supporto di origine per questo modello? "
msgid "Local ISO Image"
-msgstr "Immagine ISO locale"
+msgstr ""
+"Immagine ISO locale"
msgid "Local Image File"
msgstr ""
+"File immagine locale"
msgid "Remote ISO Image"
-msgstr "Immagine ISO remota"
+msgstr ""
+"Immagine ISO remota"
msgid "Search ISOs"
-msgstr "Ricerca ISO"
+msgstr ""
+"Ricerca ISO"
msgid "The following ISOs are available:"
-msgstr "Sono disponibili i seguenti file ISO:"
+msgstr ""
+"Sono disponibili i seguenti file ISO:"
msgid "OS: "
-msgstr "SO: "
+msgstr ""
+"SO: "
msgid "Version: "
-msgstr "Versione: "
+msgstr ""
+"Versione: "
msgid "Size: "
-msgstr "Dimensione: "
+msgstr ""
+"Dimensione: "
msgid "Search more ISOs"
-msgstr "Ricerca più ISO"
+msgstr ""
+"Ricerca più ISO"
msgid "Create Templates from Selected ISO"
-msgstr "Crea modelli da ISO selezionato"
+msgstr ""
+"Crea modelli da ISO selezionato"
msgid "I want to use a specific ISO file"
-msgstr "Utilizzare un file ISO specifico"
+msgstr ""
+"Utilizzare un file ISO specifico"
msgid "Loading default remote ISOs ..."
-msgstr "Caricamento di ISO remoti predefiniti in corso..."
+msgstr ""
+"Caricamento di ISO remoti predefiniti in corso..."
msgid "Arch: "
-msgstr "Arch: "
+msgstr ""
+"Arch: "
msgid "I want to use a custom URL"
-msgstr "Utilizzare un URL personalizzato"
+msgstr ""
+"Utilizzare un URL personalizzato"
msgid "Edit Template"
-msgstr "Modifica modello"
+msgstr ""
+"Modifica modello"
msgid "Processor"
-msgstr "Processore"
+msgstr ""
+"Processore"
msgid "CDROM"
-msgstr "CDROM"
+msgstr ""
+"CDROM"
msgid "Image File"
msgstr ""
+"File immagine "
msgid "Graphics"
-msgstr "Grafici"
+msgstr ""
+"Grafici"
msgid "Disk(GB)"
msgstr ""
+"Disco (GB)"
msgid "Disk Format"
msgstr ""
+"Formato disco"
msgid "CPU Number"
-msgstr "Numero CPU"
+msgstr ""
+"Numero CPU"
msgid "Manually set CPU topology"
msgstr ""
+"Imposta manualmente la topologia CPU"
msgid "Cores"
msgstr ""
+"Core"
msgid "Threads"
msgstr ""
+"Thread"
msgid "CPU"
-msgstr "CPU"
+msgstr ""
+"CPU"
msgid "Disk I/O"
-msgstr "I/O disco"
+msgstr ""
+"I/O disco"
msgid "Network I/O"
-msgstr "I/O di rete"
+msgstr ""
+"I/O di rete"
msgid "Livetile"
-msgstr "Riquadro animato"
+msgstr ""
+"Riquadro animato"
msgid "No guests found."
-msgstr "Nessuna macchina guest trovata."
+msgstr ""
+"Nessuna macchina guest trovata."
msgid "Shut down"
-msgstr "Arresta"
+msgstr ""
+"Arresta"
msgid "Restart"
-msgstr "Riavvia"
+msgstr ""
+"Riavvia"
msgid "Basic Information"
-msgstr "Informazioni di base"
+msgstr ""
+"Informazioni di base"
msgid "OS Distro"
-msgstr "Distro SO"
+msgstr ""
+"Distro SO"
msgid "OS Code Name"
-msgstr "Nome codice SO"
+msgstr ""
+"Nome codice SO"
msgid "CPU(s)"
msgstr ""
+"CPU"
msgid "System Statistics"
-msgstr "Statistiche di sistema"
+msgstr ""
+"Statistiche di sistema"
msgid "Update Progress"
-msgstr "Avanzamento aggiornamento"
+msgstr ""
+"Avanzamento aggiornamento"
msgid "Network Name"
-msgstr "Nome rete"
+msgstr ""
+"Nome rete"
msgid "State"
-msgstr "Stato"
+msgstr ""
+"Stato"
msgid "Network Type"
-msgstr "Tipo di Rete"
+msgstr ""
+"Tipo di Rete"
msgid "Address Space"
-msgstr "Spazio indirizzo"
+msgstr ""
+"Spazio indirizzo"
msgid "Name should not contain '/' and '\"'."
-msgstr "Nome pool di memoria non valido. Non deve contenere '/'."
+msgstr ""
+"Il nome non deve contenere '/' e '\"'."
msgid "Isolated: no external network connection"
-msgstr "Isolata: nessuna connessione di rete fisica"
+msgstr ""
+"Isolata: nessuna connessione di rete esterna"
msgid "NAT: outbound physical network connection only"
-msgstr "NAT: solo connessione di rete fisica in uscita"
+msgstr ""
+"NAT: solo connessione di rete fisica in uscita"
msgid "Bridged: Virtual machines are connected to physical network directly"
msgstr ""
@@ -2256,57 +2762,80 @@ msgstr ""
msgid "(No interfaces found)"
msgstr ""
+"(Nessuna interfaccia trovata)"
msgid "Destination"
-msgstr "Destinazione:"
+msgstr ""
+"Destinazione"
msgid "Enable VLAN"
-msgstr "Abilita VLAN:"
+msgstr ""
+"Abilita VLAN"
msgid "VLAN ID"
-msgstr "ID VLAN:"
+msgstr ""
+"ID VLAN"
msgid "Stop"
-msgstr "Arresta"
+msgstr ""
+"Arresta"
msgid "%Used"
msgstr ""
+"% utilizzata"
msgid "Location"
-msgstr "Ubicazione"
+msgstr ""
+"Ubicazione"
msgid "Capacity"
-msgstr "Capacità"
+msgstr ""
+"Capacità"
msgid "Allocated"
-msgstr "Assegnato"
+msgstr ""
+"Assegnato"
msgid "active"
-msgstr "attivo"
+msgstr ""
+"attivo"
msgid "inactive"
-msgstr "non attivo"
+msgstr ""
+"non attivo"
msgid "Deactivate"
-msgstr "Disattiva"
+msgstr ""
+"Disattiva"
msgid "Activate"
-msgstr "Attiva"
+msgstr ""
+"Attiva"
msgid "Add Volume"
msgstr ""
+"Aggiungi volume"
msgid "Extend"
msgstr ""
+"Estendi"
msgid "Undefine"
-msgstr "Rimuovi definizione"
+msgstr ""
+"Rimuovi definizione"
msgid "Format"
-msgstr "Formato:"
+msgstr ""
+"Formato"
msgid "Allocation"
-msgstr "Allocazione:"
+msgstr ""
+"Assegnazione"
msgid "No templates found."
-msgstr "Nessun modello trovato."
+msgstr ""
+"Nessun modello trovato."
+
+# ENGL1SH_VERS10N 28617_40 DO NOT REMOVE OR CHANGE THIS LINE
+# T9N_SRC_ID 92
+# T9N_SH1P_STR1NG KV310AAP001 1
diff --git a/po/ko_KR.po b/po/ko_KR.po
index 5007684..bda3e57 100644
--- a/po/ko_KR.po
+++ b/po/ko_KR.po
@@ -1,5 +1,6 @@
# English translations for kimchi package.
# Copyright (C) 2013 ORGANIZATION
+# Adam Litke <agl(a)us.ibm.com>, 2013.
#
msgid ""
msgstr ""
@@ -9,119 +10,145 @@ msgstr ""
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
-"Language: ko_KR\n"
+"Language: en_US\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=1; plural=0;"
#, python-format
msgid "Unknown parameter %(value)s"
msgstr ""
+"알 수 없는 매개변수 %(value)s"
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr "%(resource)s의 삭제는 허용되지 않음"
+msgstr ""
+"%(resource)s의 삭제는 허용되지 않습니다."
#, python-format
msgid "%(resource)s does not implement update method"
-msgstr "%(resource)s에서는 업데이트 메소드를 구현하지 않음"
+msgstr ""
+"%(resource)s에서는 업데이트 메소드를 구현하지 않습니다."
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr "%(resource)s의 작성은 허용되지 않음"
+msgstr ""
+"%(resource)s의 작성은 허용되지 않습니다."
msgid "Unable to parse JSON request"
-msgstr "JSON 요청을 구문 분석할 수 없습니다."
+msgstr ""
+"JSON 요청을 구문 분석할 수 없습니다."
msgid "This API only supports JSON"
-msgstr "이 API는 JSON만 지원합니다."
+msgstr ""
+"이 API는 JSON만 지원합니다."
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
msgstr ""
+"매개변수가 스키마의 요구사항과 일치하지 않음: %(err)s"
msgid "You don't have permission to perform this operation."
msgstr ""
+"이 조작을 수행할 수 있는 권한이 없습니다."
msgid "Datastore is not initiated in the model object."
-msgstr "데이터 저장소가 모델 오브젝트에서 시작되지 않았습니다."
+msgstr ""
+"데이터 저장소가 모델 오브젝트에서 시작되지 않았습니다."
#, python-format
msgid "Unable to start task due error: %(err)s"
-msgstr "오류 때문에 작업을 시작할 수 없음: %(err)s"
+msgstr ""
+"오류 때문에 작업을 시작할 수 없음: %(err)s"
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
msgstr ""
+"'%(task)s 태스크 실행 중에 %(seconds)s초의 제한시간이 만료되었습니다."
#, python-format
msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
-msgstr "사용자 '%(username)s'의 인증이 실패했습니다. [오류 코드: %(code)s]"
+msgstr ""
+"'%(username)s' 사용자 인증에 실패했습니다. [오류 코드: %(code)s]"
msgid "You are not authorized to access Kimchi"
-msgstr "Kimchi에 액세스할 권한이 없습니다."
+msgstr ""
+"Kimchi에 액세스할 권한이 없습니다."
#, python-format
msgid "Specify %(item)s to login into Kimchi"
-msgstr "Kimchi에 로그인하려면 %(item)s을(를) 지정하십시오."
+msgstr ""
+"Kimchi에 로그인하려면 %(item)s을(를) 지정하십시오."
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
msgstr ""
+"지정한 LDAP 설정에서 %(user_id)s 사용자를 찾지 못했습니다."
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
msgstr ""
+"올바르지 않은 LDAP 구성: %(item)s : %(value)s"
msgid "Unknown \"_cap\" specified"
msgstr ""
+"알 수 없는 \"_cap\"이 지정되었습니다."
msgid "\"_passthrough\" should be \"true\" or \"false\""
msgstr ""
+"\"_passthrough\"는 \"true\" 또는 \"false\"여야 합니다."
msgid "\"_passthrough_affected_by\" should be a device name string"
msgstr ""
+"\"_passthrough_affected_by\"는 장치 이름 문자열이어야 합니다."
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
-msgstr "블록 장치를 가져오는 중에 오류가 발생했습니다. 세부사항: %(err)s"
+msgstr ""
+"블록 장치를 가져오는 중에 오류가 발생했습니다. 세부사항: %(err)s"
#, python-format
msgid "Error while getting block device information for %(device)s."
-msgstr "%(device)s에 대한 블록 장치 정보를 가져오는 중에 오류가 발생했습니다."
+msgstr ""
+"%(device)s에 대한 블록 장치 정보를 가져오는 중에 오류가 발생했습니다."
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr "distro 파일을 찾을 수 없음: %(filename)s"
+msgstr ""
+"distro 파일을 찾을 수 없음: %(filename)s"
#, python-format
msgid ""
"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
msgstr ""
-"distro 파일(%(filename)s)을 구문 분석할 수 없습니다. JSON 파일인지 확인하십시"
-"오."
+"distro 파일을 구문 분석할 수 없음: %(filename)s. JSON 파일인지 확인하십시오."
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
-msgstr "iSCSI 호스트 대상 %(portal)s에 로그인할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"iSCSI 호스트 대상 %(portal)s에 로그인할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to login to iSCSI host %(host)s target %(target)s"
-msgstr "iSCSI host %(host)s 대상 %(target)s에 로그인할 수 없습니다."
+msgstr ""
+"iSCSI 호스트 %(host)s 대상 %(target)s에 로그인할 수 없습니다."
#, python-format
msgid "Unable to find ISO file %(filename)s"
msgstr ""
+"ISO 파일 %(filename)s을(를) 찾을 수 없습니다."
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr "ISO 파일 %(filename)s은(는) 부트 가능하지 않습니다."
+msgstr ""
+"ISO 파일 %(filename)s은(는) 부트 가능하지 않습니다."
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
-msgstr "ISO 파일 %(filename)s에 유효한 El Torito 부트 레코드가 없습니다."
+msgstr ""
+"ISO 파일 %(filename)s에 유효한 El Torito 부트 레코드가 없습니다."
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
@@ -130,17 +157,18 @@ msgstr ""
#, python-format
msgid "Invalid El Torito boot indicator in ISO %(filename)s"
-msgstr "ISO %(filename)s에 올바르지 않은 El Torito 부트 표시기가 있습니다."
+msgstr ""
+"ISO %(filename)s에 올바르지 않은 El Torito 부트 표시기가 있습니다."
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
-msgstr "ISO %(filename)s에서 기본 볼륨이 예상치 않은 볼륨 유형입니다."
+msgstr ""
+"ISO %(filename)s에서 기본 볼륨이 예상치 않은 볼륨 유형입니다."
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
msgstr ""
-"ISO %(filename)s에서 볼륨 디스크립터를 읽는 중에 잘못된 형식이 발견되었습니"
-"다."
+"ISO %(filename)s에서 볼륨 디스크립터를 읽는 중에 잘못된 형식이 발견되었습니다."
#, python-format
msgid ""
@@ -150,209 +178,265 @@ msgid ""
"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
"'path_to_iso'.Details: %(err)s"
msgstr ""
-"하이퍼바이저가 이 ISO %(filename)s을(를) 사용할 권한이 없습니다. 이를 /var/"
-"lib/libvirt 아래로 이동시키거나, (가능한 경우) 검색 권한을 '%(user)s' 사용자"
-"의 파일 액세스 제어 목록에 설정하거나, '%(user)s'을(를) ISO 경로 그룹에 추가"
-"하거나, 'chmod -R o+x 'path_to_iso'(권장되지 않음)에 추가하십시오. 세부사항: "
-"%(err)s"
+"하이퍼바이저가 이 ISO %(filename)s을(를) 사용할 권한이 없습니다. "
+"이를 /var/lib/libvirt 아래로 이동시키거나 (가능한 경우) 검색 권한을 "
+"'%(user)s' 사용자의 파일 액세스 제어 목록에 설정하거나 "
+"'%(user)s'을(를) ISO 경로 그룹 또는 (권장하지 않음) 'chmod -R o+x "
+"'path_to_iso'에 추가하십시오. 세부사항: %(err)s"
msgid "An error occurred when probing image OS information."
msgstr ""
+"이미지 OS 정보를 프로브하는 중에 오류가 발생했습니다."
msgid "No OS information found in given image."
msgstr ""
+"지정된 이미지에 OS 정보가 없습니다."
#, python-format
msgid "Unable to read image file %(filename)s"
msgstr ""
+"이미지 파일 %(filename)s을(를) 읽을 수 없습니다."
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
msgstr ""
+"이미지 파일은 시스템에 있는 기존 파일이여야 합니다. %(filename)s은(는) 유효하지 않은"
+"입력입니다."
#, python-format
msgid "Virtual machine %(name)s already exists"
-msgstr "가상 머신 %(name)s이(가) 이미 존재합니다."
+msgstr ""
+"가상 머신 %(name)s이(가) 이미 존재합니다."
#, python-format
msgid "Virtual machine %(name)s does not exist"
-msgstr "가상 머신 %(name)s이(가) 없습니다."
+msgstr ""
+"가상 머신 %(name)s이(가) 없습니다."
#, python-format
msgid ""
"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
"in use or the virtual machine is not powered off."
msgstr ""
+"가상 머신 %(name)s의 이름을 바꿀 수 없습니다. %(new_name)s 이름이 이미"
+"사용 중이거나 가상 머신의 전원이 꺼졌습니다."
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
-msgstr "중지된 가상 머신 %(name)s에 대한 스크린샷을 검색할 수 없습니다."
+msgstr ""
+"중지된 가상 머신 %(name)s에 대한 스크린샷을 검색할 수 없습니다."
msgid "Remote ISO image is not supported by this server."
-msgstr "원격 ISO 이미지는 이 서버에서 지원하지 않습니다."
+msgstr ""
+"원격 ISO 이미지는 이 서버에서 지원하지 않습니다."
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
msgstr ""
+"스크린샷이 가상 머신 %(name)s에서 지원되지 않습니다."
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
-msgstr "가상 머신 %(name)s을(를) 작성할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"가상 머신 %(name)s을(를) 작성할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
-msgstr "가상 머신 %(name)s을(를) 작성할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"가상 머신 %(name)s을(를) 업데이트할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
-msgstr "가상 머신 %(name)s을(를) 검색할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"가상 머신 %(name)s을(를) 검색할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to connect to powered off virtual machine %(name)s."
msgstr ""
+"전원이 꺼진 가상 머신 %(name)s에 연결할 수 없습니다."
msgid "Virtual machine name must be a string without slashes (/)"
msgstr ""
+"가상 머신 이름은 슬래시(/)를 포함하지 않는 문자열이어야 합니다."
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
msgstr ""
+"가상 머신에 대해 올바르지 않은 템플리트 URI %(value)s이(가) 지정되었습니다."
#, python-format
msgid "Invalid storage pool URI %(value)s specified for virtual machine"
msgstr ""
+"가상 머신에 대해 올바르지 않은 스토리지 URI %(value)s이(가) 지정되었습니다."
msgid "Supported virtual machine graphics are Spice or VNC"
msgstr ""
+"지원되는 가상 머신 그래픽은 Spice 또는 VNC입니다."
msgid "Graphics address to listen on must be IPv4 or IPv6"
-msgstr "청취 대상 그래픽 주소는 IPv4 또는 IPv6여야 합니다."
+msgstr ""
+"청취 대상 그래픽 주소는 IPv4 또는 IPv6여야 합니다."
msgid "Specify a template to create a virtual machine from"
-msgstr "가상 머신을 작성하기 위한 템플리트를 지정하십시오."
+msgstr ""
+"가상 머신을 작성하기 위한 템플리트를 지정하십시오."
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
-msgstr "가상 머신 %(name)s을(를) 시작할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"가상 머신 %(name)s을(를) 시작할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
-msgstr "가상 머신 %(name)s을(를) 중지할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"가상 머신 %(name)s의 전원을 끌 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
-msgstr "가상 머신 %(name)s을(를) 삭제할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"가상 머신 %(name)s을(를) 삭제할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
-msgstr "가상 머신 %(name)s의 이름을 바꿀 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"가상 머신 %(name)s을(를) 다시 설정할 수 없습니다. 세부사항: %(err)s"
msgid "User name list must be an array"
msgstr ""
+"사용자 이름 목록은 배열이어야 합니다."
msgid "User name must be a string"
-msgstr "네트워크 이름은 문자열이어야 합니다."
+msgstr ""
+"사용자 이름은 문자열이어야 합니다."
msgid "Group name list must be an array"
msgstr ""
+"그룹 이름 목록은 배열이어야 합니다."
msgid "Group name must be a string"
-msgstr "네트워크 이름은 문자열이어야 합니다."
+msgstr ""
+"그룹 이름은 문자열이어야 합니다."
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr "'%(users)s' 사용자가 없습니다."
+msgstr ""
+"사용자 '%(users)s'이(가) 없습니다."
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr "'%(groups)s' 사용자가 없습니다."
+msgstr ""
+"그룹 '%(groups)s'이(가) 없습니다."
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
-msgstr "가상 머신 %(name)s을(를) 중지할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"가상 머신 %(name)s을(를) 종료할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr "가상 머신 %(name)s을(를) 시작할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"가상 머신 %(name)s의 액세스 권한 메타데이터를 가져올 수 없습니다. 세부사항: %(err)s"
msgid "The guest console password must be a string."
msgstr ""
+"게스트 콘솔 비밀번호는 문자열이어야 합니다."
msgid "The life time for the guest console password must be a number."
msgstr ""
+"게스트 콘솔 비밀번호의 지속 시간은 숫자여야 합니다."
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
msgstr ""
+"가상 머신 '%(name)s'은(는) 복제하기 전에 중지해야 합니다."
#, python-format
msgid "Insufficient disk space to clone virtual machine '%(name)s'"
msgstr ""
+"가상 머신 '%(name)s'을(를) 복제하기에는 디스크 공간이 충분하지 않습니다."
#, python-format
msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
msgstr ""
+"VM '%(name)s'을(를) 복제할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
msgstr ""
+"비지속적 가상 머신 %(name)s에 대해 올바르지 않은 조작입니다."
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
msgstr ""
+"VM '%(name)s'이(가) 실행 중이 아니므로 일시중단할 수 없습니다."
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
msgstr ""
+"VM %(name)s을(를) 일시중단할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
msgstr ""
+"VM '%(name)s'이(가) 일시정지되지 않았기 때문에 재개할 수 없습니다."
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
msgstr ""
+"VM '%(name)s'을(를) 재개할 수 없습니다. 세부사항: %(err)s"
msgid "Memory assigned is higher then the maximum allowed in the host."
msgstr ""
+"지정된 메모리가 호스트에서 허용되는 최대 크기보다 큽니다."
#, python-format
msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
+"VM '%(name)s'에서는 라이브 메모리 업데이트가 지원되지 않습니다. 머신 오프라인 상태로 메모리를 업데이트하여"
+"이 기능을 사용으로 설정하십시오."
msgid "Only increase memory is allowed in active VMs"
msgstr ""
+"활성 VM에서는 메모리 늘리기만 허용됩니다."
msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
msgstr ""
+"라이브 메모리 업데이트의 경우 새 메모리 값은 이전 메모리 값에 1024 Mib의 배수를 더한 값과"
+"같아야 합니다."
msgid "There are not enough free slots of 1024 Mib in the guest."
msgstr ""
+"게스트에 1024Mib의 여유 슬롯이 없습니다."
msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
msgstr ""
+"호스트의 libvirt 버전에서는 메모리 장치를 지원하지 않습니다. Libvirt는"
+"1.2.14이상이어야 합니다."
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
msgstr ""
+"메모리 장치를 연결하는 중 오류가 발생했습니다. 세부사항: %(error)s"
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
+"VM %(vmid)s이(가) 직접 지정된 호스트 장치 %(dev_name)s을(를) 포함하고 있지 않습니다."
#, python-format
msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
msgstr ""
+"호스트 장치 %(dev_name)s을(를) 직접 VM에 지정할 수 없습니다."
msgid ""
"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
@@ -361,102 +445,127 @@ msgid ""
"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
"iommu=1."
msgstr ""
+"IOMMU 그룹을 찾을 수 없습니다. 올바르게 기능하려면 호스트 PCI pass through에 "
+"IOMMU 그룹이 있어야 합니다. BIOS에서 Intel VT-d 또는 AMD IOMMU를 사용하도록 설정한 후 "
+"커널이 IOMMU 지원으로 컴파일되었는지 확인하십시오. Intel CPU의 경우, "
+"/boot/grub2/grub.conf에 있는 커널 매개변수에 intel_iommu=on을 추가하십시오. AMD CPU의 경우,"
+"iommu=pt iommu=1을 추가하십시오."
msgid "\"name\" should be a device name string"
msgstr ""
+"\"name\"은(는) 장치 이름 문자열이어야 합니다."
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
msgstr ""
+"%(name)s 장치는 호스트에서 사용 중일 수 있습니다. 게스트에 연결할 수"
+"없습니다."
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
-msgstr "가상 머신 %(name)s에 %(iface)s 인터페이스가 없습니다."
+msgstr ""
+"가상 머신 %(name)s에 %(iface)s 인터페이스가 없습니다."
#, python-format
msgid ""
"Network %(network)s specified for virtual machine %(name)s does not exist"
-msgstr "가상 머신 %(name)s에 대해 지정된 %(network)s 네트워크가 없습니다."
+msgstr ""
+"가상 머신 %(name)s에 지정된 %(network)s 네트워크가 없습니다."
msgid "Supported virtual machine interfaces type is only network"
-msgstr "지원되는 가상 머신 인터페이스 유형은 네트워크뿐입니다."
+msgstr ""
+"지원되는 가상 머신 인터페이스 유형은 네트워크뿐입니다."
msgid "Network name for virtual machine interface must be a string"
-msgstr "가상 머신 인터페이스의 네트워크 이름은 문자열이어야 합니다."
+msgstr ""
+"가상 머신 인터페이스의 네트워크 이름은 문자열이어야 합니다."
msgid "Invalid network model card specified for virtual machine interface"
msgstr ""
-"가상 머신 인터페이스에 대해 올바르지 않은 네트워크 모델 카드가 지정되었습니"
-"다."
+"가상 머신 인터페이스에 대해 올바르지 않은 네트워크 모델 카드가 지정되었습니다."
msgid "Specify type and network to add a new virtual machine interface"
-msgstr "새 가상 머신 인터페이스를 추가할 유형 및 네트워크를 지정하십시오."
+msgstr ""
+"새 가상 머신 인터페이스를 추가할 유형 및 네트워크를 지정하십시오."
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
msgstr ""
+"MAC 주소는 FF:FF:FF:FF:FF:FF 형식을 준수해야 합니다."
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
msgstr ""
+"가상 머신 %(name)s에 MAC 주소 %(mac)s이(가) 이미 존재합니다."
msgid "Invalid MAC Address"
msgstr ""
+"올바르지 않은 MAC 주소입니다."
msgid "Cannot change MAC address of a running virtual machine"
msgstr ""
+"실행 중인 가상 머신의 MAC 주소를 변경할 수 없습니다."
#, python-format
msgid "Template %(name)s already exists"
-msgstr "템플리트 %(name)s이(가) 이미 존재합니다."
+msgstr ""
+"템플리트 %(name)s이(가) 이미 존재합니다."
#, python-format
msgid ""
"Network '%(network)s' specified for template %(template)s does not exist"
-msgstr "템플리트 %(template)s에 대해 지정된 '%(network)s' 네트워크가 없습니다."
+msgstr ""
+"%(template)s 템플리트에 지정된 '%(network)s' 네트워크가 없습니다."
#, python-format
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
msgstr ""
-"템플리트 %(template)s에 대해 지정된 스토리지 풀 %(pool)s이(가) 없습니다."
+"%(template)s 템플리트에 지정된 스토리지 풀 %(pool)s이(가) 없습니다."
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
msgstr ""
-"템플리트 %(template)s에 대해 지정된 스토리지 풀 %(pool)s이(가) 활성이 아닙니"
-"다."
+"%(template)s 템플리트에 지정된 스토리지 풀 %(pool)s이(가) 활성이 아닙니다."
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr "CDROM에 대해 올바르지 않은 매개변수 '%(param)s'이(가) 지정되었습니다."
+msgstr ""
+"CDROM에 대해 올바르지 않은 매개변수 '%(param)s' 이(가) 지정되었습니다."
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
msgstr ""
-"템플리트 %(template)s에 대해 지정된 %(network)s 네트워크가 활성이 아닙니다."
+"%(template)s 템플리트에 지정된 %(network)s 네트워크가 활성이 아닙니다."
msgid "Template name must be a string"
-msgstr "템플리트 이름은 문자열이어야 합니다."
+msgstr ""
+"템플리트 이름은 문자열이어야 합니다."
msgid "Template icon must be a path to the image"
-msgstr "템플리트 아이콘은 이미지의 경로여야 합니다."
+msgstr ""
+"템플리트 아이콘은 이미지의 경로여야 합니다."
msgid "Template distribution must be a string"
-msgstr "템플리트 배포는 문자열이어야 합니다."
+msgstr ""
+"템플리트 배포는 문자열이어야 합니다."
msgid "Template distribution version must be a string"
-msgstr "템플리트 배포 버전은 문자열이어야 합니다."
+msgstr ""
+"템플리트 배포 버전은 문자열이어야 합니다."
msgid "The number of CPUs must be an integer greater than 0"
-msgstr "CPU 수는 정수여야 합니다."
+msgstr ""
+"CPU 수는 0보다 큰 정수여야 합니다."
msgid "Amount of memory (MB) must be an integer greater than 512"
-msgstr "메모리 용량(MB)은 512보다 큰 정수여야 합니다."
+msgstr ""
+"메모리 용량(MB)은 512보다 큰 정수여야 합니다."
msgid "Template CDROM must be a local or remote ISO file"
-msgstr "템플리트 CDROM은 로컬 또는 원격 ISO 파일이어야 합니다."
+msgstr ""
+"템플리트 CDROM은 로컬 또는 원격 ISO 파일이어야 합니다."
#, python-format
msgid "Invalid storage pool URI %(value)s specified for template"
@@ -464,101 +573,124 @@ msgstr ""
"템플리트에 대해 올바르지 않은 스토리지 풀 URI %(value)s이(가) 지정되었습니다."
msgid "Specify an ISO image as CDROM or a base image to create a template"
-msgstr "템플리트를 작성하려면 ISO 이미지를 CDROM으로 지정하십시오."
+msgstr ""
+"템플리트를 작성하려면 ISO 이미지를 CDROM 또는 기본 이미지로 지정하십시오."
msgid "All networks for the template must be specified in a list."
-msgstr "템플리트의 모든 네트워크가 목록에 지정되어야 합니다."
+msgstr ""
+"템플리트의 모든 네트워크가 목록에 지정되어야 합니다."
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
msgstr ""
+"스토리지 풀이 iSCSI 또는 SCSI인 경우 볼륨을 템플리트에 지정하십시오."
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
msgstr ""
+"%(volume)s 볼륨이 스토리지 풀 %(pool)s에 없습니다."
#, python-format
msgid "Unable to create template due error: %(err)s"
-msgstr "오류 때문에 템플리트를 작성할 수 없음: %(err)s"
+msgstr ""
+"오류 때문에 템플리트를 작성할 수 없음: %(err)s"
#, python-format
msgid "Unable to delete template due error: %(err)s"
-msgstr "오류 때문에 템플리트를 삭제할 수 없음: %(err)s"
+msgstr ""
+"오류 때문에 템플리트를 삭제할 수 없음: %(err)s"
msgid "Disk size must be an integer greater than 1GB."
msgstr ""
+"디스크 크기는 1GB보다 큰 정수여야 합니다."
msgid "Template base image must be a valid local image file"
-msgstr "템플리트 CDROM은 로컬 또는 원격 ISO 파일이어야 합니다."
+msgstr ""
+"템플리트 기본 이미지는 유효한 로컬 이미지 파일이어야 합니다."
#, python-format
msgid "Cannot identify base image %(path)s format"
msgstr ""
+"기본 이미지 %(path)s 형식을 식별할 수 없습니다."
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
msgstr ""
+"CPU 토폴로지를 지정할 때 VCPU는 소켓, 코어 및 스레드 제품이어야"
+"합니다."
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
"zero."
msgstr ""
+"CPU 토폴로지를 지정할 때 각 요소는 0보다 큰 정수여야"
+"합니다."
msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
+"올바르지 않은 디스크 이미지 형식입니다. 올바른 형식은 bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc입니다."
#, python-format
msgid "Storage pool %(name)s already exists"
-msgstr "스토리지 풀 %(name)s이(가) 이미 존재합니다."
+msgstr ""
+"스토리지 풀 %(name)s이(가) 이미 존재합니다."
#, python-format
msgid "Storage pool %(name)s does not exist"
-msgstr "스토리지 풀 %(name)s이(가) 없습니다."
+msgstr ""
+"스토리지 풀 %(name)s이(가) 없습니다."
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
-msgstr "스토리지 풀 %(name)s을(를) 작성하려면 %(item)s을(를) 지정하십시오."
+msgstr ""
+"스토리지 풀 %(name)s을(를) 작성하려면 %(item)s을(를) 지정하십시오."
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr "활성 스토리지 풀 %(name)s을(를) 삭제할 수 없습니다."
+msgstr ""
+"활성 스토리지 풀 %(name)s을(를) 삭제할 수 없습니다."
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
-msgstr "스토리지 풀을 나열할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"스토리지 풀을 나열할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to create storage pool %(name)s. Details: %(err)s"
-msgstr "스토리지 풀 %(name)s을(를) 작성할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"스토리지 풀 %(name)s을(를) 작성할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
msgstr ""
-"스토리지 풀 %(name)s에 있는 스토리지 볼륨의 수를 가져올 수 없습니다. 세부사"
-"항: %(err)s"
+"스토리지 풀 %(name)s에 있는 스토리지 볼륨의 수를 가져올 수 없습니다. 세부사항: "
+"%(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
-msgstr "스토리지 풀 %(name)s을(를) 활성화할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"스토리지 풀 %(name)s을(를) 활성화할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
-msgstr "스토리지 풀 %(name)s을(를) 비활성화할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"스토리지 풀 %(name)s을(를) 비활성화할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
-msgstr "스토리지 풀 %(name)s을(를) 삭제할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"스토리지 풀 %(name)s을(를) 삭제할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
msgstr ""
-"내보내기 경로 %(path)s이(가) 마운트 중에 차단될 수 있으므로 NFS 풀을 작성할 "
-"수 없습니다."
+"내보내기 경로 %(path)s이(가) 마운트 중에 차단될 수 있으므로 NFS 풀을 작성할 수 없습니다."
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
@@ -567,82 +699,100 @@ msgstr ""
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr "지원되지 않는 스토리지 풀 유형: %(type)s"
+msgstr ""
+"지원되지 않는 스토리지 풀 유형: %(type)s"
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
msgstr ""
+"%(pool)s에 대해 스토리지 풀 XML을 검색하는 중에 오류가 발생했습니다."
msgid "Storage pool name must be a string without slashes (/)"
msgstr ""
+"스토리지 풀 이름은 슬래시(/)를 포함하지 않는 문자열이어야 합니다."
msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
"iso"
msgstr ""
+"지원되는 스토리지 풀 유형은 dir, netfs, logical, iscsi, isci 및 kimchi-"
+"iso입니다."
msgid "Storage pool path must be a string"
-msgstr "스토리지 풀 경로는 문자열이어야 합니다."
+msgstr ""
+"스토리지 풀 경로는 문자열이어야 합니다."
msgid "Storage pool host must be a IP or hostname"
-msgstr "스토리지 풀 호스트는 IP 또는 호스트 이름이어야 합니다."
+msgstr ""
+"스토리지 풀 호스트는 IP 또는 호스트 이름이어야 합니다."
msgid "Storage pool device must be the absolute path to the block device"
msgstr ""
+"스토리지 풀 장치는 블록 장치에 대한 절대 경로여야 합니다."
msgid "Storage pool devices parameter must be a list"
-msgstr "스토리지 풀 장치는 목록이어야 합니다."
+msgstr ""
+"스토리지 풀 장치는 목록이어야 합니다."
msgid "Target IQN of an iSCSI pool must be a string"
-msgstr "iSCSI 풀의 대상 IQN은 문자열이어야 합니다."
+msgstr ""
+"iSCSI 풀의 대상 IQN은 문자열이어야 합니다."
msgid "Port of a remote storage server must be an integer between 1 and 65535"
-msgstr "원격 스토리지 서버의 포트는 1과 65535 사이의 정수여야 합니다."
+msgstr ""
+"원격 스토리지 서버의 포트는 1과 65535 사이의 정수여야 합니다."
msgid "iSCSI target username must be a string"
msgstr ""
+"iSCSI 대상 사용자 이름은 문자열이어야 합니다."
msgid "iSCSI target password must be a string"
msgstr ""
+"iSCSI 대상 비밀번호는 문자열이어야 합니다."
msgid "Specify name and type to create a storage pool"
-msgstr "스토리지 풀을 작성하려면 이름 및 유형을 지정하십시오."
+msgstr ""
+"스토리지 풀을 작성하려면 이름 및 유형을 지정하십시오."
#, python-format
msgid ""
"%(disk)s is not a valid disk/partition. Could not add it to the pool "
"%(pool)s."
msgstr ""
-"%(disk)s은(는) 유효한 디스크/파티션이 아닙니다. 이를 %(pool)s 풀에 추가할 수 "
-"없습니다."
+"%(disk)s은(는) 유효한 디스크/파티션이 아닙니다. 이를 풀"
+"%(pool)s에 추가할 수 없습니다."
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
msgstr ""
+"논리 풀 %(pool)s을(를) 확장할 수 없습니다. 세부사항: %(err)s"
msgid "The parameter disks only can be updated for logical storage pool."
-msgstr "논리 스토리지 풀의 매개변수 디스크만 업데이트할 수 있습니다."
+msgstr ""
+"논리 스토리지 풀의 매개변수 디스크만 업데이트할 수 있습니다."
msgid "The SCSI host adapter name must be a string."
-msgstr "SCSI 호스트 어댑터 이름은 문자열이어야 합니다."
+msgstr ""
+"SCSI 호스트 어댑터 이름은 문자열이어야 합니다."
msgid "The storage pool kimchi_isos is reserved for internal use"
-msgstr "스토리지 풀 kimchi_isos는 내부 용도로 예약되었습니다."
+msgstr ""
+"스토리지 풀 kimchi_isos는 내부 용도로 예약되었습니다."
#, python-format
msgid ""
"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"NFS 스토리지 풀 %(name)s을(를) 활성화할 수 없습니다. NFS 서버 %(server)s에 연"
-"결할 수 없습니다."
+"NFS 스토리지 풀 %(name)s을(를) 활성화할 수 없습니다. NFS 서버 %(server)s은(는)"
+"연결할 수 없습니다."
#, python-format
msgid ""
"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
msgstr ""
-"NFS 스토리지 풀 %(name)s을(를) 비활성화할 수 없습니다. NFS 서버 %(server)s에 "
+"NFS 스토리지 풀 %(name)s을(를) 비활성화할 수 없습니다. NFS 서버 %(server)s은(는)"
"연결할 수 없습니다."
#, python-format
@@ -653,15 +803,16 @@ msgstr ""
#, python-format
msgid "Unable to delete pool %(name)s as it is associated with some templates"
-msgstr "일부 템플리트와 연관되어 있으므로 %(name)s 풀을 삭제할 수 없습니다."
+msgstr ""
+"일부 템플리트와 연관되어 있으므로 %(name)s 풀을 삭제할 수 없습니다."
#, python-format
msgid ""
"A volume group named '%(name)s' already exists. Please, choose another name "
"to create the logical pool."
msgstr ""
-"이름이 '%(name)s'인 볼륨 그룹이 이미 존재합니다. 논리 풀을 작성하려면 다른 이"
-"름을 선택하십시오."
+"이름이 '%(name)s'인 볼륨 그룹이 이미 존재합니다. 논리 풀을 작성하려면"
+"다른 이름을 선택하십시오."
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
@@ -670,72 +821,85 @@ msgstr ""
#, python-format
msgid "Storage volume %(name)s already exists"
-msgstr "스토리지 볼륨 %(name)s이(가) 이미 존재합니다."
+msgstr ""
+"스토리지 볼륨 %(name)s이(가) 이미 존재합니다."
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
-msgstr "스토리지 볼륨 %(name)s이(가) 스토리지 풀 %(pool)s에 없습니다."
+msgstr ""
+"스토리지 볼륨 %(name)s이(가) 스토리지 풀 %(pool)s에 없습니다."
#, python-format
msgid ""
"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
"not active"
msgstr ""
+"스토리지 풀 %(pool)이(가) 활성이 아니므로 스토리지 볼륨 %(volume)s을(를)"
+"작성할 수 없습니다."
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
-msgstr "스토리지 볼륨 %(volume)s을(를) 작성하려면 %(item)s을(를) 지정하십시오."
+msgstr ""
+"스토리지 볼륨 %(name)s을(를) 작성하려면 %(item)s을(를) 지정하십시오."
#, python-format
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
msgstr ""
-"스토리지 풀 %(pool)s이(가) 활성이 아니므로 스토리지 볼륨을 나열할 수 없습니"
-"다."
+"스토리지 풀 %(pool)s이(가) 활성이 아니므로 스토리지 볼륨을 나열할 수 없습니다."
#, python-format
msgid ""
"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
"%(err)s"
msgstr ""
-"스토리지 볼륨 %(name)s을(를) 스토리지 풀 %(pool)s에 작성할 수 없습니다. 세부"
-"사항: %(err)s"
+"스토리지 볼륨 %(name)s을(를) 스토리지 풀 %(pool)s에 작성할 수 없습니다. 세부사항: "
+"%(err)s"
#, python-format
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
msgstr ""
-"스토리지 풀 %(pool)s의 스토리지 볼륨을 나열할 수 없습니다. 세부사항: %(err)s"
+"스토리지 풀 %(pool)s에 있는 스토리지 볼륨을 나열할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
-msgstr "스토리지 풀 %(name)s을(를) 삭제할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"스토리지 볼륨 %(name)s을(를) 삭제할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
-msgstr "스토리지 볼륨 %(name)s을(를) 삭제할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"스토리지 볼륨 %(name)s을(를) 삭제할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
-msgstr "스토리지 볼륨 %(name)s의 크기를 조정할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"스토리지 볼륨 %(name)s의 크기를 조정할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
-msgstr "스토리지 유형 %(type)s은(는) 볼륨 작성 및 삭제를 지원하지 않습니다."
+msgstr ""
+"스토리지 유형 %(type)s은(는) 볼륨 작성 및 삭제를 지원하지 않습니다."
msgid "Storage volume name must be a string"
-msgstr "스토리지 볼륨 이름은 문자열이어야 합니다."
+msgstr ""
+"스토리지 볼륨 이름은 문자열이어야 합니다."
msgid "Storage volume allocation must be an integer number"
-msgstr "스토리지 볼륨 할당은 정수여야 합니다."
+msgstr ""
+"스토리지 볼륨 할당은 정수여야 합니다."
msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
+"스토리지 볼륨 형식이 지원되지 않습니다. 올바른 형식은 bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc입니다."
msgid "Storage volume requires a volume name"
-msgstr "스토리지 볼륨은 볼륨 이름이 필요합니다."
+msgstr ""
+"스토리지 볼륨은 볼륨 이름이 필요합니다."
#, python-format
msgid ""
@@ -746,64 +910,80 @@ msgstr ""
#, python-format
msgid "Only one of parameter %(param)s can be specified"
msgstr ""
+"하나의 매개변수 %(param)s만 지정할 수 있습니다."
#, python-format
msgid "Create volume from %(param)s is not supported"
msgstr ""
+"%(param)s에서의 볼륨 작성은 지원되지 않습니다."
msgid "Storage volume capacity must be an integer number."
msgstr ""
+"스토리지 볼륨 용량은 정수여야 합니다."
msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
msgstr ""
+"스토리지 볼륨 URL은 http://, https://, ftp:// 또는 ftps://여야 합니다."
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
msgstr ""
+"파일 %(url)s에 액세스할 수 없습니다. 확인하십시오."
#, python-format
msgid ""
"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
"%(err)s"
msgstr ""
+"'%(pool)s' 풀에 스토리지 볼륨 '%(name)s'을(를) 복제할 수 없습니다. 세부사항: "
+"%(err)s"
msgid "Specify chunk data and its size to upload a file."
msgstr ""
+"파일을 업로드하려면 청크 데이터 및 해당 크기를 지정하십시오."
msgid "In order to upload a storage volume, specify the 'upload' parameter."
msgstr ""
+"스토리지 볼륨을 업로드하기 위해 '업로드' 매개변수를 지정하십시오."
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
msgstr ""
+"요청한 청크 크기와 일치하지 않기 때문에 청크 데이터를 업로드할 수 없습니다."
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
msgstr ""
+"스토리지 볼륨 %(vol)s은(는) 업로드 프로세스의 영향을 받지 않습니다."
msgid "The upload chunk data will exceed the storage volume size."
msgstr ""
+"업로드 청크 데이터는 스토리지 볼륨 크기를 초과합니다."
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
msgstr ""
+"스토리지 볼륨에 청크 데이터를 업로드할 수 없습니다. 세부사항: %(err)s."
#, python-format
msgid "Interface %(name)s does not exist"
-msgstr "인터페이스 %(name)s이(가) 없습니다."
+msgstr ""
+"%(name)s 인터페이스가 없습니다."
#, python-format
msgid "Network %(name)s already exists"
-msgstr "네트워크 %(name)s이(가) 이미 존재합니다."
+msgstr ""
+"%(name)s 네트워크가 이미 존재합니다."
#, python-format
msgid "Network %(name)s does not exist"
-msgstr "네트워크 %(name)s이(가) 없습니다."
+msgstr ""
+"%(name)s 네트워크가 없습니다."
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
msgstr ""
-"네트워크 %(network)s에 대해 지정된 서브넷 %(subnet)s이(가) 유효하지 않습니다."
+"%(network)s 네트워크에 지정된 %(subnet)s 서브넷이 유효하지 않습니다."
#, python-format
msgid "Specify a network interface to create bridged network %(name)s"
@@ -812,1423 +992,1850 @@ msgstr ""
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr "활성 네트워크 %(name)s을(를) 삭제할 수 없습니다."
+msgstr ""
+"활성 네트워크 %(name)s을(를) 삭제할 수 없습니다."
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
msgstr ""
-"네트워크 %(network)s에 대해 지정된 인터페이스 %(iface)s이(가) 이미 사용 중입"
-"니다."
+"%(network)s 네트워크에 지정된 %(iface)s 인터페이스가 이미 사용 중입니다."
msgid "Interface should be bare NIC, bonding or bridge device."
-msgstr "인터페이스는 순수 NIC, 본딩 또는 브릿지 장치여야 합니다."
+msgstr ""
+"인터페이스는 순수 NIC, 본딩 또는 브릿지 장치여야 합니다."
#, python-format
msgid "Unable to create network %(name)s. Details: %(err)s"
-msgstr "네트워크 %(name)s을(를) 작성할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"%(name)s 네트워크를 작성할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
-msgstr "네트워크 '%(name)s'에 대한 여유 IP 주소를 찾을 수 없습니다."
+msgstr ""
+"네트워크 '%(name)s'에 대한 여유 IP 주소를 찾을 수 없습니다."
#, python-format
msgid "The interface %(iface)s already exists."
msgstr ""
+"%(iface)s 인터페이스가 이미 존재합니다."
msgid "Network name must be a string without slashes (/) or quotes (\")"
msgstr ""
+"네트워크 이름은 슬래시(/) 또는 따옴표(\")를 포함하지 않는 문자열이어야 합니다."
msgid "Supported network types are isolated, NAT and bridge"
-msgstr "지원되는 네트워크 유형은 격리, NAT 및 브릿지입니다."
+msgstr ""
+"지원되는 네트워크 유형은 격리, NAT 및 브릿지입니다."
msgid "Network subnet must be a string with IP address and prefix or netmask"
msgstr ""
"네트워크 서브넷은 IP 주소 및 접두부 또는 넷마스크가 있는 문자열이어야 합니다."
msgid "Network interface must be a string"
-msgstr "네트워크 인터페이스는 문자열이어야 합니다."
+msgstr ""
+"네트워크 인터페이스는 문자열이어야 합니다."
msgid "Network VLAN ID must be an integer between 1 and 4094"
-msgstr "네트워크 VLAN ID는 1과 4094 사이의 정수여야 합니다."
+msgstr ""
+"네트워크 VLAN ID는 1과 4094 사이의 정수여야 합니다."
msgid "Specify name and type to create a Network"
-msgstr "네트워크를 작성하려면 이름 및 유형을 지정하십시오."
+msgstr ""
+"네트워크를 작성하려면 이름 및 유형을 지정하십시오."
#, python-format
msgid ""
"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
"and/or templates linked to this network."
msgstr ""
+"%(name)s 네트워크를 삭제할 수 없습니다. 이 네트워크에 링크된 일부 가상 머신 %(vms)s "
+"및/또는 템플리트가 있습니다."
#, python-format
msgid ""
"Unable to deactivate network %(name)s. There are some virtual machines "
"%(vms)s and/or templates linked to this network."
msgstr ""
+"%(name)s 네트워크를 비활성화할 수 없습니다. 이 네트워크에 링크된 일부 가상 머신"
+"%(vms)s 및/또는 템플리트가 있습니다."
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
-msgstr "브릿지 장치 %(name)s은(는) VLAN의 트렁크 장치가 될 수 없습니다."
+msgstr ""
+"브릿지 장치 %(name)s은(는) VLAN의 트렁크 장치가 될 수 없습니다."
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr "%(iface)s 인터페이스를 활성화하지 못함: %(err)s."
+msgstr ""
+"%(iface)s 인터페이스 활성화 실패: %(err)s."
#, python-format
msgid ""
"Failed to activate interface %(iface)s. Please check the physical link "
"status."
msgstr ""
-"%(iface)s 인터페이스를 활성화하지 못했습니다. 물리적 링크 상태를 확인하십시"
-"오."
+"%(iface)s 인터페이스를 활성화할 수 없습니다. 물리적 링크 상태를"
+"확인하십시오."
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
msgstr ""
+"%(name)s 네트워크를 시작할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr "디버그 보고서 %(name)s이(가) 없습니다."
+msgstr ""
+"디버그 보고서 %(name)s이(가) 없습니다."
msgid "Debug report tool not found in system"
-msgstr "디버그 보고서 도구가 시스템에 없습니다."
+msgstr ""
+"디버그 보고서 도구가 시스템에 없습니다."
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
-msgstr "디버그 보고서 %(name)s을(를) 작성할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"디버그 보고서 %(name)s을(를) 작성할 수 없습니다. 세부사항: %(err)s."
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
msgstr ""
+"지정된 이름 %(name)s의 디버그 보고서를 찾을 수 없습니다."
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
-msgstr "디버그 보고서 %(name)s을(를) 생성할 수 없습니다. 세부사항: %(err)s"
+msgstr ""
+"디버그 보고서 %(name)s을(를) 생성할 수 없습니다. 세부사항: %(err)s"
msgid "You should give a name for the debug report file."
msgstr ""
+"디버그 보고서 파일의 이름을 제공해야 합니다."
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
+"디버그 보고서 이름은 문자열이어야 합니다. 문자, 숫자, 밑줄('_')"
+"및 하이픈('-')만 허용됩니다."
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
msgstr ""
-"이름이 '%(name)s'인 볼륨 그룹이 이미 존재합니다. 논리 풀을 작성하려면 다른 이"
-"름을 선택하십시오."
+"지정된 이름 \"%(name)s\"의 디버그 보고서가 이미 있습니다. 다른 이름을"
+"사용하십시오."
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr "스토리지 서버 %(server)s은(는) Kimchi에서 사용되지 않았습니다."
+msgstr ""
+"스토리지 서버 %(server)s은(는) Kimchi에서 사용되지 않았습니다."
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr "Distro '%(name)s'이(가) 없습니다."
+msgstr ""
+"Distro '%(name)s'이(가) 없습니다."
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr "파티션 %(name)s이(가) 호스트에 없습니다."
+msgstr ""
+"파티션 %(name)s이(가) 호스트에 없습니다."
msgid "Unable to shutdown host machine as there are running virtual machines"
-msgstr "가상 머신을 실행 중인 호스트 머신을 종료할 수 없습니다."
+msgstr ""
+"가상 머신을 실행 중인 호스트 머신을 종료할 수 없습니다."
msgid "Unable to reboot host machine as there are running virtual machines"
-msgstr "가상 머신을 실행 중인 호스트 머신을 다시 부팅할 수 없습니다."
+msgstr ""
+"가상 머신을 실행 중인 호스트 머신을 다시 부팅할 수 없습니다."
#, python-format
msgid "Node device '%(name)s' not found"
-msgstr "노드 장치 '%(name)s'이(가) 없습니다."
+msgstr ""
+"노드 장치 '%(name)s'이(가) 없습니다."
msgid "Conflicting flag filters specified."
msgstr ""
+"충돌하는 플래그 필터를 지정했습니다."
msgid "No packages marked for update"
-msgstr "업데이트 표시된 패키지가 없습니다."
+msgstr ""
+"업데이트 표시된 패키지가 없습니다."
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr "패키지 %(name)s은(는) 업데이트되도록 표시되지 않았습니다."
+msgstr ""
+"패키지 %(name)s은(는) 업데이트되도록 표시되지 않았습니다."
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
msgstr ""
-"업데이트되도록 표시된 패키지를 가져오는 중에 오류가 발생했습니다. 세부사항: "
-"%(err)s"
+"업데이트되도록 표시된 패키지를 가져오는 중에 오류가 발생했습니다. 세부사항: %(err)s"
msgid "There is no compatible package manager for this system."
-msgstr "이 시스템에 대해 호환 가능한 패키지 관리자가 없습니다."
+msgstr ""
+"이 시스템에 대해 호환 가능한 패키지 관리자가 없습니다."
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr "데이터 저장소에서 %(item)s을(를) 찾을 수 없습니다."
+msgstr ""
+"데이터 저장소에서 %(item)s을(를) 찾을 수 없습니다."
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr "올바르지 않은 URI %(uri)s"
+msgstr ""
+"올바르지 않은 URI %(uri)s"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
-msgstr "%(seconds)s초 후에 '%(cmd)s' 명령 실행 중 제한시간이 초과되었습니다."
+msgstr ""
+"%(seconds)s초 후 '%(cmd)s' 명령을 실행하는 중에 제한시간이 초과되었습니다."
msgid "Unable to choose a virtual machine name"
msgstr ""
+"가상 머신 이름을 선택할 수 없습니다."
#, python-format
msgid "Invalid data value '%(value)s'"
msgstr ""
+"올바르지 않은 데이터 값 '%(value)s'입니다."
#, python-format
msgid "Invalid data unit '%(unit)s'"
msgstr ""
+"올바르지 않은 데이터 단위 '%(unit)s'입니다."
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
-msgstr "올바르지 않은 스토리지 유형입니다. 지원되는 유형: 'cdrom'"
+msgstr ""
+"올바르지 않은 스토리지 유형입니다. 지원되는 유형: 'cdrom', 'disk'"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
msgstr ""
+"'%(value)s' 경로는 장치의 유효한 로컬/원격 경로가 아닙니다."
msgid "Only CDROM path can be update."
msgstr ""
+"CDROM 경로만 업데이트할 수 있습니다."
#, python-format
msgid ""
"The storage device %(dev_name)s does not exist in the virtual machine "
"%(vm_name)s"
msgstr ""
+"스토리지 장치 %(dev_name)s이(가) 가상 머신"
+"%(vm_name)s에 없습니다."
#, python-format
msgid "Error while creating new storage device: %(error)s"
-msgstr "새 스토리지 장치를 작성하는 중에 오류 발생: %(error)s"
+msgstr ""
+"새 스토리지 장치를 작성하는 중에 오류 발생: %(error)s"
#, python-format
msgid "Error while updating storage device: %(error)s"
-msgstr "스토리지 장치를 업데이트하는 중에 오류 발생: %(error)s"
+msgstr ""
+"스토리지 장치를 업데이트하는 중에 오류 발생: %(error)s"
#, python-format
msgid "Error while removing storage device: %(error)s"
-msgstr "스토리지 장치를 제거하는 중에 오류 발생: %(error)s"
+msgstr ""
+"스토리지 장치를 제거하는 중에 오류 발생: %(error)s"
msgid "Do not support IDE device hot plug"
msgstr ""
+"IDE 장치 핫 플러그를 지원하지 않습니다."
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
"disk"
-msgstr "새 가상 머신 디스크를 추가할 유형 및 경로를 지정하십시오."
+msgstr ""
+"새 가상 머신 디스크를 추가할 유형 및 경로 또는 유형 및 풀/볼륨을 "
+"지정하십시오."
msgid "Specify path to update virtual machine disk"
-msgstr "가상 머신 디스크를 업데이트할 경로를 지정하십시오."
+msgstr ""
+"가상 머신 디스크를 업데이트할 경로를 지정하십시오."
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
msgstr ""
+"장치의 제어기 유형 %(type)s 한계 %(limit)s에 도달했습니다."
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
msgstr ""
+"지정한 풀/볼륨에 대한 디스크 경로를 검색할 수 없음: %(error)s"
msgid "Volume already in use by other virtual machine."
msgstr ""
+"볼륨이 이미 다른 가상 머신에서 사용 중입니다."
msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
-msgstr "새 가상 머신 디스크를 추가할 유형 및 경로를 지정하십시오."
+msgstr ""
+"경로 또는 풀/볼륨 중 하나만 새로운 가상 머신 디스크에 "
+"지정할 수 있습니다."
#, python-format
msgid ""
"Volume chosen with format %(format)s does not fit in the storage type "
"%(type)s"
msgstr ""
+"%(format)s 형식으로 선택한 볼륨이 스토리지 유형"
+"%(type)s에 적합하지 않습니다."
msgid "YUM Repository ID must be one word only string."
-msgstr "YUM 저장소 ID는 단일 단어의 문자열이어야 합니다."
+msgstr ""
+"YUM 저장소 ID는 단일 단어의 문자열이어야 합니다."
msgid "Repository URL must be an http://, ftp:// or file:// URL."
-msgstr "저장소 URL은 http://, ftp:// 또는 file:// URL이어야 합니다."
+msgstr ""
+"저장소 URL은 http://, ftp:// 또는 file:// URL이어야 합니다."
msgid ""
"Repository configuration is a dictionary with specific values according to "
"repository type."
-msgstr "저장소 구성은 저장소 유형에 따른 특정 값이 있는 사전입니다."
+msgstr ""
+"저장소 구성은 저장소 유형에 따른 특정 값이 있는 "
+"사전입니다."
msgid "Distribution to DEB repository must be a string"
-msgstr "DEB 저장소에 대한 배포는 문자열이어야 합니다."
+msgstr ""
+"DEB 저장소에 대한 배포는 문자열이어야 합니다."
msgid "Components to DEB repository must be listed in a array"
-msgstr "DEB 저장소에 대한 구성요소는 배열에 나열되어야 합니다."
+msgstr ""
+"DEB 저장소에 대한 구성요소는 배열에 나열되어야 합니다."
msgid "Components to DEB repository must be a string"
-msgstr "DEB 저장소에 대한 구성요소는 문자열이어야 합니다."
+msgstr ""
+"DEB 저장소에 대한 구성요소는 문자열이어야 합니다."
msgid "Mirror list to repository must be a string"
msgstr ""
+"저장소에 대한 미러 목록은 문자열이어야 합니다."
msgid "YUM Repository name must be string."
-msgstr "YUM 저장소 이름은 문자열이어야 합니다."
+msgstr ""
+"YUM 저장소 이름은 문자열이어야 합니다."
msgid "GPG check must be a boolean value."
-msgstr "GPG 검사는 부울 값이어야 합니다."
+msgstr ""
+"GPG 검사는 부울 값이어야 합니다."
msgid "GPG key must be a URL pointing to the ASCII-armored file."
-msgstr "GPG 키는 ASCII 보호 파일을 가리키는 URL이어야 합니다."
+msgstr ""
+"GPG 키는 ASCII 보호 파일을 가리키는 URL이어야 합니다."
#, python-format
msgid "Could not update repository %(repo_id)s."
-msgstr "%(repo_id)s 저장소를 업데이트할 수 없습니다."
+msgstr ""
+"'%(repo_id)s' 저장소를 업데이트하지 못했습니다."
#, python-format
msgid "Repository %(repo_id)s does not exist."
-msgstr "%(repo_id)s 저장소가 없습니다."
+msgstr ""
+"%(repo_id)s 저장소가 없습니다."
msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
"update a YUM repository."
msgstr ""
+"YUM 저장소를 작성 또는 업데이트하려면 저장소 기본 URL, 미러 목록 또는 "
+"metalink를 지정하십시오."
msgid "Repository management tool was not recognized for your system."
-msgstr "해당 시스템에 대한 저장소 관리 도구가 인식되지 않았습니다."
+msgstr ""
+"해당 시스템에 대한 저장소 관리 도구가 인식되지 않았습니다."
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr "%(repo_id)s 저장소가 이미 사용으로 설정되어 있습니다."
+msgstr ""
+"%(repo_id)s 저장소가 이미 사용으로 설정되어 있습니다."
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr "%(repo_id)s 저장소가 이미 사용 안함으로 설정되어 있습니다."
+msgstr ""
+"%(repo_id)s 저장소가 이미 사용 안함으로 설정되어 있습니다."
#, python-format
msgid "Could not remove repository %(repo_id)s."
-msgstr "%(repo_id)s 저장소를 제거할 수 없습니다."
+msgstr ""
+"%(repo_id)s 저장소를 제거하지 못했습니다."
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
-msgstr "저장소 구성 파일 %(repo_file)s을(를) 작성할 수 없습니다."
+msgstr ""
+"저장소 구성 파일 %(repo_file)s을(를) 작성할 수 없습니다."
msgid "Specify repository distribution in order to create a DEB repository."
-msgstr "DEB 저장소를 작성하려면 저장소 배포를 지정하십시오."
+msgstr ""
+"DEB 저장소를 작성하려면 저장소 배포를 지정하십시오."
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr "%(repo_id)s 저장소를 사용으로 설정할 수 없습니다."
+msgstr ""
+"%(repo_id)s 저장소를 사용으로 설정하지 못했습니다."
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr "%(repo_id)s 저장소를 사용 안함으로 설정할 수 없습니다."
+msgstr ""
+"%(repo_id)s 저장소를 사용 안함으로 설정하지 못했습니다."
msgid "YUM Repository ID already exists"
-msgstr "YUM 저장소 ID가 이미 존재합니다."
+msgstr ""
+"YUM 저장소 ID가 이미 존재합니다."
msgid "YUM Repository name must be a string"
-msgstr "YUM 저장소 이름은 문자열이어야 합니다."
+msgstr ""
+"YUM 저장소 이름은 문자열이어야 합니다."
#, python-format
msgid "Unable to list repositories. Details: '%(err)s'"
-msgstr "저장소를 나열할 수 없습니다. 세부사항: '%(err)s'"
+msgstr ""
+"저장소를 나열할 수 없습니다. 세부사항: '%(err)s'"
#, python-format
msgid "Unable to retrieve repository information. Details: '%(err)s'"
-msgstr "저장소 정보를 나열할 수 없습니다. 세부사항: '%(err)s'"
+msgstr ""
+"저장소 정보를 검색할 수 없습니다. 세부사항: '%(err)s'"
#, python-format
msgid "Unable to add repository. Details: '%(err)s'"
-msgstr "저장소를 추가할 수 없습니다. 세부사항: '%(err)s'"
+msgstr ""
+"저장소를 추가할 수 없습니다. 세부사항: '%(err)s'"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr "저장소를 제거할 수 없습니다. 세부사항: '%(err)s'"
+msgstr ""
+"저장소를 제거할 수 없습니다. 세부사항: '%(err)s'"
#, python-format
msgid ""
"Configuration items: '%(items)s' are not supported by repository manager"
msgstr ""
+"구성 항목: '%(items)s'은(는) 저장소 관리자에 의해 지원되지 않습니다."
msgid "Repository metalink must be an http://, ftp:// or file:// URL."
msgstr ""
+"저장소 metalink는 http://, ftp:// 또는 file:// URL이어야 합니다."
msgid "Cannot specify mirrorlist and metalink at the same time."
msgstr ""
+"mirrorlist 및 metalink를 동시에 지정할 수 없습니다."
#, python-format
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
msgstr ""
+"가상 머신 '%(vm)s'은(는) 스냅샷을 작성하기 전에 중지해야 합니다."
#, python-format
msgid ""
"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"가상 머신 '%(vm)s'에 '%(name)s' 스냅샷을 작성할 수 없습니다. 세부사항: "
+"%(err)s"
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
msgstr ""
+"가상 머신 '%(vm)s'에 '%(name)s' 스냅샷이 없습니다."
#, python-format
msgid ""
"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"가상 머신 '%(vm)s'에서 '%(name)s' 스냅샷을 검색할 수 없습니다. 세부사항: "
+"%(err)s"
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
msgstr ""
+"가상 머신 '%(vm)s'에 스냅샷을 나열할 수 없습니다. 세부사항: %(err)s"
#, python-format
msgid ""
"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"가상 머신 '%(vm)s'에서 '%(name)s' 스냅샷을 삭제할 수 없습니다. 세부사항: "
+"%(err)s"
#, python-format
msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"가상 머신 '%(vm)s'의 현재 스냅샷을 검색할 수 없습니다. 세부사항: "
+"%(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
msgstr ""
+"'%(name)s' 스냅샷에 대한 가상 머신 '%(vm)s'을(를) 검색할 수 없습니다. 세부사항: "
+"%(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
+"'%(format)s' 형식의 디스크가 포함되어 있기 때문에"
+"가상 머신 '%(vm)s'의 스냅샷을 작성할 수 없습니다. 'qcow2'만 지원됩니다."
msgid "The number of vCPUs is too large for this system."
msgstr ""
+"이 시스템의 vCPU 수가 너무 큽니다."
msgid "Invalid vCPU/topology combination."
msgstr ""
+"올바르지 않은 vCPU/토폴로지 조합입니다."
msgid "This host (or current configuration) does not allow CPU topology."
msgstr ""
+"이 호스트(또는 현재 구성)에서는 CPU 토폴로지가 허용되지 않습니다."
msgid "ERROR CODE"
-msgstr "오류 코드"
+msgstr ""
+"오류 코드"
msgid "REASON"
-msgstr "이유"
+msgstr ""
+"이유"
msgid "STACK"
-msgstr "스택"
+msgstr ""
+"스택"
msgid "Go to Homepage"
-msgstr "홈 페이지로 이동"
+msgstr ""
+"홈 페이지로 이동"
msgid "Create a New Virtual Machine"
-msgstr "새 가상 머신 작성"
+msgstr ""
+"새 가상 머신 작성"
msgid "Virtual Machine Name"
-msgstr "가상 머신 이름"
+msgstr ""
+"가상 머신 이름"
msgid ""
"The name used to identify the virtual machine. If omitted, a name will be "
"chosen based on the template used."
msgstr ""
-"가상 머신을 식별하는 데 사용되는 이름입니다. 생략되면 이름은 사용된 템플리트"
-"를 기반으로 선택됩니다."
+"가상 머신을 식별하는 데 사용되는 이름입니다. 생략되면 이름은 "
+"사용된 템플리트를 기반으로 선택됩니다."
msgid "Template"
-msgstr "템플리트"
+msgstr ""
+"템플리트"
msgid "Please create a template first."
-msgstr "템플리트를 먼저 작성하십시오."
+msgstr ""
+"템플리트를 먼저 작성하십시오."
msgid "Create a Template"
-msgstr "템플리트 작성"
+msgstr ""
+"템플리트 작성"
msgid "Please choose a template."
-msgstr "템플리트를 선택하십시오."
+msgstr ""
+"템플리트를 선택하십시오."
msgid "OS"
-msgstr "OS"
+msgstr ""
+"OS"
msgid "OS Version"
-msgstr "OS 버전"
+msgstr ""
+"OS 버전"
msgid "CPUS"
-msgstr "CPUS"
+msgstr ""
+"CPUS"
msgid "Memory"
-msgstr "메모리"
+msgstr ""
+"메모리"
msgid "Create"
-msgstr "작성"
+msgstr ""
+"작성"
msgid "Creating..."
msgstr ""
+"작성 중..."
msgid "Edit Guest"
-msgstr "게스트 편집"
+msgstr ""
+"게스트 편집"
msgid "General"
-msgstr "일반"
+msgstr ""
+"일반"
msgid "Storage"
-msgstr "스토리지"
+msgstr ""
+"스토리지"
msgid "Interface"
-msgstr "인터페이스"
+msgstr ""
+"인터페이스"
msgid "Permission"
-msgstr "버전"
+msgstr ""
+"권한"
msgid "Host PCI Device"
msgstr ""
+"호스트 PCI 장치"
msgid "Snapshot"
msgstr ""
+"스냅샷"
msgid "Name"
-msgstr "이름"
+msgstr ""
+"이름"
msgid "CPUs"
-msgstr "CPU"
+msgstr ""
+"CPU"
msgid "Memory (MB)"
-msgstr "메모리"
+msgstr ""
+"메모리(MB)"
msgid "Icon"
-msgstr "아이콘"
+msgstr ""
+"아이콘"
msgid "Device"
-msgstr "장치 이름"
+msgstr ""
+"장치"
msgid "Path"
-msgstr "NFS 경로"
+msgstr ""
+"경로"
msgid "Network"
-msgstr "네트워크"
+msgstr ""
+"네트워크"
msgid "Type"
-msgstr "유형"
+msgstr ""
+"유형"
msgid "MAC Address"
msgstr ""
+"MAC 주소"
msgid "Available system users and groups"
msgstr ""
+"사용 가능한 시스템 사용자 및 그룹"
msgid "Selected system users and groups"
msgstr ""
+"선택한 시스템 사용자 및 그룹"
msgid "User"
msgstr ""
+"사용자"
msgid "All"
-msgstr "모두"
+msgstr ""
+"모두"
msgid "To Add"
msgstr ""
+"추가 대상"
msgid "Added"
msgstr ""
+"추가됨"
msgid "filter"
msgstr ""
+"필터"
msgid "Product"
msgstr ""
+"제품"
msgid "Vendor"
-msgstr "공급업체"
+msgstr ""
+"공급업체"
msgid "Created"
msgstr ""
+"작성됨"
msgid "Save"
-msgstr "저장"
+msgstr ""
+"저장"
msgid "Replace"
-msgstr "교체"
+msgstr ""
+"교체"
msgid "Detach"
-msgstr "분리"
+msgstr ""
+"분리"
msgid "Cancel"
-msgstr "취소"
+msgstr ""
+"취소"
msgid "revert"
msgstr ""
+"되돌리기"
msgid "Add a Storage Device to VM"
-msgstr "스토리지 장치를 VM에 추가"
+msgstr ""
+"스토리지 장치를 VM에 추가"
msgid "Device Type"
-msgstr "장치 유형"
+msgstr ""
+"장치 유형"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "장치 유형입니다. 현재 \"cdrom\"만 지원됩니다."
+msgstr ""
+"장치 유형. 현재 \"cdrom\" 및 \"disk\"가 지원됩니다."
msgid "Storage Pool"
-msgstr "스토리지 풀"
+msgstr ""
+"스토리지 풀"
msgid "Storage pool which volume located in"
-msgstr "스토리지 풀 경로는 문자열이어야 합니다."
+msgstr ""
+"볼륨이 위치한 스토리지 풀"
msgid "Storage Volume"
-msgstr "스토리지 풀 이름"
+msgstr ""
+"스토리지 볼륨"
msgid "Storage volume to be attached"
-msgstr "스토리지 볼륨 이름은 문자열이어야 합니다."
+msgstr ""
+"연결될 스토리지 볼륨"
msgid "File Path"
-msgstr "파일 경로"
+msgstr ""
+"파일 경로"
msgid "The ISO file path in the server for CDROM."
-msgstr "CDROM을 위한 서버의 ISO 파일 경로입니다."
+msgstr ""
+"CDROM을 위한 서버의 ISO 파일 경로입니다."
msgid "Attach"
-msgstr "연결"
+msgstr ""
+"연결"
msgid "Start"
-msgstr "시작"
+msgstr ""
+"시작"
msgid "Reset"
-msgstr "다시 설정"
+msgstr ""
+"다시 설정"
msgid "Pause"
msgstr ""
+"일시정지"
msgid "Resume"
msgstr ""
+"재개"
msgid "Power Off"
msgstr ""
+"전원 끄기"
msgid "Actions"
-msgstr "조치"
+msgstr ""
+"조치"
msgid "Connect"
-msgstr "연결"
+msgstr ""
+"연결"
msgid "Clone"
msgstr ""
+"복제"
msgid "Edit"
-msgstr "편집"
+msgstr ""
+"편집"
msgid "Shut Down"
-msgstr "시스템 종료"
+msgstr ""
+"종료"
msgid "Delete"
-msgstr "삭제"
+msgstr ""
+"삭제"
msgid "The username or password you entered is incorrect. Please try again."
msgstr ""
"입력한 사용자 이름 또는 비밀번호가 올바르지 않습니다. 다시 시도하십시오."
msgid "This field is required."
-msgstr "이 필드는 필수입니다."
+msgstr ""
+"이 필드는 필수입니다."
msgid "Log in"
-msgstr "로그인"
+msgstr ""
+"로그인"
msgid "Logging in..."
-msgstr "로그인 중..."
+msgstr ""
+"로그인 중..."
msgid "Host"
-msgstr "호스트"
+msgstr ""
+"호스트"
msgid "Guests"
-msgstr "게스트"
+msgstr ""
+"게스트"
msgid "Templates"
-msgstr "템플리트"
+msgstr ""
+"템플리트"
msgid "Failed to get application configuration"
-msgstr "애플리케이션 구성을 가져오지 못했습니다."
+msgstr ""
+"애플리케이션 구성을 가져오지 못했습니다."
msgid "This is not a valid Linux path"
-msgstr "올바른 Linux 경로가 아닙니다."
+msgstr ""
+"올바른 Linux 경로가 아닙니다."
msgid "This is not a valid URL."
-msgstr "올바른 URL이 아닙니다."
+msgstr ""
+"올바른 URL이 아닙니다."
msgid "No such data available."
-msgstr "해당 데이터가 없습니다."
+msgstr ""
+"해당 데이터가 없습니다."
msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"호스트 시스템에 접속할 수 없습니다. 호스트 시스템이 가동되었고 이에 대한 네트"
-"워크 연결이 있는지 확인하십시오. HTTP 요청 응답 %1. "
+"호스트 시스템에 접속할 수 없습니다. 호스트 시스템이 가동되었고 "
+"이에 대한 네트워크 연결이 있는지 확인하십시오. HTTP 요청 응답 %1입니다. "
msgid "Unable to read file."
msgstr ""
+"파일을 읽을 수 없습니다. "
msgid "Error while uploading file."
msgstr ""
+"파일을 업로드하는 중에 오류가 발생했습니다."
msgid "Delete Confirmation"
-msgstr "삭제 확인"
+msgstr ""
+"삭제 확인"
msgid "OK"
-msgstr "확인"
+msgstr ""
+"확인"
msgid "Confirm"
-msgstr "확인"
+msgstr ""
+"확인"
msgid "Warning"
-msgstr "경고"
+msgstr ""
+"경고"
msgid "Cloning..."
msgstr ""
+"복제 중..."
msgid "Loading..."
-msgstr "로드 중..."
+msgstr ""
+"로드 중..."
msgid "An error occurred while retrieving system information."
msgstr ""
+"시스템 정보를 검색하는 중에 오류가 발생했습니다."
msgid "Retry"
-msgstr "재시도"
+msgstr ""
+"재시도"
msgid "Detailed message:"
-msgstr "세부 메시지:"
+msgstr ""
+"세부 메시지:"
msgid "No ISO found"
msgstr ""
+"ISO가 없습니다."
msgid "This is not a valid ISO file."
-msgstr "올바른 ISO 파일이 아닙니다."
+msgstr ""
+"올바른 ISO 파일이 아닙니다."
msgid "This may take a long time. Do you want to continue?"
-msgstr "시간이 오래 걸립니다. 계속하시겠습니까?"
+msgstr ""
+"시간이 오래 걸릴 수 있습니다. 계속하시겠습니까?"
msgid "This will permanently delete the template. Would you like to continue?"
-msgstr "템플리트가 영구적으로 삭제됩니다. 계속하시겠습니까?"
+msgstr ""
+"템플리트가 영구적으로 삭제됩니다. 계속하시겠습니까?"
msgid "Unable to shut down system as there are some virtual machines running!"
-msgstr "일부 가상 머신이 실행 중이므로 시스템을 종료할 수 없습니다."
+msgstr ""
+"일부 가상 머신이 실행 중이므로 시스템을 종료할 수 없습니다."
msgid "Max:"
-msgstr "최대:"
+msgstr ""
+"최대:"
msgid "Utilization"
-msgstr "이용률"
+msgstr ""
+"이용률"
msgid "Available"
-msgstr "사용 가능"
+msgstr ""
+"사용 가능"
msgid "Read Rate"
-msgstr "읽기 속도"
+msgstr ""
+"읽기 속도"
msgid "Write Rate"
-msgstr "쓰기 속도"
+msgstr ""
+"쓰기 속도"
msgid "Received"
-msgstr "받음"
+msgstr ""
+"받음"
msgid "Sent"
-msgstr "보냄"
+msgstr ""
+"보냄"
msgid ""
"Shutting down or restarting host will cause unsaved work lost. Continue to "
"shut down/restarting?"
msgstr ""
-"호스트를 종료하거나 다시 시작하면 저장되지 않은 작업이 손실됩니다. 시스템 종"
-"료/다시 시작을 계속하시겠습니까?"
+"호스트를 종료하거나 다시 시작하면 저장되지 않은 작업이 손실됩니다. 시스템 종료/다시 시작을 "
+"계속하시겠습니까?"
msgid ""
"Repository will be removed permanently and can't be recovered. Do you want "
"to continue?"
-msgstr "저장소가 영구적으로 제거되어 복구할 수 없습니다. 계속하시겠습니까?"
+msgstr ""
+"저장소가 영구적으로 제거되어 복구할 수 없습니다. "
+"계속하시겠습니까?"
msgid "Repositories"
-msgstr "저장소"
+msgstr ""
+"저장소"
msgid "ID"
-msgstr "ID"
+msgstr ""
+"ID"
msgid "Base URL"
-msgstr "기본 URL"
+msgstr ""
+"기본 URL"
msgid "Is Mirror"
-msgstr "미러임"
+msgstr ""
+"미러임"
msgid "URL Args"
-msgstr "URL 인수"
+msgstr ""
+"URL 인수"
msgid "Enabled"
-msgstr "사용함"
+msgstr ""
+"사용함"
msgid "GPG Check"
-msgstr "GPG 검사"
+msgstr ""
+"GPG 검사"
msgid "GPG Key"
-msgstr "GPG 키"
+msgstr ""
+"GPG 키"
msgid "Add"
-msgstr "추가"
+msgstr ""
+"추가"
msgid "Remove"
-msgstr "제거"
+msgstr ""
+"제거"
msgid "Enable"
-msgstr "사용"
+msgstr ""
+"사용"
msgid "Disable"
-msgstr "사용 안함"
+msgstr ""
+"사용 안함"
msgid "Software Updates"
-msgstr "소프트웨어 업데이트"
+msgstr ""
+"소프트웨어 업데이트"
msgid "Package Name"
-msgstr "패키지 이름"
+msgstr ""
+"패키지 이름"
msgid "Version"
-msgstr "버전"
+msgstr ""
+"버전"
msgid "Architecture"
-msgstr "아키텍처"
+msgstr ""
+"아키텍처"
msgid "Repository"
-msgstr "저장소"
+msgstr ""
+"저장소"
msgid "Update All"
-msgstr "모두 업데이트"
+msgstr ""
+"모두 업데이트"
msgid "Updating..."
-msgstr "업데이트 중..."
+msgstr ""
+"업데이트 중..."
msgid "Failed to retrieve packages update information."
msgstr ""
+"패키지 업데이트 정보가 검색되지 않았습니다."
msgid "Failed to update package(s)."
-msgstr "패키지를 업데이트하지 못했습니다."
+msgstr ""
+"패키지를 업데이트하지 못했습니다."
msgid ""
"Debug report will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"디버그 보고서가 영구적으로 제거되어 복구할 수 없습니다. 계속하시겠습니까?"
+"디버그 보고서가 영구적으로 제거되어 복구할 수 없습니다. "
+"계속하시겠습니까?"
msgid "Debug Reports"
-msgstr "디버그 보고서"
+msgstr ""
+"디버그 보고서"
msgid "Generated Time"
-msgstr "생성 시간"
+msgstr ""
+"생성 시간"
msgid "Generate"
-msgstr "생성"
+msgstr ""
+"생성"
msgid "Generating..."
-msgstr "생성 중..."
+msgstr ""
+"생성 중..."
msgid "Rename"
-msgstr "이름 바꾸기"
+msgstr ""
+"이름 바꾸기"
msgid "Download"
-msgstr "다운로드"
+msgstr ""
+"다운로드"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
"hyphen ('-')."
-msgstr "보고서 이름에는 문자, 숫자 및/또는 하이픈('-')만 포함되어야 합니다."
+msgstr ""
+"보고서 이름에는 문자, 숫자, 밑줄('_') 및 또는"
+"하이픈('-')만 포함되어야 합니다."
msgid "Pending..."
-msgstr "로드 중..."
+msgstr ""
+"보류 중..."
msgid "Report name is the same as the original one."
msgstr ""
+"보고서 이름은 원본과 동일합니다."
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
"cannot be undone. Would you like to continue?"
msgstr ""
-"가상 머신 및 해당 가상 디스크가 삭제됩니다. 이 조작은 실행 취소할 수 없습니"
-"다. 계속하시겠습니까?"
+"가상 머신 및 해당 가상 디스크가 삭제됩니다. 이 조작은 "
+"실행 취소할 수 없습니다. 계속하시겠습니까?"
msgid "Power off Confirmation"
-msgstr "삭제 확인"
+msgstr ""
+"전원 끄기 확인"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
"cache in the guest. Would you like to continue?"
msgstr ""
+"이 조치는 원하지 않은 결과를 생성할 수 있습니다(예: 게스트에 비워지지 않은 "
+"디스크 캐시가 있음). 계속하시겠습니까?"
msgid "Reset Confirmation"
-msgstr "삭제 확인"
+msgstr ""
+"다시 설정 확인"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
"Would you like to continue?"
msgstr ""
+"게스트 OS를 종료하지 않고 다시 설정함으로 인한 데이터 손실 위험이 있습니다. "
+"계속하시겠습니까?"
msgid "Shut Down Confirmation"
-msgstr "삭제 확인"
+msgstr ""
+"종료 확인"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
-msgstr "템플리트가 영구적으로 삭제됩니다. 계속하시겠습니까?"
+msgstr ""
+"게스트 OS가 이 요청을 무시할 수 있음을 참고하십시오. 계속하시겠습니까?"
msgid "Virtual Machine delete Confirmation"
msgstr ""
+"가상 머신 삭제 확인"
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
msgstr ""
+"이 가상 머신은 지속적이지 않습니다. 전원을 끄면 삭제됩니다. 계속하시겠습니까?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
"default storage pool. The same will happen when the target pool does not "
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
+"대상 게스트에 SCSI 또는 iSCSI 볼륨이 있으면 기본 스토리지 풀에"
+"복제됩니다. 대상 풀에 볼륨을 복제할 수 있는 공간이 충분하지 않은 경우에도"
+"마찬가지입니다. 계속하시겠습니까?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
msgstr ""
-"이 CDROM은 영구적으로 분리되며 다시 연결할 수 있습니다. 분리를 계속하시겠습니"
-"까?"
+"이 CDROM은 영구적으로 분리되며 다시 연결할 수 있습니다. 분리를 "
+"계속하시겠습니까?"
msgid "Attaching..."
-msgstr "연결 중..."
+msgstr ""
+"연결 중..."
msgid "Replacing..."
-msgstr "교체 중..."
+msgstr ""
+"교체 중..."
msgid "Successfully attached!"
-msgstr "연결되었습니다."
+msgstr ""
+"연결되었습니다."
msgid "Successfully replaced!"
-msgstr "교체되었습니다."
+msgstr ""
+"교체되었습니다."
msgid "Successfully detached!"
-msgstr "분리되었습니다."
+msgstr ""
+"분리되었습니다."
msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
msgstr ""
+"이 디스크는 영구적으로 분리되고 다시 연결할 수 있습니다. 분리를 "
+"계속하시겠습니까?"
msgid "interface:"
msgstr ""
+"인터페이스:"
msgid "address:"
msgstr ""
+"주소:"
msgid "link_type:"
msgstr ""
+"link_type:"
msgid "block:"
msgstr ""
+"블록:"
msgid "drive_type:"
msgstr ""
+"drive_type:"
msgid "model:"
msgstr ""
+"모델:"
msgid "Affected devices:"
msgstr ""
+"관련 장치:"
msgid "The VLAN id must be between 1 and 4094."
-msgstr "VLAN ID는 1과 4094 사이여야 합니다."
+msgstr ""
+"VLAN ID는 1과 4094 사이여야 합니다."
msgid "unavailable"
-msgstr "사용 불가능"
+msgstr ""
+"사용 불가능"
msgid ""
"This action will interrupt network connectivity for any virtual machine that "
"depend on this network."
msgstr ""
-"이 조치는 이 네트워크에 의존하는 가상 머신의 네트워크 연결을 인터럽트합니다."
+"이 조치는 이 네트워크에 의존하는 가상 머신의 네트워크 연결을 "
+"인터럽트합니다."
msgid "Create a network"
-msgstr "네트워크 작성"
+msgstr ""
+"네트워크 작성"
msgid ""
"This network is not persistent. Instead of stop, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"이 스토리지 풀은 지속적이지 않습니다. 이 조치는 풀을 비활성화하지 않고 영구적"
-"으로 삭제합니다. 계속하시겠습니까?"
+"이 네트워크는 지속적이지 않습니다. 이 조치는 중지하는 대신 "
+"영구적으로 삭제합니다. 계속하시겠습니까?"
msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
+"NetworkManager를 사용으로 설정하여 브릿지된 VLAN 태그가 잘 작동하지 않을 수 있습니다. 사용 안함으로"
+"설정하는 것이 좋습니다."
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
-msgstr "스토리지 풀이 영구적으로 삭제됩니다. 계속하시겠습니까?"
+msgstr ""
+"스토리지 풀이 영구적으로 삭제됩니다. 계속하시겠습니까?"
msgid "This storage pool is empty."
-msgstr "이 스토리지 풀은 비어 있습니다."
+msgstr ""
+"이 스토리지 풀은 비어 있습니다."
msgid ""
"It will format your disk and you will loose any data in there, are you sure "
"to continue? "
-msgstr "디스크가 포맷되고 데이터가 손실됩니다. 계속하시겠습니까? "
+msgstr ""
+"디스크가 포맷되고 데이터가 손실됩니다. "
+"계속하시겠습니까? "
msgid "SCSI Fibre Channel"
-msgstr "SCSI 파이버 채널"
+msgstr ""
+"SCSI 파이버 채널"
msgid "No SCSI adapters found."
-msgstr "SCSI 어댑터가 없습니다."
+msgstr ""
+"SCSI 어댑터가 없습니다."
msgid "Loading iSCSI targets..."
msgstr ""
+"iSCSI 대상 로드 중..."
msgid "No iSCSI found. Please input one."
msgstr ""
+"iSCSI가 없습니다. 입력하십시오."
msgid "Failed to load iSCSI targets."
msgstr ""
+"iSCSI 대상을 로드하지 못했습니다."
msgid "The storage pool name can not be blank."
-msgstr "스토리지 풀 이름은 비워둘 수 없습니다."
+msgstr ""
+"스토리지 풀 이름은 비워둘 수 없습니다."
msgid "The storage pool path can not be blank."
-msgstr "스토리지 풀 경로는 비워둘 수 없습니다."
+msgstr ""
+"스토리지 풀 경로는 비워둘 수 없습니다."
msgid "NFS server mount path can not be blank."
-msgstr "NFS 서버 마운트 경로는 비워둘 수 없습니다."
+msgstr ""
+"NFS 서버 마운트 경로는 비워둘 수 없습니다."
msgid "Invalid NFS mount path."
-msgstr "올바르지 않은 NFS 마운트 경로입니다."
+msgstr ""
+"올바르지 않은 NFS 마운트 경로입니다."
msgid "No logical device selected."
-msgstr "논리 장치가 선택되지 않았습니다."
+msgstr ""
+"논리 장치가 선택되지 않았습니다."
msgid "The iSCSI target can not be blank."
-msgstr "iSCSI 대상은 비워둘 수 없습니다."
+msgstr ""
+"iSCSI 대상은 비워둘 수 없습니다."
msgid "Server name can not be blank."
-msgstr "서버 이름은 비워둘 수 없습니다."
+msgstr ""
+"서버 이름은 비워둘 수 없습니다."
msgid "This is not a valid Server Name or IP. Please, modify it."
msgstr ""
+"유효한 서버 이름 또는 IP가 아닙니다. 수정하십시오."
msgid "Looking for available partitions ..."
-msgstr "사용 가능한 파티션을 찾는 중..."
+msgstr ""
+"사용 가능한 파티션을 찾는 중..."
msgid "No available partitions found."
-msgstr "사용 가능한 파티션이 없습니다."
+msgstr ""
+"사용 가능한 파티션이 없습니다."
msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"이 스토리지 풀은 지속적이지 않습니다. 이 조치는 풀을 비활성화하지 않고 영구적"
-"으로 삭제합니다. 계속하시겠습니까?"
+"이 스토리지 풀은 지속적이지 않습니다. 이 조치는 풀을 비활성화하지 않고 "
+"영구적으로 삭제합니다. 계속하시겠습니까?"
msgid "Unable to retrieve partitions information."
-msgstr "저장소 정보를 나열할 수 없습니다. 세부사항: '%(err)s'"
+msgstr ""
+"파티션 정보를 검색할 수 없습니다. "
msgid "In progress..."
msgstr ""
+"처리 중..."
msgid "Failed!"
msgstr ""
+"실패함!"
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
msgstr ""
+"CDROM 경로는 올바른 로컬/원격 경로여야 하며 비워둘 수 없습니다."
msgid "Disk pool or volume cannot be blank."
-msgstr "스토리지 풀 이름은 비워둘 수 없습니다."
+msgstr ""
+"디스크 풀 또는 볼륨은 비워둘 수 없습니다."
msgid "Peers"
msgstr ""
+"피어"
msgid "Searching"
msgstr ""
+"검색 중"
msgid "No peers found."
msgstr ""
+"피어가 없습니다."
msgid "Help"
-msgstr "도움말"
+msgstr ""
+"도움말"
msgid "About"
-msgstr "정보"
+msgstr ""
+"정보"
msgid "Log out"
-msgstr "로그아웃"
+msgstr ""
+"로그아웃"
msgid "Version:"
-msgstr "버전: "
+msgstr ""
+"버전: "
msgid "Session timeout, please re-login."
msgstr ""
+"세션 제한시간이 초과되었습니다. 다시 로그인하십시오."
msgid "User Name"
-msgstr "사용자 이름"
+msgstr ""
+"사용자 이름"
msgid "Password"
-msgstr "비밀번호"
+msgstr ""
+"비밀번호"
msgid "Generate a New Debug Report"
-msgstr "새 디버그 보고서 생성"
+msgstr ""
+"새 디버그 보고서 생성"
msgid "Report Name"
-msgstr "보고서 이름"
+msgstr ""
+"보고서 이름"
msgid ""
"The name used to identify the report. If omitted, a name will be chosen "
"based on current time. Name can contain: letters, digits, underscore (\"_\") "
"and hyphen (\"-\")."
msgstr ""
-"보고서를 식별하는 데 사용되는 이름입니다. 생략되면 이름은 현재 시간을 기반으"
-"로 선택됩니다. 이름은 문자, 숫자 및 하이픈(\"-\")을 포함할 수 있습니다."
+"보고서를 식별하는 데 사용되는 이름입니다. 생략되면 이름은 "
+"현재 시간을 기반으로 선택됩니다. 이름에는 문자, 숫자, 밑줄(\"_\")"
+"및 하이픈(\"-\")을 포함할 수 있습니다."
msgid "Rename a Debug Report"
-msgstr "새 디버그 보고서 생성"
+msgstr ""
+"디버그 보고서 이름 바꾸기"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
"hyphen (\"-\")."
msgstr ""
-"보고서를 식별하는 데 사용되는 이름입니다. 생략되면 이름은 현재 시간을 기반으"
-"로 선택됩니다. 이름은 문자, 숫자 및 하이픈(\"-\")을 포함할 수 있습니다."
+"보고서를 식별하는 데 사용하는 이름입니다. 이름에는 문자, 숫자 및"
+"하이픈(\"-\")을 포함할 수 있습니다."
msgid "Submit"
msgstr ""
+"제출"
msgid "Add a Repository"
-msgstr "저장소 추가"
+msgstr ""
+"저장소 추가"
msgid "Identifier"
-msgstr "ID"
+msgstr ""
+"ID"
msgid "Single word, unique identifier for the repository."
-msgstr "저장소에 대한 단일 단어의 고유 ID입니다."
+msgstr ""
+"저장소에 대한 단일 단어의 고유 ID입니다."
msgid "Textual name for the repository."
-msgstr "저장소에 대한 텍스트 이름입니다."
+msgstr ""
+"저장소에 대한 텍스트 이름입니다."
msgid "URL"
-msgstr "URL"
+msgstr ""
+"URL"
msgid "Required Field"
-msgstr "필수 필드"
+msgstr ""
+"필수 필드"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
-msgstr "저장소에 대한 URL입니다. 지원되는 프로토콜은 http, ftp 및 file입니다."
+msgstr ""
+"저장소에 대한 URL입니다. 지원되는 프로토콜은 http, ftp 및 file입니다."
msgid "Repository is a mirror"
-msgstr "저장소가 미러입니다."
+msgstr ""
+"저장소가 미러입니다."
msgid "Distribution"
-msgstr "배포"
+msgstr ""
+"배포"
msgid "Distribution of the DEB repository."
-msgstr "DEB 저장소의 배포입니다."
+msgstr ""
+"DEB 저장소의 배포입니다."
msgid "Components"
-msgstr "구성요소"
+msgstr ""
+"구성요소"
msgid "List of components in DEB repository."
-msgstr "DEB 저장소의 구성요소 목록입니다."
+msgstr ""
+"DEB 저장소의 구성요소 목록입니다."
msgid "Edit Repository"
-msgstr "저장소 편집"
+msgstr ""
+"저장소 편집"
msgid "Mirror List URL"
-msgstr "미러 목록 URL"
+msgstr ""
+"미러 목록 URL"
msgid "Yes"
-msgstr "예"
+msgstr ""
+"예"
msgid "No"
-msgstr "아니오"
+msgstr ""
+"아니오"
msgid "Add a Volume to Storage Pool"
msgstr ""
+"스토리지 풀에 볼륨 추가"
msgid "Fetch from remote URL"
msgstr ""
+"원격 URL에서 페치"
msgid "Enter the remote URL here."
msgstr ""
+"여기에 원격 URL을 입력하십시오."
msgid "Upload a file"
msgstr ""
+"파일 업로드"
msgid "Choose the file you want to upload."
msgstr ""
+"업로드할 파일을 선택하십시오."
msgid "Define a New Storage Pool"
-msgstr "새 스토리지 풀 정의"
+msgstr ""
+"새 스토리지 풀 정의"
msgid "Storage Pool Name"
-msgstr "스토리지 풀 이름"
+msgstr ""
+"스토리지 풀 이름"
msgid ""
"The name used to identify the storage pools, and it should not be empty."
-msgstr "스토리지 풀을 식별하는 데 사용되는 이름이며 비어 있지 않아야 합니다."
+msgstr ""
+"스토리지 풀을 식별하는 데 사용되는 이름이며 비어 있지 않아야 합니다."
msgid "Storage Pool Type"
-msgstr "스토리지 풀 유형"
+msgstr ""
+"스토리지 풀 유형"
msgid "Storage Path"
-msgstr "스토리지 경로"
+msgstr ""
+"스토리지 경로"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
-msgstr "스토리지 풀의 경로입니다. 각 스토리지 풀은 고유 경로를 가져야 합니다."
+msgstr ""
+"스토리지 풀의 경로입니다. 각 스토리지 풀은 고유 경로를 가져야 합니다."
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
"your system."
msgstr ""
-"디렉토리가 시스템에 이미 존재하지 않으면 Kimchi가 디렉토리 작성을 시도합니다."
+"디렉토리가 시스템에 이미 존재하지 않으면 Kimchi가 디렉토리 작성을 "
+"시도합니다."
msgid "NFS Server IP"
-msgstr "NFS 서버 IP"
+msgstr ""
+"NFS 서버 IP"
msgid "NFS server IP or hostname. It can be input or chosen from history."
msgstr ""
-"NFS 서버 IP 또는 호스트 이름입니다. 이것은 입력하거나 히스토리에서 선택할 수 "
-"있습니다."
+"NFS 서버 IP 또는 호스트 이름입니다. 이것은 입력하거나 히스토리에서 선택할 수 있습니다."
msgid "NFS Path"
-msgstr "NFS 경로"
+msgstr ""
+"NFS 경로"
msgid "The NFS exported path on NFS server."
-msgstr "NFS 서버에서 NFS의 내보낸 경로입니다."
+msgstr ""
+"NFS 서버에서 NFS의 내보낸 경로입니다."
msgid "Device path"
-msgstr "장치 경로"
+msgstr ""
+"장치 경로"
msgid "iSCSI Server"
-msgstr "iSCSI 서버"
+msgstr ""
+"iSCSI 서버"
msgid "iSCSI server IP or hostname. It should not be empty."
-msgstr "iSCSI 서버 IP 또는 호스트 이름입니다. 비어 있지 않아야 합니다."
+msgstr ""
+"iSCSI 서버 IP 또는 호스트 이름입니다. 비어 있지 않아야 합니다."
msgid "Server"
-msgstr "서버"
+msgstr ""
+"서버"
msgid "Port"
-msgstr "포트"
+msgstr ""
+"포트"
msgid "Target"
-msgstr "대상"
+msgstr ""
+"대상"
msgid "The iSCSI target on iSCSI server"
-msgstr "iSCSI 서버의 iSCSI 대상"
+msgstr ""
+"iSCSI 서버의 iSCSI 대상"
msgid "Add iSCSI Authentication"
-msgstr "iSCSI 인증 추가"
+msgstr ""
+"iSCSI 인증 추가"
msgid "iSCSI Authentication"
-msgstr "iSCSI 인증"
+msgstr ""
+"iSCSI 인증"
msgid "SCSI Adapter"
-msgstr "SCSI 어댑터"
+msgstr ""
+"SCSI 어댑터"
msgid "Please, wait..."
-msgstr "잠시 기다려 주십시오."
+msgstr ""
+"잠시 기다려 주십시오."
msgid "Add Template"
-msgstr "템플리트 추가"
+msgstr ""
+"템플리트 추가"
msgid "Where is the source media for this template? "
-msgstr "이 템플리트의 소스 매체는 어디에 있습니까?"
+msgstr ""
+"이 템플리트의 소스 매체는 어디에 있습니까?"
msgid "Local ISO Image"
-msgstr "로컬 ISO 이미지"
+msgstr ""
+"로컬 ISO 이미지"
msgid "Local Image File"
msgstr ""
+"로컬 이미지 파일"
msgid "Remote ISO Image"
-msgstr "원격 ISO 이미지"
+msgstr ""
+"원격 ISO 이미지"
msgid "Search ISOs"
-msgstr "ISO 검색"
+msgstr ""
+"ISO 검색"
msgid "The following ISOs are available:"
-msgstr "다음 ISO가 사용 가능합니다."
+msgstr ""
+"다음 ISO가 사용 가능합니다."
msgid "OS: "
-msgstr "OS: "
+msgstr ""
+"OS: "
msgid "Version: "
-msgstr "버전: "
+msgstr ""
+"버전: "
msgid "Size: "
-msgstr "크기: "
+msgstr ""
+"크기: "
msgid "Search more ISOs"
-msgstr "추가 ISO 검색"
+msgstr ""
+"추가 ISO 검색"
msgid "Create Templates from Selected ISO"
-msgstr "선택한 ISO로부터 템플리트 작성"
+msgstr ""
+"선택한 ISO로부터 템플리트 작성"
msgid "I want to use a specific ISO file"
-msgstr "특정 ISO 파일을 사용하려고 합니다."
+msgstr ""
+"특정 ISO 파일을 사용하려고 합니다."
msgid "Loading default remote ISOs ..."
-msgstr "기본 원격 ISO 로드 중..."
+msgstr ""
+"기본 원격 ISO 로드 중..."
msgid "Arch: "
-msgstr "Arch: "
+msgstr ""
+"Arch: "
msgid "I want to use a custom URL"
-msgstr "사용자 정의 URL을 사용하려고 합니다."
+msgstr ""
+"사용자 정의 URL을 사용하려고 합니다."
msgid "Edit Template"
-msgstr "템플리트 편집"
+msgstr ""
+"템플리트 편집"
msgid "Processor"
-msgstr "프로세서"
+msgstr ""
+"프로세서"
msgid "CDROM"
-msgstr "CDROM"
+msgstr ""
+"CDROM"
msgid "Image File"
msgstr ""
+"이미지 파일"
msgid "Graphics"
-msgstr "그래픽"
+msgstr ""
+"그래픽"
msgid "Disk(GB)"
msgstr ""
+"디스크(GB)"
msgid "Disk Format"
msgstr ""
+"디스크 형식"
msgid "CPU Number"
-msgstr "CPU 번호"
+msgstr ""
+"CPU 번호"
msgid "Manually set CPU topology"
msgstr ""
+"CPU 토폴로지 수동 설정"
msgid "Cores"
msgstr ""
+"코어"
msgid "Threads"
msgstr ""
+"스레드"
msgid "CPU"
-msgstr "CPU"
+msgstr ""
+"CPU"
msgid "Disk I/O"
-msgstr "디스크 I/O"
+msgstr ""
+"디스크 I/O"
msgid "Network I/O"
-msgstr "네트워크 I/O"
+msgstr ""
+"네트워크 I/O"
msgid "Livetile"
-msgstr "라이브타일"
+msgstr ""
+"라이브타일"
msgid "No guests found."
-msgstr "게스트가 없습니다."
+msgstr ""
+"게스트가 없습니다."
msgid "Shut down"
-msgstr "시스템 종료"
+msgstr ""
+"시스템 종료"
msgid "Restart"
-msgstr "다시 시작"
+msgstr ""
+"다시 시작"
msgid "Basic Information"
-msgstr "기본 정보"
+msgstr ""
+"기본 정보"
msgid "OS Distro"
-msgstr "OS Distro"
+msgstr ""
+"OS Distro"
msgid "OS Code Name"
-msgstr "OS 코드 이름"
+msgstr ""
+"OS 코드 이름"
msgid "CPU(s)"
msgstr ""
+"CPU"
msgid "System Statistics"
-msgstr "시스템 통계"
+msgstr ""
+"시스템 통계"
msgid "Update Progress"
-msgstr "진행상태 업데이트"
+msgstr ""
+"진행상태 업데이트"
msgid "Network Name"
-msgstr "네트워크 이름"
+msgstr ""
+"네트워크 이름"
msgid "State"
-msgstr "상태"
+msgstr ""
+"상태"
msgid "Network Type"
-msgstr "네트워크 유형"
+msgstr ""
+"네트워크 유형"
msgid "Address Space"
-msgstr "주소 공간"
+msgstr ""
+"주소 공간"
msgid "Name should not contain '/' and '\"'."
-msgstr "올바르지 않은 스토리지 풀 이름입니다. '/'를 포함하지 않아야 합니다."
+msgstr ""
+"이름에는 '/' 및 '\"'를 포함하지 않아야 합니다."
msgid "Isolated: no external network connection"
-msgstr "격리됨: 물리적 네트워크 연결 없음"
+msgstr ""
+"격리됨: 외부 네트워크 연결 없음"
msgid "NAT: outbound physical network connection only"
-msgstr "NAT: 아웃바운드 물리적 네트워크 연결만"
+msgstr ""
+"NAT: 아웃바운드 물리적 네트워크 연결만"
msgid "Bridged: Virtual machines are connected to physical network directly"
-msgstr "브릿지됨: 가상 머신이 물리적 네트워크에 직접 연결됨"
+msgstr ""
+"브릿지됨: 가상 머신이 물리적 네트워크에 직접 연결됨"
msgid "(No interfaces found)"
msgstr ""
+"(인터페이스를 찾을 수 없음)"
msgid "Destination"
-msgstr "대상:"
+msgstr ""
+"목적지"
msgid "Enable VLAN"
-msgstr "VLAN 사용:"
+msgstr ""
+"VLAN 사용"
msgid "VLAN ID"
-msgstr "VLAN ID:"
+msgstr ""
+"VLAN ID"
msgid "Stop"
-msgstr "중지"
+msgstr ""
+"중지"
msgid "%Used"
msgstr ""
+"%Used"
msgid "Location"
-msgstr "위치"
+msgstr ""
+"위치"
msgid "Capacity"
-msgstr "용량"
+msgstr ""
+"용량"
msgid "Allocated"
-msgstr "할당됨"
+msgstr ""
+"할당됨"
msgid "active"
-msgstr "활성"
+msgstr ""
+"활성"
msgid "inactive"
-msgstr "비활성"
+msgstr ""
+"비활성"
msgid "Deactivate"
-msgstr "비활성화"
+msgstr ""
+"비활성화"
msgid "Activate"
-msgstr "활성화"
+msgstr ""
+"활성화"
msgid "Add Volume"
msgstr ""
+"볼륨 추가"
msgid "Extend"
msgstr ""
+"확장"
msgid "Undefine"
-msgstr "정의 취소"
+msgstr ""
+"정의 취소"
msgid "Format"
-msgstr "포맷:"
+msgstr ""
+"형식"
msgid "Allocation"
-msgstr "할당:"
+msgstr ""
+"할당"
msgid "No templates found."
-msgstr "템플리트가 없습니다."
+msgstr ""
+"템플리트가 없습니다."
+
+# ENGL1SH_VERS10N 28617_40 DO NOT REMOVE OR CHANGE THIS LINE
+# T9N_SRC_ID 92
+# T9N_SH1P_STR1NG KV310AAP001 1
diff --git a/po/ru_RU.po b/po/ru_RU.po
index 5c17518..b2d4586 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -1,123 +1,149 @@
# English translations for kimchi package.
# Copyright (C) 2013 ORGANIZATION
+# Adam Litke <agl(a)us.ibm.com>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-06-24 09:39-0300\n"
-"PO-Revision-Date: 2014-08-28 17:32+0000\n"
-"Last-Translator: Aline Manera <aline.manera(a)gmail.com>\n"
-"Language-Team: Russian (http://www.transifex.com/projects/p/kimchi/language/"
-"ru/)\n"
-"Language: ru_RU\n"
+"PO-Revision-Date: 2013-07-11 17:32-0400\n"
+"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
+"Language-Team: English\n"
+"Language: en_US\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"
#, python-format
msgid "Unknown parameter %(value)s"
msgstr ""
+"Неизвестный параметр %(value)s"
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr "Удаление запрещено для %(resource)s"
+msgstr ""
+"Удаление запрещено для %(resource)s"
#, python-format
msgid "%(resource)s does not implement update method"
-msgstr "%(resource)s не реализуют метод обновления"
+msgstr ""
+"%(resource)s не имеет реализации метода обновления"
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr "Создание запрещено для %(resource)s"
+msgstr ""
+"Создание запрещено для %(resource)s"
msgid "Unable to parse JSON request"
-msgstr "Ошибка анализа запроса JSON"
+msgstr ""
+"Ошибка анализа запроса JSON"
msgid "This API only supports JSON"
-msgstr "Эта функция API поддерживает только JSON"
+msgstr ""
+"Эта функция API поддерживает только JSON"
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
msgstr ""
+"Параметры не соответствуют требованиям схемы: %(err)s"
msgid "You don't have permission to perform this operation."
msgstr ""
+"Недостаточно прав доступа для выполнения этой операции."
msgid "Datastore is not initiated in the model object."
-msgstr "Хранилище данных в объекте модели не инициализировано."
+msgstr ""
+"Хранилище данных в объекте модели не инициализировано."
#, python-format
msgid "Unable to start task due error: %(err)s"
-msgstr "Не удалось запустить задачу из-за ошибки %(err)s"
+msgstr ""
+"Не удалось запустить задачу из-за ошибки: %(err)s"
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
msgstr ""
+"Во время выполнения задачи %(task)s истек тайм-аут (%(seconds)s с)."
#, python-format
msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
-msgstr "Сбой идентификации пользователя %(username)s. [Код ошибки: %(code)s]"
+msgstr ""
+"Сбой идентификации для пользователя %(username)s. [Код ошибки: %(code)s]"
msgid "You are not authorized to access Kimchi"
-msgstr "Нет прав доступа к Kimchi"
+msgstr ""
+"Нет прав доступа к Kimchi"
#, python-format
msgid "Specify %(item)s to login into Kimchi"
-msgstr "Укажите %(item)s для входа в Kimchi"
+msgstr ""
+"Укажите %(item)s для входа в Kimchi"
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
msgstr ""
+"Пользователь %(user_id)s не найден с указанными параметрами LDAP."
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
msgstr ""
+"Недопустимая конфигурация LDAP: %(item)s : %(value)s"
msgid "Unknown \"_cap\" specified"
msgstr ""
+"Указано неизвестное значение \"_cap\""
msgid "\"_passthrough\" should be \"true\" or \"false\""
msgstr ""
+"Значение \"_passthrough\" должно быть \"true\" или \"false\""
msgid "\"_passthrough_affected_by\" should be a device name string"
msgstr ""
+"Значение \"_passthrough_affected_by\" должно быть строкой с именем устройства"
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
-msgstr "Ошибка получения блочных устройств. Сведения: %(err)s"
+msgstr ""
+"Ошибка получения блочных устройств. Сведения: %(err)s"
#, python-format
msgid "Error while getting block device information for %(device)s."
-msgstr "Ошибка получения информации о блочных устройствах для %(device)s."
+msgstr ""
+"Ошибка получения информации о блочных устройствах для %(device)s."
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr "Не найден файл варианта ОС: %(filename)s"
+msgstr ""
+"Не найден файл варианта ОС: %(filename)s"
#, python-format
msgid ""
"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
msgstr ""
-"Ошибка анализа файла варианта ОС %(filename)s. Убедитесь, что это файл JSON."
+"Ошибка анализа файла варианта ОС: %(filename)s. Убедитесь, что это файл JSON."
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
-msgstr "Не удалось войти в целевой %(portal)s хоста iSCSI. Сведения: %(err)s"
+msgstr ""
+"Не удалось войти в целевой %(portal)s хоста iSCSI. Сведения: %(err)s"
#, python-format
msgid "Unable to login to iSCSI host %(host)s target %(target)s"
-msgstr "Не удалось войти в целевой %(target)s хоста iSCSI %(host)s"
+msgstr ""
+"Не удалось войти в целевой %(target)s хоста %(host)s iSCSI"
#, python-format
msgid "Unable to find ISO file %(filename)s"
msgstr ""
+"Не найден файл ISO %(filename)s"
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr "Файл ISO %(filename)s не загрузочный"
+msgstr ""
+"Файл ISO %(filename)s не загрузочный"
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
@@ -126,19 +152,23 @@ msgstr ""
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
-msgstr "Недопустимая запись проверки El Torito в образе ISO %(filename)s"
+msgstr ""
+"Недопустимая запись проверки El Torito в образе ISO %(filename)s"
#, python-format
msgid "Invalid El Torito boot indicator in ISO %(filename)s"
-msgstr "Недопустимый индикатор загрузки El Torito в образе ISO %(filename)s"
+msgstr ""
+"Недопустимый индикатор загрузки El Torito в образе ISO %(filename)s"
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
-msgstr "Неожиданный тип тома для главного тома в образе ISO %(filename)s"
+msgstr ""
+"Неожиданный тип главного тома в образе ISO %(filename)s"
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
-msgstr "Неверный формат дескриптора тома в образе ISO %(filename)s"
+msgstr ""
+"Неверный формат дескриптора тома в образе ISO %(filename)s"
#, python-format
msgid ""
@@ -148,214 +178,265 @@ msgid ""
"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
"'path_to_iso'.Details: %(err)s"
msgstr ""
-"У гипервизора нет прав доступа для использования этого образа ISO "
-"%(filename)s. Переместите его в каталог /var/lib/libvirt, добавьте "
-"разрешение на поиск в списки контроля доступа для пользователя %(user)s, "
-"если это возможно, добавьте %(user)s в группу пути к образу ISO или (не "
-"рекомендуется) выполните команду 'chmod -R o+x 'path_to_iso'. Сведения: "
-"%(err)s"
+"У гипервизора нет прав доступа для использования этого образа ISO %(filename)s."
+"Переместите его в каталог /var/lib/libvirt, добавьте разрешение на поиск "
+"в списки контроля доступа для пользователя %(user)s, если это возможно, добавьте "
+"%(user)s в группу пути к образу ISO или (не рекомендуется) выполните команду 'chmod -R o+x"
+"путь-к-iso'. Сведения: %(err)s"
msgid "An error occurred when probing image OS information."
msgstr ""
+"Ошибка проверки информации об ОС образа."
msgid "No OS information found in given image."
msgstr ""
+"В данном образе не найдена информация об ОС."
#, python-format
msgid "Unable to read image file %(filename)s"
msgstr ""
+"Не удалось прочитать файл образа %(filename)s"
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
msgstr ""
+"Файл образа должен существовать в системе. Имя файла %(filename)s не является допустимым "
+"вводом."
#, python-format
msgid "Virtual machine %(name)s already exists"
-msgstr "Виртуальная машина %(name)s уже существует"
+msgstr ""
+"Виртуальная машина %(name)s уже существует"
#, python-format
msgid "Virtual machine %(name)s does not exist"
-msgstr "Виртуальная машина %(name)s не существует"
+msgstr ""
+"Виртуальная машина %(name)s не существует"
#, python-format
msgid ""
"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
"in use or the virtual machine is not powered off."
msgstr ""
+"Не удалось переименовать виртуальную машину %(name)s. Имя %(new_name)s уже "
+"занято, или виртуальная машина не выключена."
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
msgstr ""
-"Не удалось получить снимок экрана для остановленной виртуальной машины "
-"%(name)s"
+"Не удалось получить снимок экрана для остановленной виртуальной машины %(name)s"
msgid "Remote ISO image is not supported by this server."
-msgstr "Удаленный образ ISO не поддерживается этим сервером."
+msgstr ""
+"Удаленный образ ISO не поддерживается этим сервером."
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
msgstr ""
+"Снимки экрана не поддерживаются в виртуальной машине %(name)s"
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
-msgstr "Не удалось создать виртуальную машину %(name)s. Сведения: %(err)s"
+msgstr ""
+"Не удалось создать виртуальную машину %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
-msgstr "Не удалось создать виртуальную машину %(name)s. Сведения: %(err)s"
+msgstr ""
+"Не удалось обновить виртуальную машину %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
-msgstr "Не удалось получить виртуальную машину %(name)s. Сведения: %(err)s"
+msgstr ""
+"Не удалось получить виртуальную машину %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to connect to powered off virtual machine %(name)s."
msgstr ""
+"Не удалось подключиться к выключенной виртуальной машине %(name)s."
msgid "Virtual machine name must be a string without slashes (/)"
msgstr ""
+"Имя виртуальной машины должно быть строкой без символов косой черты (/)"
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
msgstr ""
+"Для виртуальной машины указан недопустимый URI шаблона %(value)s"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for virtual machine"
msgstr ""
+"Для виртуальной машины указан недопустимый URI пула памяти %(value)s"
msgid "Supported virtual machine graphics are Spice or VNC"
msgstr ""
+"Поддерживаемые графические подсистемы виртуальной машины: Spice, VNC"
msgid "Graphics address to listen on must be IPv4 or IPv6"
msgstr ""
"Адрес приема запросов для графической подсистемы должен быть IPv4 или IPv6"
msgid "Specify a template to create a virtual machine from"
-msgstr "Укажите шаблон для создания виртуальной машины"
+msgstr ""
+"Укажите шаблон для создания виртуальной машины"
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
-msgstr "Не удалось запустить виртуальную машину %(name)s. Сведения: %(err)s"
+msgstr ""
+"Не удалось запустить виртуальную машину %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
-msgstr "Не удалось остановить виртуальную машину %(name)s. Сведения: %(err)s"
+msgstr ""
+"Не удалось выключить виртуальную машину %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
-msgstr "Не удалось удалить виртуальную машину %(name)s. Сведения: %(err)s"
+msgstr ""
+"Не удалось удалить виртуальную машину %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
msgstr ""
-"Не удалось переименовать виртуальную машину %(name)s. Сведения: %(err)s"
+"Не удалось сбросить виртуальную машину %(name)s. Сведения: %(err)s"
msgid "User name list must be an array"
msgstr ""
+"Список имен пользователей должен быть массивом"
msgid "User name must be a string"
-msgstr "Имя сети должно быть строкой"
+msgstr ""
+"Имя пользователя должно быть строкой"
msgid "Group name list must be an array"
msgstr ""
+"Список имен групп должен быть массивом"
msgid "Group name must be a string"
-msgstr "Имя сети должно быть строкой"
+msgstr ""
+"Имя группы должно быть строкой"
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr "Пользователь %(users)s не существует."
+msgstr ""
+"Следующие пользователи не существуют: %(users)s"
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr "Пользователь %(groups)s не существует."
+msgstr ""
+"Следующие группы не существуют: %(groups)s"
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
-msgstr "Не удалось остановить виртуальную машину %(name)s. Сведения: %(err)s"
+msgstr ""
+"Не удалось завершить работу виртуальной машины %(name)s. Сведения: %(err)s"
#, python-format
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr "Не удалось запустить виртуальную машину %(name)s. Сведения: %(err)s"
+msgstr ""
+"Не удалось получить доступ к метаданным виртуальной машины %(name)s. Сведения: %(err)s"
msgid "The guest console password must be a string."
msgstr ""
+"Пароль консоли гостевой системы должен быть строкой."
msgid "The life time for the guest console password must be a number."
msgstr ""
+"Срок действия пароля консоли гостевой системы должен быть числом."
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
msgstr ""
+"Виртуальную машину '%(name)s' необходимо остановить перед созданием ее копии."
#, python-format
msgid "Insufficient disk space to clone virtual machine '%(name)s'"
msgstr ""
+"Недостаточно дисковой памяти для дублирования виртуальной машины '%(name)s'"
#, python-format
msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
msgstr ""
+"Не удалось дублировать виртуальную машину '%(name)s'. Сведения: %(err)s"
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
msgstr ""
+"Недопустимая операция для непостоянной виртуальной машины %(name)s"
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
msgstr ""
+"Невозможно приостановить виртуальную машину '%(name)s', поскольку она не работает."
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
msgstr ""
+"Не удалось приостановить виртуальную машину '%(name)s'. Сведения: %(err)s"
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
msgstr ""
+"Невозможно возобновить выполнение виртуальной машины '%(name)s', поскольку она не приостановлена."
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
msgstr ""
+"Не удалось возобновить выполнение виртуальной машины '%(name)s'. Сведения: %(err)s"
msgid "Memory assigned is higher then the maximum allowed in the host."
msgstr ""
+"Присвоенный объем памяти превышает максимально разрешенный объем на хосте."
#, python-format
msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
+"Виртуальная машина '%(name)s' не поддерживает оперативное изменение объема памяти. Измените объем памяти, "
+"когда машина отключена, чтобы включить эту функцию."
msgid "Only increase memory is allowed in active VMs"
msgstr ""
+"В активных виртуальных машинах объем памяти можно только увеличивать"
msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
msgstr ""
+"Для оперативного изменения объема памяти новое значение объема памяти должно быть равно текущему объему памяти плюс "
+"величина, кратная 1024 МиБ"
msgid "There are not enough free slots of 1024 Mib in the guest."
msgstr ""
+"Недостаточно свободных разъемов размером 1024 МиБ в гостевой системе."
msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
msgstr ""
+"Версия библиотеки libvirt хоста не поддерживает устройства памяти. Версия библиотеки libvirt должна быть >= "
+"1.2.14"
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
msgstr ""
+"Ошибка подключения устройства памяти. Сведения: %(error)s"
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
+"Виртуальная машина %(vmid)s не содержит непосредственно присвоенного устройства хоста %(dev_name)s."
#, python-format
msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
msgstr ""
+"Прямое присвоение виртуальной машине недопустимо для хоста %(dev_name)s."
msgid ""
"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
@@ -364,19 +445,28 @@ msgid ""
"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
"iommu=1."
msgstr ""
+"Не найдены группы IOMMU. Для правильного функционирования сквозной передачи PCI хоста требуется группа IOMMU. "
+"В BIOS включите поддержку Intel VT-d или AMD IOMMU и проверьте, "
+"скомпилировано ли ядро ОС с поддержкой IOMMU. Для процессора Intel добавьте intel_iommu=on "
+"в параметры ядра в файле /boot/grub2/grub.conf. Для процессора AMD добавьте iommu=pt "
+"iommu=1."
msgid "\"name\" should be a device name string"
msgstr ""
+"Значение \"name\" должно быть строкой с именем устройства"
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
msgstr ""
+"Возможно, устройство %(name)s используется хостом. Его невозможно подключить к "
+"гостевой системе."
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
-msgstr "Интерфейс %(iface)s не существует в виртуальной машине %(name)s"
+msgstr ""
+"Интерфейс %(iface)s не существует в виртуальной машине %(name)s"
#, python-format
msgid ""
@@ -385,247 +475,309 @@ msgstr ""
"Сеть %(network)s, указанная для виртуальной машины %(name)s, не существует"
msgid "Supported virtual machine interfaces type is only network"
-msgstr "Поддерживается только один тип интерфейсов виртуальной машины - сеть"
+msgstr ""
+"Поддерживается только один тип интерфейсов виртуальной машины - сеть"
msgid "Network name for virtual machine interface must be a string"
-msgstr "Имя сети для интерфейса виртуальной машины должно быть строкой"
+msgstr ""
+"Имя сети для интерфейса виртуальной машины должно быть строкой"
msgid "Invalid network model card specified for virtual machine interface"
msgstr ""
"Указана недопустимая карта модели сети для интерфейса виртуальной машины"
msgid "Specify type and network to add a new virtual machine interface"
-msgstr "Укажите тип и сеть для добавления нового интерфейса виртуальной машины"
+msgstr ""
+"Укажите тип и сеть для добавления нового интерфейса виртуальной машины"
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
msgstr ""
+"MAC-адрес должен иметь формат FF:FF:FF:FF:FF:FF"
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
msgstr ""
+"MAC-адрес %(mac)s уже существует в виртуальной машине %(name)s"
msgid "Invalid MAC Address"
msgstr ""
+"Недопустимый MAC-адрес"
msgid "Cannot change MAC address of a running virtual machine"
msgstr ""
+"Нельзя изменить MAC-адрес работающей виртуальной машины"
#, python-format
msgid "Template %(name)s already exists"
-msgstr "Шаблон %(name)s уже существует"
+msgstr ""
+"Шаблон %(name)s уже существует"
#, python-format
msgid ""
"Network '%(network)s' specified for template %(template)s does not exist"
-msgstr "Сеть %(network)s, указанная для шаблона %(template)s, не существует"
+msgstr ""
+"Сеть '%(network)s', указанная для шаблона %(template)s, не существует"
#, python-format
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
-msgstr "Пул памяти %(pool)s, указанный для шаблона %(template)s, не существует"
+msgstr ""
+"Пул памяти %(pool)s, указанный для шаблона %(template)s, не существует"
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
-msgstr "Пул памяти %(pool)s, указанный для шаблона %(template)s, не активен"
+msgstr ""
+"Пул памяти %(pool)s, указанный для шаблона %(template)s, неактивен"
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr "Указан недопустимый параметр %(param)s для CDROM."
+msgstr ""
+"Указан недопустимый параметр %(param)s для CDROM."
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
-msgstr "Сеть %(network)s, указанная для шаблона %(template)s, не активна"
+msgstr ""
+"Сеть %(network)s, указанная для шаблона %(template)s, неактивна"
msgid "Template name must be a string"
-msgstr "Имя шаблона должно быть строкой"
+msgstr ""
+"Имя шаблона должно быть строкой"
msgid "Template icon must be a path to the image"
-msgstr "Значок шаблона должен быть путем к образу"
+msgstr ""
+"Значок шаблона должен быть путем к образу"
msgid "Template distribution must be a string"
-msgstr "Вариант шаблона должен быть строкой"
+msgstr ""
+"Вариант шаблона должен быть строкой"
msgid "Template distribution version must be a string"
-msgstr "Версия варианта шаблона должна быть строкой"
+msgstr ""
+"Версия варианта шаблона должна быть строкой"
msgid "The number of CPUs must be an integer greater than 0"
-msgstr "Число процессоров должно быть целым числом"
+msgstr ""
+"Число процессоров должно быть целым числом, большим 0"
msgid "Amount of memory (MB) must be an integer greater than 512"
-msgstr "Объем памяти (МБ) должен быть целым числом больше 512"
+msgstr ""
+"Объем памяти (МБ) должен быть целым числом больше 512"
msgid "Template CDROM must be a local or remote ISO file"
-msgstr "CDROM шаблона должен быть локальным или удаленным файлом ISO"
+msgstr ""
+"CDROM шаблона должен быть локальным или удаленным файлом ISO"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for template"
-msgstr "Для шаблона указан недопустимый URI пула памяти %(value)s"
+msgstr ""
+"Для шаблона указан недопустимый URI пула памяти %(value)s"
msgid "Specify an ISO image as CDROM or a base image to create a template"
-msgstr "Укажите образ ISO в качестве CDROM для создания шаблона"
+msgstr ""
+"Укажите образ ISO в качестве CDROM или базового образа для создания шаблона"
msgid "All networks for the template must be specified in a list."
-msgstr "Все сети для шаблона должны быть указаны в списке."
+msgstr ""
+"Все сети для шаблона должны быть указаны в списке."
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
msgstr ""
+"Укажите том для шаблона, когда пул памяти - iSCSI или SCSI"
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
msgstr ""
+"Том %(volume)s отсутствует в пуле памяти %(pool)s"
#, python-format
msgid "Unable to create template due error: %(err)s"
-msgstr "Не удалось создать шаблон из-за ошибки %(err)s"
+msgstr ""
+"Не удалось создать шаблон из-за следующей ошибки: %(err)s"
#, python-format
msgid "Unable to delete template due error: %(err)s"
-msgstr "Не удалось удалить шаблон из-за ошибки %(err)s"
+msgstr ""
+"Не удалось удалить шаблон из-за следующей ошибки: %(err)s"
msgid "Disk size must be an integer greater than 1GB."
msgstr ""
+"Размер диска должен быть целым числом больше 1 ГБ."
msgid "Template base image must be a valid local image file"
-msgstr "CDROM шаблона должен быть локальным или удаленным файлом ISO"
+msgstr ""
+"Базовый образ шаблона должен быть правильным локальным файлом образа"
#, python-format
msgid "Cannot identify base image %(path)s format"
msgstr ""
+"Не удалось идентифицировать формат %(path)s базового образа"
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
msgstr ""
+"При указании топологии процессоров количество виртуальных процессоров должно быть произведением числа сокетов, ядер и "
+"нитей."
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
"zero."
msgstr ""
+"При указании топологии процессоров каждый элемент должен быть целым числом больше "
+"нуля."
msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
+"Недопустимый формат образа диска. Допустимые форматы: bochs, cloop, cow, dmg, qcow, "
+"qcow2, qed, raw, vmdk, vpc."
#, python-format
msgid "Storage pool %(name)s already exists"
-msgstr "Пул памяти %(name)s уже существует"
+msgstr ""
+"Пул памяти %(name)s уже существует"
#, python-format
msgid "Storage pool %(name)s does not exist"
-msgstr "Пул памяти %(name)s не существует"
+msgstr ""
+"Пул памяти %(name)s не существует"
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
-msgstr "Укажите %(item)s для создания пула памяти %(name)s"
+msgstr ""
+"Укажите %(item)s, чтобы создать пул памяти %(name)s"
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr "Не удалось удалить активный пул памяти %(name)s"
+msgstr ""
+"Не удалось удалить пул памяти %(name)s"
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
-msgstr "Не удалось вывести список пулов памяти. Сведения: %(err)s"
+msgstr ""
+"Не удалось вывести список пулов памяти. Сведения: %(err)s"
#, python-format
msgid "Unable to create storage pool %(name)s. Details: %(err)s"
-msgstr "Не удалось создать пул памяти %(name)s. Сведения: %(err)s"
+msgstr ""
+"Не удалось создать пул памяти %(name)s. Сведения: %(err)s"
#, python-format
msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
msgstr ""
-"Не удалось получить число томов в пуле памяти %(name)s. Сведения: %(err)s"
+"Не удалось получить число томов в пуле памяти %(name)s. Сведения: "
+"%(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
-msgstr "Не удалось активировать пул памяти %(name)s. Сведения: %(err)s"
+msgstr ""
+"Не удалось активировать пул памяти %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
-msgstr "Не удалось деактивировать пул памяти %(name)s. Сведения: %(err)s"
+msgstr ""
+"Не удалось деактивировать пул памяти %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
-msgstr "Не удалось удалить пул памяти %(name)s. Сведения: %(err)s"
+msgstr ""
+"Не удалось удалить пул памяти %(name)s. Сведения: %(err)s"
#, python-format
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
msgstr ""
-"Не удалось создать пул NFS: экспортированный путь %(path)s мог быть "
-"заблокирован во время монтирования"
+"Не удалось создать пул NFS: экспортированный путь %(path)s мог быть заблокирован во время монтирования"
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
msgstr ""
-"Не удалось создать пул NFS: не удалось смонтировать экспортированный путь "
-"%(path)s"
+"Не удалось создать пул NFS: не удалось смонтировать экспортированный путь %(path)s"
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr "Неподдерживаемый тип пула памяти: %(type)s"
+msgstr ""
+"Неподдерживаемый тип пула памяти: %(type)s"
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
msgstr ""
+"Ошибка получения XML пула памяти для %(pool)s"
msgid "Storage pool name must be a string without slashes (/)"
msgstr ""
+"Имя пула памяти должно быть строкой без символов косой черты (/)"
msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
"iso"
msgstr ""
+"Поддерживаемые типы пулов памяти: dir, netfs, logical, iscsi, isci и kimchi-"
+"iso"
msgid "Storage pool path must be a string"
-msgstr "Путь к пулу памяти должен быть строкой"
+msgstr ""
+"Путь к пулу памяти должен быть строкой"
msgid "Storage pool host must be a IP or hostname"
-msgstr "Хост пула памяти должен быть IP-адресом или именем хоста"
+msgstr ""
+"Хост пула памяти должен быть IP-адресом или именем хоста"
msgid "Storage pool device must be the absolute path to the block device"
msgstr ""
+"Устройство пула памяти должно быть абсолютным путем к блочному устройству"
msgid "Storage pool devices parameter must be a list"
-msgstr "Параметр устройств пула памяти должен быть списком"
+msgstr ""
+"Параметр устройств пула памяти должен быть списком"
msgid "Target IQN of an iSCSI pool must be a string"
-msgstr "Целевой IQN пула iSCSI должен быть строкой"
+msgstr ""
+"Целевой IQN пула iSCSI должен быть строкой"
msgid "Port of a remote storage server must be an integer between 1 and 65535"
-msgstr "Порт удаленного сервера памяти должен быть целым числом от 1 до 65535"
+msgstr ""
+"Порт удаленного сервера памяти должен быть целым числом от 1 до 65535"
msgid "iSCSI target username must be a string"
msgstr ""
+"Имя пользователя целевого объекта iSCSI должно быть строкой"
msgid "iSCSI target password must be a string"
msgstr ""
+"Пароль целевого объекта iSCSI должен быть строкой"
msgid "Specify name and type to create a storage pool"
-msgstr "Укажите имя и тип для создания пула памяти"
+msgstr ""
+"Укажите имя и тип для создания пула памяти"
#, python-format
msgid ""
"%(disk)s is not a valid disk/partition. Could not add it to the pool "
"%(pool)s."
msgstr ""
-"%(disk)s не является допустимым диском/разделом. Не удалось добавить его в "
-"пул %(pool)s."
+"%(disk)s не является допустимым диском/разделом. Его не удалось добавить в пул "
+"%(pool)s."
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
msgstr ""
+"Не удалось расширить логический пул %(pool)s. Сведения: %(err)s"
msgid "The parameter disks only can be updated for logical storage pool."
-msgstr "Диски параметров можно обновлять только для логического пула памяти."
+msgstr ""
+"Диски параметров можно обновлять только для логического пула памяти."
msgid "The SCSI host adapter name must be a string."
-msgstr "Имя адаптера хоста SCSI должно быть строкой."
+msgstr ""
+"Имя адаптера хоста SCSI должно быть строкой."
msgid "The storage pool kimchi_isos is reserved for internal use"
-msgstr "kimchi_isos пула памяти зарезервирован для внутреннего использования"
+msgstr ""
+"kimchi_isos пула памяти зарезервирован для внутреннего использования"
#, python-format
msgid ""
@@ -647,158 +799,191 @@ msgstr ""
msgid ""
"Unable to deactivate pool %(name)s as it is associated with some templates"
msgstr ""
-"Не удалось деактивировать пул %(name)s: пул связан с некоторыми шаблонами"
+"Не удалось деактивировать пул %(name)s: пул связан с шаблонами"
#, python-format
msgid "Unable to delete pool %(name)s as it is associated with some templates"
-msgstr "Не удалось удалить пул %(name)s: пул связан с некоторыми шаблонами"
+msgstr ""
+"Не удалось удалить пул %(name)s: пул связан с шаблонами"
#, python-format
msgid ""
"A volume group named '%(name)s' already exists. Please, choose another name "
"to create the logical pool."
msgstr ""
-"Группа томов с именем %(name)s уже существует. Выберите другое имя для "
-"создания логического пула."
+"Группа томов с именем '%(name)s' уже существует. Выберите другое имя "
+"для создания логического пула."
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
msgstr ""
-"Не удалось обновить базу данных с информацией глубокого сканирования из-за "
-"ошибки %(err)s"
+"Не удалось обновить базу данных информацией глубокого сканирования из-за следующей ошибки: %(err)s"
#, python-format
msgid "Storage volume %(name)s already exists"
-msgstr "Том %(name)s уже существует"
+msgstr ""
+"Том памяти %(name)s уже существует"
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
-msgstr "Том %(name)s не существует в пуле памяти %(pool)s"
+msgstr ""
+"Том памяти %(name)s не существует в пуле памяти %(pool)s"
#, python-format
msgid ""
"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
"not active"
msgstr ""
+"Не удалось создать том памяти %(volume)s, поскольку пул памяти %(pool)s "
+"неактивен"
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
-msgstr "Укажите %(item)s для создания тома %(volume)s"
+msgstr ""
+"Укажите %(item)s, чтобы создать том памяти %(volume)s"
#, python-format
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
-msgstr "Не удалось вывести список томов: пул памяти %(pool)s не активен"
+msgstr ""
+"Не удалось вывести список томов: пул памяти %(pool)s неактивен"
#, python-format
msgid ""
"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
"%(err)s"
msgstr ""
-"Не удалось создать том %(name)s в пуле памяти %(pool)s. Сведения: %(err)s"
+"Не удалось создать том памяти %(name)s в пуле памяти %(pool)s. Сведения: "
+"%(err)s"
#, python-format
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
msgstr ""
-"Не удалось вывести список томов в пуле памяти %(pool)s. Сведения: %(err)s"
+"Не удалось вывести список томов памяти в пуле памяти %(pool)s. Сведения: %(err)s"
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
-msgstr "Не удалось стереть тома %(name)s. Сведения: %(err)s"
+msgstr ""
+"Не удалось стереть тома памяти %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
-msgstr "Не удалось удалить том %(name)s. Сведения: %(err)s"
+msgstr ""
+"Не удалось удалить том памяти %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
-msgstr "Не удалось изменить размер тома %(name)s. Сведения: %(err)s"
+msgstr ""
+"Не удалось изменить размер тома памяти %(name)s. Сведения: %(err)s"
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
-msgstr "Тип памяти %(type)s не поддерживает создание и удаление томов"
+msgstr ""
+"Тип памяти %(type)s не поддерживает создание и удаление томов"
msgid "Storage volume name must be a string"
-msgstr "Имя тома должно быть строкой"
+msgstr ""
+"Имя тома должно быть строкой"
msgid "Storage volume allocation must be an integer number"
-msgstr "Выделение тома должно быть целым числом"
+msgstr ""
+"Выделение тома должно быть целым числом"
msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
+"Формат тома памяти не поддерживается. Допустимые форматы: bochs, cloop, cow, dmg, "
+"qcow, qcow2, qed, raw, vmdk, vpc."
msgid "Storage volume requires a volume name"
-msgstr "Тому требуется имя"
+msgstr ""
+"Тому требуется имя"
#, python-format
msgid ""
"Unable to update database with storage volume information due error: %(err)s"
msgstr ""
-"Не удалось обновить базу данных с информацией о томах из-за ошибки %(err)s"
+"Не удалось обновить базу данных информацией о томах памяти из-за следующей ошибки: %(err)s"
#, python-format
msgid "Only one of parameter %(param)s can be specified"
msgstr ""
+"Можно указать только один параметр %(param)s"
#, python-format
msgid "Create volume from %(param)s is not supported"
msgstr ""
+"Создание тома из %(param)s не поддерживается"
msgid "Storage volume capacity must be an integer number."
msgstr ""
+"Емкость тома памяти должна быть целым числом."
msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
msgstr ""
+"URL тома памяти должен быть http://, https://, ftp:// или ftps://."
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
msgstr ""
+"Нет доступа к файлу %(url)s. Проверьте его."
#, python-format
msgid ""
"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
"%(err)s"
msgstr ""
+"Не удалось дублировать том памяти '%(name)s' в пуле '%(pool)s'. Сведения: "
+"%(err)s"
msgid "Specify chunk data and its size to upload a file."
msgstr ""
+"Укажите данные блока и его размер для передачи файла."
msgid "In order to upload a storage volume, specify the 'upload' parameter."
msgstr ""
+"Для передачи тома памяти укажите параметр upload."
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
msgstr ""
+"Не удалось передать данные блока, поскольку они не соответствуют запрошенному размеру блока."
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
msgstr ""
+"Том памяти %(vol)s не находится в процессе передачи."
msgid "The upload chunk data will exceed the storage volume size."
msgstr ""
+"Данные блока передачи превысят размер тома памяти."
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
msgstr ""
+"Не удалось передать данные блока передачи в том памяти. Сведения: %(err)s."
#, python-format
msgid "Interface %(name)s does not exist"
-msgstr "Интерфейс %(name)s не существует"
+msgstr ""
+"Интерфейс %(name)s не существует"
#, python-format
msgid "Network %(name)s already exists"
-msgstr "Сеть %(name)s уже существует"
+msgstr ""
+"Сеть %(name)s уже существует"
#, python-format
msgid "Network %(name)s does not exist"
-msgstr "Сеть %(name)s не существует"
+msgstr ""
+"Сеть %(name)s не существует"
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
-msgstr "Подсеть %(subnet)s, указанная для сети %(network)s, недопустима."
+msgstr ""
+"Подсеть %(subnet)s, указанная для сети %(network)s, недопустима."
#, python-format
msgid "Specify a network interface to create bridged network %(name)s"
@@ -807,59 +992,72 @@ msgstr ""
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr "Не удалось удалить активную сеть %(name)s"
+msgstr ""
+"Не удалось удалить активную сеть %(name)s"
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
-msgstr "Интерфейс %(iface)s, указанный для сети %(network)s, уже используется"
+msgstr ""
+"Интерфейс %(iface)s, указанный для сети %(network)s, уже используется"
msgid "Interface should be bare NIC, bonding or bridge device."
msgstr ""
-"Интерфейс должен быть сетевой картой, устройством моста или связующим "
-"устройством."
+"Интерфейс должен быть сетевой картой, устройством моста или связующим устройством."
#, python-format
msgid "Unable to create network %(name)s. Details: %(err)s"
-msgstr "Не удалось создать сеть %(name)s. Сведения: %(err)s"
+msgstr ""
+"Не удалось создать сеть %(name)s. Сведения: %(err)s"
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
-msgstr "Не найден свободный IP-адрес для сети %(name)s"
+msgstr ""
+"Не найден свободный IP-адрес для сети %(name)s"
#, python-format
msgid "The interface %(iface)s already exists."
msgstr ""
+"Интерфейс %(iface)s уже существует."
msgid "Network name must be a string without slashes (/) or quotes (\")"
msgstr ""
+"Имя сети должно быть строкой без символов косой черты (/) и кавычек (\")"
msgid "Supported network types are isolated, NAT and bridge"
-msgstr "Поддерживаемые типы сетей: isolated, NAT и bridge"
+msgstr ""
+"Поддерживаемые типы сетей: isolated, NAT и bridge"
msgid "Network subnet must be a string with IP address and prefix or netmask"
msgstr ""
"Подсеть сети должна быть строкой, содержащей IP-адрес, префикс или маску сети"
msgid "Network interface must be a string"
-msgstr "Сетевой интерфейс должен быть строкой"
+msgstr ""
+"Сетевой интерфейс должен быть строкой"
msgid "Network VLAN ID must be an integer between 1 and 4094"
-msgstr "Сетевой ИД VLAN должен быть целым числом от 1 до 4094"
+msgstr ""
+"Сетевой ИД VLAN должен быть целым числом от 1 до 4094"
msgid "Specify name and type to create a Network"
-msgstr "Укажите имя и тип для создания сети"
+msgstr ""
+"Укажите имя и тип для создания сети"
#, python-format
msgid ""
"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
"and/or templates linked to this network."
msgstr ""
+"Не удалось удалить сеть %(name)s. Есть виртуальные машины %(vms)s "
+"или шаблоны, связанные с данной сетью."
#, python-format
msgid ""
"Unable to deactivate network %(name)s. There are some virtual machines "
"%(vms)s and/or templates linked to this network."
msgstr ""
+"Не удалось деактивировать сеть %(name)s. Есть виртуальные машины "
+"%(vms)s или шаблоны, связанные с данной сетью."
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
@@ -868,185 +1066,231 @@ msgstr ""
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr "Не удалось активировать интерфейс %(iface)s: %(err)s."
+msgstr ""
+"Не удалось активировать интерфейс %(iface)s: %(err)s."
#, python-format
msgid ""
"Failed to activate interface %(iface)s. Please check the physical link "
"status."
msgstr ""
-"Не далось активировать интерфейс %(iface)s. Проверьте состояние физической "
-"линии связи. "
+"Не удалось активировать интерфейс %(iface)s. Проверьте физическую линию связи "
+""
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
msgstr ""
+"Не удалось запустить сеть %(name)s. Сведения: %(err)s"
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr "Отладочный отчет %(name)s не существует"
+msgstr ""
+"Отладочный отчет %(name)s не существует"
msgid "Debug report tool not found in system"
-msgstr "Инструмент отладочного отчета не найден в системе"
+msgstr ""
+"Инструмент отладочного отчета не найден в системе"
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
-msgstr "Не удалось создать отладочный отчет %(name)s. Сведения: %(err)s."
+msgstr ""
+"Не удалось создать отладочный отчет %(name)s. Сведения: %(err)s."
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
msgstr ""
+"Не найден отладочный отчет с именем %(name)s"
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
-msgstr "Не удалось создать отладочный отчет %(name)s. Сведения: %(err)s"
+msgstr ""
+"Не удалось создать отладочный отчет %(name)s. Сведения: %(err)s"
msgid "You should give a name for the debug report file."
msgstr ""
+"Необходимо присвоить имя файлу отладочного отчета."
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
+"Имя отладочного отчета должно быть строкой. Только буквы, цифры, подчеркивание ('_') "
+"и дефис ('-') допустимы."
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
msgstr ""
-"Группа томов с именем %(name)s уже существует. Выберите другое имя для "
-"создания логического пула."
+"Отладочный отчет с именем \"%(name)s\" уже существует. Укажите "
+"другое имя."
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr "Сервер памяти %(server)s не использовался Kimchi"
+msgstr ""
+"Сервер памяти %(server)s не использовался Kimchi"
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr "Вариант ОС %(name)s не существует"
+msgstr ""
+"Вариант ОС '%(name)s' не существует"
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr "Раздел %(name)s не существует на хосте"
+msgstr ""
+"Раздел %(name)s не существует на хосте"
msgid "Unable to shutdown host machine as there are running virtual machines"
msgstr ""
"Не удалось завершить работу системы хоста: выполняются виртуальные машины"
msgid "Unable to reboot host machine as there are running virtual machines"
-msgstr "Не удалось перезагрузить систему хоста: выполняются виртуальные машины"
+msgstr ""
+"Не удалось перезагрузить систему хоста: выполняются виртуальные машины"
#, python-format
msgid "Node device '%(name)s' not found"
-msgstr "Устройство %(name)s узла не найдено"
+msgstr ""
+"Устройство узла '%(name)s' не найдено"
msgid "Conflicting flag filters specified."
msgstr ""
+"Фильтры конфликтующих меток указаны."
msgid "No packages marked for update"
-msgstr "Нет пакетов, помеченных для обновления"
+msgstr ""
+"Нет пакетов, помеченных для обновления"
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr "Пакет %(name)s не помечен для обновления."
+msgstr ""
+"Пакет %(name)s не помечен для обновления."
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
-msgstr "Ошибка получения пакетов, помеченных для обновления. Сведения: %(err)s"
+msgstr ""
+"Ошибка получения пакетов, помеченных для обновления. Сведения: %(err)s"
msgid "There is no compatible package manager for this system."
-msgstr "Нет совместимого администратора пакетов для этой системы."
+msgstr ""
+"Нет совместимого администратора пакетов для этой системы."
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr "Не найден %(item)s в хранилище данных"
+msgstr ""
+"Не найден %(item)s в хранилище данных"
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr "Недопустимый URI %(uri)s"
+msgstr ""
+"Недопустимый URI %(uri)s"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
-msgstr "Истек тайм-аут выполнения команды %(cmd)s (%(seconds)s с)"
+msgstr ""
+"Истек тайм-аут во время выполнения команды '%(cmd)s' через %(seconds)s с"
msgid "Unable to choose a virtual machine name"
msgstr ""
+"Не удалось выбрать имя виртуальной машины"
#, python-format
msgid "Invalid data value '%(value)s'"
msgstr ""
+"Недопустимое значение данных '%(value)s'"
#, python-format
msgid "Invalid data unit '%(unit)s'"
msgstr ""
+"Недопустимая единица измерения данных '%(unit)s'"
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
-msgstr "Недопустимый тип памяти. Поддерживаемые типы: cdrom"
+msgstr ""
+"Недопустимый тип памяти. Поддерживаемые типы: 'cdrom', 'disk'"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
msgstr ""
+"Путь '%(value)s' не является допустимым локальным/удаленным путем для устройства"
msgid "Only CDROM path can be update."
msgstr ""
+"Можно изменить только путь к CDROM."
#, python-format
msgid ""
"The storage device %(dev_name)s does not exist in the virtual machine "
"%(vm_name)s"
msgstr ""
+"Устройство хранения %(dev_name)s не существует в виртуальной машине "
+"%(vm_name)s"
#, python-format
msgid "Error while creating new storage device: %(error)s"
-msgstr "Ошибка создания устройства хранения: %(error)s"
+msgstr ""
+"Ошибка создания устройства хранения: %(error)s"
#, python-format
msgid "Error while updating storage device: %(error)s"
-msgstr "Ошибка обновления устройства хранения: %(error)s"
+msgstr ""
+"Ошибка обновления устройства хранения: %(error)s"
#, python-format
msgid "Error while removing storage device: %(error)s"
-msgstr "Ошибка удаления устройства хранения: %(error)s"
+msgstr ""
+"Ошибка удаления устройства хранения: %(error)s"
msgid "Do not support IDE device hot plug"
msgstr ""
+"Не поддерживается оперативное подключение устройств IDE"
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
"disk"
-msgstr "Укажите тип и путь для добавления нового диска виртуальной машины"
+msgstr ""
+"Укажите тип и путь, либо тип и пул/том для добавления нового диска виртуальной "
+"машины"
msgid "Specify path to update virtual machine disk"
-msgstr "Укажите путь для обновления диска виртуальной машины"
+msgstr ""
+"Укажите путь для обновления диска виртуальной машины"
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
msgstr ""
+"Достигнуто ограничение на число устройств (%(limit)s) для типа контроллера %(type)s"
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
msgstr ""
+"Не удалось получить информацию о пути к диску для данного пула/тома: %(error)s"
msgid "Volume already in use by other virtual machine."
msgstr ""
+"Том уже используется другой виртуальной машиной."
msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
-msgstr "Укажите тип и путь для добавления нового диска виртуальной машины"
+msgstr ""
+"При добавлении нового диска виртуальной машины укажите либо путь, "
+"либо пул и том"
#, python-format
msgid ""
"Volume chosen with format %(format)s does not fit in the storage type "
"%(type)s"
msgstr ""
+"Выбранный том с форматом %(format)s не подходит для типа памяти "
+"%(type)s"
msgid "YUM Repository ID must be one word only string."
msgstr ""
"ИД хранилища YUM должен быть строкой, состоящей только из одного слова."
msgid "Repository URL must be an http://, ftp:// or file:// URL."
-msgstr "URL хранилища должен быть http://, ftp:// или file:// ."
+msgstr ""
+"URL хранилища должен быть http://, ftp:// или file:// ."
msgid ""
"Repository configuration is a dictionary with specific values according to "
@@ -1056,688 +1300,896 @@ msgstr ""
"типом хранилища."
msgid "Distribution to DEB repository must be a string"
-msgstr "Вариант для хранилища DEB должен быть строкой"
+msgstr ""
+"Вариант для хранилища DEB должен быть строкой"
msgid "Components to DEB repository must be listed in a array"
-msgstr "Компоненты для хранилища DEB должны быть перечислены в массиве"
+msgstr ""
+"Компоненты для хранилища DEB должны быть перечислены в массиве"
msgid "Components to DEB repository must be a string"
-msgstr "Компоненты для хранилища DEB должны быть строкой"
+msgstr ""
+"Компоненты для хранилища DEB должны быть строкой"
msgid "Mirror list to repository must be a string"
msgstr ""
+"Список зеркальных копий для хранилища должен быть строкой"
msgid "YUM Repository name must be string."
-msgstr "Имя хранилища YUM должно быть строкой."
+msgstr ""
+"Имя хранилища YUM должно быть строкой."
msgid "GPG check must be a boolean value."
-msgstr "Проверка GPG должна быть булевским значением."
+msgstr ""
+"Проверка GPG должна быть булевским значением."
msgid "GPG key must be a URL pointing to the ASCII-armored file."
msgstr ""
-"Ключ GPG должен быть URL, указывающим на защищенный файл с кодированием "
-"ASCII."
+"Ключ GPG должен быть URL, указывающим на защищенный файл с кодированием ASCII."
#, python-format
msgid "Could not update repository %(repo_id)s."
-msgstr "Не удалось обновить хранилище %(repo_id)s."
+msgstr ""
+"Не удалось обновить хранилище %(repo_id)s."
#, python-format
msgid "Repository %(repo_id)s does not exist."
-msgstr "Хранилище %(repo_id)s не существует."
+msgstr ""
+"Хранилище %(repo_id)s не существует."
msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
"update a YUM repository."
msgstr ""
+"Укажите базовый URL хранилища, список зеркал и метассылку для создания или "
+"изменения хранилища YUM."
msgid "Repository management tool was not recognized for your system."
-msgstr "Не распознан инструмент управления хранилищем для системы."
+msgstr ""
+"Не распознан инструмент управления хранилищем для системы."
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr "Хранилище %(repo_id)s уже включено."
+msgstr ""
+"Хранилище %(repo_id)s уже включено."
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr "Хранилище %(repo_id)s уже выключено."
+msgstr ""
+"Хранилище %(repo_id)s уже выключено."
#, python-format
msgid "Could not remove repository %(repo_id)s."
-msgstr "Не удалось удалить хранилище %(repo_id)s."
+msgstr ""
+"Не удалось удалить хранилище %(repo_id)s."
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
-msgstr "Не удалось записать в файл конфигурации хранилища %(repo_file)s"
+msgstr ""
+"Не удалось записать в файл конфигурации хранилища %(repo_file)s"
msgid "Specify repository distribution in order to create a DEB repository."
-msgstr "Укажите вариант хранилища для создания хранилища DEB."
+msgstr ""
+"Укажите вариант хранилища для создания хранилища DEB."
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr "Не удалось включить хранилище %(repo_id)s."
+msgstr ""
+"Не удалось включить хранилище %(repo_id)s."
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr "Не удалось выключить хранилище %(repo_id)s."
+msgstr ""
+"Не удалось выключить хранилище %(repo_id)s."
msgid "YUM Repository ID already exists"
-msgstr "ИД хранилища YUM уже существует"
+msgstr ""
+"ИД хранилища YUM уже существует"
msgid "YUM Repository name must be a string"
-msgstr "Имя хранилища YUM должно быть строкой"
+msgstr ""
+"Имя хранилища YUM должно быть строкой"
#, python-format
msgid "Unable to list repositories. Details: '%(err)s'"
-msgstr "Не удалось вывести список хранилищ. Сведения: %(err)s"
+msgstr ""
+"Не удалось вывести список хранилищ. Сведения: %(err)s"
#, python-format
msgid "Unable to retrieve repository information. Details: '%(err)s'"
-msgstr "Не удалось получить информацию о хранилище. Сведения: %(err)s"
+msgstr ""
+"Не удалось получить информацию хранилища. Сведения: %(err)s"
#, python-format
msgid "Unable to add repository. Details: '%(err)s'"
-msgstr "Не удалось добавить хранилище. Сведения: %(err)s"
+msgstr ""
+"Не удалось добавить хранилище. Сведения: %(err)s"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr "Не удалось удалить хранилище. Сведения: %(err)s"
+msgstr ""
+"Не удалось удалить хранилище. Сведения: %(err)s"
#, python-format
msgid ""
"Configuration items: '%(items)s' are not supported by repository manager"
msgstr ""
+"Элементы конфигурации '%(items)s' не поддерживаются администратором хранилища"
msgid "Repository metalink must be an http://, ftp:// or file:// URL."
msgstr ""
+"Метассылка хранилища должна быть URL http://, ftp:// или file://."
msgid "Cannot specify mirrorlist and metalink at the same time."
msgstr ""
+"Список зеркал и метассылку нельзя указывать одновременно."
#, python-format
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
msgstr ""
+"Виртуальная машина '%(vm)s' должна быть остановлена перед созданием ее моментальной копии."
#, python-format
msgid ""
"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"Не удалось создать моментальную копию '%(name)s' виртуальной машины '%(vm)s'. Сведения: "
+"%(err)s"
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
msgstr ""
+"Моментальная копия '%(name)s' не существует у виртуальной машины '%(vm)s'."
#, python-format
msgid ""
"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"Не удалось получить моментальную копию '%(name)s' виртуальной машины '%(vm)s'. Сведения: "
+"%(err)s"
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
msgstr ""
+"Не удалось вывести список моментальных копий виртуальной машины '%(vm)s'. Сведения: %(err)s"
#, python-format
msgid ""
"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"Не удалось удалить моментальную копию '%(name)s' виртуальной машины '%(vm)s'. Сведения: "
+"%(err)s"
#, python-format
msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"Не удалось получить текущую моментальную копию виртуальной машины '%(vm)s'. Сведения: "
+"%(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
msgstr ""
+"Не удалось восстановить состояние виртуальной машины '%(vm)s' из моментальной копии '%(name)s'. Сведения: "
+"%(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
+"Не удалось создать моментальную копию виртуальной машины '%(vm)s', поскольку она содержит "
+"диск в формате %(format)s. Поддерживается только формат qcow2."
msgid "The number of vCPUs is too large for this system."
msgstr ""
+"Число виртуальных процессоров слишком велико для этой системы."
msgid "Invalid vCPU/topology combination."
msgstr ""
+"Недопустимое сочетание виртуальных процессоров и топологии."
msgid "This host (or current configuration) does not allow CPU topology."
msgstr ""
+"На этом хосте (или в текущей конфигурации) не разрешена топология процессоров."
msgid "ERROR CODE"
-msgstr "Код ошибки"
+msgstr ""
+"Код ошибки"
msgid "REASON"
-msgstr "ПРИЧИНА"
+msgstr ""
+"ПРИЧИНА"
msgid "STACK"
-msgstr "Стек"
+msgstr ""
+"Стек"
msgid "Go to Homepage"
-msgstr "Перейти на главную страницу"
+msgstr ""
+"Перейти на домашнюю страницу"
msgid "Create a New Virtual Machine"
-msgstr "Создать новую виртуальную машину"
+msgstr ""
+"Создать новую виртуальную машину"
msgid "Virtual Machine Name"
-msgstr "Имя виртуальной машины"
+msgstr ""
+"Имя виртуальной машины"
msgid ""
"The name used to identify the virtual machine. If omitted, a name will be "
"chosen based on the template used."
msgstr ""
-"Имя для идентификации виртуальной машины. Если не указано, имя будет выбрано "
-"в зависимости от используемого шаблона."
+"Имя для идентификации виртуальной машины. Если не указано, имя будет "
+"выбрано в зависимости от используемого шаблона."
msgid "Template"
-msgstr "Шаблон"
+msgstr ""
+"Шаблон"
msgid "Please create a template first."
-msgstr "Пожалуйста, создайте шаблон в первую очередь."
+msgstr ""
+"Сначала создайте шаблон."
msgid "Create a Template"
-msgstr "Создать шаблон"
+msgstr ""
+"Создать шаблон"
msgid "Please choose a template."
-msgstr "Пожалуйста, выберите шаблон."
+msgstr ""
+"Выберите шаблон."
msgid "OS"
-msgstr "ОС"
+msgstr ""
+"ОС"
msgid "OS Version"
-msgstr "Версия ОС"
+msgstr ""
+"Версия ОС"
msgid "CPUS"
-msgstr "Процессоры"
+msgstr ""
+"Процессоры"
msgid "Memory"
-msgstr "Память"
+msgstr ""
+"Память"
msgid "Create"
-msgstr "Создать"
+msgstr ""
+"Создать"
msgid "Creating..."
msgstr ""
+"Создание..."
msgid "Edit Guest"
-msgstr "Изменить гостевую систему"
+msgstr ""
+"Изменить гостевую систему"
msgid "General"
-msgstr "Общее"
+msgstr ""
+"Общие"
msgid "Storage"
-msgstr "Хранилище"
+msgstr ""
+"Дисковая память"
msgid "Interface"
-msgstr "Интерфейс"
+msgstr ""
+"Интерфейс"
msgid "Permission"
-msgstr "Версия"
+msgstr ""
+"Права доступа"
msgid "Host PCI Device"
msgstr ""
+"Устройство PCI хоста"
msgid "Snapshot"
msgstr ""
+"Моментальная копия"
msgid "Name"
-msgstr "Имя"
+msgstr ""
+"Имя"
msgid "CPUs"
-msgstr "Процессоры"
+msgstr ""
+"Процессоры"
msgid "Memory (MB)"
-msgstr "Память (Мб)"
+msgstr ""
+"Объем памяти (МБ)"
msgid "Icon"
-msgstr "Значок"
+msgstr ""
+"Значок"
msgid "Device"
-msgstr "Имя устройства"
+msgstr ""
+"Устройство"
msgid "Path"
-msgstr "Путь NFS"
+msgstr ""
+"Путь"
msgid "Network"
-msgstr "Сеть"
+msgstr ""
+"Сеть"
msgid "Type"
-msgstr "Тип"
+msgstr ""
+"Тип"
msgid "MAC Address"
msgstr ""
+"MAC-адрес"
msgid "Available system users and groups"
msgstr ""
+"Доступные системные пользователи и группы"
msgid "Selected system users and groups"
msgstr ""
+"Выбранные системные пользователи и группы"
msgid "User"
msgstr ""
+"Пользователь"
msgid "All"
-msgstr "Все"
+msgstr ""
+"Все"
msgid "To Add"
msgstr ""
+"Добавить"
msgid "Added"
msgstr ""
+"Добавлено"
msgid "filter"
msgstr ""
+"фильтр"
msgid "Product"
msgstr ""
+"Продукт"
msgid "Vendor"
-msgstr "Вендор"
+msgstr ""
+"Вендор"
msgid "Created"
msgstr ""
+"Дата создания"
msgid "Save"
-msgstr "Сохранить"
+msgstr ""
+"Сохранить"
msgid "Replace"
-msgstr "Заменить"
+msgstr ""
+"Заменить"
msgid "Detach"
-msgstr "Отключить"
+msgstr ""
+"Отключить"
msgid "Cancel"
-msgstr "Отмена"
+msgstr ""
+"Отмена"
msgid "revert"
msgstr ""
+"восстановить"
msgid "Add a Storage Device to VM"
-msgstr "Добавить устройство хранения в VM"
+msgstr ""
+"Добавить устройство хранения в VM"
msgid "Device Type"
-msgstr "Тип устройства"
+msgstr ""
+"Тип устройства"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "Тип устройства. В данный момент поддерживается только \"cdrom\"."
+msgstr ""
+"Тип устройства. В данный момент поддерживается \"cdrom\" и \"disk\"."
msgid "Storage Pool"
-msgstr "Пул памяти"
+msgstr ""
+"Пул памяти"
msgid "Storage pool which volume located in"
-msgstr "Путь к пулу памяти должен быть строкой"
+msgstr ""
+"Том пула памяти находится в"
msgid "Storage Volume"
-msgstr "Имя пула памяти"
+msgstr ""
+"Том памяти"
msgid "Storage volume to be attached"
-msgstr "Имя тома должно быть строкой"
+msgstr ""
+"Том подключен"
msgid "File Path"
-msgstr "Путь к файлу"
+msgstr ""
+"Путь к файлу"
msgid "The ISO file path in the server for CDROM."
-msgstr "Путь к файлу ISO для CDROM на сервере."
+msgstr ""
+"Путь к файлу ISO для CDROM на сервере."
msgid "Attach"
-msgstr "Подключить"
+msgstr ""
+"Подключить"
msgid "Start"
-msgstr "Запустить"
+msgstr ""
+"Запустить"
msgid "Reset"
-msgstr "Сбросить"
+msgstr ""
+"Сброс"
msgid "Pause"
msgstr ""
+"Приостановить"
msgid "Resume"
msgstr ""
+"Возобновить"
msgid "Power Off"
-msgstr "Выключить"
+msgstr ""
+"Выключить питание"
msgid "Actions"
-msgstr "Действия"
+msgstr ""
+"Действия"
msgid "Connect"
-msgstr "Подключить"
+msgstr ""
+"Подключить"
msgid "Clone"
-msgstr "Клонировать"
+msgstr ""
+"Дублировать"
msgid "Edit"
-msgstr "Редактировать"
+msgstr ""
+"Изменить"
msgid "Shut Down"
-msgstr "Завершить работу"
+msgstr ""
+"Завершить работу"
msgid "Delete"
-msgstr "Удалить"
+msgstr ""
+"Удалить"
msgid "The username or password you entered is incorrect. Please try again."
-msgstr "Указано неверное имя пользователя или пароль. Введите еще раз."
+msgstr ""
+"Указано неверное имя пользователя или пароль. Введите еще раз."
msgid "This field is required."
-msgstr "Это обязательное поле."
+msgstr ""
+"Это обязательное поле."
msgid "Log in"
-msgstr "Войти"
+msgstr ""
+"Вход в систему"
msgid "Logging in..."
-msgstr "Вход..."
+msgstr ""
+"Вход..."
msgid "Host"
-msgstr "Хост"
+msgstr ""
+"Хост"
msgid "Guests"
-msgstr "Гостевые системы"
+msgstr ""
+"Гостевые системы"
msgid "Templates"
-msgstr "Шаблоны"
+msgstr ""
+"Шаблоны"
msgid "Failed to get application configuration"
-msgstr "Не удалось получить конфигурацию приложения"
+msgstr ""
+"Не удалось получить конфигурацию приложения"
msgid "This is not a valid Linux path"
-msgstr "Этот недопустимый путь в Linux"
+msgstr ""
+"Этот недопустимый путь в Linux"
msgid "This is not a valid URL."
-msgstr "Это недопустимый URL."
+msgstr ""
+"Это недопустимый URL."
msgid "No such data available."
-msgstr "Нет таких данных."
+msgstr ""
+"Нет таких данных."
msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"Нет связи с системой хоста. Убедитесь, что система хоста работает и доступна "
-"для подключения. Ответ на запрос HTTP: %1. "
+"Нет связи с системой хоста. Убедитесь, что система хоста работает и "
+"доступна для подключения. Ответ на запрос HTTP: %1. "
msgid "Unable to read file."
msgstr ""
+"Не удалось прочитать файл."
msgid "Error while uploading file."
msgstr ""
+"Ошибка передачи файла."
msgid "Delete Confirmation"
-msgstr "Подтверждение удаления"
+msgstr ""
+"Подтверждение удаления"
msgid "OK"
-msgstr "OK"
+msgstr ""
+"OK"
msgid "Confirm"
-msgstr "Подтвердить"
+msgstr ""
+"Подтвердить"
msgid "Warning"
-msgstr "Предупреждение"
+msgstr ""
+"Предупреждение"
msgid "Cloning..."
msgstr ""
+"Дублирование..."
msgid "Loading..."
-msgstr "Загружается..."
+msgstr ""
+"Загружается..."
msgid "An error occurred while retrieving system information."
msgstr ""
+"Ошибка получения системной информации."
msgid "Retry"
-msgstr "Повторить"
+msgstr ""
+"Повторить"
msgid "Detailed message:"
-msgstr "Подробное сообщение:"
+msgstr ""
+"Подробное сообщение:"
msgid "No ISO found"
msgstr ""
+"Не найден образ ISO"
msgid "This is not a valid ISO file."
-msgstr "Этот файл не является допустимым образом ISO."
+msgstr ""
+"Этот файл не является допустимым образом ISO."
msgid "This may take a long time. Do you want to continue?"
-msgstr "Это займет много времени. Продолжить?"
+msgstr ""
+"Это может занять много времени. Продолжить?"
msgid "This will permanently delete the template. Would you like to continue?"
-msgstr "Шаблон будет безвозвратно удален. Продолжить?"
+msgstr ""
+"Шаблон будет безвозвратно удален. Продолжить?"
msgid "Unable to shut down system as there are some virtual machines running!"
msgstr ""
-"Невозможно завершить работу системы, поскольку в ней работают виртуальные "
-"машины!"
+"Невозможно завершить работу системы, поскольку в ней работают виртуальные машины!"
msgid "Max:"
-msgstr "Макс.:"
+msgstr ""
+"Макс.:"
msgid "Utilization"
-msgstr "Использование"
+msgstr ""
+"Использование"
msgid "Available"
-msgstr "Доступно"
+msgstr ""
+"Доступно"
msgid "Read Rate"
-msgstr "Скорость чтения"
+msgstr ""
+"Скорость чтения"
msgid "Write Rate"
-msgstr "Скорость записи"
+msgstr ""
+"Скорость записи"
msgid "Received"
-msgstr "Получено"
+msgstr ""
+"Получено"
msgid "Sent"
-msgstr "Отправлено"
+msgstr ""
+"Отправлено"
msgid ""
"Shutting down or restarting host will cause unsaved work lost. Continue to "
"shut down/restarting?"
msgstr ""
-"Завершение работы и перезапуск хоста приведут к потере несохраненной работы. "
-"Продолжить завершение работы/перезапуск?"
+"Завершение работы и перезапуск хоста приведут к потере несохраненной работы. Продолжить "
+"завершение работы/перезапуск?"
msgid ""
"Repository will be removed permanently and can't be recovered. Do you want "
"to continue?"
-msgstr "Хранилище будет удалено без возможности восстановления. Продолжить?"
+msgstr ""
+"Хранилище будет удалено без возможности восстановления. "
+"Продолжить?"
msgid "Repositories"
-msgstr "Хранилища"
+msgstr ""
+"Хранилища"
msgid "ID"
-msgstr "ИД"
+msgstr ""
+"ИД"
msgid "Base URL"
-msgstr "Базовый URL"
+msgstr ""
+"Базовый URL"
msgid "Is Mirror"
-msgstr "Зеркальная копия"
+msgstr ""
+"Зеркальная копия"
msgid "URL Args"
-msgstr "Аргументы URL"
+msgstr ""
+"Аргументы URL"
msgid "Enabled"
-msgstr "Включено"
+msgstr ""
+"Включено"
msgid "GPG Check"
-msgstr "Проверка GPG"
+msgstr ""
+"Проверка GPG"
msgid "GPG Key"
-msgstr "Ключ GPG"
+msgstr ""
+"Ключ GPG"
msgid "Add"
-msgstr "Добавить"
+msgstr ""
+"Добавить"
msgid "Remove"
-msgstr "Удалить"
+msgstr ""
+"Удалить"
msgid "Enable"
-msgstr "Включить"
+msgstr ""
+"Включить"
msgid "Disable"
-msgstr "Выключить"
+msgstr ""
+"Выключить"
msgid "Software Updates"
-msgstr "Обновления программного обеспечения"
+msgstr ""
+"Обновления программного обеспечения"
msgid "Package Name"
-msgstr "Имя пакета"
+msgstr ""
+"Имя пакета"
msgid "Version"
-msgstr "Версия"
+msgstr ""
+"Версия"
msgid "Architecture"
-msgstr "Архитектура"
+msgstr ""
+"Архитектура"
msgid "Repository"
-msgstr "Хранилище"
+msgstr ""
+"Хранилище"
msgid "Update All"
-msgstr "Обновить всё"
+msgstr ""
+"Обновить все"
msgid "Updating..."
-msgstr "Обновление..."
+msgstr ""
+"Обновление..."
msgid "Failed to retrieve packages update information."
msgstr ""
+"Ошибка получения информации для обновления пакетов."
msgid "Failed to update package(s)."
-msgstr "Не удалось обновить пакеты."
+msgstr ""
+"Не удалось обновить пакеты."
msgid ""
"Debug report will be removed permanently and can't be recovered. Do you want "
"to continue?"
msgstr ""
-"Отладочный отчет будет удален без возможности восстановления. Продолжить?"
+"Отладочный отчет будет удален без возможности восстановления. "
+"Продолжить?"
msgid "Debug Reports"
-msgstr "Отладочные отчеты"
+msgstr ""
+"Отладочные отчеты"
msgid "Generated Time"
-msgstr "Время создания"
+msgstr ""
+"Время создания"
msgid "Generate"
-msgstr "Создать"
+msgstr ""
+"Создать"
msgid "Generating..."
-msgstr "Создание..."
+msgstr ""
+"Создание..."
msgid "Rename"
-msgstr "Переименовать"
+msgstr ""
+"Переименовать"
msgid "Download"
-msgstr "Загрузить"
+msgstr ""
+"Загрузить"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
"hyphen ('-')."
-msgstr "Имя отчета должно содержать только буквы, цифры и дефисы ('-')."
+msgstr ""
+"Имя отчета должно содержать только буквы, цифры, подчеркивания ('_') и "
+"дефисы ('-')."
msgid "Pending..."
-msgstr "Загружается..."
+msgstr ""
+"Ожидание..."
msgid "Report name is the same as the original one."
msgstr ""
+"Имя отчета совпадает с исходным."
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
"cannot be undone. Would you like to continue?"
msgstr ""
-"Будет удалена виртуальная машина вместе со своими виртуальными дисками. Это "
-"необратимая операция. Продолжить?"
+"Виртуальная машина будет удалена вместе со своими виртуальными дисками. Эта операция "
+"необратима. Продолжить?"
msgid "Power off Confirmation"
-msgstr "Подтверждение удаления"
+msgstr ""
+"Подтверждение отключения питания"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
"cache in the guest. Would you like to continue?"
msgstr ""
+"Это действие может привести к нежелательным последствиям. Например, несброшенный дисковый "
+"кэш в гостевой системе. Продолжить?"
msgid "Reset Confirmation"
-msgstr "Подтверждение удаления"
+msgstr ""
+"Подтверждение сброса"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
"Would you like to continue?"
msgstr ""
+"Угроза потери данных при сбросе без прекращения работы гостевой ОС. "
+"Продолжить?"
msgid "Shut Down Confirmation"
-msgstr "Подтверждение удаления"
+msgstr ""
+"Подтверждение завершения работы"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
-msgstr "Шаблон будет безвозвратно удален. Продолжить?"
+msgstr ""
+"Обратите внимание, что гостевая ОС может проигнорировать этот запрос. Продолжить?"
msgid "Virtual Machine delete Confirmation"
msgstr ""
+"Подтверждение удаления виртуальной машины"
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
msgstr ""
+"Эта виртуальная машина не постоянная. Выключение приведет к ее удалению. Продолжить?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
"default storage pool. The same will happen when the target pool does not "
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
+"Если у целевой гостевой системы есть тома SCSI или iSCSI, они будут скопированы "
+"в пул памяти по умолчанию. То же самое произойдет, если в целевом пуле "
+"недостаточно свободного места для дублирования томов. Продолжить?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
msgstr ""
-"Этот CDROM будет отключен. Его можно будет снова подключить. Отключить?"
+"Этот CDROM будет отключен. Его можно будет снова подключить. "
+"Отключить?"
msgid "Attaching..."
-msgstr "Подключение..."
+msgstr ""
+"Подключение..."
msgid "Replacing..."
-msgstr "Замена..."
+msgstr ""
+"Замена..."
msgid "Successfully attached!"
-msgstr "Успешно подключен!"
+msgstr ""
+"Успешно подключен!"
msgid "Successfully replaced!"
-msgstr "Успешно заменен!"
+msgstr ""
+"Успешно заменен!"
msgid "Successfully detached!"
-msgstr "Успешно отключен!"
+msgstr ""
+"Успешно отключен!"
msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
msgstr ""
+"Этот диск будет отключен. Его можно будет снова подключить. "
+"Отключить?"
msgid "interface:"
msgstr ""
+"интерфейс:"
msgid "address:"
msgstr ""
+"адрес:"
msgid "link_type:"
msgstr ""
+"тип линии связи:"
msgid "block:"
msgstr ""
+"блок:"
msgid "drive_type:"
msgstr ""
+"тип накопителя:"
msgid "model:"
msgstr ""
+"модель:"
msgid "Affected devices:"
msgstr ""
+"Затронутые устройства:"
msgid "The VLAN id must be between 1 and 4094."
-msgstr "ИД VLAN должен быть от 1 до 4094."
+msgstr ""
+"ИД VLAN должен быть от 1 до 4094."
msgid "unavailable"
-msgstr "недоступно"
+msgstr ""
+"недоступно"
msgid ""
"This action will interrupt network connectivity for any virtual machine that "
@@ -1747,490 +2199,643 @@ msgstr ""
"зависят от этой сети."
msgid "Create a network"
-msgstr "Создать сеть"
+msgstr ""
+"Создать сеть"
msgid ""
"This network is not persistent. Instead of stop, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Этот пул памяти не постоянный. Вместо деактивации, это действие безвозвратно "
-"его удалит. Продолжить?"
+"Эта сеть не постоянная. Вместо остановки, это действие "
+"безвозвратно удалит ее. Продолжить?"
msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
+"Тег комплексной VLAN может работать неправильно с включенным NetworkManager. "
+"Его рекомендуется выключить."
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
-msgstr "Пул памяти будет безвозвратно удален. Продолжить?"
+msgstr ""
+"Пул памяти будет безвозвратно удален. Продолжить?"
msgid "This storage pool is empty."
-msgstr "Этот пул памяти пустой."
+msgstr ""
+"Этот пул памяти пустой."
msgid ""
"It will format your disk and you will loose any data in there, are you sure "
"to continue? "
msgstr ""
-"Диск будет отформатирован, и все данные на нем будут потеряны. Вы "
-"действительно хотите продолжить? "
+"Диск будет отформатирован, и все данные на нем будут потеряны. Вы действительно хотите "
+"продолжить? "
msgid "SCSI Fibre Channel"
-msgstr "SCSI Fibre Channel"
+msgstr ""
+"SCSI Fibre Channel"
msgid "No SCSI adapters found."
-msgstr "Не найдены адаптеры SCSI."
+msgstr ""
+"Не найдены адаптеры SCSI."
msgid "Loading iSCSI targets..."
msgstr ""
+"Загрузка целевых объектов iSCSI..."
msgid "No iSCSI found. Please input one."
msgstr ""
+"Не найден iSCSI. Введите."
msgid "Failed to load iSCSI targets."
msgstr ""
+"Не удалось загрузить целевые объекты iSCSI."
msgid "The storage pool name can not be blank."
-msgstr "Не указано имя пула памяти."
+msgstr ""
+"Не указано имя пула памяти."
msgid "The storage pool path can not be blank."
-msgstr "Не указан путь к пулу памяти."
+msgstr ""
+"Не указан путь к пулу памяти."
msgid "NFS server mount path can not be blank."
-msgstr "Не указан путь монтирования сервера NFS."
+msgstr ""
+"Не указан путь монтирования сервера NFS."
msgid "Invalid NFS mount path."
-msgstr "Недопустимый путь монтирования NFS."
+msgstr ""
+"Недопустимый путь монтирования NFS."
msgid "No logical device selected."
-msgstr "Не выбрано логическое устройство."
+msgstr ""
+"Не выбрано логическое устройство."
msgid "The iSCSI target can not be blank."
-msgstr "Не указан целевой объект iSCSI."
+msgstr ""
+"Не указан целевой объект iSCSI."
msgid "Server name can not be blank."
-msgstr "Не указано имя сервера."
+msgstr ""
+"Не указано имя сервера."
msgid "This is not a valid Server Name or IP. Please, modify it."
msgstr ""
+"Это не допустимое имя или IP-адрес сервера. Измените его."
msgid "Looking for available partitions ..."
-msgstr "Поиск доступных разделов..."
+msgstr ""
+"Поиск доступных разделов..."
msgid "No available partitions found."
-msgstr "Не найдены доступные разделы."
+msgstr ""
+"Не найдены доступные разделы."
msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"Этот пул памяти не постоянный. Вместо деактивации, это действие безвозвратно "
-"его удалит. Продолжить?"
+"Этот пул памяти не постоянный. Вместо деактивации, это действие "
+"безвозвратно удалит его. Продолжить?"
msgid "Unable to retrieve partitions information."
-msgstr "Не удалось получить информацию о хранилище. Сведения: %(err)s"
+msgstr ""
+"Не удалось получить информацию о разделах."
msgid "In progress..."
msgstr ""
+"Выполнение..."
msgid "Failed!"
msgstr ""
+"Сбой!"
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
msgstr ""
+"Путь к CDROM должен быть правильным локальным или удаленным путем и не может быть пустым."
msgid "Disk pool or volume cannot be blank."
-msgstr "Не указано имя пула памяти."
+msgstr ""
+"Не указан пул или том диска."
msgid "Peers"
msgstr ""
+"Равноправные узлы"
msgid "Searching"
msgstr ""
+"Поиск"
msgid "No peers found."
msgstr ""
+"Не найдены равноправные узлы."
msgid "Help"
-msgstr "Помощь"
+msgstr ""
+"Справка"
msgid "About"
-msgstr "О программе"
+msgstr ""
+"О программе"
msgid "Log out"
-msgstr "Выйти"
+msgstr ""
+"Закрыть сеанс"
msgid "Version:"
-msgstr "Версия:"
+msgstr ""
+"Версия:"
msgid "Session timeout, please re-login."
msgstr ""
+"Тайм-аут сеанса. Пожалуйста, войдите заново."
msgid "User Name"
-msgstr "Имя пользователя"
+msgstr ""
+"Имя пользователя"
msgid "Password"
-msgstr "Пароль"
+msgstr ""
+"Пароль"
msgid "Generate a New Debug Report"
-msgstr "Создать новый отладочный отчет"
+msgstr ""
+"Создать новый отладочный отчет"
msgid "Report Name"
-msgstr "Имя отчета"
+msgstr ""
+"Имя отчета"
msgid ""
"The name used to identify the report. If omitted, a name will be chosen "
"based on current time. Name can contain: letters, digits, underscore (\"_\") "
"and hyphen (\"-\")."
msgstr ""
-"Имя для идентификации отчета. Если не указано, имя будет сформировано на "
-"основе текущего времени. Имя может содержать: буквы, цифры и дефисы (\"-\")."
+"Имя для идентификации отчета. Если не указано, имя будет "
+"сформировано на основе текущего времени. Имя может включать буквы, цифры, подчеркивания (\"_\") "
+"и дефисы (\"-\")."
msgid "Rename a Debug Report"
-msgstr "Создать новый отладочный отчет"
+msgstr ""
+"Переименовать отладочный отчет"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
"hyphen (\"-\")."
msgstr ""
-"Имя для идентификации отчета. Если не указано, имя будет сформировано на "
-"основе текущего времени. Имя может содержать: буквы, цифры и дефисы (\"-\")."
+"Имя, используемое для идентификации отчета. Имя может включать буквы, цифры и "
+"подчеркивания (\"-\")."
msgid "Submit"
-msgstr "Подтвердить"
+msgstr ""
+"Отправить"
msgid "Add a Repository"
-msgstr "Добавить хранилище"
+msgstr ""
+"Добавить хранилище"
msgid "Identifier"
-msgstr "Идентификатор"
+msgstr ""
+"Идентификатор"
msgid "Single word, unique identifier for the repository."
-msgstr "Одиночное слово - уникальный идентификатор хранилища."
+msgstr ""
+"Одиночное слово - уникальный идентификатор хранилища."
msgid "Textual name for the repository."
-msgstr "Текстовое имя хранилища."
+msgstr ""
+"Текстовое имя хранилища."
msgid "URL"
-msgstr "URL"
+msgstr ""
+"URL"
msgid "Required Field"
-msgstr "Обязательное поле"
+msgstr ""
+"Обязательное поле"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
-msgstr "URL хранилища. Поддерживаемые протоколы: http, ftp, file."
+msgstr ""
+"URL хранилища. Поддерживаемые протоколы: http, ftp, file."
msgid "Repository is a mirror"
-msgstr "Хранилище является зеркальной копией."
+msgstr ""
+"Хранилище является зеркальной копией"
msgid "Distribution"
-msgstr "Вариант"
+msgstr ""
+"Вариант"
msgid "Distribution of the DEB repository."
-msgstr "Вариант хранилища DEB."
+msgstr ""
+"Вариант хранилища DEB."
msgid "Components"
-msgstr "Компоненты"
+msgstr ""
+"Компоненты"
msgid "List of components in DEB repository."
-msgstr "Список компонентов в хранилище DEB."
+msgstr ""
+"Список компонентов в хранилище DEB."
msgid "Edit Repository"
-msgstr "Изменить хранилище"
+msgstr ""
+"Изменить хранилище"
msgid "Mirror List URL"
-msgstr "URL списка зеркальных копий"
+msgstr ""
+"URL списка зеркальных копий"
msgid "Yes"
-msgstr "Да"
+msgstr ""
+"Да"
msgid "No"
-msgstr "Нет"
+msgstr ""
+"Нет"
msgid "Add a Volume to Storage Pool"
msgstr ""
+"Добавить том в пул памяти"
msgid "Fetch from remote URL"
msgstr ""
+"Загрузить с удаленного URL"
msgid "Enter the remote URL here."
msgstr ""
+"Введите сюда удаленный URL."
msgid "Upload a file"
msgstr ""
+"Передать файл"
msgid "Choose the file you want to upload."
msgstr ""
+"Выберите файл для передачи."
msgid "Define a New Storage Pool"
-msgstr "Создать пул памяти"
+msgstr ""
+"Создать пул памяти"
msgid "Storage Pool Name"
-msgstr "Имя пула памяти"
+msgstr ""
+"Имя пула памяти"
msgid ""
"The name used to identify the storage pools, and it should not be empty."
-msgstr "Имя для идентификации пулов памяти. Не может быть пустым."
+msgstr ""
+"Имя для идентификации пулов памяти. Не может быть пустым."
msgid "Storage Pool Type"
-msgstr "Тип пула памяти"
+msgstr ""
+"Тип пула памяти"
msgid "Storage Path"
-msgstr "Путь к диску"
+msgstr ""
+"Путь к диску"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
-msgstr "Путь к пулу памяти. Каждый пул памяти должен иметь уникальный путь."
+msgstr ""
+"Путь к пулу памяти. Каждый пул памяти должен иметь уникальный путь."
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
"your system."
-msgstr "Kimchi попытается создать каталог, если он не существует в системе."
+msgstr ""
+"Kimchi попытается создать каталог, если он не существует "
+"в системе."
msgid "NFS Server IP"
-msgstr "IP-адрес сервера NFS"
+msgstr ""
+"IP-адрес сервера NFS"
msgid "NFS server IP or hostname. It can be input or chosen from history."
msgstr ""
-"IP-адрес или имя хоста сервера NFS. Его можно ввести или выбрать в "
-"хронологии."
+"IP-адрес или имя хоста сервера NFS. Его можно ввести или выбрать в хронологии."
msgid "NFS Path"
-msgstr "Путь NFS"
+msgstr ""
+"Путь NFS"
msgid "The NFS exported path on NFS server."
-msgstr "Экспортированный путь NFS на сервере NFS."
+msgstr ""
+"Экспортированный путь NFS на сервере NFS."
msgid "Device path"
-msgstr "Путь к устройству"
+msgstr ""
+"Путь к устройству"
msgid "iSCSI Server"
-msgstr "Сервер iSCSI"
+msgstr ""
+"Сервер iSCSI"
msgid "iSCSI server IP or hostname. It should not be empty."
-msgstr "IP-адрес или имя хоста сервера iSCSI. Не может быть пустым."
+msgstr ""
+"IP-адрес или имя хоста сервера iSCSI. Не может быть пустым."
msgid "Server"
-msgstr "Сервер"
+msgstr ""
+"Сервер"
msgid "Port"
-msgstr "Порт"
+msgstr ""
+"Порт"
msgid "Target"
-msgstr "Целевой объект"
+msgstr ""
+"Целевой объект"
msgid "The iSCSI target on iSCSI server"
-msgstr "Целевой объект iSCSI на сервере iSCSI"
+msgstr ""
+"Целевой объект iSCSI на сервере iSCSI"
msgid "Add iSCSI Authentication"
-msgstr "Добавить идентификацию iSCSI"
+msgstr ""
+"Добавить идентификацию iSCSI"
msgid "iSCSI Authentication"
-msgstr "Идентификация iSCSI"
+msgstr ""
+"Идентификация iSCSI"
msgid "SCSI Adapter"
-msgstr "Адаптер SCSI"
+msgstr ""
+"Адаптер SCSI"
msgid "Please, wait..."
-msgstr "Подождите..."
+msgstr ""
+"Подождите..."
msgid "Add Template"
-msgstr "Добавить шаблон"
+msgstr ""
+"Добавить шаблон"
msgid "Where is the source media for this template? "
-msgstr "Где находится исходный носитель для этого шаблона?"
+msgstr ""
+"Где находится исходный носитель для этого шаблона? "
msgid "Local ISO Image"
-msgstr "Локальный образ ISO"
+msgstr ""
+"Локальный образ ISO"
msgid "Local Image File"
msgstr ""
+"Локальный файл образа"
msgid "Remote ISO Image"
-msgstr "Удаленный образ ISO"
+msgstr ""
+"Удаленный образ ISO"
msgid "Search ISOs"
-msgstr "Поиск образов ISO"
+msgstr ""
+"Поиск образов ISO"
msgid "The following ISOs are available:"
-msgstr "Доступные образы ISO:"
+msgstr ""
+"Доступные образы ISO:"
msgid "OS: "
-msgstr "ОС: "
+msgstr ""
+"ОС: "
msgid "Version: "
-msgstr "Версия: "
+msgstr ""
+"Версия: "
msgid "Size: "
-msgstr "Размер: "
+msgstr ""
+"Размер: "
msgid "Search more ISOs"
-msgstr "Поиск дополнительных образов ISO"
+msgstr ""
+"Поиск дополнительных образов ISO"
msgid "Create Templates from Selected ISO"
-msgstr "Создать шаблоны из выбранных образов ISO"
+msgstr ""
+"Создать шаблоны из выбранных образов ISO"
msgid "I want to use a specific ISO file"
-msgstr "Использовать конкретный файл ISO"
+msgstr ""
+"Использовать конкретный файл ISO"
msgid "Loading default remote ISOs ..."
-msgstr "Загрузка удаленных ISO по умолчанию..."
+msgstr ""
+"Загрузка удаленных ISO по умолчанию..."
msgid "Arch: "
-msgstr "Архитектура: "
+msgstr ""
+"Архитектура: "
msgid "I want to use a custom URL"
-msgstr "Использовать другой URL"
+msgstr ""
+"Использовать другой URL"
msgid "Edit Template"
-msgstr "Изменить шаблон"
+msgstr ""
+"Изменить шаблон"
msgid "Processor"
-msgstr "Процессор"
+msgstr ""
+"Процессор"
msgid "CDROM"
-msgstr "CDROM"
+msgstr ""
+"CDROM"
msgid "Image File"
msgstr ""
+"Файл образа"
msgid "Graphics"
-msgstr "Графика"
+msgstr ""
+"Графика"
msgid "Disk(GB)"
msgstr ""
+"Диск (ГБ)"
msgid "Disk Format"
msgstr ""
+"Формат диска"
msgid "CPU Number"
-msgstr "Количество процессоров"
+msgstr ""
+"Количество процессоров"
msgid "Manually set CPU topology"
msgstr ""
+"Вручную настроить топологию процессоров"
msgid "Cores"
msgstr ""
+"Ядра"
msgid "Threads"
msgstr ""
+"Нити"
msgid "CPU"
-msgstr "Процессор"
+msgstr ""
+"Процессор"
msgid "Disk I/O"
-msgstr "Дисковый ввод-вывод"
+msgstr ""
+"Дисковый ввод-вывод"
msgid "Network I/O"
-msgstr "Сетевой ввод-вывод"
+msgstr ""
+"Сетевой ввод-вывод"
msgid "Livetile"
-msgstr "Livetile"
+msgstr ""
+"Livetile"
msgid "No guests found."
-msgstr "Не найдены гостевые системы."
+msgstr ""
+"Не найдены гостевые системы."
msgid "Shut down"
-msgstr "Выключен"
+msgstr ""
+"Выключен"
msgid "Restart"
-msgstr "Перезапуск"
+msgstr ""
+"Перезапуск"
msgid "Basic Information"
-msgstr "Базовая информация"
+msgstr ""
+"Базовая информация"
msgid "OS Distro"
-msgstr "Вариант ОС"
+msgstr ""
+"Вариант ОС"
msgid "OS Code Name"
-msgstr "Кодовое имя ОС"
+msgstr ""
+"Кодовое имя ОС"
msgid "CPU(s)"
msgstr ""
+"Процессоры"
msgid "System Statistics"
-msgstr "Системная статистика"
+msgstr ""
+"Системная статистика"
msgid "Update Progress"
-msgstr "Ход обновления"
+msgstr ""
+"Ход обновления"
msgid "Network Name"
-msgstr "Имя сети"
+msgstr ""
+"Имя сети"
msgid "State"
-msgstr "Состояние"
+msgstr ""
+"Состояние"
msgid "Network Type"
-msgstr "Тип сети"
+msgstr ""
+"Тип сети"
msgid "Address Space"
-msgstr "Адресное пространство"
+msgstr ""
+"Адресное пространство"
msgid "Name should not contain '/' and '\"'."
-msgstr "Недопустимое имя пула памяти. В имени не должно быть символов '/'."
+msgstr ""
+"Имя не должно содержать '/' и '\"'."
msgid "Isolated: no external network connection"
-msgstr "Изолированный (без физических сетевых соединений)"
+msgstr ""
+"Изолированный: без внешних сетевых соединений"
msgid "NAT: outbound physical network connection only"
-msgstr "NAT (только исходящее физическое сетевое соединение)"
+msgstr ""
+"NAT (только исходящее физическое сетевое соединение)"
msgid "Bridged: Virtual machines are connected to physical network directly"
-msgstr "Через мост (прямое подключение виртуальных машин к физической сети)"
+msgstr ""
+"Через мост (прямое подключение виртуальных машин к физической сети)"
msgid "(No interfaces found)"
msgstr ""
+"(Интерфейсы не найдены)"
msgid "Destination"
-msgstr "Целевое расположение:"
+msgstr ""
+"Целевое расположение"
msgid "Enable VLAN"
-msgstr "Включить VLAN:"
+msgstr ""
+"Включить VLAN"
msgid "VLAN ID"
msgstr ""
+"Идентификатор VLAN"
msgid "Stop"
-msgstr "Завершить"
+msgstr ""
+"Завершить"
msgid "%Used"
msgstr ""
+"%Используется"
msgid "Location"
-msgstr "Расположение"
+msgstr ""
+"Расположение"
msgid "Capacity"
-msgstr "Емкость"
+msgstr ""
+"Емкость"
msgid "Allocated"
-msgstr "Выделено"
+msgstr ""
+"Выделено"
msgid "active"
-msgstr "активен"
+msgstr ""
+"активен"
msgid "inactive"
-msgstr "неактивен"
+msgstr ""
+"неактивен"
msgid "Deactivate"
-msgstr "Выключить"
+msgstr ""
+"Выключить"
msgid "Activate"
-msgstr "Активировать"
+msgstr ""
+"Активировать"
msgid "Add Volume"
msgstr ""
+"Добавить том"
msgid "Extend"
msgstr ""
+"Расширить"
msgid "Undefine"
-msgstr "Удалить"
+msgstr ""
+"Удалить"
msgid "Format"
-msgstr "Формат:"
+msgstr ""
+"Формат"
msgid "Allocation"
-msgstr "Выделение ресурсов:"
+msgstr ""
+"Выделение"
msgid "No templates found."
-msgstr "Не найдены шаблоны."
+msgstr ""
+"Не найдены шаблоны."
+
+# ENGL1SH_VERS10N 28617_40 DO NOT REMOVE OR CHANGE THIS LINE
+# T9N_SRC_ID 92
+# T9N_SH1P_STR1NG KV310AAP001 1
diff --git a/po/zh_CN.po b/po/zh_CN.po
index bb31f03..f7d2787 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -1,158 +1,174 @@
-# i18n portable object for kimchi.
-# Copyright (C) IBM, Corp. 2013-2014
-# ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>, 2013-04-18.
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+# English translations for kimchi package.
+# Copyright (C) 2013 ORGANIZATION
+# Adam Litke <agl(a)us.ibm.com>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: kimchi 0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-06-24 09:39-0300\n"
-"PO-Revision-Date: 2013-06-27 10:48+0000\n"
-"Last-Translator: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>\n"
-"Language-Team: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>\n"
-"Language: zh_CN\n"
+"PO-Revision-Date: 2013-07-11 17:32-0400\n"
+"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
+"Language-Team: English\n"
+"Language: en_US\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"X-Poedit-Country: CHINA\n"
-"X-Poedit-Language: Chinese\n"
-"X-Poedit-SourceCharset: utf-8\n"
+"Plural-Forms: nplurals=1; plural=0;"
#, python-format
msgid "Unknown parameter %(value)s"
-msgstr "未知变量 %(value)s"
+msgstr ""
+"未知参数 %(value)s"
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr "不允许删除%(resource)s"
+msgstr ""
+"不允许删除 %(resource)s"
#, python-format
msgid "%(resource)s does not implement update method"
-msgstr "不支持更新%(resource)s"
+msgstr ""
+"%(resource)s 未实现更新方法"
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr "不允许创建%(resource)s"
+msgstr ""
+"不允许创建 %(resource)s"
msgid "Unable to parse JSON request"
-msgstr "无法解析JSON请求"
+msgstr ""
+"无法解析 JSON 请求"
msgid "This API only supports JSON"
-msgstr "这个API仅支持JSON"
+msgstr ""
+"此 API 仅支持 JSON"
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
-msgstr "参数不符合要求的格式:%(err)s"
+msgstr ""
+"参数与模式中的需求不匹配:%(err)s"
msgid "You don't have permission to perform this operation."
-msgstr "您没有权限执行这项操作。"
+msgstr ""
+"您不具有执行此操作的许可权。"
msgid "Datastore is not initiated in the model object."
-msgstr "尚未为model对象初始化数据存储。"
+msgstr ""
+"未在模型对象中启动数据存储器。"
#, python-format
msgid "Unable to start task due error: %(err)s"
-msgstr "由于错误%(err)s任务启动失败"
+msgstr ""
+"无法启动任务,因为发生了错误:%(err)s"
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
-msgstr "任务'%(task)s超时%(seconds)s秒。"
+msgstr ""
+"运行以下任务时,%(seconds)s 秒的超时已到期:%(task)s。"
#, python-format
msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
-msgstr "用户'%(username)s'身份验证失败.[错误代码:%(code)s]"
+msgstr ""
+"对用户“%(username)s”的认证失败。[错误代码:%(code)s]"
msgid "You are not authorized to access Kimchi"
-msgstr "您没有被授权访问Kimchi"
+msgstr ""
+"您无权访问 Kimchi"
#, python-format
msgid "Specify %(item)s to login into Kimchi"
-msgstr "指定登录Kimchi的%(item)s"
+msgstr ""
+"指定 %(item)s 以登录 Kimchi"
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
-msgstr "使用指定的LDAP配置未找到%(user_id)s用户"
+msgstr ""
+"找不到具有给定 LDAP 设置的用户 %(user_id)s。"
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
-msgstr "无效的LDAP配置:%(item)s : %(value)s"
+msgstr ""
+"无效 LDAP 配置:%(item)s : %(value)s"
msgid "Unknown \"_cap\" specified"
-msgstr "未识别的\"_cap\""
+msgstr ""
+"指定了未知“_cap”"
msgid "\"_passthrough\" should be \"true\" or \"false\""
-msgstr "\"_passthrough\"值应为\"true\"或者\"false\""
+msgstr ""
+"“_passthrough”应该为“true”或“false”"
msgid "\"_passthrough_affected_by\" should be a device name string"
-msgstr "\"_passthrough_affected_by\"应为一个字符串型设备名"
+msgstr ""
+"“_passthrough_affected_by”应该为设备名字符串"
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
-msgstr "获取块设备时出错。详情:%(err)s"
+msgstr ""
+"获取块设备时出错。详细信息:%(err)s"
#, python-format
msgid "Error while getting block device information for %(device)s."
-msgstr "获取块设备 %(device)s 信息时出错。"
+msgstr ""
+"获取 %(device)s 的块设备信息时出错。"
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr "找不到发行版文件:%(filename)s"
+msgstr ""
+"找不到 Distro 文件:%(filename)s"
#, python-format
msgid ""
"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
-msgstr "不能解析发行版文件:%(filename)s。请确保它是一个JSON格式的文件。"
+msgstr ""
+"无法解析 Distro 文件:%(filename)s。请确保该文件是 JSON 文件。"
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
-msgstr "无法通过 %(portal)s 登录iSCSI主机和目标。详情:%(err)s"
+msgstr ""
+"无法登录 iSCSI 主机目标 %(portal)s。详细信息:%(err)s"
#, python-format
msgid "Unable to login to iSCSI host %(host)s target %(target)s"
-msgstr "无法登录iSCSI主机%(host)s上的目标%(target)s。"
+msgstr ""
+"无法登录 iSCSI 主机 %(host)s 目标 %(target)s"
#, python-format
msgid "Unable to find ISO file %(filename)s"
-msgstr "未能找到ISO文件 %(filename)s"
+msgstr ""
+"找不到 ISO 文件 %(filename)s"
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr "ISO文件%(filename)s不可引导。"
+msgstr ""
+"ISO 文件 %(filename)s 不可引导"
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
-msgstr "ISO文件%(filename)s没有有效的El Torito引导记录。"
+msgstr ""
+"ISO 文件 %(filename)s 没有有效的 EI Torito 引导记录"
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
-msgstr "在ISO文件%(filename)s中发现无效的El Torito校验条目。。"
+msgstr ""
+"ISO %(filename)s 中的 El Torito 验证条目无效"
#, python-format
msgid "Invalid El Torito boot indicator in ISO %(filename)s"
-msgstr "ISO文件%(filename)s的El Torito引导标志是无效的"
+msgstr ""
+"ISO %(filename)s 中的 El Torito 引导指示符无效"
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
-msgstr "未能识别ISO文件%(filename)s的主卷类型"
+msgstr ""
+"ISO %(filename)s 中的主卷具有意外的卷类型"
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
-msgstr "ISO文件%(filename)s的卷描述符格式错误"
+msgstr ""
+"在 ISO %(filename)s 中读取卷描述符时格式不正确"
#, python-format
msgid ""
@@ -162,209 +178,265 @@ msgid ""
"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
"'path_to_iso'.Details: %(err)s"
msgstr ""
-"hypervisor没有访问ISO文件%(filename)s的权限。可以将ISO移到/var/lib/libvirt目"
-"录下;或为'%(user)s'用户设置访问权限;或将'%(user)s'用户增加到ISO路径的属组;"
-"或者为所有的用户增加访问权限 'chmod -R o+x '(不推荐)。详情:%(err)s"
+"管理程序不具使用此 ISO %(filename)s 的许可权。"
+"请考虑将其移至 /var/lib/libvirt 下,或者"
+"为“%(user)s”用户设置对文件访问控制表的搜索许可权(如果可以设置),"
+"或者将“%(user)s”添加至 ISO 路径组,或者(不建议)执行“chmod -R o+x "
+"path_to_iso”。详细信息:%(err)s"
msgid "An error occurred when probing image OS information."
-msgstr "搜索镜像操作系统信息时发生错误。"
+msgstr ""
+"探测映像操作系统信息时发生错误。"
msgid "No OS information found in given image."
-msgstr "在指定的镜像文件中未发现操作系统信息。"
+msgstr ""
+"在给定映像中找不到操作系统信息。"
#, python-format
msgid "Unable to read image file %(filename)s"
-msgstr "未能读取镜像文件 %(filename)s"
+msgstr ""
+"无法读取映像文件 %(filename)s"
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
-msgstr "磁盘文件必须已存在系统中,%(filename)s不是合法文件名"
+msgstr ""
+"映像文件必须是系统上的现有文件。%(filename)s 不是有效"
+"输入。"
#, python-format
msgid "Virtual machine %(name)s already exists"
-msgstr "虚拟机%(name)s已经存在"
+msgstr ""
+"虚拟机 %(name)s 已存在"
#, python-format
msgid "Virtual machine %(name)s does not exist"
-msgstr "虚拟机%(name)s不存在"
+msgstr ""
+"虚拟机 %(name)s 不存在"
#, python-format
msgid ""
"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
"in use or the virtual machine is not powered off."
msgstr ""
-"未能实现虚拟机 %(name)s 重命名,名称 %(new_name)s 已被使用或者该虚拟机未关"
-"机。"
+"无法对虚拟机 %(name)s 进行重命名。名称 %(new_name)s 已"
+"在使用中,或者该虚拟机未关闭电源。"
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
-msgstr "不能获取停止状态的虚拟机%(name)s的截屏"
+msgstr ""
+"无法检索已停止虚拟机 %(name)s 的屏幕快照"
msgid "Remote ISO image is not supported by this server."
-msgstr "该服务器不支持远程ISO镜像。"
+msgstr ""
+"远程 ISO 映像不受此服务器支持。"
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
-msgstr "虚拟机 %(name)s 不支持快照"
+msgstr ""
+"屏幕快照在虚拟机 %(name)s 上不受支持"
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
-msgstr "不能创建虚拟机%(name)s。详情:%(err)s"
+msgstr ""
+"无法创建虚拟机 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
-msgstr "不能更新虚拟机%(name)s。详情:%(err)s"
+msgstr ""
+"无法更新虚拟机 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
-msgstr "不能获取虚拟机%(name)s。详情:%(err)s"
+msgstr ""
+"无法检索虚拟机 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to connect to powered off virtual machine %(name)s."
-msgstr "虚拟机%(name)s已关机,连接失败。"
+msgstr ""
+"无法连接到已关闭电源的虚拟机 %(name)s。"
msgid "Virtual machine name must be a string without slashes (/)"
msgstr ""
+"虚拟机名称必须是不带斜杠 (/) 的字符串"
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
-msgstr "无效的虚拟机模板URI %(value)s"
+msgstr ""
+"为虚拟机指定的模板 URI %(value)s 无效"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for virtual machine"
-msgstr "无效的虚拟机存储池URI %(value)s"
+msgstr ""
+"为虚拟机指定的存储池 URI %(value)s 无效"
msgid "Supported virtual machine graphics are Spice or VNC"
-msgstr "虚拟机图形界面仅支持Spice以及VNC"
+msgstr ""
+"受支持的虚拟机图形为 Spice 或 VNC"
msgid "Graphics address to listen on must be IPv4 or IPv6"
-msgstr "远程图形访问的监听地址必须是IPv4或IPv6地址。"
+msgstr ""
+"要侦听的图形地址必须是 IPv4 或 IPv6"
msgid "Specify a template to create a virtual machine from"
-msgstr "指定用于创建虚拟机的模板"
+msgstr ""
+"指定要从其创建虚拟机的模板"
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
-msgstr "不能启动虚拟机 %(name)s. 详情:%(err)s"
+msgstr ""
+"无法启动虚拟机 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
-msgstr "不能关闭虚拟机%(name)s。详情:%(err)s"
+msgstr ""
+"无法关闭虚拟机 %(name)s 的电源。详细信息:%(err)s"
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
-msgstr "不能删除虚拟机 %(name)s。详情:%(err)s"
+msgstr ""
+"无法删除虚拟机 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
-msgstr "未能重置虚拟机%(name)s。详情:%(err)s"
+msgstr ""
+"无法重置虚拟机 %(name)s。详细信息:%(err)s"
msgid "User name list must be an array"
-msgstr "用户名列表必须为一个数组"
+msgstr ""
+"用户名列表必须是数组"
msgid "User name must be a string"
-msgstr "用户名必须是一个字符串"
+msgstr ""
+"用户名必须是字符串"
msgid "Group name list must be an array"
-msgstr "组名称列表必须为一个数组"
+msgstr ""
+"组名列表必须是数组"
msgid "Group name must be a string"
-msgstr "用户组名称必须是一个字符串"
+msgstr ""
+"组名必须是字符串"
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr "用户'%(users)s'不存在"
+msgstr ""
+"用户“%(users)s”不存在"
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr "用户组'%(groups)s'不存在"
+msgstr ""
+"组“%(groups)s”不存在"
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
-msgstr "未能关闭虚拟机%(name)s。详情:%(err)s"
+msgstr ""
+"无法关闭虚拟机 %(name)s。详细信息:%(err)s"
#, python-format
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr "无法获得虚拟机 %(name)s的元数据,详情:%(err)s"
+msgstr ""
+"无法访问虚拟机 %(name)s 的元数据。详细信息:%(err)s"
msgid "The guest console password must be a string."
-msgstr "客户机控制台密码必须为一个字符串。"
+msgstr ""
+"访客控制台密码必须是字符串。"
msgid "The life time for the guest console password must be a number."
-msgstr "客户机命令行密码有效时间必须是一个数字。"
+msgstr ""
+"访客控制台密码的有效期必须是数字。"
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
-msgstr "虚拟机'%(name)s'在制作副本前必须关机。"
+msgstr ""
+"在对虚拟机“%(name)s”进行克隆之前,必须将其停止。"
#, python-format
msgid "Insufficient disk space to clone virtual machine '%(name)s'"
-msgstr "制作虚拟机'%(name)s'副本所需的磁盘空间不足"
+msgstr ""
+"没有足够的磁盘空间,无法对虚拟机“%(name)s”进行克隆"
#, python-format
msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
-msgstr "未能成功制作虚拟机'%(name)s'副本。详情:%(err)s"
+msgstr ""
+"无法对 VM“%(name)s”进行克隆。详细信息:%(err)s"
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
msgstr ""
+"对非持久性虚拟机 %(name)s 的操作无效"
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
msgstr ""
+"无法暂挂 VM“%(name)s”,因为它未在运行。"
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
msgstr ""
+"无法暂挂 VM“%(name)s”。详细信息:%(err)s"
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
msgstr ""
+"无法恢复 VM“%(name)s”,因为它未暂停。"
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
msgstr ""
+"无法恢复 VM“%(name)s”。详细信息:%(err)s"
msgid "Memory assigned is higher then the maximum allowed in the host."
msgstr ""
+"分配的内存超过了主机中允许的最大内存。"
#, python-format
msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
+"VM“%(name)s”不支持实时内存更新。请在机器脱机的情况下"
+"更新内存以启用此功能。"
msgid "Only increase memory is allowed in active VMs"
msgstr ""
+"仅允许在活动 VM 中增加内存"
msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
msgstr ""
+"对于实时内存更新,新内存值必须等于旧内存值加上 "
+"1024 Mib 的倍数"
msgid "There are not enough free slots of 1024 Mib in the guest."
msgstr ""
+"访客中没有足够的可用插槽(大小为 1024 Mib)。"
msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
msgstr ""
+"主机的 Libvirt 版本不支持内存设备。Libvirt 必须 >= "
+"1.2.14"
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
msgstr ""
+"连接内存设备时出错。详细信息:%(error)s"
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
-msgstr "虚拟机%(vmid)s未指明被分配的主机设备%(dev_name)s。"
+msgstr ""
+"VM %(vmid)s 不包含直接分配的主机设备 %(dev_name)s。"
#, python-format
msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
-msgstr "主机设备%(dev_name)s不允许直接分配给虚拟机。"
+msgstr ""
+"不允许将主机设备 %(dev_name)s 直接分配给 VM。"
msgid ""
"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
@@ -373,1830 +445,2397 @@ msgid ""
"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
"iommu=1."
msgstr ""
-"未找到IOMMU groups。主机PCI pass through需要IOMMU group才可以正确工作。请在"
-"BIOS设置里将Intel VT-d 或者 AMD IOMMU 设为使能,而后确认内核支持IOMMU。对于"
-"Intel CPU,在路径/boot/grub2/grub.conf中添加内核变量intel_iommu=on。对于AMD "
-"CPU,则添加iommu=pt iommu=1。"
+"找不到任何 IOMMU 组。主机 PCI 联通需要 IOMMU 组才能"
+"正常工作。请在 BIOS 中启用 Intel VT-d 或 AMD IOMMU,"
+"然后验证“内核”是否已使用 IOMMU 支持编译。对于 Intel CPU,请将 intel_iommu=on "
+"添加至 /boot/grub2/grub.conf 中的内核参数。对于 AMD CPU,请添加 iommu=pt "
+"iommu=1。"
msgid "\"name\" should be a device name string"
-msgstr "\"name\"应该为一个字符串型的设备名"
+msgstr ""
+"“name”应该为设备名字符串"
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
msgstr ""
+"主机可能正在使用设备 %(name)s。无法将该设备连接到"
+"访客。"
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
-msgstr "虚拟机 %(name)s 中没有接口 %(iface)s"
+msgstr ""
+"接口 %(iface)s 在虚拟机 %(name)s 中不存在"
#, python-format
msgid ""
"Network %(network)s specified for virtual machine %(name)s does not exist"
-msgstr "为虚拟机%(name)s指定的网络%(network)s不存在"
+msgstr ""
+"为以下虚拟机指定的网络 %(network)s 不存在:%(name)"
msgid "Supported virtual machine interfaces type is only network"
-msgstr "只支持网络类型的虚拟机接口"
+msgstr ""
+"受支持的虚拟机接口类型只有网络"
msgid "Network name for virtual machine interface must be a string"
-msgstr "虚拟机接口的网络名字必须是字符串"
+msgstr ""
+"虚拟机接口的网络名必须是字符串"
msgid "Invalid network model card specified for virtual machine interface"
-msgstr "虚拟机接口指定的网络模型卡无效"
+msgstr ""
+"为虚拟机接口所指定的网络模型卡无效"
msgid "Specify type and network to add a new virtual machine interface"
-msgstr "为新的虚拟机接口指定类型和网络"
+msgstr ""
+"指定类型和网络以添加新虚拟机接口"
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
msgstr ""
+"MAC 地址必须遵循格式 FF:FF:FF:FF:FF:FF"
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
msgstr ""
+"MAC 地址 %(mac)s 已在虚拟机 %(name)s 中存在"
msgid "Invalid MAC Address"
msgstr ""
+"无效 MAC 地址"
msgid "Cannot change MAC address of a running virtual machine"
msgstr ""
+"无法更改正在运行的虚拟机的 MAC 地址"
#, python-format
msgid "Template %(name)s already exists"
-msgstr "模板 %(name)s 已经存在"
+msgstr ""
+"模板 %(name)s 已存在"
#, python-format
msgid ""
"Network '%(network)s' specified for template %(template)s does not exist"
-msgstr "为模板 %(template)s 指定的网络 '%(network)s' 不存在"
+msgstr ""
+"为以下模板指定的网络“%(network)s”不存在:%(template)s"
#, python-format
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
-msgstr "为模板 %(template)s 指定的存储池 '%(pool)s' 不存在"
+msgstr ""
+"为以下模板指定的存储池 %(pool)s 不存在:%(template)s"
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
-msgstr "为模板 %(template)s 指定的存储池 '%(pool)s' 没有激活"
+msgstr ""
+"为以下模板指定的存储池 %(pool)s 未处于活动状态:%(template)s"
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr "为CDROM指定的参数 '%(param)s' 无效"
+msgstr ""
+"为 CDROM 指定的参数“%(param)s”无效。"
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
-msgstr "为模板 %(template)s 指定的网络 '%(network)s' 没有激活"
+msgstr ""
+"为以下模板指定的网络 %(network)s 未处于活动状态:%(template)s"
msgid "Template name must be a string"
-msgstr "模板的名字必须是一个字符串"
+msgstr ""
+"模板名称必须是字符串"
msgid "Template icon must be a path to the image"
-msgstr "模板的图标必须是一个指向镜像的路径"
+msgstr ""
+"模板图标必须是映像的路径"
msgid "Template distribution must be a string"
-msgstr "模板的发行版必须是一个字符串"
+msgstr ""
+"模板分发版必须是字符串"
msgid "Template distribution version must be a string"
-msgstr "模板的发行版版本号必须是一个字符串"
+msgstr ""
+"模板分发版版本必须是字符串"
msgid "The number of CPUs must be an integer greater than 0"
-msgstr "CPU数量必须为一个大于0的整数"
+msgstr ""
+"CPU 的数目必须是一个大于 0 的整数"
msgid "Amount of memory (MB) must be an integer greater than 512"
-msgstr "总内存数(MB为单位)必须是一个大于512的整数"
+msgstr ""
+"内存量 (MB) 必须是一个大于 512 的整数"
msgid "Template CDROM must be a local or remote ISO file"
-msgstr "模板的CDROM必须是一个本地或者远程的ISO文件"
+msgstr ""
+"模板 CDROM 必须是一个本地或远程 ISO 文件"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for template"
-msgstr "给模板指定了无效的存储池URI %(value)s"
+msgstr ""
+"为模板指定的存储池 URI %(value)s 无效"
msgid "Specify an ISO image as CDROM or a base image to create a template"
-msgstr "指定一个ISO镜像作为创建模板的CDROM或者基础镜像"
+msgstr ""
+"指定 ISO 映像作为 CDROM 或基本映像以创建模板"
msgid "All networks for the template must be specified in a list."
-msgstr "为模板指定的网络必须在一个列表中"
+msgstr ""
+"必须指定列表中模板的所有网络。"
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
-msgstr "当存储池类型为iSCSI或者SCSI的时候须为模板指定一个卷"
+msgstr ""
+"当存储池为 iSCSI 或 SCSI 时,请对模板指定卷。"
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
-msgstr "卷%(volume)s不在存储池%(pool)s中"
+msgstr ""
+"卷 %(volume)s 不在存储池 %(pool)s 中"
#, python-format
msgid "Unable to create template due error: %(err)s"
-msgstr "创建模板失败。详情:%(err)s"
+msgstr ""
+"无法创建模板,因为发生了错误:%(err)s"
#, python-format
msgid "Unable to delete template due error: %(err)s"
-msgstr "由于错误:%(err)s,未能删除模板"
+msgstr ""
+"无法删除模板,因为发生了错误:%(err)s"
msgid "Disk size must be an integer greater than 1GB."
-msgstr "磁盘大小必须大于1GB。"
+msgstr ""
+"磁盘大小必须是大于 1 GB 的整数。"
msgid "Template base image must be a valid local image file"
-msgstr "模板基础镜像必须为一个有效的本地镜像文件"
+msgstr ""
+"模板基本映像必须是有效的本地映像文件"
#, python-format
msgid "Cannot identify base image %(path)s format"
-msgstr "未能识别基础镜像%(path)s格式"
+msgstr ""
+"无法识别基本映像 %(path)s 格式"
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
-msgstr "CPU拓扑中,VCPUs必须包括sockets, cores 以及threads。"
+msgstr ""
+"指定 CPU 拓扑时,vCPU 数必须是套接字数、核心数和"
+"线程数的乘积。"
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
"zero."
-msgstr "CPU拓扑中,每一个参数必须为大于零的整数。"
+msgstr ""
+"指定 CPU 拓扑时,每个元素都必须是大于"
+"零的整数。"
msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"无效的磁盘镜像格式。有效的格式为:bochs, cloop, cow, dmg, qcow, qcow2, qed, "
-"raw, vmdk, vpc。"
+"无效磁盘映像格式。有效格式:bochs、cloop、cow、dmg、qcow、"
+"qcow2、qed、raw、vmdk 和 vpc。"
#, python-format
msgid "Storage pool %(name)s already exists"
-msgstr "存储池%(name)s已经存在"
+msgstr ""
+"存储池 %(name)s 已存在"
#, python-format
msgid "Storage pool %(name)s does not exist"
-msgstr "存储池%(name)s不存在"
+msgstr ""
+"存储池 %(name)s 不存在"
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
-msgstr "为新存储池%(name)s指定%(item)s"
+msgstr ""
+"指定 %(item)s 以创建存储池 %(name)s"
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr "不能删除激活的存储池 %(name)s"
+msgstr ""
+"无法删除活动存储池 %(name)s"
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
-msgstr "不能列举存储池。 详情: %(err)s"
+msgstr ""
+"无法列示存储池。详细信息:%(err)s"
#, python-format
msgid "Unable to create storage pool %(name)s. Details: %(err)s"
-msgstr "不能创建存储池 %(name)s。详情: %(err)s"
+msgstr ""
+"无法创建存储池 %(name)s。详细信息:%(err)s"
#, python-format
msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
-msgstr "不能获取储存池%(name)s中卷的数目。详情: %(err)s"
+msgstr ""
+"无法获取存储池 %(name)s 中存储卷的数目。详细信息:"
+"%(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
-msgstr "不能激活储存池%(name)s。详情: %(err)s"
+msgstr ""
+"无法激活存储池 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
-msgstr "不能停用储存池%(name)s。详情: %(err)s"
+msgstr ""
+"无法取消激活存储池 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
-msgstr "不能删除储存池%(name)s。详情: %(err)s"
+msgstr ""
+"无法删除存储池 %(name)s。详细信息:%(err)s"
#, python-format
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
-msgstr "不能创建NFS存储池,可能导出路径%(path)s在挂载时被阻塞了"
+msgstr ""
+"无法创建 NFS 池,因为导出路径 %(path)s 可能在安装期间被阻塞"
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
-msgstr "不能创建NFS存储池,挂载导出路径%(path)s失败"
+msgstr ""
+"无法创建 NFS 池,因为安装导出路径 %(path)s 失败"
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr "不支持的存储池类型:%(type)s"
+msgstr ""
+"不受支持的存储池类型:%(type)s"
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
-msgstr "查询存储池XML到%(pool)s时出现错误"
+msgstr ""
+"将存储池 XML 检索至 %(pool)s 时出错"
msgid "Storage pool name must be a string without slashes (/)"
msgstr ""
+"存储池名称必须是不带斜杠 (/) 的字符串"
msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
"iso"
-msgstr "存储池类型仅支持dir,netfs,logical,iscsi,isci以及kimchi-iso"
+msgstr ""
+"受支持的存储池类型为 dir、netfs、logical、iscsi、isci 和 kimchi-"
+"iso"
msgid "Storage pool path must be a string"
-msgstr "存储池路径必须是字符串"
+msgstr ""
+"存储池路径必须是字符串"
msgid "Storage pool host must be a IP or hostname"
-msgstr "存储池主机必须是一个IP后者主机名"
+msgstr ""
+"存储池主机必须是一个 IP 或主机名"
msgid "Storage pool device must be the absolute path to the block device"
-msgstr "存储池设备必须为块设备的一个绝对路径"
+msgstr ""
+"存储池设备必须是块设备的绝对路径"
msgid "Storage pool devices parameter must be a list"
-msgstr "存储池设备参数必须是一个列表"
+msgstr ""
+"存储池设备参数必须是一个列表"
msgid "Target IQN of an iSCSI pool must be a string"
-msgstr "iSCSI存储池的目标IQN必须是字符串"
+msgstr ""
+"iSCSI 池的目标 IQN 必须是字符串"
msgid "Port of a remote storage server must be an integer between 1 and 65535"
-msgstr "远程存储服务器的端口必须是1到65535之间的整数"
+msgstr ""
+"远程存储服务器的端口必须是一个介于 1 到 65535 之间的整数"
msgid "iSCSI target username must be a string"
-msgstr "iSCSI目标用户名必须为一个字符串"
+msgstr ""
+"iSCSI 目标用户名必须是字符串"
msgid "iSCSI target password must be a string"
-msgstr "iSCSI目标密码必须为一个字符串"
+msgstr ""
+"iSCSI 目标密码必须是字符串"
msgid "Specify name and type to create a storage pool"
-msgstr "为新存储池指定名字和类型"
+msgstr ""
+"指定名称和类型以创建存储池"
#, python-format
msgid ""
"%(disk)s is not a valid disk/partition. Could not add it to the pool "
"%(pool)s."
-msgstr "%(disk)s 不是有效的磁盘/分区。不能被添加到存储池%(pool)s中"
+msgstr ""
+"%(disk)s 不是有效磁盘/分区。无法将其添加至池"
+"%(pool)s。"
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
-msgstr "未能实现逻辑池%(pool)s的扩展,详情:%(err)s"
+msgstr ""
+"无法扩展逻辑池 %(pool)s。详细信息:%(err)s"
msgid "The parameter disks only can be updated for logical storage pool."
-msgstr "只有逻辑存储池支持更新磁盘参数。"
+msgstr ""
+"只能更新逻辑存储池的参数磁盘。"
msgid "The SCSI host adapter name must be a string."
-msgstr "SCSI主机适配器名必须是个字符串"
+msgstr ""
+"SCSI 主机适配器名称必须是字符串。"
msgid "The storage pool kimchi_isos is reserved for internal use"
-msgstr "存储池kimchi_isos留作内部使用"
+msgstr ""
+"存储池 kimchi_isos 已保留供内部使用"
#, python-format
msgid ""
"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
-msgstr "不能激活NFS存储池%(name)s。NFS服务器%(server)s不可到达。"
+msgstr ""
+"无法激活 NFS 存储池 %(name)s。NFS 服务器 %(server)s"
+"不可访问。"
#, python-format
msgid ""
"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
-msgstr "不能停用NFS存储池%(name)s。NFS服务器%(server)s不可到达。"
+msgstr ""
+"无法取消激活 NFS 存储池 %(name)s。NFS 服务器 %(server)s"
+"不可访问。"
#, python-format
msgid ""
"Unable to deactivate pool %(name)s as it is associated with some templates"
-msgstr "不能停用存储池%(name)s,该存储池与一些模板关联"
+msgstr ""
+"无法取消激活池 %(name)s,因为它与某些模板相关联"
#, python-format
msgid "Unable to delete pool %(name)s as it is associated with some templates"
-msgstr "不能删除存储池%(name)s,该存储池与一些模板关联"
+msgstr ""
+"无法删除池 %(name)s,因为它与某些模板相关联"
#, python-format
msgid ""
"A volume group named '%(name)s' already exists. Please, choose another name "
"to create the logical pool."
-msgstr "卷组'%(name)s'已经存在,请选择其它的名字来创建逻辑存储池。"
+msgstr ""
+"名为“%(name)s”的卷组已存在。请选择其他名称"
+"以创建逻辑池。"
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
-msgstr "全盘扫描信息更新失败。详情:%(err)s。"
+msgstr ""
+"无法使用深度扫描信息更新数据库,因为发生了错误:%(err)s"
#, python-format
msgid "Storage volume %(name)s already exists"
-msgstr "存储卷%(name)s已经存在"
+msgstr ""
+"存储卷 %(name)s 已存在"
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
-msgstr "存储池%(pool)s中没有存储卷%(name)s"
+msgstr ""
+"存储卷 %(name)s 在存储池 %(pool)s 中不存在"
#, python-format
msgid ""
"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
"not active"
-msgstr "未能创建存储卷%(volume)s,因为存储池%(pool)s 未被激活"
+msgstr ""
+"无法创建存储卷 %(volume)s,因为存储池 %(pool)s"
+"未处于活动状态"
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
-msgstr "为新存储卷%(volume)s指定指定%(item)s"
+msgstr ""
+"指定 %(item)s 以创建存储卷 %(volume)s"
#, python-format
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
-msgstr "不能列出存储卷,因为存储池%(pool)s没有激活"
+msgstr ""
+"无法列示存储卷,因为存储池 %(pool)s 未处于活动状态"
#, python-format
msgid ""
"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
"%(err)s"
-msgstr "不能在存储池%(pool)s中创建存储卷%(name)s。详情:%(err)s"
+msgstr ""
+"无法在以下存储池中创建存储卷 %(name)s:%(pool)s。详细信息:"
+"%(err)s"
#, python-format
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
-msgstr "不能在存储池%(pool)s中列出存储卷。详情:%(err)s"
+msgstr ""
+"无法列示存储池 %(pool)s 中的存储卷。详细信息:%(err)s"
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
-msgstr "不能擦除存储卷%(name)s。详情:%(err)s"
+msgstr ""
+"无法清除存储卷 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
-msgstr "不能删除存储卷%(name)s。详情:%(err)s"
+msgstr ""
+"无法删除存储卷 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
-msgstr "不能改变存储卷%(name)s的大小。详情:%(err)s"
+msgstr ""
+"无法调整存储卷 %(name)s 的大小。详细信息:%(err)s"
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
-msgstr "存储类型%(type)s不支持卷的创建和删除"
+msgstr ""
+"存储类型 %(type)s 不支持创建和删除卷"
msgid "Storage volume name must be a string"
-msgstr "存储卷的名字必须是字符串"
+msgstr ""
+"存储卷名称必须是字符串"
msgid "Storage volume allocation must be an integer number"
-msgstr "存储卷分配额必须是整数"
+msgstr ""
+"存储卷分配必须是一个整数数字"
msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
-"不支持该存储卷格式,支持的格式:bochs, cloop, cow, dmg, qcow, qcow2, qed, "
-"raw, vmdk, vpc。"
+"存储卷格式不受支持。有效格式:bochs、cloop、cow、dmg、"
+"qcow‘qcow2、qed、raw、vmdk 和 vpc。"
msgid "Storage volume requires a volume name"
-msgstr "存储卷需要名字"
+msgstr ""
+"存储卷需要一个卷名"
#, python-format
msgid ""
"Unable to update database with storage volume information due error: %(err)s"
-msgstr "存储卷信息更新失败。详情:%(err)s"
+msgstr ""
+"无法使用存储卷信息更新数据库,因为发生了错误:%(err)s"
#, python-format
msgid "Only one of parameter %(param)s can be specified"
-msgstr "只能对参数%(param)s中的一个进行指定"
+msgstr ""
+"只能指定一个 %(param)s 参数"
#, python-format
msgid "Create volume from %(param)s is not supported"
-msgstr "不支持从%(param)s创建虚拟机"
+msgstr ""
+"不支持根据 %(param)s 创建卷"
msgid "Storage volume capacity must be an integer number."
-msgstr "存储卷容量必须为一个整数"
+msgstr ""
+"存储卷容量必须是整数数字。"
msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
-msgstr "存储卷URL必须为http://,https://,ftp://或ftps://"
+msgstr ""
+"存储卷 URL 必须是 http://、https://、ftp:// 或 ftps://。"
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
-msgstr "不能访问文件%(url)s,请检查该文件是否存在。"
+msgstr ""
+"无法访问文件 %(url)s。请检查该文件。"
#, python-format
msgid ""
"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
"%(err)s"
-msgstr "未能于存储池'%(pool)s'制作存储卷'%(name)s'的副本,详情:%(err)s"
+msgstr ""
+"无法对以下池中的存储卷“%(name)s”进行克隆:“%(pool)s”。详细信息:"
+"%(err)s"
msgid "Specify chunk data and its size to upload a file."
msgstr ""
+"指定区块数据及其大小以上载文件。"
msgid "In order to upload a storage volume, specify the 'upload' parameter."
msgstr ""
+"要上载存储卷,请指定“upload”参数。"
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
msgstr ""
+"无法上载区块数据,因为它与所请求的区块大小不匹配。"
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
msgstr ""
+"存储卷 %(vol)s 未包括在上载过程中。"
msgid "The upload chunk data will exceed the storage volume size."
msgstr ""
+"上载区块数据将超过存储卷大小。"
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
msgstr ""
+"无法将区块数据上载至存储卷。详细信息:%(err)s。"
#, python-format
msgid "Interface %(name)s does not exist"
-msgstr "接口%(name)s不存在"
+msgstr ""
+"接口 %(name)s 不存在"
#, python-format
msgid "Network %(name)s already exists"
-msgstr "网络%(name)s已经存在"
+msgstr ""
+"网络 %(name)s 已存在"
#, python-format
msgid "Network %(name)s does not exist"
-msgstr "网络%(name)s不存在"
+msgstr ""
+"网络 %(name)s 不存在"
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
-msgstr "给网络%(network)s指定的子网%(subnet)s无效"
+msgstr ""
+"为以下网络指定的子网 %(subnet)s 无效:%(network)s。"
#, python-format
msgid "Specify a network interface to create bridged network %(name)s"
-msgstr "指定一个网络接口来创建桥接类型的网络%(name)s"
+msgstr ""
+"指定网络接口以创建桥接网络 %(name)s"
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr "不能删除激活的网络%(name)s"
+msgstr ""
+"无法删除活动网络 %(name)s"
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
-msgstr "给网络%(network)s指定的接口%(iface)s已被使用"
+msgstr ""
+"为以下网络指定的接口 %(iface)s 已在使用中:%(network)s"
msgid "Interface should be bare NIC, bonding or bridge device."
-msgstr "接口应该是一个裸的网络接口卡、bonding或者桥接设备。"
+msgstr ""
+"接口应该是空的 NIC、绑定或网桥设备。"
#, python-format
msgid "Unable to create network %(name)s. Details: %(err)s"
-msgstr "不能创建网络%(name)s。详情:%(err)s"
+msgstr ""
+"无法创建网络 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
-msgstr "不能为网络'%(name)s'找到一个未使用的IP网络地址。"
+msgstr ""
+"找不到网络“%(name)s”的可用 IP 地址"
#, python-format
msgid "The interface %(iface)s already exists."
msgstr ""
+"接口 %(iface)s 已存在。"
msgid "Network name must be a string without slashes (/) or quotes (\")"
msgstr ""
+"网络名必须是不带斜杠 (/) 或引号 (\") 的字符串"
msgid "Supported network types are isolated, NAT and bridge"
-msgstr "支持的网络类型有隔离、NAT和桥接"
+msgstr ""
+"受支持的网络类型为隔离、NAT 和桥接"
msgid "Network subnet must be a string with IP address and prefix or netmask"
-msgstr "网络子网必须是一个IP地址加网络前缀或子网掩码的字符串"
+msgstr ""
+"网络子网是一个具有 IP 地址以及前缀或网络掩码的字符串"
msgid "Network interface must be a string"
-msgstr "网络接口必须是一个字符串"
+msgstr ""
+"网络接口必须是字符串"
msgid "Network VLAN ID must be an integer between 1 and 4094"
-msgstr "网络VLAN号必须是1到4094之间的整数"
+msgstr ""
+"网络 VLAN 标识必须是一个介于 1 到 4094 之间的整数"
msgid "Specify name and type to create a Network"
-msgstr "为新网络指定名字和类型"
+msgstr ""
+"指定名称和类型以创建网络"
#, python-format
msgid ""
"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
"and/or templates linked to this network."
msgstr ""
+"无法删除网络 %(name)s。一些虚拟机 %(vms)s "
+"和/或模板已链接至此网络。"
#, python-format
msgid ""
"Unable to deactivate network %(name)s. There are some virtual machines "
"%(vms)s and/or templates linked to this network."
msgstr ""
+"无法取消激活网络 %(name)s。一些虚拟机 "
+"%(vms)s 和/或模板已链接至此网络。"
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
-msgstr "不能以桥设备%(name)s作为VLAN的trunk设备。"
+msgstr ""
+"网桥设备 %(name)s 不能是 VLAN 的主要设备。"
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr "网络接口启动失败 %(iface)s:%(err)s。"
+msgstr ""
+"未能激活接口 %(iface)s:%(err)s。"
#, python-format
msgid ""
"Failed to activate interface %(iface)s. Please check the physical link "
"status."
-msgstr "网络接口%(iface)s启动失败,请检查网络连接情况。"
+msgstr ""
+"未能激活接口 %(iface)s。请检查物理链路"
+"状态。"
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
-msgstr "启动网络%(name)s失败,详情:%(err)s"
+msgstr ""
+"未能启动网络 %(name)s。详细信息:%(err)s"
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr "诊断报告%(name)s不存在"
+msgstr ""
+"调试报告 %(name)s 不存在"
msgid "Debug report tool not found in system"
-msgstr "系统上没有诊断报告工具"
+msgstr ""
+"系统中找不到调试报告工具"
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
-msgstr "不能创建诊断报告%(name)s。详情:%(err)s"
+msgstr ""
+"无法创建调试报告 %(name)s。详细信息:%(err)s。"
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
-msgstr "未能找到指定名称%(name)s的调试报告"
+msgstr ""
+"找不到具有给定名称 %(name)s 的任何调试报告"
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
-msgstr "不能生成诊断报告%(name)s。详情:%(err)s"
+msgstr ""
+"无法生成调试报告 %(name)s。详细信息:%(err)s"
msgid "You should give a name for the debug report file."
-msgstr "不能生成诊断报告%(name)s。详情:%(err)s"
+msgstr ""
+"您应该为调试报告文件指定名称。"
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
-"调试报告名称必须为一个字符串。只有英文字符,数字,下划线('_')以及连字符('-')"
-"为合法字符。"
+"调试报告名称必须是字符串。只允许包含字母、数字、下划线(“_”)"
+"和连字符(“-”)。"
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
-msgstr "名字为\"'%(name)s\"的调试报告已经存在,请选择其它的名字。"
+msgstr ""
+"具有指定名称“%(name)s”的调试报告已存在。请使用"
+"另一个名称。"
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr "存储服务器%(server)s未被Kimchi使用"
+msgstr ""
+"Kimchi 未使用存储服务器 %(server)s"
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr "发行版本'%(name)s'不存在"
+msgstr ""
+"Distro“%(name)s”不存在"
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr "主机中上没有分区%(name)s"
+msgstr ""
+"分区 %(name)s 在主机中不存在"
msgid "Unable to shutdown host machine as there are running virtual machines"
-msgstr "有虚拟机在运行,不能关闭主机"
+msgstr ""
+"由于存在正在运行的虚拟机而无法关闭主机"
msgid "Unable to reboot host machine as there are running virtual machines"
-msgstr "有虚拟机在运行,不能重起主机"
+msgstr ""
+"由于存在正在运行的虚拟机而无法重新引导主机"
#, python-format
msgid "Node device '%(name)s' not found"
-msgstr "没有找到节点设备'%(name)s'"
+msgstr ""
+"找不到节点设备“%(name)s”"
msgid "Conflicting flag filters specified."
-msgstr "flag filters冲突。"
+msgstr ""
+"指定的标志过滤器有冲突。"
msgid "No packages marked for update"
-msgstr "没有软件包标识要升级"
+msgstr ""
+"未标记要更新的任何软件包"
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr "软件包%(name)s没有标识为要升级"
+msgstr ""
+"软件包 %(name)s 未标记为要进行更新。"
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
-msgstr "获取标识为要升级的软件包时出错。详情:%(err)s"
+msgstr ""
+"获取已标记为要进行更新的软件包时出错。详细信息:%(err)s"
msgid "There is no compatible package manager for this system."
-msgstr "系统上没有兼容的软件包管理器"
+msgstr ""
+"此系统不存在任何兼容的软件包管理器。"
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr "在数据存储中找不到%(item)s"
+msgstr ""
+"在数据存储器中找不到 %(item)s"
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr "无效的URI %(uri)s"
+msgstr ""
+"无效 URI %(uri)s"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
-msgstr "命令'%(cmd)s'运行%(seconds)s秒后超时。"
+msgstr ""
+"运行命令“%(cmd)s”时,在 %(seconds)s 秒后超时"
msgid "Unable to choose a virtual machine name"
-msgstr "未能选择一个虚拟机名称"
+msgstr ""
+"无法选择虚拟机名称"
#, python-format
msgid "Invalid data value '%(value)s'"
msgstr ""
+"无效数据值“%(value)s”"
#, python-format
msgid "Invalid data unit '%(unit)s'"
msgstr ""
+"无效数据单元“%(unit)s”"
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
-msgstr "无效的存储类型。支持类型为:'cdrom','disk'"
+msgstr ""
+"存储类型无效。受支持的类型:“cdrom”和“disk”"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
-msgstr "路径'%(value)s'不是设备的有效本地/远程路径"
+msgstr ""
+"路径“%(value)s”不是设备的有效本地/远程路径"
msgid "Only CDROM path can be update."
-msgstr "仅支持CDROM路径更新。"
+msgstr ""
+"只能更新 CDROM 路径。"
#, python-format
msgid ""
"The storage device %(dev_name)s does not exist in the virtual machine "
"%(vm_name)s"
-msgstr "存储设备%(dev_name)s在虚拟机%(vm_name)s中不存在"
+msgstr ""
+"存储设备 %(dev_name)s 在虚拟机 "
+"%(vm_name)s 中不存在"
#, python-format
msgid "Error while creating new storage device: %(error)s"
-msgstr "创建新的存储设备时出错:%(error)s"
+msgstr ""
+"创建新存储设备时出错:%(error)s"
#, python-format
msgid "Error while updating storage device: %(error)s"
-msgstr "更新存储设备时出错:%(error)s"
+msgstr ""
+"更新存储设备时出错:%(error)s"
#, python-format
msgid "Error while removing storage device: %(error)s"
-msgstr "移除存储设备时出错:%(error)s"
+msgstr ""
+"移除存储设备时出错:%(error)s"
msgid "Do not support IDE device hot plug"
-msgstr "不支持IDE设备的热插拔"
+msgstr ""
+"不支持 IDE 设备热插拔"
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
"disk"
-msgstr "为添加新建虚拟机磁盘指定类型和路径或者类型和存储池/存储卷"
+msgstr ""
+"指定类型和路径或输入池/卷以以添加新虚拟机"
+"磁盘"
msgid "Specify path to update virtual machine disk"
-msgstr "指定更新虚拟机磁盘的路径"
+msgstr ""
+"指定路径以更新虚拟机磁盘"
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
-msgstr "控制器类型为%(type)s的设备达到上限%(limit)s"
+msgstr ""
+"已达到控制器类型 %(type)s 限制 %(limit)s"
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
-msgstr "未能为给出的存储池/存储卷找到对应磁盘路径信息:%(error)s"
+msgstr ""
+"无法检索给定池/卷的磁盘路径信息:%(error)s"
msgid "Volume already in use by other virtual machine."
-msgstr "该卷已经被其他虚拟机使用。"
+msgstr ""
+"其他虚拟机已在使用该卷。"
msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
-msgstr "增加虚拟机磁盘时,仅能指定路径或存储池/存储卷中的一个"
+msgstr ""
+"仅能指定一个路径或池/卷以添加至 "
+"虚拟机磁盘"
#, python-format
msgid ""
"Volume chosen with format %(format)s does not fit in the storage type "
"%(type)s"
-msgstr "格式为%(format)s的卷不符合存储类型%(type)s"
+msgstr ""
+"选择的格式为 %(format)s 的卷不适合于存储类型 "
+"%(type)s"
msgid "YUM Repository ID must be one word only string."
-msgstr "YUM软件仓库ID必须是只包含一个单词的字符串"
+msgstr ""
+"Yum 存储库标识必须是一个单词的唯一字符串。"
msgid "Repository URL must be an http://, ftp:// or file:// URL."
-msgstr "软件仓库URL必须是http://、 ftp:// 或 file://"
+msgstr ""
+"存储库 URL 必须是 http://、ftp:// 或 file:// URL。"
msgid ""
"Repository configuration is a dictionary with specific values according to "
"repository type."
-msgstr "软件仓库配置是一个与仓库键和特定值对应的字典"
+msgstr ""
+"存储库配置是具有针对存储库类型的特定值的"
+"字典。"
msgid "Distribution to DEB repository must be a string"
-msgstr "DEB仓库的发行版本必须是一个字符串"
+msgstr ""
+"DEB 存储库的分发版必须是字符串"
msgid "Components to DEB repository must be listed in a array"
-msgstr "DEB仓库的组件必须以数组形式列出"
+msgstr ""
+"DEB 存储库的组件必须列示在数组中"
msgid "Components to DEB repository must be a string"
-msgstr "DEB仓库的组件必须是一个字符串"
+msgstr ""
+"DEB 存储库的组件必须是字符串"
msgid "Mirror list to repository must be a string"
msgstr ""
+"存储库的镜像列表必须是字符串"
msgid "YUM Repository name must be string."
-msgstr "YUM仓库的名字必须是一个字符串"
+msgstr ""
+"Yum 存储库名称必须是字符串。"
msgid "GPG check must be a boolean value."
-msgstr "GPG校验必须是一个布尔值"
+msgstr ""
+"GPG 检查必须是一个布尔值。"
msgid "GPG key must be a URL pointing to the ASCII-armored file."
-msgstr "GPG键必须是一个指向ASCII转义文件(.asc文件)的URL"
+msgstr ""
+"GPG 密钥必须是指向 ASCII 编码文件的 URL。"
#, python-format
msgid "Could not update repository %(repo_id)s."
-msgstr "不能更新软件仓库%(repo_id)s"
+msgstr ""
+"无法更新存储库 %(repo_id)s。"
#, python-format
msgid "Repository %(repo_id)s does not exist."
-msgstr "软件仓库%(repo_id)s不存在。"
+msgstr ""
+"存储库 %(repo_id)s 不存在。"
msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
"update a YUM repository."
msgstr ""
+"指定存储库基本 URL、镜像列表或元链接以创建或"
+"更新 Yum 存储库。"
msgid "Repository management tool was not recognized for your system."
-msgstr "您的系统无法识别软件管理工具"
+msgstr ""
+"未识别您的系统的存储库管理工具。"
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr "软件仓库%(repo_id)s已经启用。"
+msgstr ""
+"已启用存储库 %(repo_id)s。"
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr "软件仓库%(repo_id)s已经禁用。"
+msgstr ""
+"已禁用存储库 %(repo_id)s。"
#, python-format
msgid "Could not remove repository %(repo_id)s."
-msgstr "不能移除软件仓库%(repo_id)s"
+msgstr ""
+"无法移除存储库 %(repo_id)s。"
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
-msgstr "无法写软件仓库的配置文件%(repo_file)s"
+msgstr ""
+"无法写入存储库配置文件 %(repo_file)s"
msgid "Specify repository distribution in order to create a DEB repository."
-msgstr "指定软件仓库发行版本来创建一个DEB仓库。"
+msgstr ""
+"指定存储库分发版以创建 DEB 存储库。"
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr "不能启用软件仓库%(repo_id)s"
+msgstr ""
+"无法启用存储库 %(repo_id)s。"
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr "不能禁用软件仓库%(repo_id)s"
+msgstr ""
+"无法禁用存储库 %(repo_id)s。"
msgid "YUM Repository ID already exists"
-msgstr "YUM仓库ID已经存在"
+msgstr ""
+"Yum 存储库标识已存在"
msgid "YUM Repository name must be a string"
-msgstr "YUM仓库名字必须是一个字符串"
+msgstr ""
+"Yum 存储库名称必须是字符串"
#, python-format
msgid "Unable to list repositories. Details: '%(err)s'"
-msgstr "不能列举软件仓库。详情:'%(err)s'"
+msgstr ""
+"无法列示存储库。详细信息:“%(err)s”"
#, python-format
msgid "Unable to retrieve repository information. Details: '%(err)s'"
-msgstr "不能获取软件仓库的信息。详情:'%(err)s'"
+msgstr ""
+"无法检索存储库信息。详细信息:“%(err)s”"
#, python-format
msgid "Unable to add repository. Details: '%(err)s'"
-msgstr "不能增加软件仓库。详情:'%(err)s'"
+msgstr ""
+"无法添加存储库。详细信息:“%(err)s”"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr "不能移除软件仓库。详情:'%(err)s'"
+msgstr ""
+"无法移除存储库。详细信息:“%(err)s”"
#, python-format
msgid ""
"Configuration items: '%(items)s' are not supported by repository manager"
-msgstr "软件仓库不支持配置类型: %(items)s"
+msgstr ""
+"配置项:“%(items)s”不受存储库管理器支持"
msgid "Repository metalink must be an http://, ftp:// or file:// URL."
msgstr ""
+"存储库元链接必须是 http://、ftp:// 或 file:// URL。"
msgid "Cannot specify mirrorlist and metalink at the same time."
msgstr ""
+"不能同时指定镜像列表和元链接。"
#, python-format
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
-msgstr "虚拟机'%(vm)s'在制作快照前必须关机。"
+msgstr ""
+"在创建虚拟机“%(vm)s”的快照之前,必须将其停止。"
#, python-format
msgid ""
"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
-msgstr "未能为虚拟机'%(vm)s'制作快照'%(name)s'。详情:%(err)s"
+msgstr ""
+"无法在以下虚拟机上创建快照“%(name)s”:“%(vm)s”。详细信息:"
+"%(err)s"
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
-msgstr "快照'%(name)s'不存在虚拟机'%(vm)s'上。"
+msgstr ""
+"快照“%(name)s”在虚拟机“%(vm)s”上不存在。"
#, python-format
msgid ""
"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
-msgstr "未能在虚拟机'%(vm)s'找到快照'%(name)s'。详情:%(err)s"
+msgstr ""
+"无法在以下虚拟机上检索快照“%(name)s”:“%(vm)s”。详细信息:"
+"%(err)s"
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
-msgstr "未能列出虚拟机'%(vm)s'的快照。详情:%(err)s"
+msgstr ""
+"无法列示虚拟机“%(vm)s”上的快照。详细信息:%(err)s"
#, python-format
msgid ""
"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
-msgstr "未能删除虚拟机'%(vm)s'快照'%(name)s'。详情:%(err)s"
-
+msgstr ""
+"无法删除以下虚拟机上的快照“%(name)s”:“%(vm)s”。详细信息:"
+"%(err)s"
+
#, python-format
msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
-msgstr "未能找到虚拟机'%(vm)s'当前快照。详情:%(err)s"
+msgstr ""
+"无法检索虚拟机“%(vm)s”的当前快照。详细信息:"
+"%(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
-msgstr "未能恢复虚拟机'%(vm)s'到快照'%(name)s'。详情:%(err)s"
+msgstr ""
+"无法将虚拟机“%(vm)s”还原到快照“%(name)s”。详细信息:"
+"%(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
-"未能为虚拟机'%(vm)s'创建快照因为其使用了格式为'%(format)s'的磁盘;当前仅支"
-"持'qcow2'格式。"
+"无法创建虚拟机“%(vm)s”的快照,因为它包含"
+"格式为“%(format)s”的磁盘;仅“qcow2”受支持。"
msgid "The number of vCPUs is too large for this system."
-msgstr "vCPUs的数量对该系统而言太大。"
+msgstr ""
+"vCPU 数对于此系统太大。"
msgid "Invalid vCPU/topology combination."
-msgstr "无效的vCPU/topology组合。"
+msgstr ""
+"无效 vCPU/拓扑组合。"
msgid "This host (or current configuration) does not allow CPU topology."
-msgstr "当前主机(或当前配置)不允许CPU拓扑。"
+msgstr ""
+"此主机(或当前配置)不允许使用 CPU 拓扑。"
msgid "ERROR CODE"
-msgstr "错误码"
+msgstr ""
+"错误代码"
msgid "REASON"
-msgstr "原因"
+msgstr ""
+"原因"
msgid "STACK"
-msgstr "调用栈"
+msgstr ""
+"堆栈"
msgid "Go to Homepage"
-msgstr "返回主页"
+msgstr ""
+"转至主页"
msgid "Create a New Virtual Machine"
-msgstr "创建一个新的虚拟机"
+msgstr ""
+"创建新虚拟机"
msgid "Virtual Machine Name"
-msgstr "虚拟机名称"
+msgstr ""
+"虚拟机名称"
msgid ""
"The name used to identify the virtual machine. If omitted, a name will be "
"chosen based on the template used."
-msgstr "名字是虚拟机的标识。如果省略,将会基于使用的模板选择一个名字。"
+msgstr ""
+"用于标识虚拟机的名称。如果省略,那么将根据所使用的模板选择"
+"一个名称。"
msgid "Template"
-msgstr "模板"
+msgstr ""
+"模板"
msgid "Please create a template first."
-msgstr "请先选择一个模板"
+msgstr ""
+"请先创建模板。"
msgid "Create a Template"
-msgstr "创建一个模板"
+msgstr ""
+"创建模板"
msgid "Please choose a template."
-msgstr "请选择模板。"
+msgstr ""
+"请选择一个模板。"
msgid "OS"
-msgstr "操作系统"
+msgstr ""
+"操作系统"
msgid "OS Version"
-msgstr "操作系统版本"
+msgstr ""
+"操作系统版本"
msgid "CPUS"
-msgstr "中央处理器"
+msgstr ""
+"CPUS"
msgid "Memory"
-msgstr "内存"
+msgstr ""
+"内存"
msgid "Create"
-msgstr "创建"
+msgstr ""
+"创建"
msgid "Creating..."
-msgstr "正在创建..."
+msgstr ""
+"正在创建..."
msgid "Edit Guest"
-msgstr "修改客户机"
+msgstr ""
+"编辑访客"
msgid "General"
-msgstr "常规"
+msgstr ""
+"常规"
msgid "Storage"
-msgstr "存储"
+msgstr ""
+"存储器"
msgid "Interface"
-msgstr "网络接口"
+msgstr ""
+"接口"
msgid "Permission"
-msgstr "权限"
+msgstr ""
+"许可权"
msgid "Host PCI Device"
-msgstr "主机PCI设备"
+msgstr ""
+"主机 PCI 设备"
msgid "Snapshot"
-msgstr "快照"
+msgstr ""
+"快照"
msgid "Name"
-msgstr "名称"
+msgstr ""
+"名称"
msgid "CPUs"
-msgstr "中央处理器"
+msgstr ""
+"CPU 数"
msgid "Memory (MB)"
-msgstr "内存(MB)"
+msgstr ""
+"内存(MB)"
msgid "Icon"
-msgstr "图标"
+msgstr ""
+"图标"
msgid "Device"
-msgstr "设备名称"
+msgstr ""
+"设备"
msgid "Path"
-msgstr "路径"
+msgstr ""
+"路径"
msgid "Network"
-msgstr "网络"
+msgstr ""
+"网络"
msgid "Type"
-msgstr "类型"
+msgstr ""
+"类型"
msgid "MAC Address"
msgstr ""
+"MAC 地址"
msgid "Available system users and groups"
-msgstr "可选的系统用户及用户组"
+msgstr ""
+"可用系统用户和组"
msgid "Selected system users and groups"
-msgstr "已选的系统用户及用户组"
+msgstr ""
+"所选系统用户和组"
msgid "User"
-msgstr "用户"
+msgstr ""
+"用户"
msgid "All"
-msgstr "所有"
+msgstr ""
+"全部"
msgid "To Add"
-msgstr "待添加"
+msgstr ""
+"待添加"
msgid "Added"
-msgstr "已添加"
+msgstr ""
+"已添加"
msgid "filter"
-msgstr "过滤器"
+msgstr ""
+"过滤器"
msgid "Product"
-msgstr "产品"
+msgstr ""
+"产品"
msgid "Vendor"
-msgstr "厂商"
+msgstr ""
+"供应商"
msgid "Created"
-msgstr "创建于"
+msgstr ""
+"已创建"
msgid "Save"
-msgstr "保存"
+msgstr ""
+"保存"
msgid "Replace"
-msgstr "替换"
+msgstr ""
+"替换"
msgid "Detach"
-msgstr "卸载"
+msgstr ""
+"拆离"
msgid "Cancel"
-msgstr "取消"
+msgstr ""
+"取消"
msgid "revert"
-msgstr "恢复"
+msgstr ""
+"还原"
msgid "Add a Storage Device to VM"
-msgstr "为虚拟机添加一个存储设备"
+msgstr ""
+"将存储设备添加至 VM"
msgid "Device Type"
-msgstr "设备类型"
+msgstr ""
+"设备类型"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "设备类型。目前支持设备类型:\"cdrom\"和\"disk\"。 "
+msgstr ""
+"设备类型。当前支持“cdrom”和“disk”。"
msgid "Storage Pool"
-msgstr "存储池"
+msgstr ""
+"存储池"
msgid "Storage pool which volume located in"
-msgstr "存储卷所在的存储池"
+msgstr ""
+"卷位于以下位置的存储池"
msgid "Storage Volume"
-msgstr "存储卷"
+msgstr ""
+"存储卷"
msgid "Storage volume to be attached"
-msgstr "被添加的存储卷"
+msgstr ""
+"要连接的存储卷"
msgid "File Path"
-msgstr "文件路径"
+msgstr ""
+"文件路径"
msgid "The ISO file path in the server for CDROM."
-msgstr "服务器端CDROM所使用的ISO文件路径"
+msgstr ""
+"CDROM 服务器中的 ISO 文件。"
msgid "Attach"
-msgstr "装载"
+msgstr ""
+"连接"
msgid "Start"
-msgstr "启用"
+msgstr ""
+"启动"
msgid "Reset"
-msgstr "重置"
+msgstr ""
+"重置"
msgid "Pause"
msgstr ""
+"暂停"
msgid "Resume"
msgstr ""
+"恢复"
msgid "Power Off"
-msgstr "关闭电源"
+msgstr ""
+"关闭电源"
msgid "Actions"
-msgstr "操作"
+msgstr ""
+"操作"
msgid "Connect"
-msgstr "连接到"
+msgstr ""
+"连接"
msgid "Clone"
-msgstr "制作副本"
+msgstr ""
+"克隆"
msgid "Edit"
-msgstr "编辑"
+msgstr ""
+"编辑"
msgid "Shut Down"
-msgstr "关机"
+msgstr ""
+"关闭"
msgid "Delete"
-msgstr "删除"
+msgstr ""
+"删除"
msgid "The username or password you entered is incorrect. Please try again."
-msgstr "用户名或密码错误,请重新输入。"
+msgstr ""
+"您所输入的用户名或密码不正确。请重试。"
msgid "This field is required."
-msgstr "需要填写此处"
+msgstr ""
+"此字段是必填字段。"
msgid "Log in"
-msgstr "登录"
+msgstr ""
+"登录名"
msgid "Logging in..."
-msgstr "登录中..."
+msgstr ""
+"正在登录..."
msgid "Host"
-msgstr "主机"
+msgstr ""
+"主机"
msgid "Guests"
-msgstr "客户机"
+msgstr ""
+"访客"
msgid "Templates"
-msgstr "模板"
+msgstr ""
+"模板"
msgid "Failed to get application configuration"
-msgstr "获取应用配置失败"
+msgstr ""
+"未能获取应用程序配置"
msgid "This is not a valid Linux path"
-msgstr "这不是一个有效的Linux路径"
+msgstr ""
+"这不是有效的 Linux 路径"
msgid "This is not a valid URL."
-msgstr "这不是一个有效的URL"
+msgstr ""
+"这不是有效的 URL。"
msgid "No such data available."
-msgstr "没有可用的数据"
+msgstr ""
+"没有此类数据可用。"
msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"连接不上主机。请确保主机系统已启动,并且能通过网络连接主机。HTTP请求响应:%1"
+"无法连接主机系统。请验证主机系统是否已启动以及"
+"您是否与其具有网络连接。HTTP 请求响应 %1。"
msgid "Unable to read file."
msgstr ""
+"无法读取文件。"
msgid "Error while uploading file."
msgstr ""
+"上载文件时出错。"
msgid "Delete Confirmation"
-msgstr "删除确认"
+msgstr ""
+"删除确认"
msgid "OK"
-msgstr "确定"
+msgstr ""
+"确定"
msgid "Confirm"
-msgstr "确认"
+msgstr ""
+"确认"
msgid "Warning"
-msgstr "警告"
+msgstr ""
+"警告"
msgid "Cloning..."
msgstr ""
+"正在克隆..."
msgid "Loading..."
-msgstr "正在加载..."
+msgstr ""
+"正在装入..."
msgid "An error occurred while retrieving system information."
msgstr ""
+"检索系统信息时发生错误。"
msgid "Retry"
-msgstr "重试"
+msgstr ""
+"重试"
msgid "Detailed message:"
-msgstr "详细消息:"
+msgstr ""
+"详细消息:"
msgid "No ISO found"
-msgstr "没有发现ISO文件"
+msgstr ""
+"找不到 ISO"
msgid "This is not a valid ISO file."
-msgstr "这不是一个有效的ISO文件"
+msgstr ""
+"这不是有效的 ISO 文件。"
msgid "This may take a long time. Do you want to continue?"
-msgstr "这需要一段时间。是否继续?"
+msgstr ""
+"这可能需要较长时间。要继续吗?"
msgid "This will permanently delete the template. Would you like to continue?"
-msgstr "这将永久删除模板。是否继续?"
+msgstr ""
+"这将永久删除该模板。要继续吗?"
msgid "Unable to shut down system as there are some virtual machines running!"
-msgstr "有虚拟机在运行,不能关闭主机。"
+msgstr ""
+"由于存在一些正在运行的虚拟机而无法关闭系统!"
msgid "Max:"
-msgstr "最大:"
+msgstr ""
+"最大值:"
msgid "Utilization"
-msgstr "利用率"
+msgstr ""
+"利用率"
msgid "Available"
-msgstr "可利用的"
+msgstr ""
+"可用"
msgid "Read Rate"
-msgstr "读速率"
+msgstr ""
+"读速率"
msgid "Write Rate"
-msgstr "写速率"
+msgstr ""
+"写速率"
msgid "Received"
-msgstr "接收"
+msgstr ""
+"已接收"
msgid "Sent"
-msgstr "发送"
+msgstr ""
+"已发送"
msgid ""
"Shutting down or restarting host will cause unsaved work lost. Continue to "
"shut down/restarting?"
-msgstr "关闭或者重启主机会导致没有保存的工作丢失。继续关机/重启?"
+msgstr ""
+"关闭或重新启动主机将导致未保存的工作丢失。要继续"
+"关闭/重新启动吗?"
msgid ""
"Repository will be removed permanently and can't be recovered. Do you want "
"to continue?"
-msgstr "软件仓库将被永久删除,不能恢复。是否继续?"
+msgstr ""
+"存储库将被永久除去并且无法恢复。要"
+"继续吗?"
msgid "Repositories"
-msgstr "软件仓库"
+msgstr ""
+"存储库"
msgid "ID"
-msgstr "标识符"
+msgstr ""
+"标识"
msgid "Base URL"
-msgstr "基本URL"
+msgstr ""
+"基本 URL"
msgid "Is Mirror"
-msgstr "是否为镜像"
+msgstr ""
+"是镜像"
msgid "URL Args"
-msgstr "URL参数"
+msgstr ""
+"URL 参数"
msgid "Enabled"
-msgstr "已启用"
+msgstr ""
+"已启用"
msgid "GPG Check"
-msgstr "GPG校验"
+msgstr ""
+"GPG 检查"
msgid "GPG Key"
-msgstr "GPG键"
+msgstr ""
+"GPG 密钥"
msgid "Add"
-msgstr "增加"
+msgstr ""
+"添加"
msgid "Remove"
-msgstr "删除"
+msgstr ""
+"除去"
msgid "Enable"
-msgstr "使能"
+msgstr ""
+"启用"
msgid "Disable"
-msgstr "禁用"
+msgstr ""
+"禁用"
msgid "Software Updates"
-msgstr "软件更新"
+msgstr ""
+"软件更新"
msgid "Package Name"
-msgstr "软件包名称"
+msgstr ""
+"软件包名称"
msgid "Version"
-msgstr "版本"
+msgstr ""
+"版本"
msgid "Architecture"
-msgstr "体系结构"
+msgstr ""
+"体系结构"
msgid "Repository"
-msgstr "软件仓库"
+msgstr ""
+"存储库"
msgid "Update All"
-msgstr "更新所有"
+msgstr ""
+"全部更新"
msgid "Updating..."
-msgstr "正在更新..."
+msgstr ""
+"正在更新..."
msgid "Failed to retrieve packages update information."
-msgstr "查找软件包更新信息失败。"
+msgstr ""
+"未能检索软件包更新信息。"
msgid "Failed to update package(s)."
-msgstr "更新软件包失败"
+msgstr ""
+"未能更新软件包。"
msgid ""
"Debug report will be removed permanently and can't be recovered. Do you want "
"to continue?"
-msgstr "诊断报告将被永久删除,并且不能恢复。是否继续?"
+msgstr ""
+"调试报告将被永久除去并且无法恢复。要"
+"继续吗?"
msgid "Debug Reports"
-msgstr "主机诊断报告"
+msgstr ""
+"调试报告"
msgid "Generated Time"
-msgstr "生成时间"
+msgstr ""
+"生成时间"
msgid "Generate"
-msgstr "生成"
+msgstr ""
+"生成"
msgid "Generating..."
-msgstr "正在生成..."
+msgstr ""
+"正在生成..."
msgid "Rename"
-msgstr "重命名"
+msgstr ""
+"重命名"
msgid "Download"
-msgstr "下载"
+msgstr ""
+"下载"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
"hyphen ('-')."
-msgstr "报告名字中只能包含字母、数字、下划线('_')和连字符('-')"
+msgstr ""
+"报告名称应该只包含字母、数字、下划线(“_”)和/或"
+"连字符(“-”)。"
msgid "Pending..."
-msgstr "正在加载..."
+msgstr ""
+"正在暂挂..."
msgid "Report name is the same as the original one."
-msgstr "报告名称与原始名称重复。"
+msgstr ""
+"报告名称与原始报告名称相同。"
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
"cannot be undone. Would you like to continue?"
-msgstr "这将删除虚拟机和它的虚拟磁盘。该操作不能撤销,继续吗?"
+msgstr ""
+"这将删除虚拟机及其虚拟盘。此操作"
+"无法撤销。要继续吗?"
msgid "Power off Confirmation"
-msgstr "关闭电源确认"
+msgstr ""
+"关闭电源确认"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
"cache in the guest. Would you like to continue?"
-msgstr "这样做可能导致不良后果,比如客户机磁盘缓存未刷新,确认要继续吗?"
+msgstr ""
+"此操作可能会产生不需要的结果,例如,"
+"在访客中留下未清空的高速缓存。要继续吗?"
msgid "Reset Confirmation"
-msgstr "重置确认"
+msgstr ""
+"重置确认"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
"Would you like to continue?"
-msgstr "在客户机操作系统未关闭的情况下重置有风险导致数据丢失,确认要继续吗?"
+msgstr ""
+"如果不关闭访客操作系统,那么会有数据丢失的风险。"
+"要继续吗?"
msgid "Shut Down Confirmation"
-msgstr "关机确认"
+msgstr ""
+"关闭确认"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
-msgstr "注意,客户机操作系统可能会忽略这个请求,确认要继续吗?"
+msgstr ""
+"注意,访客操作系统可能会忽略此请求。要继续吗?"
msgid "Virtual Machine delete Confirmation"
-msgstr "虚拟机删除确认"
+msgstr ""
+"虚拟机删除确认"
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
-msgstr "该虚拟机不是一个稳定的虚拟机,关机将会删除它,是否继续?"
+msgstr ""
+"此虚拟机不是持久虚拟机。关闭电源会将其删除。是否继续?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
"default storage pool. The same will happen when the target pool does not "
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
-"当目标客户机使用SCSI或者iSCSI存储卷时,这些存储卷的副本将被放置于默认存储池"
-"中。在目标存储池没有足够空间放置其他存储卷的时候也会如此。确认继续?"
+"当目标访客具有 SCSI 或 iSCSI 卷时,将在缺省存储池中"
+"对这些卷进行克隆。当目标池不具有对这些卷进行克隆的"
+"足够空间时,将发生同样的情况。要继续吗?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
-msgstr "CDROM将被永久卸载,你可以重新装载它。继续卸载?"
+msgstr ""
+"此 CDROM 将被永久拆离但您可以对其进行重新连接。要"
+"继续拆离吗?"
msgid "Attaching..."
-msgstr "正在装载"
+msgstr ""
+"正在连接..."
msgid "Replacing..."
-msgstr "正在替换..."
+msgstr ""
+"正在替换..."
msgid "Successfully attached!"
-msgstr "成功装载"
+msgstr ""
+"已成功连接!"
msgid "Successfully replaced!"
-msgstr "成功替换"
+msgstr ""
+"已成功替换!"
msgid "Successfully detached!"
-msgstr "成功卸载"
+msgstr ""
+"已成功拆离!"
msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
-msgstr "该磁盘将会被永久卸载,你可以重新添加它,继续执行卸载操作吗?"
+msgstr ""
+"此磁盘将被永久拆离但您可以对其进行重新连接。"
+"要继续拆离吗?"
msgid "interface:"
-msgstr "接口:"
+msgstr ""
+"接口:"
msgid "address:"
-msgstr "地址:"
+msgstr ""
+"地址:"
msgid "link_type:"
-msgstr "连接类型:"
+msgstr ""
+"链接类型:"
msgid "block:"
-msgstr "块:"
+msgstr ""
+"块:"
msgid "drive_type:"
-msgstr "设备类型:"
+msgstr ""
+"驱动类型:"
msgid "model:"
-msgstr "模型:"
+msgstr ""
+"模型:"
msgid "Affected devices:"
-msgstr "被影响的设备:"
+msgstr ""
+"受影响的设备:"
msgid "The VLAN id must be between 1 and 4094."
-msgstr "VLAN 标识符必须在1至4094之间"
+msgstr ""
+"VLAN 标识必须介于 1 到 4094 之间。"
msgid "unavailable"
-msgstr "无法获取"
+msgstr ""
+"不可用"
msgid ""
"This action will interrupt network connectivity for any virtual machine that "
"depend on this network."
-msgstr "此操作将中断依赖此网络的虚拟机的网络连接。"
+msgstr ""
+"此操作将中断依赖于此网络的任何虚拟机"
+"的网络连接。"
msgid "Create a network"
-msgstr "创建一个网络"
+msgstr ""
+"创建网络"
msgid ""
"This network is not persistent. Instead of stop, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"这是一个临时的网络配置,该操作会永久地删除这个网络而不是停止其运行,确定要继"
-"续吗?"
+"此网络不是持久的。此操作会将其永久"
+"删除,而不是将其停止。要继续吗?"
msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
+"在启用了网络管理器的情况下,桥接 VLAN 标记的工作情况可能不良。您"
+"应该考虑禁用网络管理器。"
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
-msgstr "这将永久删除存储池。是否继续?"
+msgstr ""
+"这将永久删除该存储池。要继续吗?"
msgid "This storage pool is empty."
-msgstr "这个存储池为空"
+msgstr ""
+"此存储池为空。"
msgid ""
"It will format your disk and you will loose any data in there, are you sure "
"to continue? "
-msgstr "你的磁盘将会格式化,磁盘上的数据会丢失,你确定要继续吗?"
+msgstr ""
+"这将对磁盘进行格式化并且您将丢失其中的任何数据,确定要"
+"继续吗?"
msgid "SCSI Fibre Channel"
-msgstr "SCSI光纤通道"
+msgstr ""
+"SCSI 光纤通道"
msgid "No SCSI adapters found."
-msgstr "没有发现SCSI适配器"
+msgstr ""
+"找不到任何 SCSI 适配器。"
msgid "Loading iSCSI targets..."
-msgstr "读取iSCSI目标..."
+msgstr ""
+"正在装入 iSCSI 目标..."
msgid "No iSCSI found. Please input one."
-msgstr "未能找到iSCSI,请输入一个。"
+msgstr ""
+"找不到 iSCSI。请输入一个 iSCSI。"
msgid "Failed to load iSCSI targets."
-msgstr "读取iSCSI目标失败。"
+msgstr ""
+"未能装入 iSCSI 目标。"
msgid "The storage pool name can not be blank."
-msgstr "存储池的名称不能为空。"
+msgstr ""
+"存储池名称不能为空白。"
msgid "The storage pool path can not be blank."
-msgstr "存储池的路径不能为空。"
+msgstr ""
+"存储池路径不能为空白。"
msgid "NFS server mount path can not be blank."
-msgstr "NFS服务器挂载路径不能为空。"
+msgstr ""
+"NFS 服务器安装路径不能为空白。"
msgid "Invalid NFS mount path."
-msgstr "无效的NFS挂载路径。"
+msgstr ""
+"NFS 安装路径无效。"
msgid "No logical device selected."
-msgstr "没有选择逻辑设备。"
+msgstr ""
+"未选择任何逻辑设备。"
msgid "The iSCSI target can not be blank."
-msgstr "iSCSI目标不能为空。"
+msgstr ""
+"此 iscsi 目标不能为空白。"
msgid "Server name can not be blank."
-msgstr "服务器不能为空。"
+msgstr ""
+"服务器名称不能为空白。"
msgid "This is not a valid Server Name or IP. Please, modify it."
-msgstr "这不是你个有效的服务器名称或IP地址,请对其进行修改。"
+msgstr ""
+"这不是有效的服务器名称或 IP。请对其进行修改。"
msgid "Looking for available partitions ..."
-msgstr "查找有效的分区 ..."
+msgstr ""
+"正在查找可用分区..."
msgid "No available partitions found."
-msgstr "没有发现模板。"
+msgstr ""
+"找不到任何可用分区。"
msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
"permanently delete it. Would you like to continue?"
-msgstr "对于非持久存储池,这个操作将会永久删除存储池而不是停用。是否继续?"
+msgstr ""
+"此存储池不是持久存储池。此操作会将其永久删除,"
+"而不是将其取消激活。要继续吗?"
msgid "Unable to retrieve partitions information."
-msgstr "未能找到分区信息。"
+msgstr ""
+"无法检索分区信息。"
msgid "In progress..."
-msgstr "正在进行..."
+msgstr ""
+"正在进行中..."
msgid "Failed!"
-msgstr "失败!"
+msgstr ""
+"失败!"
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
-msgstr "CDROM路径需要一个有效的本地/远程路径且不能为空。"
+msgstr ""
+"CDROM 路径必须是有效的本地/远程路径,并且不能为空白。"
msgid "Disk pool or volume cannot be blank."
-msgstr "存储池或卷不能为空"
+msgstr ""
+"磁盘池或卷不能为空白。"
msgid "Peers"
-msgstr "对等机"
+msgstr ""
+"同级"
msgid "Searching"
-msgstr "正在查询"
+msgstr ""
+"正在搜索"
msgid "No peers found."
-msgstr "没有发现对等机。"
+msgstr ""
+"找不到同级。"
msgid "Help"
-msgstr "帮助"
+msgstr ""
+"帮助"
msgid "About"
-msgstr "关于"
+msgstr ""
+"关于"
msgid "Log out"
-msgstr "登出"
+msgstr ""
+"注销"
msgid "Version:"
-msgstr "版本:"
+msgstr ""
+"版本:"
msgid "Session timeout, please re-login."
-msgstr "登录超时,请重新登录。"
+msgstr ""
+"会话超时,请重新登录。"
msgid "User Name"
-msgstr "用户名"
+msgstr ""
+"用户名"
msgid "Password"
-msgstr "密码"
+msgstr ""
+"密码"
msgid "Generate a New Debug Report"
-msgstr "产生一个新的诊断报告"
+msgstr ""
+"生成新调试报告"
msgid "Report Name"
-msgstr "诊断报告名"
+msgstr ""
+"报告名称"
msgid ""
"The name used to identify the report. If omitted, a name will be chosen "
"based on current time. Name can contain: letters, digits, underscore (\"_\") "
"and hyphen (\"-\")."
msgstr ""
-"名字用来标识诊断报告。如果省略,将会基于当前时间生成一个新名字。名字中可以包"
-"含字母、数字、下划线 ('_') 和连字符('-')"
+"用于标识报告的名称。如果省略,那么将根据当前时间"
+"选择名称。名称可以包含:字母、数字、下划线(“_”)"
+"和连字符(“-”)。"
msgid "Rename a Debug Report"
-msgstr "重命名一个调试报告"
+msgstr ""
+"重命名调试报告"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
"hyphen (\"-\")."
-msgstr "报告的唯一表示名称,名称可以包含:英文字符,数字和连字符(\"-\")。"
+msgstr ""
+"用于标识报告的名称。名称可以包含:字母、数字和"
+"连字符(“-”)。"
msgid "Submit"
-msgstr "提交"
+msgstr ""
+"提交"
msgid "Add a Repository"
-msgstr "增加一个软件仓库"
+msgstr ""
+"添加存储库"
msgid "Identifier"
-msgstr "标识符"
+msgstr ""
+"标识"
msgid "Single word, unique identifier for the repository."
-msgstr "一个单词,唯一标识软件仓库"
+msgstr ""
+"一个字,存储库的唯一标识。"
msgid "Textual name for the repository."
-msgstr "软件仓库的字面名字"
+msgstr ""
+"存储库的文本名称。"
msgid "URL"
-msgstr "URL"
+msgstr ""
+"URL"
msgid "Required Field"
-msgstr "必需的字段"
+msgstr ""
+"必填字段"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
-msgstr "软件仓库的URL,支持的协议有http、ftp、和file"
+msgstr ""
+"存储库的 URL。受支持的协议为 http、ftp 和 file。"
msgid "Repository is a mirror"
-msgstr "软件仓库是一个镜像"
+msgstr ""
+"存储库是一个镜像"
msgid "Distribution"
-msgstr "发行版"
+msgstr ""
+"分发"
msgid "Distribution of the DEB repository."
-msgstr "DEB仓库的发行版"
+msgstr ""
+"DEB 存储库的分发版。"
msgid "Components"
-msgstr "组件"
+msgstr ""
+"组件"
msgid "List of components in DEB repository."
-msgstr "DEB仓库中的组件列表"
+msgstr ""
+"DEB 存储库中组件的列表。"
msgid "Edit Repository"
-msgstr "修改软件仓库"
+msgstr ""
+"编辑存储库"
msgid "Mirror List URL"
-msgstr "镜像列表URL"
+msgstr ""
+"镜像列表 URL"
msgid "Yes"
-msgstr "是"
+msgstr ""
+"是"
msgid "No"
-msgstr "否"
+msgstr ""
+"否"
msgid "Add a Volume to Storage Pool"
-msgstr "为存储池添加一个卷"
+msgstr ""
+"将卷添加至存储池"
msgid "Fetch from remote URL"
-msgstr "从远程URL获取"
+msgstr ""
+"从远程 URL 中访存"
msgid "Enter the remote URL here."
-msgstr "在这里输入远程URL。"
+msgstr ""
+"在此处输入远程 URL。"
msgid "Upload a file"
-msgstr "上传一个文件"
+msgstr ""
+"上载文件"
msgid "Choose the file you want to upload."
-msgstr "选择需要上传的文件。"
+msgstr ""
+"选择要上载的文件。"
msgid "Define a New Storage Pool"
-msgstr "定义一个新的存储池"
+msgstr ""
+"定义新存储池"
msgid "Storage Pool Name"
-msgstr "存储池名称"
+msgstr ""
+"存储池名称"
msgid ""
"The name used to identify the storage pools, and it should not be empty."
-msgstr "该名称用来唯一标识存储池,该名称不能为空。"
+msgstr ""
+"用于标识存储池的名称,且该名称不能为空。"
msgid "Storage Pool Type"
-msgstr "存储池类型"
+msgstr ""
+"存储池类型"
msgid "Storage Path"
-msgstr "存储路径"
+msgstr ""
+"存储路径"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
-msgstr "存储池的路径.每个存储池的路径是唯一的。"
+msgstr ""
+"存储池的路径。每个存储池都必须具有唯一路径。"
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
"your system."
-msgstr "如果目录不存在,KIMCHI会自动在系统中创建一个新的目录"
+msgstr ""
+"Kimchi 将尝试在目录在系统中尚不存在时"
+"对其进行创建。"
msgid "NFS Server IP"
-msgstr "NFS服务器IP"
+msgstr ""
+"NFS 服务器 IP"
msgid "NFS server IP or hostname. It can be input or chosen from history."
-msgstr "NFS服务器IP或者主机名,可以直接输入或者从历史记录中选取。"
+msgstr ""
+"NFS 服务器 IP 或主机名。可以输入该值,也可以从历史记录中选择。"
msgid "NFS Path"
-msgstr "NFS 路径"
+msgstr ""
+"NFS 路径"
msgid "The NFS exported path on NFS server."
-msgstr "NFS服务器上导出的NFS路径"
+msgstr ""
+"NFS 服务器中 NFS 已导出路径。"
msgid "Device path"
-msgstr "设备路径"
+msgstr ""
+"设备路径"
msgid "iSCSI Server"
-msgstr "iSCSI服务器"
+msgstr ""
+"iSCSI 服务器"
msgid "iSCSI server IP or hostname. It should not be empty."
-msgstr "iSCSI服务器IP或者主机名, 不能为空。"
+msgstr ""
+"iSCSI 服务器 IP 或主机名。它不应为空。"
msgid "Server"
-msgstr "服务器"
+msgstr ""
+"服务器"
msgid "Port"
-msgstr "端口"
+msgstr ""
+"端口"
msgid "Target"
-msgstr "目标"
+msgstr ""
+"目标"
msgid "The iSCSI target on iSCSI server"
-msgstr "iSCSI目标"
+msgstr ""
+"iSCSI 服务器上的 iSCSI 目标"
msgid "Add iSCSI Authentication"
-msgstr "添加ISCSI认证"
+msgstr ""
+"添加 iSCSI 认证"
msgid "iSCSI Authentication"
-msgstr "iSCSI认证"
+msgstr ""
+"iSCSI 认证"
msgid "SCSI Adapter"
-msgstr "SCSI适配器"
+msgstr ""
+"SCSI 适配器"
msgid "Please, wait..."
-msgstr "请等待..."
+msgstr ""
+"请稍等..."
msgid "Add Template"
-msgstr "创建模板"
+msgstr ""
+"添加模板"
msgid "Where is the source media for this template? "
-msgstr "模板的源介质在哪里?"
+msgstr ""
+"此模板的源介质在哪里?"
msgid "Local ISO Image"
-msgstr "本地ISO镜像"
+msgstr ""
+"本地 ISO 映像"
msgid "Local Image File"
-msgstr "本地镜像文件"
+msgstr ""
+"本地映像文件"
msgid "Remote ISO Image"
-msgstr "远程ISO镜像"
+msgstr ""
+"远程 ISO 映像"
msgid "Search ISOs"
-msgstr "搜索ISO"
+msgstr ""
+"搜索 ISO"
msgid "The following ISOs are available:"
-msgstr "可用ISO文件如下"
+msgstr ""
+"以下 ISO 可用:"
msgid "OS: "
-msgstr "操作系统: "
+msgstr ""
+"操作系统:"
msgid "Version: "
-msgstr "版本: "
+msgstr ""
+"版本:"
msgid "Size: "
-msgstr "大小:"
+msgstr ""
+"大小:"
msgid "Search more ISOs"
-msgstr "搜索更多ISO"
+msgstr ""
+"搜索更多 ISO"
msgid "Create Templates from Selected ISO"
-msgstr "从选中的ISO中创建模板"
+msgstr ""
+"从所选 ISO 创建模板"
msgid "I want to use a specific ISO file"
-msgstr "指定一个ISO文件"
+msgstr ""
+"我要使用特定 ISO 文件"
msgid "Loading default remote ISOs ..."
-msgstr "加载默认的远程ISOs ..."
+msgstr ""
+"正在装入缺省远程 ISO..."
msgid "Arch: "
-msgstr "体系结构:"
+msgstr ""
+"归档:"
msgid "I want to use a custom URL"
-msgstr "我想用一个自定义的URL"
+msgstr ""
+"我要使用定制 URL"
msgid "Edit Template"
-msgstr "编辑模板"
+msgstr ""
+"编辑模板"
msgid "Processor"
-msgstr "处理器"
+msgstr ""
+"处理器"
msgid "CDROM"
-msgstr "光驱"
+msgstr ""
+"CDROM"
msgid "Image File"
-msgstr "镜像文件"
+msgstr ""
+"映象文件"
msgid "Graphics"
-msgstr "图形"
+msgstr ""
+"图形"
msgid "Disk(GB)"
-msgstr "磁盘(GB)"
+msgstr ""
+"磁盘 (GB)"
msgid "Disk Format"
msgstr ""
+"磁盘格式"
msgid "CPU Number"
-msgstr "CPU个数"
+msgstr ""
+"CPU 数"
msgid "Manually set CPU topology"
-msgstr "手动配置CPU拓扑"
+msgstr ""
+"手动设置 CPU 拓扑"
msgid "Cores"
-msgstr "内核数"
+msgstr ""
+"核心"
msgid "Threads"
-msgstr "线程"
+msgstr ""
+"线程"
msgid "CPU"
-msgstr "处理器"
+msgstr ""
+"CPU"
msgid "Disk I/O"
-msgstr "磁盘I/O"
+msgstr ""
+"磁盘 I/O"
msgid "Network I/O"
-msgstr "网络I/O"
+msgstr ""
+"网络 I/O"
msgid "Livetile"
-msgstr "屏幕"
+msgstr ""
+"Livetile"
msgid "No guests found."
-msgstr "没有发现客户机"
+msgstr ""
+"找不到访客。"
msgid "Shut down"
-msgstr "关机"
+msgstr ""
+"关闭"
msgid "Restart"
-msgstr "重启"
+msgstr ""
+"重新启动"
msgid "Basic Information"
-msgstr "基本信息"
+msgstr ""
+"基本信息"
msgid "OS Distro"
-msgstr "操作系统发行版"
+msgstr ""
+"操作系统 Distro"
msgid "OS Code Name"
-msgstr "操作系统代号"
+msgstr ""
+"操作系统代码名称"
msgid "CPU(s)"
-msgstr "CPU(s)"
+msgstr ""
+"CPU"
msgid "System Statistics"
-msgstr "系统统计信息"
+msgstr ""
+"系统统计信息"
msgid "Update Progress"
-msgstr "更新进度"
+msgstr ""
+"更新进度"
msgid "Network Name"
-msgstr "网络名称"
+msgstr ""
+"网络名"
msgid "State"
-msgstr "状态"
+msgstr ""
+"状态"
msgid "Network Type"
-msgstr "网络类型"
+msgstr ""
+"网络类型"
msgid "Address Space"
-msgstr "地址空间"
+msgstr ""
+"地址空间"
msgid "Name should not contain '/' and '\"'."
-msgstr "名字中不能包含‘/’和'\"'。"
+msgstr ""
+"名称不应包含“/”和“\"”。"
msgid "Isolated: no external network connection"
-msgstr "隔离: 同物理网络不连通"
+msgstr ""
+"隔离:没有外部网络连接"
msgid "NAT: outbound physical network connection only"
-msgstr "NAT: 从虚拟机到物理网络单向连接"
+msgstr ""
+"NAT:仅适用于出站物理网络连接"
msgid "Bridged: Virtual machines are connected to physical network directly"
-msgstr "桥接:虚拟机可以直接连接到物理网络中。"
+msgstr ""
+"桥接:虚拟机将直接连接到物理网络"
msgid "(No interfaces found)"
-msgstr "(没有发现网络接口)"
+msgstr ""
+"(找不到任何接口)"
msgid "Destination"
-msgstr "目标设备"
+msgstr ""
+"目的地"
msgid "Enable VLAN"
-msgstr "启用VLAN"
+msgstr ""
+"启用 VLAN"
msgid "VLAN ID"
-msgstr "VLAN号"
+msgstr ""
+"VLAN 标识"
msgid "Stop"
-msgstr "停止"
+msgstr ""
+"停止"
msgid "%Used"
msgstr ""
+"已用百分比"
msgid "Location"
-msgstr "路径"
+msgstr ""
+"位置 "
msgid "Capacity"
-msgstr "容量"
+msgstr ""
+"容量"
msgid "Allocated"
-msgstr "已分配"
+msgstr ""
+"已分配"
msgid "active"
-msgstr "已激活"
+msgstr ""
+"活动"
msgid "inactive"
-msgstr "未激活"
+msgstr ""
+"非活动"
msgid "Deactivate"
-msgstr "停用"
+msgstr ""
+"取消激活"
msgid "Activate"
-msgstr "激活"
+msgstr ""
+"激活"
msgid "Add Volume"
-msgstr "添加卷"
+msgstr ""
+"添加卷"
msgid "Extend"
-msgstr "扩展"
+msgstr ""
+"扩展"
msgid "Undefine"
-msgstr "取消定义"
+msgstr ""
+"取消定义"
msgid "Format"
-msgstr "格式"
+msgstr ""
+"格式"
msgid "Allocation"
-msgstr "分配"
+msgstr ""
+"分配"
msgid "No templates found."
-msgstr "没有发现模板"
+msgstr ""
+"找不到任何模板。"
+
+# ENGL1SH_VERS10N 28617_40 DO NOT REMOVE OR CHANGE THIS LINE
+# T9N_SRC_ID 92
+# T9N_SH1P_STR1NG KV310AAP001 1
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 342142a..33755d7 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -1,5 +1,6 @@
# English translations for kimchi package.
# Copyright (C) 2013 ORGANIZATION
+# Adam Litke <agl(a)us.ibm.com>, 2013.
#
msgid ""
msgstr ""
@@ -9,133 +10,165 @@ msgstr ""
"PO-Revision-Date: 2013-07-11 17:32-0400\n"
"Last-Translator: Crístian Viana <vianac(a)linux.vnet.ibm.com>\n"
"Language-Team: English\n"
-"Language: zh_TW\n"
+"Language: en_US\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=1; plural=0;"
#, python-format
msgid "Unknown parameter %(value)s"
msgstr ""
+"不明參數 %(value)s"
#, python-format
msgid "Delete is not allowed for %(resource)s"
-msgstr "不容許針對 %(resource)s 執行刪除"
+msgstr ""
+"不容許針對 %(resource)s 執行刪除作業"
#, python-format
msgid "%(resource)s does not implement update method"
-msgstr "%(resource)s 未實作更新方法"
+msgstr ""
+"%(resource)s 未實作更新方法"
#, python-format
msgid "Create is not allowed for %(resource)s"
-msgstr "不容許針對 %(resource)s 執行建立"
+msgstr ""
+"不容許針對 %(resource)s 執行建立作業"
msgid "Unable to parse JSON request"
-msgstr "無法剖析 JSON 要求"
+msgstr ""
+"無法剖析 JSON 要求"
msgid "This API only supports JSON"
-msgstr "此 API 僅支援 JSON"
+msgstr ""
+"此 API 僅支援 JSON"
#, python-format
msgid "Parameters does not match requirement in schema: %(err)s"
msgstr ""
+"參數與綱目中的需求不符:%(err)s"
msgid "You don't have permission to perform this operation."
msgstr ""
+"您無權執行這項作業。"
msgid "Datastore is not initiated in the model object."
-msgstr "未在模型物件中起始資料儲存庫。"
+msgstr ""
+"未在模型物件中起始資料儲存庫。"
#, python-format
msgid "Unable to start task due error: %(err)s"
-msgstr "由於下列錯誤,無法開始工作:%(err)s"
+msgstr ""
+"由於發生錯誤,無法開始工作:%(err)s"
#, python-format
msgid "Timeout of %(seconds)s seconds expired while running task '%(task)s."
msgstr ""
+"執行作業 '%(task)s' 時,超過逾時值 %(seconds)s 秒。"
#, python-format
msgid "Authentication failed for user '%(username)s'. [Error code: %(code)s]"
-msgstr "使用者 '%(username)s' 的鑑別失敗。[錯誤碼:%(code)s]"
+msgstr ""
+"針對使用者 '%(username)s' 的鑑別失敗。[錯誤碼:%(code)s]"
msgid "You are not authorized to access Kimchi"
-msgstr "您未獲授權來存取 Kimchi"
+msgstr ""
+"您未獲授權來存取 Kimchi"
#, python-format
msgid "Specify %(item)s to login into Kimchi"
-msgstr "指定 %(item)s 以登入 Kimchi"
+msgstr ""
+"指定 %(item)s 以登入 Kimchi"
#, python-format
msgid "User %(user_id)s not found with given LDAP settings."
msgstr ""
+"找不到具有給定 LDAP 設定的使用者 %(user_id)s。"
#, python-format
msgid "Invalid LDAP configuration: %(item)s : %(value)s"
msgstr ""
+"LDAP 配置無效:%(item)s:%(value)s"
msgid "Unknown \"_cap\" specified"
msgstr ""
+"指定的 \"_cap\" 不明"
msgid "\"_passthrough\" should be \"true\" or \"false\""
msgstr ""
+"\"_passthrough\" 應該是 \"true\" 或 \"false\""
msgid "\"_passthrough_affected_by\" should be a device name string"
msgstr ""
+"\"_passthrough_affected_by\" 應該是裝置名稱字串"
#, python-format
msgid "Error while getting block devices. Details: %(err)s"
-msgstr "取得區塊裝置時發生錯誤。詳細資料:%(err)s"
+msgstr ""
+"取得區塊裝置時發生錯誤。詳細資料:%(err)s"
#, python-format
msgid "Error while getting block device information for %(device)s."
-msgstr "取得 %(device)s 的區塊裝置資訊時發生錯誤。"
+msgstr ""
+"取得 %(device)s 的區塊裝置資訊時發生錯誤。"
#, python-format
msgid "Unable to find distro file: %(filename)s"
-msgstr "找不到 distro 檔案:%(filename)s"
+msgstr ""
+"找不到 distro 檔:%(filename)s"
#, python-format
msgid ""
"Unable to parse distro file: %(filename)s. Make sure, it is a JSON file."
-msgstr "無法剖析 distro 檔案:%(filename)s。請確保它是 JSON 檔案。"
+msgstr ""
+"無法剖析 distro 檔:%(filename)s。請確保該檔案是 JSON 檔。"
#, python-format
msgid "Unable to login to iSCSI host target %(portal)s. Details: %(err)s"
-msgstr "無法登入 iSCSI 主機目標 %(portal)s。詳細資料:%(err)s"
+msgstr ""
+"無法登入 iSCSI 主機目標 %(portal)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to login to iSCSI host %(host)s target %(target)s"
-msgstr "無法登入 iSCSI 主機 %(host)s 目標 %(target)s"
+msgstr ""
+"無法登入 iSCSI 主機 %(host)s 目標 %(target)s"
#, python-format
msgid "Unable to find ISO file %(filename)s"
msgstr ""
+"找不到 ISO 檔 %(filename)s"
#, python-format
msgid "The ISO file %(filename)s is not bootable"
-msgstr "ISO 檔案 %(filename)s 不可開機"
+msgstr ""
+"ISO 檔 %(filename)s 不可啟動"
#, python-format
msgid "The ISO file %(filename)s does not have a valid El Torito boot record"
-msgstr "ISO 檔案 %(filename)s 沒有有效的 El Torito 開機記錄"
+msgstr ""
+"ISO 檔 %(filename)s 沒有有效的 El Torito 啟動記錄"
#, python-format
msgid "Invalid El Torito validation entry in ISO %(filename)s"
-msgstr "ISO %(filename)s 中有無效的 El Torito 驗證項目"
+msgstr ""
+"ISO %(filename)s 中有無效的 El Torito 驗證項目"
#, python-format
msgid "Invalid El Torito boot indicator in ISO %(filename)s"
-msgstr "ISO %(filename)s 中有無效的 El Torito 啟動指示器"
+msgstr ""
+"ISO %(filename)s 中有無效的 El Torito 啟動指示器"
#, python-format
msgid "Unexpected volume type for primary volume in ISO %(filename)s"
-msgstr "ISO %(filename)s 中有主要磁碟區的非預期磁區類型"
+msgstr ""
+"ISO %(filename)s 中有主要磁碟區的非預期磁區類型"
#, python-format
msgid "Bad format while reading volume descriptor in ISO %(filename)s"
-msgstr "讀取 ISO %(filename)s 中的磁區描述子時遇到不當的格式"
+msgstr ""
+"讀取 ISO %(filename)s 中的磁區描述子時遇到不當的格式"
#, python-format
msgid ""
@@ -145,208 +178,265 @@ msgid ""
"'%(user)s' to the ISO path group, or (not recommended) 'chmod -R o+x "
"'path_to_iso'.Details: %(err)s"
msgstr ""
-"Hypervisor 沒有使用此 ISO %(filename)s 的許可權。請考量將其移動至 /var/lib/"
-"libvirt 下、將搜尋許可權設為'%(user)s' 使用者的檔案存取控制清單(若有可能)、"
-"將 '%(user)s' 新增至 ISO 路徑群組或(建議不要執行此動作)執行 'chmod -R o+x "
-"'path_to_iso'。詳細資料:%(err)s"
+"Hypervisor 無權使用此 ISO %(filename)s。"
+"請考量將其移動至 /var/lib/libvirt 下、將搜尋許可權設為"
+"'%(user)s' 使用者的檔案存取控制清單(若有可能)、"
+"將 '%(user)s' 新增至 ISO 路徑群組或(建議不要執行此動作)"
+"'chmod -R o+x 'path_to_iso'。詳細資料:%(err)s"
msgid "An error occurred when probing image OS information."
msgstr ""
+"探測映像檔 OS 資訊時發生錯誤。"
msgid "No OS information found in given image."
msgstr ""
+"在給定的映像檔中,找不到 OS 資訊。"
#, python-format
msgid "Unable to read image file %(filename)s"
msgstr ""
+"無法讀取映像檔 %(filename)s"
#, python-format
msgid ""
"Image file must be an existing file on system. %(filename)s is not a valid "
"input."
msgstr ""
+"映像檔必須是系統上的現有檔案。%(filename)s 不是有效的"
+"輸入。"
#, python-format
msgid "Virtual machine %(name)s already exists"
-msgstr "虛擬機器 %(name)s 已存在"
+msgstr ""
+"虛擬機器 %(name)s 已經存在"
#, python-format
msgid "Virtual machine %(name)s does not exist"
-msgstr "虛擬機器 %(name)s 不存在"
+msgstr ""
+"虛擬機器 %(name)s 不存在"
#, python-format
msgid ""
"Unable to rename virtual machine %(name)s. The name %(new_name)s is already "
"in use or the virtual machine is not powered off."
msgstr ""
+"無法重新命名虛擬機器 %(name)s。名稱 %(new_name)s 已經"
+"在使用中,或者未關閉該虛擬機器的電源。"
#, python-format
msgid "Unable to retrieve screenshot for stopped virtual machine %(name)s"
-msgstr "無法擷取已停止虛擬機器 %(name)s 的畫面"
+msgstr ""
+"無法擷取已停止虛擬機器 %(name)s 的畫面"
msgid "Remote ISO image is not supported by this server."
-msgstr "此伺服器不支援遠端 ISO 映像檔。"
+msgstr ""
+"此伺服器不支援遠端 ISO 映像檔。"
#, python-format
msgid "Screenshot is not supported on virtual machine %(name)s"
msgstr ""
+"擷取畫面在虛擬機器 %(name)s 上不受支援"
#, python-format
msgid "Unable to create virtual machine %(name)s. Details: %(err)s"
-msgstr "無法建立虛擬機器 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法建立虛擬機器 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to update virtual machine %(name)s. Details: %(err)s"
-msgstr "無法建立虛擬機器 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法更新虛擬機器 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to retrieve virtual machine %(name)s. Details: %(err)s"
-msgstr "無法擷取虛擬機器 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法擷取虛擬機器 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to connect to powered off virtual machine %(name)s."
msgstr ""
+"無法連接至已關閉電源的虛擬機器 %(name)s。"
msgid "Virtual machine name must be a string without slashes (/)"
msgstr ""
+"虛擬機器名稱必須是不含斜線 (/) 的字串"
#, python-format
msgid "Invalid template URI %(value)s specified for virtual machine"
msgstr ""
+"為虛擬機器指定的範本 URI %(value)s 無效"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for virtual machine"
msgstr ""
+"為虛擬機器指定的儲存區 URI %(value)s 無效"
msgid "Supported virtual machine graphics are Spice or VNC"
msgstr ""
+"受支援的虛擬機器圖形是 Spice 或 VNC"
msgid "Graphics address to listen on must be IPv4 or IPv6"
-msgstr "要接聽的圖形卡位址必須是 IPv4 或 IPv6"
+msgstr ""
+"要接聽的圖形卡位址必須是 IPv4 或 IPv6"
msgid "Specify a template to create a virtual machine from"
-msgstr "指定用於建立虛擬機器的範本"
+msgstr ""
+"指定用於建立虛擬機器的範本"
#, python-format
msgid "Unable to start virtual machine %(name)s. Details: %(err)s"
-msgstr "無法啟動虛擬機器 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法啟動虛擬機器 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to power off virtual machine %(name)s. Details: %(err)s"
-msgstr "無法停止虛擬機器 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法關閉虛擬機器 %(name)s 的電源。詳細資料:%(err)s"
#, python-format
msgid "Unable to delete virtual machine %(name)s. Details: %(err)s"
-msgstr "無法刪除虛擬機器 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法刪除虛擬機器 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to reset virtual machine %(name)s. Details: %(err)s"
-msgstr "無法重新命名虛擬機器 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法重設虛擬機器 %(name)s。詳細資料:%(err)s"
msgid "User name list must be an array"
msgstr ""
+"使用者名稱清單必須是陣列"
msgid "User name must be a string"
-msgstr "網路名稱必須是字串"
+msgstr ""
+"使用者名稱必須是字串"
msgid "Group name list must be an array"
msgstr ""
+"群組名稱清單必須是陣列"
msgid "Group name must be a string"
-msgstr "網路名稱必須是字串"
+msgstr ""
+"群組名稱必須是字串"
#, python-format
msgid "User(s) '%(users)s' do not exist"
-msgstr "使用者 '%(users)s' 不存在。"
+msgstr ""
+"使用者 '%(users)s' 不存在"
#, python-format
msgid "Group(s) '%(groups)s' do not exist"
-msgstr "使用者 '%(groups)s' 不存在。"
+msgstr ""
+"群組 '%(groups)s' 不存在"
#, python-format
msgid "Unable to shutdown virtual machine %(name)s. Details: %(err)s"
-msgstr "無法停止虛擬機器 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法關閉虛擬機器 %(name)s。詳細資料:%(err)s"
#, python-format
msgid ""
"Unable to get access metadata of virtual machine %(name)s. Details: %(err)s"
-msgstr "無法啟動虛擬機器 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法取得虛擬機器 %(name)s 的存取 meta 資料。詳細資料:%(err)s"
msgid "The guest console password must be a string."
msgstr ""
+"客體主控台密碼必須是字串。"
msgid "The life time for the guest console password must be a number."
msgstr ""
+"客體主控台密碼的生命期限必須是數字。"
#, python-format
msgid "Virtual machine '%(name)s' must be stopped before cloning it."
msgstr ""
+"必須先停止虛擬機器 '%(name)s',然後再複製該虛擬機器。"
#, python-format
msgid "Insufficient disk space to clone virtual machine '%(name)s'"
msgstr ""
+"磁碟空間不足,無法複製虛擬機器 '%(name)s'"
#, python-format
msgid "Unable to clone VM '%(name)s'. Details: %(err)s"
msgstr ""
+"無法複製 VM '%(name)s'。詳細資料:%(err)s"
#, python-format
msgid "Invalid operation for non-persistent virtual machine %(name)s"
msgstr ""
+"針對非持續性虛擬機器 %(name)s 的作業無效"
#, python-format
msgid "Cannot suspend VM '%(name)s' because it is not running."
msgstr ""
+"無法暫停 VM '%(name)s',因為該 VM 未處於執行中狀態。"
#, python-format
msgid "Unable to suspend VM '%(name)s'. Details: %(err)s"
msgstr ""
+"無法暫停 VM '%(name)s'。詳細資料:%(err)s"
#, python-format
msgid "Cannot resume VM '%(name)s' because it is not paused."
msgstr ""
+"無法回復 VM '%(name)s',因為該 VM 未處於暫停狀態。"
#, python-format
msgid "Unable to resume VM '%(name)s'. Details: %(err)s"
msgstr ""
+"無法回復 VM '%(name)s'。詳細資料:%(err)s"
msgid "Memory assigned is higher then the maximum allowed in the host."
msgstr ""
+"所指派的記憶體高於主機中所容許使用的上限。"
#, python-format
msgid ""
"VM '%(name)s' does not support live memory update. Update the memory with "
"the machine offline to enable this feature."
msgstr ""
+"VM '%(name)s' 不支援即時記憶體更新。請在機器處於離線狀態時"
+"更新記憶體,以啟用此功能。"
msgid "Only increase memory is allowed in active VMs"
msgstr ""
+"作用中的 VM 只容許增加記憶體"
msgid ""
"For live memory update, new memory value must be equal old memory value plus "
"multiples of 1024 Mib"
msgstr ""
+"對於即時記憶體更新,新的記憶體值必須等於舊記憶體值加上"
+"1024 Mib 的倍數"
msgid "There are not enough free slots of 1024 Mib in the guest."
msgstr ""
+"客體中可用的 1024 Mib 插槽不足。"
msgid ""
"Host's libvirt version does not support memory devices. Libvirt must be >= "
"1.2.14"
msgstr ""
+"主機的 libvirt 版本不支援記憶體裝置。Libvirt 必須大於等於"
+"1.2.14"
#, python-format
msgid "Error attaching memory device. Details: %(error)s"
msgstr ""
+"連接記憶體裝置時發生錯誤。詳細資料:%(error)s"
#, python-format
msgid ""
"VM %(vmid)s does not contain directly assigned host device %(dev_name)s."
msgstr ""
+"VM %(vmid)s 不包含直接指派的主機裝置 %(dev_name)s。"
#, python-format
msgid "The host device %(dev_name)s is not allowed to directly assign to VM."
msgstr ""
+"不容許將主機裝置 %(dev_name)s 直接指派給 VM。"
msgid ""
"No IOMMU groups found. Host PCI pass through needs IOMMU group to function "
@@ -355,1822 +445,2397 @@ msgid ""
"to your Kernel parameter in /boot/grub2/grub.conf. For AMD CPU, add iommu=pt "
"iommu=1."
msgstr ""
+"找不到 IOMMU 群組。主機 PCI 透通需要 IOMMU 群組才能"
+"正常運作。請在 BIOS 中啟用 Intel VT-d 或 AMD IOMMU,然後驗證"
+"是否使用 IOMMU 支援編譯了核心。若為 Intel CPU,請將 intel_iommu=on "
+"新增至 /boot/grub2/grub.conf 中的核心參數。若為 AMD CPU,請新增 iommu=pt "
+"iommu=1。"
msgid "\"name\" should be a device name string"
msgstr ""
+"\"name\" 應該是裝置名稱字串"
#, python-format
msgid ""
"The device %(name)s is probably in use by the host. Unable to attach it to "
"the guest."
msgstr ""
+"主機可能正在使用裝置 %(name)s。無法將該裝置連接至"
+"客體。"
#, python-format
msgid "Interface %(iface)s does not exist in virtual machine %(name)s"
-msgstr "介面 %(iface)s 不存在於虛擬機器 %(name)s 中"
+msgstr ""
+"介面 %(iface)s 不在虛擬機器 %(name)s 中"
#, python-format
msgid ""
"Network %(network)s specified for virtual machine %(name)s does not exist"
-msgstr "為虛擬機器 %(name)s 指定的網路 %(network)s 不存在"
+msgstr ""
+"為虛擬機器 %(name)s 指定的網路 %(network)s 不存在"
msgid "Supported virtual machine interfaces type is only network"
-msgstr "唯一受支援的虛擬機器介面類型是網路"
+msgstr ""
+"唯一受支援的虛擬機器介面類型是網路"
msgid "Network name for virtual machine interface must be a string"
-msgstr "虛擬機器介面的網路名稱必須是字串"
+msgstr ""
+"虛擬機器介面的網路名稱必須是字串"
msgid "Invalid network model card specified for virtual machine interface"
-msgstr "為虛擬機器介面指定的網路模型卡無效"
+msgstr ""
+"為虛擬機器介面指定的網路模型卡無效"
msgid "Specify type and network to add a new virtual machine interface"
-msgstr "指定類型和網路以新增虛擬機器介面"
+msgstr ""
+"指定類型和網路以新增虛擬機器介面"
msgid "MAC Address must respect this format FF:FF:FF:FF:FF:FF"
msgstr ""
+"「MAC 位址」必須遵循下列格式:FF:FF:FF:FF:FF:FF"
#, python-format
msgid "MAC Address %(mac)s already exists in virtual machine %(name)s"
msgstr ""
+"「MAC 位址」%(mac)s 已經存在於虛擬機器 %(name)s 中"
msgid "Invalid MAC Address"
msgstr ""
+"MAC 位址無效"
msgid "Cannot change MAC address of a running virtual machine"
msgstr ""
+"無法變更執行中虛擬機器的 MAC 位址"
#, python-format
msgid "Template %(name)s already exists"
-msgstr "範本 %(name)s 已存在"
+msgstr ""
+"範本 %(name)s 已經存在"
#, python-format
msgid ""
"Network '%(network)s' specified for template %(template)s does not exist"
-msgstr "為範本 %(template)s 指定的網路 '%(network)s' 不存在"
+msgstr ""
+"為範本 %(template)s 指定的網路 '%(network)s' 不存在"
#, python-format
msgid ""
"Storage pool %(pool)s specified for template %(template)s does not exist"
-msgstr "為範本 %(template)s 指定的儲存區 '%(pool)s' 不存在"
+msgstr ""
+"為範本 %(template)s 指定的儲存區 %(pool)s 不存在"
#, python-format
msgid "Storage pool %(pool)s specified for template %(template)s is not active"
-msgstr "為範本 %(template)s 指定的儲存區 '%(pool)s' 未處於作用中狀態"
+msgstr ""
+"為範本 %(template)s 指定的儲存區 %(pool)s 處於非作用中狀態"
#, python-format
msgid "Invalid parameter '%(param)s' specified for CDROM."
-msgstr "為 CDROM 指定的參數 '%(param)s' 無效。"
+msgstr ""
+"為 CDROM 指定的參數 '%(param)s' 無效。"
#, python-format
msgid "Network %(network)s specified for template %(template)s is not active"
-msgstr "為範本 %(template)s 指定的網路 %(network)s 未處於作用中狀態"
+msgstr ""
+"為範本 %(template)s 指定的網路 %(network)s 處於非作用中狀態"
msgid "Template name must be a string"
-msgstr "範本名稱必須是字串"
+msgstr ""
+"範本名稱必須是字串"
msgid "Template icon must be a path to the image"
-msgstr "範本圖示必須是影像的路徑"
+msgstr ""
+"範本圖示必須是影像的路徑"
msgid "Template distribution must be a string"
-msgstr "範本發行套件必須是字串"
+msgstr ""
+"範本發行套件必須是字串"
msgid "Template distribution version must be a string"
-msgstr "範本發行版本必須是字串"
+msgstr ""
+"範本發行版本必須是字串"
msgid "The number of CPUs must be an integer greater than 0"
-msgstr "CPU 數目必須是整數"
+msgstr ""
+"CPU 數目必須是大於 0 的整數"
msgid "Amount of memory (MB) must be an integer greater than 512"
-msgstr "記憶體數量 (MB) 必須是大於 512 的整數"
+msgstr ""
+"記憶體數量 (MB) 必須是大於 512 的整數"
msgid "Template CDROM must be a local or remote ISO file"
-msgstr "範本 CDROM 必須是本端或遠端 ISO 檔案"
+msgstr ""
+"範本 CDROM 必須是本端或遠端 ISO 檔案"
#, python-format
msgid "Invalid storage pool URI %(value)s specified for template"
-msgstr "為範本指定的儲存區 URI %(value)s 無效"
+msgstr ""
+"為範本指定的儲存區 URI %(value)s 無效"
msgid "Specify an ISO image as CDROM or a base image to create a template"
-msgstr "指定 ISO 映像檔作為 CDROM 以建立範本"
+msgstr ""
+"指定 ISO 映像檔作為 CDROM 或基本映像檔,以建立範本"
msgid "All networks for the template must be specified in a list."
-msgstr "範本的所有網路都必須在清單中指定。"
+msgstr ""
+"範本的所有網路都必須在清單中指定。"
msgid "Specify a volume to a template when storage pool is iSCSI or SCSI"
msgstr ""
+"當儲存區是 iSCSI 或 SCSI 時,請將磁區指定給範本"
#, python-format
msgid "The volume %(volume)s is not in storage pool %(pool)s"
msgstr ""
+"磁區 %(volume)s 不在儲存區 %(pool)s 中"
#, python-format
msgid "Unable to create template due error: %(err)s"
-msgstr "由於下列錯誤,無法建立範本:%(err)s"
+msgstr ""
+"由於發生錯誤,無法建立範本:%(err)s"
#, python-format
msgid "Unable to delete template due error: %(err)s"
-msgstr "由於下列錯誤,無法刪除範本:%(err)s"
+msgstr ""
+"由於發生錯誤,無法刪除範本:%(err)s"
msgid "Disk size must be an integer greater than 1GB."
msgstr ""
+"磁碟大小必須是大於 1 GB 的整數。"
msgid "Template base image must be a valid local image file"
-msgstr "範本 CDROM 必須是本端或遠端 ISO 檔案"
+msgstr ""
+"範本基本映像檔必須是有效的本端映像檔"
#, python-format
msgid "Cannot identify base image %(path)s format"
msgstr ""
+"無法識別基本映像檔 %(path)s 格式"
msgid ""
"When specifying CPU topology, VCPUs must be a product of sockets, cores, and "
"threads."
msgstr ""
+"指定 CPU 拓蹼時,VCPU 必須是 Socket、核心及"
+"執行緒的產品。"
msgid ""
"When specifying CPU topology, each element must be an integer greater than "
"zero."
msgstr ""
+"指定 CPU 拓蹼時,每一個元素都必須是大於 0 的"
+"整數。"
msgid ""
"Invalid disk image format. Valid formats: bochs, cloop, cow, dmg, qcow, "
"qcow2, qed, raw, vmdk, vpc."
msgstr ""
+"磁碟映像檔格式無效。有效的格式:bochs、cloop、cow、dmg、qcow、"
+"qcow2、qed、raw、vmdk 和 vpc。"
#, python-format
msgid "Storage pool %(name)s already exists"
-msgstr "儲存區 %(name)s 已存在"
+msgstr ""
+"儲存區 %(name)s 已經存在"
#, python-format
msgid "Storage pool %(name)s does not exist"
-msgstr "儲存區 %(name)s 不存在"
+msgstr ""
+"儲存區 %(name)s 不存在"
#, python-format
msgid "Specify %(item)s in order to create the storage pool %(name)s"
-msgstr "指定 %(item)s 以建立儲存區 %(name)s"
+msgstr ""
+"指定 %(item)s 以建立儲存區 %(name)s"
#, python-format
msgid "Unable to delete active storage pool %(name)s"
-msgstr "無法刪除作用中的儲存區 %(name)s"
+msgstr ""
+"無法刪除作用中的儲存區 %(name)s"
#, python-format
msgid "Unable to list storage pools. Details: %(err)s"
-msgstr "無法列出儲存區。詳細資料:%(err)s"
+msgstr ""
+"無法列出儲存區。詳細資料:%(err)s"
#, python-format
msgid "Unable to create storage pool %(name)s. Details: %(err)s"
-msgstr "無法建立儲存區 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法建立儲存區 %(name)s。詳細資料:%(err)s"
#, python-format
msgid ""
"Unable to get number of storage volumes in storage pool %(name)s. Details: "
"%(err)s"
-msgstr "無法取得儲存區 %(name)s 中儲存磁區的數目。詳細資料:%(err)s"
+msgstr ""
+"無法取得儲存區 %(name)s 中的儲存磁區數目。詳細資料:"
+"%(err)s"
#, python-format
msgid "Unable to activate storage pool %(name)s. Details: %(err)s"
-msgstr "無法啟動儲存區 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法啟動儲存區 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to deactivate storage pool %(name)s. Details: %(err)s"
-msgstr "無法取消啟動儲存區 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法取消啟動儲存區 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to delete storage pool %(name)s. Details: %(err)s"
-msgstr "無法刪除儲存區 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法刪除儲存區 %(name)s。詳細資料:%(err)s"
#, python-format
msgid ""
"Unable to create NFS Pool as export path %(path)s may block during mount"
-msgstr "無法建立 NFS 儲存區,因為在裝載期間,匯出路徑 %(path)s 可能會封鎖"
+msgstr ""
+"無法建立 NFS 儲存區,因為在裝載期間,匯出路徑 %(path)s 可能會封鎖"
#, python-format
msgid "Unable to create NFS Pool as export path %(path)s mount failed"
-msgstr "無法建立 NFS 儲存區,因為匯出路徑 %(path)s 裝載失敗"
+msgstr ""
+"無法建立 NFS 儲存區,因為匯出路徑 %(path)s 裝載失敗"
#, python-format
msgid "Unsupported storage pool type: %(type)s"
-msgstr "不受支援的儲存區類型:%(type)s"
+msgstr ""
+"不受支援的儲存區類型:%(type)s"
#, python-format
msgid "Error while retrieving storage pool XML to %(pool)s"
msgstr ""
+"擷取儲存區 XML 至 %(pool)s 時發生錯誤"
msgid "Storage pool name must be a string without slashes (/)"
msgstr ""
+"儲存區名稱必須是不含斜線 (/) 的字串"
msgid ""
"Supported storage pool types are dir, netfs, logical, iscsi, isci and kimchi-"
"iso"
msgstr ""
+"受支援的儲存區類型是 dir、netfs、邏輯、iscsi、isci 和 kimchi-"
+"iso"
msgid "Storage pool path must be a string"
-msgstr "儲存區路徑必須是字串"
+msgstr ""
+"儲存區路徑必須是字串"
msgid "Storage pool host must be a IP or hostname"
-msgstr "儲存區主機必須是 IP 或主機名稱"
+msgstr ""
+"儲存區主機必須是 IP 或主機名稱"
msgid "Storage pool device must be the absolute path to the block device"
msgstr ""
+"儲存區裝置必須是區塊裝置的絕對路徑"
msgid "Storage pool devices parameter must be a list"
-msgstr "儲存區裝置參數必須是清單"
+msgstr ""
+"儲存區裝置參數必須是清單"
msgid "Target IQN of an iSCSI pool must be a string"
-msgstr "iSCSI 儲存區的目標 IQN 必須是字串"
+msgstr ""
+"iSCSI 儲存區的目標 IQN 必須是字串"
msgid "Port of a remote storage server must be an integer between 1 and 65535"
-msgstr "遠端儲存體伺服器的埠必須是介於 1 和 65535 之間的整數"
+msgstr ""
+"遠端儲存體伺服器的埠必須是介於 1 和 65535 之間的整數"
msgid "iSCSI target username must be a string"
msgstr ""
+"iSCSI 目標使用者名稱必須是字串"
msgid "iSCSI target password must be a string"
msgstr ""
+"iSCSI 目標密碼必須是字串"
msgid "Specify name and type to create a storage pool"
-msgstr "指定名稱和類型以建立儲存區"
+msgstr ""
+"指定名稱和類型以建立儲存區"
#, python-format
msgid ""
"%(disk)s is not a valid disk/partition. Could not add it to the pool "
"%(pool)s."
-msgstr "%(disk)s 不是有效的磁碟/分割區。無法將它新增至儲存區%(pool)s。"
+msgstr ""
+"%(disk)s 不是有效的磁碟/分割區。無法將其新增至儲存區"
+"%(pool)s。"
#, python-format
msgid "Unable to extend logical pool %(pool)s. Details: %(err)s"
msgstr ""
+"無法延伸邏輯儲存區 %(pool)s。詳細資料:%(err)s"
msgid "The parameter disks only can be updated for logical storage pool."
-msgstr "只能針對邏輯儲存區更新「僅限磁碟」參數。"
+msgstr ""
+"只能針對邏輯儲存區更新「僅限磁碟」參數。"
msgid "The SCSI host adapter name must be a string."
-msgstr "SCSI 主機配接卡名稱必須是字串。"
+msgstr ""
+"SCSI 主機配接卡名稱必須是字串。"
msgid "The storage pool kimchi_isos is reserved for internal use"
-msgstr "儲存區 kimchi_isos 保留供內部使用"
+msgstr ""
+"儲存區 kimchi_isos 保留供內部使用"
#, python-format
msgid ""
"Unable to activate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
-msgstr "無法啟動 NFS 儲存區 %(name)s。NFS 伺服器 %(server)s無法連線。"
+msgstr ""
+"無法啟動 NFS 儲存區 %(name)s。NFS 伺服器 %(server)s"
+"無法連線。"
#, python-format
msgid ""
"Unable to deactivate NFS storage pool %(name)s. NFS server %(server)s is "
"unreachable."
-msgstr "無法取消啟動 NFS 儲存區 %(name)s。NFS 伺服器 %(server)s無法連線。"
+msgstr ""
+"無法取消啟動 NFS 儲存區 %(name)s。NFS 伺服器 %(server)s"
+"無法連線。"
#, python-format
msgid ""
"Unable to deactivate pool %(name)s as it is associated with some templates"
-msgstr "無法取消啟動儲存區 %(name)s,因為它與部分範本相關聯"
+msgstr ""
+"無法取消啟動儲存區 %(name)s,因為它與部分範本相關聯"
#, python-format
msgid "Unable to delete pool %(name)s as it is associated with some templates"
-msgstr "無法刪除儲存區 %(name)s,因為它與部分範本相關聯"
+msgstr ""
+"無法刪除儲存區 %(name)s,因為它與部分範本相關聯"
#, python-format
msgid ""
"A volume group named '%(name)s' already exists. Please, choose another name "
"to create the logical pool."
-msgstr "名為 '%(name)s' 的磁區群組已存在。請選擇另一個名稱以建立邏輯儲存區。"
+msgstr ""
+"名為 '%(name)s' 的磁區群組已存在。請選擇另一個名稱"
+"以建立邏輯儲存區。"
#, python-format
msgid "Unable to update database with deep scan information due error: %(err)s"
-msgstr "由於下列錯誤,無法使用深層掃描資訊來更新資料庫:%(err)s"
+msgstr ""
+"由於下列錯誤,無法使用深層掃描資訊來更新資料庫:%(err)s"
#, python-format
msgid "Storage volume %(name)s already exists"
-msgstr "儲存磁區 %(name)s 已存在"
+msgstr ""
+"儲存磁區 %(name)s 已經存在"
#, python-format
msgid "Storage volume %(name)s does not exist in storage pool %(pool)s"
-msgstr "儲存磁區 %(name)s 不存在於儲存區 %(pool)s 中"
+msgstr ""
+"儲存磁區 %(name)s 不在儲存區 %(pool)s 中"
#, python-format
msgid ""
"Unable to create storage volume %(volume)s because storage pool %(pool)s is "
"not active"
msgstr ""
+"無法建立儲存磁區 %(volume)s,因為儲存區 %(pool)s"
+"未處於作用中狀態"
#, python-format
msgid "Specify %(item)s in order to create storage volume %(volume)s"
-msgstr "指定 %(item)s 以建立儲存磁區 %(volume)s"
+msgstr ""
+"指定 %(item)s 以建立儲存磁區 %(volume)s"
#, python-format
msgid ""
"Unable to list storage volumes because storage pool %(pool)s is not active"
-msgstr "無法列出儲存磁區,因為儲存區 %(pool)s 未處於作用中狀態"
+msgstr ""
+"無法列出儲存磁區,因為儲存區 %(pool)s 未處於作用中狀態"
#, python-format
msgid ""
"Unable to create storage volume %(name)s in storage pool %(pool)s. Details: "
"%(err)s"
-msgstr "無法在儲存區 %(pool)s 中建立儲存磁區 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法在儲存區 %(pool)s 中建立儲存磁區 %(name)s。詳細資料:"
+"%(err)s"
#, python-format
msgid ""
"Unable to list storage volumes in storage pool %(pool)s. Details: %(err)s"
-msgstr "無法列出儲存區 %(pool)s 中的儲存磁區。詳細資料:%(err)s"
+msgstr ""
+"無法列出儲存區 %(pool)s 中的儲存磁區。詳細資料:%(err)s"
#, python-format
msgid "Unable to wipe storage volumes %(name)s. Details: %(err)s"
-msgstr "無法清除儲存磁區 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法清除儲存磁區 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to delete storage volume %(name)s. Details: %(err)s"
-msgstr "無法刪除儲存磁區 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法刪除儲存磁區 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to resize storage volume %(name)s. Details: %(err)s"
-msgstr "無法調整儲存磁區 %(name)s 的大小。詳細資料:%(err)s"
+msgstr ""
+"無法調整儲存磁區 %(name)s 的大小。詳細資料:%(err)s"
#, python-format
msgid "Storage type %(type)s does not support volume create and delete"
-msgstr "儲存體類型 %(type)s 不支援磁區建立和刪除"
+msgstr ""
+"儲存體類型 %(type)s 不支援磁區建立和刪除"
msgid "Storage volume name must be a string"
-msgstr "儲存磁區名稱必須是字串"
+msgstr ""
+"儲存磁區名稱必須是字串"
msgid "Storage volume allocation must be an integer number"
-msgstr "儲存磁區配置必須是整數"
+msgstr ""
+"儲存磁區配置必須是整數"
msgid ""
"Storage volume format not supported. Valid formats: bochs, cloop, cow, dmg, "
"qcow, qcow2, qed, raw, vmdk, vpc."
msgstr ""
+"儲存磁區格式不受支援。有效的格式:bochs、cloop、cow、dmg、"
+"qcow、qcow2、qed、raw、vmdk 和 vpc。"
msgid "Storage volume requires a volume name"
-msgstr "儲存磁區需要磁區名稱"
+msgstr ""
+"儲存磁區需要磁區名稱"
#, python-format
msgid ""
"Unable to update database with storage volume information due error: %(err)s"
-msgstr "由於下列錯誤,無法使用儲存磁區資訊來更新資料庫:%(err)s"
+msgstr ""
+"由於下列錯誤,無法使用儲存磁區資訊來更新資料庫:%(err)s"
#, python-format
msgid "Only one of parameter %(param)s can be specified"
msgstr ""
+"只能指定其中一個參數 %(param)s"
#, python-format
msgid "Create volume from %(param)s is not supported"
msgstr ""
+"不支援從 %(param)s 建立磁區"
msgid "Storage volume capacity must be an integer number."
msgstr ""
+"儲存磁區容量必須是整數。"
msgid "Storage volume URL must be http://, https://, ftp:// or ftps://."
msgstr ""
+"儲存磁區 URL 必須是 http://、https://、ftp:// 或 ftps://。"
#, python-format
msgid "Unable to access file %(url)s. Please, check it."
msgstr ""
+"無法存取檔案 %(url)s。請檢查該檔案。"
#, python-format
msgid ""
"Unable to clone storage volume '%(name)s' in pool '%(pool)s'. Details: "
"%(err)s"
msgstr ""
+"無法複製儲存區 '%(pool)s' 中的儲存磁區 '%(name)s'。詳細資料:"
+"%(err)s"
msgid "Specify chunk data and its size to upload a file."
msgstr ""
+"指定區塊資料及其大小以上傳檔案。"
msgid "In order to upload a storage volume, specify the 'upload' parameter."
msgstr ""
+"若要上傳儲存磁區,請指定 'upload' 參數。"
msgid ""
"Unable to upload chunk data as it does not match with requested chunk size."
msgstr ""
+"無法上傳區塊資料,因為該區塊資料與所要求的區塊大小不符。"
#, python-format
msgid "The storage volume %(vol)s is not under an upload process."
msgstr ""
+"儲存磁區 %(vol)s 未在上傳過程中。"
msgid "The upload chunk data will exceed the storage volume size."
msgstr ""
+"上傳區塊資料將超過儲存磁區大小。"
#, python-format
msgid "Unable to upload chunk data to storage volume. Details: %(err)s."
msgstr ""
+"無法將區塊資料上傳至儲存磁區。詳細資料:%(err)s。"
#, python-format
msgid "Interface %(name)s does not exist"
-msgstr "介面 %(name)s 不存在"
+msgstr ""
+"介面 %(name)s 不存在"
#, python-format
msgid "Network %(name)s already exists"
-msgstr "網路 %(name)s 已存在"
+msgstr ""
+"網路 %(name)s 已經存在"
#, python-format
msgid "Network %(name)s does not exist"
-msgstr "網路 %(name)s 不存在"
+msgstr ""
+"網路 %(name)s 不存在"
#, python-format
msgid "Subnet %(subnet)s specified for network %(network)s is not valid."
-msgstr "為網路 %(network)s 指定的子網路 %(subnet)s 無效。"
+msgstr ""
+"為網路 %(network)s 指定的子網路 %(subnet)s 無效。"
#, python-format
msgid "Specify a network interface to create bridged network %(name)s"
-msgstr "指定網路介面以建立橋接的網路 %(name)s"
+msgstr ""
+"指定網路介面,以建立橋接網路 %(name)s"
#, python-format
msgid "Unable to delete active network %(name)s"
-msgstr "無法刪除作用中的網路 %(name)s"
+msgstr ""
+"無法刪除作用中的網路 %(name)s"
#, python-format
msgid "Interface %(iface)s specified for network %(network)s is already in use"
-msgstr "為網路 %(network)s 指定的介面 %(iface)s 已在使用中"
+msgstr ""
+"為網路 %(network)s 指定的介面 %(iface)s 已在使用中。"
msgid "Interface should be bare NIC, bonding or bridge device."
-msgstr "介面應該是裸露 NIC、接合裝置或橋接器裝置。"
+msgstr ""
+"介面應該是裸露 NIC、接合裝置或橋接器裝置。"
#, python-format
msgid "Unable to create network %(name)s. Details: %(err)s"
-msgstr "無法建立網路 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法建立網路 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Unable to find a free IP address for network '%(name)s'"
-msgstr "找不到網路 '%(name)s' 的可用 IP 位址"
+msgstr ""
+"找不到網路 '%(name)s' 的可用 IP 位址"
#, python-format
msgid "The interface %(iface)s already exists."
msgstr ""
+"介面 %(iface)s 已經存在。"
msgid "Network name must be a string without slashes (/) or quotes (\")"
msgstr ""
+"網路名稱必須是不含斜線 (/) 或引號 (\") 的字串"
msgid "Supported network types are isolated, NAT and bridge"
-msgstr "受支援的網路類型是隔離式、NAT 和橋接器"
+msgstr ""
+"受支援的網路類型是隔離式、NAT 和橋接器"
msgid "Network subnet must be a string with IP address and prefix or netmask"
-msgstr "網路的子網路必須是含有 IP 位址、字首或網路遮罩的字串"
+msgstr ""
+"網路的子網路必須是含有 IP 位址、字首或網路遮罩的字串"
msgid "Network interface must be a string"
-msgstr "網路介面必須是字串"
+msgstr ""
+"網路介面必須是字串"
msgid "Network VLAN ID must be an integer between 1 and 4094"
-msgstr "網路 VLAN ID 必須是介於 1 和 4094 之間的整數"
+msgstr ""
+"網路 VLAN ID 必須是介於 1 和 4094 之間的整數"
msgid "Specify name and type to create a Network"
-msgstr "指定名稱和類型以建立網路"
+msgstr ""
+"指定名稱和類型以建立網路"
#, python-format
msgid ""
"Unable to delete network %(name)s. There are some virtual machines %(vms)s "
"and/or templates linked to this network."
msgstr ""
+"無法刪除網路 %(name)s。有一些虛擬機器 %(vms)s "
+"及/或範本已鏈結至此網路。"
#, python-format
msgid ""
"Unable to deactivate network %(name)s. There are some virtual machines "
"%(vms)s and/or templates linked to this network."
msgstr ""
+"無法取消啟動網路 %(name)s。有一些虛擬機器"
+"%(vms)s 及/或範本已鏈結至此網路。"
#, python-format
msgid "Bridge device %(name)s can not be the trunk device of a VLAN."
-msgstr "橋接器裝置 %(name)s 不能是 VLAN 的幹線裝置。"
+msgstr ""
+"橋接器裝置 %(name)s 不能是 VLAN 的幹線裝置。"
#, python-format
msgid "Failed to activate interface %(iface)s: %(err)s."
-msgstr "無法啟動介面 %(iface)s:%(err)s。"
+msgstr ""
+"無法啟動介面 %(iface)s:%(err)s。"
#, python-format
msgid ""
"Failed to activate interface %(iface)s. Please check the physical link "
"status."
-msgstr "無法啟動介面 %(iface)s。請檢查實際鏈結狀態。"
+msgstr ""
+"無法啟動介面 %(iface)s。請檢查實際鏈結"
+"狀態。"
#, python-format
msgid "Failed to start network %(name)s. Details: %(err)s"
msgstr ""
+"無法啟動網路 %(name)s。詳細資料:%(err)s"
#, python-format
msgid "Debug report %(name)s does not exist"
-msgstr "除錯報告 %(name)s 不存在"
+msgstr ""
+"除錯報告 %(name)s 不存在"
msgid "Debug report tool not found in system"
-msgstr "在系統中找不到除錯報告工具"
+msgstr ""
+"在系統中找不到除錯報告工具"
#, python-format
msgid "Unable to create debug report %(name)s. Details: %(err)s."
-msgstr "無法建立除錯報告 %(name)s。詳細資料:%(err)s。"
+msgstr ""
+"無法建立除錯報告 %(name)s。詳細資料:%(err)s。"
#, python-format
msgid "Can not find any debug report with the given name %(name)s"
msgstr ""
+"找不到具有給定名稱 %(name)s 的任何除錯報告"
#, python-format
msgid "Unable to generate debug report %(name)s. Details: %(err)s"
-msgstr "無法產生除錯報告 %(name)s。詳細資料:%(err)s"
+msgstr ""
+"無法產生除錯報告 %(name)s。詳細資料:%(err)s"
msgid "You should give a name for the debug report file."
msgstr ""
+"應該命名除錯報告檔。"
msgid ""
"Debug report name must be a string. Only letters, digits, underscore ('_') "
"and hyphen ('-') are allowed."
msgstr ""
+"除錯報告名稱必須是字串。只容許使用字母、數字、底線 ('_') "
+"及連字號 ('-')。"
#, python-format
msgid ""
"The debug report with specified name \"%(name)s\" already exists. Please use "
"another one."
-msgstr "名為 '%(name)s' 的磁區群組已存在。請選擇另一個名稱以建立邏輯儲存區。"
+msgstr ""
+"具有指定名稱 \"%(name)s\" 的除錯報告已經存在。請使用"
+"另一個名稱。"
#, python-format
msgid "Storage server %(server)s was not used by Kimchi"
-msgstr "Kimchi 未使用儲存體伺服器 %(server)s"
+msgstr ""
+"Kimchi 未使用儲存體伺服器 %(server)s"
#, python-format
msgid "Distro '%(name)s' does not exist"
-msgstr "Distro '%(name)s' 不存在"
+msgstr ""
+"Distro '%(name)s' 不存在"
#, python-format
msgid "Partition %(name)s does not exist in the host"
-msgstr "分割區 %(name)s 不存在於主機中"
+msgstr ""
+"分割區 %(name)s 不在主機中"
msgid "Unable to shutdown host machine as there are running virtual machines"
-msgstr "無法關閉主機,因為有一些虛擬機器正在執行中"
+msgstr ""
+"無法關閉主機,因為有一些虛擬機器正在執行中"
msgid "Unable to reboot host machine as there are running virtual machines"
-msgstr "無法將主機重新開機,因為有一些虛擬機器正在執行中"
+msgstr ""
+"無法將主機重新開機,因為有一些虛擬機器正在執行中"
#, python-format
msgid "Node device '%(name)s' not found"
-msgstr "找不到節點裝置 '%(name)s'"
+msgstr ""
+"找不到節點裝置 '%(name)s'"
msgid "Conflicting flag filters specified."
msgstr ""
+"指定的旗標過濾器有衝突。"
msgid "No packages marked for update"
-msgstr "沒有套件標示為要進行更新"
+msgstr ""
+"沒有套件標示為要進行更新"
#, python-format
msgid "Package %(name)s is not marked to be updated."
-msgstr "套件 %(name)s 未標示為要進行更新。"
+msgstr ""
+"套件 %(name)s 未標示為要進行更新。"
#, python-format
msgid "Error while getting packages marked to be updated. Details: %(err)s"
-msgstr "取得標示為要進行更新的套件時發生錯誤。詳細資料:%(err)s"
+msgstr ""
+"取得標示為要進行更新的套件時發生錯誤。詳細資料:%(err)s"
msgid "There is no compatible package manager for this system."
-msgstr "沒有此系統的相容套件管理程式。"
+msgstr ""
+"沒有此系統的相容套件管理程式。"
#, python-format
msgid "Unable to find %(item)s in datastore"
-msgstr "在資料儲存庫中找不到 %(item)s"
+msgstr ""
+"在資料儲存庫中找不到 %(item)s"
#, python-format
msgid "Invalid URI %(uri)s"
-msgstr "URI %(uri)s 無效"
+msgstr ""
+"無效的 URI %(uri)s"
#, python-format
msgid "Timeout while running command '%(cmd)s' after %(seconds)s seconds"
-msgstr "執行指令 '%(cmd)s' %(seconds)s 秒之後逾時"
+msgstr ""
+"執行指令 '%(cmd)s' 時,在 %(seconds)s 秒之後逾時"
msgid "Unable to choose a virtual machine name"
msgstr ""
+"無法選擇虛擬機器名稱"
#, python-format
msgid "Invalid data value '%(value)s'"
msgstr ""
+"無效的資料值 '%(value)s'"
#, python-format
msgid "Invalid data unit '%(unit)s'"
msgstr ""
+"無效的資料單元 '%(unit)s'"
msgid "Invalid storage type. Types supported: 'cdrom', 'disk'"
-msgstr "儲存體類型無效。受支援的類型:'cdrom'"
+msgstr ""
+"儲存體類型無效。支援的類型:'cdrom' 和 'disk'"
#, python-format
msgid "The path '%(value)s' is not a valid local/remote path for the device"
msgstr ""
+"路徑 '%(value)s' 不是該裝置的有效本端/遠端路徑"
msgid "Only CDROM path can be update."
msgstr ""
+"只能更新 CDROM 路徑。"
#, python-format
msgid ""
"The storage device %(dev_name)s does not exist in the virtual machine "
"%(vm_name)s"
msgstr ""
+"儲存裝置 %(dev_name)s 不在下列虛擬機器中:"
+"%(vm_name)s"
#, python-format
msgid "Error while creating new storage device: %(error)s"
-msgstr "建立新的儲存裝置時發生錯誤:%(error)s"
+msgstr ""
+"建立新的儲存裝置時發生錯誤:%(error)s"
#, python-format
msgid "Error while updating storage device: %(error)s"
-msgstr "更新儲存裝置時發生錯誤:%(error)s"
+msgstr ""
+"更新儲存裝置時發生錯誤:%(error)s"
#, python-format
msgid "Error while removing storage device: %(error)s"
-msgstr "移除儲存裝置時發生錯誤:%(error)s"
+msgstr ""
+"移除儲存裝置時發生錯誤:%(error)s"
msgid "Do not support IDE device hot plug"
msgstr ""
+"請勿支援 IDE 裝置熱插拔"
msgid ""
"Specify type and path or type and pool/volume to add a new virtual machine "
"disk"
-msgstr "指定類型和路徑以新增虛擬機器磁碟"
+msgstr ""
+"指定類型和路徑,或者鍵入儲存區/磁區,以新增虛擬機器"
+"磁碟"
msgid "Specify path to update virtual machine disk"
-msgstr "指定路徑以更新虛擬機器磁碟"
+msgstr ""
+"指定路徑以更新虛擬機器磁碟"
#, python-format
msgid "Controller type %(type)s limitation of %(limit)s devices reached"
msgstr ""
+"已達到控制器類型 %(type)s 限制:%(limit)s 個裝置"
#, python-format
msgid "Cannot retrieve disk path information for given pool/volume: %(error)s"
msgstr ""
+"無法擷取給定儲存區/磁區的磁碟路徑資訊:%(error)s"
msgid "Volume already in use by other virtual machine."
msgstr ""
+"其他虛擬機器已在使用該磁區。"
msgid ""
"Only one of path or pool/volume can be specified to add a new virtual "
"machine disk"
-msgstr "指定類型和路徑以新增虛擬機器磁碟"
+msgstr ""
+"僅可以指定一個路徑或集區/磁區以新增到"
+"虛擬機器磁碟"
#, python-format
msgid ""
"Volume chosen with format %(format)s does not fit in the storage type "
"%(type)s"
msgstr ""
+"所選格式為 %(format)s 的磁區不適合儲存體類型"
+"%(type)s"
msgid "YUM Repository ID must be one word only string."
-msgstr "YUM 儲存庫 ID 必須是僅限一個單字的字串。"
+msgstr ""
+"YUM 儲存庫 ID 必須是僅限一個單字的字串。"
msgid "Repository URL must be an http://, ftp:// or file:// URL."
-msgstr "儲存庫 URL 必須是 http://、ftp:// 或 file:// URL。"
+msgstr ""
+"儲存庫 URL 必須是 http://、ftp:// 或 file:// URL。"
msgid ""
"Repository configuration is a dictionary with specific values according to "
"repository type."
-msgstr "儲存庫配置是字典,其中包含於儲存庫類型對應的特定值。"
+msgstr ""
+"儲存庫配置是字典,其中包含於"
+"儲存庫類型對應的特定值。"
msgid "Distribution to DEB repository must be a string"
-msgstr "DEB 儲存庫的發行套件必須是字串"
+msgstr ""
+"DEB 儲存庫的發行套件必須是字串"
msgid "Components to DEB repository must be listed in a array"
-msgstr "DEB 儲存庫的元件必須以陣列的形式列出"
+msgstr ""
+"DEB 儲存庫的元件必須以陣列的形式列出"
msgid "Components to DEB repository must be a string"
-msgstr "DEB 儲存庫的元件必須是字串"
+msgstr ""
+"DEB 儲存庫的元件必須是字串"
msgid "Mirror list to repository must be a string"
msgstr ""
+"儲存庫的鏡映清單必須是字串"
msgid "YUM Repository name must be string."
-msgstr "YUM 儲存庫名稱必須是字串。"
+msgstr ""
+"YUM 儲存庫名稱必須是字串。"
msgid "GPG check must be a boolean value."
-msgstr "GPG 檢查必須是布林值。"
+msgstr ""
+"GPG 檢查必須是布林值。"
msgid "GPG key must be a URL pointing to the ASCII-armored file."
-msgstr "GPG 金鑰必須是指向 ASCII 裝甲檔案的 URL。"
+msgstr ""
+"GPG 金鑰必須是指向 ASCII 裝甲檔案的 URL。"
#, python-format
msgid "Could not update repository %(repo_id)s."
-msgstr "無法更新儲存庫 %(repo_id)s。"
+msgstr ""
+"無法更新儲存庫 %(repo_id)s。"
#, python-format
msgid "Repository %(repo_id)s does not exist."
-msgstr "儲存庫 %(repo_id)s 不存在。"
+msgstr ""
+"儲存庫 %(repo_id)s 不存在。"
msgid ""
"Specify repository base URL, mirror list or metalink in order to create or "
"update a YUM repository."
msgstr ""
+"指定儲存庫基本 URL、鏡映清單或 meta 鏈結以建立或"
+"更新 Yum 儲存庫。"
msgid "Repository management tool was not recognized for your system."
-msgstr "未能辨識系統的儲存庫管理工具。"
+msgstr ""
+"未能辨識系統的儲存庫管理工具。"
#, python-format
msgid "Repository %(repo_id)s is already enabled."
-msgstr "已啟用儲存庫 %(repo_id)s。"
+msgstr ""
+"已啟用儲存庫 %(repo_id)s。"
#, python-format
msgid "Repository %(repo_id)s is already disabled."
-msgstr "已停用儲存庫 %(repo_id)s。"
+msgstr ""
+"已停用儲存庫 %(repo_id)s。"
#, python-format
msgid "Could not remove repository %(repo_id)s."
-msgstr "無法移除儲存庫 %(repo_id)s。"
+msgstr ""
+"無法移除儲存庫 %(repo_id)s。"
#, python-format
msgid "Could not write repository configuration file %(repo_file)s"
-msgstr "無法寫入儲存庫配置檔 %(repo_file)s"
+msgstr ""
+"無法寫入儲存庫配置檔 %(repo_file)s"
msgid "Specify repository distribution in order to create a DEB repository."
-msgstr "指定儲存庫發行套件以建立 DEB 儲存庫。"
+msgstr ""
+"指定儲存庫發行套件以建立 DEB 儲存庫。"
#, python-format
msgid "Could not enable repository %(repo_id)s."
-msgstr "無法啟用儲存庫 %(repo_id)s。"
+msgstr ""
+"無法啟用儲存庫 %(repo_id)s。"
#, python-format
msgid "Could not disable repository %(repo_id)s."
-msgstr "無法停用儲存庫 %(repo_id)s。"
+msgstr ""
+"無法停用儲存庫 %(repo_id)s。"
msgid "YUM Repository ID already exists"
-msgstr "YUM 儲存庫 ID 已存在"
+msgstr ""
+"YUM 儲存庫 ID 已存在"
msgid "YUM Repository name must be a string"
-msgstr "YUM 儲存庫名稱必須是字串"
+msgstr ""
+"YUM 儲存庫名稱必須是字串"
#, python-format
msgid "Unable to list repositories. Details: '%(err)s'"
-msgstr "無法列出儲存庫。詳細資料:'%(err)s'"
+msgstr ""
+"無法列出儲存庫。詳細資料:'%(err)s'"
#, python-format
msgid "Unable to retrieve repository information. Details: '%(err)s'"
-msgstr "無法擷取儲存庫資訊。詳細資料:'%(err)s'"
+msgstr ""
+"無法擷取儲存庫資訊。詳細資料:'%(err)s'"
#, python-format
msgid "Unable to add repository. Details: '%(err)s'"
-msgstr "無法新增儲存庫。詳細資料:'%(err)s'"
+msgstr ""
+"無法新增儲存庫。詳細資料:'%(err)s'"
#, python-format
msgid "Unable to remove repository. Details: '%(err)s'"
-msgstr "無法移除儲存庫。詳細資料:'%(err)s'"
+msgstr ""
+"無法移除儲存庫。詳細資料:'%(err)s'"
#, python-format
msgid ""
"Configuration items: '%(items)s' are not supported by repository manager"
msgstr ""
+"儲存庫管理程式不支援配置項目:'%(items)s'"
msgid "Repository metalink must be an http://, ftp:// or file:// URL."
msgstr ""
+"儲存庫 meta 鏈結必須是 http://、ftp:// 或 file:// URL。"
msgid "Cannot specify mirrorlist and metalink at the same time."
msgstr ""
+"無法同時指定鏡映清單及 meta 鏈結。"
#, python-format
msgid ""
"Virtual machine '%(vm)s' must be stopped before creating a snapshot of it."
msgstr ""
+"必須先停止虛擬機器 '%(vm)s',然後再建立該虛擬機器的 Snapshot。"
#, python-format
msgid ""
"Unable to create snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"無法在虛擬機器 '%(vm)s' 上建立 Snapshot '%(name)s'。詳細資料:"
+"%(err)s"
#, python-format
msgid "Snapshot '%(name)s' does not exist on virtual machine '%(vm)s'."
msgstr ""
+"Snapshot '%(name)s' 不在虛擬機器 '%(vm)s' 上。"
#, python-format
msgid ""
"Unable to retrieve snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"無法擷取虛擬機器 '%(vm)s' 上的 Snapshot '%(name)s'。詳細資料:"
+"%(err)s"
#, python-format
msgid "Unable to list snapshots on virtual machine '%(vm)s'. Details: %(err)s"
msgstr ""
+"無法列出虛擬機器 '%(vm)s' 上的 Snapshot。詳細資料:%(err)s"
#, python-format
msgid ""
"Unable to delete snapshot '%(name)s' on virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"無法刪除虛擬機器 '%(vm)s' 上的 Snapshot '%(name)s'。詳細資料:"
+"%(err)s"
#, python-format
msgid ""
"Unable to retrieve current snapshot of virtual machine '%(vm)s'. Details: "
"%(err)s"
msgstr ""
+"無法擷取虛擬機器 '%(vm)s' 的現行 Snapshot。詳細資料:"
+"%(err)s"
#, python-format
msgid ""
"Unable to revert virtual machine '%(vm)s' to snapshot '%(name)s'. Details: "
"%(err)s"
msgstr ""
+"無法將虛擬機器 '%(vm)s' 回復至 Snapshot '%(name)s'。詳細資料:"
+"%(err)s"
#, python-format
msgid ""
"Unable to create snapshot of virtual machine '%(vm)s' because it contains a "
"disk with format '%(format)s'; only 'qcow2' is supported."
msgstr ""
+"無法建立虛擬機器 '%(vm)s' 的 Snapshot,因為該虛擬機器包含"
+"格式為 '%(format)s' 的磁碟;僅支援 'qcow2'。"
msgid "The number of vCPUs is too large for this system."
msgstr ""
+"這個系統的 vCPU 數目太大。"
msgid "Invalid vCPU/topology combination."
msgstr ""
+"vCPU/拓蹼組合無效。"
msgid "This host (or current configuration) does not allow CPU topology."
msgstr ""
+"此主機(或現行配置)不容許使用 CPU 拓蹼。"
msgid "ERROR CODE"
-msgstr "錯誤碼"
+msgstr ""
+"錯誤碼"
msgid "REASON"
-msgstr "原因"
+msgstr ""
+"原因"
msgid "STACK"
-msgstr "堆疊"
+msgstr ""
+"堆疊"
msgid "Go to Homepage"
-msgstr "跳至首頁"
+msgstr ""
+"跳至首頁"
msgid "Create a New Virtual Machine"
-msgstr "建立新的虛擬機器"
+msgstr ""
+"建立新的虛擬機器"
msgid "Virtual Machine Name"
-msgstr "虛擬機器名稱"
+msgstr ""
+"虛擬機器名稱"
msgid ""
"The name used to identify the virtual machine. If omitted, a name will be "
"chosen based on the template used."
-msgstr "用來識別虛擬機器的名稱。如果省略,則會根據所用的範本選擇名稱。"
+msgstr ""
+"用來識別虛擬機器的名稱。如果省略,則會"
+"根據所用的範本選擇名稱。"
msgid "Template"
-msgstr "範本"
+msgstr ""
+"範本"
msgid "Please create a template first."
-msgstr "請先建立範本。"
+msgstr ""
+"請先建立範本。"
msgid "Create a Template"
-msgstr "建立範本"
+msgstr ""
+"建立範本"
msgid "Please choose a template."
-msgstr "請選擇範本。"
+msgstr ""
+"請選擇範本。"
msgid "OS"
-msgstr "OS"
+msgstr ""
+"OS"
msgid "OS Version"
-msgstr "OS 版本"
+msgstr ""
+"OS 版本"
msgid "CPUS"
-msgstr "CPUS"
+msgstr ""
+"CPUS"
msgid "Memory"
-msgstr "記憶體"
+msgstr ""
+"記憶體"
msgid "Create"
-msgstr "建立"
+msgstr ""
+"建立"
msgid "Creating..."
msgstr ""
+"正在建立..."
msgid "Edit Guest"
-msgstr "編輯客體"
+msgstr ""
+"編輯客體"
msgid "General"
-msgstr "一般"
+msgstr ""
+"一般"
msgid "Storage"
-msgstr "儲存體"
+msgstr ""
+"儲存體"
msgid "Interface"
-msgstr "介面"
+msgstr ""
+"介面"
msgid "Permission"
-msgstr "版本"
+msgstr ""
+"許可權"
msgid "Host PCI Device"
msgstr ""
+"主機 PCI 裝置"
msgid "Snapshot"
msgstr ""
+"Snapshot"
msgid "Name"
-msgstr "名稱"
+msgstr ""
+"名稱"
msgid "CPUs"
-msgstr "CPU"
+msgstr ""
+"CPU"
msgid "Memory (MB)"
-msgstr "記憶體"
+msgstr ""
+"記憶體 (MB)"
msgid "Icon"
-msgstr "圖示"
+msgstr ""
+"圖示"
msgid "Device"
-msgstr "裝置名稱"
+msgstr ""
+"裝置"
msgid "Path"
-msgstr "NFS 路徑"
+msgstr ""
+"路徑"
msgid "Network"
-msgstr "網路"
+msgstr ""
+"網路"
msgid "Type"
-msgstr "類型"
+msgstr ""
+"類型"
msgid "MAC Address"
msgstr ""
+"MAC 位址"
msgid "Available system users and groups"
msgstr ""
+"可用的系統使用者及群組"
msgid "Selected system users and groups"
msgstr ""
+"選定的系統使用者及群組"
msgid "User"
msgstr ""
+"使用者"
msgid "All"
-msgstr "全部"
+msgstr ""
+"全部"
msgid "To Add"
msgstr ""
+"要新增"
msgid "Added"
msgstr ""
+"已新增"
msgid "filter"
msgstr ""
+"過濾器"
msgid "Product"
msgstr ""
+"產品"
msgid "Vendor"
-msgstr "供應商"
+msgstr ""
+"供應商"
msgid "Created"
msgstr ""
+"已建立"
msgid "Save"
-msgstr "儲存"
+msgstr ""
+"儲存"
msgid "Replace"
-msgstr "取代"
+msgstr ""
+"取代"
msgid "Detach"
-msgstr "分離"
+msgstr ""
+"分離"
msgid "Cancel"
-msgstr "取消 "
+msgstr ""
+"取消 "
msgid "revert"
msgstr ""
+"回復"
msgid "Add a Storage Device to VM"
-msgstr "將儲存裝置新增至 VM"
+msgstr ""
+"將儲存裝置新增至 VM"
msgid "Device Type"
-msgstr "裝置類型"
+msgstr ""
+"裝置類型"
msgid "The device type. Currently, \"cdrom\" and \"disk\" are supported."
-msgstr "裝置類型。目前僅支援 \"cdrom\"。"
+msgstr ""
+"裝置類型。目前支援 \"cdrom\" 和 \"disk\"。"
msgid "Storage Pool"
-msgstr "儲存區"
+msgstr ""
+"儲存區"
msgid "Storage pool which volume located in"
-msgstr "儲存區路徑必須是字串"
+msgstr ""
+"磁區所在的儲存區"
msgid "Storage Volume"
-msgstr "儲存區名稱"
+msgstr ""
+"儲存磁區"
msgid "Storage volume to be attached"
-msgstr "儲存磁區名稱必須是字串"
+msgstr ""
+"要連接的儲存磁區"
msgid "File Path"
-msgstr "檔案路徑"
+msgstr ""
+"檔案路徑"
msgid "The ISO file path in the server for CDROM."
-msgstr "CDROM 的 ISO 檔案路徑在伺服器中。"
+msgstr ""
+"CDROM 的 ISO 檔案路徑在伺服器中。"
msgid "Attach"
-msgstr "連接"
+msgstr ""
+"連接"
msgid "Start"
-msgstr "開始"
+msgstr ""
+"開始"
msgid "Reset"
-msgstr "重設"
+msgstr ""
+"重設"
msgid "Pause"
msgstr ""
+"暫停"
msgid "Resume"
msgstr ""
+"回復"
msgid "Power Off"
msgstr ""
+"關閉電源"
msgid "Actions"
-msgstr "動作"
+msgstr ""
+"動作"
msgid "Connect"
-msgstr "連接"
+msgstr ""
+"連接"
msgid "Clone"
msgstr ""
+"複製"
msgid "Edit"
-msgstr "編輯"
+msgstr ""
+"編輯"
msgid "Shut Down"
-msgstr "關閉"
+msgstr ""
+"關閉"
msgid "Delete"
-msgstr "刪除"
+msgstr ""
+"刪除"
msgid "The username or password you entered is incorrect. Please try again."
-msgstr "您輸入的使用者名稱或密碼不正確。請重試。"
+msgstr ""
+"您輸入的使用者名稱或密碼不正確。請重試。"
msgid "This field is required."
-msgstr "此欄位是必要的。"
+msgstr ""
+"此欄位是必要的。"
msgid "Log in"
-msgstr "登入"
+msgstr ""
+"登入"
msgid "Logging in..."
-msgstr "正在登入..."
+msgstr ""
+"正在登入..."
msgid "Host"
-msgstr "主機"
+msgstr ""
+"主機"
msgid "Guests"
-msgstr "客體"
+msgstr ""
+"客體"
msgid "Templates"
-msgstr "範本"
+msgstr ""
+"範本"
msgid "Failed to get application configuration"
-msgstr "無法取得應用程式配置"
+msgstr ""
+"無法取得應用程式配置"
msgid "This is not a valid Linux path"
-msgstr "這是無效的 Linux 路徑"
+msgstr ""
+"這是無效的 Linux 路徑"
msgid "This is not a valid URL."
-msgstr "這是無效的 URL。"
+msgstr ""
+"這是無效的 URL。"
msgid "No such data available."
-msgstr "沒有此類可用資料。"
+msgstr ""
+"沒有此類可用資料。"
msgid ""
"Can not contact the host system. Verify the host system is up and that you "
"have network connectivity to it. HTTP request response %1. "
msgstr ""
-"無法連接至主機系統。請驗證主機系統是否已啟動,以及您是否具有與它的連線。HTTP "
-"要求回應為 %1。"
+"無法連接至主機系統。請驗證主機系統是否已啟動,以及"
+"您是否具有與它的連線。HTTP 要求回應為 %1。 "
msgid "Unable to read file."
msgstr ""
+"無法讀取檔案。"
msgid "Error while uploading file."
msgstr ""
+"上傳檔案時發生錯誤。"
msgid "Delete Confirmation"
-msgstr "刪除確認"
+msgstr ""
+"刪除確認"
msgid "OK"
-msgstr "確定"
+msgstr ""
+"確定"
msgid "Confirm"
-msgstr "確認"
+msgstr ""
+"確認"
msgid "Warning"
-msgstr "警告"
+msgstr ""
+"警告"
msgid "Cloning..."
msgstr ""
+"正在複製..."
msgid "Loading..."
-msgstr "正在載入..."
+msgstr ""
+"正在載入..."
msgid "An error occurred while retrieving system information."
msgstr ""
+"擷取系統資訊時發生錯誤。"
msgid "Retry"
-msgstr "重試"
+msgstr ""
+"重試"
msgid "Detailed message:"
-msgstr "詳細的訊息:"
+msgstr ""
+"詳細的訊息:"
msgid "No ISO found"
msgstr ""
+"找不到 ISO"
msgid "This is not a valid ISO file."
-msgstr "這是無效的 ISO 檔案。"
+msgstr ""
+"這是無效的 ISO 檔案。"
msgid "This may take a long time. Do you want to continue?"
-msgstr "它將需要很長時間。要繼續嗎?"
+msgstr ""
+"這可能花費較長時間。您要繼續嗎?"
msgid "This will permanently delete the template. Would you like to continue?"
-msgstr "此動作將永久地刪除範本。要繼續嗎?"
+msgstr ""
+"這將永久刪除範本。您要繼續嗎?"
msgid "Unable to shut down system as there are some virtual machines running!"
-msgstr "無法關閉系統,因為有幾個虛擬機器正在執行中!"
+msgstr ""
+"無法關閉系統,因為有幾個虛擬機器正在執行中!"
msgid "Max:"
-msgstr "上限:"
+msgstr ""
+"上限:"
msgid "Utilization"
-msgstr "使用率"
+msgstr ""
+"使用率"
msgid "Available"
-msgstr "可用"
+msgstr ""
+"可用"
msgid "Read Rate"
-msgstr "讀取速率"
+msgstr ""
+"讀取速率"
msgid "Write Rate"
-msgstr "寫入速率"
+msgstr ""
+"寫入速率"
msgid "Received"
-msgstr "已接收"
+msgstr ""
+"已接收"
msgid "Sent"
-msgstr "已傳送"
+msgstr ""
+"已傳送"
msgid ""
"Shutting down or restarting host will cause unsaved work lost. Continue to "
"shut down/restarting?"
-msgstr "關閉或重新啟動主機將導致未儲存的工作遺失。要繼續關閉/重新啟動嗎?"
+msgstr ""
+"關閉或重新啟動主機將導致未儲存的工作遺失。要繼續"
+"關閉/重新啟動嗎?"
msgid ""
"Repository will be removed permanently and can't be recovered. Do you want "
"to continue?"
-msgstr "將會永久地移除儲存庫並且無法回復。要繼續嗎?"
+msgstr ""
+"將會永久地移除儲存庫並且無法回復。"
+"要繼續嗎?"
msgid "Repositories"
-msgstr "儲存庫"
+msgstr ""
+"儲存庫"
msgid "ID"
-msgstr "ID"
+msgstr ""
+"ID"
msgid "Base URL"
-msgstr "基本 URL"
+msgstr ""
+"基本 URL"
msgid "Is Mirror"
-msgstr "是鏡映"
+msgstr ""
+"是鏡映"
msgid "URL Args"
-msgstr "URL 引數"
+msgstr ""
+"URL 引數"
msgid "Enabled"
-msgstr "已啟用"
+msgstr ""
+"已啟用"
msgid "GPG Check"
-msgstr "GPG 檢查"
+msgstr ""
+"GPG 檢查"
msgid "GPG Key"
-msgstr "GPG 金鑰"
+msgstr ""
+"GPG 金鑰"
msgid "Add"
-msgstr "新增"
+msgstr ""
+"新增"
msgid "Remove"
-msgstr "移除"
+msgstr ""
+"移除"
msgid "Enable"
-msgstr "啟用"
+msgstr ""
+"啟用"
msgid "Disable"
-msgstr "停用"
+msgstr ""
+"停用"
msgid "Software Updates"
-msgstr "軟體更新"
+msgstr ""
+"軟體更新"
msgid "Package Name"
-msgstr "套件名稱"
+msgstr ""
+"套件名稱"
msgid "Version"
-msgstr "版本"
+msgstr ""
+"版本"
msgid "Architecture"
-msgstr "架構"
+msgstr ""
+"架構"
msgid "Repository"
-msgstr "儲存庫"
+msgstr ""
+"儲存庫"
msgid "Update All"
-msgstr "全部更新"
+msgstr ""
+"全部更新"
msgid "Updating..."
-msgstr "正在更新..."
+msgstr ""
+"正在更新..."
msgid "Failed to retrieve packages update information."
msgstr ""
+"無法擷取套件更新資訊。"
msgid "Failed to update package(s)."
-msgstr "無法更新套件。"
+msgstr ""
+"無法更新套件。"
msgid ""
"Debug report will be removed permanently and can't be recovered. Do you want "
"to continue?"
-msgstr "將會永久地移除除錯報告並且無法回復。要繼續嗎?"
+msgstr ""
+"將會永久地移除除錯報告並且無法回復。"
+"要繼續嗎?"
msgid "Debug Reports"
-msgstr "除錯報告"
+msgstr ""
+"除錯報告"
msgid "Generated Time"
-msgstr "產生時間"
+msgstr ""
+"產生時間"
msgid "Generate"
-msgstr "產生"
+msgstr ""
+"產生"
msgid "Generating..."
-msgstr "正在產生..."
+msgstr ""
+"正在產生..."
msgid "Rename"
-msgstr "重新命名"
+msgstr ""
+"重新命名"
msgid "Download"
-msgstr "下載"
+msgstr ""
+"下載"
msgid ""
"Report name should contain only letters, digits, underscore ('_') and/or "
"hyphen ('-')."
-msgstr "報告名稱只應該包含字母、數字及/或連字號 ('-')。"
+msgstr ""
+"報告名稱只應該包含字母、數字、底線 ('_') 及/或"
+"連字號 ('-')。"
msgid "Pending..."
-msgstr "正在載入..."
+msgstr ""
+"擱置中..."
msgid "Report name is the same as the original one."
msgstr ""
+"報告名稱與原始名稱相同。"
msgid ""
"This will delete the virtual machine and its virtual disks. This operation "
"cannot be undone. Would you like to continue?"
-msgstr "此動作將會刪除虛擬機器及其虛擬磁碟。此作業無法復原。要繼續嗎?"
+msgstr ""
+"此動作將會刪除虛擬機器及其虛擬磁碟。此作業"
+"無法復原。您要繼續嗎?"
msgid "Power off Confirmation"
-msgstr "刪除確認"
+msgstr ""
+"確認關閉電源"
msgid ""
"This action may produce undesirable results, for example unflushed disk "
"cache in the guest. Would you like to continue?"
msgstr ""
+"這個動作可能會產生非預期結果,例如客體中未清除的磁碟"
+"快取。您要繼續嗎?"
msgid "Reset Confirmation"
-msgstr "刪除確認"
+msgstr ""
+"確認重設"
msgid ""
"There is a risk of data loss caused by reset without the guest OS shutdown. "
"Would you like to continue?"
msgstr ""
+"如果在不關閉客體 OS 的情況下進行重設,則可能會導致資料流失。"
+"您要繼續嗎?"
msgid "Shut Down Confirmation"
-msgstr "刪除確認"
+msgstr ""
+"確認關閉"
msgid "Note the guest OS may ignore this request. Would you like to continue?"
-msgstr "此動作將永久地刪除範本。要繼續嗎?"
+msgstr ""
+"請注意,客體 OS 可能會忽略此要求。您要繼續嗎?"
msgid "Virtual Machine delete Confirmation"
msgstr ""
+"虛擬機器刪除確認"
msgid ""
"This virtual machine is not persistent. Power Off will delete it. Continue?"
msgstr ""
+"此虛擬機器不是持續性的。「關閉電源」會將其刪除。您要繼續嗎?"
msgid ""
"When the target guest has SCSI or iSCSI volumes, they will be cloned on "
"default storage pool. The same will happen when the target pool does not "
"have enough space to clone the volumes. Do you want to continue?"
msgstr ""
+"當目標客體具有 SCSI 或 iSCSI 磁區時,將在預設儲存區上"
+"複製這些磁區。當目標儲存區沒有足夠的空間來複製磁區時,"
+"也會發生相同的情況。您要繼續嗎?"
msgid ""
"This CDROM will be detached permanently and you can re-attach it. Continue "
"to detach it?"
msgstr ""
-"將會永久地分離此 CDROM,但是您可以將其重新連接。要繼續分離此 CDROM 嗎?"
+"將會永久地分離此 CDROM,但是您可以將其重新連接。要繼續"
+"分離此 CDROM 嗎?"
msgid "Attaching..."
-msgstr "正在連接..."
+msgstr ""
+"正在連接..."
msgid "Replacing..."
-msgstr "正在取代..."
+msgstr ""
+"正在取代..."
msgid "Successfully attached!"
-msgstr "已順利連接!"
+msgstr ""
+"已順利連接!"
msgid "Successfully replaced!"
-msgstr "已順利取代!"
+msgstr ""
+"已順利取代!"
msgid "Successfully detached!"
-msgstr "已順利分離!"
+msgstr ""
+"已順利分離!"
msgid ""
"This disk will be detached permanently and you can re-attach it. Continue to "
"detach it?"
msgstr ""
+"將會永久地分離此磁碟,但是您可以將其重新連接。要繼續"
+"分離操作嗎?"
msgid "interface:"
msgstr ""
+"介面:"
msgid "address:"
msgstr ""
+"位址:"
msgid "link_type:"
msgstr ""
+"鏈結類型:"
msgid "block:"
msgstr ""
+"區塊:"
msgid "drive_type:"
msgstr ""
+"磁碟機類型:"
msgid "model:"
msgstr ""
+"模型:"
msgid "Affected devices:"
msgstr ""
+"受影響的裝置:"
msgid "The VLAN id must be between 1 and 4094."
-msgstr "VLAN ID 必須介於 1 和 4094 之間。"
+msgstr ""
+"VLAN ID 必須介於 1 和 4094 之間。"
msgid "unavailable"
-msgstr "無法使用"
+msgstr ""
+"無法使用"
msgid ""
"This action will interrupt network connectivity for any virtual machine that "
"depend on this network."
-msgstr "此動作將會岔斷依賴於此網路之所有虛擬機器的網路連線功能。"
+msgstr ""
+"此動作將會岔斷依賴於此網路之所有虛擬機器的"
+"網路連線功能。"
msgid "Create a network"
-msgstr "建立網路"
+msgstr ""
+"建立網路"
msgid ""
"This network is not persistent. Instead of stop, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"此儲存區不是持續性的。此動作不是會將其取消啟動,而是會將其永久地刪除。要繼續"
-"嗎?"
+"此網路不是持續性的。此動作不會將其停止,而會"
+"永久將其刪除。您要繼續嗎?"
msgid ""
"The bridged VLAN tag may not work well with NetworkManager enabled. You "
"should consider disabling it."
msgstr ""
+"啟用 NetworkManager 時,橋接 VLAN 標籤可能不正常工作。您"
+"應該考量將其停用。"
msgid ""
"This will permanently delete the storage pool. Would you like to continue?"
-msgstr "此動作將永久地刪除儲存區。要繼續嗎?"
+msgstr ""
+"這將永久刪除儲存區。您要繼續嗎?"
msgid "This storage pool is empty."
-msgstr "此儲存區是空的。"
+msgstr ""
+"此儲存區是空的。"
msgid ""
"It will format your disk and you will loose any data in there, are you sure "
"to continue? "
-msgstr "此動作會格式化您的磁碟,而您將會遺失磁碟中的所有資料。確定要繼續嗎?"
+msgstr ""
+"此動作會格式化您的磁碟,而您將會遺失磁碟中的所有資料。確定"
+"要繼續嗎?"
msgid "SCSI Fibre Channel"
-msgstr "SCSI 光纖通道"
+msgstr ""
+"SCSI 光纖通道"
msgid "No SCSI adapters found."
-msgstr "找不到 SCSI 配接卡。"
+msgstr ""
+"找不到 SCSI 配接卡。"
msgid "Loading iSCSI targets..."
msgstr ""
+"正在載入 iSCSI 目標..."
msgid "No iSCSI found. Please input one."
msgstr ""
+"找不到 iSCSI。請輸入一個。"
msgid "Failed to load iSCSI targets."
msgstr ""
+"無法載入 iSCSI 目標。"
msgid "The storage pool name can not be blank."
-msgstr "儲存區名稱不能空白。"
+msgstr ""
+"儲存區名稱不能空白。"
msgid "The storage pool path can not be blank."
-msgstr "儲存區路徑不能空白。"
+msgstr ""
+"儲存區路徑不能空白。"
msgid "NFS server mount path can not be blank."
-msgstr "NFS 伺服器裝載路徑不能空白。"
+msgstr ""
+"NFS 伺服器裝載路徑不能空白。"
msgid "Invalid NFS mount path."
-msgstr "NFS 裝載路徑無效。"
+msgstr ""
+"NFS 裝載路徑無效。"
msgid "No logical device selected."
-msgstr "未選取邏輯裝置。"
+msgstr ""
+"未選取邏輯裝置。"
msgid "The iSCSI target can not be blank."
-msgstr "iSCSI 目標不能空白。"
+msgstr ""
+"iSCSI 目標不能空白。"
msgid "Server name can not be blank."
-msgstr "伺服器名稱不能空白。"
+msgstr ""
+"伺服器名稱不能空白。"
msgid "This is not a valid Server Name or IP. Please, modify it."
msgstr ""
+"這不是有效的「伺服器名稱」或 IP。請進行修改。"
msgid "Looking for available partitions ..."
-msgstr "正在尋找可用的分割區 ..."
+msgstr ""
+"正在尋找可用的分割區 ..."
msgid "No available partitions found."
-msgstr "找不到可用的分割區。"
+msgstr ""
+"找不到可用的分割區。"
msgid ""
"This storage pool is not persistent. Instead of deactivate, this action will "
"permanently delete it. Would you like to continue?"
msgstr ""
-"此儲存區不是持續性的。此動作不是會將其取消啟動,而是會將其永久地刪除。要繼續"
-"嗎?"
+"此儲存區不是持續性的。此動作不是會將其取消啟動,而是會"
+"永久將其刪除。您要繼續嗎?"
msgid "Unable to retrieve partitions information."
-msgstr "無法擷取儲存庫資訊。詳細資料:'%(err)s'"
+msgstr ""
+"無法擷取分割區資訊。"
msgid "In progress..."
msgstr ""
+"進行中..."
msgid "Failed!"
msgstr ""
+"失敗!"
msgid "CDROM path needs to be a valid local/remote path and cannot be blank."
msgstr ""
+"CDROM 路徑需要是有效的本端/遠端路徑,並且不能空白。"
msgid "Disk pool or volume cannot be blank."
-msgstr "儲存區名稱不能空白。"
+msgstr ""
+"磁碟儲存區或磁區不能空白。"
msgid "Peers"
msgstr ""
+"同層級"
msgid "Searching"
msgstr ""
+"正在搜尋"
msgid "No peers found."
msgstr ""
+"找不到同層級。"
msgid "Help"
-msgstr "說明"
+msgstr ""
+"說明"
msgid "About"
-msgstr "相關"
+msgstr ""
+"相關"
msgid "Log out"
-msgstr "登出"
+msgstr ""
+"登出"
msgid "Version:"
-msgstr "版本:"
+msgstr ""
+"版本:"
msgid "Session timeout, please re-login."
msgstr ""
+"階段作業逾時,請重新登入。"
msgid "User Name"
-msgstr "使用者名稱"
+msgstr ""
+"使用者名稱"
msgid "Password"
-msgstr "密碼"
+msgstr ""
+"密碼"
msgid "Generate a New Debug Report"
-msgstr "產生新的除錯報告"
+msgstr ""
+"產生新的除錯報告"
msgid "Report Name"
-msgstr "報告名稱"
+msgstr ""
+"報告名稱"
msgid ""
"The name used to identify the report. If omitted, a name will be chosen "
"based on current time. Name can contain: letters, digits, underscore (\"_\") "
"and hyphen (\"-\")."
msgstr ""
-"用來識別報告的名稱。如果省略,則會根據現行時間選擇名稱。名稱可以包含:字母、"
-"數字和連字號 (\"-\")。"
+"用來識別報告的名稱。如果省略,則會"
+"基於現行時間來選擇名稱。名稱可以包含:字母、數字、底線 (\"_\")"
+"及連字號 (\"-\")。"
msgid "Rename a Debug Report"
-msgstr "產生新的除錯報告"
+msgstr ""
+"重新命名除錯報告"
msgid ""
"The name used to identify the report. Name can contain: letters, digits and "
"hyphen (\"-\")."
msgstr ""
-"用來識別報告的名稱。如果省略,則會根據現行時間選擇名稱。名稱可以包含:字母、"
-"數字和連字號 (\"-\")。"
+"用於識別報告的名稱。名稱可以包含:字母、數字及"
+"連字號 (\"-\")。"
msgid "Submit"
msgstr ""
+"提交"
msgid "Add a Repository"
-msgstr "新增儲存庫"
+msgstr ""
+"新增儲存庫"
msgid "Identifier"
-msgstr "ID"
+msgstr ""
+"ID"
msgid "Single word, unique identifier for the repository."
-msgstr "單字,儲存庫的唯一 ID。"
+msgstr ""
+"單字,儲存庫的唯一 ID。"
msgid "Textual name for the repository."
-msgstr "儲存庫的文字名稱。"
+msgstr ""
+"儲存庫的文字名稱。"
msgid "URL"
-msgstr "URL"
+msgstr ""
+"URL"
msgid "Required Field"
-msgstr "必要欄位"
+msgstr ""
+"必要欄位"
msgid "URL to the repository. Supported protocols are http, ftp, and file."
-msgstr "儲存庫的 URL。受支援的通訊協定包括 http、ftp 和 file。"
+msgstr ""
+"儲存庫的 URL。受支援的通訊協定包括 http、ftp 和 file。"
msgid "Repository is a mirror"
-msgstr "儲存庫是鏡映。"
+msgstr ""
+"儲存庫是鏡映"
msgid "Distribution"
-msgstr "發行套件"
+msgstr ""
+"發行套件"
msgid "Distribution of the DEB repository."
-msgstr "DEB 儲存庫的發行套件。"
+msgstr ""
+"DEB 儲存庫的發行套件。"
msgid "Components"
-msgstr "元件"
+msgstr ""
+"元件"
msgid "List of components in DEB repository."
-msgstr "DEB 儲存庫中的元件清單。"
+msgstr ""
+"DEB 儲存庫中的元件清單。"
msgid "Edit Repository"
-msgstr "編輯儲存庫"
+msgstr ""
+"編輯儲存庫"
msgid "Mirror List URL"
-msgstr "鏡映清單 URL"
+msgstr ""
+"鏡映清單 URL"
msgid "Yes"
-msgstr "是"
+msgstr ""
+"是"
msgid "No"
-msgstr "否"
+msgstr ""
+"否"
msgid "Add a Volume to Storage Pool"
msgstr ""
+"將磁區新增至儲存區"
msgid "Fetch from remote URL"
msgstr ""
+"從遠端 URL 提取"
msgid "Enter the remote URL here."
msgstr ""
+"在這裡輸入遠端 URL。"
msgid "Upload a file"
msgstr ""
+"上傳檔案"
msgid "Choose the file you want to upload."
msgstr ""
+"選擇要上傳的檔案。"
msgid "Define a New Storage Pool"
-msgstr "定義新的儲存區"
+msgstr ""
+"定義新的儲存區"
msgid "Storage Pool Name"
-msgstr "儲存區名稱"
+msgstr ""
+"儲存區名稱"
msgid ""
"The name used to identify the storage pools, and it should not be empty."
-msgstr "用來識別儲存區的名稱,不應該是空的。"
+msgstr ""
+"用來識別儲存區的名稱,不應該是空的。"
msgid "Storage Pool Type"
-msgstr "儲存區類型"
+msgstr ""
+"儲存區類型"
msgid "Storage Path"
-msgstr "儲存體路徑"
+msgstr ""
+"儲存體路徑"
msgid ""
"The path of the Storage Pool. Each Storage Pool must have a unique path."
-msgstr "儲存區的路徑。每一個儲存區都必須有一個唯一的路徑。"
+msgstr ""
+"儲存區的路徑。每一個儲存區都必須有一個唯一的路徑。"
msgid ""
"Kimchi will try to create the directory when it does not already exist in "
"your system."
-msgstr "Kimchi 將嘗試建立該目錄(當該目錄尚不存在於系統中時)。"
+msgstr ""
+"Kimchi 將嘗試建立該目錄(當該目錄尚不存在"
+"於系統中時)。"
msgid "NFS Server IP"
-msgstr "NFS 伺服器 IP"
+msgstr ""
+"NFS 伺服器 IP"
msgid "NFS server IP or hostname. It can be input or chosen from history."
-msgstr "NFS 伺服器 IP 或主機名稱。可以直接輸入,也可以從歷程中選擇。"
+msgstr ""
+"NFS 伺服器 IP 或主機名稱。可以直接輸入,也可以從歷程中選擇。"
msgid "NFS Path"
-msgstr "NFS 路徑"
+msgstr ""
+"NFS 路徑"
msgid "The NFS exported path on NFS server."
-msgstr "NFS 伺服器上 NFS 匯出的路徑。"
+msgstr ""
+"NFS 伺服器上 NFS 匯出的路徑。"
msgid "Device path"
-msgstr "裝置路徑"
+msgstr ""
+"裝置路徑"
msgid "iSCSI Server"
-msgstr "iSCSI 伺服器"
+msgstr ""
+"iSCSI 伺服器"
msgid "iSCSI server IP or hostname. It should not be empty."
-msgstr "iSCSI 伺服器 IP 或主機名稱。它不應該是空的。"
+msgstr ""
+"iSCSI 伺服器 IP 或主機名稱。它不應該是空的。"
msgid "Server"
-msgstr "伺服器"
+msgstr ""
+"伺服器"
msgid "Port"
-msgstr "埠"
+msgstr ""
+"埠"
msgid "Target"
-msgstr "目標"
+msgstr ""
+"目標"
msgid "The iSCSI target on iSCSI server"
-msgstr "iSCSI 伺服器上的 iSCSI 目標"
+msgstr ""
+"iSCSI 伺服器上的 iSCSI 目標"
msgid "Add iSCSI Authentication"
-msgstr "新增 iSCSI 鑑別"
+msgstr ""
+"新增 iSCSI 鑑別"
msgid "iSCSI Authentication"
-msgstr "iSCSI 鑑別"
+msgstr ""
+"iSCSI 鑑別"
msgid "SCSI Adapter"
-msgstr "SCSI 配接卡"
+msgstr ""
+"SCSI 配接卡"
msgid "Please, wait..."
-msgstr "請稍候..."
+msgstr ""
+"請稍候..."
msgid "Add Template"
-msgstr "新增範本"
+msgstr ""
+"新增範本"
msgid "Where is the source media for this template? "
-msgstr "此範本的來源媒體位於何處?"
+msgstr ""
+"此範本的來源媒體位於何處?"
msgid "Local ISO Image"
-msgstr "本端 ISO 映像檔"
+msgstr ""
+"本端 ISO 映像檔"
msgid "Local Image File"
msgstr ""
+"本端映像檔"
msgid "Remote ISO Image"
-msgstr "遠端 ISO 映像檔"
+msgstr ""
+"遠端 ISO 映像檔"
msgid "Search ISOs"
-msgstr "搜尋 ISO"
+msgstr ""
+"搜尋 ISO"
msgid "The following ISOs are available:"
-msgstr "下列 ISO 可用:"
+msgstr ""
+"下列 ISO 可用:"
msgid "OS: "
-msgstr "OS:"
+msgstr ""
+"OS:"
msgid "Version: "
-msgstr "版本:"
+msgstr ""
+"版本:"
msgid "Size: "
-msgstr "大小:"
+msgstr ""
+"大小:"
msgid "Search more ISOs"
-msgstr "搜尋更多 ISO"
+msgstr ""
+"搜尋更多 ISO"
msgid "Create Templates from Selected ISO"
-msgstr "從所選 ISO 建立範本"
+msgstr ""
+"從所選 ISO 建立範本"
msgid "I want to use a specific ISO file"
-msgstr "我想使用特定的 ISO 檔案"
+msgstr ""
+"我想使用特定的 ISO 檔案"
msgid "Loading default remote ISOs ..."
-msgstr "正在載入預設遠端 ISO ..."
+msgstr ""
+"正在載入預設遠端 ISO ..."
msgid "Arch: "
-msgstr "架構:"
+msgstr ""
+"架構:"
msgid "I want to use a custom URL"
-msgstr "我想使用自訂 URL"
+msgstr ""
+"我想使用自訂 URL"
msgid "Edit Template"
-msgstr "編輯範本"
+msgstr ""
+"編輯範本"
msgid "Processor"
-msgstr "處理器"
+msgstr ""
+"處理器"
msgid "CDROM"
-msgstr "CDROM"
+msgstr ""
+"CDROM"
msgid "Image File"
msgstr ""
+"映像檔"
msgid "Graphics"
-msgstr "圖形卡"
+msgstr ""
+"圖形卡"
msgid "Disk(GB)"
msgstr ""
+"磁碟 (GB)"
msgid "Disk Format"
msgstr ""
+"磁碟格式"
msgid "CPU Number"
-msgstr "CPU 數目"
+msgstr ""
+"CPU 數目"
msgid "Manually set CPU topology"
msgstr ""
+"手動設定 CPU 拓蹼"
msgid "Cores"
msgstr ""
+"核心"
msgid "Threads"
msgstr ""
+"執行緒"
msgid "CPU"
-msgstr "CPU"
+msgstr ""
+"CPU"
msgid "Disk I/O"
-msgstr "磁碟 I/O"
+msgstr ""
+"磁碟 I/O"
msgid "Network I/O"
-msgstr "網路 I/O"
+msgstr ""
+"網路 I/O"
msgid "Livetile"
-msgstr "Livetile"
+msgstr ""
+"Livetile"
msgid "No guests found."
-msgstr "找不到客體。"
+msgstr ""
+"找不到客體。"
msgid "Shut down"
-msgstr "關閉"
+msgstr ""
+"關閉"
msgid "Restart"
-msgstr "重新啟動"
+msgstr ""
+"重新啟動"
msgid "Basic Information"
-msgstr "基本資訊"
+msgstr ""
+"基本資訊"
msgid "OS Distro"
-msgstr "OS Distro"
+msgstr ""
+"OS Distro"
msgid "OS Code Name"
-msgstr "OS 程式碼名稱"
+msgstr ""
+"OS 程式碼名稱"
msgid "CPU(s)"
msgstr ""
+"CPU"
msgid "System Statistics"
-msgstr "系統統計資料"
+msgstr ""
+"系統統計資料"
msgid "Update Progress"
-msgstr "更新進度"
+msgstr ""
+"更新進度"
msgid "Network Name"
-msgstr "網路名稱"
+msgstr ""
+"網路名稱"
msgid "State"
-msgstr "狀態"
+msgstr ""
+"狀態"
msgid "Network Type"
-msgstr "網路類型"
+msgstr ""
+"網路類型"
msgid "Address Space"
-msgstr "位址空間"
+msgstr ""
+"位址空間"
msgid "Name should not contain '/' and '\"'."
-msgstr "儲存區名稱無效。它不應該包含 '/'。"
+msgstr ""
+"名稱不應包含 '/' 及 '\"'。"
msgid "Isolated: no external network connection"
-msgstr "已隔離:沒有實體網路連線"
+msgstr ""
+"已隔離:沒有外部網路連線"
msgid "NAT: outbound physical network connection only"
-msgstr "NAT:僅限出埠實體網路連線"
+msgstr ""
+"NAT:僅限出埠實體網路連線"
msgid "Bridged: Virtual machines are connected to physical network directly"
-msgstr "已橋接:虛擬機器直接已連接至實體網路"
+msgstr ""
+"已橋接:虛擬機器直接已連接至實體網路"
msgid "(No interfaces found)"
msgstr ""
+"(找不到介面)"
msgid "Destination"
-msgstr "目的地:"
+msgstr ""
+"目的地"
msgid "Enable VLAN"
-msgstr "啟用 VLAN:"
+msgstr ""
+"啟用 VLAN"
msgid "VLAN ID"
-msgstr "VLAN ID:"
+msgstr ""
+"VLAN ID"
msgid "Stop"
-msgstr "停止"
+msgstr ""
+"停止"
msgid "%Used"
msgstr ""
+"已使用的百分比"
msgid "Location"
-msgstr "位置"
+msgstr ""
+"位置"
msgid "Capacity"
-msgstr "容量"
+msgstr ""
+"容量"
msgid "Allocated"
-msgstr "已配置"
+msgstr ""
+"已配置"
msgid "active"
-msgstr "作用中"
+msgstr ""
+"作用中"
msgid "inactive"
-msgstr "非作用中"
+msgstr ""
+"非作用中"
msgid "Deactivate"
-msgstr "取消啟動"
+msgstr ""
+"取消啟動"
msgid "Activate"
-msgstr "啟動"
+msgstr ""
+"啟動"
msgid "Add Volume"
msgstr ""
+"新增磁區"
msgid "Extend"
msgstr ""
+"延伸"
msgid "Undefine"
-msgstr "取消定義"
+msgstr ""
+"取消定義"
msgid "Format"
-msgstr "格式:"
+msgstr ""
+"格式"
msgid "Allocation"
-msgstr "配置:"
+msgstr ""
+"配置"
msgid "No templates found."
-msgstr "找不到範本。"
+msgstr ""
+"找不到範本。"
+
+# ENGL1SH_VERS10N 28617_40 DO NOT REMOVE OR CHANGE THIS LINE
+# T9N_SRC_ID 92
+# T9N_SH1P_STR1NG KV310AAP001 1
diff --git a/ui/pages/help/de_DE/guests.dita b/ui/pages/help/de_DE/guests.dita
index 1d64469..7ec80f3 100644
--- a/ui/pages/help/de_DE/guests.dita
+++ b/ui/pages/help/de_DE/guests.dita
@@ -9,22 +9,21 @@ For support please see:
https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<cshelp id="kimhvirtm" xml:lang="de-de">
<title>Gäste</title>
-<shortdesc>Auf der Seite <wintitle>Gäste</wintitle> sind die definierten virtuellen
-Maschinen von KVM aufgelistet.</shortdesc>
+<shortdesc>Auf der Seite <wintitle>Gäste</wintitle> sind die definierten Gäste Ihres Servers aufgelistet. </shortdesc>
<csbody>
<p>Für jeden Gast werden die folgenden Informationen angezeigt:<dl><dlentry>
<dt>Name</dt>
-<dd>Name der virtuellen Maschine.</dd>
+<dd>Name des Gastes. </dd>
</dlentry><dlentry>
<dt>CPU</dt>
-<dd>Prozentsatz der Prozessorauslastung in der virtuellen Maschine.</dd>
-</dlentry><dlentry>
-<dt>Netz-E/A</dt>
-<dd>Netz-E/A-Übertragungsrate in KB pro Sekunde.</dd>
+<dd>Prozentsatz der Prozessorauslastung auf dem Gastsystem. </dd>
</dlentry><dlentry>
<dt>Platten-E/A</dt>
<dd>Platten-E/A-Übertragungsrate in KB pro Sekunde.</dd>
</dlentry><dlentry>
+<dt>Netz-E/A</dt>
+<dd>Netz-E/A-Übertragungsrate in KB pro Sekunde.</dd>
+</dlentry><dlentry>
<dt>Live Tile</dt>
<dd>Status der Konsole für das Gastbetriebssystem oder ein Symbol, das die
<tm tmtype="tm" trademark="Linux">Linux</tm>-Verteilung darstellt, wenn
@@ -42,86 +41,79 @@ ist er ausgeschaltet. Wenn das Symbol grün ist, ist er eingeschaltet.</dd>
<p>Die folgenden Aktionen können für jeden Gast ausgewählt werden:<ul>
<li>Wählen Sie <uicontrol>Verbinden</uicontrol> aus, um eine Verbindung zur fernen Konsole
für das Gastbetriebssystem herzustellen.</li>
-<li>Wählen Sie <uicontrol>Medien verwalten</uicontrol> aus, um den Pfad zu den
-Installationsmedien zu ändern.</li>
-<li>Wählen Sie <uicontrol>Zurücksetzen</uicontrol> aus, um den Gast zurückzusetzen.</li>
+<li>Wählen Sie <uicontrol>Klonen</uicontrol> aus, um eine vorhandene Gastdefinition zur Erstellung eines Gastes zu kopieren. </li>
+<li>Wählen Sie <uicontrol>Zurücksetzen</uicontrol> aus, um den Gast zurückzusetzen. Sie können nur Gäste zurücksetzen, die bereits gestartet
+wurden. </li>
<li>Wählen Sie <uicontrol>Bearbeiten</uicontrol> aus, um die Eigenschaften eines
bestehenden Gastes zu bearbeiten. Gäste können nur bearbeitet werden, wenn sie gestoppt sind.</li>
+<li>Wählen Sie <uicontrol>Starten</uicontrol> aus, um einen Gast zu starten. </li>
+<li>Wählen Sie <uicontrol>Herunterfahren</uicontrol> aus, um einen Gast ordnungsgemäß zu beenden. </li>
+<li>Wählen Sie <uicontrol>Ausschalten</uicontrol> aus, um eine sofortige Beendigung des Gastes zu erzwingen. </li>
<li>Wählen Sie <uicontrol>Löschen</uicontrol> aus, um den Gast zu löschen.</li>
-</ul>Um einen Gast bzw. eine virtuelle Maschine zu erstellen, klicken Sie auf das <uicontrol>Plus (+)</uicontrol>-Symbol oben rechts auf der Seite.</p>
+</ul>Um einen Gast zu erstellen, klicken Sie auf das Symbol <uicontrol>Plus (+)</uicontrol> auf der Seite. </p>
</csbody>
<cshelp id="kimhvirtmcrt" xml:lang="de-de">
-<title>Virtuelle Maschine erstellen</title>
-<shortdesc>Erstellen Sie eine virtuelle Maschine mithilfe einer bestehenden Vorlage.</shortdesc>
+<title>Gast erstellen</title>
+<shortdesc>Erstellen Sie einen Gast mithilfe einer bestehenden Vorlage. </shortdesc>
<csbody>
<p> <ol>
-<li>Geben Sie den Namen ein, mit dem die virtuelle Maschine gekennzeichnet wird.</li>
-<li rev="rev1">Wählen Sie eine Vorlage aus. <ul>
+<li>Geben Sie den Namen ein, mit dem der Gast gekennzeichnet wird. </li>
+<li>Wählen Sie eine Vorlage aus. <ul>
<li>Wenn Vorlagen vorhanden sind, wählen Sie eine aus den angezeigten Vorlagen aus.</li>
<li>Wenn keine Vorlagen vorhanden sind, klicken Sie auf <uicontrol>Vorlage erstellen</uicontrol>, um eine Vorlage zu erstellen.</li>
-</ul></li>
+</ul>Sie können Informationen zu einer Vorlage anzeigen, wenn Sie den Mauszeiger über das entsprechende Element bewegen. </li>
<li>Klicken Sie auf <uicontrol>Erstellen</uicontrol>.</li>
</ol> </p>
</csbody>
</cshelp>
<cshelp id="kimhvirtmedit" xml:lang="de-de">
<title>Gast bearbeiten</title>
-<shortdesc>Bearbeiten Sie die Eigenschaften einer bestehenden virtuellen Maschine. Einige Eigenschaften können nur bearbeitet werden, solange der Gast gestoppt ist. Andere Eigenschaften treten beim nächsten Booten in Kraft. </shortdesc>
-<csprolog><csmetadata></csmetadata></csprolog>
+<shortdesc>Bearbeiten Sie die Eigenschaften eines vorhandenen Gastes. Einige Eigenschaften können nur bearbeitet werden, solange der Gast gestoppt ist. Andere Eigenschaften treten beim nächsten Booten in Kraft. </shortdesc>
<csbody>
-<p>Für jeden Gast werden die folgenden Informationen auf der Registerkarte <wintitle>Allgemein</wintitle> angezeigt:<dl>
-<dlentry>
-<dt>Name</dt>
-<dd>Name der virtuellen Maschine. (Kann nur bearbeitet werden, solange der Gast gestoppt ist.)</dd>
-</dlentry><dlentry>
-<dt>CPUs</dt>
-<dd>Anzahl der Prozessoren. (Wenn der Gast aktiv ist, tritt die neue Menge beim nächsten Booten in Kraft.)
-</dd>
+<dl><dlentry>
+<dt>Allgemein</dt>
+<dd>Zeigt Informationen zu Ihrem Gast (einschließlich Name, CPUs, Speicher) und ein Symbol an, das für Ihren Gast verwendet werden kann. Sie können den Namen eines gestoppten Gastes bearbeiten. Änderungen der CPUs und des Speichers werden nach dem nächsten Bootvorgang wirksam. </dd>
</dlentry><dlentry>
<dt>Speicher</dt>
-<dd>Speicherkapazität in MB. (Wenn der Gast aktiv ist, tritt die neue Menge beim nächsten Booten in Kraft.)
-</dd>
-</dlentry><dlentry>
-<dt>Symbol</dt>
-<dd>Grafikbild, das die Linux-Verteilung darstellt und anstelle des aktuellen Status (Live Tile) angezeigt werden soll, wenn der Gast nicht aktiv ist.</dd>
-</dlentry></dl></p>
-<p>Die folgenden Informationen werden auf der Registerkarte <wintitle>Speicher</wintitle> angezeigt.</p>
+<dd>Zeigt die Einheit und den Speicherpfad für den ausgewählten Gast an.
+Sie können Speichereinheiten für Ihren Gast hinzufügen, bearbeiten und entfernen. </dd>
+</dlentry></dl>
<dl><dlentry>
-<dt>Speicher</dt>
-<dd>Zeigt die Position der ISO-Datei an, die für die Installation verwendet wird.</dd>
+<dt>Schnittstelle</dt>
+<dd>Zeigt Netzinformationen für den Gast (einschließlich Name, Typ und MAC-Adresse) an. Sie können Schnittstellen für Ihren Gast hinzufügen, bearbeiten und entfernen. </dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Berechtigung</dt>
+<dd>Zeigt die Benutzer und Gruppen an, die über eine Berechtigung für den Gast verfügen. </dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>PCI-Einheit für Host</dt>
+<dd>Zeigt eine Liste aller PCI-Einheiten an, die auf dem Host verfügbar sind. </dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Snapshot</dt>
+<dd>Zeigt Snapshots des Gastes an. Sie können einen Snapshot erstellen, bearbeiten oder löschen. Durch Auswahl eines Snapshots und der Option zum Zurücksetzen wird der Gast auf den zu einem bestimmten Zeitpunkt in der Vergangenheit bestehenden Status zurückgesetzt, der anhand der Snapshotdaten ermittelt wird. Alle Änderungen, die nach diesem Zeitpunkt durchgeführt wurden, werden verworfen. </dd>
</dlentry></dl>
<p> Felder, die nicht inaktiviert sind, können bearbeitet werden. Nachdem Sie ein Feld bearbeitet haben, klicken Sie auf <uicontrol>Speichern</uicontrol>. </p>
</csbody>
</cshelp>
-<cshelp id="kimstoragedevice" xml:lang="de-de">
-<title>Speichereinheit hinzufügen, ersetzen oder abhängen</title>
-<shortdesc rev="rev1">Sie können eine Speichereinheit zu Ihrer virtuellen Maschine hinzufügen oder diese ersetzen oder abhängen. Die einzige unterstützte Einheit ist CD-ROM. Führen Sie die folgenden Schritte aus, um Ihre Speichereinheiten zu bearbeiten:</shortdesc>
+<cshelp id="kimhvirtmclone" xml:lang="de-de">
+<title>Gast klonen</title>
+<shortdesc>Durch das Klonen eines Gastes kann eine Kopie des Gastes erstellt werden. </shortdesc>
<csbody>
+<p>Gehen Sie wie folgt vor, um einen Gast zu klonen: </p>
<ol>
-<li>Wählen Sie im Fenster <wintitle>Gast bearbeiten</wintitle> die Option <wintitle>Speicher</wintitle> aus.</li>
-<li>Um eine Speichereinheit zu ersetzen, klicken Sie auf das erste Symbol mit dem <uicontrol>orangefarbenen Schrägstrich (/)</uicontrol>. Geben Sie den ISO-Dateipfad ein und klicken Sie auf <uicontrol>Ersetzen</uicontrol>.</li>
-<li>Um eine Speichereinheit abzuhängen, klicken Sie auf das zweite Symbol mit dem <uicontrol>roten Gedankenstrich (-)</uicontrol>. Bestätigen Sie den Löschvorgang und klicken Sie auf <uicontrol>OK</uicontrol>.</li>
-<li>Um eine Speichereinheit hinzuzufügen, klicken Sie auf das dritte Symbol mit dem grünen <uicontrol>Pluszeichen (+)</uicontrol>. Geben Sie einen Einheitennamen und einen ISO-Dateipfad ein und klicken Sie auf <uicontrol>Anhängen</uicontrol>.</li>
-</ol>
-</csbody>
-</cshelp>
-<cshelp id="kimreplacemedia" xml:lang="de-de">
-<title>CD-ROM für VM ersetzen</title>
-<shortdesc rev="rev1">Sie können den Inhalt der CD-ROM für eine virtuelle Maschine nach Abschluss der Installation ersetzen.</shortdesc>
-<csbody>
-<ol>
-<li>Stellen Sie sicher, dass die virtuelle Maschine gestartet ist.</li>
-<li>Wählen Sie aus dem Aktionsmenü die Option <uicontrol>Medien verwalten</uicontrol> aus.</li>
-<li>Um das zu ändern, was aktuell in der CD-ROM geladen ist, klicken Sie auf das Symbol mit dem <uicontrol>orangefarbenen Schrägstrich (/)</uicontrol> neben dem hdc-Feld.</li>
-<li>Geben Sie auf der Seite <wintitle>CD-ROM für VM ersetzen</wintitle> den ISO-Dateipfad ein. Die anderen beiden Felder sind schreibgeschützt.</li>
-<li>Klicken Sie auf <uicontrol>Ersetzen</uicontrol>.</li>
+<li>Wählen Sie im Aktionsmenü eines Gastes <uicontrol>Klonen</uicontrol> aus. </li>
+<li>Akzeptieren Sie die Warnung. <note>Wenn ein Zielgast mit SCSI- oder iSCSI-Datenträgern arbeitet oder wenn der Zielpool nicht über genügend Speicherplatz verfügt, dann wird der Klon in einem Standardspeicherpool erstellt. </note></li>
</ol>
+<p>Ein Gast wird in Ihrer Liste mit der Bezeichnung <uicontrol>Wird geklont...</uicontrol> angezeigt. Nach Abschluss des Prozesses steht der geklonte Gast zur Benutzung zur Verfügung. </p>
+
</csbody>
</cshelp>
<?tm 1391540919 3?>
</cshelp>
-<!-- ENGL1SH_VERS10N 45645_6 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 04963_6 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 231 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/de_DE/host.dita b/ui/pages/help/de_DE/host.dita
index 33a40e3..9f676df 100644
--- a/ui/pages/help/de_DE/host.dita
+++ b/ui/pages/help/de_DE/host.dita
@@ -16,13 +16,13 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<li>Wählen Sie <uicontrol>Erneut starten</uicontrol> aus, um das Hostsystem erneut zu starten.</li>
<li>Wählen Sie <uicontrol>Verbinden</uicontrol> aus, um eine VNC-Verbindung zum Hostsystem herzustellen, wenn noch keine Verbindung besteht.</li>
</ul></p>
-<p>Klicken Sie auf die folgenden Abschnitte, um Informationen zum Host anzuzeigen:<dl>
-<dlentry>
+<p>Klicken Sie auf die folgenden Abschnitte, um Informationen zum Host anzuzeigen:</p>
+<dl><dlentry>
<dt>Basisinformationen</dt>
-<dd>Dieser Abschnitt zeigt die Verteilung, die Version und den Codenamen des Hostbetriebssystems sowie den Prozessortyp und die Speicherkapazität in GB an.</dd>
+<dd>Dieser Abschnitt zeigt die Verteilung, die Version und den Codenamen des Hostbetriebssystems sowie den Prozessortyp, die Anzahl der Online-CPUs und die Speicherkapazität in GB an. </dd>
</dlentry><dlentry>
<dt>Systemstatistik</dt>
-<dd>Dieser Abschnitt zeigt mithilfe von Grafiken Statistiken für CPU, Speicher, Platten-E/A und Netz-E/A für den Host an. Wählen Sie <uicontrol>Daten werden nach dem Verlassen dieser Seite gesammelt</uicontrol> aus, um mit der Sammlung von Daten fortzufahren, wenn die Host-Registerkarte nicht angezeigt wird.</dd>
+<dd>Dieser Abschnitt zeigt mithilfe von Grafiken Statistiken für CPU, Speicher, Platten-E/A und Netz-E/A für den Host an. </dd>
</dlentry><dlentry>
<dt>Software-Updates</dt>
<dd>Dieser Abschnitt zeigt Informationen für alle Pakete an, bei denen Aktualisierungen verfügbar sind, einschließlich Paketname, Version, Architektur und Repository. Sie können alle aufgelisteten Pakete aktualisieren, indem Sie <uicontrol>Alle aktualisieren</uicontrol> auswählen. Sie können nicht einzelne Pakete zur Aktualisierung auswählen.</dd>
@@ -31,19 +31,19 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<dd>Dieser Abschnitt zeigt Repositorys an, die dem Hostsystem zugeordnet sind. Sie können Repositorys hinzufügen, aktivieren, bearbeiten oder entfernen. Beim Hinzufügen wird ein Repository dem Hostsystem zugeordnet. Das Aktivieren eines Repositorys dagegen ermöglicht dem Host den Zugriff auf das Repository. Wenn Ihr System Red Hat Enterprise
Linux oder Fedora ist, können Sie <filepath>yum</filepath>-Repositorys hinzufügen.
Wenn Ihr System Ubuntu oder Debian ist, fügen Sie <filepath>deb</filepath>-Repositorys hinzu.<p>Wenn Sie mit yum-Repositorys arbeiten, können Sie eine GPG-Prüfung hinzufügen, um sicherzustellen, dass ein Paket aus diesem Repository nicht beschädigt wurde.
-Wählen Sie ein Repository und dann <uicontrol>Bearbeiten</uicontrol> aus. Wählen Sie <uicontrol>Ja</uicontrol> aus, um die GPG-Prüfung zu aktivieren, und geben Sie dann ein URL zur GPG-Schlüsseldatei für das Repository ein.</p></dd>
+Wählen Sie ein Repository und dann <uicontrol>Bearbeiten</uicontrol> aus. Wählen Sie <uicontrol>Ja</uicontrol> aus, um <uicontrol>GPG-Prüfung</uicontrol> zu aktivieren, und geben Sie dann eine URL zur GPG-Schlüsseldatei für das Repository ein. </p></dd>
</dlentry><dlentry>
<dt>Debugberichte</dt>
<dd>Dieser Abschnitt zeigt Debugberichte, einschließlich Name und Dateipfad, an.
Sie haben die Möglichkeit, einen neuen Bericht zu erstellen oder einen bestehenden Bericht umzubenennen, zu entfernen oder herunterzuladen.<p>Der Debugbericht wird während des Befehls <cmdname>sosreport</cmdname> generiert. Er ist verfügbar für Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>-, Fedora-
und Ubuntu-Verteilungen. Der Befehl generiert eine .tar-Datei, die Konfigurations- und Diagnoseinformationen enthält, wie zum Beispiel Kernelversion, geladene Module sowie System- und Servicekonfigurationdateien.
Der Befehl führt zudem externe Programme aus, um weitere Informationen zu sammeln, und speichert diese Ausgabe im resultierenden Archiv.</p> </dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
<?tm 1392659967 1?>
</cshelp>
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42248_4 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/de_DE/network.dita b/ui/pages/help/de_DE/network.dita
index 49a2935..830715c 100644
--- a/ui/pages/help/de_DE/network.dita
+++ b/ui/pages/help/de_DE/network.dita
@@ -32,7 +32,7 @@ Address Translation, Netzadressumsetzung).</dd>
<li rev="rev1">Wählen Sie <uicontrol>Starten</uicontrol> aus, um die Netzverbindung herzustellen.</li>
<li>Wählen Sie <uicontrol>Stoppen</uicontrol> aus, um die Netzverbindung zu beenden.</li>
<li>Wählen Sie <uicontrol>Löschen</uicontrol> aus, um die Verbindungsinformationen zu löschen.</li>
-</ul>Um ein Netz zu erstellen, klicken Sie auf das Symbol <uicontrol>Plus (+)</uicontrol> oben rechts in der Anzeige.</p>
+</ul>Um ein Netz zu erstellen, klicken Sie auf das Symbol <uicontrol>Plus (+)</uicontrol>. </p>
</csbody>
<cshelp id="kimhnetwcrt" xml:lang="de-de">
<title>Netz erstellen</title>
@@ -57,6 +57,6 @@ Address Translation, Netzadressumsetzung).</dd>
</cshelp>
-<!-- ENGL1SH_VERS10N 47050_3 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42005_3 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 230 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/de_DE/storage.dita b/ui/pages/help/de_DE/storage.dita
index 7f89603..18c199d 100644
--- a/ui/pages/help/de_DE/storage.dita
+++ b/ui/pages/help/de_DE/storage.dita
@@ -14,7 +14,10 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<p>Für jeden Speicherpool werden die folgenden Informationen angezeigt:<dl>
<dlentry>
<dt>Name</dt>
-<dd>Name des Speicherpools und genutzter Prozentsatz.</dd>
+<dd>Name des Speicherpools. </dd>
+</dlentry><dlentry>
+<dt>% belegt</dt>
+<dd>Prozentsatz des Speicherpools, der momentan belegt ist. </dd>
</dlentry><dlentry>
<dt>Status</dt>
<dd>Status des Speicherpools, aktiv (grün) oder inaktiv (rot). </dd>
@@ -34,21 +37,10 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<p>Die folgenden Aktionen können für jeden Speicherpool ausgewählt werden:<ul>
<li>Wählen Sie <uicontrol>Aktivieren</uicontrol> aus, um den Speicherpool zu aktivieren, damit er genutzt werden kann.</li>
<li>Wählen Sie <uicontrol>Inaktivieren</uicontrol> aus, um einen aktiven Speicherpool zu inaktivieren.</li>
-<li>Wählen Sie <uicontrol>Definition aufheben</uicontrol>, um einen inaktiven Speicherpool zu entfernen.</li>
+<li>Wählen Sie <uicontrol>Datenträger hinzufügen</uicontrol> aus, um einem aktiven Speicherpool weitere Datenträger hinzuzufügen. </li>
+<li>Wählen Sie <uicontrol>Definition aufheben</uicontrol>, um einen inaktiven Speicherpool zu entfernen.</li>
</ul></p>
-<p>Um Details zum Speicherdatenträger anzuzeigen, klicken Sie auf den Pfeil auf der rechten Seite der Speicherpoolzeile. Zu den Details gehören folgende Informationen:<dl><dlentry>
-<dt>Typ</dt>
-<dd>Typ des Datenträgers, zum Beispiel <uicontrol>file</uicontrol>.</dd>
-</dlentry><dlentry>
-<dt>Format</dt>
-<dd>Das Format, variiert abhängig vom Typ.</dd>
-</dlentry><dlentry>
-<dt>Kapazität</dt>
-<dd>Größe des Speicherdatenträgers.</dd>
-</dlentry><dlentry>
-<dt>Zuordnung</dt>
-<dd>Speicherplatz, der bereits im Speicherpool zugeordnet ist.</dd>
-</dlentry></dl>Um einen Speicherpool zu definieren, klicken Sie auf das Symbol <uicontrol>Plus (+)</uicontrol> oben rechts in der Anzeige.</p>
+<p>Um Details zum Speicherdatenträger anzuzeigen, klicken Sie auf den Pfeil auf der rechten Seite der Speicherpoolzeile. Um einen Speicherpool zu definieren, klicken Sie auf das Symbol <uicontrol>Plus (+)</uicontrol>. </p>
</csbody>
<cshelp id="kimhdefstor" xml:lang="de-de">
<title>Speicherpool definieren</title>
@@ -74,13 +66,28 @@ Wenn Sie <uicontrol>iSCSI</uicontrol> auswählen, geben Sie die IP-Adresse vom <
<dt><uicontrol>SCSI-Fibre Channel</uicontrol></dt>
<dd>Gibt einen Pool an, der auf einem SCSI-Fibre Channel basiert. Wählen Sie aus, welcher Adapter verwendet werden soll.</dd>
</dlentry></dl></li>
+<li>Geben Sie einen Speicherpfad für den Speicherpool an. Der Speicherpfad gibt die Position im lokalen Dateisystem an, der der Pool zugeordnet ist.
+Der Pfad muss eindeutig sein. Wenn das Verzeichnis bei der Poolerstellung noch nicht vorhanden ist, dann wird es vom System für Sie erstellt. </li>
<li>Klicken Sie auf <uicontrol>Erstellen</uicontrol>.</li>
</ol> </p>
</csbody>
</cshelp>
+<cshelp id="kimhdefstor" xml:lang="de-de">
+<title>Datenträger hinzufügen</title>
+<shortdesc>Fügt einen Datenträger zu einem Speicherpool hinzu. </shortdesc>
+<csbody>
+<dl><dlentry>
+<dt>Über Remote URL abrufen</dt>
+<dd>Gibt eine Position an, von der der Datenträger heruntergeladen werden soll. Beispiel: <filepath>https://my-server/fedora22.img</filepath>.</dd>
+</dlentry><dlentry>
+<dt>Datei hochladen</dt>
+<dd>Gibt eine Position auf Ihrem lokalen System an. </dd>
+</dlentry></dl>
+</csbody>
+</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 22336_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 52145_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 233 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/de_DE/templates.dita b/ui/pages/help/de_DE/templates.dita
index 5063930..efe145a 100644
--- a/ui/pages/help/de_DE/templates.dita
+++ b/ui/pages/help/de_DE/templates.dita
@@ -11,8 +11,8 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<title>Vorlagen</title>
<shortdesc>Die Seite <wintitle>Vorlagen</wintitle> zeigt die definierten Vorlagen der virtuellen Maschine an, die zum Erstellen von KVM-Gästen verwendet werden können.</shortdesc>
<csbody>
-<p>Für jede Vorlage werden die folgenden Informationen angezeigt:<dl>
-<dlentry>
+<p>Für jede Vorlage werden die folgenden Informationen angezeigt:</p>
+<dl><dlentry>
<dt>BS</dt>
<dd>Name des Betriebssystems oder der Verteilung.</dd>
</dlentry><dlentry>
@@ -24,66 +24,60 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</dlentry><dlentry>
<dt>Speicher</dt>
<dd>Größe des zuzuordnenden Arbeitsspeichers in MB.</dd>
-</dlentry></dl></p>
-<p>Die folgenden Aktionen können für jede Vorlage ausgewählt werden:<ul>
+</dlentry></dl>
+<p>Die folgenden Aktionen können für jede Vorlage ausgewählt werden:</p>
+<ul>
<li>Wählen Sie <uicontrol>Bearbeiten</uicontrol> aus, um die Vorlage zu bearbeiten.</li>
+<li>Wählen Sie <uicontrol>Klonen</uicontrol> aus, um eine Vorlage zu kopieren. </li>
<li>Wählen Sie <uicontrol>Löschen</uicontrol> aus, um die Vorlage zu löschen.</li>
-</ul>Um eine Vorlage hinzuzufügen, klicken Sie auf das Symbol <uicontrol>Plus (+)</uicontrol> oben rechts in der Anzeige.</p>
+</ul>
+<p>Um eine Vorlage hinzuzufügen, klicken Sie auf das Symbol <uicontrol>Plus (+)</uicontrol>. </p>
</csbody>
<cshelp id="kimhedittempl" xml:lang="de-de">
<title>Vorlage bearbeiten</title>
<shortdesc>Bearbeiten Sie eine bestehende Vorlage.</shortdesc>
<csbody>
-<p>Für jede Vorlage werden die folgenden Informationen angezeigt: <dl>
-<dlentry>
-<dt>Name</dt>
-<dd>Name der Vorlage.</dd>
-</dlentry><dlentry>
-<dt>Anbieter</dt>
-<dd>Der Name des Unternehmens, das das Betriebssystem oder die Verteilung erstellt hat, für die die Vorlage konfiguriert ist.</dd>
-</dlentry><dlentry>
-<dt>Version</dt>
-<dd>Die Version des Betriebssystems oder der Verteilung, für die die Vorlage konfiguriert ist.</dd>
-</dlentry><dlentry>
-<dt>CPU-Anzahl</dt>
-<dd>Anzahl der Prozessoren, die für die Vorlage definiert sind.</dd>
+<p>Für jede Vorlage werden die folgenden Informationen angezeigt: </p>
+<dl><dlentry>
+<dt>Allgemein</dt>
+<dd>Zeigt den Namen, die Anbieterverteilung, die Version, den Speicher sowie den Dateipfad zur ISO-Datei und die Grafikvorgaben an. </dd>
</dlentry><dlentry>
<dt>Speicher</dt>
-<dd>Speicherkapazität in MB, die der virtuellen Maschine zugeordnet werden soll.</dd>
-</dlentry><dlentry>
-<dt>Platte</dt>
-<dd>Plattengröße in GB.</dd>
+<dd>Geben Sie die Speicherpoolinformationen für die Vorlage an. </dd>
</dlentry><dlentry>
-<dt>CD-ROM</dt>
-<dd>Dateipfad zur Position der ISO-Datei an, die für die Installation des KVM-Gastes verwendet wird.</dd>
+<dt>Schnittstelle</dt>
+<dd>Zeigt die Standardnetzschnittstellen an, die für den KVM-Gast verfügbar sind.
+Sie können mehrere Netze auswählen.</dd>
</dlentry><dlentry>
-<dt>Speicherpool</dt>
-<dd>Bestimmter Speicherpool oder der Standardspeicherpool.</dd>
-</dlentry><dlentry>
-<dt>Netz</dt>
-<dd>Standardnetzschnittstelle, die für den KVM-Gast verfügbar ist. Sie können mehrere Netze auswählen.</dd>
-</dlentry></dl> Felder, die nicht inaktiviert sind, können bearbeitet werden. Nachdem Sie ein Feld bearbeitet haben, klicken Sie auf <uicontrol>Speichern</uicontrol>. </p>
+<dt>Prozessor</dt>
+<dd>Geben Sie im Feld <uicontrol>CPU-Anzahl</uicontrol> die Anzahl der Prozessoren an, die für die Vorlage definiert sind. </dd>
+<dd>Wählen Sie aus, dass die CPU-Topologie für jeden Gast manuell definiert werden soll. </dd>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddtempl">
<title>Vorlage hinzufügen</title>
<shortdesc>Fügen Sie eine Vorlage vom Quellendatenträger hinzu. Sie können für eine nachfolgende Erkennung Ihr eigenes ISO-Image zum Speicherpool 'ISO' hinzufügen.</shortdesc>
<csbody>
-<p>Wählen Sie die Position des Quellendatenträgers aus den folgenden Optionen aus:<dl>
-<dlentry>
+<p>Wählen Sie die Position des Quellendatenträgers aus den folgenden Optionen aus:</p>
+<dl><dlentry>
<dt>Lokales ISO-Image</dt>
<dd>Wählen Sie diese Option aus, um Speicherpools nach Installations-ISO-Images zu durchsuchen, die im System verfügbar sind.</dd>
</dlentry><dlentry>
+<dt>Lokale Imagedatei</dt>
+<dd>Wählen Sie aus, dass ein Pfad zur lokalen Imagedatei angegeben werden soll. </dd>
+</dlentry><dlentry>
<dt>Fernes ISO-Image</dt>
<dd>Wählen Sie diese Option aus, um eine ferne Position für ein Installations-ISO-Image anzugeben.</dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddloct">
-<title>Vorlage hinzufügen - lokales ISO-Image</title>
-<shortdesc>Fügen Sie eine Vorlage aus einem lokalen ISO-Image hinzu.</shortdesc>
+<title>Vorlage hinzufügen - ISO-Image</title>
+<shortdesc>Fügen Sie eine Vorlage aus einem ISO-Image hinzu. </shortdesc>
<csbody>
-<p>Die im System verfügbaren ISO-Images werden angezeigt.<dl><dlentry>
+<p>Die im System verfügbaren fernen ISO-Images werden angezeigt. </p>
+<dl><dlentry>
<dt>BS</dt>
<dd>Name des Betriebssystems oder der Verteilung.</dd>
</dlentry><dlentry>
@@ -92,21 +86,22 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</dlentry><dlentry>
<dt>Größe</dt>
<dd>Größe des ISO-Image.</dd>
-</dlentry></dl></p>
+</dlentry></dl>
<p>Um eine Vorlage aus einem ISO-Image zu erstellen, wählen Sie aus den folgenden
-Optionen aus:<ul>
+Optionen aus:</p>
+<ul>
<li>Wählen Sie ein ISO-Image aus, aus dem Sie eine Vorlage erstellen möchten, und klicken Sie dann auf <uicontrol>Vorlagen aus ausgewähltem ISO erstellen</uicontrol>.</li>
<li>Wählen Sie <uicontrol>Alle</uicontrol> aus, um eine Vorlage aus jedem aufgelisteten ISO-Image zu erstellen, und klicken Sie dann auf <uicontrol>Vorlagen aus ausgewähltem ISO erstellen</uicontrol>.</li>
<li>Wenn das ISO-Image, das Sie verwenden möchten, nicht in den Suchergebnissen angezeigt wird, können Sie aus den folgenden Optionen auswählen:<ul>
<li>Wählen Sie <uicontrol>Ich möchte eine bestimmte ISO-Datei verwenden</uicontrol> aus, um einen Pfad zum ISO-Image anzugeben.</li>
<li>Klicken Sie auf <uicontrol>Weitere ISOs suchen</uicontrol>, um weitere ISO-Images zu suchen.</li>
</ul></li>
-</ul></p>
+</ul>
</csbody>
</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 61085_5 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 24458_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 229 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/es_ES/guests.dita b/ui/pages/help/es_ES/guests.dita
index 88e77e0..5d84c8c 100644
--- a/ui/pages/help/es_ES/guests.dita
+++ b/ui/pages/help/es_ES/guests.dita
@@ -9,21 +9,21 @@ For support please see:
https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<cshelp id="kimhvirtm" xml:lang="es-es">
<title>Invitados</title>
-<shortdesc>La página <wintitle>Invitados</wintitle> lista las máquinas virtuales KVM definidas.</shortdesc>
+<shortdesc>En la página <wintitle>Invitados</wintitle> se listan los invitados definidos para su servidor. </shortdesc>
<csbody>
<p>Se visualiza la siguiente información para cada invitado:<dl><dlentry>
<dt>Nombre</dt>
-<dd>Nombre de la máquina virtual.</dd>
+<dd>Nombre del invitado. </dd>
</dlentry><dlentry>
<dt>CPU</dt>
-<dd>Porcentaje de utilización de procesador en la máquina virtual.</dd>
-</dlentry><dlentry>
-<dt>E/S de red</dt>
-<dd>Velocidad de transmisión de entrada/salida de red en KB por segundos.</dd>
+<dd>Porcentaje de utilización del procesador en el invitado. </dd>
</dlentry><dlentry>
<dt>E/S de disco</dt>
<dd>Velocidad de transmisión de entrada/salida de disco en KB por segundos.</dd>
</dlentry><dlentry>
+<dt>E/S de red</dt>
+<dd>Velocidad de transmisión de entrada/salida de red en KB por segundos.</dd>
+</dlentry><dlentry>
<dt>Livetile</dt>
<dd>Estado de la consola del sistema operativo invitado, o un icono que representa la distribución de <tm tmtype="tm" trademark="Linux">Linux</tm> si el invitado no está activo.</dd>
</dlentry></dl></p>
@@ -37,84 +37,77 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</dlentry></dl> </p>
<p>Se pueden seleccionar las siguientes acciones para cada invitado:<ul>
<li>Seleccione <uicontrol>Conectar</uicontrol> para conectarse a la consola remota para el sistema operativo invitado.</li>
-<li>Seleccione <uicontrol>Gestionar soporte</uicontrol> para cambiar la vía de acceso al soporte de instalación.</li>
-<li>Seleccione <uicontrol>Restablecer</uicontrol> para restablecer el invitado.</li>
+<li>Seleccione <uicontrol>Clonar</uicontrol> para copiar una definición de invitado existente con el fin de crear un invitado. </li>
+<li>Seleccione <uicontrol>Restablecer</uicontrol> para restablecer el invitado. Solamente puede restablecer un invitado que se haya iniciado. </li>
<li>Seleccione <uicontrol>Editar</uicontrol> para editar las propiedades de un invitado existente. Los invitados sólo pueden editarse mientras están detenidos.</li>
+<li>Seleccione <uicontrol>Iniciar</uicontrol> para iniciar un invitado</li>
+<li>Seleccione <uicontrol>Concluir</uicontrol> para concluir un invitado con elegancia.</li>
+<li>Seleccione <uicontrol>Apagar</uicontrol> para forzar una conclusión inmediata del invitado. </li>
<li>Seleccione <uicontrol>Suprimir</uicontrol> para suprimir el invitado.</li>
-</ul>Para crear un invitado o máquina virtual, pulse el icono <uicontrol>más (+)</uicontrol> en la esquina superior derecha de la página.</p>
+</ul>Para crear un invitado, pulse el icono <uicontrol>más (+)</uicontrol> en la página.</p>
</csbody>
<cshelp id="kimhvirtmcrt" xml:lang="es-es">
-<title>Crear máquina virtual</title>
-<shortdesc>Crear una máquina virtual utilizando una plantilla existente.</shortdesc>
+<title>Creación de un invitado</title>
+<shortdesc>Cree un invitado utilizando una plantilla existente. </shortdesc>
<csbody>
<p> <ol>
-<li>Escriba el nombre a utilizar para identificar la máquina virtual.</li>
-<li rev="rev1">Seleccione una plantilla. <ul>
+<li>Escriba el nombre que se va a utilizar para identificar al invitado. </li>
+<li>Seleccione una plantilla. <ul>
<li>Si existen plantillas, seleccione entre las plantillas mostradas.</li>
<li>Si no existen plantillas, pulse <uicontrol>Crear una plantilla</uicontrol> para crear una plantilla.</li>
-</ul></li>
+</ul>Puede ver información sobre una plantilla pasando el cursor por encima. </li>
<li>Pulse <uicontrol>Crear</uicontrol>.</li>
</ol> </p>
</csbody>
</cshelp>
<cshelp id="kimhvirtmedit" xml:lang="es-es">
<title>Editar invitado</title>
-<shortdesc>Editar las propiedades de una máquina virtual existente. Algunas propiedades pueden editarse sólo cuando el invitado se ha detenido. Otras surtirán efecto en el arranque siguiente.</shortdesc>
-<csprolog><csmetadata></csmetadata></csprolog>
+<shortdesc>Edite las propiedades de un invitado existente. Algunas propiedades pueden editarse sólo cuando el invitado se ha detenido. Otras surtirán efecto en el arranque siguiente.</shortdesc>
<csbody>
-<p>Se visualiza la siguiente información para cada invitado en la pestaña <wintitle>General</wintitle>:<dl>
-<dlentry>
-<dt>Nombre</dt>
-<dd>Nombre de la máquina virtual.(sólo puede editarse cuando el invitado se ha detenido)</dd>
-</dlentry><dlentry>
-<dt>CPUs</dt>
-<dd>Número de procesadores.(si el invitado está en ejecución, la nueva cantidad surtirá efecto en el siguiente arranque)
-</dd>
-</dlentry><dlentry>
-<dt>Memoria</dt>
-<dd>Cantidad de memoria en MB.(si el invitado está en ejecución, la nueva cantidad surtirá efecto en el siguiente arranque)
-</dd>
-</dlentry><dlentry>
-<dt>Icono</dt>
-<dd>Imagen gráfica que representa la distribución de Linux a visualizar en lugar del estado actual (Livetile) cuando el invitado no está activo.</dd>
-</dlentry></dl></p>
-<p>Se visualiza la siguiente información en la pestaña <wintitle>Almacenamiento</wintitle>.</p>
<dl><dlentry>
+<dt>General</dt>
+<dd>Muestra información sobre el invitado, incluyendo el nombre, las CPU, la memoria y el icono para utilizarlo con su invitado. Puede editar el nombre de un invitado detenido. El cambio de CPU y de memoria entra en vigor tras el siguiente arranque. </dd>
+</dlentry><dlentry>
<dt>Almacenamiento</dt>
-<dd>Muestra la ubicación del archivo ISO utilizado para la instalación.</dd>
+<dd>Muestra el dispositivo y la vía de acceso para el almacenamiento del invitado seleccionado.
+Puede añadir, editar y eliminar dispositivos de almacenamiento para su invitado. </dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Interfaz</dt>
+<dd>Muestra información de red del invitado, incluyendo el nombre, el tipo y la dirección MAC. Puede añadir, editar y eliminar interfaces para su invitado. </dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Permiso</dt>
+<dd>Muestra los usuarios y grupos que están autorizados para el invitado. </dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Dispositivo PCI de host</dt>
+<dd>Muestra una lista de todos los dispositivos PCI disponibles en el host. </dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Instantánea</dt>
+<dd>Muestra las instantáneas del invitado. Puede crear, editar o suprimir una instantánea. Al seleccionar una instantánea y seleccionar revertir, se restaura el invitado en un punto del pasado, que viene determinado por los datos de la instantánea y se descartan los cambios realizados pasado ese punto del tiempo. </dd>
</dlentry></dl>
<p> Los campos que no están inhabilitados pueden editarse. Después de editar un campo, pulse <uicontrol>Guardar</uicontrol>. </p>
</csbody>
</cshelp>
-<cshelp id="kimstoragedevice" xml:lang="es-es">
-<title>Añadir, sustituir o desconectar un dispositivo de almacenamiento</title>
-<shortdesc rev="rev1">Puede añadir, sustituir o desconectar un dispositivo de almacenamiento a la máquina virtual. El único dispositivo soportado es CDROM. Para editar los dispositivos de almacenamiento, siga estos pasos:</shortdesc>
+<cshelp id="kimhvirtmclone" xml:lang="es-es">
+<title>Clonación de un invitado </title>
+<shortdesc>La clonación de un invitado le permite crear una copia de un invitado. </shortdesc>
<csbody>
+<p>Para clonar un invitado: </p>
<ol>
-<li>En la ventana <wintitle>Editar invitado</wintitle>, seleccione <wintitle>Almacenamiento</wintitle>.</li>
-<li>Para sustituir un dispositivo de almacenamiento, pulse el primer icono con la <uicontrol>barra inclinada naranja (/)</uicontrol>. Especifique la vía de acceso del archivo ISO y pulse <uicontrol>Sustituir</uicontrol>.</li>
-<li>Para desconectar un dispositivo de almacenamiento, pulse el segundo icono con el <uicontrol>guión rojo (-)</uicontrol>. Confirme la supresión y pulse <uicontrol>Aceptar</uicontrol>.</li>
-<li>Para añadir un dispositivo de almacenamiento, pulse el tercer icono con el <uicontrol>signo más (+)</uicontrol> verde. Especifique un nombre de dispositivo y la vía de acceso del archivo ISO y pulse <uicontrol>Conectar</uicontrol>.</li>
-</ol>
-</csbody>
-</cshelp>
-<cshelp id="kimreplacemedia" xml:lang="es-es">
-<title>Sustituir un CDROM de máquina virtual</title>
-<shortdesc rev="rev1">Puede sustituir el contenido del CDROM para una máquina virtual después de completarse la instalación.</shortdesc>
-<csbody>
-<ol>
-<li>Asegúrese de que la máquina virtual se ha iniciado.</li>
-<li>En el menú Acciones, seleccione <uicontrol>Gestionar soporte</uicontrol>.</li>
-<li>Para cambiar lo que está cargado actualmente en el CDROM, pulse el icono <uicontrol>barra inclinada naranja (/)</uicontrol> junto al campo hdc.</li>
-<li>En la página <wintitle>Sustituir un CDROM de máquina virtual</wintitle>, especifique la vía de acceso del archivo ISO. Los otros dos campos son de sólo lectura.</li>
-<li>Pulse <uicontrol>Sustituir</uicontrol>.</li>
+<li>Seleccione <uicontrol>Clonar</uicontrol> del menú Acción de un invitado. </li>
+<li>Acepte el aviso. <note>Cuando un invitado de destino está utilizando volúmenes SCSI o iSCSI o si la agrupación de destino no tiene suficiente espacio, el clon se creará en una agrupación de almacenamiento predeterminada. </note></li>
</ol>
+<p>Un invitado aparece en su lista con la etiqueta <uicontrol>Clonando...</uicontrol> Cuando el proceso se ha completado, el invitado clonado está disponible para utilizarlo. </p>
+
</csbody>
</cshelp>
<?tm 1391540919 3?>
</cshelp>
-<!-- ENGL1SH_VERS10N 45645_6 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 04963_6 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 231 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/es_ES/host.dita b/ui/pages/help/es_ES/host.dita
index 7734244..90f60f8 100644
--- a/ui/pages/help/es_ES/host.dita
+++ b/ui/pages/help/es_ES/host.dita
@@ -16,13 +16,13 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<li>Seleccione <uicontrol>Reiniciar</uicontrol> para reiniciar el sistema host.</li>
<li>Seleccione <uicontrol>Conectar</uicontrol> para abrir una conexión VNC al sistema host, si no está conectado aún.</li>
</ul></p>
-<p>Pulse en las secciones siguientes para visualizar información acerca del host:<dl>
-<dlentry>
+<p>Pulse en las secciones siguientes para visualizar información acerca del host:</p>
+<dl><dlentry>
<dt>Información básica</dt>
-<dd>Esta sección muestra la distribución del sistema operativo de host, la versión y el nombre de código, así como el tipo de procesador y la cantidad de memoria en GB.</dd>
+<dd>Esta sección muestra la distribución del sistema operativo de host, la versión, el nombre de código, así como el tipo de procesador, el número de CPU en línea y la cantidad de memoria en GB.</dd>
</dlentry><dlentry>
<dt>Estadísticas del sistema</dt>
-<dd>Esta sección muestra gráficos para mostrar estadísticas para CPU, memoria, E/S de disco y E/S de red para el host. Seleccione <uicontrol>Recoger datos después de salir de esta página</uicontrol> para continuar la recogida de datos cuando la pestaña principal ya no está a la vista.</dd>
+<dd>Esta sección muestra gráficos para mostrar estadísticas para CPU, memoria, E/S de disco y E/S de red para el host. </dd>
</dlentry><dlentry>
<dt>Actualizaciones de software</dt>
<dd>En esta sección se muestra información para todos los paquetes que tienen actualizaciones disponibles, incluido el nombre de paquete, versión, arquitectura y repositorio. Puede actualizar todos los paquetes listados seleccionando <uicontrol>Actualizar todo</uicontrol>. No puede seleccionar paquetes individuales para las actualizaciones.</dd>
@@ -31,19 +31,19 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<dd>En esta sección se muestran los repositorios que están asociados con el sistema host. Puede añadir, habilitar, editar o eliminar repositorios. Añadir un repositorio lo asocia con el sistema host mientras que habilitar un repositorio permite que el host acceda a él. Si el sistema es Red Hat Enterprise
Linux o Fedora, puede añadir repositorios <filepath>yum</filepath>.
Si el sistema es Ubuntu o Debian, añada repositorios <filepath>deb</filepath>.<p>Si está trabajando con repositorios yum, puede añadir una comprobación GPG para verificar que un paquete de este repositorio no ha resultado dañado.
-Seleccione un repositorio y, a continuación, <uicontrol>Editar</uicontrol>. Seleccione <uicontrol>Sí</uicontrol> para habilitar la comprobación GPG y, a continuación, especifique un URL al archivo de claves GPG para el repositorio.</p></dd>
+Seleccione un repositorio y, a continuación, <uicontrol>Editar</uicontrol>. Seleccione <uicontrol>Sí</uicontrol> para habilitar <uicontrol>Comprobación GPG</uicontrol> y, a continuación, especifique un URL al archivo de claves GPG para el repositorio. </p></dd>
</dlentry><dlentry>
<dt>Informes de depuración</dt>
<dd>En esta sección se muestran informes de depuración, incluido el nombre y la ruta de archivo.
Puede seleccionar entre opciones para generar un informe nuevo, o bien redenominar, eliminar o descargar un informe existente.<p>El informe de depuración se genera utilizando el mandato <cmdname>sosreport</cmdname>. Está disponible para distribuciones de Red
Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora y Ubuntu. El mandato genera un archivo .tar que contiene la información de configuración y de diagnóstico, como la versión de kernel en ejecución, los módulos de carga y los archivos de configuración del sistema y servicio.
El mandato también ejecuta programas externos para recopilar información adicional y almacena esta salida en el archivo resultante.</p> </dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
<?tm 1392659967 1?>
</cshelp>
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42248_4 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/es_ES/network.dita b/ui/pages/help/es_ES/network.dita
index 3654531..0cda3c0 100644
--- a/ui/pages/help/es_ES/network.dita
+++ b/ui/pages/help/es_ES/network.dita
@@ -31,7 +31,7 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<li rev="rev1">Seleccione <uicontrol>Iniciar</uicontrol> para iniciar la conexión de red.</li>
<li>Seleccione <uicontrol>Detener</uicontrol> para finalizar la conexión de red.</li>
<li>Seleccione <uicontrol>Suprimir</uicontrol> para suprimir la información de conexión.</li>
-</ul>Para crear una red, pulse en el icono <uicontrol>más (+)</uicontrol> en la esquina superior derecha de la pantalla.</p>
+</ul>Para crear una red, pulse el icono <uicontrol>más (+)</uicontrol>. </p>
</csbody>
<cshelp id="kimhnetwcrt" xml:lang="es-es">
<title>Crear una red</title>
@@ -56,6 +56,6 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</cshelp>
-<!-- ENGL1SH_VERS10N 47050_3 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42005_3 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 230 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/es_ES/storage.dita b/ui/pages/help/es_ES/storage.dita
index 0c68951..ee2083d 100644
--- a/ui/pages/help/es_ES/storage.dita
+++ b/ui/pages/help/es_ES/storage.dita
@@ -15,7 +15,10 @@ Si desea utilizar su propia ISO, añádala a la vía de acceso de la agrupación
<p>Se visualiza la siguiente información para cada agrupación de almacenamiento:<dl>
<dlentry>
<dt>Nombre</dt>
-<dd>Nombre de la agrupación de almacenamiento y el porcentaje utilizado.</dd>
+<dd>El nombre de la agrupación de almacenamiento. </dd>
+</dlentry><dlentry>
+<dt>% utilizado</dt>
+<dd>Porcentaje de la agrupación de almacenamiento que se está utilizando. </dd>
</dlentry><dlentry>
<dt>Estado</dt>
<dd>Estado de la agrupación de almacenamiento, activa (verde) o inactiva (rojo). </dd>
@@ -35,21 +38,10 @@ Si desea utilizar su propia ISO, añádala a la vía de acceso de la agrupación
<p>Se pueden seleccionar las siguientes acciones para cada agrupación de almacenamiento:<ul>
<li>Seleccione <uicontrol>Activar</uicontrol> para activar la agrupación de almacenamiento para que pueda utilizarse.</li>
<li>Seleccione <uicontrol>Desactivar</uicontrol> para desactivar una agrupación de almacenamiento activa.</li>
+<li>Seleccione <uicontrol>Añadir volumen</uicontrol> para añadir más volumen a una agrupación de almacenamiento activa. </li>
<li>Seleccione <uicontrol>No definir</uicontrol> para eliminar una agrupación de almacenamiento inactiva.</li>
</ul></p>
-<p>Para visualizar detalles de volumen de almacenamiento para una agrupación de almacenamiento, pulse la flecha situada en el lado derecho de la fila de agrupación de almacenamiento. Los detalles incluyen lo siguiente:<dl><dlentry>
-<dt>Tipo</dt>
-<dd>El tipo de volumen, por ejemplo, <uicontrol>archivo</uicontrol>.</dd>
-</dlentry><dlentry>
-<dt>Formato</dt>
-<dd>El formato, variable dependiendo del tipo.</dd>
-</dlentry><dlentry>
-<dt>Capacidad</dt>
-<dd>Tamaño del volumen de almacenamiento.</dd>
-</dlentry><dlentry>
-<dt>Asignación</dt>
-<dd>Cantidad de espacio que ya está asignado en la agrupación de almacenamiento.</dd>
-</dlentry></dl>Para definir una agrupación de almacenamiento, pulse en el icono <uicontrol>más (+)</uicontrol> en la esquina superior derecha de la pantalla.</p>
+<p>Para visualizar detalles de volumen de almacenamiento para una agrupación de almacenamiento, pulse la flecha situada en el lado derecho de la fila de agrupación de almacenamiento. Para definir una agrupación de almacenamiento, pulse el icono <uicontrol>más (+)</uicontrol>. </p>
</csbody>
<cshelp id="kimhdefstor" xml:lang="es-es">
<title>Definir una agrupación de almacenamiento</title>
@@ -74,13 +66,28 @@ Al seleccionar <uicontrol>iSCSI</uicontrol>, escriba la dirección IP del <uicon
<dt><uicontrol>Canal de fibra de SCSI</uicontrol></dt>
<dd>Especifica una agrupación basada en un Canal de fibra SCSI. Seleccione qué adaptador SCSI se utilizará.</dd>
</dlentry></dl></li>
+<li>Especifique una vía de acceso de almacenamiento para la agrupación de almacenamiento. La vía de acceso de almacenamiento es la ubicación en el sistema de archivos local al que se correlaciona la agrupación.
+La vía de acceso debe ser exclusiva. Si el directorio no existe cuando se crea la agrupación, se creará para el usuario. </li>
<li>Pulse <uicontrol>Crear</uicontrol>.</li>
</ol> </p>
</csbody>
</cshelp>
+<cshelp id="kimhdefstor" xml:lang="es-es">
+<title>Añadir volumen</title>
+<shortdesc>Añade volumen a una agrupación de almacenamiento. </shortdesc>
+<csbody>
+<dl><dlentry>
+<dt>Captar de URL remoto</dt>
+<dd>Especifica una ubicación de donde descargar el volumen. Por ejemplo: <filepath>https://my-server/fedora22.img</filepath>.</dd>
+</dlentry><dlentry>
+<dt>Cargar un archivo</dt>
+<dd>Especifica una ubicación en su sistema local. </dd>
+</dlentry></dl>
+</csbody>
+</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 22336_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 52145_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 233 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/es_ES/templates.dita b/ui/pages/help/es_ES/templates.dita
index 8cceee7..9c0ef97 100644
--- a/ui/pages/help/es_ES/templates.dita
+++ b/ui/pages/help/es_ES/templates.dita
@@ -11,8 +11,8 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<title>Plantillas</title>
<shortdesc>La página <wintitle>Plantillas</wintitle> muestra las plantillas de máquina virtual definidas que se pueden utilizar para crear invitados KVM.</shortdesc>
<csbody>
-<p>Se visualiza la siguiente información para cada plantilla:<dl>
-<dlentry>
+<p>Se visualiza la siguiente información para cada plantilla:</p>
+<dl><dlentry>
<dt>SO</dt>
<dd>Nombre del sistema operativo o distribución.</dd>
</dlentry><dlentry>
@@ -24,66 +24,60 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</dlentry><dlentry>
<dt>Memoria</dt>
<dd>Cantidad de memoria de acceso aleatorio a asignar, en MB.</dd>
-</dlentry></dl></p>
-<p>Se pueden seleccionar las siguientes acciones para cada plantilla:<ul>
+</dlentry></dl>
+<p>Se pueden seleccionar las siguientes acciones para cada plantilla:</p>
+<ul>
<li>Seleccione <uicontrol>Editar</uicontrol> para editar la plantilla.</li>
+<li>Seleccione <uicontrol>Clonar</uicontrol> para copiar una plantilla. </li>
<li>Seleccione <uicontrol>Suprimir</uicontrol> para suprimir la plantilla.</li>
-</ul>Para añadir una plantilla, pulse en el icono <uicontrol>más (+)</uicontrol> en la esquina superior derecha de la pantalla.</p>
+</ul>
+<p>Para añadir una plantilla, pulse el icono <uicontrol>más (+)</uicontrol>. </p>
</csbody>
<cshelp id="kimhedittempl" xml:lang="es-es">
<title>Editar plantilla</title>
<shortdesc>Editar una plantilla existente.</shortdesc>
<csbody>
-<p>Se visualiza la siguiente información para cada plantilla: <dl>
-<dlentry>
-<dt>Nombre</dt>
-<dd>Nombre de la plantilla.</dd>
+<p>Se visualiza la siguiente información para cada plantilla: </p>
+<dl><dlentry>
+<dt>General</dt>
+<dd>Muestra el nombre, la distribución de proveedor, la versión, la memoria, la vía de acceso del archivo al archivo ISO y las preferencias de gráficos. </dd>
</dlentry><dlentry>
-<dt>Proveedor</dt>
-<dd>El nombre de la empresa que creó el sistema operativo o distribución que la plantilla está configurada para utilizar.</dd>
+<dt>Almacenamiento</dt>
+<dd>Especifica información de la agrupación de almacenamiento para la plantilla. </dd>
</dlentry><dlentry>
-<dt>Versión</dt>
-<dd>La versión del sistema operativo o distribución que la plantilla está configurada para utilizar.</dd>
-</dlentry><dlentry>
-<dt>Número de CPU</dt>
-<dd>Número de procesadores que están definidos para la plantilla.</dd>
-</dlentry><dlentry>
-<dt>Memoria</dt>
-<dd>Cantidad de memoria en MB a asignar a la máquina virtual.</dd>
+<dt>Interfaz</dt>
+<dd>Muestra las interfaces de red predeterminadas que hay disponibles para el invitado KVM.
+Puede seleccionar varias redes.</dd>
</dlentry><dlentry>
-<dt>Disco</dt>
-<dd>Tamaño de disco en GB.</dd>
-</dlentry><dlentry>
-<dt>CDROM</dt>
-<dd>Vía de acceso de archivo a la ubicación del archivo ISO utilizado para instalar el invitado KVM.</dd>
-</dlentry><dlentry>
-<dt>Agrupación de almacenamiento</dt>
-<dd>Agrupación de almacenamiento específica o la agrupación de almacenamiento predeterminada.</dd>
-</dlentry><dlentry>
-<dt>Red</dt>
-<dd>Interfaces de red predeterminadas disponibles para el invitado KVM. Puede seleccionar varias redes.</dd>
-</dlentry></dl> Los campos que no están inhabilitados pueden editarse. Después de editar un campo, pulse <uicontrol>Guardar</uicontrol>. </p>
+<dt>Procesador</dt>
+<dd>En el campo <uicontrol>Número de CPU</uicontrol>, especifique el número de procesadores que se han definido para la plantilla. </dd>
+<dd>Seleccione Establecer manualmente la topología de la CPU para cada invitado. </dd>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddtempl">
<title>Añadir plantilla</title>
<shortdesc>Añadir una plantilla desde el soporte de origen. Puede añadir su propia imagen ISO a la agrupación de almacenamiento 'ISO' para el siguiente descubrimiento.</shortdesc>
<csbody>
-<p>Seleccione la ubicación del soporte de origen entre una de las opciones siguientes:<dl>
-<dlentry>
+<p>Seleccione la ubicación del soporte de origen entre una de las opciones siguientes:</p>
+<dl><dlentry>
<dt>Imagen ISO local</dt>
<dd>Seleccione esta opción para explorar las agrupaciones de almacenamiento en busca de imágenes ISO de instalación disponibles en el sistema.</dd>
</dlentry><dlentry>
+<dt>Archivo de imagen local</dt>
+<dd>Seleccione esta opción para especificar una vía de acceso al archivo de imagen local. </dd>
+</dlentry><dlentry>
<dt>Imagen ISO remota</dt>
<dd>Seleccione esta opción para especificar una ubicación remota para una imagen ISO de instalación.</dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddloct">
-<title>Añadir plantilla – imagen ISO local</title>
-<shortdesc>Añadir una plantilla desde una imagen ISO local.</shortdesc>
+<title>Añadir plantilla - imagen ISO</title>
+<shortdesc>Añade una plantilla desde una imagen ISO. </shortdesc>
<csbody>
-<p>Se visualizan las imágenes ISO disponibles en el sistema.<dl><dlentry>
+<p>Las imágenes ISO disponibles en el sistema se visualizan de forma remota. </p>
+<dl><dlentry>
<dt>SO</dt>
<dd>Nombre del sistema operativo o distribución.</dd>
</dlentry><dlentry>
@@ -92,20 +86,21 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</dlentry><dlentry>
<dt>Tamaño</dt>
<dd>Tamaño de la imagen ISO.</dd>
-</dlentry></dl></p>
-<p>Para crear una plantilla a partir de una imagen ISO, elija entre las opciones siguientes:<ul>
+</dlentry></dl>
+<p>Para crear una plantilla a partir de una imagen ISO, elija entre las opciones siguientes:</p>
+<ul>
<li>Seleccione una imagen ISO desde la que desea crear una plantilla y, a continuación, pulse <uicontrol>Crear plantillas desde ISO seleccionada</uicontrol>.</li>
<li>Seleccione <uicontrol>Todo</uicontrol> para crear una plantilla desde cada imagen ISO en la lista y, a continuación, pulse <uicontrol>Crear plantillas desde ISO seleccionada</uicontrol>.</li>
<li>Si la imagen ISO que desea utilizar no aparece en los resultados de la exploración, puede seleccionar entre las opciones siguientes:<ul>
<li>Seleccione <uicontrol>Deseo utilizar un archivo ISO específico</uicontrol> para especificar una vía de acceso a la imagen ISO.</li>
<li>Pulse <uicontrol>Buscar más ISO</uicontrol> para buscar más imágenes ISO.</li>
</ul></li>
-</ul></p>
+</ul>
</csbody>
</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 61085_5 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 24458_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 229 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/fr_FR/guests.dita b/ui/pages/help/fr_FR/guests.dita
index ad5b4e4..f86d3ed 100644
--- a/ui/pages/help/fr_FR/guests.dita
+++ b/ui/pages/help/fr_FR/guests.dita
@@ -9,21 +9,21 @@ For support please see:
https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<cshelp id="kimhvirtm" xml:lang="fr-fr">
<title>Invités</title>
-<shortdesc>La page <wintitle>Invités</wintitle> répertorie les machines virtuelles KVM définies.</shortdesc>
+<shortdesc>La page <wintitle>Invités</wintitle> répertorie les invités définis pour le serveur.</shortdesc>
<csbody>
<p>Pour chaque invité, les informations suivantes sont affichées :<dl><dlentry>
<dt>Nom</dt>
-<dd>Nom de la machine virtuelle.</dd>
+<dd>Nom de l'invité.</dd>
</dlentry><dlentry>
<dt>UC</dt>
-<dd>Pourcentage d'utilisation du processeur sur la machine virtuelle.</dd>
-</dlentry><dlentry>
-<dt>E-S réseau</dt>
-<dd>Vitesse de transmission d'entrée-sortie du réseau, exprimée en ko par seconde.</dd>
+<dd>Pourcentage d'utilisation du processeur sur l'invité.</dd>
</dlentry><dlentry>
<dt>E-S disque</dt>
<dd>Vitesse de transmission d'entrée-sortie du disque, exprimée en ko par seconde.</dd>
</dlentry><dlentry>
+<dt>E-S réseau</dt>
+<dd>Vitesse de transmission d'entrée-sortie du réseau, exprimée en ko par seconde.</dd>
+</dlentry><dlentry>
<dt>Livetile</dt>
<dd>Etat de la console du système d'exploitation de l'hôte, ou
icône représentant la distribution <tm tmtype="tm" trademark="Linux">Linux</tm>
@@ -41,90 +41,78 @@ l'alimentation est démarrée ; si l'icône est verte, l'alimentation est arrêt
<p>Les actions suivantes peuvent être sélectionnées pour chaque invité :<ul>
<li>Sélectionnez <uicontrol>Connexion</uicontrol> pour vous connecter à la console
distante du système d'exploitation invité.</li>
-<li>Sélectionnez <uicontrol>Gérer le support</uicontrol> pour modifier le chemin
-d'accès au support d'installation.</li>
-<li>Sélectionnez <uicontrol>Réinitialiser</uicontrol> pour réinitialiser l'invité.</li>
+<li>Sélectionnez <uicontrol>Cloner</uicontrol> pour copier une définition d'invité existante afin de créer un invité.</li>
+<li>Sélectionnez <uicontrol>Réinitialiser</uicontrol> pour réinitialiser l'invité. Seul un hôte démarré peut être réinitialisé.</li>
<li>Sélectionnez <uicontrol>Editer</uicontrol> pour éditer les propriétés d'un invité existant. Les invités peuvent être édités uniquement lorsqu'ils sont à l'arrêt.</li>
+<li>Sélectionnez <uicontrol>Démarrer</uicontrol> pour démarrer un invité</li>
+<li>Sélectionnez <uicontrol>Arrêter</uicontrol> pour arrêter un invité.</li>
+<li>Sélectionnez <uicontrol>Mettre hors tension</uicontrol> pour forcer un arrêt immédiat de l'invité.</li>
<li>Sélectionnez <uicontrol>Supprimer</uicontrol> pour supprimer l'invité.</li>
-</ul>Pour créer un invité, cliquez sur l'icône <uicontrol>plus (+)</uicontrol>
-dans le coin supérieur droit de la page.</p>
+</ul>Pour créer un invité, cliquez sur l'icône <uicontrol>plus (+)</uicontrol> sur la page.</p>
</csbody>
<cshelp id="kimhvirtmcrt" xml:lang="fr-fr">
-<title>Créer une machine virtuelle</title>
-<shortdesc>Créez une machine virtuelle en utilisant un modèle existant.</shortdesc>
+<title>Créer un invité</title>
+<shortdesc>Création d'un invité à l'aide d'un modèle existant.</shortdesc>
<csbody>
<p> <ol>
-<li>Entrez le nom à utiliser pour identifier la machine virtuelle.</li>
-<li rev="rev1">Sélectionnez un modèle. <ul>
+<li>Entrez le nom à utiliser pour identifier l'invité.</li>
+<li>Sélectionnez un modèle. <ul>
<li>Si des modèles existent, faites un choix parmi les modèles affichés.</li>
<li>Si aucun modèle n'existe, cliquez sur <uicontrol>Créer un modèle</uicontrol> pour créer un modèle.</li>
-</ul></li>
+</ul>Vous pouvez afficher des informations sur un modèle en le survolant avec la souris.</li>
<li>Cliquez sur <uicontrol>Créer</uicontrol>.</li>
</ol> </p>
</csbody>
</cshelp>
<cshelp id="kimhvirtmedit" xml:lang="fr-fr">
<title>Editer l'invité</title>
-<shortdesc>Editez les propriétés d'une machine virtuelle existante. Certaines propriétés
+<shortdesc>Edition des propriétés d'un invité existant. Certaines propriétés
peuvent être éditées uniquement lorsque l'invité est arrêté. D'autres seront appliquées à l'amorçage suivant.</shortdesc>
-<csprolog><csmetadata></csmetadata></csprolog>
<csbody>
-<p>Pour chaque invité, les informations suivantes sont affichées dans l'onglet <wintitle>Général</wintitle> :<dl>
-<dlentry>
-<dt>Nom</dt>
-<dd>Nom de la machine virtuelle. (Ne peut être édité que lorsque l'invité est arrêté)</dd>
-</dlentry><dlentry>
-<dt>UC</dt>
-<dd>Nombre de processeurs. (Si l'invité est en cours d'exécution, la nouvelle quantité sera appliquée à l'amorçage suivant)</dd>
-</dlentry><dlentry>
-<dt>Mémoire</dt>
-<dd>Quantité de mémoire en Mo. (Si l'invité est en cours d'exécution, la nouvelle quantité sera appliquée à l'amorçage suivant)</dd>
-</dlentry><dlentry>
-<dt>Icône</dt>
-<dd>Image graphique représentant la distribution Linux à afficher à la place
-du statut en cours (Livetile) lorsque l'invité n'est pas actif.</dd>
-</dlentry></dl></p>
-<p>Les informations suivantes sont affichées dans l'onglet <wintitle>Stockage</wintitle>.</p>
<dl><dlentry>
+<dt>Général</dt>
+<dd>Affiche des informations sur l'invité, parmi lesquelles le nom, les UC, la mémoire et l'icône à utiliser pour l'invité. Vous pouvez modifier le nom d'un invité arrêté. La modification des UC et de la mémoire prend effet à l'amorçage suivant.</dd>
+</dlentry><dlentry>
<dt>Stockage</dt>
-<dd>Affiche l'emplacement du fichier ISO utilisé pour l'installation.</dd>
+<dd>Affiche l'unité et le chemin pour le stockage de l'invité sélectionné.
+Vous pouvez ajouter, modifier et supprimer les unités de stockage de l'invité.</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Interface</dt>
+<dd>Affiche les informations de réseau pour l'invité, parmi lesquelles le nom, le type et l'adresse MAC. Vous pouvez ajouter, modifier et supprimer les interfaces de l'invité.</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Droits</dt>
+<dd>Affiche les utilisateurs et les groupes autorisés pour l'invité. </dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Unité PCI hôte</dt>
+<dd>Affiche une liste de toutes les unités PCI disponibles sur l'hôte. </dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Image instantanée</dt>
+<dd>Affiche les images instantanées de l'invité. Vous pouvez créer, modifier ou supprimer une image instantanée. En sélectionnant une image instantanée et en choisissant l'option de rétablissement, l'invité est restauré à un point dans le passé, déterminé par les données d'image instantanée et annule les modifications apportées au-delà de ce point dans le temps.</dd>
</dlentry></dl>
<p> Les zones qui ne sont pas désactivées peuvent être éditées. Après que vous avez édité une zone, cliquez sur <uicontrol>Sauvegarder</uicontrol>. </p>
</csbody>
</cshelp>
-<cshelp id="kimstoragedevice" xml:lang="fr-fr">
-<title>Ajoutez, remplacez ou détachez une unité de stockage</title>
-<shortdesc rev="rev1">Vous pouvez ajouter, remplacer ou détacher une unité de stockage
-pour votre machine virtuelle. Seule une unité CD-ROM est prise en charge. Pour éditer vos unités de stockage, procédez comme suit :</shortdesc>
+<cshelp id="kimhvirtmclone" xml:lang="fr-fr">
+<title>Clonage d'un invité</title>
+<shortdesc>Le clonage d'un invité permet de créer une copie d'un invité.</shortdesc>
<csbody>
+<p>Pour cloner un invité :</p>
<ol>
-<li>Dans la fenêtre <wintitle>Editer l'invité</wintitle>, sélectionnez <wintitle>Stockage</wintitle>.</li>
-<li>Pour remplacer une unité de stockage, cliquez sur la première icône avec la <uicontrol>barre oblique (/) orange</uicontrol>. Entrez le chemin d'accès au fichier ISO et cliquez sur <uicontrol>Remplacer</uicontrol>.</li>
-<li>Pour détacher une unité de stockage, cliquez sur la deuxième icône avec le <uicontrol>tiret (-) rouge</uicontrol>. Confirmer la suppression et cliquez sur <uicontrol>OK</uicontrol>.</li>
-<li>Pour ajouter une unité de stockage, cliquez sur la troisième icône avec le <uicontrol>signe plus (+) vert</uicontrol>. Entrez un nom d'unité et un chemin d'accès au fichier ISO puis cliquez sur <uicontrol>Attacher</uicontrol>.</li>
-</ol>
-</csbody>
-</cshelp>
-<cshelp id="kimreplacemedia" xml:lang="fr-fr">
-<title>Remplacer l'unité CD-ROM d'une machine virtuelle</title>
-<shortdesc rev="rev1">Vous pouvez remplacer le contenu du CD-ROM pour
-une machine virtuelle une fois l'installation terminée.</shortdesc>
-<csbody>
-<ol>
-<li>Vérifiez que la machine virtuelle est démarrée.</li>
-<li>Dans le menu Actions, sélectionnez <uicontrol>Gérer le support</uicontrol>.</li>
-<li>Pour modifier les données actuellement chargées dans l'unité de CD-ROM, cliquez sur l'icône
-<uicontrol>barre oblique (/) orange</uicontrol> en regard de la zone hdc.</li>
-<li>Sur la page <wintitle>Remplacer une unité CD-ROM d'une machine virtuelle</wintitle>,
-entrez le chemin d'accès au fichier ISO. Les deux autres zones sont en lecture seule.</li>
-<li>Cliquez sur <uicontrol>Remplacer</uicontrol>.</li>
+<li>Sélectionnez <uicontrol>Cloner</uicontrol> dans le menu Action d'un invité.</li>
+<li>Acceptez l'avertissement. <note>Lorsqu'un invité cible utilise des volumes SCSI ou iSCSI ou si le pool cible ne dispose pas de suffisamment d'espace, le clone est créé dans un pool de stockage par défaut. </note></li>
</ol>
+<p>Un invité apparaît dans la liste avec le libellé <uicontrol>Clonage en cours...</uicontrol> Une fois le processus terminé, l'invité cloné est disponible.</p>
+
</csbody>
</cshelp>
<?tm 1391540919 3?>
</cshelp>
-<!-- ENGL1SH_VERS10N 45645_6 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 04963_6 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 231 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/fr_FR/host.dita b/ui/pages/help/fr_FR/host.dita
index f4c330b..099d342 100644
--- a/ui/pages/help/fr_FR/host.dita
+++ b/ui/pages/help/fr_FR/host.dita
@@ -19,17 +19,15 @@ connecter à l'hôte.</shortdesc>
<li>Sélectionnez <uicontrol>Connexion</uicontrol> pour ouvrir une connexion VNC
au système hôte, si celui-ci n'est pas déjà connecté.</li>
</ul></p>
-<p>Cliquez sur les sections suivantes pour afficher des informations sur l'hôte :<dl>
-<dlentry>
+<p>Cliquez sur les sections suivantes pour afficher des informations sur l'hôte :</p>
+<dl><dlentry>
<dt>Informations de base</dt>
<dd>Cette section affiche la distribution, la version et le nom de code
-du système d'exploitation hôte, ainsi que le type de processeur et la quantité
-de mémoire en Go.</dd>
+du système d'exploitation hôte, ainsi que le type de processeur, le nombre d'UC en ligne et la quantité de mémoire en Go.</dd>
</dlentry><dlentry>
<dt>Statistiques système</dt>
<dd>Cette section affiche les graphiques des statistiques pour l'UC, mémoire, ainsi que
-les E-S disque et E-S réseau pour l'hôte. Sélectionnez <uicontrol>Collecte des données une fois la page quittée</uicontrol>
-pour continuer la collecte de données lorsque l'onglet hôte n'est plus visible.</dd>
+les E-S disque et E-S réseau pour l'hôte. </dd>
</dlentry><dlentry>
<dt>Mises à jour logicielles</dt>
<dd>Cette section affiche des informations pour tous les modules qui
@@ -44,8 +42,7 @@ vous pouvez ajouter des référentiels <filepath>yum</filepath>.
Si votre système est de type Ubuntu ou Debian, ajoutez des référentiels
<filepath>deb</filepath>.<p>Si vous travaillez avec des référentiels yum, vous pouvez ajouter un contrôle GPG
afin de vérifier qu'un module provenant de ce référentiel n'a pas été endommagé.
-Sélectionnez un référentiel puis cliquez sur <uicontrol>Editer</uicontrol>. Sélectionnez <uicontrol>Oui</uicontrol> pour activer le contrôle GPG,
-puis entrez une URL pour le fichier de clés GPG du référentiel.</p></dd>
+Sélectionnez un référentiel puis cliquez sur <uicontrol>Editer</uicontrol>. Sélectionnez <uicontrol>Oui</uicontrol> pour activer <uicontrol>Contrôle GPG</uicontrol>, puis entrez une URL pour le fichier de clés GPG du référentiel.</p></dd>
</dlentry><dlentry>
<dt>Rapports de débogage</dt>
<dd>Cette section affiche les rapports de débogage, y compris le nom et le chemin du fichier.
@@ -57,12 +54,12 @@ telles que la version du noyau d'exécution, les modules chargés, ainsi que les
du système et de la maintenance.
La commande exécute également des programmes externes pour collecter des informations
supplémentaires et stocke cette sortie dans l'archive résultante.</p> </dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
<?tm 1392659967 1?>
</cshelp>
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42248_4 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/fr_FR/network.dita b/ui/pages/help/fr_FR/network.dita
index 5c2e9dd..f27e01f 100644
--- a/ui/pages/help/fr_FR/network.dita
+++ b/ui/pages/help/fr_FR/network.dita
@@ -31,8 +31,7 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<li rev="rev1">Sélectionnez <uicontrol>Démarrer</uicontrol> pour démarrer la connexion au réseau.</li>
<li>Sélectionnez <uicontrol>Arrêter</uicontrol> pour mettre fin à la connexion au réseau.</li>
<li>Sélectionnez <uicontrol>Supprimer</uicontrol> pour supprimer les informations de connexion.</li>
-</ul>Pour créer un réseau, cliquez sur l'icône <uicontrol>plus (+)</uicontrol>
-dans le coin supérieur droit de l'écran.</p>
+</ul>Pour créer un réseau, cliquez sur l'icône <uicontrol>plus (+)</uicontrol>.</p>
</csbody>
<cshelp id="kimhnetwcrt" xml:lang="fr-fr">
<title>Créer un réseau</title>
@@ -62,6 +61,6 @@ sur la destination et le réseau local virtuel.</dd>
</cshelp>
-<!-- ENGL1SH_VERS10N 47050_3 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42005_3 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 230 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/fr_FR/storage.dita b/ui/pages/help/fr_FR/storage.dita
index eebf2bb..fd0e7ca 100644
--- a/ui/pages/help/fr_FR/storage.dita
+++ b/ui/pages/help/fr_FR/storage.dita
@@ -10,13 +10,15 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<cshelp id="kimhstor" xml:lang="fr-fr">
<title>Stockage</title>
<shortdesc>La page <wintitle>Stockage</wintitle> répertorie les pools de stockage disponibles,
-y compris les pools de stockage 'default' et 'ISO' prêts à l'emploi.
-Si vous souhaitez utiliser votre propre pool de stockage ISO, ajoutez-le dans le chemin du pool de stockage 'ISO'.</shortdesc>
+y compris les pools de stockage 'default' et 'ISO' prêts à l'emploi. Si vous souhaitez utiliser votre propre pool de stockage ISO, ajoutez-le dans le chemin du pool de stockage 'ISO'.</shortdesc>
<csbody>
<p>Pour chaque pool de stockage, les informations suivantes sont affichées :<dl>
<dlentry>
<dt>Nom</dt>
-<dd>Nom du pool de stockage et pourcentage d'utilisation.</dd>
+<dd>Nom du pool de stockage.</dd>
+</dlentry><dlentry>
+<dt>% utilisé</dt>
+<dd>Pourcentage du pool de stockage utilisé.</dd>
</dlentry><dlentry>
<dt>Etat</dt>
<dd>Etat du pool de stockage, actif (vert) ou inactif (rouge). </dd>
@@ -36,23 +38,11 @@ Si vous souhaitez utiliser votre propre pool de stockage ISO, ajoutez-le dans le
<p>Les actions suivantes peuvent être sélectionnées pour chaque pool de stockage :<ul>
<li>Sélectionnez <uicontrol>Activer</uicontrol> pour activer le pool de stockage pour utilisation.</li>
<li>Sélectionnez <uicontrol>Désactiver</uicontrol> pour désactiver un pool de stockage actif.</li>
+<li>Sélectionnez <uicontrol>Ajouter un volume</uicontrol> pour ajouter un volume supplémentaire à un pool de stockage actif.</li>
<li>Sélectionnez <uicontrol>Annuler définition</uicontrol> pour retirer un pool de stockage inactif.</li>
</ul></p>
<p>Pour afficher les détails de volume de stockage pour un pool de stockage, cliquez sur la
-flèche située à droite de la ligne du pool de stockage. Détails inclus :<dl><dlentry>
-<dt>Type</dt>
-<dd>Type de volume, par exemple <uicontrol>file</uicontrol>.</dd>
-</dlentry><dlentry>
-<dt>Format</dt>
-<dd>Format, variable selon le type.</dd>
-</dlentry><dlentry>
-<dt>Capacité</dt>
-<dd>Taille du volume de stockage.</dd>
-</dlentry><dlentry>
-<dt>Allocation</dt>
-<dd>Quantité d'espace déjà allouée dans le pool de stockage.</dd>
-</dlentry></dl>Pour définir un pool de stockage, cliquez sur l'icône <uicontrol>plus (+)</uicontrol>
-dans le coin supérieur droit de l'écran.</p>
+flèche située à droite de la ligne du pool de stockage. Pour définir un pool de stockage, cliquez sur l'icône <uicontrol>plus (+)</uicontrol>.</p>
</csbody>
<cshelp id="kimhdefstor" xml:lang="fr-fr">
<title>Définir un pool de stockage</title>
@@ -81,13 +71,28 @@ et la <uicontrol>Cible</uicontrol> sur le serveur iSCSI. Vous avez la possibilit
<dt><uicontrol>Fibre Channel SCSI</uicontrol></dt>
<dd>Indique un pool basée sur une connexion Fibre Channel SCSI. Sélectionnez l'adaptateur SCSI à utiliser.</dd>
</dlentry></dl></li>
+<li>Indiquez un chemin de stockage pour le pool de stockage. Le chemin de stockage est l'emplacement sur le système de fichiers local vers lequel le pool est mappé.
+Le chemin doit être unique. Si le répertoire n'existe pas lorsque le pool est créé, il est créé.</li>
<li>Cliquez sur <uicontrol>Créer</uicontrol>.</li>
</ol> </p>
</csbody>
</cshelp>
+<cshelp id="kimhdefstor" xml:lang="fr-fr">
+<title>Ajouter un volume</title>
+<shortdesc>Ajoute un volume à un pool de stockage.</shortdesc>
+<csbody>
+<dl><dlentry>
+<dt>Extraire de l'URL distante</dt>
+<dd>Indiquez l'emplacement à partir duquel le volume est téléchargé. Exemple : <filepath>https://my-server/fedora22.img</filepath>.</dd>
+</dlentry><dlentry>
+<dt>Télécharger un fichier</dt>
+<dd>Indique un emplacement sur le système local.</dd>
+</dlentry></dl>
+</csbody>
+</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 22336_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 52145_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 233 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/fr_FR/templates.dita b/ui/pages/help/fr_FR/templates.dita
index a517e33..abf08bc 100644
--- a/ui/pages/help/fr_FR/templates.dita
+++ b/ui/pages/help/fr_FR/templates.dita
@@ -12,8 +12,8 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<shortdesc>La page <wintitle>Modèles</wintitle> affiche les modèles de machine virtuelle définis
pouvant être utilisés pour créer des hôtes KVM.</shortdesc>
<csbody>
-<p>Pour chaque modèle, les informations suivantes sont affichées :<dl>
-<dlentry>
+<p>Pour chaque modèle, les informations suivantes sont affichées :</p>
+<dl><dlentry>
<dt>SE</dt>
<dd>Nom du système d'exploitation ou de la distribution.</dd>
</dlentry><dlentry>
@@ -25,71 +25,61 @@ pouvant être utilisés pour créer des hôtes KVM.</shortdesc>
</dlentry><dlentry>
<dt>Mémoire</dt>
<dd>Quantité de mémoire vive à allouer, en Mo.</dd>
-</dlentry></dl></p>
-<p>Les actions suivantes peuvent être sélectionnées pour chaque modèle :<ul>
+</dlentry></dl>
+<p>Les actions suivantes peuvent être sélectionnées pour chaque modèle :</p>
+<ul>
<li>Sélectionnez <uicontrol>Editer</uicontrol> pour éditer le modèle.</li>
+<li>Sélectionnez <uicontrol>Cloner</uicontrol> pour copier un modèle.</li>
<li>Sélectionnez <uicontrol>Supprimer</uicontrol> pour supprimer le modèle.</li>
-</ul>Pour ajouter un modèle, cliquez sur l'icône <uicontrol>plus (+)</uicontrol>
-dans le coin supérieur droit de l'écran.</p>
+</ul>
+<p>Pour ajouter un modèle, cliquez sur l'icône <uicontrol>plus (+)</uicontrol>.</p>
</csbody>
<cshelp id="kimhedittempl" xml:lang="fr-fr">
<title>Editer un modèle</title>
-<shortdesc>Editez un modèle existant.</shortdesc>
+<shortdesc>Modifie un modèle existant.</shortdesc>
<csbody>
-<p>Pour chaque modèle, les informations suivantes sont affichées : <dl>
-<dlentry>
-<dt>Nom</dt>
-<dd>Nom du modèle.</dd>
+<p>Pour chaque modèle, les informations suivantes sont affichées : </p>
+<dl><dlentry>
+<dt>Général</dt>
+<dd>Affiche le nom, la distribution de fournisseur, la version, la mémoire, le chemin d'accès au fichier ISO et les préférences graphiques.</dd>
</dlentry><dlentry>
-<dt>Fournisseur</dt>
-<dd>Nom de la société qui a créé le système d'exploitation ou la distribution
-pour lequel/laquelle le modèle est configuré.</dd>
+<dt>Stockage</dt>
+<dd>Indique les informations de pool de stockage pour le modèle.</dd>
</dlentry><dlentry>
-<dt>Version</dt>
-<dd>Version du système d'exploitation ou de la distribution
-pour lequel/laquelle le modèle est configuré.</dd>
-</dlentry><dlentry>
-<dt>Nombre d'UC</dt>
-<dd>Nombre de processeurs définis pour le modèle.</dd>
-</dlentry><dlentry>
-<dt>Mémoire</dt>
-<dd>Quantité de mémoire en Mo à allouer à la machine virtuelle.</dd>
-</dlentry><dlentry>
-<dt>Disque</dt>
-<dd>Taille du disque en Go.</dd>
-</dlentry><dlentry>
-<dt>CD-ROM</dt>
-<dd>chemin d'accès au fichier pour l'emplacement du fichier ISO utilisé pour l'installation de l'invité KVM.</dd>
-</dlentry><dlentry>
-<dt>Pool de stockage</dt>
-<dd>Pool de stockage spécifique ou pool de stockage par défaut.</dd>
-</dlentry><dlentry>
-<dt>Réseau</dt>
-<dd>Interfaces réseau par défaut disponibles pour l'invité KVM. Vous pouvez
+<dt>Interface</dt>
+<dd>Affiche les interfaces réseau par défaut disponibles pour l'invité KVM.
+Vous pouvez
sélectionner plusieurs réseaux.</dd>
-</dlentry></dl> Les zones qui ne sont pas désactivées peuvent être éditées. Après que vous avez édité une zone, cliquez sur <uicontrol>Sauvegarder</uicontrol>. </p>
+</dlentry><dlentry>
+<dt>Processeur</dt>
+<dd>Dans la zone <uicontrol>Nombre d'UC</uicontrol>, indiquez le nombre de processus définis pour le modèle.</dd>
+<dd>Choisissez de définir manuellement la topologie d'UC pour chaque invité.</dd>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddtempl">
<title>Ajouter un modèle</title>
-<shortdesc>Ajoutez un modèle à partir du support source.
-Vous pouvez ajouter votre propre image ISO au pool de stockage 'ISO' pour la reconnaissance suivante.</shortdesc>
+<shortdesc>Ajoute un modèle à partir du support source. Vous pouvez ajouter votre propre image ISO au pool de stockage 'ISO' pour la reconnaissance suivante.</shortdesc>
<csbody>
-<p>Sélectionnez l'emplacement du support source à partir des options suivantes :<dl>
-<dlentry>
+<p>Sélectionnez l'emplacement du support source à partir des options suivantes :</p>
+<dl><dlentry>
<dt>Image ISO locale</dt>
<dd>Sélectionnez cette option pour rechercher dans les pools de stockage l'image d'installation ISO disponible sur le système.</dd>
</dlentry><dlentry>
+<dt>Fichier image local</dt>
+<dd>Choisissez de sélectionner un chemin d'accès au fichier image local.</dd>
+</dlentry><dlentry>
<dt>Image ISO distante</dt>
<dd>Sélectionnez cette option pour indiquer un emplacement distant pour une image d'installation ISO.</dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddloct">
-<title>Ajouter un modèle - Image ISO locale</title>
-<shortdesc>Ajoutez un modèle à partir d'une image ISO locale.</shortdesc>
+<title>Ajouter un modèle - image ISO</title>
+<shortdesc>Ajoute un modèle à partir d'une image ISO.</shortdesc>
<csbody>
-<p>Les images ISO disponibles sur le système sont affichées.<dl><dlentry>
+<p>Les images ISO disponibles sur le système s'affichent à distance.</p>
+<dl><dlentry>
<dt>SE</dt>
<dd>Nom du système d'exploitation ou de la distribution.</dd>
</dlentry><dlentry>
@@ -98,8 +88,9 @@ Vous pouvez ajouter votre propre image ISO au pool de stockage 'ISO' pour la rec
</dlentry><dlentry>
<dt>Taille</dt>
<dd>Taille de l'image ISO.</dd>
-</dlentry></dl></p>
-<p>Pour créer un modèle à partir d'une image ISO, choisissez parmi les options suivantes :<ul>
+</dlentry></dl>
+<p>Pour créer un modèle à partir d'une image ISO, choisissez parmi les options suivantes :</p>
+<ul>
<li>Sélectionnez une image ISO à partir de laquelle créer un modèle, puis cliquez sur <uicontrol>Créer des modèles à partir de l'ISO sélectionné </uicontrol>.</li>
<li>Sélectionnez <uicontrol>Tout</uicontrol> pour créer un modèle à partir de chaque
image ISO répertoriée, puis cliquez sur <uicontrol>Créer des modèles à partir de l'ISO sélectionné</uicontrol>.</li>
@@ -109,12 +100,12 @@ d'analyse, vous pouvez faire un choix parmi les options suivantes :<ul>
spécifier un chemin d'accès à l'image ISO.</li>
<li>Cliquez sur <uicontrol>Rechercher d'autres images ISO</uicontrol> pour rechercher des images ISO supplémentaires.</li>
</ul></li>
-</ul></p>
+</ul>
</csbody>
</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 61085_5 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 24458_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 229 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/it_IT/guests.dita b/ui/pages/help/it_IT/guests.dita
index e05db7e..26a5fbd 100644
--- a/ui/pages/help/it_IT/guests.dita
+++ b/ui/pages/help/it_IT/guests.dita
@@ -9,22 +9,22 @@ For support please see:
https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<cshelp id="kimhvirtm" xml:lang="it-it">
<title>Guest</title>
-<shortdesc>La pagina <wintitle>Guest</wintitle> elenca le macchine virtuali
-KVM definite.</shortdesc>
+<shortdesc>La pagina <wintitle>Guest</wintitle> elenca le macchine guest
+definite per il server.</shortdesc>
<csbody>
<p>Per ciascuna macchina guest vengono visualizzate le seguenti informazioni:<dl><dlentry>
<dt>Nome</dt>
-<dd>Il nome della macchina virtuale.</dd>
+<dd>Il nome della macchina guest.</dd>
</dlentry><dlentry>
<dt>CPU</dt>
-<dd>La percentuale di utilizzo del processore nella macchina virtuale.</dd>
-</dlentry><dlentry>
-<dt>I/O di rete</dt>
-<dd>La velocità di trasmissione dell'input/output di rete in KB al secondo.</dd>
+<dd>La percentuale di utilizzo del processore nella macchina guest.</dd>
</dlentry><dlentry>
<dt>I/O disco</dt>
<dd>La velocità di trasmissione dell'input/output disco in KB al secondo.</dd>
</dlentry><dlentry>
+<dt>I/O di rete</dt>
+<dd>La velocità di trasmissione dell'input/output di rete in KB al secondo.</dd>
+</dlentry><dlentry>
<dt>Riquadro animato</dt>
<dd>Lo stato della console del sistema operativo della macchina guest o un'icona che rappresenta la distribuzione <tm tmtype="tm" trademark="Linux">Linux</tm> se la macchina guest non è attiva.</dd>
</dlentry></dl></p>
@@ -38,86 +38,79 @@ KVM definite.</shortdesc>
</dlentry></dl> </p>
<p>Per ciascuna macchina guest è possibile selezionare le azioni indicate di seguito:<ul>
<li>Selezionare <uicontrol>Connetti</uicontrol> per effettuare la connessione alla console remota per il sistema operativo della macchina guest.</li>
-<li>Selezionare <uicontrol>Gestisci supporti</uicontrol> per modificare il percorso al supporto di installazione.</li>
-<li>Selezionare <uicontrol>Reimposta</uicontrol> per reimpostare la macchina guest.</li>
+<li>Selezionare <uicontrol>Clona</uicontrol> per copiare una definizione di macchina guest esistente e creare una macchina guest.</li>
+<li>Selezionare <uicontrol>Reimposta</uicontrol> per reimpostare la macchina guest. È possibile reimpostare solo una macchina guest che è stata avviata. </li>
<li>Selezionare <uicontrol>Modifica</uicontrol> per modificare le proprietà di una macchina guest esistente. È possibile modificare le macchine guest solo se sono arrestate.</li>
+<li>Selezionare <uicontrol>Avvia</uicontrol> per avviare una macchina guest. </li>
+<li>Selezionare <uicontrol>Arresta</uicontrol> per arrestare una macchina guest con il periodo di grazia. </li>
+<li>Selezionare <uicontrol>Spegni</uicontrol> per forzare un arresto immediato della macchina guest. </li>
<li>Selezionare <uicontrol>Elimina</uicontrol> per eliminare la macchina guest.</li>
-</ul>Per creare una macchina guest, o macchina virtuale, fare clic sull'icona <uicontrol>più
-(+)</uicontrol> nella parte in alto a destra della pagina.</p>
+</ul>Per creare una macchina guest fare clic sull'icona <uicontrol>più
+(+)</uicontrol> sulla pagina. </p>
</csbody>
<cshelp id="kimhvirtmcrt" xml:lang="it-it">
-<title>Creare una macchina virtuale</title>
-<shortdesc>Creare una macchina virtuale utilizzando un modello esistente.</shortdesc>
+<title>Creare una macchina guest</title>
+<shortdesc>Creare una macchina guest utilizzando un modello esistente.</shortdesc>
<csbody>
<p> <ol>
-<li>Immettere il nome da utilizzare per identificare la macchina virtuale.</li>
-<li rev="rev1">Selezionare un modello. <ul>
+<li>Immettere il nome da utilizzare per identificare la macchina guest.</li>
+<li>Selezionare un modello. <ul>
<li>Se il modello esiste, selezionarlo dai modelli visualizzati.</li>
<li>Se non esiste alcun modello, fare clic su <uicontrol>Crea un modello</uicontrol> per crearne uno.</li>
-</ul></li>
+</ul>È possibile visualizzare le informazioni su un modello passando con il cursore del mouse su esso. </li>
<li>Fare clic su <uicontrol>Crea</uicontrol>.</li>
</ol> </p>
</csbody>
</cshelp>
<cshelp id="kimhvirtmedit" xml:lang="it-it">
<title>Modifica macchina guest</title>
-<shortdesc>Modificare le proprietà di una macchina virtuale esistente. Alcune proprietà possono essere
+<shortdesc>Modificare le proprietà di una macchina guest esistente. Alcune proprietà possono essere
modificate solo mentre la macchina guest è arrestata. Altre diventeranno effettive al prossimo avvio.</shortdesc>
-<csprolog><csmetadata></csmetadata></csprolog>
<csbody>
-<p>Per ciascuna macchina guest vengono visualizzate le seguenti informazioni sulla scheda <wintitle>Generale</wintitle>:<dl>
-<dlentry>
-<dt>Nome</dt>
-<dd>Il nome della macchina virtuale. (Può essere modificato solo mentre la macchina guest è arrestata)</dd>
-</dlentry><dlentry>
-<dt>CPU</dt>
-<dd>Il numero di processori. (Se la macchina guest è in esecuzione, la nuova quantità diventerà effettiva
-al prossimo avvio)</dd>
+<dl><dlentry>
+<dt>Generale</dt>
+<dd>Visualizza informazioni sulla macchina guest, incluso il nome, le CPU, la memoria e l'icona per utilizzare la macchina guest. È possibile modificare il nome di una macchina guest arrestata. La modifica delle CPU e della memoria ha effetto al successivo avvio. </dd>
</dlentry><dlentry>
<dt>Memoria</dt>
-<dd>La quantità di memoria in MB. (Se la macchina guest è in esecuzione, la nuova quantità diventerà effettiva
-al prossimo avvio)</dd>
-</dlentry><dlentry>
-<dt>Icona</dt>
-<dd>L'immagine grafica che rappresenta la distribuzione Linux da visualizzare al posto dello stato corrente (Riquadro animato) quando la macchina guest non è attiva.</dd>
-</dlentry></dl></p>
-<p>Sulla scheda <wintitle>Memoria</wintitle> vengono visualizzate le seguenti informazioni.</p>
+<dd>Visualizza il dispositivo e il percorso per la memoria della macchina guest selezionata.
+È possibile aggiungere, modificare e rimuovere i dispositivi di memoria per la macchina guest. </dd>
+</dlentry></dl>
<dl><dlentry>
-<dt>Memoria</dt>
-<dd>Visualizza l'ubicazione del file ISO utilizzato per l'installazione.</dd>
+<dt>Interfaccia</dt>
+<dd>Visualizza le informazioni di rete per la macchina guest, incluso il nome, il tipo e l'indirizzo MAC. È possibile aggiungere, modificare e rimuovere le interfacce per la macchina guest. </dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Autorizzazione</dt>
+<dd>Visualizza gli utenti e i gruppi autorizzati per la macchina guest. </dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Dispositivo PCI host</dt>
+<dd>Visualizza un elenco di tutti i dispositivi PCI disponibili sull'host. </dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Istantanea</dt>
+<dd>Visualizza le istantanee della macchina guest. È possibile creare, modificare o eliminare un'istantanea. Selezionando un'istantanea e scegliendo l'opzione Inverti, la macchina guest viene ripristinata a un punto nel passato, determinato dai dati dell'istantanea, ed elimina le modifiche effettuate dopo tale punto nel tempo. </dd>
</dlentry></dl>
<p> I campi non disabilitati possono essere modificati. Dopo aver modificato un campo, fare clic su <uicontrol>Salva</uicontrol>. </p>
</csbody>
</cshelp>
-<cshelp id="kimstoragedevice" xml:lang="it-it">
-<title>Aggiungere, sostituire o scollegare un dispositivo di memoria.</title>
-<shortdesc rev="rev1">È possibile aggiungere, sostituire o scollegare un dispositivo di memoria per la macchina virtuale. L'unico dispositivo supportato è CDROM. Per modificare i dispositivi di memoria, attenersi alla seguente procedura:</shortdesc>
+<cshelp id="kimhvirtmclone" xml:lang="it-it">
+<title>Clonazione di una macchina guest</title>
+<shortdesc>La clonazione di una macchina guest consente all'utente di creare una copia di una macchina guest. </shortdesc>
<csbody>
+<p>Per clonare una macchina guest:</p>
<ol>
-<li>Nella finestra <wintitle>Modifica macchina guest</wintitle>, selezionare <wintitle>Memoria</wintitle>.</li>
-<li>Per sostituire un dispositivo di memoria, fare clic sulla prima icona con la <uicontrol>barra (/) arancione</uicontrol>. Immettere il percorso del file ISO e fare clic su <uicontrol>Sostituisci</uicontrol>.</li>
-<li>Per scollegare un dispositivo di memoria, fare clic sulla seconda icona con il <uicontrol>trattino (-) rosso</uicontrol>. Confermare l'eliminazione facendo clic su <uicontrol>OK</uicontrol>.</li>
-<li>Per aggiungere un dispositivo di memoria, fare clic sulla terza icona con il <uicontrol>segno più (+)</uicontrol> verde. Immettere un nome dispositivo e percorso file ISO e fare clic su <uicontrol>Collega</uicontrol>.</li>
-</ol>
-</csbody>
-</cshelp>
-<cshelp id="kimreplacemedia" xml:lang="it-it">
-<title>Sostituisci un CDROM della macchina virtuale</title>
-<shortdesc rev="rev1">È possibile sostituire il contenuto del CDROM per una macchina virtuale dopo il completamento dell'installazione.</shortdesc>
-<csbody>
-<ol>
-<li>Assicurarsi che la macchina virtuale sia avviata.</li>
-<li>Dal menu Azioni, selezionare <uicontrol>Gestisci supporti</uicontrol>.</li>
-<li>Per modificare il contenuto correntemente caricato sul CDROM, fare clic sull'icona della <uicontrol>barra (/) arancione</uicontrol> accanto al campo hdc.</li>
-<li>Sulla pagina <wintitle>Sostituisci un CDROM della macchina virtuale</wintitle>, immettere il percorso del file ISO. Gli altri due campi sono di sola lettura.</li>
-<li>Fare clic su <uicontrol>Sostituisci</uicontrol>.</li>
+<li>Selezionare <uicontrol>Clona</uicontrol> dal menu Azione di una macchina guest. </li>
+<li>Accettare l'avvertenza. <note>Se una macchina guest di destinazione utilizza volumi SCSI o iSCSI o se un pool di destinazione non dispone di spazio sufficiente, il clone verrà creato su un pool di memoria predefinito. </note></li>
</ol>
+<p>Una macchina guest viene visualizzata nell'elenco con l'etichetta <uicontrol>Clonazione...</uicontrol>. Quando il processo è completo, la macchina guest clonata è disponibile per l'uso. </p>
+
</csbody>
</cshelp>
<?tm 1391540919 3?>
</cshelp>
-<!-- ENGL1SH_VERS10N 45645_6 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 04963_6 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 231 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/it_IT/host.dita b/ui/pages/help/it_IT/host.dita
index 63d3367..c2783bf 100644
--- a/ui/pages/help/it_IT/host.dita
+++ b/ui/pages/help/it_IT/host.dita
@@ -16,13 +16,13 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<li>Selezionare <uicontrol>Riavvia</uicontrol> per riavviare il sistema host.</li>
<li>Selezionare <uicontrol>Connetti</uicontrol> per aprire una connessione VNC al sistema host, se non è già connesso.</li>
</ul></p>
-<p>Fare clic sulle seguenti sezioni per visualizzare le informazioni sull'host:<dl>
-<dlentry>
+<p>Fare clic sulle seguenti sezioni per visualizzare le informazioni sull'host:</p>
+<dl><dlentry>
<dt>Informazioni di base</dt>
-<dd>Questa sezione visualizza il nome codice, la versione e la distribuzione del sistema operativo, come pure il tipo di processore e la quantità di memoria in GB.</dd>
+<dd>Questa sezione visualizza il nome codice, la versione e la distribuzione del sistema operativo, come pure il tipo di processore, il numero di CPU in linea e la quantità di memoria in GB.</dd>
</dlentry><dlentry>
<dt>Statistiche di sistema</dt>
-<dd>Questa sezione visualizza i grafici che mostrano le statistiche per la CPU, la memoria, l'I/O disco e di rete per l'host. Selezionare <uicontrol>Raccolta dati all'uscita dalla pagina</uicontrol> per continuare la raccolta dei dati quando la scheda host non è più visibile.</dd>
+<dd>Questa sezione visualizza i grafici che mostrano le statistiche per la CPU, la memoria, l'I/O disco e di rete per l'host. </dd>
</dlentry><dlentry>
<dt>Aggiornamenti del software</dt>
<dd>Questa sezione visualizza le informazioni per tutti i pacchetti per cui sono disponibili gli aggiornamenti, incluso il nome, la versione, l'architettura e il repository del pacchetto. È possibile aggiornare tutti i pacchetti elencati, selezionando <uicontrol>Aggiorna tutto</uicontrol>. Non è possibile selezionare singoli pacchetti per gli aggiornamenti.</dd>
@@ -32,7 +32,7 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
consente all'host di accedervi. Se il sistema è Red Hat Enterprise
Linux o Fedora, è possibile aggiungere i repository <filepath>yum</filepath>.
Se il sistema è Ubuntu o Debian, aggiungere i repository <filepath>deb</filepath>.<p>Se si stanno utilizzando i repository yum, è possibile aggiungere un controllo GPG per verificare che un pacchetto da questo repository non sia stato corrotto.
-Selezionare un repository, quindi <uicontrol>Modifica</uicontrol>. Selezionare <uicontrol>Sì</uicontrol> per abilitare il controllo GPG, quindi immettere un URL al file di chiavi GPG per il
+Selezionare un repository, quindi <uicontrol>Modifica</uicontrol>. Selezionare <uicontrol>Sì</uicontrol> per abilitare il <uicontrol>controllo GPG</uicontrol>, quindi immettere un URL al file di chiavi GPG per il
repository.</p></dd>
</dlentry><dlentry>
<dt>Report di debug</dt>
@@ -40,12 +40,12 @@ repository.</p></dd>
Le opzioni disponibili consentono di generare un nuovo report oppure ridenominare, rimuovere o scaricare un report esistente.<p>Il report di debug viene generato utilizzando il comando <cmdname>sosreport</cmdname>. È disponibile per le distribuzioni Red
Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora e Ubuntu. Il comando genera un file .tar che contiene informazioni di diagnostica e configurazione, come la versione del kernel in esecuzione, i moduli caricati e i file di configurazione del servizio e del sistema.
Il comando esegue anche programmi esterni per raccogliere ulteriori informazioni e memorizza l'output nell'archivio risultante.</p> </dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
<?tm 1392659967 1?>
</cshelp>
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42248_4 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/it_IT/network.dita b/ui/pages/help/it_IT/network.dita
index a396d58..2cdec19 100644
--- a/ui/pages/help/it_IT/network.dita
+++ b/ui/pages/help/it_IT/network.dita
@@ -33,7 +33,7 @@ address translation).</dd>
<li>Selezionare <uicontrol>Arresta</uicontrol> per terminare la connessione di rete.</li>
<li>Selezionare <uicontrol>Elimina</uicontrol> per eliminare le informazioni di connessione.</li>
</ul>Per creare una rete fare clic sull'icona <uicontrol>più
-(+)</uicontrol> nella parte in alto a destra del pannello.</p>
+(+)</uicontrol>. </p>
</csbody>
<cshelp id="kimhnetwcrt" xml:lang="it-it">
<title>Crea una rete</title>
@@ -58,6 +58,6 @@ address translation).</dd>
</cshelp>
-<!-- ENGL1SH_VERS10N 47050_3 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42005_3 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 230 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/it_IT/storage.dita b/ui/pages/help/it_IT/storage.dita
index 5a9bc25..becf007 100644
--- a/ui/pages/help/it_IT/storage.dita
+++ b/ui/pages/help/it_IT/storage.dita
@@ -10,13 +10,15 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<cshelp id="kimhstor" xml:lang="it-it">
<title>Memoria</title>
<shortdesc>La pagina <wintitle>Memoria</wintitle> elenca i pool di memoria
-disponibili, compresi i pool di memoria pronti per l'uso 'default' e 'ISO'.
-Se si desidera utilizzare un proprio ISO, aggiungerlo al percorso del pool di memoria 'ISO'.</shortdesc>
+disponibili, compresi i pool di memoria pronti per l'uso 'default' e 'ISO'. Se si desidera utilizzare un proprio ISO, aggiungerlo al percorso del pool di memoria 'ISO'.</shortdesc>
<csbody>
<p>Per ciascun pool di memoria vengono visualizzate le seguenti informazioni:<dl>
<dlentry>
<dt>Nome</dt>
-<dd>Il nome del pool di memoria e la percentuale utilizzata.</dd>
+<dd>Il nome del pool di memoria.</dd>
+</dlentry><dlentry>
+<dt>% utilizzata</dt>
+<dd>La percentuale del pool di memoria utilizzata. </dd>
</dlentry><dlentry>
<dt>Stato</dt>
<dd>Lo stato del pool di memoria, attivo (verde) o non attivo (rosso). </dd>
@@ -36,22 +38,11 @@ Se si desidera utilizzare un proprio ISO, aggiungerlo al percorso del pool di me
<p>Per ciascun pool di memoria è possibile selezionare le azioni indicate di seguito:<ul>
<li>Selezionare <uicontrol>Attiva</uicontrol> per attivare il pool di memoria in modo da poterlo utilizzare.</li>
<li>Selezionare <uicontrol>Disattiva</uicontrol> per disattivare un pool di memoria attivo.</li>
+<li>Selezionare <uicontrol>Aggiungi volume</uicontrol> per aggiungere altri volumi a un pool di memoria attivo.</li>
<li>Selezionare <uicontrol>Rimuovi definizione</uicontrol> per rimuovere un pool di memoria non attivo.</li>
</ul></p>
-<p>Per visualizzare i dettagli del volume di memoria per un pool di memoria, fare clic sulla freccia sul lato destro della riga del pool di memoria. I dettagli includono:<dl><dlentry>
-<dt>Tipo</dt>
-<dd>Il tipo di volume, ad esempio, <uicontrol>file</uicontrol>.</dd>
-</dlentry><dlentry>
-<dt>Formato</dt>
-<dd>Il formato, che varia in base al tipo.</dd>
-</dlentry><dlentry>
-<dt>Capacità</dt>
-<dd>La dimensione del volume di memoria.</dd>
-</dlentry><dlentry>
-<dt>Assegnazione</dt>
-<dd>La quantità di spazio già assegnato nel pool di memoria.</dd>
-</dlentry></dl>Per definire un pool di memoria fare clic sull'icona <uicontrol>più
-(+)</uicontrol> nella parte in alto a destra del pannello.</p>
+<p>Per visualizzare i dettagli del volume di memoria per un pool di memoria, fare clic sulla freccia sul lato destro della riga del pool di memoria. Per definire un pool di memoria fare clic sull'icona <uicontrol>più
+(+)</uicontrol>.</p>
</csbody>
<cshelp id="kimhdefstor" xml:lang="it-it">
<title>Definire un pool di memoria</title>
@@ -79,13 +70,29 @@ Quando si seleziona <uicontrol>iSCSI</uicontrol>, immettere l'indirizzo IP del <
<dd>Specifica un pool basato su un canale a fibre ottiche SCSI. Selezionare quale adattatore
SCSI utilizzare.</dd>
</dlentry></dl></li>
+<li>Specificare un percorso di memoria per il pool di memoria. Il percorso di memoria è l'ubicazione nel file system locale con cui il pool è associato.
+Il percorso deve essere univoco. Se la directory non esiste al momento della creazione del
+pool, verrà creata per l'utente. </li>
<li>Fare clic su <uicontrol>Crea</uicontrol>.</li>
</ol> </p>
</csbody>
</cshelp>
+<cshelp id="kimhdefstor" xml:lang="it-it">
+<title>Aggiungi volume</title>
+<shortdesc>Aggiunge volumi a un pool di memoria.</shortdesc>
+<csbody>
+<dl><dlentry>
+<dt>Richiama da URL remoto</dt>
+<dd>Specifica un'ubicazione da cui scaricare il volume. Ad esempio: <filepath>https://my-server/fedora22.img</filepath>.</dd>
+</dlentry><dlentry>
+<dt>Carica un file</dt>
+<dd>Specifica un'ubicazione sul sistema locale. </dd>
+</dlentry></dl>
+</csbody>
+</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 22336_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 52145_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 233 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/it_IT/templates.dita b/ui/pages/help/it_IT/templates.dita
index 9b84b16..5b992c1 100644
--- a/ui/pages/help/it_IT/templates.dita
+++ b/ui/pages/help/it_IT/templates.dita
@@ -11,8 +11,8 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<title>Modelli</title>
<shortdesc>La pagina <wintitle>Modelli</wintitle> visualizza i modelli di macchina virtuale definiti che è possibile utilizzare per creare macchine guest KVM.</shortdesc>
<csbody>
-<p>Per ciascun modello vengono visualizzate le seguenti informazioni:<dl>
-<dlentry>
+<p>Per ciascun modello vengono visualizzate le seguenti informazioni:</p>
+<dl><dlentry>
<dt>SO</dt>
<dd>Il nome del sistema operativo o della distribuzione.</dd>
</dlentry><dlentry>
@@ -24,69 +24,61 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</dlentry><dlentry>
<dt>Memoria</dt>
<dd>La quantità di memoria ad accesso casuale da assegnare, in MB.</dd>
-</dlentry></dl></p>
-<p>Per ciascun modello è possibile selezionare le azioni indicate di seguito:<ul>
+</dlentry></dl>
+<p>Per ciascun modello è possibile selezionare le azioni indicate di seguito:</p>
+<ul>
<li>Selezionare <uicontrol>Modifica</uicontrol> per modificare il modello.</li>
+<li>Selezionare <uicontrol>Clona</uicontrol> per copiare un modello. </li>
<li>Selezionare <uicontrol>Elimina</uicontrol> per eliminare il modello.</li>
-</ul>Per aggiungere un modello fare clic sull'icona <uicontrol>più
-(+)</uicontrol> nella parte in alto a destra del pannello.</p>
+</ul>
+<p>Per aggiungere un modello fare clic sull'icona <uicontrol>più
+(+)</uicontrol>.</p>
</csbody>
<cshelp id="kimhedittempl" xml:lang="it-it">
<title>Modifica modello</title>
<shortdesc>Modificare un modello esistente.</shortdesc>
<csbody>
-<p>Per ciascun modello vengono visualizzate le seguenti informazioni: <dl>
-<dlentry>
-<dt>Nome</dt>
-<dd>Il nome del modello.</dd>
-</dlentry><dlentry>
-<dt>Fornitore</dt>
-<dd>Il nome della società che ha creato il sistema operativo o la distribuzione per il cui utilizzo è configurato il modello.</dd>
-</dlentry><dlentry>
-<dt>Versione</dt>
-<dd>La versione del sistema operativo o della distribuzione per il cui utilizzo è configurato il modello.</dd>
-</dlentry><dlentry>
-<dt>Numero CPU</dt>
-<dd>Il numero di processori definiti per il modello.</dd>
+<p>Per ciascun modello vengono visualizzate le seguenti informazioni: </p>
+<dl><dlentry>
+<dt>Generale</dt>
+<dd>Visualizza il nome, la distribuzione fornitore, la versione, la memoria, il percorso file al file ISO e le preferenze grafiche. </dd>
</dlentry><dlentry>
<dt>Memoria</dt>
-<dd>La quantità di memoria in MB da assegnare alla macchina virtuale.</dd>
-</dlentry><dlentry>
-<dt>Disco</dt>
-<dd>La dimensione del disco in GB.</dd>
+<dd>Specificare le informazioni pool di memoria per il modello. </dd>
</dlentry><dlentry>
-<dt>CDROM</dt>
-<dd>Il percorso file all'ubicazione del file ISO utilizzato per installare la macchina guest
-KVM.</dd>
+<dt>Interfaccia</dt>
+<dd>Visualizza le interfacce di rete predefinite disponibili per la macchina guest KVM.
+È possibile selezionare più reti.</dd>
</dlentry><dlentry>
-<dt>Pool di memoria</dt>
-<dd>Un pool di memoria specifico o quello predefinito.</dd>
-</dlentry><dlentry>
-<dt>Rete</dt>
-<dd>Le interfacce di rete predefinite disponibili per la macchina guest KVM. È possibile selezionare più reti.</dd>
-</dlentry></dl> I campi non disabilitati possono essere modificati. Dopo aver modificato un campo, fare clic su <uicontrol>Salva</uicontrol>. </p>
+<dt>Processore</dt>
+<dd>Il campo <uicontrol>Numero CPU</uicontrol>, specifica il numero di processori definiti per il modello. </dd>
+<dd>Selezionare l'impostazione manuale della topologia della CPU per ogni macchina guest.</dd>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddtempl">
<title>Aggiungi modello</title>
-<shortdesc>Aggiungere un modello dal supporto di origine.
-È possibile aggiungere una propria immagine ISO al pool di memoria 'ISO' per la seguente individuazione.</shortdesc>
+<shortdesc>Aggiungere un modello dal supporto di origine. È possibile aggiungere una propria immagine ISO al pool di memoria 'ISO' per la seguente individuazione.</shortdesc>
<csbody>
-<p>Selezionare l'ubicazione del supporto di origine dalle seguenti opzioni:<dl>
-<dlentry>
+<p>Selezionare l'ubicazione del supporto di origine dalle seguenti opzioni:</p>
+<dl><dlentry>
<dt>Immagine ISO locale</dt>
<dd>Selezionare questa opzione per eseguire la scansione dei pool di memoria alla ricerca di immagini ISO di installazione disponibili sul sistema.</dd>
</dlentry><dlentry>
+<dt>File immagine locale</dt>
+<dd>Selezionare per specificare un percorso al file immagine locale. </dd>
+</dlentry><dlentry>
<dt>Immagine ISO remota</dt>
<dd>Selezionare questa opzione per specificare un'ubicazione remota per un'immagine ISO di installazione.</dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddloct">
-<title>Aggiungi modello - Immagine ISO locale</title>
-<shortdesc>Aggiungere un modello da un'immagine ISO locale.</shortdesc>
+<title>Aggiungi modello - Immagine ISO</title>
+<shortdesc>Aggiungere un modello da un'immagine ISO.</shortdesc>
<csbody>
-<p>Vengono visualizzate le immagini ISO disponibili sul sistema.<dl><dlentry>
+<p>Vengono visualizzate in remoto le immagini ISO disponibili sul sistema.</p>
+<dl><dlentry>
<dt>SO</dt>
<dd>Il nome del sistema operativo o della distribuzione.</dd>
</dlentry><dlentry>
@@ -95,8 +87,9 @@ KVM.</dd>
</dlentry><dlentry>
<dt>Dimensione</dt>
<dd>La dimensione dell'immagine ISO.</dd>
-</dlentry></dl></p>
-<p>Per creare un modello da un'immagine ISO scegliere tra le seguenti opzioni:<ul>
+</dlentry></dl>
+<p>Per creare un modello da un'immagine ISO scegliere tra le seguenti opzioni:</p>
+<ul>
<li>Selezionare un'immagine ISO da cui creare un modello, quindi fare clic su <uicontrol>Crea modelli da ISO selezionato</uicontrol>.</li>
<li>Selezionare <uicontrol>Tutti</uicontrol> per creare un modello da ciascuna immagine ISO elencata, quindi fare clic su <uicontrol>Crea modelli da ISO selezionato</uicontrol>.</li>
<li>Se nei risultati della scansione non viene visualizzata l'immagine ISO che si desidera utilizzare, è possibile selezionare dalle seguenti opzioni:<ul>
@@ -104,12 +97,12 @@ KVM.</dd>
<li>Fare clic su <uicontrol>Ricerca più ISO</uicontrol> per ricercare più immagini
ISO.</li>
</ul></li>
-</ul></p>
+</ul>
</csbody>
</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 61085_5 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 24458_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 229 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/ko_KR/guests.dita b/ui/pages/help/ko_KR/guests.dita
index 2d9f32b..b0df5b9 100644
--- a/ui/pages/help/ko_KR/guests.dita
+++ b/ui/pages/help/ko_KR/guests.dita
@@ -9,21 +9,22 @@ For support please see:
https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<cshelp id="kimhvirtm" xml:lang="ko-kr">
<title>게스트</title>
-<shortdesc><wintitle>게스트</wintitle> 페이지에는 정의된 KVM 가상 머신이 나열됩니다.</shortdesc>
+<shortdesc><wintitle>게스트</wintitle> 페이지에는 서버에 정의된
+게스트가 나열됩니다.</shortdesc>
<csbody>
<p>각 게스트에 대해 다음 정보가 표시됩니다.<dl><dlentry>
<dt>이름</dt>
-<dd>가상 머신의 이름입니다.</dd>
+<dd>게스트의 이름입니다.</dd>
</dlentry><dlentry>
<dt>CPU</dt>
-<dd>가상 머신의 프로세서 이용률입니다.</dd>
-</dlentry><dlentry>
-<dt>네트워크 I/O</dt>
-<dd>초당 네트워크 입/출력(I/O) 전송 속도(KB)입니다.</dd>
+<dd>게스트의 프로세서 이용률입니다.</dd>
</dlentry><dlentry>
<dt>디스크 I/O</dt>
<dd>초당 디스크 입/출력(I/O) 전송 속도(KB)입니다.</dd>
</dlentry><dlentry>
+<dt>네트워크 I/O</dt>
+<dd>초당 네트워크 입/출력(I/O) 전송 속도(KB)입니다.</dd>
+</dlentry><dlentry>
<dt>라이브타일</dt>
<dd>게스트 운영 체제의 상태이거나, 게스트가 활성이 아닌 경우 <tm tmtype="tm" trademark="Linux">Linux</tm> 배포를 나타내는 아이콘입니다.</dd>
</dlentry></dl></p>
@@ -37,83 +38,93 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</dlentry></dl> </p>
<p>각 게스트마다 다음 조치를 선택할 수 있습니다.<ul>
<li>게스트 운영 체제의 원격 콘솔에 연결하려면 <uicontrol>연결</uicontrol>을 선택합니다.</li>
-<li>경로를 설치 매체로 변경하려면 <uicontrol>매체 관리</uicontrol>를 선택합니다.</li>
-<li>게스트를 다시 설정하려면 <uicontrol>다시 설정</uicontrol>을 선택합니다.</li>
+<li>게스트를 작성하려면 <uicontrol>복제</uicontrol>를 선택하여 기존 게스트 정의를
+복사합니다.</li>
+<li>게스트를 다시 설정하려면 <uicontrol>다시 설정</uicontrol>을 선택합니다. 시작한 게스트만
+다시 설정할 수 있습니다.</li>
<li>기존 게스트의 특성을 편집하려면 <uicontrol>편집</uicontrol>을 선택합니다. 게스트는 중지 상태일 때만 편집할 수 있습니다.</li>
+<li>게스트를 시작하려면 <uicontrol>시작</uicontrol>을 선택합니다.</li>
+<li>게스트를 종료하려면 <uicontrol>시스템 종료</uicontrol>를 선택합니다.</li>
+<li>게스트의 즉시 종료를 강제 실행하려면 <uicontrol>전원 끄기</uicontrol>를
+선택합니다.</li>
<li>게스트를 삭제하려면 <uicontrol>삭제</uicontrol>를 선택합니다.</li>
-</ul>게스트 또는 가상 머신을 작성하려면 페이지 오른쪽 상단에 있는 <uicontrol>더하기(+)</uicontrol> 아이콘을 클릭합니다.</p>
+</ul>게스트를 작성하려면 페이지에 있는 <uicontrol>더하기(+)</uicontrol> 아이콘을
+클릭합니다.</p>
</csbody>
<cshelp id="kimhvirtmcrt" xml:lang="ko-kr">
-<title>가상 머신 작성</title>
-<shortdesc>기존 템플리트를 사용하여 가상 머신을 작성합니다.</shortdesc>
+<title>게스트 작성</title>
+<shortdesc>기존 템플리트를 사용하여 게스트를 작성합니다.</shortdesc>
<csbody>
<p> <ol>
-<li>가상 머신을 식별하는 데 사용될 이름을 입력하십시오.</li>
-<li rev="rev1">템플리트를 선택하십시오. <ul>
+<li>게스트를 식별하는 데 사용될 이름을 입력하십시오.</li>
+<li>템플리트를 선택하십시오. <ul>
<li>템플리트가 존재하는 경우, 표시된 템플리트 중에서 선택하십시오.</li>
<li>템플리트가 없는 경우, <uicontrol>템플리트 작성</uicontrol>을 클릭하여 템플리트를 작성하십시오.</li>
-</ul></li>
+</ul>마우스를 올려 놓으면 템플리트 정보를 볼 수 있습니다.</li>
<li><uicontrol>작성</uicontrol>을 클릭하십시오.</li>
</ol> </p>
</csbody>
</cshelp>
<cshelp id="kimhvirtmedit" xml:lang="ko-kr">
<title>게스트 편집</title>
-<shortdesc>기존 가상 머신의 특성을 편집합니다. 일부 특성은 게스트가 중지된 동안에만 편집할 수 있습니다.
+<shortdesc>기존 게스트의 특성을 편집합니다. 일부 특성은 게스트가 중지된 동안에만 편집할 수 있습니다.
다른 특성은 다음 부트에서 적용됩니다. </shortdesc>
-<csprolog><csmetadata></csmetadata></csprolog>
<csbody>
-<p>각 게스트에 대해 다음 정보가 <wintitle>일반</wintitle> 탭에 표시됩니다.<dl>
-<dlentry>
-<dt>이름</dt>
-<dd>가상 머신의 이름입니다(게스트가 중지된 동안에만 편집할 수 있음).</dd>
-</dlentry><dlentry>
-<dt>CPU</dt>
-<dd>프로세서 수입니다(게스트가 실행 중인 경우 새 크기는 다음 부트에서 적용됨).</dd>
-</dlentry><dlentry>
-<dt>메모리</dt>
-<dd>메모리 용량(MB)입니다(게스트가 실행 중인 경우 새 용량은 다음 부트에서 적용됨).</dd>
-</dlentry><dlentry>
-<dt>아이콘</dt>
-<dd>게스트가 활성이 아닐 때 현재 상태(라이브타일) 대신에 표시될 Linux 배포를 나타내는 그래픽 이미지입니다.</dd>
-</dlentry></dl></p>
-<p>다음 정보가 <wintitle>스토리지</wintitle> 탭에 표시됩니다.</p>
<dl><dlentry>
+<dt>일반</dt>
+<dd>게스트에 사용할 이름, CPU, 메모리 및 아이콘을 포함하여
+게스트에 대한 정보를 표시합니다. 중지된 게스트의 이름을 편집할 수
+있습니다. CPU와 메모리를 변경하면 다음 부팅 후 적용됩니다.</dd>
+</dlentry><dlentry>
<dt>스토리지</dt>
-<dd>설치에 사용된 ISO 파일의 위치를 표시합니다.</dd>
+<dd>선택한 게스트에 대한 스토리지의 장치 및 경로를 표시합니다.
+게스트의 스토리지 장치를 추가, 편집 및 제거할 수 있습니다.</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>인터페이스</dt>
+<dd>이름, 유형 및 MAC 주소를 포함하여 게스트에 대한 네트워크 정보를
+표시합니다. 게스트의 인터페이스를 추가, 편집 및 제거할 수
+있습니다.</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>권한</dt>
+<dd>게스트에 대한 권한이 부여된 사용자 및 그룹을 표시합니다.</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>호스트 PCI 장치</dt>
+<dd>호스트에서 사용 가능한 모든 PCI 장치 목록을 표시합니다.</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>스냅샷</dt>
+<dd>게스트의 스냅샷을 표시합니다. 스냅샷을 작성, 편집 또는 삭제할 수
+있습니다. 스냅샷을 선택하고 되돌리기를 선택함으로써 게스트는
+스냅샷 데이터에 의해 결정되는 과거의 시점으로 복원되며
+해당 시점을 넘어 작성된 변경사항을 삭제합니다.</dd>
</dlentry></dl>
<p> 사용 안함으로 설정되지 않은 필드를 편집할 수 있습니다. 필드를 편집한 후에 <uicontrol>저장</uicontrol>을 클릭합니다. </p>
</csbody>
</cshelp>
-<cshelp id="kimstoragedevice" xml:lang="ko-kr">
-<title>스토리지 장치 추가, 교체 또는 분리</title>
-<shortdesc rev="rev1">가상 머신에 대해 스토리지 장치를 추가, 교체 또는 분리할 수 있습니다. 지원되는 장치는 CDROM뿐입니다. 스토리지 장치를 편집하려면 다음 단계를 수행하십시오.</shortdesc>
+<cshelp id="kimhvirtmclone" xml:lang="ko-kr">
+<title>게스트 복제</title>
+<shortdesc>게스트를 복제하여 게스트 사본을 작성할 수 있습니다.</shortdesc>
<csbody>
+<p>게스트를 복제하려면 다음을 수행하십시오.</p>
<ol>
-<li><wintitle>게스트 편집</wintitle> 창에서 <wintitle>스토리지</wintitle>를 선택하십시오.</li>
-<li>스토리지 장치를 교체하려면 <uicontrol>주황색 슬래시(/)</uicontrol>가 있는 첫 번째 아이콘을 클릭하십시오. ISO 파일 경로를 입력하고 <uicontrol>교체</uicontrol>를 클릭하십시오.</li>
-<li>스토리지 장치를 분리하려면 <uicontrol>빨간색 대시(-)</uicontrol>가 있는 두 번째 아이콘을 클릭하십시오. 삭제 여부를 확인하고 <uicontrol>확인</uicontrol>을 클릭하십시오.</li>
-<li>스토리지 장치를 추가하려면 녹색 <uicontrol>더하기 부호(+)</uicontrol>가 있는 세 번째 아이콘을 클릭하십시오. 장치 이름 및 ISO 파일 경로를 입력하고 <uicontrol>분리</uicontrol>를 클릭하십시오.</li>
-</ol>
-</csbody>
-</cshelp>
-<cshelp id="kimreplacemedia" xml:lang="ko-kr">
-<title>VM의 CDROM 교체</title>
-<shortdesc rev="rev1">설치가 완료된 후에 가상 머신에 대한 CDROM의 컨텐츠를 바꿀 수 있습니다.</shortdesc>
-<csbody>
-<ol>
-<li>가상 머신이 시작되었는지 확인하십시오.</li>
-<li>조치 메뉴에서 <uicontrol>매체 관리</uicontrol>를 선택하십시오.</li>
-<li>CDROM에 현재 로드된 항목을 변경하기 위해 hdc 필드 옆에 있는 <uicontrol>주황색 슬래시(/)</uicontrol> 아이콘을 클릭하십시오.</li>
-<li><wintitle>VM의 CDROM 교체</wintitle> 페이지에서 ISO 파일 경로를 입력하십시오. 다른 두 필드는 읽기 전용입니다.</li>
-<li><uicontrol>교체</uicontrol>를 클릭하십시오.</li>
+<li>게스트의 조치 메뉴에서 <uicontrol>복제</uicontrol>를
+선택합니다.</li>
+<li>경고에 동의합니다. <note>대상 게스트가 SCSI 또는
+iSCSI 볼륨을 사용하거나 대상 풀에 충분한 공간이 없는 경우
+복제는 기본 스토리지 풀에 작성됩니다.</note></li>
</ol>
+<p>프로세스가 완료되면 <uicontrol>복제 중...</uicontrol> 레이블 목록에 게스트가 표시되고
+복제된 게스트는 사용할 수 있습니다.</p>
+
</csbody>
</cshelp>
<?tm 1391540919 3?>
</cshelp>
-<!-- ENGL1SH_VERS10N 45645_6 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 04963_6 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 231 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/ko_KR/host.dita b/ui/pages/help/ko_KR/host.dita
index ee4a9c3..220e166 100644
--- a/ui/pages/help/ko_KR/host.dita
+++ b/ui/pages/help/ko_KR/host.dita
@@ -16,13 +16,15 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<li>호스트 시스템을 다시 시작하려면 <uicontrol>다시 시작</uicontrol>을 선택합니다.</li>
<li>이미 연결되어 있지 않은 경우, 호스트 시스템에 대한 VNC 연결을 시작하려면 <uicontrol>연결</uicontrol>을 선택합니다.</li>
</ul></p>
-<p>호스트에 대한 정보를 표시하려면 다음 섹션을 클릭하십시오.<dl>
-<dlentry>
+<p>호스트에 대한 정보를 표시하려면 다음 섹션을 클릭하십시오.</p>
+<dl><dlentry>
<dt>기본 정보</dt>
-<dd>이 섹션에는 호스트 운영 체제 배포, 버전, 코드 이름, 프로세서 유형, 메모리 용량(GB) 등이 표시됩니다.</dd>
+<dd>이 섹션에는 호스트 운영 체제 배포,
+버전, 코드 이름, 프로세서 유형, 온라인 CPU 수,
+메모리 용량(GB) 등이 표시됩니다.</dd>
</dlentry><dlentry>
<dt>시스템 통계</dt>
-<dd>이 섹션에는 호스트의 CPU, 메모리, 디스크 I/O, 네트워크 I/O에 대한 통계를 표시하는 그래프가 표시됩니다. 호스트 탭을 떠났을 때 데이터 수집을 계속하려면 <uicontrol>이 페이지를 떠난 후에 데이터 수집</uicontrol>을 선택합니다.</dd>
+<dd>이 섹션에는 호스트의 CPU, 메모리, 디스크 I/O, 네트워크 I/O에 대한 통계를 표시하는 그래프가 표시됩니다. </dd>
</dlentry><dlentry>
<dt>소프트웨어 업데이트</dt>
<dd>이 섹션에는 패키지 이름, 버전, 아키텍처, 저장소를 비롯하여 사용 가능한 업데이트가 있는 모든 패키지에 대한 정보가 표시됩니다. <uicontrol>모두 업데이트</uicontrol>를 선택하여 나열된 모든 패키지를 업데이트할 수 있습니다. 업데이트에 대해 개별 패키지를 선택할 수는 없습니다.</dd>
@@ -30,18 +32,20 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<dt>저장소</dt>
<dd>이 섹션에는 호스트 시스템과 연관된 저장소가 표시됩니다. 저장소를 추가하거나, 사용으로 설정하거나, 편집하거나, 제거할 수 있습니다. 저장소를 추가하면 저장소가 호스트 시스템과 연관되며, 저장소를 사용으로 설정하면 호스트가 저장소에 액세스할 수 있습니다. 해당 시스템이 Red Hat Enterprise Linux 또는 Fedora인 경우, <filepath>yum</filepath> 저장소를 추가할 수 있습니다.
해당 시스템이 Ubuntu 또는 Debian인 경우, <filepath>deb</filepath> 저장소를 추가하십시오.<p>yum 저장소로 작업하는 경우, GPG 검사를 추가하여 이 저장소의 패키지가 손상되지 않았는지 확인할 수 있습니다.
-저장소를 선택한 후 <uicontrol>편집</uicontrol>을 선택하십시오. <uicontrol>예</uicontrol>를 선택하여 GPG 검사를 사용으로 설정한 후 저장소에 대한 GPG 키 파일의 URL을 입력하십시오.</p></dd>
+저장소를 선택한 후 <uicontrol>편집</uicontrol>을 선택하십시오. <uicontrol>예</uicontrol>를 선택하여
+<uicontrol>GPG 검사</uicontrol>를 사용으로 설정한 후
+저장소에 대한 GPG 키 파일의 URL을 입력하십시오.</p></dd>
</dlentry><dlentry>
<dt>디버그 보고서</dt>
<dd>이 섹션에는 이름 및 파일 경로를 포함한 디버그 보고서가 표시됩니다.
새 보고서 생성, 기존 보고서 이름 바꾸기, 제거, 다운로드 등의 옵션 중에서 선택할 수 있습니다.<p>디버그 보고서는 <cmdname>sosreport</cmdname> 명령을 사용하여 생성됩니다. 이는 Red Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora 및 Ubuntu 배포에서 사용 가능합니다. 이 명령은 구성 및 진단 정보(예: 실행 중인 커널 버전, 로드된 모듈, 시스템 및 서비스 구성 파일)를 포함하는 .tar 파일을 생성합니다.
또한 이 명령은 외부 프로그램을 실행하여 추가 정보를 수집하고 결과 아카이브에 이 출력을 저장합니다.</p> </dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
<?tm 1392659967 1?>
</cshelp>
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42248_4 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/ko_KR/network.dita b/ui/pages/help/ko_KR/network.dita
index 451510f..d907abc 100644
--- a/ui/pages/help/ko_KR/network.dita
+++ b/ui/pages/help/ko_KR/network.dita
@@ -31,7 +31,7 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<li rev="rev1">네트워크 연결을 시작하려면 <uicontrol>시작</uicontrol>을 선택합니다.</li>
<li>네트워크 연결을 종료하려면 <uicontrol>중지</uicontrol>를 선택합니다.</li>
<li>연결 정보를 삭제하려면 <uicontrol>삭제</uicontrol>를 선택합니다.</li>
-</ul>네트워크를 작성하려면 화면 오른쪽 상단에 있는 <uicontrol>더하기(+)</uicontrol> 아이콘을 클릭합니다.</p>
+</ul>네트워크를 작성하려면 <uicontrol>더하기(+)</uicontrol> 아이콘을 클릭합니다.</p>
</csbody>
<cshelp id="kimhnetwcrt" xml:lang="ko-kr">
<title>네트워크 작성</title>
@@ -56,6 +56,6 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</cshelp>
-<!-- ENGL1SH_VERS10N 47050_3 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42005_3 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 230 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/ko_KR/storage.dita b/ui/pages/help/ko_KR/storage.dita
index 2e6f5e8..da01678 100644
--- a/ui/pages/help/ko_KR/storage.dita
+++ b/ui/pages/help/ko_KR/storage.dita
@@ -15,7 +15,10 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<p>각 스토리지 풀에 대해 다음 정보가 표시됩니다.<dl>
<dlentry>
<dt>이름</dt>
-<dd>스토리지 풀의 이름 및 사용률입니다.</dd>
+<dd>스토리지 풀의 이름입니다.</dd>
+</dlentry><dlentry>
+<dt>% Used</dt>
+<dd>사용 중인 스토리지 풀의 사용률입니다.</dd>
</dlentry><dlentry>
<dt>상태</dt>
<dd>스토리지 풀의 상태(활성의 경우 녹색, 비활성의 경우 빨간색)입니다. </dd>
@@ -35,21 +38,12 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<p>각 스토리지 풀마다 다음 조치를 선택할 수 있습니다.<ul>
<li>사용 가능하도록 스토리지 풀을 활성화하려면 <uicontrol>활성화</uicontrol>를 선택합니다.</li>
<li>스토리지 풀을 비활성화하려면 <uicontrol>비활성화</uicontrol>를 선택합니다.</li>
+<li>활성 스토리지 풀에 볼륨을 추가하려면 <uicontrol>볼륨 추가</uicontrol>를
+선택합니다.</li>
<li>비활성 스토리지 풀을 제거하려면 <uicontrol>정의 취소</uicontrol>를 선택합니다.</li>
</ul></p>
-<p>스토리지 풀에 대한 스토리지 볼륨 세부사항을 표시하려면 스토리지 풀 행의 오른쪽에 있는 화살표를 클릭하십시오. 세부사항에는 다음이 포함됩니다.<dl><dlentry>
-<dt>유형</dt>
-<dd>볼륨의 유형입니다. 예: <uicontrol>파일</uicontrol></dd>
-</dlentry><dlentry>
-<dt>형식</dt>
-<dd>형식은 유형에 따라 달라집니다.</dd>
-</dlentry><dlentry>
-<dt>용량</dt>
-<dd>스토리지 볼륨의 크기입니다.</dd>
-</dlentry><dlentry>
-<dt>할당</dt>
-<dd>스토리지 풀에 이미 할당된 공간의 양입니다.</dd>
-</dlentry></dl>스토리지 풀을 정의하려면 화면 오른쪽 상단에 있는 <uicontrol>더하기(+)</uicontrol> 아이콘을 클릭합니다.</p>
+<p>스토리지 풀에 대한 스토리지 볼륨 세부사항을 표시하려면 스토리지 풀 행의 오른쪽에 있는 화살표를 클릭하십시오. 스토리지 풀을 정의하려면
+<uicontrol>더하기(+)</uicontrol> 아이콘을 클릭합니다.</p>
</csbody>
<cshelp id="kimhdefstor" xml:lang="ko-kr">
<title>스토리지 풀 정의</title>
@@ -74,13 +68,30 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<dt><uicontrol>SCSI 파이버 채널</uicontrol></dt>
<dd>SCSI 파이버 채널을 기반으로 풀을 지정합니다. 사용할 SCSI 어댑터를 선택합니다.</dd>
</dlentry></dl></li>
+<li>스토리지 풀의 스토리지 경로를 지정합니다. 스토리지 경로는
+풀이 맵핑되는 로컬 파일 시스템의 위치입니다.
+경로는 고유해야 합니다. 풀이 작성될 때 디렉토리가 없는 경우
+사용자에 대해 작성됩니다.</li>
<li><uicontrol>작성</uicontrol>을 클릭하십시오.</li>
</ol> </p>
</csbody>
</cshelp>
+<cshelp id="kimhdefstor" xml:lang="ko-kr">
+<title>볼륨 추가</title>
+<shortdesc>스토리지 풀에 볼륨을 추가합니다.</shortdesc>
+<csbody>
+<dl><dlentry>
+<dt>원격 URL에서 페치</dt>
+<dd>볼륨을 다운로드할 위치를 지정합니다. 예를 들어, <filepath>https://my-server/fedora22.img</filepath>입니다.</dd>
+</dlentry><dlentry>
+<dt>파일 업로드</dt>
+<dd>로컬 시스템에 위치를 지정합니다.</dd>
+</dlentry></dl>
+</csbody>
+</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 22336_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 52145_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 233 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/ko_KR/templates.dita b/ui/pages/help/ko_KR/templates.dita
index de16d6e..8aa4286 100644
--- a/ui/pages/help/ko_KR/templates.dita
+++ b/ui/pages/help/ko_KR/templates.dita
@@ -11,8 +11,8 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<title>템플리트</title>
<shortdesc><wintitle>템플리트</wintitle> 페이지에는 KVM 게스트를 작성하는 데 사용될 수 있는 정의된 가상 머신 템플리트가 표시됩니다.</shortdesc>
<csbody>
-<p>각 템플리트에 대해 다음 정보가 표시됩니다.<dl>
-<dlentry>
+<p>각 템플리트에 대해 다음 정보가 표시됩니다.</p>
+<dl><dlentry>
<dt>OS</dt>
<dd>운영 체제 또는 배포의 이름입니다.</dd>
</dlentry><dlentry>
@@ -24,66 +24,62 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</dlentry><dlentry>
<dt>메모리</dt>
<dd>할당될 RAM(Random Access Memory)의 양(MB)입니다.</dd>
-</dlentry></dl></p>
-<p>각 템플리트마다 다음 조치를 선택할 수 있습니다.<ul>
+</dlentry></dl>
+<p>각 템플리트마다 다음 조치를 선택할 수 있습니다.</p>
+<ul>
<li>템플리트를 편집하려면 <uicontrol>편집</uicontrol>을 선택합니다.</li>
+<li>템플리트를 복사하려면 <uicontrol>복제</uicontrol>를 선택합니다.</li>
<li>템플리트를 삭제하려면 <uicontrol>삭제</uicontrol>를 선택합니다.</li>
-</ul>템플리트를 추가하려면 화면 오른쪽 상단에 있는 <uicontrol>더하기(+)</uicontrol> 아이콘을 클릭합니다.</p>
+</ul>
+<p>템플리트를 추가하려면 <uicontrol>더하기(+)</uicontrol> 아이콘을 클릭합니다.</p>
</csbody>
<cshelp id="kimhedittempl" xml:lang="ko-kr">
<title>템플리트 편집</title>
<shortdesc>기존 템플리트를 편집합니다.</shortdesc>
<csbody>
-<p>각 템플리트에 대해 다음 정보가 표시됩니다. <dl>
-<dlentry>
-<dt>이름</dt>
-<dd>템플리트의 이름입니다.</dd>
+<p>각 템플리트에 대해 다음 정보가 표시됩니다. </p>
+<dl><dlentry>
+<dt>일반</dt>
+<dd>이름, 벤더 배포, 버전, 메모리,
+ISO 파일에 대한 파일 경로 및 그래픽 환경 설정을 표시합니다.</dd>
</dlentry><dlentry>
-<dt>공급업체</dt>
-<dd>템플리트가 사용하도록 구성된 운영 체제 또는 배포를 작성한 회사의 이름입니다.</dd>
+<dt>스토리지</dt>
+<dd>템플리트에 대한 스토리지 풀 정보를 지정합니다.</dd>
</dlentry><dlentry>
-<dt>버전</dt>
-<dd>템플리트가 사용하도록 구성된 운영 체제 또는 배포의 버전입니다.</dd>
-</dlentry><dlentry>
-<dt>CPU 수</dt>
-<dd>템플리트에 대해 정의된 프로세서의 수입니다.</dd>
-</dlentry><dlentry>
-<dt>메모리</dt>
-<dd>가상 머신에 할당될 메모리 용량(MB)입니다.</dd>
+<dt>인터페이스</dt>
+<dd>KVM 게스트에 사용 가능한 기본 네트워크 인터페이스를 표시합니다.
+여러 네트워크를 선택할 수 있습니다.</dd>
</dlentry><dlentry>
-<dt>디스크</dt>
-<dd>디스크 크기(GB)입니다.</dd>
-</dlentry><dlentry>
-<dt>CDROM</dt>
-<dd>KVM 게스트를 설치하는 데 사용된 ISO 파일의 위치에 대한 파일 경로입니다.</dd>
-</dlentry><dlentry>
-<dt>스토리지 풀</dt>
-<dd>특정 스토리지 풀 또는 기본 스토리지 풀입니다.</dd>
-</dlentry><dlentry>
-<dt>네트워크</dt>
-<dd>KVM 게스트에 사용 가능한 기본 네트워크 인터페이스입니다. 여러 네트워크를 선택할 수 있습니다.</dd>
-</dlentry></dl> 사용 안함으로 설정되지 않은 필드를 편집할 수 있습니다. 필드를 편집한 후에 <uicontrol>저장</uicontrol>을 클릭합니다. </p>
+<dt>프로세서</dt>
+<dd><uicontrol>CPU 번호</uicontrol> 필드에서 템플리트에 대해 정의된
+프로세서의 수를 지정합니다.</dd>
+<dd>각 게스트에 대해 CPU 토폴로지를 수동으로 설정하려면 선택합니다.</dd>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddtempl">
<title>템플리트 추가</title>
<shortdesc>소스 매체로부터 템플리트를 추가합니다. 다음 검색에 대해 'ISO' 스토리지 풀에 사용자 전용 ISO 이미지를 추가할 수 있습니다. </shortdesc>
<csbody>
-<p>다음 옵션 중에서 소스 매체의 위치를 선택하십시오.<dl>
-<dlentry>
+<p>다음 옵션 중에서 소스 매체의 위치를 선택하십시오.</p>
+<dl><dlentry>
<dt>로컬 ISO 이미지</dt>
<dd>시스템에서 사용 가능한 설치 ISO 이미지의 스토리지 풀을 스캔하려면 선택합니다.</dd>
</dlentry><dlentry>
+<dt>로컬 이미지 파일</dt>
+<dd>로컬 이미지 파일 경로를 지정하려면 선택합니다.</dd>
+</dlentry><dlentry>
<dt>원격 ISO 이미지</dt>
<dd>설치 ISO 이미지의 원격 위치를 지정하려면 선택합니다.</dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddloct">
-<title>템플리트 추가 - 로컬 ISO 이미지</title>
-<shortdesc>로컬 ISO 이미지로부터 템플리트를 추가합니다.</shortdesc>
+<title>템플리트 추가 - ISO 이미지</title>
+<shortdesc>ISO 이미지로부터 템플리트를 추가합니다.</shortdesc>
<csbody>
-<p>시스템에서 사용 가능한 ISO 이미지가 표시됩니다.<dl><dlentry>
+<p>시스템에서 사용 가능한 ISO 이미지가 원격으로 표시됩니다.</p>
+<dl><dlentry>
<dt>OS</dt>
<dd>운영 체제 또는 배포의 이름입니다.</dd>
</dlentry><dlentry>
@@ -92,20 +88,21 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</dlentry><dlentry>
<dt>크기</dt>
<dd>ISO 이미지의 크기입니다.</dd>
-</dlentry></dl></p>
-<p>ISO 이미지로부터 템플리트를 작성하려면 다음 옵션 중에서 선택하십시오.<ul>
+</dlentry></dl>
+<p>ISO 이미지로부터 템플리트를 작성하려면 다음 옵션 중에서 선택하십시오.</p>
+<ul>
<li>템플리트를 작성하기 위한 ISO 이미지를 선택한 후 <uicontrol>선택한 ISO로부터 템플리트 작성</uicontrol>을 클릭합니다.</li>
<li>나열된 각 ISO 이미지로부터 템플리트를 작성하려면 <uicontrol>모두</uicontrol>를 선택한 후 <uicontrol>선택한 ISO로부터 템플리트 작성</uicontrol>을 클릭합니다.</li>
<li>사용하려는 ISO 이미지가 스캔 결과에 표시되지 않는 경우, 다음 옵션 중에서 선택할 수 있습니다.<ul>
<li>ISO 이미지의 경로를 지정하려면 <uicontrol>특정 ISO 파일을 사용하려고 합니다.</uicontrol>를 선택합니다.</li>
<li>추가 ISO 이미지를 검색하려면 <uicontrol>추가 ISO 검색</uicontrol>을 클릭합니다.</li>
</ul></li>
-</ul></p>
+</ul>
</csbody>
</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 61085_5 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 24458_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 229 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/ru_RU/guests.dita b/ui/pages/help/ru_RU/guests.dita
index 701dd7e..893b9cd 100644
--- a/ui/pages/help/ru_RU/guests.dita
+++ b/ui/pages/help/ru_RU/guests.dita
@@ -9,21 +9,21 @@ For support please see:
https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<cshelp id="kimhvirtm" xml:lang="ru-ru">
<title>Гостевые системы</title>
-<shortdesc>На странице <wintitle>Гостевые системы</wintitle> показывается список созданных виртуальных машин KVM.</shortdesc>
+<shortdesc>Страница <wintitle>Гостевые системы</wintitle> содержит список гостевых систем сервера.</shortdesc>
<csbody>
<p>Для каждой гостевой системы показывается следующая информация:<dl><dlentry>
<dt>Имя</dt>
-<dd>Имя виртуальной машины.</dd>
+<dd>Имя гостевой системы.</dd>
</dlentry><dlentry>
<dt>Процессор</dt>
-<dd>Процент использования процессора в виртуальной машине.</dd>
-</dlentry><dlentry>
-<dt>Сетевой ввод-вывод</dt>
-<dd>Скорость сетевого ввода-вывода в КБ/с.</dd>
+<dd>Процент использования процессора в гостевой системе.</dd>
</dlentry><dlentry>
<dt>Дисковый ввод-вывод</dt>
<dd>Скорость дискового ввода-вывода в КБ/с.</dd>
</dlentry><dlentry>
+<dt>Сетевой ввод-вывод</dt>
+<dd>Скорость сетевого ввода-вывода в КБ/с.</dd>
+</dlentry><dlentry>
<dt>Livetile</dt>
<dd>Состояние консоли гостевой операционной системы или значок, представляющий вариант ОС <tm tmtype="tm" trademark="Linux">Linux</tm>, если гостевая система не активна.</dd>
</dlentry></dl></p>
@@ -37,86 +37,81 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</dlentry></dl> </p>
<p>Для каждой гостевой системы доступны следующие действия:<ul>
<li><uicontrol>Подключиться</uicontrol> - подключиться к удаленной консоли гостевой операционной системы.</li>
-<li><uicontrol>Управление носителями</uicontrol> - изменение пути к установочному носителю.</li>
-<li><uicontrol>Сброс</uicontrol> - сброс гостевой системы.</li>
+<li>Выберите <uicontrol>Дублировать</uicontrol>, чтобы скопировать существующее определение гостевой системы и создать новую.</li>
+<li><uicontrol>Сброс</uicontrol> - сброс гостевой системы. Сбросить можно только работающую гостевую систему.</li>
<li><uicontrol>Изменить</uicontrol> - настройка свойств гостевой системы. Свойства гостевой системы можно изменять, только когда система остановлена.</li>
-<li><uicontrol>Удалить</uicontrol> - удалить гостевую систему.</li>
-</ul>Для создания гостевой системы (виртуальной машины) щелкните на значке <uicontrol>плюс
-(+)</uicontrol> в правом верхнем углу страницы.</p>
+<li>Выберите <uicontrol>Пуск</uicontrol>, чтобы запустить гостевую систему</li>
+<li>Выберите <uicontrol>Завершить работу</uicontrol>, чтобы штатно завершить работу гостевой системы.</li>
+<li>Выберите <uicontrol>Выключить</uicontrol>, чтобы принудительно завершить работу гостевой системы.</li>
+<li>Выберите <uicontrol>Удалить</uicontrol>, чтобы удалить гостевую систему.</li>
+</ul>Для создания гостевой системы щелкните на значке <uicontrol>плюса (+)</uicontrol> на странице.</p>
</csbody>
<cshelp id="kimhvirtmcrt" xml:lang="ru-ru">
-<title>Создание виртуальной машины</title>
-<shortdesc>Создание виртуальной машины с помощью шаблона.</shortdesc>
+<title>Создание гостевой системы</title>
+<shortdesc>Создание гостевой системы из готового шаблона.</shortdesc>
<csbody>
<p> <ol>
-<li>Введите имя для идентификации виртуальной машины.</li>
-<li rev="rev1">Выберите шаблон. <ul>
+<li>Введите имя, с помощью которого будет идентифицироваться гостевая система.</li>
+<li>Выберите шаблон. <ul>
<li>Если есть шаблоны, выберите шаблон в списке.</li>
<li>Если шаблонов нет, щелкните на <uicontrol>Создать шаблон</uicontrol>, чтобы создать шаблон.</li>
-</ul></li>
+</ul>Для просмотра информации о шаблоне наведите курсор мыши на него.</li>
<li>Щелкните на <uicontrol>Создать</uicontrol>.</li>
</ol> </p>
</csbody>
</cshelp>
<cshelp id="kimhvirtmedit" xml:lang="ru-ru">
<title>Изменение гостевой системы</title>
-<shortdesc>Изменение свойств существующей виртуальной машины. Некоторые свойства можно изменять только пока остановлена гостевая среда. Другие вступают в силу после следующей перезагрузки.</shortdesc>
-<csprolog><csmetadata></csmetadata></csprolog>
+<shortdesc>Изменение свойств существующей гостевой системы. Некоторые свойства можно изменять только пока остановлена гостевая среда. Другие вступают в силу после перезагрузки.</shortdesc>
<csbody>
-<p>Для каждой гостевой системы показывается следующая информация на вкладке <wintitle>Общие</wintitle>:<dl>
-<dlentry>
-<dt>Имя</dt>
-<dd>Имя виртуальной машины. (можно редактировать пока остановлена гостевая среда)</dd>
-</dlentry><dlentry>
-<dt>Процессоры</dt>
-<dd>Число процессоров. (если гостевая среда работает, новое число вступит в силу после перезагрузки)</dd>
-</dlentry><dlentry>
-<dt>Память</dt>
-<dd>Объем памяти в МБ. (если гостевая среда работает, новое число вступит в силу после перезагрузки)</dd>
-</dlentry><dlentry>
-<dt>Значок</dt>
-<dd>Графическое изображение, представляющее вариант ОС Linux. Оно показывается вместо текущего состояния
-(Livetile), когда гостевая система не активна.</dd>
-</dlentry></dl></p>
-<p>На вкладке <wintitle>Дисковая память</wintitle> показывается следующая информация.</p>
<dl><dlentry>
+<dt>Общие</dt>
+<dd>Информация о гостевой системе, включая имя, число процессоров, объем памяти и значок. Имя остановленной гостевой системы можно изменить. Изменение числа процессоров и объема памяти вступает в силу после перезагрузки.</dd>
+</dlentry><dlentry>
<dt>Дисковая память</dt>
-<dd>Показывает расположение файла ISO для установки.</dd>
+<dd>Информация об устройстве и путь к дисковой памяти выбранной гостевой системы.
+Можно добавлять, изменять и удалять устройства хранения гостевой системы.</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Интерфейс</dt>
+<dd>Сетевая информация для гостевой системы, включая имя, тип и MAC-адрес.
+Можно добавлять, изменять и удалять интерфейсы гостевой системы.</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Права доступа</dt>
+<dd>Информация о пользователях и группах, которым разрешен доступ к гостевой системе.</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Устройство PCI хоста</dt>
+<dd>Список всех устройств PCI, доступных на хосте.</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Моментальная копия</dt>
+<dd>Информация о моментальных копиях гостевой системы. Можно создавать, изменять и удалять моментальные копии. Выберите моментальную копию и щелкните на Восстановить - восстановится одно из прошлых состояний гостевой системы, сохраненное в моментальной копии; все изменения, возникшие позднее, будут потеряны.
+</dd>
</dlentry></dl>
<p> Активные поля можно изменять. После изменения поля щелкните на <uicontrol>Сохранить</uicontrol>. </p>
</csbody>
</cshelp>
-<cshelp id="kimstoragedevice" xml:lang="ru-ru">
-<title>Добавление, замена и отключение устройств хранения</title>
-<shortdesc rev="rev1">В виртуальной машине можно добавлять, заменять и отключать устройства хранения. Единственное поддерживаемое устройство - CDROM. Для изменения устройств хранения выполните следующие действия:</shortdesc>
+<cshelp id="kimhvirtmclone" xml:lang="ru-ru">
+<title>Дублирование гостевых систем</title>
+<shortdesc>Дублирование гостевых систем позволяет создавать копии гостевых систем.</shortdesc>
<csbody>
+<p>Для дублирования гостевой системы выполните следующие действия:</p>
<ol>
-<li>В окне <wintitle>Изменить гостевую систему</wintitle> выберите <wintitle>Дисковая память</wintitle>.</li>
-<li>Для замены устройства хранения щелкните на первом значке с <uicontrol>оранжевой косой чертой (/)</uicontrol>. Введите путь к файлу ISO и щелкните на <uicontrol>Заменить</uicontrol>.</li>
-<li>Для отключения устройства хранения щелкните на втором значке с <uicontrol>красной горизонтальной чертой (-)</uicontrol>. Подтвердите удаление и нажмите кнопку <uicontrol>OK</uicontrol>.</li>
-<li>Для добавления устройства хранения щелкните на третьем значке с <uicontrol>зеленым плюсом
-(+)</uicontrol>. Введите имя устройства и путь к файлу ISO и щелкните на <uicontrol>Подключить</uicontrol>.</li>
-</ol>
-</csbody>
-</cshelp>
-<cshelp id="kimreplacemedia" xml:lang="ru-ru">
-<title>Замена CDROM виртуальной машины</title>
-<shortdesc rev="rev1">По окончании установки можно заменить содержимое CDROM для виртуальной машины.</shortdesc>
-<csbody>
-<ol>
-<li>Запустите виртуальную машину.</li>
-<li>В меню Действия выберите <uicontrol>Управление носителями</uicontrol>.</li>
-<li>Для замены носителя, вставленного в CDROM, щелкните на значке с <uicontrol>оранжевой косой чертой
-(/)</uicontrol> рядом с полем hdc.</li>
-<li>На странице <wintitle>Замена CDROM виртуальной машины</wintitle> введите путь к файлу ISO. Два других поля доступны только для чтения.</li>
-<li>Выберите опцию <uicontrol>Заменить</uicontrol>.</li>
+<li>Выберите <uicontrol>Дублировать</uicontrol> в меню Действие гостевой системы.</li>
+<li>Примите предупреждение.<note>Если в целевой гостевой системе используются тома SCSI или iSCSI или если в целевом пуле недостаточно свободного места, дубликат будет создан в пуле памяти по умолчанию.
+</note></li>
</ol>
+<p>Появится гостевая система в списке с надписью <uicontrol>Дубликат...</uicontrol>. По окончании процесса копия гостевой системы станет доступна для использования.
+</p>
+
</csbody>
</cshelp>
<?tm 1391540919 3?>
</cshelp>
-<!-- ENGL1SH_VERS10N 45645_6 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 04963_6 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 231 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/ru_RU/host.dita b/ui/pages/help/ru_RU/host.dita
index fb72c21..54a78f5 100644
--- a/ui/pages/help/ru_RU/host.dita
+++ b/ui/pages/help/ru_RU/host.dita
@@ -16,13 +16,13 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<li><uicontrol>Перезапустить</uicontrol> - перезапустить систему хоста.</li>
<li><uicontrol>Подключиться</uicontrol> - открыть соединение VNC с системой хоста, если оно еще не установлено.</li>
</ul></p>
-<p>Щелкните на следующих разделах для просмотра информации о хосте:<dl>
-<dlentry>
+<p>Щелкните на следующих разделах для просмотра информации о хосте:</p>
+<dl><dlentry>
<dt>Базовая информация</dt>
-<dd>В этом разделе показывается вариант операционной системы, его версия и кодовое имя, а также тип процессора и объем памяти в ГБ.</dd>
+<dd>В этом разделе показывается вариант операционной системы, его версия и кодовое имя, а также тип процессора, число подключенных процессоров и объем памяти в ГБ.</dd>
</dlentry><dlentry>
<dt>Системная статистика</dt>
-<dd>В этом разделе показываются графики, отражающие статистическую информацию о процессоре, памяти, дисковом вводе-выводе и сетевом вводе-выводе для хоста. Выберите <uicontrol>Сбор данных после закрытия этой страницы</uicontrol>, чтобы сбор данных продолжался после закрытия вкладки Хост.</dd>
+<dd>В этом разделе показываются графики, отражающие статистическую информацию о процессоре, памяти, дисковом вводе-выводе и сетевом вводе-выводе для хоста. </dd>
</dlentry><dlentry>
<dt>Обновления программного обеспечения</dt>
<dd>В этом разделе показывается информация обо всех пакетах, для которых доступны обновления, включая имя пакета, версию, архитектуру и хранилище. Можно обновить все пакеты в списке щелчком на <uicontrol>Обновить все</uicontrol>. Отдельные пакеты для обновления выбрать нельзя.</dd>
@@ -30,19 +30,19 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<dt>Хранилища</dt>
<dd>В этом разделе показываются хранилища, связанные с системой хоста. Хранилища можно добавлять, активировать, изменять и удалять. При добавлении хранилище связывается с системой хоста, при активации хранилище становится доступным для хоста. Если система - Red Hat Enterprise Linux или Fedora, можно добавить хранилища <filepath>yum</filepath>.
Если система - Ubuntu или Debian, добавьте хранилища <filepath>deb</filepath>.<p>При работе с хранилищами yum можно добавить проверку GPG для проверки целостности пакетов из данного хранилища.
-Выберите хранилище и щелкните на <uicontrol>Изменить</uicontrol>. Выберите <uicontrol>Да</uicontrol>, чтобы включить проверку GPG, и введите URL файла ключей GPG для хранилища.</p></dd>
+Выберите хранилище и щелкните на <uicontrol>Изменить</uicontrol>. Выберите <uicontrol>Да</uicontrol>, чтобы включить <uicontrol>Проверку GPG</uicontrol>, и введите URL файла ключей GPG для хранилища.</p></dd>
</dlentry><dlentry>
<dt>Отладочные отчеты</dt>
<dd>В этом разделе показываются отладочные отчеты, включая имя и путь.
Доступны команды для создания, переименования, удаления и загрузки отчетов.<p>Отладочный отчет создается командой <cmdname>sosreport</cmdname>. Он доступен для Red
Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>, Fedora и Ubuntu. Команда создает файл .tar с конфигурационной и диагностической информацией, такой как версия ядра, загруженные модули и файлы конфигурации системы и служб.
Команда также выполняет внешние программы для сбора дополнительной информации и сохраняет их вывод в результирующем архиве.</p> </dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
<?tm 1392659967 1?>
</cshelp>
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42248_4 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/ru_RU/network.dita b/ui/pages/help/ru_RU/network.dita
index 9cdcdd1..b92ecd2 100644
--- a/ui/pages/help/ru_RU/network.dita
+++ b/ui/pages/help/ru_RU/network.dita
@@ -31,7 +31,7 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<li rev="rev1"><uicontrol>Запустить</uicontrol> - открыть сетевое соединение.</li>
<li><uicontrol>Остановить</uicontrol> - закрыть сетевое соединение.</li>
<li><uicontrol>Удалить</uicontrol> - удалить информацию о соединении.</li>
-</ul>Для создания сети щелкните на значке <uicontrol>плюса (+)</uicontrol> в правом верхнем углу страницы.</p>
+</ul>Для создания сети щелкните на значке <uicontrol>плюса (+)</uicontrol>.</p>
</csbody>
<cshelp id="kimhnetwcrt" xml:lang="ru-ru">
<title>Создание сети</title>
@@ -56,6 +56,6 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</cshelp>
-<!-- ENGL1SH_VERS10N 47050_3 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42005_3 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 230 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/ru_RU/storage.dita b/ui/pages/help/ru_RU/storage.dita
index fa37edc..1e3dee1 100644
--- a/ui/pages/help/ru_RU/storage.dita
+++ b/ui/pages/help/ru_RU/storage.dita
@@ -9,13 +9,15 @@ For support please see:
https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<cshelp id="kimhstor" xml:lang="ru-ru">
<title>Дисковая память</title>
-<shortdesc>На странице <wintitle>Дисковая память</wintitle> показывается список доступных пулов памяти, включая пулы памяти 'по умолчанию' и 'ISO'.
-Если вы хотите использовать собственный ISO, добавьте его в путь дисковой памяти 'ISO'.</shortdesc>
+<shortdesc>На странице <wintitle>Дисковая память</wintitle> показывается список доступных пулов памяти, включая пулы памяти 'по умолчанию' и 'ISO'. Для использования собственного ISO добавьте его в путь к пулу памяти 'ISO'.</shortdesc>
<csbody>
<p>Для каждого пула памяти показывается следующая информация:<dl>
<dlentry>
<dt>Имя</dt>
-<dd>Имя пула памяти и процент использования.</dd>
+<dd>Имя пула памяти.</dd>
+</dlentry><dlentry>
+<dt>% занято</dt>
+<dd>Процент занятого места в пуле памяти.</dd>
</dlentry><dlentry>
<dt>Состояние</dt>
<dd>Состояние пула памяти - активный (зеленый) или неактивный (красный). </dd>
@@ -30,26 +32,15 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<dd>Объем пула памяти.</dd>
</dlentry><dlentry>
<dt>Выделено</dt>
-<dd>Объем выделенной памяти в пуле.</dd>
+<dd>Объем выделенной памяти в пуле памяти.</dd>
</dlentry></dl></p>
<p>Для каждого пула памяти можно выбирать следующие действия:<ul>
<li><uicontrol>Активировать</uicontrol> - активировать пул памяти, чтобы его можно было использовать.</li>
<li><uicontrol>Деактивировать</uicontrol> - деактивировать активный пул памяти.</li>
+<li>Выберите <uicontrol>Добавить том</uicontrol>, чтобы добавить дополнительный том в активный пул памяти. </li>
<li><uicontrol>Удалить</uicontrol> - удалить неактивный пул памяти.</li>
</ul></p>
-<p>Для просмотра сведений о томах пула памяти щелкните на стрелке в правой части строки пула памяти. Сведения включают:<dl><dlentry>
-<dt>Тип</dt>
-<dd>Тип тома, например <uicontrol>файл</uicontrol>.</dd>
-</dlentry><dlentry>
-<dt>Формат</dt>
-<dd>Формат (зависит от типа).</dd>
-</dlentry><dlentry>
-<dt>Емкость</dt>
-<dd>Размер тома.</dd>
-</dlentry><dlentry>
-<dt>Выделение</dt>
-<dd>Объем выделенной памяти в пуле.</dd>
-</dlentry></dl>Для создания пула памяти щелкните на значке <uicontrol>плюса (+)</uicontrol> в правом верхнем углу страницы.</p>
+<p>Для просмотра сведений о томах пула памяти щелкните на стрелке в правой части строки пула памяти. Для того чтобы создать пул памяти, щелкните на значке <uicontrol>плюса (+)</uicontrol>.</p>
</csbody>
<cshelp id="kimhdefstor" xml:lang="ru-ru">
<title>Создание пула памяти</title>
@@ -76,13 +67,27 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<dt><uicontrol>SCSI Fibre Channel</uicontrol></dt>
<dd>Задает пул на основе SCSI Fibre Channel. Выберите адаптер SCSI.</dd>
</dlentry></dl></li>
+<li>Укажите путь к пулу памяти. Путь к пулу памяти указывает на место в файловой системе, куда отображен пул памяти. Путь должен быть уникальным. Если каталог не существует в момент создания пула, он будет создан автоматически.</li>
<li>Щелкните на <uicontrol>Создать</uicontrol>.</li>
</ol> </p>
</csbody>
</cshelp>
+<cshelp id="kimhdefstor" xml:lang="ru-ru">
+<title>Добавление тома</title>
+<shortdesc>Добавление тома в пул памяти.</shortdesc>
+<csbody>
+<dl><dlentry>
+<dt>Загрузить с удаленного URL</dt>
+<dd>Указывает, откуда следует загрузить том. Пример: <filepath>https://my-server/fedora22.img</filepath>.</dd>
+</dlentry><dlentry>
+<dt>Передать файл</dt>
+<dd>Задает место в локальной системе.</dd>
+</dlentry></dl>
+</csbody>
+</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 22336_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 52145_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 233 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/ru_RU/templates.dita b/ui/pages/help/ru_RU/templates.dita
index 27ce4ae..36bc90b 100644
--- a/ui/pages/help/ru_RU/templates.dita
+++ b/ui/pages/help/ru_RU/templates.dita
@@ -11,8 +11,8 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<title>Шаблоны</title>
<shortdesc>На странице <wintitle>Шаблоны</wintitle> показываются созданные шаблоны виртуальных машин, которые можно использовать для создания гостевых систем KVM.</shortdesc>
<csbody>
-<p>Для каждого шаблона показывается следующая информация:<dl>
-<dlentry>
+<p>Для каждого шаблона показывается следующая информация:</p>
+<dl><dlentry>
<dt>ОС</dt>
<dd>Имя операционной системы или варианта операционной системы.</dd>
</dlentry><dlentry>
@@ -24,66 +24,59 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</dlentry><dlentry>
<dt>Память</dt>
<dd>Выделяемый объем оперативной памяти в МБ.</dd>
-</dlentry></dl></p>
-<p>Для каждого шаблона можно выбирать следующие действия:<ul>
+</dlentry></dl>
+<p>Для каждого шаблона можно выбирать следующие действия:</p>
+<ul>
<li><uicontrol>Изменить</uicontrol> - изменить шаблон.</li>
+<li>Выберите <uicontrol>Дублировать</uicontrol>, чтобы скопировать шаблон.</li>
<li><uicontrol>Удалить</uicontrol> - удалить шаблон.</li>
-</ul>Для добавления шаблона щелкните на значке <uicontrol>плюса (+)</uicontrol> в правом верхнем углу страницы.</p>
+</ul>
+<p>Для создания шаблона щелкните на значке <uicontrol>плюса (+)</uicontrol>.</p>
</csbody>
<cshelp id="kimhedittempl" xml:lang="ru-ru">
<title>Изменить шаблон</title>
<shortdesc>Изменить существующий шаблон.</shortdesc>
<csbody>
-<p>Для каждого шаблона показывается следующая информация: <dl>
-<dlentry>
-<dt>Имя</dt>
-<dd>Имя шаблона.</dd>
+<p>Для каждого шаблона показывается следующая информация: </p>
+<dl><dlentry>
+<dt>Общие</dt>
+<dd>Информация об имени, варианте ОС от вендора, версии, памяти, пути к файлу ISO и графических параметрах.</dd>
</dlentry><dlentry>
-<dt>Вендор</dt>
-<dd>Имя компании, создавшей операционную систему или вариант операционной системы, для использования которых настраивается шаблон.</dd>
+<dt>Дисковая память</dt>
+<dd>Параметры пула памяти для шаблона.</dd>
</dlentry><dlentry>
-<dt>Версия</dt>
-<dd>Версия операционной системы или варианта операционной системы, для использования которых настраивается шаблон.</dd>
-</dlentry><dlentry>
-<dt>Количество процессоров</dt>
-<dd>Количество процессоров для шаблона.</dd>
-</dlentry><dlentry>
-<dt>Память</dt>
-<dd>Объем памяти в МБ, выделяемый виртуальной машине.</dd>
+<dt>Интерфейс</dt>
+<dd>Сетевые интерфейсы по умолчанию, доступные гостевой системе KVM. Можно выбрать несколько сетей.</dd>
</dlentry><dlentry>
-<dt>Диск</dt>
-<dd>Размер диска в ГБ.</dd>
-</dlentry><dlentry>
-<dt>CDROM</dt>
-<dd>Путь к файлу ISO для установки гостевой системы KVM.</dd>
-</dlentry><dlentry>
-<dt>Пул памяти</dt>
-<dd>Определенный пул памяти или пул памяти по умолчанию.</dd>
-</dlentry><dlentry>
-<dt>Сеть</dt>
-<dd>Сетевые интерфейсы по умолчанию, доступные для гостевой системы KVM. Можно выбрать несколько сетей.</dd>
-</dlentry></dl> Активные поля можно изменять. После изменения поля щелкните на <uicontrol>Сохранить</uicontrol>. </p>
+<dt>Процессор</dt>
+<dd>В поле <uicontrol>Количество процессоров</uicontrol> укажите число процессоров для шаблона.</dd>
+<dd>Здесь можно вручную настроить топологию процессоров для каждой гостевой системы.</dd>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddtempl">
<title>Добавление шаблона</title>
-<shortdesc>Добавление шаблона с исходного носителя. Добавьте собственный образ ISO в дисковую память ISO для дальнейшего поиска.</shortdesc>
+<shortdesc>Добавление шаблона с исходного носителя. Добавьте собственный образ ISO в пул памяти ISO для дальнейшего поиска.</shortdesc>
<csbody>
-<p>Выберите один из следующих вариантов расположения исходного носителя:<dl>
-<dlentry>
+<p>Выберите один из следующих вариантов расположения исходного носителя:</p>
+<dl><dlentry>
<dt>Локальный образ ISO</dt>
<dd>Выберите этот вариант для поиска установочных образов ISO в локальных пулах памяти системы.</dd>
</dlentry><dlentry>
+<dt>Локальный файл образа</dt>
+<dd>Здесь можно указать путь к локальному файлу образа.</dd>
+</dlentry><dlentry>
<dt>Удаленный образ ISO</dt>
<dd>Выберите этот вариант, чтобы указать удаленное расположение установочного образа ISO.</dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddloct">
-<title>Добавление шаблона (локальный образ ISO)</title>
-<shortdesc>Добавление шаблона из локального образа ISO.</shortdesc>
+<title>Добавление шаблона (образ ISO)</title>
+<shortdesc>Добавление шаблона из образа ISO.</shortdesc>
<csbody>
-<p>Будут показаны образы ISO, доступные в системе.<dl><dlentry>
+<p>Будут показаны образы ISO, доступные в системе удаленно.</p>
+<dl><dlentry>
<dt>ОС</dt>
<dd>Имя операционной системы или варианта операционной системы.</dd>
</dlentry><dlentry>
@@ -92,20 +85,21 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</dlentry><dlentry>
<dt>Размер</dt>
<dd>Размер образа ISO.</dd>
-</dlentry></dl></p>
-<p>Для создания шаблона из образа ISO выберите один из следующих вариантов:<ul>
+</dlentry></dl>
+<p>Для создания шаблона из образа ISO выберите один из следующих вариантов:</p>
+<ul>
<li>Выберите образ ISO, из которого нужно создать шаблон, затем щелкните на <uicontrol>Создать шаблоны из выбранных образов ISO</uicontrol>.</li>
<li>Выберите <uicontrol>Все</uicontrol>, чтобы создать шаблон из каждого образа ISO в списке, затем щелкните на <uicontrol>Создать шаблоны из выбранных образов ISO</uicontrol>.</li>
<li>Если требуемый образ ISO отсутствует в результатах поиска, выберите один из следующих вариантов:<ul>
<li>Выберите <uicontrol>Использовать конкретный файл ISO</uicontrol>, чтобы указать путь к образу ISO.</li>
<li>Щелкните на <uicontrol>Поиск дополнительных образов ISO</uicontrol> для поиска дополнительных образов ISO.</li>
</ul></li>
-</ul></p>
+</ul>
</csbody>
</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 61085_5 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 24458_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 229 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/zh_CN/guests.dita b/ui/pages/help/zh_CN/guests.dita
index d684af2..ee33e47 100644
--- a/ui/pages/help/zh_CN/guests.dita
+++ b/ui/pages/help/zh_CN/guests.dita
@@ -9,21 +9,21 @@ For support please see:
https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<cshelp id="kimhvirtm" xml:lang="zh-cn">
<title>访客</title>
-<shortdesc>“<wintitle>访客</wintitle>”页面列示已定义的 KVM 虚拟机。</shortdesc>
+<shortdesc>“<wintitle>访客</wintitle>”页面列示已为服务器定义的访客。</shortdesc>
<csbody>
<p>对于每个访客,会显示以下信息:<dl><dlentry>
<dt>名称</dt>
-<dd>虚拟机的名称。</dd>
+<dd>访客的名称。</dd>
</dlentry><dlentry>
<dt>CPU</dt>
-<dd>虚拟机中处理器使用百分比。</dd>
-</dlentry><dlentry>
-<dt>网络 I/O</dt>
-<dd>网络输入/输出传输速度(按 KB/秒计)。</dd>
+<dd>访客中的处理器使用百分比。</dd>
</dlentry><dlentry>
<dt>磁盘 I/O</dt>
<dd>磁盘输入/输出传输速度(按 KB/秒计)。</dd>
</dlentry><dlentry>
+<dt>网络 I/O</dt>
+<dd>网络输入/输出传输速度(按 KB/秒计)。</dd>
+</dlentry><dlentry>
<dt>Livetile</dt>
<dd>访客处于非活动状态时,访客操作系统控制台的状态,或者表示 <tm tmtype="tm" trademark="Linux">Linux</tm> 分发版的图标。</dd>
</dlentry></dl></p>
@@ -37,82 +37,78 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</dlentry></dl> </p>
<p>可为每个访客选择以下操作:<ul>
<li>选择<uicontrol>连接</uicontrol>以连接到访客操作系统的远程控制台。</li>
-<li>选择<uicontrol>管理介质</uicontrol>以更改安装介质的路径。</li>
-<li>选择<uicontrol>重置</uicontrol>以重置访客。</li>
+<li>选择<uicontrol>克隆</uicontrol>以复制现有访客定义来创建访客。</li>
+<li>选择<uicontrol>重置</uicontrol>以重置访客。您只能重置已启动的访客。</li>
<li>选择<uicontrol>编辑</uicontrol>以编辑现有访客的属性。仅当停止时才可编辑访客。</li>
+<li>选择<uicontrol>启动</uicontrol>以启动访客。</li>
+<li>选择<uicontrol>关闭</uicontrol>以正常关闭访客。</li>
+<li>选择<uicontrol>关闭电源</uicontrol>以强制立即关闭访客。</li>
<li>选择<uicontrol>删除</uicontrol>以删除访客。</li>
-</ul>要创建访客或虚拟机,请单击页面右上方的<uicontrol>加号键 (+) </uicontrol> 图标。</p>
+</ul>要创建访客,请单击页面上的<uicontrol>加号 (+)</uicontrol> 图标。</p>
</csbody>
<cshelp id="kimhvirtmcrt" xml:lang="zh-cn">
-<title>创建虚拟机</title>
-<shortdesc>通过使用现有模板创建虚拟机。</shortdesc>
+<title>创建访客</title>
+<shortdesc>通过使用现有模板来创建访客。</shortdesc>
<csbody>
<p> <ol>
-<li>输入用于标识虚拟机的名称。</li>
-<li rev="rev1">选择模板。<ul>
-<li>如果模板已存在,请从所显示的的模板中选择。</li>
+<li>输入用于标识访客的名称。</li>
+<li>选择模板。<ul>
+<li>如果模板已存在,请从所显示的模板中选择。</li>
<li>如果不存在任何模板,请单击<uicontrol>创建模板</uicontrol>以创建模板。</li>
-</ul></li>
+</ul>可以通过将鼠标指针悬浮在模板上来查看有关该模板的信息。</li>
<li>单击<uicontrol>创建</uicontrol>。</li>
</ol> </p>
</csbody>
</cshelp>
<cshelp id="kimhvirtmedit" xml:lang="zh-cn">
<title>编辑访客</title>
-<shortdesc>编辑现有虚拟机的属性。一些属性只能在访客已停止的情况下编辑。其他属性将在下一次引导时生效。</shortdesc>
-<csprolog><csmetadata></csmetadata></csprolog>
+<shortdesc>编辑现有访客的属性。一些属性只能在访客已停止的情况下编辑。其他属性将在下一次引导时生效。</shortdesc>
<csbody>
-<p>对于每个访客,会在“<wintitle>常规</wintitle>”选项卡中显示以下信息:<dl>
-<dlentry>
-<dt>名称</dt>
-<dd>虚拟机的名称。(只能在访客已停止的情况下编辑)</dd>
-</dlentry><dlentry>
-<dt>CPU 数</dt>
-<dd>处理器的数目。(如果访客正在运行,新数量将在下一次引导时生效)</dd>
-</dlentry><dlentry>
-<dt>内存</dt>
-<dd>内存量(以 MB 计)。(如果访客正在运行,新数量将在下一次引导时生效)</dd>
-</dlentry><dlentry>
-<dt>图标</dt>
-<dd>访客处于非活动状态时,表示要显示的 Linux 分发版而不是当前状态 (Livetile) 的图形图像。</dd>
-</dlentry></dl></p>
-<p>会在“<wintitle>存储器</wintitle>”选项卡中显示以下信息。</p>
<dl><dlentry>
+<dt>常规</dt>
+<dd>显示有关访客的信息,其中包括要用于访客的名称、CPU、内存和图标。您可以编辑已停止访客的名称。对 CPU
+和内存的更改将在下次引导后生效。</dd>
+</dlentry><dlentry>
<dt>存储器</dt>
-<dd>显示用于安装的 ISO 文件所在的位置。</dd>
+<dd>显示所选访客的存储器的设备和路径。您可以添加、编辑和移除访客的存储设备。</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>接口</dt>
+<dd>显示访客的网络信息,其中包括名称、类型和 MAC 地址。您可以添加、编辑和移除访客的接口。</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>许可权</dt>
+<dd>显示访客有权使用的用户和组。</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>主机 PCI 设备</dt>
+<dd>显示主机上所有可用 PCI 设备的列表。</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>快照</dt>
+<dd>显示访客的快照。您可以创建、编辑或删除快照。通过选择快照并选择还原,会将访客复原到过去的某个时间点(由快照数据确定),并且将废弃该时间点之后作出的所有更改。</dd>
</dlentry></dl>
<p> 可对未禁用的字段进行编辑。编辑字段之后,请单击<uicontrol>保存</uicontrol>。</p>
</csbody>
</cshelp>
-<cshelp id="kimstoragedevice" xml:lang="zh-cn">
-<title>添加、替换或拆离存储设备</title>
-<shortdesc rev="rev1">您可以对虚拟机添加、替换或拆离存储设备。唯一受支持的设备为 CDROM。要编辑存储设备,请遵循以下步骤:</shortdesc>
+<cshelp id="kimhvirtmclone" xml:lang="zh-cn">
+<title>对访客进行克隆</title>
+<shortdesc>通过对访客进行克隆,可以创建访客的副本。</shortdesc>
<csbody>
+<p>要对访客进行克隆,请执行以下操作:</p>
<ol>
-<li>在“<wintitle>编辑访客</wintitle>”窗口中,选择“<wintitle>存储器</wintitle>”。</li>
-<li>要替换存储设备,请单击第一个图标,带有<uicontrol>橙色斜杠 (/)</uicontrol>。输入 ISO 文件路径并单击<uicontrol>替换</uicontrol>。</li>
-<li>要拆离存储设备,请单击第二个图标,带有<uicontrol>红色短划线 (-)</uicontrol>。确认删除操作,然后单击<uicontrol>确定</uicontrol>。</li>
-<li>要添加存储设备,请单击第三个图标,带有<uicontrol>绿色加号键 (+)</uicontrol>。输入设备名和 ISO 文件路径并单击<uicontrol>拆离</uicontrol>。</li>
-</ol>
-</csbody>
-</cshelp>
-<cshelp id="kimreplacemedia" xml:lang="zh-cn">
-<title>替换 VM 的 CDROM</title>
-<shortdesc rev="rev1">安装完成之后,您可以替换虚拟机的 CDROM 的内容。</shortdesc>
-<csbody>
-<ol>
-<li>请确保已启动虚拟机。</li>
-<li>从“操作”菜单中,选择<uicontrol>管理介质</uicontrol>。</li>
-<li>要更改当前装入到 CDROM 中的内容,请单击 hdc 字段旁边的<uicontrol>橙色斜杠 (/)</uicontrol> 图标。</li>
-<li>在“<wintitle>替换 VM 的 CDROM</wintitle>”页面中,输入 ISO 文件路径。另外两个字段为只读。</li>
-<li>单击<uicontrol>替换</uicontrol>。</li>
+<li>从访客的“操作”菜单中选择<uicontrol>克隆</uicontrol>。</li>
+<li>接受警告。<note>如果目标访客正在使用 SCSI 或
+iSCSI 卷,或者目标池不具有足够的空间,那么将在缺省存储池中创建克隆。</note></li>
</ol>
+<p>访客将显示在列表中并具有标签<uicontrol>正在克隆...</uicontrol>,完成该过程后,克隆的访客可供使用。</p>
+
</csbody>
</cshelp>
<?tm 1391540919 3?>
</cshelp>
-<!-- ENGL1SH_VERS10N 45645_6 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 04963_6 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 231 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/zh_CN/host.dita b/ui/pages/help/zh_CN/host.dita
index 78a89c3..a8622a2 100644
--- a/ui/pages/help/zh_CN/host.dita
+++ b/ui/pages/help/zh_CN/host.dita
@@ -16,30 +16,30 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<li>选择<uicontrol>重新启动</uicontrol>以重新启动主机系统。</li>
<li>选择<uicontrol>连接</uicontrol>以打开与主机系统的 VNC 连接(如果尚未连接)。</li>
</ul></p>
-<p>单击以下部分以显示有关主机的信息:<dl>
-<dlentry>
+<p>单击以下部分以显示有关主机的信息:</p>
+<dl><dlentry>
<dt>基本信息</dt>
-<dd>本部分显示主机操作系统分发版、版本和代码名称以及处理器类型和内存量(以 GB 计)。</dd>
+<dd>本部分显示主机操作系统分发版、版本和代码名称以及处理器类型、联机 CPU 的数目和内存量(以 GB 计)。</dd>
</dlentry><dlentry>
<dt>系统统计信息</dt>
-<dd>本部分显示图形,以显示主机有关 CPU、内存、磁盘 I/O 和网络 I/O 的统计信息。选择<uicontrol>离开此页面之后收集数据</uicontrol>以继续在主机选项卡不在视图中时收集数据。</dd>
+<dd>本部分显示图形,以显示主机有关 CPU、内存、磁盘 I/O 和网络 I/O 的统计信息。</dd>
</dlentry><dlentry>
<dt>软件更新</dt>
<dd>本部分显示有更新可用的所有软件包的信息,其中包括软件包名称、版本、体系结构和存储库。可通过选择<uicontrol>全部更新</uicontrol>来更新所列示的所有软件包。不能针对更新选择各个软件包。</dd>
</dlentry><dlentry>
<dt>存储库</dt>
-<dd>本部分显示与主机系统关联的存储库。您可以添加、启用、编辑或除去存储库。当启用存储库会允许主机对其进行访问时,添加存储库会将其与主机系统关联。如果您的系统为 Red Hat Enterprise Linux 或 Fedora,那么可添加 <filepath>yum</filepath> 存储库。如果您的系统为 Ubuntu 或 Debian,那么请添加 <filepath>deb</filepath> 存储库。<p>如果要处理 Yum 存储库,您可以添加 GPG 检查以验证此存储库中的软件包是否已损坏。选择一个存储库,然后选择<uicontrol>编辑</uicontrol>。选择<uicontrol>是</uicontrol>以启用 GPG 检查,然后输入存储库中 GPG 密钥文件的 URL。</p></dd>
+<dd>本部分显示与主机系统关联的存储库。您可以添加、启用、编辑或除去存储库。当启用存储库会允许主机对其进行访问时,添加存储库会将其与主机系统关联。如果您的系统为 Red Hat Enterprise Linux 或 Fedora,那么可添加 <filepath>yum</filepath> 存储库。如果您的系统为 Ubuntu 或 Debian,那么请添加 <filepath>deb</filepath> 存储库。<p>如果要处理 Yum 存储库,您可以添加 GPG 检查以验证此存储库中的软件包是否已损坏。选择一个存储库,然后选择<uicontrol>编辑</uicontrol>。选择<uicontrol>是</uicontrol>以启用 <uicontrol>GPG 检查</uicontrol>,然后输入存储库的 GPG 密钥文件的 URL。</p></dd>
</dlentry><dlentry>
<dt>调试报告</dt>
<dd>本部分显示调试报告,其中包括名称和文件路径。您可以从选项中进行选择以生成新报告,或者对现有报告进行重命名、除去或下载。<p>调试报告将使用
<cmdname>sosreport</cmdname> 命令生成。该报告可用于 Red
Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>、Fedora 和 Ubuntu 分发版。该命令将生成包含配置和诊断信息的 .tar 文件,例如,正在运行的内核版本、已装入的模块以及系统和服务配置文件。该命令还会运行外部程序以收集更多信息并将此输出存储在生成的归档中。</p> </dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
<?tm 1392659967 1?>
</cshelp>
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42248_4 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/zh_CN/network.dita b/ui/pages/help/zh_CN/network.dita
index f6aa532..aa99988 100644
--- a/ui/pages/help/zh_CN/network.dita
+++ b/ui/pages/help/zh_CN/network.dita
@@ -31,7 +31,7 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<li rev="rev1">选择<uicontrol>开始</uicontrol>以开始网络连接。</li>
<li>选择<uicontrol>停止</uicontrol>以结束网络连接。</li>
<li>选择<uicontrol>删除</uicontrol>以删除连接信息。</li>
-</ul>要创建网络,请单击显示屏右上方的<uicontrol>加号键 (+)</uicontrol> 图标。</p>
+</ul>要创建网络,请单击<uicontrol>加号 (+)</uicontrol> 图标。</p>
</csbody>
<cshelp id="kimhnetwcrt" xml:lang="zh-cn">
<title>创建网络</title>
@@ -56,6 +56,6 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</cshelp>
-<!-- ENGL1SH_VERS10N 47050_3 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42005_3 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 230 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/zh_CN/storage.dita b/ui/pages/help/zh_CN/storage.dita
index cfb09f5..e49dac4 100644
--- a/ui/pages/help/zh_CN/storage.dita
+++ b/ui/pages/help/zh_CN/storage.dita
@@ -14,7 +14,10 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<p>对于每个存储池,会显示以下信息:<dl>
<dlentry>
<dt>名称</dt>
-<dd>存储池的名称以及使用百分比。</dd>
+<dd>存储池的名称。</dd>
+</dlentry><dlentry>
+<dt>已用百分比</dt>
+<dd>正在使用的存储池的百分比。</dd>
</dlentry><dlentry>
<dt>状态</dt>
<dd>存储池的状态,活动(绿色)或非活动(红色)。</dd>
@@ -34,21 +37,10 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<p>可为每个存储池选择以下操作:<ul>
<li>选择<uicontrol>激活</uicontrol>以激活存储池以使其可使用。</li>
<li>选择<uicontrol>取消激活</uicontrol>以取消激活活动存储池。</li>
+<li>选择<uicontrol>添加卷</uicontrol>以将更多卷添加至活动存储池。</li>
<li>选择<uicontrol>取消定义</uicontrol>以除去非活动存储池。</li>
</ul></p>
-<p>要显示存储池的存储卷详细信息,请单击存储池行右端的箭头。详细信息包括以下内容:<dl><dlentry>
-<dt>类型</dt>
-<dd>卷的类型,例如,<uicontrol>文件</uicontrol>。</dd>
-</dlentry><dlentry>
-<dt>格式</dt>
-<dd>格式因类型而有所不同。</dd>
-</dlentry><dlentry>
-<dt>容量</dt>
-<dd>存储卷的大小。</dd>
-</dlentry><dlentry>
-<dt>分配</dt>
-<dd>存储池中已分配的空间量。</dd>
-</dlentry></dl>要定义存储池,请单击显示屏右上方的<uicontrol>加号键 (+)</uicontrol> 图标。</p>
+<p>要显示存储池的存储卷详细信息,请单击存储池行右端的箭头。要定义存储池,请单击<uicontrol>加号 (+)</uicontrol> 图标。</p>
</csbody>
<cshelp id="kimhdefstor" xml:lang="zh-cn">
<title>定义存储池</title>
@@ -72,13 +64,28 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<dt><uicontrol>SCSI 光纤通道</uicontrol></dt>
<dd>根据 SCSI 光纤通道指定池。选择要使用的 SCSI 适配器。</dd>
</dlentry></dl></li>
+<li>指定存储池的存储路径。存储路径是本地文件系统中该池所映射到的位置。该路径必须唯一。如果创建该池时此目录不存在,那么系统将为您创建此目录。
+</li>
<li>单击<uicontrol>创建</uicontrol>。</li>
</ol> </p>
</csbody>
</cshelp>
+<cshelp id="kimhdefstor" xml:lang="zh-cn">
+<title>添加卷</title>
+<shortdesc>将卷添加至存储池。</shortdesc>
+<csbody>
+<dl><dlentry>
+<dt>从远程 URL 中访存</dt>
+<dd>指定要从中下载卷的位置。例如:<filepath>https://my-server/fedora22.img</filepath>。</dd>
+</dlentry><dlentry>
+<dt>上载文件</dt>
+<dd>指定本地系统上的位置。</dd>
+</dlentry></dl>
+</csbody>
+</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 22336_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 52145_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 233 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/zh_CN/templates.dita b/ui/pages/help/zh_CN/templates.dita
index ca50119..919cd5b 100644
--- a/ui/pages/help/zh_CN/templates.dita
+++ b/ui/pages/help/zh_CN/templates.dita
@@ -11,8 +11,8 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<title>模板</title>
<shortdesc>“<wintitle>模板</wintitle>”页面显示可用于创建 KVM 访客的已定义虚拟机模板。</shortdesc>
<csbody>
-<p>对于每个模板,会显示以下信息:<dl>
-<dlentry>
+<p>对于每个模板,会显示以下信息:</p>
+<dl><dlentry>
<dt>操作系统</dt>
<dd>操作系统或分发版的名称。</dd>
</dlentry><dlentry>
@@ -24,66 +24,59 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</dlentry><dlentry>
<dt>内存</dt>
<dd>要分配的随机存取存储量(以 MB 计)。</dd>
-</dlentry></dl></p>
-<p>可为每个模板选择以下操作:<ul>
+</dlentry></dl>
+<p>可为每个模板选择以下操作:</p>
+<ul>
<li>选择<uicontrol>编辑</uicontrol>以编辑模板。</li>
+<li>选择<uicontrol>克隆</uicontrol>以复制模板。</li>
<li>选择<uicontrol>删除</uicontrol>以删除模板。</li>
-</ul>要添加模板,请单击显示屏右上方的<uicontrol>加号键 (+)</uicontrol> 图标。</p>
+</ul>
+<p>要添加模板,请单击<uicontrol>加号 (+)</uicontrol> 图标。</p>
</csbody>
<cshelp id="kimhedittempl" xml:lang="zh-cn">
<title>编辑模板</title>
<shortdesc>编辑现有模板。</shortdesc>
<csbody>
-<p>对于每个模板,会显示以下信息:<dl>
-<dlentry>
-<dt>名称</dt>
-<dd>模板的名称。</dd>
+<p>对于每个模板,会显示以下信息:</p>
+<dl><dlentry>
+<dt>常规</dt>
+<dd>显示名称、供应商分发版、版本、内存、ISO 文件的文件路径以及图形首选项。</dd>
</dlentry><dlentry>
-<dt>供应商</dt>
-<dd>公司名称,该公司创建了模板已配置使用的操作系统或分发版。</dd>
+<dt>存储器</dt>
+<dd>指定模板的存储池信息。</dd>
</dlentry><dlentry>
-<dt>版本</dt>
-<dd>模板已配置使用的操作系统或分发版的版本。</dd>
-</dlentry><dlentry>
-<dt>CPU 数量</dt>
-<dd>为模板定义的处理器数。</dd>
-</dlentry><dlentry>
-<dt>内存</dt>
-<dd>要分配给虚拟机的内存量(以 MB 计)。</dd>
+<dt>接口</dt>
+<dd>显示可供 KVM 访客使用的缺省网络接口。您可以选择多个网络。</dd>
</dlentry><dlentry>
-<dt>磁盘</dt>
-<dd>磁盘大小(以 GB 计)。</dd>
-</dlentry><dlentry>
-<dt>CDROM</dt>
-<dd>用于安装 KVM 访客的 ISO 文件所在位置的文件路径。</dd>
-</dlentry><dlentry>
-<dt>存储池</dt>
-<dd>特定存储池或缺省存储池。</dd>
-</dlentry><dlentry>
-<dt>网络</dt>
-<dd>可供 KVM 访客使用的缺省网络接口。您可以选择多个网络。</dd>
-</dlentry></dl> 可对未禁用的字段进行编辑。编辑字段之后,请单击<uicontrol>保存</uicontrol>。</p>
+<dt>处理器</dt>
+<dd>在 <uicontrol>CPU 数</uicontrol>字段中,指定已为模板定义的处理器数。</dd>
+<dd>选择此项以手动设置每个访客的 CPU 拓扑。</dd>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddtempl">
<title>添加模板</title>
<shortdesc>从源介质中添加模板。您可以将您自己的 ISO 映像添加至“ISO”存储池以用于后续发现。</shortdesc>
<csbody>
-<p>从以下选项选择源介质所在的位置:<dl>
-<dlentry>
+<p>从以下选项选择源介质所在的位置:</p>
+<dl><dlentry>
<dt>本地 ISO 映像</dt>
-<dd>选择此项以对系统上可用的安装 ISO 映像的存储池进行扫描。</dd>
+<dd>选择此项以对存储池进行扫描,从而获取系统上可用的安装 ISO 映像。</dd>
+</dlentry><dlentry>
+<dt>本地映像文件</dt>
+<dd>选择此项以指定本地映像文件的路径。</dd>
</dlentry><dlentry>
<dt>远程 ISO 映像</dt>
<dd>选择此项以指定安装 ISO 映像的远程位置。</dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddloct">
-<title>添加模板 - 本地 ISO 映像</title>
-<shortdesc>从本地 ISO 映像添加模板。</shortdesc>
+<title>添加模板 - ISO 映像</title>
+<shortdesc>从 ISO 映像中添加模板。</shortdesc>
<csbody>
-<p>会显示系统上可用的 ISO 映像。<dl><dlentry>
+<p>将显示系统上可以远程使用的 ISO 映像。</p>
+<dl><dlentry>
<dt>操作系统</dt>
<dd>操作系统或分发版的名称。</dd>
</dlentry><dlentry>
@@ -92,20 +85,21 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</dlentry><dlentry>
<dt>大小</dt>
<dd>ISO 映像的大小。</dd>
-</dlentry></dl></p>
-<p>要从 ISO 映像创建模板,请从以下选项中选择:<ul>
+</dlentry></dl>
+<p>要从 ISO 映像创建模板,请从以下选项中选择:</p>
+<ul>
<li>选择要从其创建模板的 ISO 映像,然后单击<uicontrol>从所选 ISO 创建模板</uicontrol>。</li>
<li>选择<uicontrol>全部</uicontrol>以从每个所列示的 ISO 映像创建模板,然后单击<uicontrol>从所选 ISO 创建模板</uicontrol>。</li>
-<li>如果您要使用的 ISO 映像未出现在扫描结果中,那么可从以下选项中选择:<ul>
+<li>如果要使用的 ISO 映像未显示在扫描结果中,那么可从以下选项中选择:<ul>
<li>选择<uicontrol>我要使用特定 ISO 文件</uicontrol>以指定 ISO 映像的路径。</li>
<li>单击<uicontrol>搜索更多 ISO</uicontrol> 以搜索更多 ISO 映像。</li>
</ul></li>
-</ul></p>
+</ul>
</csbody>
</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 61085_5 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 24458_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 229 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/zh_TW/guests.dita b/ui/pages/help/zh_TW/guests.dita
index cf73785..7807ecc 100644
--- a/ui/pages/help/zh_TW/guests.dita
+++ b/ui/pages/help/zh_TW/guests.dita
@@ -9,21 +9,21 @@ For support please see:
https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<cshelp id="kimhvirtm" xml:lang="zh-tw">
<title>客體</title>
-<shortdesc>「<wintitle>客體</wintitle>」頁面會列出已定義的 KVM 虛擬機器。</shortdesc>
+<shortdesc>「<wintitle>客體</wintitle>」頁面會列出為伺服器定義的客體。</shortdesc>
<csbody>
<p>對於每一個客體,將會顯示下列資訊:<dl><dlentry>
<dt>名稱</dt>
-<dd>虛擬機器的名稱。</dd>
+<dd>客體的名稱。</dd>
</dlentry><dlentry>
<dt>CPU</dt>
-<dd>虛擬機器上處理器使用率的百分比。</dd>
-</dlentry><dlentry>
-<dt>網路 I/O</dt>
-<dd>網路輸入/輸出傳輸速率 (KB/s)。</dd>
+<dd>客體中的處理器使用率百分比。</dd>
</dlentry><dlentry>
<dt>磁碟 I/O</dt>
<dd>磁碟輸入/輸出傳輸速率 (KB/s)。</dd>
</dlentry><dlentry>
+<dt>網路 I/O</dt>
+<dd>網路輸入/輸出傳輸速率 (KB/s)。</dd>
+</dlentry><dlentry>
<dt>Livetile</dt>
<dd>客體作業系統主控台的狀態,或是表示 <tm tmtype="tm" trademark="Linux">Linux</tm> 發行套件的圖示(如果客體未處於作用中狀態)。</dd>
</dlentry></dl></p>
@@ -37,84 +37,89 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</dlentry></dl> </p>
<p>可針對每一個客體選取下列動作:<ul>
<li>選取<uicontrol>連接</uicontrol>可連接至客體作業系統的遠端主控台。</li>
-<li>選取<uicontrol>管理媒體</uicontrol>可變更安裝媒體的路徑。</li>
-<li>選取<uicontrol>重設</uicontrol>可重設客體。</li>
+<li>選取<uicontrol>複製</uicontrol>可複製現有客體定義,來建立客體。
+</li>
+<li>選取<uicontrol>重設</uicontrol>可重設客體。您可以只重設已啟動的客體。
+</li>
<li>選取<uicontrol>編輯</uicontrol>可編輯現有客體的內容。僅在停止時,才能編輯客體。</li>
+<li>選取<uicontrol>啟動</uicontrol>以啟動客體</li>
+<li>選取<uicontrol>關閉</uicontrol>以循序關閉客體。</li>
+<li>選取<uicontrol>關閉電源</uicontrol>以強制立即關閉客體。
+</li>
<li>選取<uicontrol>刪除</uicontrol>可刪除客體。</li>
-</ul>若要建立客體或虛擬機器,請按一下顯示頁面右上方的<uicontrol>加號 (+)</uicontrol> 圖示。</p>
+</ul>如果要建立客體,請按一下頁面上的<uicontrol>加號 (+)</uicontrol> 圖示。
+</p>
</csbody>
<cshelp id="kimhvirtmcrt" xml:lang="zh-tw">
-<title>建立虛擬機器</title>
-<shortdesc>使用現有範本建立虛擬機器。</shortdesc>
+<title>建立客體</title>
+<shortdesc>使用現有範本來建立客體。</shortdesc>
<csbody>
<p> <ol>
-<li>輸入用來識別虛擬機器的名稱。</li>
-<li rev="rev1">選取範本。<ul>
+<li>鍵入要用於識別客體的名稱。</li>
+<li>選取範本。<ul>
<li>如果範本存在,請從顯示的範本中選取。</li>
<li>如果沒有範本,請按一下<uicontrol>建立範本</uicontrol>來建立範本。</li>
-</ul></li>
+</ul>您可以透過將游標移至範本上方,來檢視其相關資訊。</li>
<li>按一下<uicontrol>建立</uicontrol>。</li>
</ol> </p>
</csbody>
</cshelp>
<cshelp id="kimhvirtmedit" xml:lang="zh-tw">
<title>編輯客體</title>
-<shortdesc>編輯現有虛擬機器的內容。部分內容只能在客體停止時進行編輯。其他內容將在下一次啟動時生效。</shortdesc>
-<csprolog><csmetadata></csmetadata></csprolog>
+<shortdesc>編輯現有客體的內容。部分內容只能在客體停止時進行編輯。其他內容將在下一次啟動時生效。</shortdesc>
<csbody>
-<p>對於每一個客體,將會在「<wintitle>一般</wintitle>」標籤上顯示下列資訊:<dl>
-<dlentry>
-<dt>名稱</dt>
-<dd>虛擬機器的名稱。(只能在客體停止時進行編輯)</dd>
-</dlentry><dlentry>
-<dt>CPU</dt>
-<dd>處理器數目。(如果客體在執行中,則新數量將在下一次啟動時生效)</dd>
-</dlentry><dlentry>
-<dt>記憶體</dt>
-<dd>記憶體數量 (MB)。(如果客體在執行中,則新數量將在下一次啟動時生效)</dd>
-</dlentry><dlentry>
-<dt>圖示</dt>
-<dd>當客體不處於作用中狀態時,要取代現行狀態 (Livetile) 顯示的代表 Linux 發行套件的圖形影像。</dd>
-</dlentry></dl></p>
-<p>下列資訊會顯示在「<wintitle>儲存</wintitle>」標籤上。</p>
<dl><dlentry>
+<dt>一般</dt>
+<dd>顯示客體的相關資訊,其中包括用於客體的名稱、CPU、記憶體及圖示。
+您可以編輯已停止客體的名稱。
+變更 CPU 和記憶體會在下一次啟動之後生效。</dd>
+</dlentry><dlentry>
<dt>儲存體</dt>
-<dd>顯示用於安裝的 ISO 檔案的位置。</dd>
+<dd>顯示選定客體的儲存裝置及路徑。
+您可以新增、編輯和移除客體的儲存裝置。</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>介面</dt>
+<dd>顯示客體的網路資訊,其中包括名稱、類型及 MAC 位址。
+您可以新增、編輯和移除客體的介面。</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>許可權</dt>
+<dd>顯示對客體進行授權的使用者和群組。</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>主機 PCI 裝置</dt>
+<dd>顯示主機上可用的所有 PCI 裝置清單。</dd>
+</dlentry></dl>
+<dl><dlentry>
+<dt>Snapshot</dt>
+<dd>顯示客體的 Snapshot。您可以建立、編輯或刪除 Snapshot。
+透過選取 Snapshot 並選取回復,可以將客體還原至過去的某個點(由 Snapshot 資料決定),並捨棄該復原點之後所做的任何變更。
+</dd>
</dlentry></dl>
<p> 可以編輯未停用的欄位。編輯欄位之後,按一下<uicontrol>儲存</uicontrol>。</p>
</csbody>
</cshelp>
-<cshelp id="kimstoragedevice" xml:lang="zh-tw">
-<title>新增、取代或分離儲存裝置</title>
-<shortdesc rev="rev1">您可以新增、取代或分離虛擬機器的儲存裝置。唯一受支援的裝置是 CDROM。若要編輯儲存裝置,請遵循下列步驟:</shortdesc>
+<cshelp id="kimhvirtmclone" xml:lang="zh-tw">
+<title>複製客體</title>
+<shortdesc>複製客體容許您建立客體的副本。</shortdesc>
<csbody>
+<p>如果要複製客體,請執行下列動作:</p>
<ol>
-<li>在「<wintitle>編輯客體</wintitle>」視窗上,選取「<wintitle>儲存體</wintitle>」。</li>
-<li>若要取代儲存裝置,請按一下含有<uicontrol>橙色斜線 (/)</uicontrol> 的第一個圖示。輸入
-ISO 檔案路徑,然後按一下<uicontrol>取代</uicontrol>。</li>
-<li>若要分離儲存裝置,請按一下含有<uicontrol>紅色斜線 (/)</uicontrol> 的第二個圖示。確認刪除,然後按一下<uicontrol>確定</uicontrol>。</li>
-<li>若要新增儲存裝置,請按一下含有綠色<uicontrol>加號 (+)</uicontrol> 的第三個圖示。輸入裝置名稱及
-ISO 檔案路徑,然後按一下<uicontrol>連接</uicontrol>。</li>
-</ol>
-</csbody>
-</cshelp>
-<cshelp id="kimreplacemedia" xml:lang="zh-tw">
-<title>取代虛擬機器的 CDROM</title>
-<shortdesc rev="rev1">安裝完成之後,您可以取代虛擬機器的 CDROM 的內容。</shortdesc>
-<csbody>
-<ol>
-<li>確定虛擬機器已啟動。</li>
-<li>從「動作」功能表中,選取<uicontrol>管理媒體</uicontrol>。</li>
-<li>若要變更目前在 CDROM 中加載的內容,請按一下 hdc 欄位旁邊的<uicontrol>橙色斜線 (/)</uicontrol> 圖示。</li>
-<li>在「<wintitle>取代虛擬機器的 CDROM</wintitle>」頁面上,輸入 ISO 檔案路徑。另外兩個欄位是唯讀的。</li>
-<li>按一下<uicontrol>取代</uicontrol>。</li>
+<li>從客體的「動作」功能表中,選取<uicontrol>複製</uicontrol>。
+</li>
+<li>接受警告。<note>當目標客體正在使用 SCSI 或 iSCSI 磁區時,或者如果目標儲存區沒有足夠的空間,則會在預設儲存區上建立複製。
+</note></li>
</ol>
+<p>一個客體會出現在清單中,並具有標籤<uicontrol>正在複製...</uicontrol>。當該過程完成後,所複製的客體即可供使用。
+</p>
+
</csbody>
</cshelp>
<?tm 1391540919 3?>
</cshelp>
-<!-- ENGL1SH_VERS10N 45645_6 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 04963_6 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 231 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/zh_TW/host.dita b/ui/pages/help/zh_TW/host.dita
index a55aae4..550945e 100644
--- a/ui/pages/help/zh_TW/host.dita
+++ b/ui/pages/help/zh_TW/host.dita
@@ -16,13 +16,13 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<li>選取<uicontrol>重新啟動</uicontrol>以重新啟動主機系統。</li>
<li>選取<uicontrol>連接</uicontrol>以開啟與主機系統的 VNC 連線(如果尚未連線到主機系統)。</li>
</ul></p>
-<p>按一下下列區段以顯示主機的相關資訊:<dl>
-<dlentry>
+<p>按一下下列區段以顯示主機的相關資訊:</p>
+<dl><dlentry>
<dt>基本資訊</dt>
-<dd>此區段會顯示主機作業系統發行套件、版本、程式碼名稱、處理器類型以及記憶體數量 (GB)。</dd>
+<dd>此區段會顯示主機作業系統發行套件、版本、程式碼名稱以及處理器類型、線上 CPU 數目和記憶體數量 (GB)。</dd>
</dlentry><dlentry>
<dt>系統統計資料</dt>
-<dd>此區段會顯示一些圖形,以顯示主機的 CPU、記憶體、磁碟 I/O 和網路 I/O 的統計資料。選取<uicontrol>離開此頁面之後收集資料</uicontrol>以在主機標籤從視線中消失之後繼續收集資料。</dd>
+<dd>此區段會顯示一些圖形,以顯示主機的 CPU、記憶體、磁碟 I/O 和網路 I/O 的統計資料。</dd>
</dlentry><dlentry>
<dt>軟體更新</dt>
<dd>此區段會顯示具有可用更新的所有套件的相關資訊,包括套件名稱、版本、架構和儲存庫。您可以透過選取<uicontrol>全部更新</uicontrol>來更新所有列出的套件。不能選取個別套件以進行更新。</dd>
@@ -31,20 +31,19 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<dd>此區段會顯示與主機系統相關聯的儲存庫。您可以新增、啟用、編輯或移除儲存庫。新增儲存庫可使它與主機系統相關聯,而啟用儲存庫則容許主機存取儲存庫。如果您的系統是
Red Hat Enterprise Linux 或 Fedora,則可以新增 <filepath>yum</filepath> 儲存庫。如果您的系統是
Ubuntu 或 Debian,則可以新增 <filepath>deb</filepath> 儲存庫。<p>如果您正在使用
-yum 儲存庫,則可以新增 GPG 檢查以驗證此儲存庫中的某個套件是否未毀損。選取儲存庫,然後選取<uicontrol>編輯</uicontrol>。選取<uicontrol>是</uicontrol>以啟用
-GPG 檢查,然後輸入儲存庫的 GPG 金鑰檔的 URL。</p></dd>
+yum 儲存庫,則可以新增 GPG 檢查以驗證此儲存庫中的某個套件是否未毀損。選取儲存庫,然後選取<uicontrol>編輯</uicontrol>。選取<uicontrol>是</uicontrol>以啟用 <uicontrol>GPG 檢查</uicontrol>,然後輸入儲存庫的 GPG 金鑰檔的 URL。</p></dd>
</dlentry><dlentry>
<dt>除錯報告</dt>
<dd>此區段顯示除錯報告,包括名稱和檔案路徑。您可以選取選項以產生新報告、或是重新命名、移除或下載現有報告。<p>除錯報告是使用
<cmdname>sosreport</cmdname> 指令產生的。該指令可用於 Red
Hat Enterprise <tm tmtype="tm" trademark="Linux">Linux</tm>、Fedora
及 Ubuntu 發行套件。該指令會產生 .tar 檔案,其包含配置與診斷資訊,例如執行中的核心版本、已載入模組以及系統和服務配置檔案。該指令還會執行外部程式來收集更多資訊並將此輸出儲存在產生的保存檔中。</p> </dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
<?tm 1392659967 1?>
</cshelp>
-<!-- ENGL1SH_VERS10N 47930_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42248_4 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 232 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/zh_TW/network.dita b/ui/pages/help/zh_TW/network.dita
index f392060..7c2926b 100644
--- a/ui/pages/help/zh_TW/network.dita
+++ b/ui/pages/help/zh_TW/network.dita
@@ -31,7 +31,8 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<li rev="rev1">選取<uicontrol>開始</uicontrol>以開始網路連線。</li>
<li>選取<uicontrol>停止</uicontrol>以結束網路連線。</li>
<li>選取<uicontrol>刪除</uicontrol>以刪除連線資訊。</li>
-</ul>若要建立網路,請按一下顯示畫面右上方的<uicontrol>加號 (+)</uicontrol> 圖示。</p>
+</ul>如果要建立網路,請按一下<uicontrol>加號 (+)</uicontrol> 圖示。
+</p>
</csbody>
<cshelp id="kimhnetwcrt" xml:lang="zh-tw">
<title>建立網路</title>
@@ -56,6 +57,6 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
</cshelp>
-<!-- ENGL1SH_VERS10N 47050_3 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 42005_3 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 230 -->
-<!-- T9N_SH1P_STR1NG KVM21AAP001 3 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/zh_TW/storage.dita b/ui/pages/help/zh_TW/storage.dita
index 971619c..ff3ab95 100644
--- a/ui/pages/help/zh_TW/storage.dita
+++ b/ui/pages/help/zh_TW/storage.dita
@@ -14,7 +14,10 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<p>對於每一個儲存區,將會顯示下列資訊:<dl>
<dlentry>
<dt>名稱</dt>
-<dd>儲存區的名稱及已使用百分比。</dd>
+<dd>儲存區的名稱。</dd>
+</dlentry><dlentry>
+<dt>已使用百分比</dt>
+<dd>所使用的儲存區百分比。</dd>
</dlentry><dlentry>
<dt>狀態</dt>
<dd>儲存區的狀態:作用中(綠色)或非作用中(紅色)。</dd>
@@ -34,21 +37,12 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<p>可針對每一個儲存區選取下列動作:<ul>
<li>選取<uicontrol>啟動</uicontrol>可啟動儲存區,使之可供使用。</li>
<li>選取<uicontrol>取消啟動</uicontrol>可取消啟動作用中的儲存區。</li>
+<li>選取<uicontrol>新增磁區</uicontrol>可將其他磁區新增至作用中的儲存區。
+</li>
<li>選取<uicontrol>取消定義</uicontrol>可移除非使用中的儲存區。</li>
</ul></p>
-<p>若要顯示儲存區的儲存磁區詳細資料,請按一下儲存區列右側的箭頭。詳細資料包括下列各項:<dl><dlentry>
-<dt>類型</dt>
-<dd>磁區的類型,例如,<uicontrol>檔案</uicontrol>。</dd>
-</dlentry><dlentry>
-<dt>格式</dt>
-<dd>格式,因類型而異。</dd>
-</dlentry><dlentry>
-<dt>容量</dt>
-<dd>儲存磁區的大小。</dd>
-</dlentry><dlentry>
-<dt>配置</dt>
-<dd>儲存區中已配置的空間數量。</dd>
-</dlentry></dl>若要定義儲存區,請按一下顯示畫面右上方的<uicontrol>加號 (+)</uicontrol> 圖示。</p>
+<p>若要顯示儲存區的儲存磁區詳細資料,請按一下儲存區列右側的箭頭。如果要定義儲存區,請按一下<uicontrol>加號 (+)</uicontrol> 圖示。
+</p>
</csbody>
<cshelp id="kimhdefstor" xml:lang="zh-tw">
<title>定義儲存區</title>
@@ -76,13 +70,29 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<dt><uicontrol>SCSI 光纖通道</uicontrol></dt>
<dd>根據 SCSI 光纖通道指定儲存區。選取要使用的 SCSI 配接卡。</dd>
</dlentry></dl></li>
+<li>指定儲存區的儲存體路徑。儲存體路徑是本端檔案系統中將儲存區對映至的位置。
+該路徑必須是唯一的。建立儲存區時,如果該目錄不存在,則將為您建立該目錄。
+</li>
<li>按一下<uicontrol>建立</uicontrol>。</li>
</ol> </p>
</csbody>
</cshelp>
+<cshelp id="kimhdefstor" xml:lang="zh-tw">
+<title>新增磁區</title>
+<shortdesc>將磁區新增至儲存區。</shortdesc>
+<csbody>
+<dl><dlentry>
+<dt>從遠端 URL 提取</dt>
+<dd>指定從其下載磁區的位置。例如:<filepath>https://my-server/fedora22.img</filepath>。</dd>
+</dlentry><dlentry>
+<dt>上傳檔案</dt>
+<dd>指定本端系統上的某個位置。</dd>
+</dlentry></dl>
+</csbody>
+</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 22336_4 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 52145_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 233 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
diff --git a/ui/pages/help/zh_TW/templates.dita b/ui/pages/help/zh_TW/templates.dita
index 4b3a6a6..38617a8 100644
--- a/ui/pages/help/zh_TW/templates.dita
+++ b/ui/pages/help/zh_TW/templates.dita
@@ -12,8 +12,8 @@ https://w3.opensource.ibm.com/projects/dita-cshelp/-->
<shortdesc>「<wintitle>範本</wintitle>」頁面會顯示可用來建立
KVM 客體的已定義虛擬機器範本。</shortdesc>
<csbody>
-<p>對於每一個範本,將會顯示下列資訊:<dl>
-<dlentry>
+<p>對於每一個範本,將會顯示下列資訊:</p>
+<dl><dlentry>
<dt>OS</dt>
<dd>作業系統的名稱或發行套件的名稱。</dd>
</dlentry><dlentry>
@@ -25,66 +25,63 @@ KVM 客體的已定義虛擬機器範本。</shortdesc>
</dlentry><dlentry>
<dt>記憶體</dt>
<dd>要配置的隨機存取記憶體數量 (MB)。</dd>
-</dlentry></dl></p>
-<p>可針對每一個範本選取下列動作:<ul>
+</dlentry></dl>
+<p>可針對每一個範本選取下列動作:</p>
+<ul>
<li>選取<uicontrol>編輯</uicontrol>可編輯範本。</li>
+<li>選取<uicontrol>複製</uicontrol>可複製範本。</li>
<li>選取<uicontrol>刪除</uicontrol>可刪除範本。</li>
-</ul>若要建立範本,請按一下顯示畫面右上方的<uicontrol>加號 (+)</uicontrol> 圖示。</p>
+</ul>
+<p>如果要新增範本,請按一下<uicontrol>加號 (+)</uicontrol> 圖示。
+</p>
</csbody>
<cshelp id="kimhedittempl" xml:lang="zh-tw">
<title>編輯範本</title>
<shortdesc>編輯現有範本。</shortdesc>
<csbody>
-<p>對於每一個範本,將會顯示下列資訊:<dl>
-<dlentry>
-<dt>名稱</dt>
-<dd>範本的名稱。</dd>
+<p>對於每一個範本,將會顯示下列資訊:</p>
+<dl><dlentry>
+<dt>一般</dt>
+<dd>顯示名稱、供應商分佈、版本、記憶體、ISO 檔的檔案路徑及圖形喜好設定。
+</dd>
</dlentry><dlentry>
-<dt>供應商</dt>
-<dd>建立配置給範本使用之作業系統或發行套件的公司的名稱。</dd>
+<dt>儲存體</dt>
+<dd>指定範本的儲存區資訊。</dd>
</dlentry><dlentry>
-<dt>版本</dt>
-<dd>配置給範本使用之作業系統或發行套件的版本。</dd>
-</dlentry><dlentry>
-<dt>CPU 數目</dt>
-<dd>為範本定義的處理器數目。</dd>
-</dlentry><dlentry>
-<dt>記憶體</dt>
-<dd>要配置給虛擬機器的記憶體數量 (MB)。</dd>
+<dt>介面</dt>
+<dd>顯示可用於 KVM 客體的預設網路介面。
+您可以選取多個網路。</dd>
</dlentry><dlentry>
-<dt>磁碟</dt>
-<dd>磁碟大小 (GB)。</dd>
-</dlentry><dlentry>
-<dt>CDROM</dt>
-<dd>用來安裝 KVM 客體之 ISO 檔案位置的檔案路徑。</dd>
-</dlentry><dlentry>
-<dt>儲存區</dt>
-<dd>特定儲存區或預設儲存區。</dd>
-</dlentry><dlentry>
-<dt>網路</dt>
-<dd>KVM 客體可使用的預設網路介面。您可以選取多個網路。</dd>
-</dlentry></dl> 可以編輯未停用的欄位。編輯欄位之後,按一下<uicontrol>儲存</uicontrol>。</p>
+<dt>處理器</dt>
+<dd>在 <uicontrol>CPU 數目</uicontrol>欄位中,指定為範本定義的處理器數目。
+</dd>
+<dd>選取此項以手動設定每一個客體的 CPU 拓蹼。</dd>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddtempl">
<title>新增範本</title>
<shortdesc>從來源媒體中新增範本。您可以將自己的 ISO 映像檔新增至 'ISO' 儲存區,以進行下列探索。</shortdesc>
<csbody>
-<p>從下列選項中選取來源媒體的位置:<dl>
-<dlentry>
+<p>從下列選項中選取來源媒體的位置:</p>
+<dl><dlentry>
<dt>本端 ISO 映像檔</dt>
<dd>選取此項可掃描儲存區以取得系統上可用的安裝 ISO 映像檔。</dd>
</dlentry><dlentry>
+<dt>本端映像檔</dt>
+<dd>選取此項以指定本端映像檔的路徑。</dd>
+</dlentry><dlentry>
<dt>遠端 ISO 映像檔</dt>
<dd>選取此項可指定安裝 ISO 映像檔的遠端位置。</dd>
-</dlentry></dl></p>
+</dlentry></dl>
</csbody>
</cshelp>
<cshelp id="kimhaddloct">
-<title>新增範本 - 本端 ISO 映像檔</title>
-<shortdesc>從本端 ISO 映像檔新增範本。</shortdesc>
+<title>新增範本 - ISO 映像檔</title>
+<shortdesc>從 ISO 映像檔新增範本。</shortdesc>
<csbody>
-<p>將會顯示系統上可用的 ISO 映像檔。<dl><dlentry>
+<p>將從遠端顯示系統上可用的 ISO 映像檔。</p>
+<dl><dlentry>
<dt>OS</dt>
<dd>作業系統的名稱或發行套件的名稱。</dd>
</dlentry><dlentry>
@@ -93,20 +90,21 @@ KVM 客體的已定義虛擬機器範本。</shortdesc>
</dlentry><dlentry>
<dt>大小</dt>
<dd>ISO 映像檔的大小。</dd>
-</dlentry></dl></p>
-<p>若要從 ISO 映像檔建立範本,請從下列選項中選擇:<ul>
+</dlentry></dl>
+<p>若要從 ISO 映像檔建立範本,請從下列選項中選擇:</p>
+<ul>
<li>選取要用來建立範本的 ISO 映像檔,然後按一下<uicontrol>從所選 ISO 建立範本</uicontrol>。</li>
<li>選取<uicontrol>全部</uicontrol>以從每一個列出的 ISO 映像檔建立範本,然後按一下<uicontrol>從所選 ISO 建立範本</uicontrol>。</li>
<li>如要要使用的 ISO 映像檔未出現在掃描結果中,則可以從下列選項中選擇:<ul>
<li>選取<uicontrol>我想使用特定的 ISO 檔案</uicontrol>以指定 ISO 映像檔的路徑。</li>
<li>按一下<uicontrol>搜尋更多 ISO</uicontrol> 以搜尋更多 ISO 映像檔。</li>
</ul></li>
-</ul></p>
+</ul>
</csbody>
</cshelp>
</cshelp>
-<!-- ENGL1SH_VERS10N 61085_5 DO NOT REMOVE OR CHANGE THIS LINE -->
+<!-- ENGL1SH_VERS10N 24458_5 DO NOT REMOVE OR CHANGE THIS LINE -->
<!-- T9N_SRC_ID 229 -->
-<!-- T9N_SH1P_STR1NG KV211AAP001 1 -->
+<!-- T9N_SH1P_STR1NG KV310AAP001 1 -->
--
2.4.3
3
2
04 Aug '15
- Sometimes the run_command caller doesn't want to have a failure
logged as error, since such failure can be expected. This patch adds
an option in run_command to log errors in debug mode to avoid give
false positives to users.
Jose Ricardo Ziviani (2):
Add option 'silent' in run_command
Change getsebool to run silently.
src/kimchi/model/vmhostdevs.py | 3 ++-
src/kimchi/utils.py | 14 +++++++++++---
2 files changed, 13 insertions(+), 4 deletions(-)
--
1.9.1
4
5
[PATCH] vmHostDevModel: returning 'product' and 'vendor' in lookup
by dhbarboza82@gmail.com 04 Aug '15
by dhbarboza82@gmail.com 04 Aug '15
04 Aug '15
From: Daniel Henrique Barboza <dhbarboza82(a)gmail.com>
The 'getVMCPIDevices' API was missing these infos that are
present in other API calls such as getAllAvailableDevices.
Signed-off-by: Daniel Henrique Barboza <dhbarboza82(a)gmail.com>
---
src/kimchi/model/vmhostdevs.py | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/kimchi/model/vmhostdevs.py b/src/kimchi/model/vmhostdevs.py
index 9a7d03b..a9f6d77 100644
--- a/src/kimchi/model/vmhostdevs.py
+++ b/src/kimchi/model/vmhostdevs.py
@@ -217,10 +217,15 @@ class VMHostDevModel(object):
raise NotFoundError('KCHVMHDEV0001E',
{'vmid': vmid, 'dev_name': dev_name})
+ dev_model = DeviceModel(conn=self.conn)
for e in hostdev:
deduced_name = DeviceModel.deduce_dev_name(e, self.conn)
if deduced_name == dev_name:
- return {'name': dev_name, 'type': e.attrib['type']}
+ dev_info = dev_model.lookup(dev_name)
+ return {'name': dev_name,
+ 'type': e.attrib['type'],
+ 'product': dev_info.get('product', None),
+ 'vendor': dev_info.get('vendor', None)}
raise NotFoundError('KCHVMHDEV0001E',
{'vmid': vmid, 'dev_name': dev_name})
--
2.4.3
4
3
Instead of sorting user each interaction, wait UI to create all nodes
and then, sort items.
Signed-off-by: Ramon Medeiros <ramonn(a)linux.vnet.ibm.com>
---
ui/js/src/kimchi.guest_edit_main.js | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/ui/js/src/kimchi.guest_edit_main.js b/ui/js/src/kimchi.guest_edit_main.js
index 7671e43..f71ba3b 100644
--- a/ui/js/src/kimchi.guest_edit_main.js
+++ b/ui/js/src/kimchi.guest_edit_main.js
@@ -375,23 +375,23 @@ kimchi.guest_edit_main = function() {
for(var i=0; i<availUsers.length; i++){
initNode(availUsers[i], true);
$("#permission-avail-users").append(userNodes[availUsers[i]]);
- sortNodes($("#permission-avail-users"), true);
}
+ sortNodes($("#permission-avail-users"), true);
for(var i=0; i<selUsers.length; i++){
initNode(selUsers[i], true);
$("#permission-sel-users").append(userNodes[selUsers[i]]);
- sortNodes($("#permission-sel-users"), true);
}
+ sortNodes($("#permission-sel-users"), true);
for(var i=0; i<availGroups.length; i++){
initNode(availGroups[i], false);
$("#permission-avail-groups").append(groupNodes[availGroups[i]]);
- sortNodes($("#permission-avail-groups"), false);
}
+ sortNodes($("#permission-avail-groups"), false);
for(var i=0; i<selGroups.length; i++){
initNode(selGroups[i], false);
$("#permission-sel-groups").append(groupNodes[selGroups[i]]);
- sortNodes($("#permission-sel-groups"), false);
}
+ sortNodes($("#permission-sel-groups"), false);
};
var filterNodes = function(key, container){
container.children().each(function(){
--
2.1.0
3
3
04 Aug '15
- When using a backing image as template the target must be a qcow2
image.
Signed-off-by: Jose Ricardo Ziviani <joserz(a)linux.vnet.ibm.com>
---
src/kimchi/vmtemplate.py | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py
index 2646573..a165a5d 100644
--- a/src/kimchi/vmtemplate.py
+++ b/src/kimchi/vmtemplate.py
@@ -232,12 +232,18 @@ class VMTemplate(object):
v_tree = E.volume(E.name(info['name']))
v_tree.append(E.allocation(str(info['allocation']), unit='G'))
v_tree.append(E.capacity(str(info['capacity']), unit='G'))
- target = E.target(
- E.format(type=info['format']), E.path(info['path']))
+
+ target_fmt = info['format']
if 'base' in d:
+ # target must be qcow2 in order to use a backing file
+ target_fmt = 'qcow2'
+
v_tree.append(E.backingStore(
E.path(info['base']['path']),
E.format(type=info['base']['format'])))
+
+ target = E.target(
+ E.format(type=target_fmt), E.path(info['path']))
v_tree.append(target)
info['xml'] = etree.tostring(v_tree)
ret.append(info)
--
1.9.1
3
3
Allow to only be able to add PCI device that is not attached to a VM
All filter now shows only those PCI devices that are available to be added
and ones that are already attached to a VM.
Signed-off-by: Socorro Stoppler <socorro(a)linux.vnet.ibm.com>
---
ui/js/src/kimchi.guest_edit_main.js | 166 +++++++++++++++++++-----------------
1 file changed, 88 insertions(+), 78 deletions(-)
diff --git a/ui/js/src/kimchi.guest_edit_main.js b/ui/js/src/kimchi.guest_edit_main.js
index 7671e43..a07f938 100644
--- a/ui/js/src/kimchi.guest_edit_main.js
+++ b/ui/js/src/kimchi.guest_edit_main.js
@@ -429,81 +429,7 @@ kimchi.guest_edit_main = function() {
filterNodes("", $("#permission-avail-groups"));
});
}
- var setupPCIDevice = function(){
- kimchi.getHostPCIDevices(function(hostPCIs){
- kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs){
- var pciEnabled = kimchi.capabilities.kernel_vfio;
- for(var i=0; i<hostPCIs.length; i++){
- var itemNode = $.parseHTML(kimchi.substitute($('#pci-tmpl').html(),{
- name: hostPCIs[i].name,
- product: hostPCIs[i].product.description,
- vendor: hostPCIs[i].vendor.description
- }));
- $(".body", "#form-guest-edit-pci").append(itemNode);
- var iconClass = "ui-icon-plus";
- for(var j=0; j<vmPCIs.length; j++){
- if(hostPCIs[i].name==vmPCIs[j].name){
- iconClass = "ui-icon-minus";
- break;
- }
- }
- pciEnabled || $("button", itemNode).remove();
- $("button", itemNode).button({
- icons: { primary: iconClass },
- text: false
- }).click(function(){
- var obj = $(this);
- if(obj.button("option", "icons").primary == "ui-icon-minus"){
- kimchi.removeVMPCIDevice(kimchi.selectedGuest, obj.parent().prop("id"), function(){
- kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){
- for(var k=0; k<hostPCIs.length; k++) {
- $("button", "#" + hostPCIs[k].name).button("option", "icons", {primary: "ui-icon-plus"});
- }
- for(var k=0; k<vmPCIs1.length; k++) {
- $("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"});
- }
- });
- filterNodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val());
- });
- } else {
- kimchi.addVMPCIDevice(kimchi.selectedGuest, { name: obj.parent().prop("id") }, function(){
- kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){
- for(var k=0; k<vmPCIs1.length; k++) {
- $("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"});
- }
- });
- filterNodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val());
- });
- }
- });
- kimchi.getPCIDeviceCompanions(hostPCIs[i].name, function(infoData) {
- var pciTitle = i18n["KCHVMED6007M"] + "\n";
- var haveCompanions = false;
- for(var p=0; p<infoData.length; p++) {
- if(infoData[p].device_type === "net") {
- haveCompanions = true;
- pciTitle += " " + infoData[p].name + "\n";
- pciTitle += " " + i18n["KCHVMED6001M"] + " " + infoData[p].interface;
- pciTitle += ", " + i18n["KCHVMED6002M"] + " " + infoData[p].address;
- pciTitle += ", " + i18n["KCHVMED6003M"] + " " + infoData[p].link_type + "\n";
- } else if(infoData[p].device_type === "storage") {
- haveCompanions = true;
- pciTitle += " " + infoData[p].name + "\n";
- pciTitle += " " + i18n["KCHVMED6004M"] + " " + infoData[p].block;
- pciTitle += ", " + i18n["KCHVMED6005M"] + " " + infoData[p].drive_type;
- pciTitle += ", " + i18n["KCHVMED6006M"] + " " + infoData[p].model + "\n";
- }
- }
- for(var q=0; q<infoData.length; q++) {
- haveCompanions && $(".name", "#" + infoData[q].parent).attr("title", pciTitle);
- haveCompanions && $(".product", "#" + infoData[q].parent).attr("title", pciTitle);
- haveCompanions && $(".vendor", "#" + infoData[q].parent).attr("title", pciTitle);
- }
- });
- }
- });
- });
- var filterNodes = function(group, text){
+ var filterPCINodes = function(group, text){
text = text.toLowerCase();
$(".body", "#form-guest-edit-pci").children().each(function(){
var textFilter = $(".name", this).text().toLowerCase().indexOf(text)!=-1;
@@ -522,15 +448,99 @@ kimchi.guest_edit_main = function() {
}
$(this).css("display", display);
});
- };
+ }
+ var setupPCIDevice = function(){
+ kimchi.getAvailableHostPCIDevices(function(hostPCIs){
+ kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs){
+ setupNode(hostPCIs, "ui-icon-plus");
+ setupNode(vmPCIs, "ui-icon-minus");
+ });
+ });
$("select", "#form-guest-edit-pci").change(function(){
- filterNodes($(this).val(), $("input", "#form-guest-edit-pci").val());
+ filterPCINodes($(this).val(), $("input", "#form-guest-edit-pci").val());
});
$("input", "#form-guest-edit-pci").on("keyup", function() {
- filterNodes($("select", "#form-guest-edit-pci").val(), $(this).val());
+ filterPCINodes($("select", "#form-guest-edit-pci").val(), $(this).val());
});
};
+ var setupNode = function(arrPCIDevices, iconClass) {
+ var pciEnabled = kimchi.capabilities.kernel_vfio;
+ var pciDeviceName, pciDeviceProduct, pciDeviceProductDesc, pciDeviceVendor, pciDeviceVendorDesc;
+ for(var i=0; i<arrPCIDevices.length; i++){
+ pciDeviceName = arrPCIDevices[i].name;
+ pciDeviceProduct = arrPCIDevices[i].product;
+ pciDeviceVendor = arrPCIDevices[i].vendor;
+ if(pciDeviceProduct!=null) {
+ pciDeviceProductDesc = pciDeviceProduct.description;
+ }
+ if(pciDeviceVendor!=null) {
+ pciDeviceVendorDesc = pciDeviceVendor.description;
+ }
+ var itemNode = $.parseHTML(kimchi.substitute($('#pci-tmpl').html(),{
+ name: pciDeviceName,
+ product: pciDeviceProductDesc,
+ vendor: pciDeviceVendorDesc
+ }));
+ $(".body", "#form-guest-edit-pci").append(itemNode);
+ pciEnabled || $("button", itemNode).remove();
+ $("button", itemNode).button({
+ icons: { primary: iconClass },
+ text: false
+ }).click(function(){
+ var obj = $(this);
+ if(obj.button("option", "icons").primary == "ui-icon-minus"){
+ kimchi.removeVMPCIDevice(kimchi.selectedGuest, obj.parent().prop("id"), function(){
+ kimchi.getAvailableHostPCIDevices(function(arrPCIDevices1){
+ kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){
+ for(var k=0; k<arrPCIDevices1.length; k++) {
+ $("button", "#" + arrPCIDevices1[k].name).button("option", "icons", {primary: "ui-icon-plus"});
+ }
+ for(var k=0; k<vmPCIs1.length; k++) {
+ $("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"});
+ }
+ });
+ });
+ filterPCINodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val());
+ });
+ } else {
+ kimchi.addVMPCIDevice(kimchi.selectedGuest, { name: obj.parent().prop("id") }, function(){
+ kimchi.getVMPCIDevices(kimchi.selectedGuest, function(vmPCIs1){
+ for(var k=0; k<vmPCIs1.length; k++) {
+ $("button", "#" + vmPCIs1[k].name).button("option", "icons", {primary: "ui-icon-minus"});
+ }
+ });
+ filterPCINodes($("select", "#form-guest-edit-pci").val(), $("input", "#form-guest-edit-pci").val());
+ });
+ }
+ });
+ kimchi.getPCIDeviceCompanions(pciDeviceName, function(infoData) {
+ var pciTitle = i18n["KCHVMED6007M"] + "\n";
+ var haveCompanions = false;
+ for(var p=0; p<infoData.length; p++) {
+ if(infoData[p].device_type === "net") {
+ haveCompanions = true;
+ pciTitle += " " + infoData[p].name + "\n";
+ pciTitle += " " + i18n["KCHVMED6001M"] + " " + infoData[p].interface;
+ pciTitle += ", " + i18n["KCHVMED6002M"] + " " + infoData[p].address;
+ pciTitle += ", " + i18n["KCHVMED6003M"] + " " + infoData[p].link_type + "\n";
+ } else if(infoData[p].device_type === "storage") {
+ haveCompanions = true;
+ pciTitle += " " + infoData[p].name + "\n";
+ pciTitle += " " + i18n["KCHVMED6004M"] + " " + infoData[p].block;
+ pciTitle += ", " + i18n["KCHVMED6005M"] + " " + infoData[p].drive_type;
+ pciTitle += ", " + i18n["KCHVMED6006M"] + " " + infoData[p].model + "\n";
+ }
+ }
+ for(var q=0; q<infoData.length; q++) {
+ haveCompanions && $(".name", "#" + infoData[q].parent).attr("title", pciTitle);
+ haveCompanions && $(".product", "#" + infoData[q].parent).attr("title", pciTitle);
+ haveCompanions && $(".vendor", "#" + infoData[q].parent).attr("title", pciTitle);
+ }
+ });
+ }
+ };
+
var setupSnapshot = function() {
var currentSnapshot;
var setCurrentSnapshot = function(aSnapshot){
--
1.8.3.1
4
3
04 Aug '15
v3:
- Changed test case to check if new VMs has a xhci controller;
- Made have_xhci_usb_controller public to test it.
v2:
- Added a new test case.
Power system requires an USB XHCI controller in order to allow PCI
hotplug. This patch adds such controller by default when creating a new
VM and inform the users if a VM currently doesn't have the controller.
Jose Ricardo Ziviani (4):
Add a new error code for pci hotplug
Check for usb xhci controller in Power platform
Define the USB xhci controller in the template for Power Systems
Add a new test case for pci hotplug on Power
src/kimchi/i18n.py | 1 +
src/kimchi/model/vmhostdevs.py | 30 +++++++++++++++++++++++++++++-
src/kimchi/vmtemplate.py | 17 +++++++++++++++++
tests/test_model.py | 27 +++++++++++++++++++++++++++
4 files changed, 74 insertions(+), 1 deletion(-)
--
1.9.1
3
7
03 Aug '15
After separating out Kimchi as an indvidual plugin from the base
framework it would be great to have a clean separation between Host- and
Virtualization Management functions. I'm planning to work on this topic
in the next few weeks and have prepared a proposal of the functionsplit.
Plugin functionality:
- Ginger:
- Basic Information
- System Statistics
- Network (Host NICs)
- Storage/SAN (Host Storage)
- User Management
- Configuration Backup
- Software Updates
- Repositories
- Debug Reports
- PPC related functions: Firmware Update & Power Management
- Kimchi:
- Templates
- Guests
- Networks (virtual)
- Storage (Pools for VMs)
Since there are plans to restructure the UI for one of the next
releases, I'm proposing to do only some minimal investments in
reflecting this new finctionsplit. Therefore I'm proposing to make the
Host tab as the one and only Tab for Ginger and move everything from the
Administration Tab into the Host Tab. This would be just an
intermediate solution till we implement the new UI design. Please see
the attached PDF.
Thanks in advance for your feedback.
Walter.
2
1